mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
[3.13] gh-58573: Fix conflicts between abbreviated long options in the parent parser and subparsers in argparse (GH-124631) (GH-124760)
Check for ambiguous options if the option is consumed, not when it is
parsed.
(cherry picked from commit 3f27153e07
)
This commit is contained in:
parent
0a046771c0
commit
6925e5b5c7
3 changed files with 52 additions and 34 deletions
|
@ -2377,6 +2377,28 @@ class TestAddSubparsers(TestCase):
|
|||
self.assertEqual(C.w, 7)
|
||||
self.assertEqual(C.x, 'b')
|
||||
|
||||
def test_abbreviation(self):
|
||||
parser = ErrorRaisingArgumentParser()
|
||||
parser.add_argument('--foodle')
|
||||
parser.add_argument('--foonly')
|
||||
subparsers = parser.add_subparsers()
|
||||
parser1 = subparsers.add_parser('bar')
|
||||
parser1.add_argument('--fo')
|
||||
parser1.add_argument('--foonew')
|
||||
|
||||
self.assertEqual(parser.parse_args(['--food', 'baz', 'bar']),
|
||||
NS(foodle='baz', foonly=None, fo=None, foonew=None))
|
||||
self.assertEqual(parser.parse_args(['--foon', 'baz', 'bar']),
|
||||
NS(foodle=None, foonly='baz', fo=None, foonew=None))
|
||||
self.assertArgumentParserError(parser.parse_args, ['--fo', 'baz', 'bar'])
|
||||
self.assertEqual(parser.parse_args(['bar', '--fo', 'baz']),
|
||||
NS(foodle=None, foonly=None, fo='baz', foonew=None))
|
||||
self.assertEqual(parser.parse_args(['bar', '--foo', 'baz']),
|
||||
NS(foodle=None, foonly=None, fo=None, foonew='baz'))
|
||||
self.assertEqual(parser.parse_args(['bar', '--foon', 'baz']),
|
||||
NS(foodle=None, foonly=None, fo=None, foonew='baz'))
|
||||
self.assertArgumentParserError(parser.parse_args, ['bar', '--food', 'baz'])
|
||||
|
||||
def test_parse_known_args_with_single_dash_option(self):
|
||||
parser = ErrorRaisingArgumentParser()
|
||||
parser.add_argument('-k', '--known', action='count', default=0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue