[Python-checkins] cpython (merge 3.5 -> 3.6): Merge 3.6: Issue #28409: regrtest: fix the parser of command line arguments.

victor.stinner python-checkins at python.org
Mon Oct 17 12:15:38 EDT 2016


https://hg.python.org/cpython/rev/26249f82c15d
changeset:   104522:26249f82c15d
branch:      3.6
parent:      104519:0b29adb5c804
parent:      104521:af06d9616c29
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Mon Oct 17 18:13:46 2016 +0200
summary:
  Merge 3.6: Issue #28409: regrtest: fix the parser of command line arguments.

files:
  Lib/test/libregrtest/cmdline.py |  11 +++++++----
  Lib/test/test_regrtest.py       |   9 +++++++++
  Misc/NEWS                       |   5 +++++
  3 files changed, 21 insertions(+), 4 deletions(-)


diff --git a/Lib/test/libregrtest/cmdline.py b/Lib/test/libregrtest/cmdline.py
--- a/Lib/test/libregrtest/cmdline.py
+++ b/Lib/test/libregrtest/cmdline.py
@@ -242,9 +242,6 @@
     group.add_argument('-P', '--pgo', dest='pgo', action='store_true',
                        help='enable Profile Guided Optimization training')
 
-    parser.add_argument('args', nargs='*',
-                        help=argparse.SUPPRESS)
-
     return parser
 
 
@@ -294,7 +291,13 @@
         ns.use_resources = []
 
     parser = _create_parser()
-    parser.parse_args(args=args, namespace=ns)
+    # Issue #14191: argparse doesn't support "intermixed" positional and
+    # optional arguments. Use parse_known_args() as workaround.
+    ns.args = parser.parse_known_args(args=args, namespace=ns)[1]
+    for arg in ns.args:
+        if arg.startswith('-'):
+            parser.error("unrecognized arguments: %s" % arg)
+            sys.exit(1)
 
     if ns.single and ns.fromfile:
         parser.error("-s and -f don't go together!")
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -299,6 +299,15 @@
         self.assertEqual(ns.verbose, 0)
         self.assertEqual(ns.args, ['foo'])
 
+    def test_arg_option_arg(self):
+        ns = libregrtest._parse_args(['test_unaryop', '-v', 'test_binop'])
+        self.assertEqual(ns.verbose, 1)
+        self.assertEqual(ns.args, ['test_unaryop', 'test_binop'])
+
+    def test_unknown_option(self):
+        self.checkError(['--unknown-option'],
+                        'unrecognized arguments: --unknown-option')
+
 
 class BaseTestCase(unittest.TestCase):
     TEST_UNIQUE_ID = 1
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -25,6 +25,11 @@
 
 - Issue #28248: Update Windows build to use OpenSSL 1.0.2j.
 
+Tests
+-----
+
+- Issue #28409: regrtest: fix the parser of command line arguments.
+
 
 What's New in Python 3.6.0 beta 2
 =================================

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list