#8263: Now regrtest.py will report a failure if it receives a KeyboardInterrupt (SIGINT).

This commit is contained in:
Florent Xicluna 2010-03-30 16:31:14 +00:00
parent 58b6566b0a
commit 75c6676916
2 changed files with 21 additions and 12 deletions

View File

@ -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 = [

View File

@ -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.