@@ -2877,26 +2877,30 @@ def test_failures_when_not_required(self):
2877
2877
parse_args = self .get_parser (required = False ).parse_args
2878
2878
error = ArgumentParserError
2879
2879
for args_string in self .failures :
2880
- self .assertRaises (error , parse_args , args_string .split ())
2880
+ with self .subTest (args = args_string ):
2881
+ self .assertRaises (error , parse_args , args_string .split ())
2881
2882
2882
2883
def test_failures_when_required (self ):
2883
2884
parse_args = self .get_parser (required = True ).parse_args
2884
2885
error = ArgumentParserError
2885
2886
for args_string in self .failures + ['' ]:
2886
- self .assertRaises (error , parse_args , args_string .split ())
2887
+ with self .subTest (args = args_string ):
2888
+ self .assertRaises (error , parse_args , args_string .split ())
2887
2889
2888
2890
def test_successes_when_not_required (self ):
2889
2891
parse_args = self .get_parser (required = False ).parse_args
2890
2892
successes = self .successes + self .successes_when_not_required
2891
2893
for args_string , expected_ns in successes :
2892
- actual_ns = parse_args (args_string .split ())
2893
- self .assertEqual (actual_ns , expected_ns )
2894
+ with self .subTest (args = args_string ):
2895
+ actual_ns = parse_args (args_string .split ())
2896
+
10000
self .assertEqual (actual_ns , expected_ns )
2894
2897
2895
2898
def test_successes_when_required (self ):
2896
2899
parse_args = self .get_parser (required = True ).parse_args
2897
2900
for args_string , expected_ns in self .successes :
2898
- actual_ns = parse_args (args_string .split ())
2899
- self .assertEqual (actual_ns , expected_ns )
2901
+ with self .subTest (args = args_string ):
2902
+ actual_ns = parse_args (args_string .split ())
2903
+ self .assertEqual (actual_ns , expected_ns )
2900
2904
2901
2905
def test_usage_when_not_required (self ):
2902
2906
format_usage = self .get_parser (required = False ).format_usage
@@ -3073,7 +3077,7 @@ def get_parser(self, required):
3073
3077
group = parser .add_mutually_exclusive_group (required = required )
3074
3078
group .add_argument ('--foo' , action = 'store_true' , help = 'FOO' )
3075
3079
group .add_argument ('--spam' , help = 'SPAM' )
3076
- group .add_argument ('badger' , nargs = '*' , default = 'X' , help = 'BADGER' )
3080
+ group .add_argument ('badger' , nargs = '*' , help = 'BADGER' )
3077
3081
return parser
3078
3082
3079
3083
failures = [
@@ -3084,13 +3088,13 @@ def get_parser(self, required):
3084
3088
'--foo X Y' ,
3085
3089
]
3086
3090
successes = [
3087
- ('--foo' , NS (foo = True , spam = None , badger = 'X' )),
3088
- ('--spam S' , NS (foo = False , spam = 'S' , badger = 'X' )),
3091
+ ('--foo' , NS (foo = True , spam = None , badger = [] )),
3092
+ ('--spam S' , NS (foo = False , spam = 'S' , badger = [] )),
3089
3093
('X' , NS (foo = False , spam = None , badger = ['X' ])),
3090
3094
('X Y Z' , NS (foo = False , spam = None , badger = ['X' , 'Y' , 'Z' ])),
3091
3095
]
3092
3096
successes_when_not_required = [
3093
- ('' , NS (foo = False , spam = None , badger = 'X' )),
3097
+ ('' , NS (foo = False , spam = None , badger = [] )),
3094
3098
]
3095
3099
3096
3100
usage_when_not_required = '''\
@@ -6207,6 +6211,27 @@ def test_required_args(self):
6207
6211
'the following arguments are required: bar, baz' ,
6208
6212
self .parser .parse_args , [])
6209
6213
6214
+ def test_required_args_optional (self ):
6215
+ self .parser .add_argument ('bar' )
6216
+ self .parser .add_argument ('baz' , nargs = '?' )
6217
+ self .assertRaisesRegex (argparse .ArgumentError ,
6218
+ 'the following arguments are required: bar' ,
6219
+ self .parser .parse_args , [])
6220
+
6221
+ def test_required_args_zero_or_more (self ):
6222
+ self .parser .add_argument ('bar' )
6223
+ self .parser .add_argument ('baz' , nargs = '*' )
6224
+ self .assertRaisesRegex (argparse .ArgumentError ,
6225
+ 'the following arguments are required: bar' ,
6226
+ self .parser .parse_args , [])
6227
+
6228
+ def test_required_args_remainder (self ):
6229
+ self .parser .add_argument ('bar' )
6230
+ self .parser .add_argument ('baz' , nargs = '...' )
6231
+ self .assertRaisesRegex (argparse .ArgumentError ,
6232
+ 'the following arguments are required: bar' ,
6233
+ self .parser .parse_args , [])
6234
+
6210
6235
def test_required_mutually_exclusive_args (self ):
6211
6236
group = self .parser .add_mutually_exclusive_group (required = True )
6212
6237
group .add_argument ('--bar' )
0 commit comments