def test_debug(self): # Hack: we can modify this from inside the callback. confdict = {} def callback(option, opt_str, value, parser): section = parser.values.config.collapse_named_section('sect') # It would actually be better if debug was True here. # We check for an unintended change, not ideal behaviour. self.assertFalse(section.debug) confdict['sect'] = section parser = commandline.OptionParser(option_list=[ optparse.Option('-a', action='callback', callback=callback)]) parser = helpers.mangle_parser(parser) values = parser.get_default_values() values._config = mk_config([{ 'sect': basics.HardCodedConfigSection({'class': sect})}]) values, args = parser.parse_args(['-a', '--debug'], values) self.assertFalse(args) self.assertTrue(values.debug) self.assertTrue(confdict['sect'].debug) values = parser.get_default_values() values._config = mk_config([{ 'sect': basics.HardCodedConfigSection({'class': sect})}]) values, args = parser.parse_args(['-a'], values) self.assertFalse(args) self.assertFalse(values.debug) self.assertFalse(confdict['sect'].debug)
def test_bool_type(self): parser = helpers.mangle_parser(commandline.OptionParser()) parser.add_option("--testing", action='store', type='bool', default=None) for raw_val in ("n", "no", "false"): for allowed in (raw_val.upper(), raw_val.lower()): values, args = parser.parse_args(['--testing=' + allowed]) self.assertEqual(values.testing, False, msg="for --testing=%s, got %r, expected False" % (allowed, values.testing)) for raw_val in ("y", "yes", "true"): for allowed in (raw_val.upper(), raw_val.lower()): values, args = parser.parse_args(['--testing=' + allowed]) self.assertEqual(values.testing, True, msg="for --testing=%s, got %r, expected False" % (allowed, values.testing)) try: parser.parse_args(["--testing=invalid"]) except helpers.Error: pass else: self.fail("no error message thrown for --testing=invalid")
def test_bool_type(self): parser = helpers.mangle_parser(commandline.ArgumentParser()) parser.add_argument( "--testing", action=commandline.StoreBool, default=None) for raw_val in ("n", "no", "false"): for allowed in (raw_val.upper(), raw_val.lower()): namespace = parser.parse_args(['--testing=' + allowed]) self.assertEqual( namespace.testing, False, msg="for --testing=%s, got %r, expected False" % (allowed, namespace.testing)) for raw_val in ("y", "yes", "true"): for allowed in (raw_val.upper(), raw_val.lower()): namespace = parser.parse_args(['--testing=' + allowed]) self.assertEqual( namespace.testing, True, msg="for --testing=%s, got %r, expected False" % (allowed, namespace.testing)) try: parser.parse_args(["--testing=invalid"]) except helpers.Error: pass else: self.fail("no error message thrown for --testing=invalid")
def test_config_callback(self): @configurable(typename='foon') def test(): return 'foon!' parser = helpers.mangle_parser(commandline.OptionParser()) parser.add_option('--spork', action='callback', callback=commandline.config_callback, type='string', callback_args=('foon',)) parser.add_option('--foon', action='callback', callback=commandline.config_callback, type='string', callback_args=('foon', 'utensil')) values = parser.get_default_values() values._config = mk_config([{ 'afoon': basics.HardCodedConfigSection({'class': test})}]) values, args = parser.parse_args(['--spork', 'afoon'], values) self.assertEqual('foon!', values.spork) try: parser.parse_args(['--spork', 'nofoon'], values) except helpers.Error, e: self.assertEqual( "'nofoon' is not a valid foon for --spork " "(valid values: 'afoon')", str(e))
class ModifyConfigTest(TestCase, helpers.MainMixin): parser = helpers.mangle_parser(ModifyParser()) def parse(self, *args, **kwargs): """Overridden to allow the load_config call.""" values = self.parser.get_default_values() # optparse needs a list (it does make a copy, but it uses [:] # to do it, which is a noop on a tuple). options, args = self.parser.parse_args(list(args), values) self.assertFalse(args) return options def test_empty_config(self): self.assertError( 'Configuration already loaded. If moving the option earlier on ' 'the commandline does not fix this report it as a bug.', '--trigger', '--empty-config') self.assertTrue(self.parse('--empty-config', '--trigger')) def test_modify_config(self): self.assertError( 'Configuration already loaded. If moving the option earlier on ' 'the commandline does not fix this report it as a bug.', '--empty-config', '--trigger', '--new-config', 'foo', 'class', 'sect') values = self.parse( '--empty-config', '--new-config', 'foo', 'class', 'pkgcore.test.util.test_commandline.sect', '--trigger') self.assertTrue(values.config.collapse_named_section('foo')) values = self.parse( '--empty-config', '--new-config', 'foo', 'class', 'pkgcore.test.util.test_commandline.missing', '--add-config', 'foo', 'class', 'pkgcore.test.util.test_commandline.sect', '--trigger') self.assertTrue(values.config.collapse_named_section('foo')) self.assertError( "'class' is already set (to 'first')", '--empty-config', '--new-config', 'foo', 'class', 'first', '--new-config', 'foo', 'class', 'foon', '--trigger') values = self.parse( '--empty-config', '--add-config', 'foo', 'inherit', 'missing', '--trigger') self.assertRaises( errors.ConfigurationError, values.config.collapse_named_section, 'foo')
def test_config_callback(self): @configurable(typename='foon') def test(): return 'foon!' parser = helpers.mangle_parser(commandline.OptionParser()) parser.add_option('--spork', action='callback', callback=commandline.config_callback, type='string', callback_args=('foon', )) parser.add_option('--foon', action='callback', callback=commandline.config_callback, type='string', callback_args=('foon', 'utensil')) values = parser.get_default_values() values._config = mk_config([{ 'afoon': basics.HardCodedConfigSection({'class': test}) }]) values, args = parser.parse_args(['--spork', 'afoon'], values) self.assertEqual('foon!', values.spork) try: parser.parse_args(['--spork', 'nofoon'], values) except helpers.Error as e: self.assertEqual( "'nofoon' is not a valid foon for --spork " "(valid values: 'afoon')", str(e)) else: self.fail('no exception raised') try: parser.parse_args(['--foon', 'nofoon'], values) except helpers.Error as e: self.assertEqual( "'nofoon' is not a valid utensil for --foon " "(valid values: 'afoon')", str(e)) else: self.fail('no exception raised')
def test_empty_sequence(self): parser = helpers.mangle_parser(commandline.OptionParser(option_list=[ optparse.Option('--seq', action='append')])) options, values = parser.parse_args([]) self.assertEqual([], list(options.seq))
def test_empty_sequence(self): parser = helpers.mangle_parser(commandline.OptionParser( option_list=[optparse.Option('--seq', action='append')])) options, values = parser.parse_args([]) self.assertEqual([], list(options.seq))