Skip to content

Commit 2292ab3

Browse files
committed
Add tests for the fallback option
1 parent 987988d commit 2292ab3

File tree

1 file changed

+36
-13
lines changed

1 file changed

+36
-13
lines changed

Lib/test/test_traceback.py

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,9 @@ class CPythonTracebackLegacyErrorCaretTests(
963963
Same set of tests as above but with Python's legacy internal traceback printing.
964964
"""
965965

966-
class TracebackFormatTests(unittest.TestCase):
966+
967+
class TracebackFormatMixing:
968+
DEBUG_RANGES = True
967969

968970
def some_exception(self):
969971
raise KeyError('blah')
@@ -1137,6 +1139,8 @@ def g(count=10):
11371139
)
11381140
expected = (tb_line + result_g).splitlines()
11391141
actual = stderr_g.getvalue().splitlines()
1142+
if not self.DEBUG_RANGES:
1143+
expected = [line for line in expected if not set(line.strip()) == {"^"}]
11401144
self.assertEqual(actual, expected)
11411145

11421146
# Check 2 different repetitive sections
@@ -1173,6 +1177,8 @@ def h(count=10):
11731177
)
11741178
expected = (result_h + result_g).splitlines()
11751179
actual = stderr_h.getvalue().splitlines()
1180+
if not self.DEBUG_RANGES:
1181+
expected = [line for line in expected if not set(line.strip()) == {"^"}]
11761182
self.assertEqual(actual, expected)
11771183

11781184
# Check the boundary conditions. First, test just below the cutoff.
@@ -1199,11 +1205,13 @@ def h(count=10):
11991205
)
12001206
tb_line = (
12011207
'Traceback (most recent call last):\n'
1202-
f' File "{__file__}", line {lineno_g+77}, in _check_recursive_traceback_display\n'
1208+
f' File "{__file__}", line {lineno_g+81}, in _check_recursive_traceback_display\n'
12031209
' g(traceback._RECURSIVE_CUTOFF)\n'
12041210
)
12051211
expected = (tb_line + result_g).splitlines()
12061212
actual = stderr_g.getvalue().splitlines()
1213+
if not self.DEBUG_RANGES:
1214+
expected = [line for line in expected if not set(line.strip()) == {"^"}]
12071215
self.assertEqual(actual, expected)
12081216

12091217
# Second, test just above the cutoff.
@@ -1231,24 +1239,24 @@ def h(count=10):
12311239
)
12321240
tb_line = (
12331241
'Traceback (most recent call last):\n'
1234-
f' File "{__file__}", line {lineno_g+108}, in _check_recursive_traceback_display\n'
1242+
f' File "{__file__}", line {lineno_g+114}, in _check_recursive_traceback_display\n'
12351243
' g(traceback._RECURSIVE_CUTOFF + 1)\n'
12361244
)
12371245
expected = (tb_line + result_g).splitlines()
12381246
actual = stderr_g.getvalue().splitlines()
1247+
if not self.DEBUG_RANGES:
1248+
expected = [line for line in expected if not set(line.strip()) == {"^"}]
12391249
self.assertEqual(actual, expected)
12401250

12411251
@requires_debug_ranges()
1242-
def test_recursive_traceback_python(self):
1243-
self._check_recursive_traceback_display(traceback.print_exc)
1244-
1245-
@cpython_only
1246-
@requires_debug_ranges()
1247-
def test_recursive_traceback_cpython_internal(self):
1248-
from _testcapi import exception_print
1249-
def render_exc():
1250-
exception_print(sys.exception())
1251-
self._check_recursive_traceback_display(render_exc)
1252+
def test_recursive_traceback(self):
1253+
if self.DEBUG_RANGES:
1254+
self._check_recursive_traceback_display(traceback.print_exc)
1255+
else:
1256+
from _testcapi import exception_print
1257+
def render_exc():
1258+
exception_print(sys.exception())
1259+
self._check_recursive_traceback_display(render_exc)
12521260

12531261
def test_format_stack(self):
12541262
def fmt():
@@ -1345,6 +1353,21 @@ def test_print_exception_bad_type_python(self):
13451353
boundaries = re.compile(
13461354
'(%s|%s)' % (re.escape(cause_message), re.escape(context_message)))
13471355

1356+
class TestTracebackFormat(unittest.TestCase, TracebackFormatMixing):
1357+
pass
1358+
1359+
@cpython_only
1360+
class TestFallbackTracebackFormat(unittest.TestCase, TracebackFormatMixing):
1361+
DEBUG_RANGES = False
1362+
def setUp(self) -> None:
1363+
self.original_hook = traceback._print_exception_bltin
1364+
traceback._print_exception_bltin = lambda *args: 1/0
1365+
return super().setUp()
1366+
1367+
def tearDown(self) -> None:
1368+
traceback._print_exception_bltin = self.original_hook
1369+
return super().tearDown()
1370+
13481371
class BaseExceptionReportingTests:
13491372

13501373
def get_exception(self, exception_or_callable):

0 commit comments

Comments
 (0)