@@ -5384,7 +5384,30 @@ def test_zero_or_more_optional(self):
53845384 self .assertEqual (NS (x = []), args )
53855385
53865386 def test_double_dash (self ):
5387- parser = argparse .ArgumentParser ()
5387+ parser = argparse .ArgumentParser (exit_on_error = False )
5388+ parser .add_argument ('-f' , '--foo' )
5389+ parser .add_argument ('bar' , nargs = '*' )
5390+
5391+ args = parser .parse_args (['--foo=--' ])
5392+ self .assertEqual (NS (foo = '--' , bar = []), args )
5393+ self .assertRaisesRegex (argparse .ArgumentError ,
5394+ 'argument -f/--foo: expected one argument' ,
5395+ parser .parse_args , ['--foo' , '--' ])
5396+ args = parser .parse_args (['-f--' ])
5397+ self .assertEqual (NS (foo = '--' , bar = []), args )
5398+ self .assertRaisesRegex (argparse .ArgumentError ,
5399+ 'argument -f/--foo: expected one argument' ,
5400+ parser .parse_args , ['-f' , '--' ])
5401+ args = parser .parse_args (['--foo' , 'a' , '--' , 'b' , 'c' ])
5402+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5403+ args = parser .parse_args (['a' , 'b' , '--foo' , 'c' ])
5404+ self .assertEqual (NS (foo = 'c' , bar = ['a' , 'b' ]), args )
5405+ args = parser .parse_args (['a' , '--' , 'b' , '--foo' , 'c' ])
5406+ self .assertEqual (NS (foo = None , bar = ['a' , 'b' , '--foo' , 'c' ]), args )
5407+ args = parser .parse_args (['a' , '--' , 'b' , '--' , 'c' , '--foo' , 'd' ])
5408+ self .assertEqual (NS (foo = None , bar = ['a' , 'b' , '--' , 'c' , '--foo' , 'd' ]), args )
5409+
5410+ parser = argparse .ArgumentParser (exit_on_error = False )
53885411 parser .add_argument ('-f' , '--foo' , nargs = '*' )
53895412 parser .add_argument ('bar' , nargs = '*' )
53905413
@@ -5398,6 +5421,41 @@ def test_double_dash(self):
53985421 self .assertEqual (NS (foo = [], bar = []), args )
53995422 args = parser .parse_args (['--foo' , 'a' , 'b' , '--' , 'c' , 'd' ])
54005423 self .assertEqual (NS (foo = ['a' , 'b' ], bar = ['c' , 'd' ]), args )
5424+ args = parser .parse_args (['a' , 'b' , '--foo' , 'c' , 'd' ])
5425+ self .assertEqual (NS (foo = ['c' , 'd' ], bar = ['a' , 'b' ]), args )
5426+ args = parser .parse_args (['a' , '--' , 'b' , '--foo' , 'c' , 'd' ])
5427+ self .assertEqual (NS (foo = None , bar = ['a' , 'b' , '--foo' , 'c' , 'd' ]), args )
5428+ args , argv = parser .parse_known_args (['a' , 'b' , '--foo' , 'c' , '--' , 'd' ])
5429+ self .assertEqual (NS (foo = ['c' ], bar = ['a' , 'b' ]), args )
5430+ self .assertEqual (argv , ['--' , 'd' ])
5431+
5432+ parser = argparse .ArgumentParser (exit_on_error = False )
5433+ parser .add_argument ('foo' )
5434+ parser .add_argument ('bar' , nargs = '*' )
5435+
5436+ args = parser .parse_args (['--' , 'a' , 'b' , 'c' ])
5437+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5438+ args = parser .parse_args (['a' , '--' , 'b' , 'c' ])
5439+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5440+ args = parser .parse_args (['a' , 'b' , '--' , 'c' ])
5441+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5442+ args = parser .parse_args (['a' , '--' , 'b' , '--' , 'c' ])
5443+ self .assertEqual (NS (foo = 'a' , bar = ['b' , '--' , 'c' ]), args )
5444+ args = parser .parse_args (['--' , '--' , 'a' , '--' , 'b' , 'c' ])
5445+ self .assertEqual (NS (foo = '--' , bar = ['a' , '--' , 'b' , 'c' ]), args )
5446+
5447+ parser = argparse .ArgumentParser (exit_on_error = False )
5448+ parser .add_argument ('foo' )
5449+ parser .add_argument ('bar' , nargs = argparse .REMAINDER )
5450+
5451+ args = parser .parse_args (['--' , 'a' , 'b' , 'c' ])
5452+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5453+ args = parser .parse_args (['a' , '--' , 'b' , 'c' ])
5454+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5455+ args = parser .parse_args (['a' , 'b' , '--' , 'c' ])
5456+ self .assertEqual (NS (foo = 'a' , bar = ['b' , '--' , 'c' ]), args )
5457+ args = parser .parse_args (['a' , '--' , 'b' , '--' , 'c' ])
5458+ self .assertEqual (NS (foo = 'a' , bar = ['b' , '--' , 'c' ]), args )
54015459
54025460
54035461# ===========================
0 commit comments