[Python-checkins] cpython (2.7): #16306: report only the first unknown option and add more tests. Patch by

ezio.melotti python-checkins at python.org
Fri Nov 23 18:01:56 CET 2012


http://hg.python.org/cpython/rev/6a79e3beb854
changeset: 80565:6a79e3beb854
branch: 2.7
parent: 80561:771f28686022
user: Ezio Melotti <ezio.melotti at gmail.com>
date: Fri Nov 23 18:46:11 2012 +0200
summary:
 #16306: report only the first unknown option and add more tests. Patch by Serhiy Storchaka.
files:
 Lib/test/test_cmd_line.py | 20 +++++++++++++++-----
 Modules/main.c | 1 +
 Python/getopt.c | 2 +-
 3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -116,14 +116,24 @@
 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('-z', without='-E')
- self.assertIn(b'Unknown option', err)
+ 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: -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
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -264,6 +264,7 @@
 
 /* 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
--- a/Python/getopt.c
+++ b/Python/getopt.c
@@ -41,7 +41,7 @@
 
 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 = "";
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /