summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cliff/command.py3
-rw-r--r--cliff/tests/test_command.py46
-rw-r--r--cliff/tests/test_help.py2
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'