Skip to content
Snippets Groups Projects
Commit b1717618 authored by Zuul's avatar Zuul Committed by Gerrit Code Review
Browse files

Merge "Add conflict_handler parameter as attribut in Command class"

parents 392f3b2e 452fff3a
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -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',
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment