From 4ecdb52d463a6ca3839d45ba8c550ef0e4adb91d Mon Sep 17 00:00:00 2001 From: devdanzin <74280297+devdanzin@users.noreply.github.com> Date: Wed, 26 Jun 2024 07:39:07 -0300 Subject: [PATCH 1/2] gh-121016: Add test for `PYTHON_BASIC_REPL` envioronment variable (#121017) (cherry picked from commit 9e45fd9858a059950f7387b4fda2b00df0e8e537) --- Lib/test/support/__init__.py | 6 ++++++ Lib/test/test_pyrepl/test_pyrepl.py | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index e90ef3d1505a27..81cd7f14d2ad1c 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2607,3 +2607,9 @@ def wrapper(*args, **kwargs): if value is not None: os.environ[key] = value return wrapper + + +def initialized_with_pyrepl(): + """Detect whether PyREPL was used during Python initialization.""" + # If the main module has a __file__ attribute it's a Python module, which means PyREPL. + return hasattr(sys.modules["__main__"], "__file__") diff --git a/Lib/test/test_pyrepl/test_pyrepl.py b/Lib/test/test_pyrepl/test_pyrepl.py index bf8753fbeb7343..b189d3291e8181 100644 --- a/Lib/test/test_pyrepl/test_pyrepl.py +++ b/Lib/test/test_pyrepl/test_pyrepl.py @@ -873,6 +873,31 @@ def test_dumb_terminal_exits_cleanly(self): self.assertNotIn("Exception", output) self.assertNotIn("Traceback", output) + @force_not_colorized + def test_python_basic_repl(self): + env = os.environ.copy() + commands = ("from test.support import initialized_with_pyrepl\n" + "initialized_with_pyrepl()\n" + "exit()\n") + + env.pop("PYTHON_BASIC_REPL", None) + output, exit_code = self.run_repl(commands, env=env) + if "can\'t use pyrepl" in output: + self.skipTest("pyrepl not available") + self.assertEqual(exit_code, 0) + self.assertIn("True", output) + self.assertNotIn("False", output) + self.assertNotIn("Exception", output) + self.assertNotIn("Traceback", output) + + env["PYTHON_BASIC_REPL"] = "1" + output, exit_code = self.run_repl(commands, env=env) + self.assertEqual(exit_code, 0) + self.assertIn("False", output) + self.assertNotIn("True", output) + self.assertNotIn("Exception", output) + self.assertNotIn("Traceback", output) + def run_repl(self, repl_input: str | list[str], env: dict | None = None) -> tuple[str, int]: master_fd, slave_fd = pty.openpty() process = subprocess.Popen( From 65f456b9d9269259c767aa255c88617840f78fa5 Mon Sep 17 00:00:00 2001 From: devdanzin <74280297+devdanzin@users.noreply.github.com> Date: Wed, 26 Jun 2024 17:23:07 -0300 Subject: [PATCH 2/2] [3.13] gh-121016: Add test for `PYTHON_BASIC_REPL` envioronment variable (GH-121017) (cherry picked from commit 9e45fd9858a059950f7387b4fda2b00df0e8e537) Co-authored-by: devdanzin <74280297+devdanzin@users.noreply.github.com>