diff options
-rw-r--r-- | cliff/command.py | 3 | ||||
-rw-r--r-- | cliff/tests/test_command.py | 46 | ||||
-rw-r--r-- | cliff/tests/test_help.py | 2 |
3 files changed, 49 insertions, 2 deletions
diff --git a/cliff/command.py b/cliff/command.py index f8d0501..0a02525 100644 --- a/cliff/command.py +++ b/cliff/command.py @@ -74,6 +74,7 @@ class Command(object, metaclass=abc.ABCMeta): """ deprecated = False + conflict_handler = 'ignore' _description = '' _epilog = None @@ -156,7 +157,7 @@ class Command(object, metaclass=abc.ABCMeta): epilog=self.get_epilog(), prog=prog_name, formatter_class=_argparse.SmartHelpFormatter, - conflict_handler='ignore', + conflict_handler=self.conflict_handler, ) for hook in self._hooks: hook.obj.get_parser(parser) diff --git a/cliff/tests/test_command.py b/cliff/tests/test_command.py index 29c8c33..c9513d0 100644 --- a/cliff/tests/test_command.py +++ b/cliff/tests/test_command.py @@ -172,3 +172,49 @@ class TestArgumentParser(base.TestBase): args = parser.parse_args(['-z', 'foo', 'a', 'b']) self.assertEqual(args.zippy, 'foo') self.assertEqual(args.zero, 'zero-default') + + def test_with_conflict_handler(self): + cmd = TestCommand(None, None) + cmd.conflict_handler = 'resolve' + parser = cmd.get_parser('NAME') + self.assertEqual(parser.conflict_handler, 'resolve') + + def test_raise_conflict_argument_error(self): + cmd = TestCommand(None, None) + parser = cmd.get_parser('NAME') + parser.add_argument( + '-f', '--foo', + dest='foo', + default='foo', + ) + self.assertRaises( + argparse.ArgumentError, + parser.add_argument, + '-f', + ) + + def test_resolve_conflict_argument(self): + cmd = TestCommand(None, None) + cmd.conflict_handler = 'resolve' + parser = cmd.get_parser('NAME') + parser.add_argument( + '-f', '--foo', + dest='foo', + default='foo', + ) + parser.add_argument( + '-f', '--foo', + dest='foo', + default='bar', + ) + args = parser.parse_args(['a', 'b']) + self.assertEqual(args.foo, 'bar') + + def test_wrong_conflict_handler(self): + cmd = TestCommand(None, None) + cmd.conflict_handler = 'wrong' + self.assertRaises( + ValueError, + cmd.get_parser, + 'NAME', + ) diff --git a/cliff/tests/test_help.py b/cliff/tests/test_help.py index 9034779..4862f25 100644 --- a/cliff/tests/test_help.py +++ b/cliff/tests/test_help.py @@ -101,7 +101,7 @@ class TestHelp(base.TestBase): help_text = stdout.getvalue() basecommand = os.path.split(sys.argv[0])[1] self.assertIn('usage: %s [--version]' % basecommand, help_text) - self.assertIn('optional arguments:\n --version', help_text) + self.assertRegex(help_text, 'option(s|al arguments):\n --version') expected = ( ' one Test command.\n' ' three word command Test command.\n' |