def rerun_failed_tests(self): self.ns.verbose = True self.ns.failfast = False self.ns.verbose3 = False self.first_result = self.get_tests_result() print() print("Re-running failed tests in verbose mode") self.rerun = self.bad[:] for test_name in self.rerun: print(f"Re-running {test_name} in verbose mode", flush=True) self.ns.verbose = True result = runtest(self.ns, test_name) self.accumulate_result(result, rerun=True) if result.result == INTERRUPTED: break if self.bad: print(count(len(self.bad), 'test'), "failed again:") printlist(self.bad) self.display_result()
def rerun_failed_tests(self): self.ns.verbose = True self.ns.failfast = False self.ns.verbose3 = False self.first_result = self.get_tests_result() print() print("Re-running failed tests in verbose mode") self.rerun = self.bad[:] for test_name in self.rerun: print("Re-running test %r in verbose mode" % test_name, flush=True) self.ns.verbose = True ok = runtest(self.ns, test_name) if ok[0] in {PASSED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED}: self.bad.remove(test_name) if ok.result == INTERRUPTED: self.interrupted = True break else: if self.bad: print(count(len(self.bad), 'test'), "failed again:") printlist(self.bad) self.display_result()
def rerun_failed_tests(self): self.ns.verbose = True self.ns.failfast = False self.ns.verbose3 = False self.first_result = self.get_tests_result() print() print("Re-running failed tests in verbose mode") self.rerun = self.bad[:] for test in self.rerun: print("Re-running test %r in verbose mode" % test, flush=True) try: self.ns.verbose = True ok = runtest(self.ns, test) except KeyboardInterrupt: self.interrupted = True # 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) self.display_result()
def rerun_failed_tests(self): self.log() if self.ns.python: # Temp patch for https://github.com/python/cpython/issues/94052 self.log("Re-running failed tests is not supported with --python " "host runner option.") return self.ns.verbose = True self.ns.failfast = False self.ns.verbose3 = False self.first_result = self.get_tests_result() self.log("Re-running failed tests in verbose mode") rerun_list = list(self.need_rerun) self.need_rerun.clear() for result in rerun_list: test_name = result.name self.rerun.append(test_name) errors = result.errors or [] failures = result.failures or [] error_names = [ test_full_name.split(" ")[0] for (test_full_name, *_) in errors ] failure_names = [ test_full_name.split(" ")[0] for (test_full_name, *_) in failures ] self.ns.verbose = True orig_match_tests = self.ns.match_tests if errors or failures: if self.ns.match_tests is None: self.ns.match_tests = [] self.ns.match_tests.extend(error_names) self.ns.match_tests.extend(failure_names) matching = "matching: " + ", ".join(self.ns.match_tests) self.log( f"Re-running {test_name} in verbose mode ({matching})") else: self.log(f"Re-running {test_name} in verbose mode") result = runtest(self.ns, test_name) self.ns.match_tests = orig_match_tests self.accumulate_result(result, rerun=True) if isinstance(result, Interrupted): break if self.bad: print(count(len(self.bad), 'test'), "failed again:") printlist(self.bad) self.display_result()
def display_result(self): # If running the test suite for PGO then no one cares about results. if self.ns.pgo: return print() print("== Tests result: %s ==" % self.get_tests_result()) if self.interrupted: print() # print a newline after ^C print("Test suite interrupted by signal SIGINT.") executed = set(self.good) | set(self.bad) | set(self.skipped) omitted = set(self.selected) - executed print(count(len(omitted), "test"), "omitted:") printlist(omitted) if self.good and not self.ns.quiet: print() if (not self.bad and not self.skipped and not self.interrupted and len(self.good) > 1): print("All", end=' ') print(count(len(self.good), "test"), "OK.") if self.ns.print_slow: self.test_times.sort(reverse=True) print() print("10 slowest tests:") for time, test in self.test_times[:10]: print("- %s: %s" % (test, format_duration(time))) if self.bad: print() print(count(len(self.bad), "test"), "failed:") printlist(self.bad) if self.environment_changed: print() print("{} altered the execution environment:".format( count(len(self.environment_changed), "test"))) printlist(self.environment_changed) if self.skipped and not self.ns.quiet: print() print(count(len(self.skipped), "test"), "skipped:") printlist(self.skipped) if self.rerun: print() print("%s:" % count(len(self.rerun), "re-run test")) printlist(self.rerun)
def list_cases(self): support.verbose = False support.set_match_tests(self.ns.match_tests, self.ns.ignore_tests) for test_name in self.selected: abstest = get_abs_module(self.ns, test_name) try: suite = unittest.defaultTestLoader.loadTestsFromName(abstest) self._list_cases(suite) except unittest.SkipTest: self.skipped.append(test_name) if self.skipped: print(file=sys.stderr) print(count(len(self.skipped), "test"), "skipped:", file=sys.stderr) printlist(self.skipped, file=sys.stderr)
def list_cases(self): support.verbose = False support.set_match_tests(self.ns.match_tests) for test in self.selected: abstest = get_abs_module(self.ns, test) try: suite = unittest.defaultTestLoader.loadTestsFromName(abstest) self._list_cases(suite) except unittest.SkipTest: self.skipped.append(test) if self.skipped: print(file=sys.stderr) print(count(len(self.skipped), "test"), "skipped:", file=sys.stderr) printlist(self.skipped, file=sys.stderr)
def rerun_failed_tests(self): self.ns.verbose = True self.ns.failfast = False self.ns.verbose3 = False self.first_result = self.get_tests_result() self.log() self.log("Re-running failed tests in verbose mode") rerun_list = self.rerun[:] self.rerun = [] for result in rerun_list: test_name = result.name errors = result.errors or [] failures = result.failures or [] error_names = [ test_full_name.split(" ")[0] for (test_full_name, *_) in errors ] failure_names = [ test_full_name.split(" ")[0] for (test_full_name, *_) in failures ] self.ns.verbose = True orig_match_tests = self.ns.match_tests if errors or failures: if self.ns.match_tests is None: self.ns.match_tests = [] self.ns.match_tests.extend(error_names) self.ns.match_tests.extend(failure_names) matching = "matching: " + ", ".join(self.ns.match_tests) self.log( f"Re-running {test_name} in verbose mode ({matching})") else: self.log(f"Re-running {test_name} in verbose mode") result = runtest(self.ns, test_name) self.ns.match_tests = orig_match_tests self.accumulate_result(result, rerun=True) if isinstance(result, Interrupted): break if self.bad: print(count(len(self.bad), 'test'), "failed again:") printlist(self.bad) self.display_result()