diff options
author | Jeffrey Yasskin <jyasskin@gmail.com> | 2009-05-20 19:09:05 (GMT) |
---|---|---|
committer | Jeffrey Yasskin <jyasskin@gmail.com> | 2009-05-20 19:09:05 (GMT) |
commit | 4db6ff683d1b1d6e6c6bef875a88c9121c68137d (patch) | |
tree | 04db4edc1e5b0043be2406722823292da4f813ea /Lib/test/test_trace.py | |
parent | 787ab172c9cb89ac8344d32cacddce1ae7e15114 (diff) | |
download | cpython-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.py | 23 |
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, |