From f1b81c408fb83beeee519ae4fb9d3a36dd4522b3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 21 Feb 2025 14:55:32 +0100 Subject: [PATCH] gh-129363: Change regrtest sequential mode output (#129476) First, write the test name without color. Then, write the test name and the result with color. Each test is displayed twice. Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- Lib/test/libregrtest/main.py | 21 ++++++--------------- Lib/test/test_regrtest.py | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py index 2f8fd4c92c1..8274fb92502 100644 --- a/Lib/test/libregrtest/main.py +++ b/Lib/test/libregrtest/main.py @@ -399,15 +399,11 @@ class Regrtest: msg += " (timeout: %s)" % format_duration(runtests.timeout) self.log(msg) - previous_test = None tests_iter = runtests.iter_tests() for test_index, test_name in enumerate(tests_iter, 1): start_time = time.perf_counter() - text = test_name - if previous_test: - text = '%s -- %s' % (text, previous_test) - self.logger.display_progress(test_index, text) + self.logger.display_progress(test_index, test_name) result = self.run_test(test_name, runtests, tracer) @@ -424,19 +420,14 @@ class Regrtest: except (KeyError, AttributeError): pass - if result.must_stop(self.fail_fast, self.fail_env_changed): - break - - previous_test = str(result) + text = str(result) test_time = time.perf_counter() - start_time if test_time >= PROGRESS_MIN_TIME: - previous_test = "%s in %s" % (previous_test, format_duration(test_time)) - elif result.state == State.PASSED: - # be quiet: say nothing if the test passed shortly - previous_test = None + text = f"{text} in {format_duration(test_time)}" + self.logger.display_progress(test_index, text) - if previous_test: - print(previous_test) + if result.must_stop(self.fail_fast, self.fail_env_changed): + break def get_state(self) -> str: state = self.results.get_state(self.fail_env_changed) diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 969f483814d..38a0d3f6779 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -42,6 +42,17 @@ if not support.has_subprocess_support: ROOT_DIR = os.path.join(os.path.dirname(__file__), '..', '..') ROOT_DIR = os.path.abspath(os.path.normpath(ROOT_DIR)) LOG_PREFIX = r'[0-9]+:[0-9]+:[0-9]+ (?:load avg: [0-9]+\.[0-9]{2} )?' +RESULT_REGEX = ( + 'passed', + 'failed', + 'skipped', + 'interrupted', + 'env changed', + 'timed out', + 'ran no tests', + 'worker non-zero exit code', +) +RESULT_REGEX = fr'(?:{"|".join(RESULT_REGEX)})' EXITCODE_BAD_TEST = 2 EXITCODE_ENV_CHANGED = 3 @@ -555,8 +566,8 @@ class BaseTestCase(unittest.TestCase): self.assertRegex(output, regex) def parse_executed_tests(self, output): - regex = (r'^%s\[ *[0-9]+(?:/ *[0-9]+)*\] (%s)' - % (LOG_PREFIX, self.TESTNAME_REGEX)) + regex = (fr'^{LOG_PREFIX}\[ *[0-9]+(?:/ *[0-9]+)*\] ' + fr'({self.TESTNAME_REGEX}) {RESULT_REGEX}') parser = re.finditer(regex, output, re.MULTILINE) return list(match.group(1) for match in parser)