Imported Upstream version 3.12.2
[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     StringIO  # pyflakes
10 except ImportError:
11     from io import StringIO
12
13 from gi.repository import GLib
14
15
16 class TestOption(unittest.TestCase):
17     EXCEPTION_MESSAGE = "This callback fails"
18
19     def setUp(self):
20         self.parser = GLib.option.OptionParser("NAMES...",
21                                                description="Option unit test")
22         self.parser.add_option("-t", "--test", help="Unit test option",
23                                action="store_false", dest="test", default=True)
24         self.parser.add_option("--g-fatal-warnings",
25                                action="store_true",
26                                dest="fatal_warnings",
27                                help="dummy"),
28
29     def _create_group(self):
30         def option_callback(option, opt, value, parser):
31             raise Exception(self.EXCEPTION_MESSAGE)
32
33         group = GLib.option.OptionGroup(
34             "unittest", "Unit test options", "Show all unittest options",
35             option_list=[
36                 GLib.option.make_option("-f", "-u", "--file", "--unit-file",
37                                         type="filename",
38                                         dest="unit_file",
39                                         help="Unit test option"),
40                 GLib.option.make_option("--test-integer",
41                                         type="int",
42                                         dest="test_integer",
43                                         help="Unit integer option"),
44                 GLib.option.make_option("--callback-failure-test",
45                                         action="callback",
46                                         callback=option_callback,
47                                         dest="test_integer",
48                                         help="Unit integer option"),
49             ])
50         group.add_option("-t", "--test",
51                          action="store_false",
52                          dest="test",
53                          default=True,
54                          help="Unit test option")
55         self.parser.add_option_group(group)
56         return group
57
58     def test_parse_args(self):
59         options, args = self.parser.parse_args(
60             ["test_option.py"])
61         self.assertFalse(args)
62
63         options, args = self.parser.parse_args(
64             ["test_option.py", "foo"])
65         self.assertEqual(args, [])
66
67         options, args = self.parser.parse_args(
68             ["test_option.py", "foo", "bar"])
69         self.assertEqual(args, [])
70
71     def test_parse_args_double_dash(self):
72         options, args = self.parser.parse_args(
73             ["test_option.py", "--", "-xxx"])
74         # self.assertEqual(args, ["-xxx"])
75
76     def test_parse_args_group(self):
77         group = self._create_group()
78
79         options, args = self.parser.parse_args(
80             ["test_option.py", "--test", "-f", "test"])
81
82         self.assertFalse(options.test)
83         self.assertEqual(options.unit_file, "test")
84
85         self.assertTrue(group.values.test)
86         self.assertFalse(self.parser.values.test)
87         self.assertEqual(group.values.unit_file, "test")
88         self.assertFalse(args)
89
90     def test_option_value_error(self):
91         self._create_group()
92         self.assertRaises(GLib.option.OptionValueError, self.parser.parse_args,
93                           ["test_option.py", "--test-integer=text"])
94
95     def test_bad_option_error(self):
96         self.assertRaises(GLib.option.BadOptionError,
97                           self.parser.parse_args,
98                           ["test_option.py", "--unknwon-option"])
99
100     def test_option_group_constructor(self):
101         self.assertRaises(TypeError, GLib.option.OptionGroup)
102
103     def test_standard_error(self):
104         self._create_group()
105         sio = StringIO()
106         old_stderr = sys.stderr
107         sys.stderr = sio
108         try:
109             self.parser.parse_args(
110                 ["test_option.py", "--callback-failure-test"])
111         finally:
112             sys.stderr = old_stderr
113
114         assert (sio.getvalue().split('\n')[-2] ==
115                 "Exception: " + self.EXCEPTION_MESSAGE)