summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_trace.py
diff options
context:
space:
mode:
authorJeffrey Yasskin <jyasskin@gmail.com>2009-05-20 19:09:05 (GMT)
committerJeffrey Yasskin <jyasskin@gmail.com>2009-05-20 19:09:05 (GMT)
commit4db6ff683d1b1d6e6c6bef875a88c9121c68137d (patch)
tree04db4edc1e5b0043be2406722823292da4f813ea /Lib/test/test_trace.py
parent787ab172c9cb89ac8344d32cacddce1ae7e15114 (diff)
downloadcpython-4db6ff683d1b1d6e6c6bef875a88c9121c68137d.zip
cpython-4db6ff683d1b1d6e6c6bef875a88c9121c68137d.tar.gz
cpython-4db6ff683d1b1d6e6c6bef875a88c9121c68137d.tar.bz2
Merged revisions 72776,72796 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r72776 | jeffrey.yasskin | 2009-05-18 14:14:54 -0700 (Mon, 18 May 2009) | 6 lines While I was modifying test_trace, it threw an exception when I accidentally made it try to set the line number from the trace callback for a 'call' event. This patch makes the error message a little more helpful in that case, and makes it a little less likely that a future editor will make the same mistake in test_trace. ........ r72796 | jeffrey.yasskin | 2009-05-20 10:57:57 -0700 (Wed, 20 May 2009) | 3 lines Fix issue #1689458 by teaching frame_setlineno how to jump to the first line of a code object. ........
Diffstat (limited to 'Lib/test/test_trace.py')
-rw-r--r--Lib/test/test_trace.py23
1 files changed, 22 insertions, 1 deletions
diff --git a/Lib/test/test_trace.py b/Lib/test/test_trace.py
index 48a717b..ecb588c 100644
--- a/Lib/test/test_trace.py
+++ b/Lib/test/test_trace.py
@@ -472,7 +472,7 @@ class JumpTracer:
def trace(self, frame, event, arg):
if not self.done and frame.f_code == self.function.__code__:
firstLine = frame.f_code.co_firstlineno
- if frame.f_lineno == firstLine + self.jumpFrom:
+ if event == 'line' and frame.f_lineno == firstLine + self.jumpFrom:
# Cope with non-integer self.jumpTo (because of
# no_jump_to_non_integers below).
try:
@@ -741,6 +741,27 @@ class JumpTestCase(unittest.TestCase):
def test_19_no_jump_without_trace_function(self):
no_jump_without_trace_function()
+ def test_jump_to_firstlineno(self):
+ # This tests that PDB can jump back to the first line in a
+ # file. See issue #1689458. It can only be triggered in a
+ # function call if the function is defined on a single line.
+ code = compile("""
+# Comments don't count.
+output.append(2) # firstlineno is here.
+output.append(3)
+output.append(4)
+""", "<fake module>", "exec")
+ class fake_function:
+ __code__ = code
+ jump = (2, 0)
+ tracer = JumpTracer(fake_function)
+ sys.settrace(tracer.trace)
+ namespace = {"output": []}
+ exec(code, namespace)
+ sys.settrace(None)
+ self.compare_jump_output([2, 3, 2, 3, 4], namespace["output"])
+
+
def test_main():
support.run_unittest(
TraceTestCase,