@@ -4895,7 +4895,7 @@ class TestHelpNone(HelpTestCase):
48954895 version = ''
48964896
48974897
4898- class TestHelpTupleMetavar (HelpTestCase ):
4898+ class TestHelpTupleMetavarOptional (HelpTestCase ):
48994899 """Test specifying metavar as a tuple"""
49004900
49014901 parser_signature = Sig (prog = 'PROG' )
@@ -4922,6 +4922,34 @@ class TestHelpTupleMetavar(HelpTestCase):
49224922 version = ''
49234923
49244924
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+
49254953class TestHelpRawText (HelpTestCase ):
49264954 """Test the RawTextHelpFormatter"""
49274955
@@ -6518,6 +6546,27 @@ def test_required_args(self):
65186546 'the following arguments are required: bar, baz$' ,
65196547 self .parser .parse_args , [])
65206548
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+
65216570 def test_required_args_optional (self ):
65226571 self .parser .add_argument ('bar' )
65236572 self .parser .add_argument ('baz' , nargs = '?' )
@@ -6532,6 +6581,20 @@ def test_required_args_zero_or_more(self):
65326581 'the following arguments are required: bar$' ,
65336582 self .parser .parse_args , [])
65346583
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+
65356598 def test_required_args_remainder (self ):
65366599 self .parser .add_argument ('bar' )
65376600 self .parser .add_argument ('baz' , nargs = '...' )
@@ -6547,6 +6610,39 @@ def test_required_mutually_exclusive_args(self):
65476610 'one of the arguments --bar --baz is required' ,
65486611 self .parser .parse_args , [])
65496612
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+
65506646 def test_ambiguous_option (self ):
65516647 self .parser .add_argument ('--foobaz' )
65526648 self .parser .add_argument ('--fooble' , action = 'store_true' )
0 commit comments