@@ -4893,7 +4893,7 @@ class TestHelpNone(HelpTestCase):
4893
4893
version = ''
4894
4894
4895
4895
4896
- class TestHelpTupleMetavar (HelpTestCase ):
4896
+ class TestHelpTupleMetavarOptional (HelpTestCase ):
4897
4897
"""Test specifying metavar as a tuple"""
4898
4898
4899
4899
parser_signature = Sig (prog = 'PROG' )
@@ -4920,6 +4920,34 @@ class TestHelpTupleMetavar(HelpTestCase):
4920
4920
version = ''
4921
4921
4922
4922
4923
+ class TestHelpTupleMetavarPositional (HelpTestCase ):
4924
+ """Test specifying metavar on a Positional as a tuple"""
4925
+
4926
+ parser_signature = Sig (prog = 'PROG' )
4927
+ argument_signatures = [
4928
+ Sig ('w' , help = 'w help' , nargs = '+' , metavar = ('W1' , 'W2' )),
4929
+ Sig ('x' , help = 'x help' , nargs = '*' , metavar = ('X1' , 'X2' )),
4930
+ Sig ('y' , help = 'y help' , nargs = 3 , metavar = ('Y1' , 'Y2' , 'Y3' )),
4931
+ Sig ('z' , help = 'z help' , nargs = '?' , metavar = ('Z1' ,)),
4932
+ ]
4933
+ argument_group_signatures = []
4934
+ usage = '''\
4935
+ usage: PROG [-h] W1 [W2 ...] [X1 [X2 ...]] Y1 Y2 Y3 [Z1]
4936
+ '''
4937
+ help = usage + '''\
4938
+
4939
+ positional arguments:
4940
+ W1 W2 w help
4941
+ X1 X2 x help
4942
+ Y1 Y2 Y3 y help
4943
+ Z1 z help
4944
+
4945
+ options:
4946
+ -h, --help show this help message and exit
4947
+ '''
4948
+ version = ''
4949
+
4950
+
4923
4951
class TestHelpRawText (HelpTestCase ):
4924
4952
"""Test the RawTextHelpFormatter"""
4925
4953
@@ -6516,6 +6544,27 @@ def test_required_args(self):
6516
6544
'the following arguments are required: bar, baz$' ,
6517
6545
self .parser .parse_args , [])
6518
6546
6547
+ def test_required_args_with_metavar (self ):
6548
+ self .parser .add_argument ('bar' )
6549
+ self .parser .add_argument ('baz' , metavar = 'BaZ' )
6550
+ self .assertRaisesRegex (argparse .ArgumentError ,
6551
+ 'the following arguments are required: bar, BaZ$' ,
6552
+ self .parser .parse_args , [])
6553
+
6554
+ def test_required_args_n (self ):
6555
+ self .parser .add_argument ('bar' )
6556
+ self .parser .add_argument ('baz' , nargs = 3 )
6557
+ self .assertRaisesRegex (argparse .ArgumentError ,
6558
+ 'the following arguments are required: bar, baz$' ,
6559
+ self .parser .parse_args , [])
6560
+
6561
+ def test_required_args_n_with_metavar (self ):
6562
+ self .parser .add_argument ('bar' )
6563
+ self .parser .add_argument ('baz' , nargs = 3 , metavar = ('B' , 'A' , 'Z' ))
6564
+ self .assertRaisesRegex (argparse .ArgumentError ,
6565
+ 'the following arguments are required: bar, B, A, Z$' ,
6566
+ self .parser .parse_args , [])
6567
+
6519
6568
def test_required_args_optional (self ):
6520
6569
self .parser .add_argument ('bar' )
6521
6570
self .parser .add_argument ('baz' , nargs = '?' )
@@ -6530,6 +6579,20 @@ def test_required_args_zero_or_more(self):
6530
6579
'the following arguments are required: bar$' ,
6531
6580
self .parser .parse_args , [])
6532
6581
6582
+ def test_required_args_one_or_more (self ):
6583
+ self .parser .add_argument ('bar' )
6584
+ self .parser .add_argument ('baz' , nargs = '+' )
6585
+ self .assertRaisesRegex (argparse .ArgumentError ,
6586
+ 'the following arguments are required: bar, baz$' ,
6587
+ self .parser .parse_args , [])
6588
+
6589
+ def test_required_args_one_or_more_with_metavar (self ):
6590
+ self .parser .add_argument ('bar' )
6591
+ self .parser .add_argument ('baz' , nargs = '+' , metavar = ('BaZ1' , 'BaZ2' ))
6592
+ self .assertRaisesRegex (argparse .ArgumentError ,
6593
+ r'the following arguments are required: bar, BaZ1\[, BaZ2]$' ,
6594
+ self .parser .parse_args , [])
6595
+
6533
6596
def test_required_args_remainder (self ):
6534
6597
self .parser .add_argument ('bar' )
6535
6598
self .parser .add_argument ('baz' , nargs = '...' )
@@ -6545,6 +6608,39 @@ def test_required_mutually_exclusive_args(self):
6545
6608
'one of the arguments --bar --baz is required' ,
6546
6609
self .parser .parse_args , [])
6547
6610
6611
+ def test_conflicting_mutually_exclusive_args_optional_with_metavar (self ):
6612
+ group = self .parser .add_mutually_exclusive_group ()
6613
+ group .add_argument ('--bar' )
6614
+ group .add_argument ('baz' , nargs = '?' , metavar = 'BaZ' )
6615
+ self .assertRaisesRegex (argparse .ArgumentError ,
6616
+ 'argument BaZ: not allowed with argument --bar$' ,
6617
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6618
+ self .assertRaisesRegex (argparse .ArgumentError ,
6619
+ 'argument --bar: not allowed with argument BaZ$' ,
6620
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6621
+
6622
+ def test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar1 (self ):
6623
+ group = self .parser .add_mutually_exclusive_group ()
6624
+ group .add_argument ('--bar' )
6625
+ group .add_argument ('baz' , nargs = '*' , metavar = ('BAZ1' ,))
6626
+ self .assertRaisesRegex (argparse .ArgumentError ,
6627
+ 'argument BAZ1: not allowed with argument --bar$' ,
6628
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6629
+ self .assertRaisesRegex (argparse .ArgumentError ,
6630
+ 'argument --bar: not allowed with argument BAZ1$' ,
6631
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6632
+
6633
+ def test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar2 (self ):
6634
+ group = self .parser .add_mutually_exclusive_group ()
6635
+ group .add_argument ('--bar' )
6636
+ group .add_argument ('baz' , nargs = '*' , metavar = ('BAZ1' , 'BAZ2' ))
6637
+ self .assertRaisesRegex (argparse .ArgumentError ,
6638
+ r'argument BAZ1\[, BAZ2]: not allowed with argument --bar$' ,
6639
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6640
+ self .assertRaisesRegex (argparse .ArgumentError ,
6641
+ r'argument --bar: not allowed with argument BAZ1\[, BAZ2]$' ,
6642
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6643
+
6548
6644
def test_ambiguous_option (self ):
6549
6645
self .parser .add_argument ('--foobaz' )
6550
6646
self .parser .add_argument ('--fooble' , action = 'store_true' )
0 commit comments