@@ -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
@@ -1132,57 +1134,87 @@ class TestPositionalsNargs2None(ParserTestCase):
1132
1134
class TestPositionalsNargsNoneZeroOrMore (ParserTestCase ):
1133
1135
"""Test a Positional with no nargs followed by one with unlimited"""
1134
1136
1135
- argument_signatures = [Sig ('foo' ), Sig ('bar' , nargs = '*' )]
1136
- failures = ['' , '--foo' ]
1137
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' ), Sig ('bar' , nargs = '*' )]
1138
+ failures = ['' , '--foo' , 'a b -x X c' ]
1137
1139
successes = [
1138
- ('a' , NS (foo = 'a' , bar = [])),
1139
- ('a b' , NS (foo = 'a' , bar = ['b' ])),
1140
- ('a b c' , NS (foo = 'a' , bar = ['b' , 'c' ])),
1140
+ ('a' , NS (x = None , foo = 'a' , bar = [])),
1141
+ ('a b' , NS (x = None , foo = 'a' , bar = ['b' ])),
1142
+ ('a b c' , NS (x = None , foo = 'a' , bar = ['b' , 'c' ])),
1143
+ ('-x X a' , NS (x = 'X' , foo = 'a' , bar = [])),
1144
+ ('a -x X' , NS (x = 'X' , foo = 'a' , bar = [])),
1145
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1146
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1147
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1148
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1149
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1150
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1141
1151
]
1142
1152
1143
1153
1144
1154
class TestPositionalsNargsNoneOneOrMore (ParserTestCase ):
1145
1155
"""Test a Positional with no nargs followed by one with one or more"""
1146
1156
1147
- argument_signatures = [Sig ('foo' ), Sig ('bar' , nargs = '+' )]
1148
- failures = ['' , '--foo' , 'a' ]
1157
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' ), Sig ('bar' , nargs = '+' )]
1158
+ failures = ['' , '--foo' , 'a' , 'a b -x X c' ]
1149
1159
successes = [
1150
- ('a b' , NS (foo = 'a' , bar = ['b' ])),
1151
- ('a b c' , NS (foo = 'a' , bar = ['b' , 'c' ])),
1160
+ ('a b' , NS (x = None , foo = 'a' , bar = ['b' ])),
1161
+ ('a b c' , NS (x = None , foo = 'a' , bar = ['b' , 'c' ])),
1162
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1163
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1164
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' ])),
1165
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1166
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1167
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ])),
1152
1168
]
1153
1169
1154
1170
1155
1171
class TestPositionalsNargsNoneOptional (ParserTestCase ):
1156
1172
"""Test a Positional with no nargs followed by one with an Optional"""
1157
1173
1158
- argument_signatures = [Sig ('foo' ), Sig ('bar' , nargs = '?' )]
1174
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' ), Sig ('bar' , nargs = '?' )]
1159
1175
failures = ['' , '--foo' , 'a b c' ]
1160
1176
successes = [
1161
- ('a' , NS (foo = 'a' , bar = None )),
1162
- ('a b' , NS (foo = 'a' , bar = 'b' )),
1177
+ ('a' , NS (x = None , foo = 'a' , bar = None )),
1178
+ ('a b' , NS (x = None , foo = 'a' , bar = 'b' )),
1179
+ ('-x X a' , NS (x = 'X' , foo = 'a' , bar = None )),
1180
+ ('a -x X' , NS (x = 'X' , foo = 'a' , bar = None )),
1181
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = 'b' )),
1182
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = 'b' )),
1183
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = 'b' )),
1163
1184
]
1164
1185
1165
1186
1166
1187
class TestPositionalsNargsZeroOrMoreNone (ParserTestCase ):
1167
1188
"""Test a Positional with unlimited nargs followed by one with none"""
1168
1189
1169
- argument_signatures = [Sig ('foo' , nargs = '*' ), Sig ('bar' )]
1170
- failures = ['' , '--foo' ]
1190
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' , nargs = '*' ), Sig ('bar' )]
1191
+ failures = ['' , '--foo' , 'a -x X b' , 'a -x X b c' , 'a b -x X c' ]
1171
1192
successes = [
1172
- ('a' , NS (foo = [], bar = 'a' )),
1173
- ('a b' , NS (foo = ['a' ], bar = 'b' )),
1174
- ('a b c' , NS (foo = ['a' , 'b' ], bar = 'c' )),
1193
+ ('a' , NS (x = None , foo = [], bar = 'a' )),
1194
+ ('a b' , NS (x = None , foo = ['a' ], bar = 'b' )),
1195
+ ('a b c' , NS (x = None , foo = ['a' , 'b' ], bar = 'c' )),
1196
+ ('-x X a' , NS (x = 'X' , foo = [], bar = 'a' )),
1197
+ ('a -x X' , NS (x = 'X' , foo = [], bar = 'a' )),
1198
+ ('-x X a b' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1199
+ ('a b -x X' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1200
+ ('-x X a b c' , NS (x = 'X' , foo = ['a' , 'b' ], bar = 'c' )),
1201
+ ('a b c -x X' , NS (x = 'X' , foo = ['a' , 'b' ], bar = 'c' )),
1175
1202
]
1176
1203
1177
1204
1178
1205
class TestPositionalsNargsOneOrMoreNone (ParserTestCase ):
1179
1206
"""Test a Positional with one or more nargs followed by one with none"""
1180
1207
1181
- argument_signatures = [Sig ('foo' , nargs = '+' ), Sig ('bar' )]
1182
- failures = ['' , '--foo' , 'a' ]
1208
+ argument_signatures = [Sig ('-x' ), Sig ( ' foo' , nargs = '+' ), Sig ('bar' )]
1209
+ failures = ['' , '--foo' , 'a' , 'a -x X b c' , 'a b -x X c' ]
1183
1210
successes = [
1184
- ('a b' , NS (foo = ['a' ], bar = 'b' )),
1185
- ('a b c' , NS (foo = ['a' , 'b' ], bar = 'c' )),
1211
+ ('a b' , NS (x = None , foo = ['a' ], bar = 'b' )),
1212
+ ('a b c' , NS (x = None , foo = ['a' , 'b' ], bar = 'c' )),
1213
+ ('-x X a b' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1214
+ ('a -x X b' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1215
+ ('a b -x X' , NS (x = 'X' , foo = ['a' ], bar = 'b' )),
1216
+ ('-x X a b c' , NS (x = 'X' , foo = ['a' , 'b' ], bar = 'c' )),
1217
+ ('a b c -x X' , NS (x = 'X' , foo = ['a' , 'b' ], bar = 'c' )),
1186
1218
]
1187
1219
1188
1220
@@ -1267,44 +1299,66 @@ class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase):
1267
1299
"""Test three Positionals: no nargs, unlimited nargs and 1 nargs"""
1268
1300
1269
1301
argument_signatures = [
1302
+ Sig ('-x' ),
1270
1303
Sig ('foo' ),
1271
1304
Sig ('bar' , nargs = '*' ),
1272
1305
Sig ('baz' , nargs = 1 ),
1273
1306
]
1274
- failures = ['' , '--foo' , 'a' ]
1307
+ failures = ['' , '--foo' , 'a' , 'a b -x X c' ]
1275
1308
successes = [
1276
- ('a b' , NS (foo = 'a' , bar = [], baz = ['b' ])),
1277
- ('a b c' , NS (foo = 'a' , bar = ['b' ], baz = ['c' ])),
1309
+ ('a b' , NS (x = None , foo = 'a' , bar = [], baz = ['b' ])),
1310
+ ('a b c' , NS (x = None , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1311
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = [], baz = ['b' ])),
1312
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = [], baz = ['b' ])),
1313
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = [], baz = ['b' ])),
1314
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1315
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1316
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1278
1317
]
1279
1318
1280
1319
1281
1320
class TestPositionalsNargsNoneOneOrMore1 (ParserTestCase ):
1282
1321
"""Test three Positionals: no nargs, one or more nargs and 1 nargs"""
1283
1322
1284
1323
argument_signatures = [
1324
+ Sig ('-x' ),
1285
1325
Sig ('foo' ),
1286
1326
Sig ('bar' , nargs = '+' ),
1287
1327
Sig ('baz' , nargs = 1 ),
1288
1328
]
1289
- failures = ['' , '--foo' , 'a' , 'b' ]
1329
+ failures = ['' , '--foo' , 'a' , 'b' , 'a b -x X c d' , 'a b c -x X d' ]
1290
1330
successes = [
1291
- ('a b c' , NS (foo = 'a' , bar = ['b' ], baz = ['c' ])),
1292
- ('a b c d' , NS (foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1331
+ ('a b c' , NS (x = None , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1332
+ ('a b c d' , NS (x = None , foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1333
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1334
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1335
+ ('a b -x X c' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1336
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' ], baz = ['c' ])),
1337
+ ('-x X a b c d' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1338
+ ('a -x X b c d' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1339
+ ('a b c d -x X' , NS (x = 'X' , foo = 'a' , bar = ['b' , 'c' ], baz = ['d' ])),
1293
1340
]
1294
1341
1295
1342
1296
1343
class TestPositionalsNargsNoneOptional1 (ParserTestCase ):
1297
1344
"""Test three Positionals: no nargs, optional narg and 1 nargs"""
1298
1345
1299
1346
argument_signatures = [
1347
+ Sig ('-x' ),
1300
1348
Sig ('foo' ),
1301
1349
Sig ('bar' , nargs = '?' , default = 0.625 ),
1302
1350
Sig ('baz' , nargs = 1 ),
1303
1351
]
1304
- failures = ['' , '--foo' , 'a' ]
1352
+ failures = ['' , '--foo' , 'a' , 'a b -x X c' ]
1305
1353
successes = [
1306
- ('a b' , NS (foo = 'a' , bar = 0.625 , baz = ['b' ])),
1307
- ('a b c' , NS (foo = 'a' , bar = 'b' , baz = ['c' ])),
1354
+ ('a b' , NS (x = None , foo = 'a' , bar = 0.625 , baz = ['b' ])),
1355
+ ('a b c' , NS (x = None , foo = 'a' , bar = 'b' , baz = ['c' ])),
1356
+ ('-x X a b' , NS (x = 'X' , foo = 'a' , bar = 0.625 , baz = ['b' ])),
1357
+ ('a -x X b' , NS (x = 'X' , foo = 'a' , bar = 0.625 , baz = ['b' ])),
1358
+ ('a b -x X' , NS (x = 'X' , foo = 'a' , bar = 0.625 , baz = ['b' ])),
1359
+ ('-x X a b c' , NS (x = 'X' , foo = 'a' , bar = 'b' , baz = ['c' ])),
1360
+ ('a -x X b c' , NS (x = 'X' , foo = 'a' , bar = 'b' , baz = ['c' ])),
1361
+ ('a b c -x X' , NS (x = 'X' , foo = 'a' , bar = 'b' , baz = ['c' ])),
1308
1362
]
1309
1363
1310
1364
@@ -1520,6 +1574,9 @@ class TestNargsRemainder(ParserTestCase):
1520
1574
successes = [
1521
1575
('X' , NS (x = 'X' , y = [], z = None )),
1522
1576
('-z Z X' , NS (x = 'X' , y = [], z = 'Z' )),
1577
+ ('-z Z X A B' , NS (x = 'X' , y = ['A' , 'B' ], z = 'Z' )),
1578
+ ('X -z Z A B' , NS (x = 'X' , y = ['-z' , 'Z' , 'A' , 'B' ], z = None )),
1579
+ ('X A -z Z B' , NS (x = 'X' , y = ['A' , '-z' , 'Z' , 'B' ], z = None )),
1523
1580
('X A B -z Z' , NS (x = 'X' , y = ['A' , 'B' , '-z' , 'Z' ], z = None )),
1524
1581
('X Y --foo' , NS (x = 'X' , y = ['Y' , '--foo' ], z = None )),
1525
1582
]
@@ -5986,8 +6043,8 @@ def test_basic(self):
5986
6043
5987
6044
args , extras = parser .parse_known_args (argv )
5988
6045
# cannot parse the '1,2,3'
5989
- self .assertEqual (NS (bar = 'y' , cmd = 'cmd' , foo = 'x' , rest = []), args )
5990
- self .assertEqual (["1" , " 2" , "3" ], extras )
6046
+ self .assertEqual (NS (bar = 'y' , cmd = 'cmd' , foo = 'x' , rest = [1 ]), args )
6047
+ self .assertEqual (["2" , "3" ], extras )
5991
6048
5992
6049
argv = 'cmd --foo x 1 --error 2 --bar y 3' .split ()
5993
6050
args , extras = parser .parse_known_intermixed_args (argv )
0 commit comments