summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-10-17 16:11:03 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2016-10-17 16:11:03 (GMT)
commit1f6b69b74996164be5f13dea34242edc14bd87a1 (patch)
treeb1b50209870de40fc64e71aacc84b8a9785c3266
parent5493e4723a922b9905cf6916363e72109a531cfd (diff)
downloadcpython-1f6b69b74996164be5f13dea34242edc14bd87a1.zip
cpython-1f6b69b74996164be5f13dea34242edc14bd87a1.tar.gz
cpython-1f6b69b74996164be5f13dea34242edc14bd87a1.tar.bz2
Issue #28409: regrtest: fix the parser of command line arguments.
-rwxr-xr-xLib/test/regrtest.py11
-rw-r--r--Lib/test/test_regrtest.py10
-rw-r--r--Misc/NEWS6
3 files changed, 21 insertions, 6 deletions
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index f1892ac..f870854 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -325,9 +325,6 @@ def _create_parser():
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
def relative_filename(string):
@@ -373,7 +370,13 @@ def _parse_args(args, **kwargs):
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
index a398a4f..ae18327 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -270,6 +270,16 @@ class ParseArgsTestCase(unittest.TestCase):
self.assertEqual(ns.verbose, 0)
self.assertEqual(ns.args, ['foo'])
+ def test_arg_option_arg(self):
+ ns = regrtest._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')
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/Misc/NEWS b/Misc/NEWS
index fd2030a..82cf8b0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -376,11 +376,11 @@ Library
- Issue #27759: Fix selectors incorrectly retain invalid file descriptors.
Patch by Mark Williams.
-- Issue #28368: Refuse monitoring processes if the child watcher has
+- Issue #28368: Refuse monitoring processes if the child watcher has
no loop attached.
Patch by Vincent Michel.
-- Issue #28369: Raise RuntimeError when transport's FD is used with
+- Issue #28369: Raise RuntimeError when transport's FD is used with
add_reader, add_writer, etc.
- Issue #28370: Speedup asyncio.StreamReader.readexactly.
@@ -432,6 +432,8 @@ C API
Tests
-----
+- Issue #28409: regrtest: fix the parser of command line arguments.
+
- Issue #27787: Call gc.collect() before checking each test for "dangling
threads", since the dangling threads are weak references.