mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
gh-88116: Enhance the inspect frame APIs to use the extended position information (GH-91531)
This commit is contained in:
parent
a3f2cf3ced
commit
0daa99f68b
5 changed files with 193 additions and 38 deletions
|
@ -7,6 +7,7 @@ import inspect
|
|||
import io
|
||||
import linecache
|
||||
import os
|
||||
import dis
|
||||
from os.path import normcase
|
||||
import _pickle
|
||||
import pickle
|
||||
|
@ -361,14 +362,23 @@ class TestInterpreterStack(IsTestBase):
|
|||
|
||||
def test_stack(self):
|
||||
self.assertTrue(len(mod.st) >= 5)
|
||||
self.assertEqual(revise(*mod.st[0][1:]),
|
||||
frame1, frame2, frame3, frame4, *_ = mod.st
|
||||
frameinfo = revise(*frame1[1:])
|
||||
self.assertEqual(frameinfo,
|
||||
(modfile, 16, 'eggs', [' st = inspect.stack()\n'], 0))
|
||||
self.assertEqual(revise(*mod.st[1][1:]),
|
||||
self.assertEqual(frame1.positions, dis.Positions(16, 16, 9, 24))
|
||||
frameinfo = revise(*frame2[1:])
|
||||
self.assertEqual(frameinfo,
|
||||
(modfile, 9, 'spam', [' eggs(b + d, c + f)\n'], 0))
|
||||
self.assertEqual(revise(*mod.st[2][1:]),
|
||||
self.assertEqual(frame2.positions, dis.Positions(9, 9, 4, 22))
|
||||
frameinfo = revise(*frame3[1:])
|
||||
self.assertEqual(frameinfo,
|
||||
(modfile, 43, 'argue', [' spam(a, b, c)\n'], 0))
|
||||
self.assertEqual(revise(*mod.st[3][1:]),
|
||||
self.assertEqual(frame3.positions, dis.Positions(43, 43, 12, 25))
|
||||
frameinfo = revise(*frame4[1:])
|
||||
self.assertEqual(frameinfo,
|
||||
(modfile, 39, 'abuse', [' self.argue(a, b, c)\n'], 0))
|
||||
self.assertEqual(frame4.positions, dis.Positions(39, 39, 8, 27))
|
||||
# Test named tuple fields
|
||||
record = mod.st[0]
|
||||
self.assertIs(record.frame, mod.fr)
|
||||
|
@ -380,12 +390,16 @@ class TestInterpreterStack(IsTestBase):
|
|||
|
||||
def test_trace(self):
|
||||
self.assertEqual(len(git.tr), 3)
|
||||
self.assertEqual(revise(*git.tr[0][1:]),
|
||||
frame1, frame2, frame3, = git.tr
|
||||
self.assertEqual(revise(*frame1[1:]),
|
||||
(modfile, 43, 'argue', [' spam(a, b, c)\n'], 0))
|
||||
self.assertEqual(revise(*git.tr[1][1:]),
|
||||
self.assertEqual(frame1.positions, dis.Positions(43, 43, 12, 25))
|
||||
self.assertEqual(revise(*frame2[1:]),
|
||||
(modfile, 9, 'spam', [' eggs(b + d, c + f)\n'], 0))
|
||||
self.assertEqual(revise(*git.tr[2][1:]),
|
||||
self.assertEqual(frame2.positions, dis.Positions(9, 9, 4, 22))
|
||||
self.assertEqual(revise(*frame3[1:]),
|
||||
(modfile, 18, 'eggs', [' q = y / 0\n'], 0))
|
||||
self.assertEqual(frame3.positions, dis.Positions(18, 18, 8, 13))
|
||||
|
||||
def test_frame(self):
|
||||
args, varargs, varkw, locals = inspect.getargvalues(mod.fr)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue