mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-138525: Support single-dash long options and prefix_chars in BooleanOptionalAction (GH-138692)
-nofoo is generated for -foo. ++no-foo is generated for ++foo. /nofoo is generated for /foo.
This commit is contained in:
parent
cde19e565c
commit
425fd85ca3
5 changed files with 102 additions and 4 deletions
|
|
@ -805,6 +805,76 @@ def test_invalid_name(self):
|
|||
self.assertEqual(str(cm.exception),
|
||||
"invalid option name '--no-foo' for BooleanOptionalAction")
|
||||
|
||||
class TestBooleanOptionalActionSingleDash(ParserTestCase):
|
||||
"""Tests BooleanOptionalAction with single dash"""
|
||||
|
||||
argument_signatures = [
|
||||
Sig('-foo', '-x', action=argparse.BooleanOptionalAction),
|
||||
]
|
||||
failures = ['--foo', '--no-foo', '-no-foo', '-no-x', '-nox']
|
||||
successes = [
|
||||
('', NS(foo=None)),
|
||||
('-foo', NS(foo=True)),
|
||||
('-nofoo', NS(foo=False)),
|
||||
('-x', NS(foo=True)),
|
||||
]
|
||||
|
||||
def test_invalid_name(self):
|
||||
parser = argparse.ArgumentParser()
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
parser.add_argument('-nofoo', action=argparse.BooleanOptionalAction)
|
||||
self.assertEqual(str(cm.exception),
|
||||
"invalid option name '-nofoo' for BooleanOptionalAction")
|
||||
|
||||
class TestBooleanOptionalActionAlternatePrefixChars(ParserTestCase):
|
||||
"""Tests BooleanOptionalAction with custom prefixes"""
|
||||
|
||||
parser_signature = Sig(prefix_chars='+-', add_help=False)
|
||||
argument_signatures = [Sig('++foo', action=argparse.BooleanOptionalAction)]
|
||||
failures = ['--foo', '--no-foo']
|
||||
successes = [
|
||||
('', NS(foo=None)),
|
||||
('++foo', NS(foo=True)),
|
||||
('++no-foo', NS(foo=False)),
|
||||
]
|
||||
|
||||
def test_invalid_name(self):
|
||||
parser = argparse.ArgumentParser(prefix_chars='+/')
|
||||
with self.assertRaisesRegex(ValueError,
|
||||
'BooleanOptionalAction.*is not valid for positional arguments'):
|
||||
parser.add_argument('--foo', action=argparse.BooleanOptionalAction)
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
parser.add_argument('++no-foo', action=argparse.BooleanOptionalAction)
|
||||
self.assertEqual(str(cm.exception),
|
||||
"invalid option name '++no-foo' for BooleanOptionalAction")
|
||||
|
||||
class TestBooleanOptionalActionSingleAlternatePrefixChar(ParserTestCase):
|
||||
"""Tests BooleanOptionalAction with single alternate prefix char"""
|
||||
|
||||
parser_signature = Sig(prefix_chars='+/', add_help=False)
|
||||
argument_signatures = [
|
||||
Sig('+foo', '+x', action=argparse.BooleanOptionalAction),
|
||||
]
|
||||
failures = ['++foo', '++no-foo', '++nofoo',
|
||||
'-no-foo', '-nofoo', '+no-foo', '-nofoo',
|
||||
'+no-x', '+nox', '-no-x', '-nox']
|
||||
successes = [
|
||||
('', NS(foo=None)),
|
||||
('+foo', NS(foo=True)),
|
||||
('+nofoo', NS(foo=False)),
|
||||
('+x', NS(foo=True)),
|
||||
]
|
||||
|
||||
def test_invalid_name(self):
|
||||
parser = argparse.ArgumentParser(prefix_chars='+/')
|
||||
with self.assertRaisesRegex(ValueError,
|
||||
'BooleanOptionalAction.*is not valid for positional arguments'):
|
||||
parser.add_argument('-foo', action=argparse.BooleanOptionalAction)
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
parser.add_argument('+nofoo', action=argparse.BooleanOptionalAction)
|
||||
self.assertEqual(str(cm.exception),
|
||||
"invalid option name '+nofoo' for BooleanOptionalAction")
|
||||
|
||||
class TestBooleanOptionalActionRequired(ParserTestCase):
|
||||
"""Tests BooleanOptionalAction required"""
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue