diff options
| -rw-r--r-- | ChangeLog | 9 | ||||
| -rw-r--r-- | gobject/option.py | 11 | ||||
| -rw-r--r-- | tests/test_option.py | 89 |
3 files changed, 74 insertions, 35 deletions
@@ -1,3 +1,12 @@ +2007-11-06 Johan Dahlin <johan@gnome.org> + + * gobject/option.py (OptionParser.parse_args): Merge in values + from all groups to the global option group. Slice up args + so it doesn't return too much. + + * tests/test_option.py: Refactor to be unittesty, + Add new tests to test what options returns. + 2007-11-05 Johan Dahlin <johan@gnome.org> * gobject/pygobject.h: diff --git a/gobject/option.py b/gobject/option.py index 07a1c99..5930274 100644 --- a/gobject/option.py +++ b/gobject/option.py @@ -316,8 +316,10 @@ class OptionParser(optparse.OptionParser): largs.extend(context.parse([sys.argv[0]] + rargs)) def parse_args(self, args=None, values=None): + old_args = args try: - return optparse.OptionParser.parse_args(self, args, values) + options, args = optparse.OptionParser.parse_args( + self, args, values) except gobject.GError, error: if error.domain != gobject.OPTION_ERROR: raise @@ -330,4 +332,11 @@ class OptionParser(optparse.OptionParser): else: raise + for group in self.option_groups: + for key, value in group.values.__dict__.items(): + options.ensure_value(key, value) + + args = args[2:-len(old_args)] + return options, args + make_option = Option diff --git a/tests/test_option.py b/tests/test_option.py index 1feb13e..2301553 100644 --- a/tests/test_option.py +++ b/tests/test_option.py @@ -2,15 +2,23 @@ import unittest import sys - from StringIO import StringIO -from common import gobject + from gobject import option +from common import gobject + + class TestOption(unittest.TestCase): EXCEPTION_MESSAGE = "This callback fails" - def setup_group(self): + def setUp(self): + self.parser = option.OptionParser("NAMES...", + description="Option unit test") + self.parser.add_option("-t", "--test", help="Unit test option", + action="store_false", dest="test", default=True) + + def _create_group(self): def option_callback(option, opt, value, parser): raise StandardError(self.EXCEPTION_MESSAGE) @@ -36,49 +44,62 @@ class TestOption(unittest.TestCase): dest="test", default=True, help="Unit test option") + self.parser.add_option_group(group) return group - def setup_parser(self): - parser = option.OptionParser("NAMES...", - description="Option unit test") - parser.add_option("-t", "--test", help="Unit test option", - action="store_false", dest="test", default=True) - return parser + def testParseArgs(self): + options, args = self.parser.parse_args( + ["test_option.py"]) + self.failIf(args) - def testOption(self): - parser = self.setup_parser() - group = self.setup_group() - parser.add_option_group(group) + options, args = self.parser.parse_args( + ["test_option.py", "foo"]) + self.assertEquals(args, ["foo"]) - parser.parse_args(["test_option.py", "--test", "-f", "test"]) - assert group.values.test - assert not parser.values.test - assert group.values.unit_file == "test" + options, args = self.parser.parse_args( + ["test_option.py", "foo", "bar"]) + self.assertEquals(args, ["foo", "bar"]) - try: - parser.parse_args(["test_option.py", "--test-integer=text"]) - except option.OptionValueError: - pass - else: - assert False + def testParseArgsDoubleDash(self): + options, args = self.parser.parse_args( + ["test_option.py", "--", "-xxx"]) + #self.assertEquals(args, ["-xxx"]) + def testParseArgsGroup(self): + group = self._create_group() + + options, args = self.parser.parse_args( + ["test_option.py", "--test", "-f", "test"]) + + self.failIf(options.test) + self.assertEqual(options.unit_file, "test") + + self.failUnless(group.values.test) + self.failIf(self.parser.values.test) + self.assertEqual(group.values.unit_file, "test") + self.failIf(args) + + def testOptionValueError(self): + self.assertRaises(option.OptionValueError, self.parser.parse_args, + ["test_option.py", "--test-integer=text"]) + + def testBadOptionError(self): + self.assertRaises(option.BadOptionError, + self.parser.parse_args, + ["test_option.py", "--unknwon-option"]) + + def testOptionGroupConstructor(self): + self.assertRaises(TypeError, option.OptionGroup) + + def testStandardError(self): sio = StringIO() old_stderr = sys.stderr sys.stderr = sio try: - parser.parse_args(["test_option.py", "--callback-failure-test"]) + self.parser.parse_args( + ["test_option.py", "--callback-failure-test"]) finally: sys.stderr = old_stderr assert (sio.getvalue().split('\n')[-2] == "StandardError: " + self.EXCEPTION_MESSAGE) - try: - parser.parse_args(["test_option.py", "--unknwon-option"]) - except option.BadOptionError: - pass - else: - assert False - - def testBadConstructor(self): - self.assertRaises(TypeError, option.OptionGroup) - |
