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
128
129
130
131
132
133
134
135
136
|
#!/usr/bin/env python
from __future__ import absolute_import
import unittest
# py3k has StringIO in a different module
try:
from StringIO import StringIO
StringIO # pyflakes
except ImportError:
from io import StringIO
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"
|