diff options
| author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-07-23 13:27:05 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-23 13:27:05 (GMT) |
| commit | c589992e09d0db7cb47d21d5948929e599fdbb94 (patch) | |
| tree | 31f2f9ebecb56245e0a72c5c6dda2319b372c084 /Lib/test/test_argparse.py | |
| parent | 21db59fc75b6ebb01bf120a8e5930fe032174f73 (diff) | |
| download | cpython-c589992e09d0db7cb47d21d5948929e599fdbb94.zip cpython-c589992e09d0db7cb47d21d5948929e599fdbb94.tar.gz cpython-c589992e09d0db7cb47d21d5948929e599fdbb94.tar.bz2 | |
bpo-29298: Fix crash with required subparsers without dest (GH-3680) (GH-27303)
(cherry picked from commit 17575f73ce2cb9f3a4eb4cc416c690f9a4e7205c)
Co-authored-by: Anthony Sottile <asottile@umich.edu>
Diffstat (limited to 'Lib/test/test_argparse.py')
| -rw-r--r-- | Lib/test/test_argparse.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index 4d0316f..0994e70 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -2060,6 +2060,30 @@ class TestAddSubparsers(TestCase): ret = parser.parse_args(()) self.assertIsNone(ret.command) + def test_required_subparsers_no_destination_error(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers(required=True) + subparsers.add_parser('foo') + subparsers.add_parser('bar') + with self.assertRaises(ArgumentParserError) as excinfo: + parser.parse_args(()) + self.assertRegex( + excinfo.exception.stderr, + 'error: the following arguments are required: {foo,bar}\n$' + ) + + def test_wrong_argument_subparsers_no_destination_error(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers(required=True) + subparsers.add_parser('foo') + subparsers.add_parser('bar') + with self.assertRaises(ArgumentParserError) as excinfo: + parser.parse_args(('baz',)) + self.assertRegex( + excinfo.exception.stderr, + r"error: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$" + ) + def test_optional_subparsers(self): parser = ErrorRaisingArgumentParser() subparsers = parser.add_subparsers(dest='command', required=False) |
