8000 gh-109276: regrtest re-runs "env changed" tests (#109831) · python/cpython@72fb39c · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 72fb39c

Browse files
authored
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.
1 parent 64ab9f7 commit 72fb39c

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

Lib/test/libregrtest/results.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def __init__(self):
2525
self.env_changed: TestList = []
2626
self.run_no_tests: TestList = []
2727
self.rerun: TestList = []
28-
self.bad_results: list[TestResult] = []
28+
self.rerun_results: list[TestResult] = []
2929

3030
self.interrupted: bool = False
3131
self.test_times: list[tuple[float, TestName]] = []
@@ -87,6 +87,7 @@ def accumulate_result(self, result: TestResult, runtests: RunTests):
8787
self.good.append(test_name)
8888
case State.ENV_CHANGED:
8989
self.env_changed.append(test_name)
90+
self.rerun_results.append(result)
9091
case State.SKIPPED:
9192
self.skipped.append(test_name)
9293
case State.RESOURCE_DENIED:
@@ -98,7 +99,7 @@ def accumulate_result(self, result: TestResult, runtests: RunTests):
9899
case _:
99100
if result.is_failed(fail_env_changed):
100101
self.bad.append(test_name)
101-
self.bad_results.append(result)
102+
self.rerun_results.append(result)
102103
else:
103104
raise ValueError(f"invalid test state: {result.state!r}")
104105

@@ -114,12 +115,12 @@ def accumulate_result(self, result: TestResult, runtests: RunTests):
114115
self.add_junit(xml_data)
115116

116117
def need_rerun(self):
117-
return bool(self.bad_results)
118+
return bool(self.rerun_results)
118119

119120
def prepare_rerun(self) -> tuple[TestTuple, FilterDict]:
120121
tests: TestList = []
121122
match_tests_dict = {}
122-
for result in self.bad_results:
123+
for result in self.rerun_results:
123124
tests.append(result.test_name)
124125

125126
match_tests = result.get_rerun_match_tests()
@@ -130,7 +131,8 @@ def prepare_rerun(self) -> tuple[TestTuple, FilterDict]:
130131
# Clear previously failed tests
131132
self.rerun_bad.extend(self.bad)
132133
self.bad.clear()
133-
self.bad_results.clear()
134+
self.env_changed.clear()
135+
self.rerun_results.clear()
134136

135137
return (tuple(tests), match_tests_dict)
136138

Lib/test/test_regrtest.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ def check_executed_tests(self, output, tests, *, stats,
463463
randomize = True
464464

465465
rerun_failed = []
466-
if rerun is not None:
466+
if rerun is not None and not env_changed:
467467
failed = [rerun.name]
468468
if not rerun.success:
469469
rerun_failed.append(rerun.name)
@@ -591,7 +591,7 @@ def list_regex(line_format, tests):
591591
state = ', '.join(state)
592592
if rerun is not None:
593593
new_state = 'SUCCESS' if rerun.success else 'FAILURE'
594-
state = 'FAILURE then ' + new_state
594+
state = f'{state} then {new_state}'
595595
self.check_line(output, f'Result: {state}', full=True)
596596

597597
def parse_random_seed(self, output):
@@ -1229,6 +1229,15 @@ def test_env_changed(self):
12291229
self.check_executed_tests(output, [testname], env_changed=testname,
12301230
fail_env_changed=True, stats=1)
12311231

1232+
# rerun
1233+
output = self.run_tests("--rerun", testname)
1234+
self.check_executed_tests(output, [testname],
1235+
env_changed=testname,
1236+
rerun=Rerun(testname,
1237+
match=None,
1238+
success=True),
1239+
stats=2)
1240+
12321241
def test_rerun_fail(self):
12331242
# FAILURE then FAILURE
12341243
code = textwrap.dedent("""
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
regrtest: When a test fails with "env changed" and the --rerun option is
2+
used, the test is now re-run in verbose mode in a fresh process. Patch by
3+
Victor Stinner.

0 commit comments

Comments
 (0)
0