@@ -4898,7 +4898,7 @@ class TestHelpNone(HelpTestCase):
48984898 version = ''
48994899
49004900
4901- class TestHelpTupleMetavar (HelpTestCase ):
4901+ class TestHelpTupleMetavarOptional (HelpTestCase ):
49024902 """Test specifying metavar as a tuple"""
49034903
49044904 parser_signature = Sig (prog = 'PROG' )
@@ -4925,6 +4925,34 @@ class TestHelpTupleMetavar(HelpTestCase):
49254925 version = ''
49264926
49274927
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+
49284956class TestHelpRawText (HelpTestCase ):
49294957 """Test the RawTextHelpFormatter"""
49304958
@@ -6521,6 +6549,27 @@ def test_required_args(self):
65216549 'the following arguments are required: bar, baz$' ,
65226550 self .parser .parse_args , [])
65236551
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+
65246573 def test_required_args_optional (self ):
65256574 self .parser .add_argument ('bar' )
65266575 self .parser .add_argument ('baz' , nargs = '?' )
@@ -6535,6 +6584,20 @@ def test_required_args_zero_or_more(self):
65356584 'the following arguments are required: bar$' ,
65366585 self .parser .parse_args , [])
65376586
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+
65386601 def test_required_args_remainder (self ):
65396602 self .parser .add_argument ('bar' )
65406603 self .parser .add_argument ('baz' , nargs = '...' )
@@ -6550,6 +6613,39 @@ def test_required_mutually_exclusive_args(self):
65506613 'one of the arguments --bar --baz is required' ,
65516614 self .parser .parse_args , [])
65526615
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+
65536649 def test_ambiguous_option (self ):
65546650 self .parser .add_argument ('--foobaz' )
65556651 self .parser .add_argument ('--fooble' , action = 'store_true' )
0 commit comments