@@ -5383,7 +5383,9 @@ def test_zero_or_more_optional(self):
5383
5383
args = parser .parse_args ([])
5384
5384
self .assertEqual (NS (x = []), args )
5385
5385
5386
- def test_double_dash (self ):
5386
+
5387
+ class TestDoubleDash (TestCase ):
5388
+ def test_single_argument_option (self ):
5387
5389
parser = argparse .ArgumentParser (exit_on_error = False )
5388
5390
parser .add_argument ('-f' , '--foo' )
5389
5391
parser .add_argument ('bar' , nargs = '*' )
@@ -5407,6 +5409,7 @@ def test_double_dash(self):
5407
5409
args = parser .parse_args (['a' , '--' , 'b' , '--' , 'c' , '--foo' , 'd' ])
5408
5410
self .assertEqual (NS (foo = None , bar = ['a' , 'b' , '--' , 'c' , '--foo' , 'd' ]), args )
5409
5411
5412
+ def test_multiple_argument_option (self ):
5410
5413
parser = argparse .ArgumentParser (exit_on_error = False )
5411
5414
parser .add_argument ('-f' , '--foo' , nargs = '*' )
5412
5415
parser .add_argument ('bar' , nargs = '*' )
@@ -5429,6 +5432,7 @@ def test_double_dash(self):
5429
5432
self .assertEqual (NS (foo = ['c' ], bar = ['a' , 'b' ]), args )
5430
5433
self .assertEqual (argv , ['--' , 'd' ])
5431
5434
5435
+ def test_multiple_double_dashes (self ):
5432
5436
parser = argparse .ArgumentParser (exit_on_error = False )
5433
5437
parser .add_argument ('foo' )
5434
5438
parser .add_argument ('bar' , nargs = '*' )
@@ -5444,9 +5448,10 @@ def test_double_dash(self):
5444
5448
args = parser .parse_args (['--' , '--' , 'a' , '--' , 'b' , 'c' ])
5445
5449
self .assertEqual (NS (foo = '--' , bar = ['a' , '--' , 'b' , 'c' ]), args )
5446
5450
5451
+ def test_remainder (self ):
5447
5452
parser = argparse .ArgumentParser (exit_on_error = False )
5448
5453
parser .add_argument ('foo' )
5449
- parser .add_argument ('bar' , nargs = argparse . REMAINDER )
5454
+ parser .add_argument ('bar' , nargs = '...' )
5450
5455
5451
5456
args = parser .parse_args (['--' , 'a' , 'b' , 'c' ])
5452
5457
self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
@@ -5457,6 +5462,40 @@ def test_double_dash(self):
5457
5462
args = parser .parse_args (['a' , '--' , 'b' , '--' , 'c' ])
5458
5463
self .assertEqual (NS (foo = 'a' , bar = ['b' , '--' , 'c' ]), args )
5459
5464
5465
+ parser = argparse .ArgumentParser (exit_on_error = False )
5466
+ parser .add_argument ('--foo' )
5467
+ parser .add_argument ('bar' , nargs = '...' )
5468
+ args = parser .parse_args (['--foo' , 'a' , '--' , 'b' , '--' , 'c' ])
5469
+ self .assertEqual (NS (foo = 'a' , bar = ['--' , 'b' , '--' , 'c' ]), args )
5470
+
5471
+ def test_subparser (self ):
5472
+ parser = argparse .ArgumentParser (exit_on_error = False )
5473
+ parser .add_argument ('foo' )
5474
+ subparsers = parser .add_subparsers ()
5475
+ parser1 = subparsers .add_parser ('run' )
5476
+ parser1 .add_argument ('-f' )
5477
+ parser1 .add_argument ('bar' , nargs = '*' )
5478
+
5479
+ args = parser .parse_args (['x' , 'run' , 'a' , 'b' , '-f' , 'c' ])
5480
+ self .assertEqual (NS (foo = 'x' , f = 'c' , bar = ['a' , 'b' ]), args )
5481
+ args = parser .parse_args (['x' , 'run' , 'a' , 'b' , '--' , '-f' , 'c' ])
5482
+ self .assertEqual (NS (foo = 'x' , f = None , bar = ['a' , 'b' , '-f' , 'c' ]), args )
5483
+ args = parser .parse_args (['x' , 'run' , 'a' , '--' , 'b' , '-f' , 'c' ])
5484
+ self .assertEqual (NS (foo = 'x' , f = None , bar = ['a' , 'b' , '-f' , 'c' ]), args )
5485
+ args = parser .parse_args (['x' , 'run' , '--' , 'a' , 'b' , '-f' , 'c' ])
5486
+ self .assertEqual (NS (foo = 'x' , f = None , bar = ['a' , 'b' , '-f' , 'c' ]), args )
5487
+ args = parser .parse_args (['x' , '--' , 'run' , 'a' , 'b' , '-f' , 'c' ])
5488
+ self .assertEqual (NS (foo = 'x' , f = 'c' , bar = ['a' , 'b' ]), args )
5489
+ args = parser .parse_args (['--' , 'x' , 'run' , 'a' , 'b' , '-f' , 'c' ])
5490
+ self .assertEqual (NS (foo = 'x' , f = 'c' , bar = ['a' , 'b' ]), args )
5491
+ args = parser .parse_args (['x' , 'run' , '--' , 'a' , '--' , 'b' ])
5492
+ self .assertEqual (NS (foo = 'x' , f = None , bar = ['a' , '--' , 'b' ]), args )
5493
+ args = parser .parse_args (['x' , '--' , 'run' , '--' , 'a' , '--' , 'b' ])
5494
+ self .assertEqual (NS (foo = 'x' , f = None , bar = ['a' , '--' , 'b' ]), args )
5495
+ self .assertRaisesRegex (argparse .ArgumentError ,
5496
+ "invalid choice: '--'" ,
5497
+ parser .parse_args , ['--' , 'x' , '--' , 'run' , 'a' , 'b' ])
5498
+
5460
5499
5461
5500
# ===========================
5462
5501
# parse_intermixed_args tests
0 commit comments