summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--gobject/option.py11
-rw-r--r--tests/test_option.py89
3 files changed, 74 insertions, 35 deletions
diff --git a/ChangeLog b/ChangeLog
index 93aaa53..37acecb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
-