def _test_options(self, options): """helper to test option types. this expects that self.options is set to a single option named test. The value of that option is returned. """ result = argparse.Namespace() parser = Parser(components=[self], namespace=result) parser.parse(options) return result.test
def test_default_path_canonicalization(self, config_file): """canonicalize default PathOption values.""" testdir = os.path.expanduser("~/test") result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([PathOption("--test1", default="~/test"), PathOption(cf=("test", "test2"), default="~/test"), Common.repository]) parser.parse(["-C", config_file]) self.assertEqual(result.test1, testdir) self.assertEqual(result.test2, testdir)
def test_wildcard_options(self, config_file): """parse wildcard options.""" result = argparse.Namespace() parser = Parser(components=[self], namespace=result) parser.parse(argv=["-C", config_file]) self.assertDictEqual(result.all, {"test1": "test1", "test2": "test2", "thing1": "thing1", "thing2": "thing2"}) self.assertDictEqual(result.test, {"test1": "test1", "test2": "test2"}) self.assertDictEqual(result.unmatched, {}) self.assertDictEqual(result.no_section, {})
def test_positional_args(self, config_file): """get values from positional arguments.""" result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([PositionalArgument("single")]) parser.parse(["-C", config_file, "single"]) self.assertEqual(result.single, "single") result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([PositionalArgument("one"), PositionalArgument("two")]) parser.parse(["-C", config_file, "one", "two"]) self.assertEqual(result.one, "one") self.assertEqual(result.two, "two")
def _test_dest(self, *args, **kwargs): """helper to test that ``dest`` is set properly.""" args = list(args) expected = args.pop(0) config_file = args.pop() sentinel = object() kwargs["default"] = sentinel result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([Option(*args, **kwargs)]) parser.parse(["-C", config_file]) self.assertTrue(hasattr(result, expected)) self.assertEqual(getattr(result, expected), sentinel)
def test_file_like_path_option(self, config_file): """get file-like object from PathOption.""" result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([PathOption("--test", type=argparse.FileType('r'))]) fd, name = tempfile.mkstemp() fh = os.fdopen(fd, "w") fh.write("test") fh.close() try: parser.parse(["-C", config_file, "--test", name]) self.assertEqual(result.test.name, name) self.assertEqual(result.test.read(), "test") finally: os.unlink(name)
def test_repository_macro(self, config_file): """fix up <repository> macros.""" result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([PathOption("--test1"), PathOption("--test2"), PathOption(cf=("test", "test_path")), PathOption(cf=("test", "test_path_default"), default="<repository>/test/default"), Common.repository]) parser.parse(["-C", config_file, "-Q", "/foo/bar", "--test1", "<repository>/test1", "--test2", "<repository><repository>"]) self.assertEqual(result.repository, "/foo/bar") self.assertEqual(result.test1, "/foo/bar/test1") self.assertEqual(result.test2, "/foo/bar/foo/bar") self.assertEqual(result.test_path, "/foo/bar/test") self.assertEqual(result.test_path_default, "/foo/bar/test/default")
def test_repository_macro(self, config_file): """fix up <repository> macros.""" result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([ PathOption("--test1"), RepositoryMacroOption("--test2"), PathOption(cf=("test", "test_path")), PathOption(cf=("test", "test_path_default"), default="<repository>/test/default"), RepositoryMacroOption(cf=("test", "test_macro")), RepositoryMacroOption(cf=("test", "test_macro_default"), default="<repository>"), Common.repository ]) parser.parse([ "-C", config_file, "-Q", "/foo/bar", "--test1", "<repository>/test1", "--test2", "<repository><repository>" ]) self.assertEqual(result.repository, "/foo/bar") self.assertEqual(result.test1, "/foo/bar/test1") self.assertEqual(result.test2, "/foo/bar/foo/bar") self.assertEqual(result.test_macro, "/foo/bar") self.assertEqual(result.test_macro_default, "/foo/bar") self.assertEqual(result.test_path, "/foo/bar/test") self.assertEqual(result.test_path_default, "/foo/bar/test/default")
def test_default_path_canonicalization(self, config_file): """canonicalize default PathOption values.""" testdir = os.path.expanduser("~/test") result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([ PathOption("--test1", default="~/test"), PathOption(cf=("test", "test2"), default="~/test"), Common.repository ]) parser.parse(["-C", config_file]) self.assertEqual(result.test1, testdir) self.assertEqual(result.test2, testdir)
def test_duplicate_cli_option(self): """add duplicate CLI option.""" parser = Parser(components=[self]) self.assertRaises(argparse.ArgumentError, parser.add_options, [Option("--test-option")])
def _test_options(self, options): """test helper.""" result = argparse.Namespace() parser = Parser(components=[self], namespace=result) parser.parse(options) return result
def inner(config_file): """do the actual tests, since py2.4 lacks context managers.""" result = argparse.Namespace() parser = Parser(components=[self], namespace=result) parser.parse(argv=["-C", config_file] + options) return result
def test_reparse(self, config_file): """reparse options.""" result = argparse.Namespace() parser = Parser(components=[self], namespace=result) parser.parse(["-C", config_file]) self.assertFalse(result.test_false_boolean) parser.parse(["-C", config_file]) self.assertFalse(result.test_false_boolean) parser.reparse() self.assertFalse(result.test_false_boolean) parser.reparse(["-C", config_file, "--test-false-boolean"]) self.assertTrue(result.test_false_boolean) cfp = ConfigParser.ConfigParser() cfp.add_section("test") cfp.set("test", "false_boolean", "on") parser.parse(["-C", config_file]) cfp.write(open(config_file, "w")) self.assertTrue(result.test_false_boolean)
def test_unknown_options(self, config_file): """error on unknown options.""" parser = Parser(components=[self]) self.assertRaises(SystemExit, parser.parse, ["-C", config_file, "--not-a-real-option"])
def test_duplicate_cf_option(self): """add duplicate config file option.""" parser = Parser(components=[self]) self.assertRaises(OptionParserException, parser.add_options, [Option(cf=("test", "option"))])
def test_positional_args(self, config_file): """get values from positional arguments.""" result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options([PositionalArgument("single")]) parser.parse(["-C", config_file, "single"]) self.assertEqual(result.single, "single") result = argparse.Namespace() parser = Parser(namespace=result) parser.add_options( [PositionalArgument("one"), PositionalArgument("two")]) parser.parse(["-C", config_file, "one", "two"]) self.assertEqual(result.one, "one") self.assertEqual(result.two, "two")
def test_duplicate_env_option(self): """add duplicate environment option.""" parser = Parser(components=[self]) self.assertRaises(OptionParserException, parser.add_options, [Option(env="TEST_OPTION")])