Imported Upstream version 2.90.1
[platform/upstream/pygobject2.git] / tests / test_option.py
1 #!/usr/bin/env python
2
3 import unittest
4 import sys
5
6 # py3k has StringIO in a different module
7 try:
8     from StringIO import StringIO
9 except ImportError:
10     from io import StringIO
11
12 # FIXME: we need a way to import the options module from a public module
13 from gi._glib.option import OptionParser, OptionGroup, OptionValueError, \
14      make_option, BadOptionError
15
16 from compathelper import _bytes
17
18 class TestOption(unittest.TestCase):
19     EXCEPTION_MESSAGE = "This callback fails"
20
21     def setUp(self):
22         self.parser = OptionParser("NAMES...",
23                                      description="Option unit test")
24         self.parser.add_option("-t", "--test", help="Unit test option",
25                           action="store_false", dest="test", default=True)
26         self.parser.add_option("--g-fatal-warnings",
27                                action="store_true",
28                                dest="fatal_warnings",
29                                help="dummy"),
30
31     def _create_group(self):
32         def option_callback(option, opt, value, parser):
33             raise Exception(self.EXCEPTION_MESSAGE)
34
35         group = OptionGroup(
36             "unittest", "Unit test options", "Show all unittest options",
37             option_list = [
38                 make_option("-f", "-u", "--file", "--unit-file",
39                                    type="filename",
40                                    dest="unit_file",
41                                    help="Unit test option"),
42                 make_option("--test-integer",
43                                    type="int",
44                                    dest="test_integer",
45                                    help="Unit integer option"),
46                 make_option("--callback-failure-test",
47                                    action="callback",
48                                    callback=option_callback,
49                                    dest="test_integer",
50                                    help="Unit integer option"),
51             ])
52         group.add_option("-t", "--test",
53                          action="store_false",
54                          dest="test",
55                          default=True,
56                          help="Unit test option")
57         self.parser.add_option_group(group)
58         return group
59
60     def testParseArgs(self):
61         options, args = self.parser.parse_args(
62             ["test_option.py"])
63         self.failIf(args)
64
65         options, args = self.parser.parse_args(
66             ["test_option.py", "foo"])
67         self.assertEquals(args, ["foo"])
68
69         options, args = self.parser.parse_args(
70             ["test_option.py", "foo", "bar"])
71         self.assertEquals(args, ["foo", "bar"])
72
73     def testParseArgsDoubleDash(self):
74         options, args = self.parser.parse_args(
75             ["test_option.py", "--", "-xxx"])
76         #self.assertEquals(args, ["-xxx"])
77
78     def testParseArgs(self):
79         options, args = self.parser.parse_args()
80
81     def testParseArgsGroup(self):
82         group = self._create_group()
83
84         options, args = self.parser.parse_args(
85             ["test_option.py", "--test", "-f", "test"])
86
87         self.failIf(options.test)
88         self.assertEqual(options.unit_file, "test")
89
90         self.failUnless(group.values.test)
91         self.failIf(self.parser.values.test)
92         self.assertEqual(group.values.unit_file, "test")
93         self.failIf(args)
94
95     def testOptionValueError(self):
96         self._create_group()
97         self.assertRaises(OptionValueError, self.parser.parse_args,
98                           ["test_option.py", "--test-integer=text"])
99
100     def testBadOptionError(self):
101         self.assertRaises(BadOptionError,
102                           self.parser.parse_args,
103                           ["test_option.py", "--unknwon-option"])
104
105     def testOptionGroupConstructor(self):
106         self.assertRaises(TypeError, OptionGroup)
107
108     def testStandardError(self):
109         self._create_group()
110         sio = StringIO()
111         old_stderr = sys.stderr
112         sys.stderr = sio
113         try:
114             self.parser.parse_args(
115                 ["test_option.py", "--callback-failure-test"])
116         finally:
117             sys.stderr = old_stderr
118
119         assert (sio.getvalue().split('\n')[-2] ==
120                 "Exception: " + self.EXCEPTION_MESSAGE)
121