version = ''
-class TestHelpTupleMetavar(HelpTestCase):
+class TestHelpTupleMetavarOptional(HelpTestCase):
"""Test specifying metavar as a tuple"""
parser_signature = Sig(prog='PROG')
version = ''
+class TestHelpTupleMetavarPositional(HelpTestCase):
+ """Test specifying metavar on a Positional as a tuple"""
+
+ parser_signature = Sig(prog='PROG')
+ argument_signatures = [
+ Sig('w', help='w help', nargs='+', metavar=('W1', 'W2')),
+ Sig('x', help='x help', nargs='*', metavar=('X1', 'X2')),
+ Sig('y', help='y help', nargs=3, metavar=('Y1', 'Y2', 'Y3')),
+ Sig('z', help='z help', nargs='?', metavar=('Z1',)),
+ ]
+ argument_group_signatures = []
+ usage = '''\
+ usage: PROG [-h] W1 [W2 ...] [X1 [X2 ...]] Y1 Y2 Y3 [Z1]
+ '''
+ help = usage + '''\
+
+ positional arguments:
+ W1 W2 w help
+ X1 X2 x help
+ Y1 Y2 Y3 y help
+ Z1 z help
+
+ options:
+ -h, --help show this help message and exit
+ '''
+ version = ''
+
+
class TestHelpRawText(HelpTestCase):
"""Test the RawTextHelpFormatter"""
'the following arguments are required: bar, baz$',
self.parser.parse_args, [])
+ def test_required_args_with_metavar(self):
+ self.parser.add_argument('bar')
+ self.parser.add_argument('baz', metavar='BaZ')
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'the following arguments are required: bar, BaZ$',
+ self.parser.parse_args, [])
+
+ def test_required_args_n(self):
+ self.parser.add_argument('bar')
+ self.parser.add_argument('baz', nargs=3)
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'the following arguments are required: bar, baz$',
+ self.parser.parse_args, [])
+
+ def test_required_args_n_with_metavar(self):
+ self.parser.add_argument('bar')
+ self.parser.add_argument('baz', nargs=3, metavar=('B', 'A', 'Z'))
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'the following arguments are required: bar, B, A, Z$',
+ self.parser.parse_args, [])
+
def test_required_args_optional(self):
self.parser.add_argument('bar')
self.parser.add_argument('baz', nargs='?')
'the following arguments are required: bar$',
self.parser.parse_args, [])
+ def test_required_args_one_or_more(self):
+ self.parser.add_argument('bar')
+ self.parser.add_argument('baz', nargs='+')
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'the following arguments are required: bar, baz$',
+ self.parser.parse_args, [])
+
+ def test_required_args_one_or_more_with_metavar(self):
+ self.parser.add_argument('bar')
+ self.parser.add_argument('baz', nargs='+', metavar=('BaZ1', 'BaZ2'))
+ self.assertRaisesRegex(argparse.ArgumentError,
+ r'the following arguments are required: bar, BaZ1\[, BaZ2]$',
+ self.parser.parse_args, [])
+
def test_required_args_remainder(self):
self.parser.add_argument('bar')
self.parser.add_argument('baz', nargs='...')
'one of the arguments --bar --baz is required',
self.parser.parse_args, [])
+ def test_conflicting_mutually_exclusive_args_optional_with_metavar(self):
+ group = self.parser.add_mutually_exclusive_group()
+ group.add_argument('--bar')
+ group.add_argument('baz', nargs='?', metavar='BaZ')
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'argument BaZ: not allowed with argument --bar$',
+ self.parser.parse_args, ['--bar', 'a', 'b'])
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'argument --bar: not allowed with argument BaZ$',
+ self.parser.parse_args, ['a', '--bar', 'b'])
+
+ def test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar1(self):
+ group = self.parser.add_mutually_exclusive_group()
+ group.add_argument('--bar')
+ group.add_argument('baz', nargs='*', metavar=('BAZ1',))
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'argument BAZ1: not allowed with argument --bar$',
+ self.parser.parse_args, ['--bar', 'a', 'b'])
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'argument --bar: not allowed with argument BAZ1$',
+ self.parser.parse_args, ['a', '--bar', 'b'])
+
+ def test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar2(self):
+ group = self.parser.add_mutually_exclusive_group()
+ group.add_argument('--bar')
+ group.add_argument('baz', nargs='*', metavar=('BAZ1', 'BAZ2'))
+ self.assertRaisesRegex(argparse.ArgumentError,
+ r'argument BAZ1\[, BAZ2]: not allowed with argument --bar$',
+ self.parser.parse_args, ['--bar', 'a', 'b'])
+ self.assertRaisesRegex(argparse.ArgumentError,
+ r'argument --bar: not allowed with argument BAZ1\[, BAZ2]$',
+ self.parser.parse_args, ['a', '--bar', 'b'])
+
def test_ambiguous_option(self):
self.parser.add_argument('--foobaz')
self.parser.add_argument('--fooble', action='store_true')