[3.7] bpo-34279: Synchronize regrtest with master (GH-10800)
* bpo-34605, libregrtest: Rename --slaveargs to --worker-args (GH-9099)
Rename also run_tests_slave() to run_tests_worker().
(cherry picked from commit 012f5b968a738b15ae9b40c499a1c0778b0615a9)
* bpo-34279, regrtest: Issue a warning if no tests have been executed (GH-10150)
(cherry picked from commit 9724348b43a9005a449ba532ccd3c6726f031097)
* test_regrtest: remove unused threading import
diff --git a/Lib/test/libregrtest/cmdline.py b/Lib/test/libregrtest/cmdline.py
index c08491f..0927032 100644
--- a/Lib/test/libregrtest/cmdline.py
+++ b/Lib/test/libregrtest/cmdline.py
@@ -170,7 +170,7 @@
group.add_argument('--wait', action='store_true',
help='wait for user input, e.g., allow a debugger '
'to be attached')
- group.add_argument('--slaveargs', metavar='ARGS')
+ group.add_argument('--worker-args', metavar='ARGS')
group.add_argument('-S', '--start', metavar='START',
help='the name of the test at which to start.' +
more_details)
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 1438966..8d44caf 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -14,7 +14,7 @@
from test.libregrtest.runtest import (
findtests, runtest, get_abs_module,
STDTESTS, NOTTESTS, PASSED, FAILED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED,
- INTERRUPTED, CHILD_ERROR,
+ INTERRUPTED, CHILD_ERROR, TEST_DID_NOT_RUN,
PROGRESS_MIN_TIME, format_test_result)
from test.libregrtest.setup import setup_tests
from test.libregrtest.utils import removepy, count, format_duration, printlist
@@ -79,6 +79,7 @@
self.resource_denieds = []
self.environment_changed = []
self.rerun = []
+ self.run_no_tests = []
self.first_result = None
self.interrupted = False
@@ -118,6 +119,8 @@
elif ok == RESOURCE_DENIED:
self.skipped.append(test)
self.resource_denieds.append(test)
+ elif ok == TEST_DID_NOT_RUN:
+ self.run_no_tests.append(test)
elif ok != INTERRUPTED:
raise ValueError("invalid test result: %r" % ok)
@@ -368,6 +371,11 @@
print("%s:" % count(len(self.rerun), "re-run test"))
printlist(self.rerun)
+ if self.run_no_tests:
+ print()
+ print(count(len(self.run_no_tests), "test"), "run no tests:")
+ printlist(self.run_no_tests)
+
def run_tests_sequential(self):
if self.ns.trace:
import trace
@@ -458,6 +466,9 @@
result.append("FAILURE")
elif self.ns.fail_env_changed and self.environment_changed:
result.append("ENV CHANGED")
+ elif not any((self.good, self.bad, self.skipped, self.interrupted,
+ self.environment_changed)):
+ result.append("NO TEST RUN")
if self.interrupted:
result.append("INTERRUPTED")
@@ -580,9 +591,9 @@
print(msg, file=sys.stderr, flush=True)
sys.exit(2)
- if self.ns.slaveargs is not None:
- from test.libregrtest.runtest_mp import run_tests_slave
- run_tests_slave(self.ns.slaveargs)
+ if self.ns.worker_args is not None:
+ from test.libregrtest.runtest_mp import run_tests_worker
+ run_tests_worker(self.ns.worker_args)
if self.ns.wait:
input("Press any key to continue...")
diff --git a/Lib/test/libregrtest/runtest.py b/Lib/test/libregrtest/runtest.py
index 4f41080..466b522 100644
--- a/Lib/test/libregrtest/runtest.py
+++ b/Lib/test/libregrtest/runtest.py
@@ -19,6 +19,7 @@
RESOURCE_DENIED = -3
INTERRUPTED = -4
CHILD_ERROR = -5 # error in a child process
+TEST_DID_NOT_RUN = -6 # error in a child process
_FORMAT_TEST_RESULT = {
PASSED: '%s passed',
@@ -28,6 +29,7 @@
RESOURCE_DENIED: '%s skipped (resource denied)',
INTERRUPTED: '%s interrupted',
CHILD_ERROR: '%s crashed',
+ TEST_DID_NOT_RUN: '%s run no tests',
}
# Minimum duration of a test to display its duration or to mention that
@@ -94,6 +96,7 @@
ENV_CHANGED test failed because it changed the execution environment
FAILED test failed
PASSED test passed
+ EMPTY_TEST_SUITE test ran no subtests.
If ns.xmlpath is not None, xml_data is a list containing each
generated testsuite element.
@@ -197,6 +200,8 @@
else:
print("test", test, "failed", file=sys.stderr, flush=True)
return FAILED, test_time
+ except support.TestDidNotRun:
+ return TEST_DID_NOT_RUN, test_time
except:
msg = traceback.format_exc()
if not ns.pgo:
diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py
index 779c429..6190574 100644
--- a/Lib/test/libregrtest/runtest_mp.py
+++ b/Lib/test/libregrtest/runtest_mp.py
@@ -24,23 +24,23 @@
def run_test_in_subprocess(testname, ns):
- """Run the given test in a subprocess with --slaveargs.
+ """Run the given test in a subprocess with --worker-args.
ns is the option Namespace parsed from command-line arguments. regrtest
- is invoked in a subprocess with the --slaveargs argument; when the
+ is invoked in a subprocess with the --worker-args argument; when the
subprocess exits, its return code, stdout and stderr are returned as a
3-tuple.
"""
from subprocess import Popen, PIPE
ns_dict = vars(ns)
- slaveargs = (ns_dict, testname)
- slaveargs = json.dumps(slaveargs)
+ worker_args = (ns_dict, testname)
+ worker_args = json.dumps(worker_args)
cmd = [sys.executable, *support.args_from_interpreter_flags(),
'-u', # Unbuffered stdout and stderr
'-m', 'test.regrtest',
- '--slaveargs', slaveargs]
+ '--worker-args', worker_args]
if ns.pgo:
cmd += ['--pgo']
@@ -58,8 +58,8 @@
return retcode, stdout, stderr
-def run_tests_slave(slaveargs):
- ns_dict, testname = json.loads(slaveargs)
+def run_tests_worker(worker_args):
+ ns_dict, testname = json.loads(worker_args)
ns = types.SimpleNamespace(**ns_dict)
setup_tests(ns)