mirror of
https://github.com/python/cpython.git
synced 2025-11-27 13:45:25 +00:00
bpo-43950: support long lines in traceback.py (GH-27336)
This commit is contained in:
parent
ef8b8535cb
commit
4f5980a4f5
2 changed files with 27 additions and 1 deletions
|
|
@ -510,6 +510,28 @@ class TracebackErrorLocationCaretTests(unittest.TestCase):
|
||||||
)
|
)
|
||||||
self.assertEqual(result_lines, expected_error.splitlines())
|
self.assertEqual(result_lines, expected_error.splitlines())
|
||||||
|
|
||||||
|
def test_traceback_very_long_line(self):
|
||||||
|
source = "a" * 256
|
||||||
|
bytecode = compile(source, TESTFN, "exec")
|
||||||
|
|
||||||
|
with open(TESTFN, "w") as file:
|
||||||
|
file.write(source)
|
||||||
|
self.addCleanup(unlink, TESTFN)
|
||||||
|
|
||||||
|
func = partial(exec, bytecode)
|
||||||
|
result_lines = self.get_exception(func)
|
||||||
|
|
||||||
|
lineno_f = bytecode.co_firstlineno
|
||||||
|
expected_error = (
|
||||||
|
'Traceback (most recent call last):\n'
|
||||||
|
f' File "{__file__}", line {self.callable_line}, in get_exception\n'
|
||||||
|
' callable()\n'
|
||||||
|
' ^^^^^^^^^^\n'
|
||||||
|
f' File "{TESTFN}", line {lineno_f}, in <module>\n'
|
||||||
|
f' {source}\n'
|
||||||
|
)
|
||||||
|
self.assertEqual(result_lines, expected_error.splitlines())
|
||||||
|
|
||||||
def assertSpecialized(self, func, expected_specialization):
|
def assertSpecialized(self, func, expected_specialization):
|
||||||
result_lines = self.get_exception(func)
|
result_lines = self.get_exception(func)
|
||||||
specialization_line = result_lines[-1]
|
specialization_line = result_lines[-1]
|
||||||
|
|
|
||||||
|
|
@ -462,7 +462,11 @@ class StackSummary(list):
|
||||||
row.append(' {}\n'.format(frame.line.strip()))
|
row.append(' {}\n'.format(frame.line.strip()))
|
||||||
|
|
||||||
stripped_characters = len(frame._original_line) - len(frame.line.lstrip())
|
stripped_characters = len(frame._original_line) - len(frame.line.lstrip())
|
||||||
if frame.end_lineno == frame.lineno and frame.end_colno != 0:
|
if (
|
||||||
|
frame.end_lineno == frame.lineno
|
||||||
|
and frame.colno is not None
|
||||||
|
and frame.end_colno is not None
|
||||||
|
):
|
||||||
colno = _byte_offset_to_character_offset(frame._original_line, frame.colno)
|
colno = _byte_offset_to_character_offset(frame._original_line, frame.colno)
|
||||||
end_colno = _byte_offset_to_character_offset(frame._original_line, frame.end_colno)
|
end_colno = _byte_offset_to_character_offset(frame._original_line, frame.end_colno)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue