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