@@ -5744,7 +5744,30 @@ def test_zero_or_more_optional(self):
57445744 self .assertEqual (NS (x = []), args )
57455745
57465746 def test_double_dash (self ):
5747- parser = argparse .ArgumentParser ()
5747+ parser = argparse .ArgumentParser (exit_on_error = False )
5748+ parser .add_argument ('-f' , '--foo' )
5749+ parser .add_argument ('bar' , nargs = '*' )
5750+
5751+ args = parser .parse_args (['--foo=--' ])
5752+ self .assertEqual (NS (foo = '--' , bar = []), args )
5753+ self .assertRaisesRegex (argparse .ArgumentError ,
5754+ 'argument -f/--foo: expected one argument' ,
5755+ parser .parse_args , ['--foo' , '--' ])
5756+ args = parser .parse_args (['-f--' ])
5757+ self .assertEqual (NS (foo = '--' , bar = []), args )
5758+ self .assertRaisesRegex (argparse .ArgumentError ,
5759+ 'argument -f/--foo: expected one argument' ,
5760+ parser .parse_args , ['-f' , '--' ])
5761+ args = parser .parse_args (['--foo' , 'a' , '--' , 'b' , 'c' ])
5762+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5763+ args = parser .parse_args (['a' , 'b' , '--foo' , 'c' ])
5764+ self .assertEqual (NS (foo = 'c' , bar = ['a' , 'b' ]), args )
5765+ args = parser .parse_args (['a' , '--' , 'b' , '--foo' , 'c' ])
5766+ self .assertEqual (NS (foo = None , bar = ['a' , 'b' , '--foo' , 'c' ]), args )
5767+ args = parser .parse_args (['a' , '--' , 'b' , '--' , 'c' , '--foo' , 'd' ])
5768+ self .assertEqual (NS (foo = None , bar = ['a' , 'b' , '--' , 'c' , '--foo' , 'd' ]), args )
5769+
5770+ parser = argparse .ArgumentParser (exit_on_error = False )
57485771 parser .add_argument ('-f' , '--foo' , nargs = '*' )
57495772 parser .add_argument ('bar' , nargs = '*' )
57505773
@@ -5758,6 +5781,41 @@ def test_double_dash(self):
57585781 self .assertEqual (NS (foo = [], bar = []), args )
57595782 args = parser .parse_args (['--foo' , 'a' , 'b' , '--' , 'c' , 'd' ])
57605783 self .assertEqual (NS (foo = ['a' , 'b' ], bar = ['c' , 'd' ]), args )
5784+ args = parser .parse_args (['a' , 'b' , '--foo' , 'c' , 'd' ])
5785+ self .assertEqual (NS (foo = ['c' , 'd' ], bar = ['a' , 'b' ]), args )
5786+ args = parser .parse_args (['a' , '--' , 'b' , '--foo' , 'c' , 'd' ])
5787+ self .assertEqual (NS (foo = None , bar = ['a' , 'b' , '--foo' , 'c' , 'd' ]), args )
5788+ args , argv = parser .parse_known_args (['a' , 'b' , '--foo' , 'c' , '--' , 'd' ])
5789+ self .assertEqual (NS (foo = ['c' ], bar = ['a' , 'b' ]), args )
5790+ self .assertEqual (argv , ['--' , 'd' ])
5791+
5792+ parser = argparse .ArgumentParser (exit_on_error = False )
5793+ parser .add_argument ('foo' )
5794+ parser .add_argument ('bar' , nargs = '*' )
5795+
5796+ args = parser .parse_args (['--' , 'a' , 'b' , 'c' ])
5797+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5798+ args = parser .parse_args (['a' , '--' , 'b' , 'c' ])
5799+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5800+ args = parser .parse_args (['a' , 'b' , '--' , 'c' ])
5801+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5802+ args = parser .parse_args (['a' , '--' , 'b' , '--' , 'c' ])
5803+ self .assertEqual (NS (foo = 'a' , bar = ['b' , '--' , 'c' ]), args )
5804+ args = parser .parse_args (['--' , '--' , 'a' , '--' , 'b' , 'c' ])
5805+ self .assertEqual (NS (foo = '--' , bar = ['a' , '--' , 'b' , 'c' ]), args )
5806+
5807+ parser = argparse .ArgumentParser (exit_on_error = False )
5808+ parser .add_argument ('foo' )
5809+ parser .add_argument ('bar' , nargs = argparse .REMAINDER )
5810+
5811+ args = parser .parse_args (['--' , 'a' , 'b' , 'c' ])
5812+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5813+ args = parser .parse_args (['a' , '--' , 'b' , 'c' ])
5814+ self .assertEqual (NS (foo = 'a' , bar = ['b' , 'c' ]), args )
5815+ args = parser .parse_args (['a' , 'b' , '--' , 'c' ])
5816+ self .assertEqual (NS (foo = 'a' , bar = ['b' , '--' , 'c' ]), args )
5817+ args = parser .parse_args (['a' , '--' , 'b' , '--' , 'c' ])
5818+ self .assertEqual (NS (foo = 'a' , bar = ['b' , '--' , 'c' ]), args )
57615819
57625820
57635821# ===========================
0 commit comments