@@ -280,16 +280,18 @@ def test_failures(self, tester):
280
280
parser = self ._get_parser (tester )
281
281
for args_str in tester .failures :
282
282
args = args_str .split ()
283
- with tester .assertRaises (ArgumentParserError , msg = args ):
284
- parser .parse_args (args )
283
+ with tester .subTest (args = args ):
284
+ with tester .assertRaises (ArgumentParserError , msg = args ):
285
+ parser .parse_args (args )
285
286
286
287
def test_successes (self , tester ):
287
288
parser = self ._get_parser (tester )
288
289
for args , expected_ns in tester .successes :
289
290
if isinstance (args , str ):
290
291
args = args .split ()
291
- result_ns = self ._parse_args (parser , args )
292
- tester .assertEqual (expected_ns , result_ns )
292
+ with tester .subTest (args = args ):
293
+ result_ns = self ._parse_args (parser , args )
294
+ tester .assertEqual (expected_ns , result_ns )
293
295
294
296
# add tests for each combination of an optionals adding method
295
297
# and an arg parsing method
@@ -1089,57 +1091,87 @@ class TestPositionalsNargs2None(ParserTestCase):
1089
1091
class TestPositionalsNargsNoneZeroOrMore (ParserTestCase ):
1090
1092
"""Test a Positional with no nargs followed by one with unlimited"""
1091
1093
1092
- argument_signatures = [Sig ('foo' ), Sig ('bar' , nargs = '*' )]
1093
- failures = ['' , '--foo' ]
1094
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' ), Sig ('bar' , nargs = '*' )]
1095
+ failures = ['' , '--foo' , 'a b -x X c' ]
1094
1096
successes = [
1095
- ('a' , NS (foo = 'a' , bar = [])),
1096
- ('a b' , NS (foo = 'a' , bar = ['b' ])),
1097
- ('a b c' , NS (foo = 'a' , bar = ['b' , 'c' ])),
1097
+ ('a' , NS (x = None , foo = 'a' , bar = [])),
1098
+ ('a b' , NS (x = None , foo = 'a' , bar = ['b' ])),
1099
+ ('a b c' , NS (x = None , foo = 'a' , bar = ['b' , 'c' ])),
1100
+ ('-x X a' , NS (x = 'X' , foo = 'a' , bar = [])),
1101
+ ('a -x X' , NS (x = 'X' , foo = 'a' , bar = [])),
1102
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1103
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1104
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1105
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1106
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1107
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1098
1108
]
1099
1109
1100
1110
1101
1111
class TestPositionalsNargsNoneOneOrMore (ParserTestCase ):
1102
1112
"""Test a Positional with no nargs followed by one with one or more"""
1103
1113
1104
- argument_signatures = [Sig ('foo' ), Sig ('bar' , nargs = '+' )]
1105
- failures = ['' , '--foo' , 'a' ]
1114
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' ), Sig ('bar' , nargs = '+' )]
1115
+ failures = ['' , '--foo' , 'a' , 'a b -x X c' ]
1106
1116
successes = [
1107
- ('a b' , NS (foo = 'a' , bar = ['b' ])),
1108
- ('a b c' , NS (foo = 'a' , bar = ['b' , 'c' ])),
1117
+ ('a b' , NS (x = None , foo = 'a' , bar = ['b' ])),
1118
+ ('a b c' , NS (x = None , foo = 'a' , bar = ['b' , 'c' ])),
1119
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1120
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1121
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1122
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1123
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1124
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1109
1125
]
1110
1126
1111
1127
1112
1128
class TestPositionalsNargsNoneOptional (ParserTestCase ):
1113
1129
"""Test a Positional with no nargs followed by one with an Optional"""
1114
1130
1115
- argument_signatures = [Sig ('foo' ), Sig ('bar' , nargs = '?' )]
1131
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' ), Sig ('bar' , nargs = '?' )]
1116
1132
failures = ['' , '--foo' , 'a b c' ]
1117
1133
successes = [
1118
- ('a' , NS (foo = 'a' , bar = None )),
1119
- ('a b' , NS (foo = 'a' , bar = 'b' )),
1134
+ ('a' , NS (x = None , foo = 'a' , bar = None )),
1135
+ ('a b' , NS (x = None , foo = 'a' , bar = 'b' )),
1136
+ ('-x X a' , NS (x = 'X' , foo = 'a' , bar = None )),
1137
+ ('a -x X' , NS (x = 'X' , foo = 'a' , bar = None )),
1138
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = 'b' )),
1139
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = 'b' )),
1140
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = 'b' )),
1120
1141
]
1121
1142
1122
1143
1123
1144
class TestPositionalsNargsZeroOrMoreNone (ParserTestCase ):
1124
1145
"""Test a Positional with unlimited nargs followed by one with none"""
1125
1146
1126
- argument_signatures = [Sig ('foo' , nargs = '*' ), Sig ('bar' )]
1127
- failures = ['' , '--foo' ]
1147
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' , nargs = '*' ), Sig ('bar' )]
1148
+ failures = ['' , '--foo' , 'a -x X b' , 'a -x X b c' , 'a b -x X c' ]
1128
1149
successes = [
1129
- ('a' , NS (foo = [], bar = 'a' )),
1130
- ('a b' , NS (foo = ['a' ], bar = 'b' )),
1131
- ('a b c' , NS (foo = ['a' , 'b' ], bar = 'c' )),
1150
+ ('a' , NS (x = None , foo = [], bar = 'a' )),
1151
+ ('a b' , NS (x = None , foo = ['a' ], bar = 'b' )),
1152
+ ('a b c' , NS (x = None , foo = ['a' , 'b' ], bar = 'c' )),
1153
+ ('-x X a' , NS (x = 'X' , foo = [], bar = 'a' )),
1154
+ ('a -x X' , NS (x = 'X' , foo = [], bar = 'a' )),
1155
+ ('-x X a b' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1156
+ ('a b -x X' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1157
+ ('-x X a b c' , NS (x = 'X' , foo = ['a' , 'b' ], bar = 'c' )),
1158
+ ('a b c -x X' , NS (x = 'X' , foo = ['a' , 'b' ], bar = 'c' )),
1132
1159
]
1133
1160
1134
1161
1135
1162
class TestPositionalsNargsOneOrMoreNone (ParserTestCase ):
1136
1163
"""Test a Positional with one or more nargs followed by one with none"""
1137
1164
1138
- argument_signatures = [Sig ('foo' , nargs = '+' ), Sig ('bar' )]
1139
- failures = ['' , '--foo' , 'a' ]
1165
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' , nargs = '+' ), Sig ('bar' )]
1166
+ failures = ['' , '--foo' , 'a' , 'a -x X b c' , 'a b -x X c' ]
1140
1167
successes = [
1141
- ('a b' , NS (foo = ['a' ], bar = 'b' )),
1142
- ('a b c' , NS (foo = ['a' , 'b' ], bar = 'c' )),
1168
+ ('a b' , NS (x = None , foo = ['a' ], bar = 'b' )),
1169
+ ('a b c' , NS (x = None , foo = ['a' , 'b' ], bar = 'c' )),
1170
+ ('-x X a b' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1171
+ ('a -x X b' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1172
+ ('a b -x X' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1173
+ ('-x X a b c' , NS (x = 'X' , foo = ['a' , 'b' ], bar = 'c' )),
1174
+ ('a b c -x X' , NS (x = 'X' , foo = ['a' , 'b' ], bar = 'c' )),
1143
1175
]
1144
1176
1145
1177
@@ -1224,44 +1256,66 @@ class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase):
1224
1256
"""Test three Positionals: no nargs, unlimited nargs and 1 nargs"""
1225
1257
1226
1258
argument_signatures = [
1259
+ Sig ('-x' ),
1227
1260
Sig ('foo' ),
1228
1261
Sig ('bar' , nargs = '*' ),
1229
1262
Sig ('baz' , nargs = 1 ),
1230
1263
]
1231
- failures = ['' , '--foo' , 'a' ]
1264
+ failures = ['' , '--foo' , 'a' , 'a b -x X c' ]
1232
1265
successes = [
1233
- ('a b' , NS (foo = 'a' , bar = [], baz = ['b' ])),
1234
- ('a b c' , NS (foo = 'a' , bar = ['b' ], baz = ['c' ])),
1266
+ ('a b' , NS (x = None , foo = 'a' , bar = [], baz = ['b' ])),
1267
+ ('a b c' , NS (x = None , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1268
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = [], baz = ['b' ])),
1269
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = [], baz = ['b' ])),
1270
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = [], baz = ['b' ])),
1271
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1272
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1273
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1235
1274
]
1236
1275
1237
1276
1238
1277
class TestPositionalsNargsNoneOneOrMore1 (ParserTestCase ):
1239
1278
"""Test three Positionals: no nargs, one or more nargs and 1 nargs"""
1240
1279
1241
1280
argument_signatures = [
1281
+ Sig ('-x' ),
1242
1282
Sig ('foo' ),
1243
1283
Sig ('bar' , nargs = '+' ),
1244
1284
Sig ('baz' , nargs = 1 ),
1245
1285
]
1246
- failures = ['' , '--foo' , 'a' , 'b' ]
1286
+ failures = ['' , '--foo' , 'a' , 'b' , 'a b -x X c d' , 'a b c -x X d' ]
1247
1287
successes = [
1248
- ('a b c' , NS (foo = 'a' , bar = ['b' ], baz = ['c' ])),
1249
- ('a b c d' , NS (foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1288
+ ('a b c' , NS (x = None , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1289
+ ('a b c d' , NS (x = None , foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1290
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1291
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1292
+ ('a b -x X c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1293
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1294
+ ('-x X a b c d' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1295
+ ('a -x X b c d' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1296
+ ('a b c d -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1250
1297
]
1251
1298
1252
1299
1253
1300
class TestPositionalsNargsNoneOptional1 (ParserTestCase ):
1254
1301
"""Test three Positionals: no nargs, optional narg and 1 nargs"""
1255
1302
1256
1303
argument_signatures = [
1304
+ Sig ('-x' ),
1257
1305
Sig ('foo' ),
1258
1306
Sig ('bar' , nargs = '?' , default = 0.625 ),
1259
1307
Sig ('baz' , nargs = 1 ),
1260
1308
]
1261
- failures = ['' , '--foo' , 'a' ]
1309
+ failures = ['' , '--foo' , 'a' , 'a b -x X c' ]
1262
1310
successes = [
1263
- ('a b' , NS (foo = 'a' , bar = 0.625 , baz = ['b' ])),
1264
- ('a b c' , NS (foo = 'a' , bar = 'b' , baz = ['c' ])),
1311
+ ('a b' , NS (x = None , foo = 'a' , bar = 0.625 , baz = ['b' ])),
1312
+ ('a b c' , NS (x = None , foo = 'a' , bar = 'b' , baz = ['c' ])),
1313
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = 0.625 , baz = ['b' ])),
1314
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = 0.625 , baz = ['b' ])),
1315
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = 0.625 , baz = ['b' ])),
1316
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = 'b' , baz = ['c' ])),
1317
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = 'b' , baz = ['c' ])),
1318
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = 'b' , baz = ['c' ])),
1265
1319
]
1266
1320
1267
1321
@@ -1477,6 +1531,9 @@ class TestNargsRemainder(ParserTestCase):
1477
1531
successes = [
1478
1532
('X' , NS (x = 'X' , y = [], z = None )),
1479
1533
('-z Z X' , NS (x = 'X' , y = [], z = 'Z' )),
1534
+ ('-z Z X A B' , NS (x = 'X' , y = ['A' , 'B' ], z = 'Z' )),
1535
+ ('X -z Z A B' , NS (x = 'X' , y = ['-z' , 'Z' , 'A' , 'B' ], z = None )),
1536
+ ('X A -z Z B' , NS (x = 'X' , y = ['A' , '-z' , 'Z' , 'B' ], z = None )),
1480
1537
('X A B -z Z' , NS (x = 'X' , y = ['A' , 'B' , '-z' , 'Z' ], z = None )),
1481
1538
('X Y --foo' , NS (x = 'X' , y = ['Y' , '--foo' ], z = None )),
1482
1539
]
@@ -6018,8 +6075,8 @@ def test_basic(self):
6018
6075
6019
6076
args , extras = parser .parse_known_args (argv )
6020
6077
# cannot parse the '1,2,3'
6021
- self .assertEqual (NS (bar = 'y' , cmd = 'cmd' , foo = 'x' , rest = []), args )
6022
- self .assertEqual (["1" , " 2" , "3" ], extras )
6078
+ self .assertEqual (NS (bar = 'y' , cmd = 'cmd' , foo = 'x' , rest = [1 ]), args )
6079
+ self .assertEqual (["2" , "3" ], extras )
6023
6080
6024
6081
argv = 'cmd --foo x 1 --error 2 --bar y 3' .split ()
6025
6082
args , extras = parser .parse_known_intermixed_args (argv )
0 commit comments