diff options
author | Ezio Melotti <ezio.melotti@gmail.com> | 2012-11-23 16:46:11 (GMT) |
---|---|---|
committer | Ezio Melotti <ezio.melotti@gmail.com> | 2012-11-23 16:46:11 (GMT) |
commit | ec6486d52d89cea1362697dd0d92e127c188d298 (patch) | |
tree | d90ba79332f504ea7997f176a723a707af6936ce | |
parent | 0afe4e4fa6df2acc46de6e826de06b9f343de7f1 (diff) | |
download | cpython-ec6486d52d89cea1362697dd0d92e127c188d298.zip cpython-ec6486d52d89cea1362697dd0d92e127c188d298.tar.gz cpython-ec6486d52d89cea1362697dd0d92e127c188d298.tar.bz2 |
#16306: report only the first unknown option and add more tests. Patch by Serhiy Storchaka.
-rw-r--r-- | Lib/test/test_cmd_line.py | 18 | ||||
-rw-r--r-- | Modules/main.c | 1 | ||||
-rw-r--r-- | Python/getopt.c | 2 |
3 files changed, 16 insertions, 5 deletions
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index b803046..12f26d9 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -116,14 +116,24 @@ class CmdLineTest(unittest.TestCase): print >>script, "del sys.modules['__main__']" assert_python_ok(filename) - def test_unknown_options(self): - # Add "without='-E'" to prevent _assert_python append env_vars -E - # which changes the output of stderr + rc, out, err = assert_python_failure('-E', '-z') + self.assertIn(b'Unknown option: -z', err) + self.assertEqual(err.splitlines().count(b'Unknown option: -z'), 1) + self.assertEqual(b'', out) + # Add "without='-E'" to prevent _assert_python to append -E + # to env_vars and change the output of stderr rc, out, err = assert_python_failure('-z', without='-E') - self.assertIn(b'Unknown option', err) + self.assertIn(b'Unknown option: -z', err) self.assertEqual(err.splitlines().count(b'Unknown option: -z'), 1) self.assertEqual(b'', out) + rc, out, err = assert_python_failure('-a', '-z', without='-E') + self.assertIn(b'Unknown option: -a', err) + # only the first unknown option is reported + self.assertNotIn(b'Unknown option: -z', err) + self.assertEqual(err.splitlines().count(b'Unknown option: -a'), 1) + self.assertEqual(b'', out) + def test_main(): test.test_support.run_unittest(CmdLineTest) diff --git a/Modules/main.c b/Modules/main.c index 1ce7c8f..ef9b245 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -264,6 +264,7 @@ Py_Main(int argc, char **argv) /* Hash randomization needed early for all string operations (including -W and -X options). */ + _PyOS_opterr = 0; /* prevent printing the error in 1st pass */ while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { if (c == 'm' || c == 'c') { /* -c / -m is the last option: following arguments are diff --git a/Python/getopt.c b/Python/getopt.c index 624da9a..af5b03c 100644 --- a/Python/getopt.c +++ b/Python/getopt.c @@ -41,7 +41,7 @@ static char *opt_ptr = ""; void _PyOS_ResetGetOpt(void) { - _PyOS_opterr = 0; /* prevent printing the error in 2nd loop in main.c */ + _PyOS_opterr = 1; _PyOS_optind = 1; _PyOS_optarg = NULL; opt_ptr = ""; |