summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_argparse.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-09-24 07:55:33 (GMT)
committerGitHub <noreply@github.com>2024-09-24 07:55:33 (GMT)
commit3c83f9958c14cd62ad8951c53536f7788745b0ba (patch)
tree3e02b7979efb16a34fdf9d7296da4aa9c0d9e08b /Lib/test/test_argparse.py
parentc578271366176a1d1b0941897efefb6e4d6508b4 (diff)
downloadcpython-3c83f9958c14cd62ad8951c53536f7788745b0ba.zip
cpython-3c83f9958c14cd62ad8951c53536f7788745b0ba.tar.gz
cpython-3c83f9958c14cd62ad8951c53536f7788745b0ba.tar.bz2
gh-72795: Make positional arguments with nargs='*' or REMAINDER non-required (GH-124306)
This allows to use positional argument with nargs='*' and without default in mutually exclusive group and improves error message about required arguments.
Diffstat (limited to 'Lib/test/test_argparse.py')
-rw-r--r--Lib/test/test_argparse.py31
1 files changed, 26 insertions, 5 deletions
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 3d43fc8..b04f044 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -3079,7 +3079,7 @@ class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase):
group = parser.add_mutually_exclusive_group(required=required)
group.add_argument('--foo', action='store_true', help='FOO')
group.add_argument('--spam', help='SPAM')
- group.add_argument('badger', nargs='*', default='X', help='BADGER')
+ group.add_argument('badger', nargs='*', help='BADGER')
return parser
failures = [
@@ -3090,13 +3090,13 @@ class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase):
'--foo X Y',
]
successes = [
- ('--foo', NS(foo=True, spam=None, badger='X')),
- ('--spam S', NS(foo=False, spam='S', badger='X')),
+ ('--foo', NS(foo=True, spam=None, badger=[])),
+ ('--spam S', NS(foo=False, spam='S', badger=[])),
('X', NS(foo=False, spam=None, badger=['X'])),
('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])),
]
successes_when_not_required = [
- ('', NS(foo=False, spam=None, badger='X')),
+ ('', NS(foo=False, spam=None, badger=[])),
]
usage_when_not_required = '''\
@@ -6369,7 +6369,28 @@ class TestExitOnError(TestCase):
self.parser.add_argument('bar')
self.parser.add_argument('baz')
self.assertRaisesRegex(argparse.ArgumentError,
- 'the following arguments are required: bar, baz',
+ 'the following arguments are required: bar, baz$',
+ self.parser.parse_args, [])
+
+ def test_required_args_optional(self):
+ self.parser.add_argument('bar')
+ self.parser.add_argument('baz', nargs='?')
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'the following arguments are required: bar$',
+ self.parser.parse_args, [])
+
+ def test_required_args_zero_or_more(self):
+ self.parser.add_argument('bar')
+ self.parser.add_argument('baz', nargs='*')
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'the following arguments are required: bar$',
+ self.parser.parse_args, [])
+
+ def test_required_args_remainder(self):
+ self.parser.add_argument('bar')
+ self.parser.add_argument('baz', nargs='...')
+ self.assertRaisesRegex(argparse.ArgumentError,
+ 'the following arguments are required: bar$',
self.parser.parse_args, [])
def test_required_mutually_exclusive_args(self):