[3.9] bpo-29298: Fix crash with required subparsers without dest (GH-3680) by miss-islington · Pull Request #27304 · python/cpython
Expand Up
@@ -2057,6 +2057,30 @@ def test_required_subparsers_default(self):
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) Expand Down
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) Expand Down