183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# A test suite for pdb; at the moment, this only validates skipping of 283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# specified test modules (RFE #5142). 383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport imp 583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport sys 683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport os 783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport unittest 883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport subprocess 983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport textwrap 1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom test import test_support 1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# This little helper class is essential for testing pdb under doctest. 1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom test_doctest import _FakeInput 1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass PdbTestCase(unittest.TestCase): 1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def run_pdb(self, script, commands): 1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """Run 'script' lines with pdb and the pdb 'commands'.""" 2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh filename = 'main.py' 2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with open(filename, 'w') as f: 2283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh f.write(textwrap.dedent(script)) 2383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.addCleanup(test_support.unlink, filename) 2483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cmd = [sys.executable, '-m', 'pdb', filename] 2583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stdout = stderr = None 2683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, 2783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stdin=subprocess.PIPE, 2883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stderr=subprocess.STDOUT, 2983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ) 3083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stdout, stderr = proc.communicate(commands) 3183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh proc.stdout.close() 3283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh proc.stdin.close() 3383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return stdout, stderr 3483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_issue13183(self): 3683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh script = """ 3783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from bar import bar 3883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def foo(): 4083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh bar() 4183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def nope(): 4383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh pass 4483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def foobar(): 4683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh foo() 4783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh nope() 4883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh foobar() 5083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 5183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh commands = """ 5283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from bar import bar 5383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh break bar 5483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh continue 5583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh step 5683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh step 5783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh quit 5883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 5983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh bar = """ 6083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def bar(): 6183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh pass 6283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 6383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with open('bar.py', 'w') as f: 6483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh f.write(textwrap.dedent(bar)) 6583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.addCleanup(test_support.unlink, 'bar.py') 6683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stdout, stderr = self.run_pdb(script, commands) 6783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertTrue( 6883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh any('main.py(5)foo()->None' in l for l in stdout.splitlines()), 6983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Fail to step into the caller after a return') 7083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 7183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 7283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass PdbTestInput(object): 7383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """Context manager that makes testing Pdb in doctests easier.""" 7483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 7583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __init__(self, input): 7683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.input = input 7783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 7883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __enter__(self): 7983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.real_stdin = sys.stdin 8083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh sys.stdin = _FakeInput(self.input) 8183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __exit__(self, *exc): 8383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh sys.stdin = self.real_stdin 8483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef write(x): 8783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh print x 8883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_displayhook(): 9083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """This tests the custom displayhook for pdb. 9183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 9283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> def test_function(foo, bar): 9383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... import pdb; pdb.Pdb().set_trace() 9483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... pass 9583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 9683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> with PdbTestInput([ 9783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'foo', 9883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'bar', 9983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'for i in range(5): write(i)', 10083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', 10183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... ]): 10283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... test_function(1, None) 10383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_displayhook[0]>(3)test_function() 10483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> pass 10583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) foo 10683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1 10783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) bar 10883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) for i in range(5): write(i) 10983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 0 11083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1 11183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2 11283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3 11383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4 11483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) continue 11583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 11683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 11783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_breakpoint_commands(): 11883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """Test basic commands related to breakpoints. 11983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 12083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> def test_function(): 12183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... import pdb; pdb.Pdb().set_trace() 12283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... print(1) 12383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... print(2) 12483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... print(3) 12583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... print(4) 12683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 12783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh First, need to clear bdb state that might be left over from previous tests. 12883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Otherwise, the new breakpoints might get assigned different numbers. 12983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 13083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> from bdb import Breakpoint 13183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> Breakpoint.next = 1 13283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> Breakpoint.bplist = {} 13383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> Breakpoint.bpbynumber = [None] 13483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 13583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Now test the breakpoint commands. NORMALIZE_WHITESPACE is needed because 13683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh the breakpoint list outputs a tab for the "stop only" and "ignore next" 13783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh lines, which we don't want to put in here. 13883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 13983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 14083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'break 3', 14183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'disable 1', 14283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'ignore 1 10', 14383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'condition 1 1 < 2', 14483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'break 4', 14583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'break 4', 14683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'break', 14783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'clear 3', 14883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'break', 14983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'condition 1', 15083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'enable 1', 15183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'clear 1', 15283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'commands 2', 15383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'print 42', 15483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'end', 15583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', # will stop at breakpoint 2 (line 4) 15683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'clear', # clear all! 15783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'y', 15883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'tbreak 5', 15983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', # will stop at temporary breakpoint 16083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'break', # make sure breakpoint is gone 16183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', 16283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... ]): 16383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... test_function() 16483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(3)test_function() 16583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> print(1) 16683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) break 3 16783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 16883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) disable 1 16983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) ignore 1 10 17083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Will ignore next 10 crossings of breakpoint 1. 17183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) condition 1 1 < 2 17283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) break 4 17383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 17483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) break 4 17583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 17683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) break 17783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Num Type Disp Enb Where 17883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1 breakpoint keep no at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 17983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stop only if 1 < 2 18083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ignore next 10 hits 18183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2 breakpoint keep yes at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 18283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3 breakpoint keep yes at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 18383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) clear 3 18483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Deleted breakpoint 3 18583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) break 18683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Num Type Disp Enb Where 18783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1 breakpoint keep no at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 18883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stop only if 1 < 2 18983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ignore next 10 hits 19083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2 breakpoint keep yes at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 19183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) condition 1 19283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Breakpoint 1 is now unconditional. 19383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) enable 1 19483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) clear 1 19583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Deleted breakpoint 1 19683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) commands 2 19783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (com) print 42 19883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (com) end 19983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) continue 20083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1 20183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 42 20283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(4)test_function() 20383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> print(2) 20483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) clear 20583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Clear all breaks? y 20683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) tbreak 5 20783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Breakpoint 4 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5 20883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) continue 20983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2 21083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Deleted breakpoint 4 21183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(5)test_function() 21283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> print(3) 21383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) break 21483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) continue 21583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3 21683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4 21783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 21883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 21983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 22083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_skip_modules(): 22183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """This illustrates the simple case of module skipping. 22283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 22383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> def skip_module(): 22483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... import string 22583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... import pdb; pdb.Pdb(skip=['string*']).set_trace() 22683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... string.lower('FOO') 22783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 22883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> with PdbTestInput([ 22983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'step', 23083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', 23183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... ]): 23283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... skip_module() 23383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module() 23483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> string.lower('FOO') 23583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) step 23683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh --Return-- 23783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()->None 23883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> string.lower('FOO') 23983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) continue 24083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 24183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 24283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 24383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Module for testing skipping of module that makes a callback 24483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehmod = imp.new_module('module_to_skip') 24583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehexec 'def foo_pony(callback): x = 1; callback(); return None' in mod.__dict__ 24683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 24783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 24883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_skip_modules_with_callback(): 24983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """This illustrates skipping of modules that call into other code. 25083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 25183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> def skip_module(): 25283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... def callback(): 25383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... return None 25483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... import pdb; pdb.Pdb(skip=['module_to_skip*']).set_trace() 25583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... mod.foo_pony(callback) 25683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 25783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> with PdbTestInput([ 25883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'step', 25983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'step', 26083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'step', 26183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'step', 26283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'step', 26383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', 26483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... ]): 26583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... skip_module() 26683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... pass # provides something to "step" to 26783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module() 26883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> mod.foo_pony(callback) 26983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) step 27083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh --Call-- 27183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(2)callback() 27283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> def callback(): 27383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) step 27483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback() 27583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> return None 27683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) step 27783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh --Return-- 27883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()->None 27983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> return None 28083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) step 28183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh --Return-- 28283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()->None 28383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> mod.foo_pony(callback) 28483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) step 28583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[1]>(10)<module>() 28683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> pass # provides something to "step" to 28783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) continue 28883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 28983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 29083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 29183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_pdb_continue_in_bottomframe(): 29283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """Test that "continue" and "next" work properly in bottom frame (issue #5294). 29383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 29483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> def test_function(): 29583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... import pdb, sys; inst = pdb.Pdb() 29683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... inst.set_trace() 29783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... inst.botframe = sys._getframe() # hackery to get the right botframe 29883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... print(1) 29983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... print(2) 30083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... print(3) 30183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... print(4) 30283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 30383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh First, need to clear bdb state that might be left over from previous tests. 30483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Otherwise, the new breakpoints might get assigned different numbers. 30583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 30683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> from bdb import Breakpoint 30783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> Breakpoint.next = 1 30883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> Breakpoint.bplist = {} 30983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> Breakpoint.bpbynumber = [None] 31083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 31183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh >>> with PdbTestInput([ 31283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'next', 31383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'break 7', 31483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', 31583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'next', 31683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', 31783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... 'continue', 31883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... ]): 31983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ... test_function() 32083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(4)test_function() 32183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> inst.botframe = sys._getframe() # hackery to get the right botframe 32283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) next 32383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(5)test_function() 32483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> print(1) 32583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) break 7 32683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Breakpoint 1 at <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>:7 32783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) continue 32883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1 32983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2 33083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(7)test_function() 33183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> print(3) 33283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) next 33383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3 33483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(8)test_function() 33583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh -> print(4) 33683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (Pdb) continue 33783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4 33883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 33983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 34083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass ModuleInitTester(unittest.TestCase): 34183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 34283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_filename_correct(self): 34383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 34483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh In issue 7750, it was found that if the filename has a sequence that 34583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh resolves to an escape character in a Python string (such as \t), it 34683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh will be treated as the escaped character. 34783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 34883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # the test_fn must contain something like \t 34983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # on Windows, this will create 'test_mod.py' in the current directory. 35083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # on Unix, this will create '.\test_mod.py' in the current directory. 35183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_fn = '.\\test_mod.py' 35283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh code = 'print("testing pdb")' 35383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with open(test_fn, 'w') as f: 35483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh f.write(code) 35583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.addCleanup(os.remove, test_fn) 35683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cmd = [sys.executable, '-m', 'pdb', test_fn,] 35783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh proc = subprocess.Popen(cmd, 35883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stdout=subprocess.PIPE, 35983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stdin=subprocess.PIPE, 36083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stderr=subprocess.STDOUT, 36183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ) 36283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh stdout, stderr = proc.communicate('quit\n') 36383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertIn(code, stdout, "pdb munged the filename") 36483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 36583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 36683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_main(): 36783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from test import test_pdb 36883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_support.run_doctest(test_pdb, verbosity=True) 36983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_support.run_unittest( 37083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh PdbTestCase, 37183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ModuleInitTester) 37283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 37383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif __name__ == '__main__': 37483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_main() 375