gh-121973: Fix flaky test_pyrepl tests (GH-122140)

This fixes the flakiness in:
* test_inspect_keeps_globals_from_inspected_file
* test_inspect_keeps_globals_from_inspected_module

The output already includes newlines. Adding newlines for every entry in
the output list introduces non-determinism because it added '\n' in
places where stdout is flushed or some buffer becomes full.

The regex also needed to be updated because pyrepl includes control
characters -- the visible output on each line doesn't immediately follow
a newline character.

Co-authored-by: Łukasz Langa <lukasz@langa.pl>
This commit is contained in:
Sam Gross 2024-07-23 09:17:13 -04:00 committed by GitHub
parent 624bda7638
commit 2c1b1e7a07
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 4 additions and 4 deletions

View File

@ -963,7 +963,7 @@ class TestMain(TestCase):
mod = blue / "calx.py" mod = blue / "calx.py"
mod.write_text("FOO = 42", encoding="utf-8") mod.write_text("FOO = 42", encoding="utf-8")
commands = [ commands = [
"print(f'{" + var + "=}')" for var in expectations "print(f'^{" + var + "=}')" for var in expectations
] + ["exit()"] ] + ["exit()"]
if as_file and as_module: if as_file and as_module:
self.fail("as_file and as_module are mutually exclusive") self.fail("as_file and as_module are mutually exclusive")
@ -989,10 +989,10 @@ class TestMain(TestCase):
self.assertEqual(exit_code, 0) self.assertEqual(exit_code, 0)
for var, expected in expectations.items(): for var, expected in expectations.items():
with self.subTest(var=var, expected=expected): with self.subTest(var=var, expected=expected):
if m := re.search(rf"[\r\n]{var}=(.+?)[\r\n]", output): if m := re.search(rf"\^{var}=(.+?)[\r\n]", output):
self._assertMatchOK(var, expected, actual=m.group(1)) self._assertMatchOK(var, expected, actual=m.group(1))
else: else:
self.fail(f"{var}= not found in output") self.fail(f"{var}= not found in output: {output!r}\n\n{output}")
self.assertNotIn("Exception", output) self.assertNotIn("Exception", output)
self.assertNotIn("Traceback", output) self.assertNotIn("Traceback", output)
@ -1126,4 +1126,4 @@ class TestMain(TestCase):
except subprocess.TimeoutExpired: except subprocess.TimeoutExpired:
process.kill() process.kill()
exit_code = process.wait() exit_code = process.wait()
return "\n".join(output), exit_code return "".join(output), exit_code