diff options
author | Victor Stinner <vstinner@python.org> | 2023-09-25 14:21:01 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-25 14:21:01 (GMT) |
commit | 72fb39c9656f72d942c2fe8720fb9a183e438a8a (patch) | |
tree | f38d859db1cbad5ffd3fea58cf7898daa6d399c3 | |
parent | 64ab9f7d5c7cbe5ef997c7d841151e0e71e7f582 (diff) | |
download | cpython-72fb39c9656f72d942c2fe8720fb9a183e438a8a.zip cpython-72fb39c9656f72d942c2fe8720fb9a183e438a8a.tar.gz cpython-72fb39c9656f72d942c2fe8720fb9a183e438a8a.tar.bz2 |
gh-109276: regrtest re-runs "env changed" tests (#109831)
When a test fails with "env changed" and --rerun option is used, the
test is now re-run in verbose mode in a fresh process.
-rw-r--r-- | Lib/test/libregrtest/results.py | 12 | ||||
-rw-r--r-- | Lib/test/test_regrtest.py | 13 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Tests/2023-09-25-14-41-18.gh-issue-109276.uC_cWo.rst | 3 |
3 files changed, 21 insertions, 7 deletions
diff --git a/Lib/test/libregrtest/results.py b/Lib/test/libregrtest/results.py index fc4c547..1a8619f 100644 --- a/Lib/test/libregrtest/results.py +++ b/Lib/test/libregrtest/results.py @@ -25,7 +25,7 @@ class TestResults: self.env_changed: TestList = [] self.run_no_tests: TestList = [] self.rerun: TestList = [] - self.bad_results: list[TestResult] = [] + self.rerun_results: list[TestResult] = [] self.interrupted: bool = False self.test_times: list[tuple[float, TestName]] = [] @@ -87,6 +87,7 @@ class TestResults: self.good.append(test_name) case State.ENV_CHANGED: self.env_changed.append(test_name) + self.rerun_results.append(result) case State.SKIPPED: self.skipped.append(test_name) case State.RESOURCE_DENIED: @@ -98,7 +99,7 @@ class TestResults: case _: if result.is_failed(fail_env_changed): self.bad.append(test_name) - self.bad_results.append(result) + self.rerun_results.append(result) else: raise ValueError(f"invalid test state: {result.state!r}") @@ -114,12 +115,12 @@ class TestResults: self.add_junit(xml_data) def need_rerun(self): - return bool(self.bad_results) + return bool(self.rerun_results) def prepare_rerun(self) -> tuple[TestTuple, FilterDict]: tests: TestList = [] match_tests_dict = {} - for result in self.bad_results: + for result in self.rerun_results: tests.append(result.test_name) match_tests = result.get_rerun_match_tests() @@ -130,7 +131,8 @@ class TestResults: # Clear previously failed tests self.rerun_bad.extend(self.bad) self.bad.clear() - self.bad_results.clear() + self.env_changed.clear() + self.rerun_results.clear() return (tuple(tests), match_tests_dict) diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 4100c98..4b819cb 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -463,7 +463,7 @@ class BaseTestCase(unittest.TestCase): randomize = True rerun_failed = [] - if rerun is not None: + if rerun is not None and not env_changed: failed = [rerun.name] if not rerun.success: rerun_failed.append(rerun.name) @@ -591,7 +591,7 @@ class BaseTestCase(unittest.TestCase): state = ', '.join(state) if rerun is not None: new_state = 'SUCCESS' if rerun.success else 'FAILURE' - state = 'FAILURE then ' + new_state + state = f'{state} then {new_state}' self.check_line(output, f'Result: {state}', full=True) def parse_random_seed(self, output): @@ -1229,6 +1229,15 @@ class ArgsTestCase(BaseTestCase): self.check_executed_tests(output, [testname], env_changed=testname, fail_env_changed=True, stats=1) + # rerun + output = self.run_tests("--rerun", testname) + self.check_executed_tests(output, [testname], + env_changed=testname, + rerun=Rerun(testname, + match=None, + success=True), + stats=2) + def test_rerun_fail(self): # FAILURE then FAILURE code = textwrap.dedent(""" diff --git a/Misc/NEWS.d/next/Tests/2023-09-25-14-41-18.gh-issue-109276.uC_cWo.rst b/Misc/NEWS.d/next/Tests/2023-09-25-14-41-18.gh-issue-109276.uC_cWo.rst new file mode 100644 index 0000000..66651cf --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-25-14-41-18.gh-issue-109276.uC_cWo.rst @@ -0,0 +1,3 @@ +regrtest: When a test fails with "env changed" and the --rerun option is +used, the test is now re-run in verbose mode in a fresh process. Patch by +Victor Stinner. |