Kaydet (Commit) 4045e88b authored tarafından Georg Brandl's avatar Georg Brandl

Use constants instead of magic integers for test result. Do not re-run with…

Use constants instead of magic integers for test result.  Do not re-run with --verbose3 for environment changing tests.
üst 97269c45
...@@ -194,6 +194,14 @@ if sys.platform == 'darwin': ...@@ -194,6 +194,14 @@ if sys.platform == 'darwin':
newsoft = min(hard, max(soft, 1024*2048)) newsoft = min(hard, max(soft, 1024*2048))
resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard)) resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
# Test result constants.
PASSED = 1
FAILED = 0
ENV_CHANGED = -1
SKIPPED = -2
RESOURCE_DENIED = -3
INTERRUPTED = -4
from test import test_support from test import test_support
RESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb', RESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb',
...@@ -328,7 +336,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, ...@@ -328,7 +336,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
try: try:
result = runtest(*args, **kwargs) result = runtest(*args, **kwargs)
except BaseException, e: except BaseException, e:
result = -4, e.__class__.__name__ result = INTERRUPTED, e.__class__.__name__
print # Force a newline (just in case) print # Force a newline (just in case)
print json.dumps(result) print json.dumps(result)
sys.exit(0) sys.exit(0)
...@@ -410,19 +418,18 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, ...@@ -410,19 +418,18 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
def accumulate_result(test, result): def accumulate_result(test, result):
ok, test_time = result ok, test_time = result
test_times.append((test_time, test)) test_times.append((test_time, test))
if ok > 0: if ok == PASSED:
good.append(test) good.append(test)
return 'good' elif ok == FAILED:
elif -2 < ok <= 0:
bad.append(test) bad.append(test)
if ok == -1: elif ok == ENV_CHANGED:
environment_changed.append(test) bad.append(test)
return 'bad' environment_changed.append(test)
else: elif ok == SKIPPED:
skipped.append(test)
elif ok == RESOURCE_DENIED:
skipped.append(test) skipped.append(test)
if ok == -3: resource_denieds.append(test)
resource_denieds.append(test)
return 'skipped'
if use_mp: if use_mp:
from threading import Thread from threading import Thread
...@@ -477,7 +484,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, ...@@ -477,7 +484,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
print stdout print stdout
if stderr: if stderr:
print >>sys.stderr, stderr print >>sys.stderr, stderr
if result[0] == -4: if result[0] == INTERRUPTED:
assert result[1] == 'KeyboardInterrupt' assert result[1] == 'KeyboardInterrupt'
pending.clear() pending.clear()
raise KeyboardInterrupt # What else? raise KeyboardInterrupt # What else?
...@@ -498,8 +505,8 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, ...@@ -498,8 +505,8 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
try: try:
result = runtest(test, verbose, quiet, result = runtest(test, verbose, quiet,
testdir, huntrleaks) testdir, huntrleaks)
which = accumulate_result(test, result) accumulate_result(test, result)
if verbose3 and which == 'bad': if verbose3 and result[0] == FAILED:
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:
...@@ -646,13 +653,13 @@ def runtest(test, verbose, quiet, ...@@ -646,13 +653,13 @@ def runtest(test, verbose, quiet,
testdir -- test directory testdir -- test directory
huntrleaks -- run multiple times to test for leaks; requires a debug huntrleaks -- run multiple times to test for leaks; requires a debug
build; a triple corresponding to -R's three arguments build; a triple corresponding to -R's three arguments
Return: Returns one of the test result constants:
-4 KeyboardInterrupt when run under -j INTERRUPTED KeyboardInterrupt when run under -j
-3 test skipped because resource denied RESOURCE_DENIED test skipped because resource denied
-2 test skipped for some other reason SKIPPED test skipped for some other reason
-1 test failed because it changed the execution environment ENV_CHANGED test failed because it changed the execution environment
0 test failed FAILED test failed
1 test passed PASSED test passed
""" """
test_support.verbose = verbose # Tell tests to be moderately quiet test_support.verbose = verbose # Tell tests to be moderately quiet
...@@ -823,18 +830,18 @@ def runtest_inner(test, verbose, quiet, ...@@ -823,18 +830,18 @@ def runtest_inner(test, verbose, quiet,
if not quiet: if not quiet:
print test, "skipped --", msg print test, "skipped --", msg
sys.stdout.flush() sys.stdout.flush()
return -3, test_time return RESOURCE_DENIED, test_time
except unittest.SkipTest, msg: except unittest.SkipTest, msg:
if not quiet: if not quiet:
print test, "skipped --", msg print test, "skipped --", msg
sys.stdout.flush() sys.stdout.flush()
return -2, test_time return SKIPPED, test_time
except KeyboardInterrupt: except KeyboardInterrupt:
raise raise
except test_support.TestFailed, msg: except test_support.TestFailed, msg:
print "test", test, "failed --", msg print "test", test, "failed --", msg
sys.stdout.flush() sys.stdout.flush()
return 0, test_time return FAILED, test_time
except: except:
type, value = sys.exc_info()[:2] type, value = sys.exc_info()[:2]
print "test", test, "crashed --", str(type) + ":", value print "test", test, "crashed --", str(type) + ":", value
...@@ -842,24 +849,24 @@ def runtest_inner(test, verbose, quiet, ...@@ -842,24 +849,24 @@ def runtest_inner(test, verbose, quiet,
if verbose: if verbose:
traceback.print_exc(file=sys.stdout) traceback.print_exc(file=sys.stdout)
sys.stdout.flush() sys.stdout.flush()
return 0, test_time return FAILED, test_time
else: else:
if refleak: if refleak:
return 0, test_time return FAILED, test_time
if environment.changed: if environment.changed:
return -1, test_time return ENVIRONMENT_CHANGED, test_time
# Except in verbose mode, tests should not print anything # Except in verbose mode, tests should not print anything
if verbose or huntrleaks: if verbose or huntrleaks:
return 1, test_time return PASSED, test_time
output = capture_stdout.getvalue() output = capture_stdout.getvalue()
if not output: if not output:
return 1, test_time return PASSED, test_time
print "test", test, "produced unexpected output:" print "test", test, "produced unexpected output:"
print "*" * 70 print "*" * 70
print output print output
print "*" * 70 print "*" * 70
sys.stdout.flush() sys.stdout.flush()
return 0, test_time return FAILED, test_time
def cleanup_test_droppings(testname, verbose): def cleanup_test_droppings(testname, verbose):
import shutil import shutil
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment