summaryrefslogtreecommitdiff
path: root/tests/test_option.py
blob: 1dc496a08d7eccd90cf031283c896f5b1256e6e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/env python

import unittest

from gi.repository import GLib

from .helper import capture_exceptions


class TestOption(unittest.TestCase):

    def setUp(self):
        self.parser = GLib.option.OptionParser("NAMES...",
                                               description="Option unit test")
        self.parser.add_option("-t", "--test", help="Unit test option",
                               action="store_false", dest="test", default=True)
        self.parser.add_option("--g-fatal-warnings",
                               action="store_true",
                               dest="fatal_warnings",
                               help="dummy"),

    def _create_group(self):
        def option_callback(option, opt, value, parser):
            raise Exception("foo")

        group = GLib.option.OptionGroup(
            "unittest", "Unit test options", "Show all unittest options",
            option_list=[
                GLib.option.make_option("-f", "-u", "--file", "--unit-file",
                                        type="filename",
                                        dest="unit_file",
                                        help="Unit test option"),
                GLib.option.make_option("--test-integer",
                                        type="int",
                                        dest="test_integer",
                                        help="Unit integer option"),
                GLib.option.make_option("--callback-failure-test",
                                        action="callback",
                                        callback=option_callback,
                                        dest="test_integer",
                                        help="Unit integer option"),
            ])
        group.add_option("-t", "--test",
                         action="store_false",
                         dest="test",
                         default=True,
                         help="Unit test option")
        self.parser.add_option_group(group)
        return group

    def test_integer(self):
        self._create_group()
        options, args = self.parser.parse_args(
            ["--test-integer", "42", "bla"])
        assert options.test_integer == 42
        assert args == ["bla"]

    def test_file(self):
        self._create_group()

        options, args = self.parser.parse_args(
            ["--file", "fn", "bla"])
        assert options.unit_file == "fn"
        assert args == ["bla"]

    def test_mixed(self):
        self._create_group()

        options, args = self.parser.parse_args(
            ["--file", "fn", "--test-integer", "12", "--test",
             "--g-fatal-warnings", "nope"])

        assert options.unit_file == "fn"
        assert options.test_integer == 12
        assert options.test is False
        assert options.fatal_warnings is True
        assert args == ["nope"]

    def test_parse_args(self):
        options, args = self.parser.parse_args([])
        self.assertFalse(args)

        options, args = self.parser.parse_args(["foo"])
        self.assertEqual(args, ["foo"])

        options, args = self.parser.parse_args(["foo", "bar"])
        self.assertEqual(args, ["foo", "bar"])

    def test_parse_args_double_dash(self):
        options, args = self.parser.parse_args(["--", "-xxx"])
        self.assertEqual(args, ["--", "-xxx"])

    def test_parse_args_group(self):
        group = self._create_group()

        options, args = self.parser.parse_args(
            ["--test", "-f", "test"])

        self.assertFalse(options.test)
        self.assertEqual(options.unit_file, "test")

        self.assertTrue(group.values.test)
        self.assertFalse(self.parser.values.test)
        self.assertEqual(group.values.unit_file, "test")
        self.assertFalse(args)

    def test_option_value_error(self):
        self._create_group()
        self.assertRaises(GLib.option.OptionValueError, self.parser.parse_args,
                          ["--test-integer=text"])

    def test_bad_option_error(self):
        self.assertRaises(GLib.option.BadOptionError,
                          self.parser.parse_args,
                          ["--unknwon-option"])

    def test_option_group_constructor(self):
        self.assertRaises(TypeError, GLib.option.OptionGroup)

    def test_standard_error(self):
        self._create_group()

        with capture_exceptions() as exc:
            self.parser.parse_args(["--callback-failure-test"])

        assert len(exc) == 1
        assert exc[0].value.args[0] == "foo"