[Python-checkins] cpython: Issue #25220, libregrtest: Pass directly ns to runtest()

victor.stinner python-checkins at python.org
Wed Sep 30 02:40:31 CEST 2015


https://hg.python.org/cpython/rev/e765b6c16e1c
changeset:   98430:e765b6c16e1c
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Wed Sep 30 02:32:11 2015 +0200
summary:
  Issue #25220, libregrtest: Pass directly ns to runtest()

* Remove runtest_ns(): pass directly ns to runtest().
* Create also Regrtest.rerun_failed_tests() method.
* Inline again Regrtest.run_test(): it's no more justified to have a method

files:
  Lib/test/libregrtest/main.py       |  62 +++++++++--------
  Lib/test/libregrtest/runtest.py    |  20 ++---
  Lib/test/libregrtest/runtest_mp.py |   7 +-
  3 files changed, 44 insertions(+), 45 deletions(-)


diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -7,7 +7,7 @@
 import tempfile
 import textwrap
 from test.libregrtest.runtest import (
-    findtests, runtest_ns,
+    findtests, runtest,
     STDTESTS, NOTTESTS, PASSED, FAILED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED)
 from test.libregrtest.cmdline import _parse_args
 from test.libregrtest.setup import setup_tests
@@ -208,6 +208,30 @@
             print("Using random seed", self.ns.random_seed)
             random.shuffle(self.selected)
 
+    def rerun_failed_tests(self):
+        self.ns.verbose = True
+        self.ns.failfast = False
+        self.ns.verbose3 = False
+        self.ns.match_tests = None
+
+        print("Re-running failed tests in verbose mode")
+        for test in self.bad[:]:
+            print("Re-running test %r in verbose mode" % test, flush=True)
+            try:
+                self.ns.verbose = True
+                ok = runtest(self.ns, test)
+            except KeyboardInterrupt:
+                # print a newline separate from the ^C
+                print()
+                break
+            else:
+                if ok[0] in {PASSED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED}:
+                    self.bad.remove(test)
+        else:
+            if self.bad:
+                print(count(len(self.bad), 'test'), "failed again:")
+                printlist(self.bad)
+
     def display_result(self):
         if self.interrupted:
             # print a newline after ^C
@@ -245,32 +269,6 @@
             print(count(len(self.skipped), "test"), "skipped:")
             printlist(self.skipped)
 
-        if self.ns.verbose2 and self.bad:
-            print("Re-running failed tests in verbose mode")
-            for test in self.bad[:]:
-                print("Re-running test %r in verbose mode" % test, flush=True)
-                try:
-                    self.ns.verbose = True
-                    ok = runtest_ns(test, True, self.ns)
-                except KeyboardInterrupt:
-                    # print a newline separate from the ^C
-                    print()
-                    break
-                else:
-                    if ok[0] in {PASSED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED}:
-                        self.bad.remove(test)
-            else:
-                if self.bad:
-                    print(count(len(self.bad), 'test'), "failed again:")
-                    printlist(self.bad)
-
-    def run_test(self, test):
-        result = runtest_ns(test, self.ns.verbose, self.ns,
-                            output_on_failure=self.ns.verbose3,
-                            failfast=self.ns.failfast,
-                            match_tests=self.ns.match_tests)
-        self.accumulate_result(test, result)
-
     def run_tests_sequential(self):
         if self.ns.trace:
             import trace
@@ -286,11 +284,13 @@
             if self.tracer:
                 # If we're tracing code coverage, then we don't exit with status
                 # if on a false return value from main.
-                cmd = 'self.run_test(test)'
+                cmd = ('result = runtest(self.ns, test); '
+                       'self.accumulate_result(test, result)')
                 self.tracer.runctx(cmd, globals=globals(), locals=vars())
             else:
                 try:
-                    self.run_test(test)
+                    result = runtest(self.ns, test)
+                    self.accumulate_result(test, result)
                 except KeyboardInterrupt:
                     self.interrupted = True
                     break
@@ -366,6 +366,10 @@
         self.run_tests()
 
         self.display_result()
+
+        if self.ns.verbose2 and self.bad:
+            self.rerun_failed_tests()
+
         self.finalize()
         sys.exit(len(self.bad) > 0 or self.interrupted)
 
diff --git a/Lib/test/libregrtest/runtest.py b/Lib/test/libregrtest/runtest.py
--- a/Lib/test/libregrtest/runtest.py
+++ b/Lib/test/libregrtest/runtest.py
@@ -53,17 +53,7 @@
     return stdtests + sorted(tests)
 
 
-def runtest_ns(test, verbose, ns, **kw):
-    return runtest(test, verbose, ns.quiet,
-                   huntrleaks=ns.huntrleaks,
-                   timeout=ns.timeout,
-                   **kw)
-
-
-def runtest(test, verbose, quiet,
-            huntrleaks=False,
-            output_on_failure=False, failfast=False, match_tests=None,
-            timeout=None):
+def runtest(ns, test):
     """Run a single test.
 
     test -- the name of the test
@@ -85,6 +75,14 @@
         PASSED           test passed
     """
 
+    verbose = ns.verbose
+    quiet = ns.quiet
+    huntrleaks = ns.huntrleaks
+    output_on_failure = ns.verbose3
+    failfast = ns.failfast
+    match_tests = ns.match_tests
+    timeout = ns.timeout
+
     use_timeout = (timeout is not None)
     if use_timeout:
         faulthandler.dump_traceback_later(timeout, exit=True)
diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py
--- a/Lib/test/libregrtest/runtest_mp.py
+++ b/Lib/test/libregrtest/runtest_mp.py
@@ -13,7 +13,7 @@
     print("Multiprocess option requires thread support")
     sys.exit(2)
 
-from test.libregrtest.runtest import runtest_ns, INTERRUPTED, CHILD_ERROR
+from test.libregrtest.runtest import runtest, INTERRUPTED, CHILD_ERROR
 from test.libregrtest.setup import setup_tests
 
 
@@ -62,10 +62,7 @@
     setup_tests(ns)
 
     try:
-        result = runtest_ns(testname,  ns.verbose, ns,
-                            output_on_failure=ns.verbose3,
-                            failfast=ns.failfast,
-                            match_tests=ns.match_tests)
+        result = runtest(ns, testname)
     except KeyboardInterrupt:
         result = INTERRUPTED, ''
     except BaseException as e:

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list