Commit bbb8ade9 authored by Robert Collins's avatar Robert Collins

Issue #23631: Fix traceback.format_list when a traceback has been mutated.

parent 93f4d4c1
......@@ -555,6 +555,14 @@ class TestStack(unittest.TestCase):
[' File "foo.py", line 1, in fred\n line\n'],
s.format())
def test_from_list_edited_stack(self):
s = traceback.StackSummary.from_list([('foo.py', 1, 'fred', 'line')])
s[0] = ('foo.py', 2, 'fred', 'line')
s2 = traceback.StackSummary.from_list(s)
self.assertEqual(
[' File "foo.py", line 2, in fred\n line\n'],
s2.format())
def test_format_smoke(self):
# For detailed tests see the format_list tests, which consume the same
# code.
......@@ -585,7 +593,7 @@ class TestStack(unittest.TestCase):
traceback.walk_stack(None), capture_locals=True, limit=1)
s = some_inner(3, 4)
self.assertEqual(
[' File "' + __file__ + '", line 585, '
[' File "' + __file__ + '", line 593, '
'in some_inner\n'
' traceback.walk_stack(None), capture_locals=True, limit=1)\n'
' a = 1\n'
......
......@@ -348,10 +348,16 @@ class StackSummary(list):
This method supports the older Python API. Each tuple should be a
4-tuple with (filename, lineno, name, line) elements.
"""
if isinstance(a_list, StackSummary):
return StackSummary(a_list)
# While doing a fast-path check for isinstance(a_list, StackSummary) is
# appealing, idlelib.run.cleanup_traceback and other similar code may
# break this by making arbitrary frames plain tuples, so we need to
# check on a frame by frame basis.
result = StackSummary()
for filename, lineno, name, line in a_list:
for frame in a_list:
if isinstance(frame, FrameSummary):
result.append(frame)
else:
filename, lineno, name, line = frame
result.append(FrameSummary(filename, lineno, name, line=line))
return result
......
......@@ -18,6 +18,8 @@ Core and Builtins
Library
-------
- Issue #23631: Fix traceback.format_list when a traceback has been mutated.
- Issue #23568: Add rdivmod support to MagicMock() objects.
Patch by Håkan Lövdahl.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment