summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorCF Bolz-Tereick <cfbolz@gmx.de>2024-08-18 11:28:23 (GMT)
committerGitHub <noreply@github.com>2024-08-18 11:28:23 (GMT)
commit63603bca35798c166e1b8e0be76aef69217f8b1b (patch)
treef86478ea07f33a1d4fb583a5575c28fa0d6a74db /Lib/test
parent79c542b5cc774ba758acc2b2e3b6556934190e34 (diff)
downloadcpython-63603bca35798c166e1b8e0be76aef69217f8b1b.zip
cpython-63603bca35798c166e1b8e0be76aef69217f8b1b.tar.gz
cpython-63603bca35798c166e1b8e0be76aef69217f8b1b.tar.bz2
gh-82378 fix sys.tracebacklimit in pyrepl, approach 2 (#123062)
Make sure that pyrepl uses the same logic for sys.tracebacklimit as both the basic repl and the standard sys.excepthook
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_pyrepl/test_pyrepl.py34
1 files changed, 33 insertions, 1 deletions
diff --git a/Lib/test/test_pyrepl/test_pyrepl.py b/Lib/test/test_pyrepl/test_pyrepl.py
index d5eafc5..e11ec74 100644
--- a/Lib/test/test_pyrepl/test_pyrepl.py
+++ b/Lib/test/test_pyrepl/test_pyrepl.py
@@ -1020,7 +1020,7 @@ class TestMain(TestCase):
env.update({"TERM": "dumb"})
output, exit_code = self.run_repl("exit()\n", env=env)
self.assertEqual(exit_code, 0)
- self.assertIn("warning: can\'t use pyrepl", output)
+ self.assertIn("warning: can't use pyrepl", output)
self.assertNotIn("Exception", output)
self.assertNotIn("Traceback", output)
@@ -1100,6 +1100,38 @@ class TestMain(TestCase):
self.assertIn("spam", output)
self.assertNotEqual(pathlib.Path(hfile.name).stat().st_size, 0)
+ @force_not_colorized
+ def test_proper_tracebacklimit(self):
+ env = os.environ.copy()
+ for set_tracebacklimit in [True, False]:
+ commands = ("import sys\n" +
+ ("sys.tracebacklimit = 1\n" if set_tracebacklimit else "") +
+ "def x1(): 1/0\n\n"
+ "def x2(): x1()\n\n"
+ "def x3(): x2()\n\n"
+ "x3()\n"
+ "exit()\n")
+
+ for basic_repl in [True, False]:
+ if basic_repl:
+ env["PYTHON_BASIC_REPL"] = "1"
+ else:
+ env.pop("PYTHON_BASIC_REPL", None)
+ with self.subTest(set_tracebacklimit=set_tracebacklimit,
+ basic_repl=basic_repl):
+ output, exit_code = self.run_repl(commands, env=env)
+ if "can't use pyrepl" in output:
+ self.skipTest("pyrepl not available")
+ self.assertIn("in x1", output)
+ if set_tracebacklimit:
+ self.assertNotIn("in x2", output)
+ self.assertNotIn("in x3", output)
+ self.assertNotIn("in <module>", output)
+ else:
+ self.assertIn("in x2", output)
+ self.assertIn("in x3", output)
+ self.assertIn("in <module>", output)
+
def run_repl(
self,
repl_input: str | list[str],