]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-121245: a regression test for site.register_readline() (#121259)
authorSergey B Kirpichev <skirpichev@gmail.com>
Wed, 3 Jul 2024 10:45:43 +0000 (13:45 +0300)
committerGitHub <noreply@github.com>
Wed, 3 Jul 2024 10:45:43 +0000 (11:45 +0100)
Lib/test/test_pyrepl/test_pyrepl.py

index b189d3291e81812d6749151f3782fa4ffcc40d41..93c80467a04546b80424ace066739b69af1e6134 100644 (file)
@@ -1,14 +1,17 @@
 import io
 import itertools
 import os
+import pathlib
 import rlcompleter
 import select
 import subprocess
 import sys
+import tempfile
 from unittest import TestCase, skipUnless
 from unittest.mock import patch
 from test.support import force_not_colorized
 from test.support import SHORT_TIMEOUT
+from test.support.os_helper import unlink
 
 from .support import (
     FakeConsole,
@@ -898,6 +901,30 @@ class TestMain(TestCase):
         self.assertNotIn("Exception", output)
         self.assertNotIn("Traceback", output)
 
+    def test_not_wiping_history_file(self):
+        hfile = tempfile.NamedTemporaryFile(delete=False)
+        self.addCleanup(unlink, hfile.name)
+        env = os.environ.copy()
+        env["PYTHON_HISTORY"] = hfile.name
+        commands = "123\nspam\nexit()\n"
+
+        env.pop("PYTHON_BASIC_REPL", None)
+        output, exit_code = self.run_repl(commands, env=env)
+        self.assertEqual(exit_code, 0)
+        self.assertIn("123", output)
+        self.assertIn("spam", output)
+        self.assertNotEqual(pathlib.Path(hfile.name).stat().st_size, 0)
+
+        hfile.file.truncate()
+        hfile.close()
+
+        env["PYTHON_BASIC_REPL"] = "1"
+        output, exit_code = self.run_repl(commands, env=env)
+        self.assertEqual(exit_code, 0)
+        self.assertIn("123", output)
+        self.assertIn("spam", output)
+        self.assertNotEqual(pathlib.Path(hfile.name).stat().st_size, 0)
+
     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(