@@ -4674,7 +4674,7 @@ class TestHelpNone(HelpTestCase):
4674
4674
version = ''
4675
4675
4676
4676
4677
- class TestHelpTupleMetavar (HelpTestCase ):
4677
+ class TestHelpTupleMetavarOptional (HelpTestCase ):
4678
4678
"""Test specifying metavar as a tuple"""
4679
4679
4680
4680
parser_signature = Sig (prog = 'PROG' )
@@ -4701,6 +4701,34 @@ class TestHelpTupleMetavar(HelpTestCase):
4701
4701
version = ''
4702
4702
4703
4703
4704
+ class TestHelpTupleMetavarPositional (HelpTestCase ):
4705
+ """Test specifying metavar on a Positional as a tuple"""
4706
+
4707
+ parser_signature = Sig (prog = 'PROG' )
4708
+ argument_signatures = [
4709
+ Sig ('w' , help = 'w help' , nargs = '+' , metavar = ('W1' , 'W2' )),
4710
+ Sig ('x' , help = 'x help' , nargs = '*' , metavar = ('X1' , 'X2' )),
4711
+ Sig ('y' , help = 'y help' , nargs = 3 , metavar = ('Y1' , 'Y2' , 'Y3' )),
4712
+ Sig ('z' , help = 'z help' , nargs = '?' , metavar = ('Z1' ,)),
4713
+ ]
4714
+ argument_group_signatures = []
4715
+ usage = '''\
4716
+ usage: PROG [-h] W1 [W2 ...] [X1 [X2 ...]] Y1 Y2 Y3 [Z1]
4717
+ '''
4718
+ help = usage + '''\
4719
+
4720
+ positional arguments:
4721
+ W1 W2 w help
4722
+ X1 X2 x help
4723
+ Y1 Y2 Y3 y help
4724
+ Z1 z help
4725
+
4726
+ options:
4727
+ -h, --help show this help message and exit
4728
+ '''
4729
+ version = ''
4730
+
4731
+
4704
4732
class TestHelpRawText (HelpTestCase ):
4705
4733
"""Test the RawTextHelpFormatter"""
4706
4734
@@ -6146,6 +6174,27 @@ def test_required_args(self):
6146
6174
'the following arguments are required: bar, baz$' ,
6147
6175
self .parser .parse_args , [])
6148
6176
6177
+ def test_required_args_with_metavar (self ):
6178
+ self .parser .add_argument ('bar' )
6179
+ self .parser .add_argument ('baz' , metavar = 'BaZ' )
6180
+ self .assertRaisesRegex (argparse .ArgumentError ,
6181
+ 'the following arguments are required: bar, BaZ$' ,
6182
+ self .parser .parse_args , [])
6183
+
6184
+ def test_required_args_n (self ):
6185
+ self .parser .add_argument ('bar' )
6186
+ self .parser .add_argument ('baz' , nargs = 3 )
6187
+ self .assertRaisesRegex (argparse .ArgumentError ,
6188
+ 'the following arguments are required: bar, baz$' ,
6189
+ self .parser .parse_args , [])
6190
+
6191
+ def test_required_args_n_with_metavar (self ):
6192
+ self .parser .add_argument ('bar' )
6193
+ self .parser .add_argument ('baz' , nargs = 3 , metavar = ('B' , 'A' , 'Z' ))
6194
+ self .assertRaisesRegex (argparse .ArgumentError ,
6195
+ 'the following arguments are required: bar, B, A, Z$' ,
6196
+ self .parser .parse_args , [])
6197
+
6149
6198
def test_required_args_optional (self ):
6150
6199
self .parser .add_argument ('bar' )
6151
6200
self .parser .add_argument ('baz' , nargs = '?' )
@@ -6160,6 +6209,20 @@ def test_required_args_zero_or_more(self):
6160
6209
'the following arguments are required: bar$' ,
6161
6210
self .parser .parse_args , [])
6162
6211
6212
+ def test_required_args_one_or_more (self ):
6213
+ self .parser .add_argument ('bar' )
6214
+ self .parser .add_argument ('baz' , nargs = '+' )
6215
+ self .assertRaisesRegex (argparse .ArgumentError ,
6216
+ 'the following arguments are required: bar, baz$' ,
6217
+ self .parser .parse_args , [])
6218
+
6219
+ def test_required_args_one_or_more_with_metavar (self ):
6220
+ self .parser .add_argument ('bar' )
6221
+ self .parser .add_argument ('baz' , nargs = '+' , metavar = ('BaZ1' , 'BaZ2' ))
6222
+ self .assertRaisesRegex (argparse .ArgumentError ,
6223
+ r'the following arguments are required: bar, BaZ1\[, BaZ2]$' ,
6224
+ self .parser .parse_args , [])
6225
+
6163
6226
def test_required_args_remainder (self ):
6164
6227
self .parser .add_argument ('bar' )
6165
6228
self .parser .add_argument ('baz' , nargs = '...' )
@@ -6175,6 +6238,39 @@ def test_required_mutually_exclusive_args(self):
6175
6238
'one of the arguments --bar --baz is required' ,
6176
6239
self .parser .parse_args , [])
6177
6240
6241
+ def test_conflicting_mutually_exclusive_args_optional_with_metavar (self ):
6242
+ group = self .parser .add_mutually_exclusive_group ()
6243
+ group .add_argument ('--bar' )
6244
+ group .add_argument ('baz' , nargs = '?' , metavar = 'BaZ' )
6245
+ self .assertRaisesRegex (argparse .ArgumentError ,
6246
+ 'argument BaZ: not allowed with argument --bar$' ,
6247
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6248
+ self .assertRaisesRegex (argparse .ArgumentError ,
6249
+ 'argument --bar: not allowed with argument BaZ$' ,
6250
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6251
+
6252
+ def test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar1 (self ):
6253
+ group = self .parser .add_mutually_exclusive_group ()
6254
+ group .add_argument ('--bar' )
6255
+ group .add_argument ('baz' , nargs = '*' , metavar = ('BAZ1' ,))
6256
+ self .assertRaisesRegex (argparse .ArgumentError ,
6257
+ 'argument BAZ1: not allowed with argument --bar$' ,
6258
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6259
+ self .assertRaisesRegex (argparse .ArgumentError ,
6260
+ 'argument --bar: not allowed with argument BAZ1$' ,
6261
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6262
+
6263
+ def test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar2 (self ):
6264
+ group = self .parser .add_mutually_exclusive_group ()
6265
+ group .add_argument ('--bar' )
6266
+ group .add_argument ('baz' , nargs = '*' , metavar = ('BAZ1' , 'BAZ2' ))
6267
+ self .assertRaisesRegex (argparse .ArgumentError ,
6268
+ r'argument BAZ1\[, BAZ2]: not allowed with argument --bar$' ,
6269
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6270
+ self .assertRaisesRegex (argparse .ArgumentError ,
6271
+ r'argument --bar: not allowed with argument BAZ1\[, BAZ2]$' ,
6272
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6273
+
6178
6274
def test_ambiguous_option (self ):
6179
6275
self .parser .add_argument ('--foobaz' )
6180
6276
self .parser .add_argument ('--fooble' , action = 'store_true' )
0 commit comments