@@ -4898,7 +4898,7 @@ class TestHelpNone(HelpTestCase):
4898
4898
version = ''
4899
4899
4900
4900
4901
- class TestHelpTupleMetavar (HelpTestCase ):
4901
+ class TestHelpTupleMetavarOptional (HelpTestCase ):
4902
4902
"""Test specifying metavar as a tuple"""
4903
4903
4904
4904
parser_signature = Sig (prog = 'PROG' )
@@ -4925,6 +4925,34 @@ class TestHelpTupleMetavar(HelpTestCase):
4925
4925
version = ''
4926
4926
4927
4927
4928
+ class TestHelpTupleMetavarPositional (HelpTestCase ):
4929
+ """Test specifying metavar on a Positional as a tuple"""
4930
+
4931
+ parser_signature = Sig (prog = 'PROG' )
4932
+ argument_signatures = [
4933
+ Sig ('w' , help = 'w help' , nargs = '+' , metavar = ('W1' , 'W2' )),
4934
+ Sig ('x' , help = 'x help' , nargs = '*' , metavar = ('X1' , 'X2' )),
4935
+ Sig ('y' , help = 'y help' , nargs = 3 , metavar = ('Y1' , 'Y2' , 'Y3' )),
4936
+ Sig ('z' , help = 'z help' , nargs = '?' , metavar = ('Z1' ,)),
4937
+ ]
4938
+ argument_group_signatures = []
4939
+ usage = '''\
4940
+ usage: PROG [-h] W1 [W2 ...] [X1 [X2 ...]] Y1 Y2 Y3 [Z1]
4941
+ '''
4942
+ help = usage + '''\
4943
+
4944
+ positional arguments:
4945
+ W1 W2 w help
4946
+ X1 X2 x help
4947
+ Y1 Y2 Y3 y help
4948
+ Z1 z help
4949
+
4950
+ options:
4951
+ -h, --help show this help message and exit
4952
+ '''
4953
+ version = ''
4954
+
4955
+
4928
4956
class TestHelpRawText (HelpTestCase ):
4929
4957
"""Test the RawTextHelpFormatter"""
4930
4958
@@ -6521,6 +6549,27 @@ def test_required_args(self):
6521
6549
'the following arguments are required: bar, baz$' ,
6522
6550
self .parser .parse_args , [])
6523
6551
6552
+ def test_required_args_with_metavar (self ):
6553
+ self .parser .add_argument ('bar' )
6554
+ self .parser .add_argument ('baz' , metavar = 'BaZ' )
6555
+ self .assertRaisesRegex (argparse .ArgumentError ,
6556
+ 'the following arguments are required: bar, BaZ$' ,
6557
+ self .parser .parse_args , [])
6558
+
6559
+ def test_required_args_n (self ):
6560
+ self .parser .add_argument ('bar' )
6561
+ self .parser .add_argument ('baz' , nargs = 3 )
6562
+ self .assertRaisesRegex (argparse .ArgumentError ,
6563
+ 'the following arguments are required: bar, baz$' ,
6564
+ self .parser .parse_args , [])
6565
+
6566
+ def test_required_args_n_with_metavar (self ):
6567
+ self .parser .add_argument ('bar' )
6568
+ self .parser .add_argument ('baz' , nargs = 3 , metavar = ('B' , 'A' , 'Z' ))
6569
+ self .assertRaisesRegex (argparse .ArgumentError ,
6570
+ 'the following arguments are required: bar, B, A, Z$' ,
6571
+ self .parser .parse_args , [])
6572
+
6524
6573
def test_required_args_optional (self ):
6525
6574
self .parser .add_argument ('bar' )
6526
6575
self .parser .add_argument ('baz' , nargs = '?' )
@@ -6535,6 +6584,20 @@ def test_required_args_zero_or_more(self):
6535
6584
'the following arguments are required: bar$' ,
6536
6585
self .parser .parse_args , [])
6537
6586
6587
+ def test_required_args_one_or_more (self ):
6588
+ self .parser .add_argument ('bar' )
6589
+ self .parser .add_argument ('baz' , nargs = '+' )
6590
+ self .assertRaisesRegex (argparse .ArgumentError ,
6591
+ 'the following arguments are required: bar, baz$' ,
6592
+ self .parser .parse_args , [])
6593
+
6594
+ def test_required_args_one_or_more_with_metavar (self ):
6595
+ self .parser .add_argument ('bar' )
6596
+ self .parser .add_argument ('baz' , nargs = '+' , metavar = ('BaZ1' , 'BaZ2' ))
6597
+ self .assertRaisesRegex (argparse .ArgumentError ,
6598
+ r'the following arguments are required: bar, BaZ1\[, BaZ2]$' ,
6599
+ self .parser .parse_args , [])
6600
+
6538
6601
def test_required_args_remainder (self ):
6539
6602
self .parser .add_argument ('bar' )
6540
6603
self .parser .add_argument ('baz' , nargs = '...' )
@@ -6550,6 +6613,39 @@ def test_required_mutually_exclusive_args(self):
6550
6613
'one of the arguments --bar --baz is required' ,
6551
6614
self .parser .parse_args , [])
6552
6615
6616
+ def test_conflicting_mutually_exclusive_args_optional_with_metavar (self ):
6617
+ group = self .parser .add_mutually_exclusive_group ()
6618
+ group .add_argument ('--bar' )
6619
+ group .add_argument ('baz' , nargs = '?' , metavar = 'BaZ' )
6620
+ self .assertRaisesRegex (argparse .ArgumentError ,
6621
+ 'argument BaZ: not allowed with argument --bar$' ,
6622
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6623
+ self .assertRaisesRegex (argparse .ArgumentError ,
6624
+ 'argument --bar: not allowed with argument BaZ$' ,
6625
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6626
+
6627
+ def test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar1 (self ):
6628
+ group = self .parser .add_mutually_exclusive_group ()
6629
+ group .add_argument ('--bar' )
6630
+ group .add_argument ('baz' , nargs = '*' , metavar = ('BAZ1' ,))
6631
+ self .assertRaisesRegex (argparse .ArgumentError ,
6632
+ 'argument BAZ1: not allowed with argument --bar$' ,
6633
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6634
+ self .assertRaisesRegex (argparse .ArgumentError ,
6635
+ 'argument --bar: not allowed with argument BAZ1$' ,
6636
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6637
+
6638
+ def test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar2 (self ):
6639
+ group = self .parser .add_mutually_exclusive_group ()
6640
+ group .add_argument ('--bar' )
6641
+ group .add_argument ('baz' , nargs = '*' , metavar = ('BAZ1' , 'BAZ2' ))
6642
+ self .assertRaisesRegex (argparse .ArgumentError ,
6643
+ r'argument BAZ1\[, BAZ2]: not allowed with argument --bar$' ,
6644
+ self .parser .parse_args , ['--bar' , 'a' , 'b' ])
6645
+ self .assertRaisesRegex (argparse .ArgumentError ,
6646
+ r'argument --bar: not allowed with argument BAZ1\[, BAZ2]$' ,
6647
+ self .parser .parse_args , ['a' , '--bar' , 'b' ])
6648
+
6553
6649
def test_ambiguous_option (self ):
6554
6650
self .parser .add_argument ('--foobaz' )
6555
6651
self .parser .add_argument ('--fooble' , action = 'store_true' )
0 commit comments