diff options
author | Collin Winter <collinw@gmail.com> | 2009-05-15 01:20:21 (GMT) |
---|---|---|
committer | Collin Winter <collinw@gmail.com> | 2009-05-15 01:20:21 (GMT) |
commit | a5503d5099beba75a976c8a280e92945f3738d27 (patch) | |
tree | c08f370599f2982017d7f72ff402bf54a537b2cf | |
parent | 95d78ec3026b59b8c28a062f343dc7d9e6e08033 (diff) | |
download | cpython-a5503d5099beba75a976c8a280e92945f3738d27.zip cpython-a5503d5099beba75a976c8a280e92945f3738d27.tar.gz cpython-a5503d5099beba75a976c8a280e92945f3738d27.tar.bz2 |
Merged revisions 72658 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r72658 | collin.winter | 2009-05-14 16:26:30 -0700 (Thu, 14 May 2009) | 1 line
Issue 6024: make regrtest.py promote refleaks to test failures.
........
-rwxr-xr-x | Lib/test/regrtest.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 673f11f..e80a55e 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -598,6 +598,7 @@ def runtest_inner(test, generate, verbose, quiet, test_times, else: cfp = io.StringIO() # XXX Should use io.StringIO() + refleak = False # True if the test leaked references. try: save_stdout = sys.stdout try: @@ -619,7 +620,7 @@ def runtest_inner(test, generate, verbose, quiet, test_times, if indirect_test is not None: indirect_test() if huntrleaks: - dash_R(the_module, test, indirect_test, huntrleaks) + refleak = dash_R(the_module, test, indirect_test, huntrleaks) test_time = time.time() - start_time test_times.append((test_time, test)) finally: @@ -649,6 +650,8 @@ def runtest_inner(test, generate, verbose, quiet, test_times, sys.stdout.flush() return 0 else: + if refleak: + return 0 if not cfp: return 1 output = cfp.getvalue() @@ -698,6 +701,11 @@ def cleanup_test_droppings(testname, verbose): "removed: %s" % (testname, kind, name, msg)), file=sys.stderr) def dash_R(the_module, test, indirect_test, huntrleaks): + """Run a test multiple times, looking for reference leaks. + + Returns: + False if the test didn't leak references; True if we detected refleaks. + """ # This code is hackish and inelegant, but it seems to do the job. import copyreg, _abcoll @@ -745,6 +753,8 @@ def dash_R(the_module, test, indirect_test, huntrleaks): refrep = open(fname, "a") print(msg, file=refrep) refrep.close() + return True + return False def dash_R_cleanup(fs, ps, pic, abcs): import gc, copyreg |