diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index 22cae626cc..22bc0a9135 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -5356,6 +5356,51 @@ class TestExitOnError(TestCase): with self.assertRaises(argparse.ArgumentError): self.parser.parse_args('--integers a'.split()) + default_error_code = 2 + exit_on_error_parser = ErrorRaisingArgumentParser( + prog='PROG', + exit_on_error=True, + add_help=False, + ) + exit_on_error_parser.add_argument('--integers', type=int, + required=True) + no_exit_on_error_parser = ErrorRaisingArgumentParser( + prog='PROG', + exit_on_error=False, + ) + no_exit_on_error_parser.add_argument('--integers', type=int, + required=True) + usage = "usage: PROG --integers INTEGERS" + + def test_parse_args_with_unrecognized_arg(self): + expected_error_message = "PROG: error: unrecognized arguments: --floats\n" + expected_stderr = "\n".join((self.usage, expected_error_message)) + + for parser in ( + self.exit_on_error_parser, self.no_exit_on_error_parser + ): + with self.assertRaises(ArgumentParserError) as cm: + self.exit_on_error_parser.parse_args( + '--integers 1 --floats'.split() + ) + + exception = cm.exception + self.assertEqual(exception.stderr, expected_stderr) + self.assertEqual(exception.error_code, self.default_error_code) + + def test_parse_args_with_missing_requried_arg(self): + expected_error_message = "PROG: error: the following arguments are required: --integers\n" + expected_stderr = "\n".join((self.usage, expected_error_message)) + + for parser in ( + self.exit_on_error_parser, self.no_exit_on_error_parser + ): + with self.assertRaises(ArgumentParserError) as cm: + self.exit_on_error_parser.parse_args([]) + + exception = cm.exception + self.assertEqual(exception.stderr, expected_stderr) + self.assertEqual(exception.error_code, self.default_error_code) def test_main(): support.run_unittest(__name__)