mirror of https://github.com/python/cpython
#8263: Now regrtest.py will report a failure if it receives a KeyboardInterrupt (SIGINT).
This commit is contained in:
parent
58b6566b0a
commit
75c6676916
|
@ -373,6 +373,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
skipped = []
|
skipped = []
|
||||||
resource_denieds = []
|
resource_denieds = []
|
||||||
environment_changed = []
|
environment_changed = []
|
||||||
|
interrupted = False
|
||||||
|
|
||||||
if findleaks:
|
if findleaks:
|
||||||
try:
|
try:
|
||||||
|
@ -428,17 +429,17 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
print "== ", os.getcwd()
|
print "== ", os.getcwd()
|
||||||
|
|
||||||
alltests = findtests(testdir, stdtests, nottests)
|
alltests = findtests(testdir, stdtests, nottests)
|
||||||
tests = tests or args or alltests
|
selected = tests or args or alltests
|
||||||
if single:
|
if single:
|
||||||
tests = tests[:1]
|
selected = selected[:1]
|
||||||
try:
|
try:
|
||||||
next_single_test = alltests[alltests.index(tests[0])+1]
|
next_single_test = alltests[alltests.index(selected[0])+1]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
next_single_test = None
|
next_single_test = None
|
||||||
if randomize:
|
if randomize:
|
||||||
random.seed(random_seed)
|
random.seed(random_seed)
|
||||||
print "Using random seed", random_seed
|
print "Using random seed", random_seed
|
||||||
random.shuffle(tests)
|
random.shuffle(selected)
|
||||||
if trace:
|
if trace:
|
||||||
import trace
|
import trace
|
||||||
tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
|
tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
|
||||||
|
@ -465,7 +466,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
resource_denieds.append(test)
|
resource_denieds.append(test)
|
||||||
|
|
||||||
if forever:
|
if forever:
|
||||||
def test_forever(tests=list(tests)):
|
def test_forever(tests=list(selected)):
|
||||||
while True:
|
while True:
|
||||||
for test in tests:
|
for test in tests:
|
||||||
yield test
|
yield test
|
||||||
|
@ -473,15 +474,13 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
return
|
return
|
||||||
tests = test_forever()
|
tests = test_forever()
|
||||||
else:
|
else:
|
||||||
tests = iter(tests)
|
tests = iter(selected)
|
||||||
|
|
||||||
if use_mp:
|
if use_mp:
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from Queue import Queue
|
from Queue import Queue
|
||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
from collections import deque
|
|
||||||
debug_output_pat = re.compile(r"\[\d+ refs\]$")
|
debug_output_pat = re.compile(r"\[\d+ refs\]$")
|
||||||
pending = deque()
|
|
||||||
output = Queue()
|
output = Queue()
|
||||||
def tests_and_args():
|
def tests_and_args():
|
||||||
for test in tests:
|
for test in tests:
|
||||||
|
@ -539,6 +538,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
raise KeyboardInterrupt # What else?
|
raise KeyboardInterrupt # What else?
|
||||||
accumulate_result(test, result)
|
accumulate_result(test, result)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
interrupted = True
|
||||||
pending.close()
|
pending.close()
|
||||||
for worker in workers:
|
for worker in workers:
|
||||||
worker.join()
|
worker.join()
|
||||||
|
@ -561,8 +561,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
print "Re-running test %r in verbose mode" % test
|
print "Re-running test %r in verbose mode" % test
|
||||||
runtest(test, True, quiet, testdir, huntrleaks)
|
runtest(test, True, quiet, testdir, huntrleaks)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
# print a newline separate from the ^C
|
interrupted = True
|
||||||
print
|
|
||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
raise
|
raise
|
||||||
|
@ -580,8 +579,15 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
if module not in save_modules and module.startswith("test."):
|
if module not in save_modules and module.startswith("test."):
|
||||||
test_support.unload(module)
|
test_support.unload(module)
|
||||||
|
|
||||||
|
if interrupted:
|
||||||
|
# print a newline after ^C
|
||||||
|
print
|
||||||
|
print "Test suite interrupted by signal SIGINT."
|
||||||
|
omitted = set(selected) - set(good) - set(bad) - set(skipped)
|
||||||
|
print count(len(omitted), "test"), "omitted:"
|
||||||
|
printlist(omitted)
|
||||||
if good and not quiet:
|
if good and not quiet:
|
||||||
if not bad and not skipped and len(good) > 1:
|
if not bad and not skipped and not interrupted and len(good) > 1:
|
||||||
print "All",
|
print "All",
|
||||||
print count(len(good), "test"), "OK."
|
print count(len(good), "test"), "OK."
|
||||||
if print_slow:
|
if print_slow:
|
||||||
|
@ -646,7 +652,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
if runleaks:
|
if runleaks:
|
||||||
os.system("leaks %d" % os.getpid())
|
os.system("leaks %d" % os.getpid())
|
||||||
|
|
||||||
sys.exit(len(bad) > 0)
|
sys.exit(len(bad) > 0 or interrupted)
|
||||||
|
|
||||||
|
|
||||||
STDTESTS = [
|
STDTESTS = [
|
||||||
|
|
|
@ -161,6 +161,9 @@ C-API
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #8263: Now regrtest.py will report a failure if it receives a
|
||||||
|
KeyboardInterrupt (SIGINT).
|
||||||
|
|
||||||
- Issue #8180 and #8207: Fix test_pep277 on OS X and add more tests for special
|
- Issue #8180 and #8207: Fix test_pep277 on OS X and add more tests for special
|
||||||
Unicode normalization cases.
|
Unicode normalization cases.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue