17db96d56Sopenharmony_ci# A test suite for pdb; not very comprehensive at the moment. 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciimport doctest 47db96d56Sopenharmony_ciimport os 57db96d56Sopenharmony_ciimport pdb 67db96d56Sopenharmony_ciimport sys 77db96d56Sopenharmony_ciimport types 87db96d56Sopenharmony_ciimport codecs 97db96d56Sopenharmony_ciimport unittest 107db96d56Sopenharmony_ciimport subprocess 117db96d56Sopenharmony_ciimport textwrap 127db96d56Sopenharmony_ciimport linecache 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_cifrom contextlib import ExitStack, redirect_stdout 157db96d56Sopenharmony_cifrom io import StringIO 167db96d56Sopenharmony_cifrom test import support 177db96d56Sopenharmony_cifrom test.support import os_helper 187db96d56Sopenharmony_ci# This little helper class is essential for testing pdb under doctest. 197db96d56Sopenharmony_cifrom test.test_doctest import _FakeInput 207db96d56Sopenharmony_cifrom unittest.mock import patch 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ciclass PdbTestInput(object): 247db96d56Sopenharmony_ci """Context manager that makes testing Pdb in doctests easier.""" 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci def __init__(self, input): 277db96d56Sopenharmony_ci self.input = input 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci def __enter__(self): 307db96d56Sopenharmony_ci self.real_stdin = sys.stdin 317db96d56Sopenharmony_ci sys.stdin = _FakeInput(self.input) 327db96d56Sopenharmony_ci self.orig_trace = sys.gettrace() if hasattr(sys, 'gettrace') else None 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci def __exit__(self, *exc): 357db96d56Sopenharmony_ci sys.stdin = self.real_stdin 367db96d56Sopenharmony_ci if self.orig_trace: 377db96d56Sopenharmony_ci sys.settrace(self.orig_trace) 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_cidef test_pdb_displayhook(): 417db96d56Sopenharmony_ci """This tests the custom displayhook for pdb. 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci >>> def test_function(foo, bar): 447db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 457db96d56Sopenharmony_ci ... pass 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci >>> with PdbTestInput([ 487db96d56Sopenharmony_ci ... 'foo', 497db96d56Sopenharmony_ci ... 'bar', 507db96d56Sopenharmony_ci ... 'for i in range(5): print(i)', 517db96d56Sopenharmony_ci ... 'continue', 527db96d56Sopenharmony_ci ... ]): 537db96d56Sopenharmony_ci ... test_function(1, None) 547db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_displayhook[0]>(3)test_function() 557db96d56Sopenharmony_ci -> pass 567db96d56Sopenharmony_ci (Pdb) foo 577db96d56Sopenharmony_ci 1 587db96d56Sopenharmony_ci (Pdb) bar 597db96d56Sopenharmony_ci (Pdb) for i in range(5): print(i) 607db96d56Sopenharmony_ci 0 617db96d56Sopenharmony_ci 1 627db96d56Sopenharmony_ci 2 637db96d56Sopenharmony_ci 3 647db96d56Sopenharmony_ci 4 657db96d56Sopenharmony_ci (Pdb) continue 667db96d56Sopenharmony_ci """ 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_cidef test_pdb_basic_commands(): 707db96d56Sopenharmony_ci """Test the basic commands of pdb. 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci >>> def test_function_2(foo, bar='default'): 737db96d56Sopenharmony_ci ... print(foo) 747db96d56Sopenharmony_ci ... for i in range(5): 757db96d56Sopenharmony_ci ... print(i) 767db96d56Sopenharmony_ci ... print(bar) 777db96d56Sopenharmony_ci ... for i in range(10): 787db96d56Sopenharmony_ci ... never_executed 797db96d56Sopenharmony_ci ... print('after for') 807db96d56Sopenharmony_ci ... print('...') 817db96d56Sopenharmony_ci ... return foo.upper() 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci >>> def test_function3(arg=None, *, kwonly=None): 847db96d56Sopenharmony_ci ... pass 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci >>> def test_function4(a, b, c, /): 877db96d56Sopenharmony_ci ... pass 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci >>> def test_function(): 907db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 917db96d56Sopenharmony_ci ... ret = test_function_2('baz') 927db96d56Sopenharmony_ci ... test_function3(kwonly=True) 937db96d56Sopenharmony_ci ... test_function4(1, 2, 3) 947db96d56Sopenharmony_ci ... print(ret) 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE 977db96d56Sopenharmony_ci ... 'step', # entering the function call 987db96d56Sopenharmony_ci ... 'args', # display function args 997db96d56Sopenharmony_ci ... 'list', # list function source 1007db96d56Sopenharmony_ci ... 'bt', # display backtrace 1017db96d56Sopenharmony_ci ... 'up', # step up to test_function() 1027db96d56Sopenharmony_ci ... 'down', # step down to test_function_2() again 1037db96d56Sopenharmony_ci ... 'next', # stepping to print(foo) 1047db96d56Sopenharmony_ci ... 'next', # stepping to the for loop 1057db96d56Sopenharmony_ci ... 'step', # stepping into the for loop 1067db96d56Sopenharmony_ci ... 'until', # continuing until out of the for loop 1077db96d56Sopenharmony_ci ... 'next', # executing the print(bar) 1087db96d56Sopenharmony_ci ... 'jump 8', # jump over second for loop 1097db96d56Sopenharmony_ci ... 'return', # return out of function 1107db96d56Sopenharmony_ci ... 'retval', # display return value 1117db96d56Sopenharmony_ci ... 'next', # step to test_function3() 1127db96d56Sopenharmony_ci ... 'step', # stepping into test_function3() 1137db96d56Sopenharmony_ci ... 'args', # display function args 1147db96d56Sopenharmony_ci ... 'return', # return out of function 1157db96d56Sopenharmony_ci ... 'next', # step to test_function4() 1167db96d56Sopenharmony_ci ... 'step', # stepping to test_function4() 1177db96d56Sopenharmony_ci ... 'args', # display function args 1187db96d56Sopenharmony_ci ... 'continue', 1197db96d56Sopenharmony_ci ... ]): 1207db96d56Sopenharmony_ci ... test_function() 1217db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[3]>(3)test_function() 1227db96d56Sopenharmony_ci -> ret = test_function_2('baz') 1237db96d56Sopenharmony_ci (Pdb) step 1247db96d56Sopenharmony_ci --Call-- 1257db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(1)test_function_2() 1267db96d56Sopenharmony_ci -> def test_function_2(foo, bar='default'): 1277db96d56Sopenharmony_ci (Pdb) args 1287db96d56Sopenharmony_ci foo = 'baz' 1297db96d56Sopenharmony_ci bar = 'default' 1307db96d56Sopenharmony_ci (Pdb) list 1317db96d56Sopenharmony_ci 1 -> def test_function_2(foo, bar='default'): 1327db96d56Sopenharmony_ci 2 print(foo) 1337db96d56Sopenharmony_ci 3 for i in range(5): 1347db96d56Sopenharmony_ci 4 print(i) 1357db96d56Sopenharmony_ci 5 print(bar) 1367db96d56Sopenharmony_ci 6 for i in range(10): 1377db96d56Sopenharmony_ci 7 never_executed 1387db96d56Sopenharmony_ci 8 print('after for') 1397db96d56Sopenharmony_ci 9 print('...') 1407db96d56Sopenharmony_ci 10 return foo.upper() 1417db96d56Sopenharmony_ci [EOF] 1427db96d56Sopenharmony_ci (Pdb) bt 1437db96d56Sopenharmony_ci ... 1447db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_basic_commands[4]>(25)<module>() 1457db96d56Sopenharmony_ci -> test_function() 1467db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_basic_commands[3]>(3)test_function() 1477db96d56Sopenharmony_ci -> ret = test_function_2('baz') 1487db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(1)test_function_2() 1497db96d56Sopenharmony_ci -> def test_function_2(foo, bar='default'): 1507db96d56Sopenharmony_ci (Pdb) up 1517db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[3]>(3)test_function() 1527db96d56Sopenharmony_ci -> ret = test_function_2('baz') 1537db96d56Sopenharmony_ci (Pdb) down 1547db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(1)test_function_2() 1557db96d56Sopenharmony_ci -> def test_function_2(foo, bar='default'): 1567db96d56Sopenharmony_ci (Pdb) next 1577db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(2)test_function_2() 1587db96d56Sopenharmony_ci -> print(foo) 1597db96d56Sopenharmony_ci (Pdb) next 1607db96d56Sopenharmony_ci baz 1617db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(3)test_function_2() 1627db96d56Sopenharmony_ci -> for i in range(5): 1637db96d56Sopenharmony_ci (Pdb) step 1647db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(4)test_function_2() 1657db96d56Sopenharmony_ci -> print(i) 1667db96d56Sopenharmony_ci (Pdb) until 1677db96d56Sopenharmony_ci 0 1687db96d56Sopenharmony_ci 1 1697db96d56Sopenharmony_ci 2 1707db96d56Sopenharmony_ci 3 1717db96d56Sopenharmony_ci 4 1727db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(5)test_function_2() 1737db96d56Sopenharmony_ci -> print(bar) 1747db96d56Sopenharmony_ci (Pdb) next 1757db96d56Sopenharmony_ci default 1767db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(6)test_function_2() 1777db96d56Sopenharmony_ci -> for i in range(10): 1787db96d56Sopenharmony_ci (Pdb) jump 8 1797db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(8)test_function_2() 1807db96d56Sopenharmony_ci -> print('after for') 1817db96d56Sopenharmony_ci (Pdb) return 1827db96d56Sopenharmony_ci after for 1837db96d56Sopenharmony_ci ... 1847db96d56Sopenharmony_ci --Return-- 1857db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[0]>(10)test_function_2()->'BAZ' 1867db96d56Sopenharmony_ci -> return foo.upper() 1877db96d56Sopenharmony_ci (Pdb) retval 1887db96d56Sopenharmony_ci 'BAZ' 1897db96d56Sopenharmony_ci (Pdb) next 1907db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[3]>(4)test_function() 1917db96d56Sopenharmony_ci -> test_function3(kwonly=True) 1927db96d56Sopenharmony_ci (Pdb) step 1937db96d56Sopenharmony_ci --Call-- 1947db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[1]>(1)test_function3() 1957db96d56Sopenharmony_ci -> def test_function3(arg=None, *, kwonly=None): 1967db96d56Sopenharmony_ci (Pdb) args 1977db96d56Sopenharmony_ci arg = None 1987db96d56Sopenharmony_ci kwonly = True 1997db96d56Sopenharmony_ci (Pdb) return 2007db96d56Sopenharmony_ci --Return-- 2017db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[1]>(2)test_function3()->None 2027db96d56Sopenharmony_ci -> pass 2037db96d56Sopenharmony_ci (Pdb) next 2047db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[3]>(5)test_function() 2057db96d56Sopenharmony_ci -> test_function4(1, 2, 3) 2067db96d56Sopenharmony_ci (Pdb) step 2077db96d56Sopenharmony_ci --Call-- 2087db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_basic_commands[2]>(1)test_function4() 2097db96d56Sopenharmony_ci -> def test_function4(a, b, c, /): 2107db96d56Sopenharmony_ci (Pdb) args 2117db96d56Sopenharmony_ci a = 1 2127db96d56Sopenharmony_ci b = 2 2137db96d56Sopenharmony_ci c = 3 2147db96d56Sopenharmony_ci (Pdb) continue 2157db96d56Sopenharmony_ci BAZ 2167db96d56Sopenharmony_ci """ 2177db96d56Sopenharmony_ci 2187db96d56Sopenharmony_cidef reset_Breakpoint(): 2197db96d56Sopenharmony_ci import bdb 2207db96d56Sopenharmony_ci bdb.Breakpoint.clearBreakpoints() 2217db96d56Sopenharmony_ci 2227db96d56Sopenharmony_cidef test_pdb_breakpoint_commands(): 2237db96d56Sopenharmony_ci """Test basic commands related to breakpoints. 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_ci >>> def test_function(): 2267db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 2277db96d56Sopenharmony_ci ... print(1) 2287db96d56Sopenharmony_ci ... print(2) 2297db96d56Sopenharmony_ci ... print(3) 2307db96d56Sopenharmony_ci ... print(4) 2317db96d56Sopenharmony_ci 2327db96d56Sopenharmony_ci First, need to clear bdb state that might be left over from previous tests. 2337db96d56Sopenharmony_ci Otherwise, the new breakpoints might get assigned different numbers. 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci >>> reset_Breakpoint() 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci Now test the breakpoint commands. NORMALIZE_WHITESPACE is needed because 2387db96d56Sopenharmony_ci the breakpoint list outputs a tab for the "stop only" and "ignore next" 2397db96d56Sopenharmony_ci lines, which we don't want to put in here. 2407db96d56Sopenharmony_ci 2417db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 2427db96d56Sopenharmony_ci ... 'break 3', 2437db96d56Sopenharmony_ci ... 'disable 1', 2447db96d56Sopenharmony_ci ... 'ignore 1 10', 2457db96d56Sopenharmony_ci ... 'condition 1 1 < 2', 2467db96d56Sopenharmony_ci ... 'break 4', 2477db96d56Sopenharmony_ci ... 'break 4', 2487db96d56Sopenharmony_ci ... 'break', 2497db96d56Sopenharmony_ci ... 'clear 3', 2507db96d56Sopenharmony_ci ... 'break', 2517db96d56Sopenharmony_ci ... 'condition 1', 2527db96d56Sopenharmony_ci ... 'enable 1', 2537db96d56Sopenharmony_ci ... 'clear 1', 2547db96d56Sopenharmony_ci ... 'commands 2', 2557db96d56Sopenharmony_ci ... 'p "42"', 2567db96d56Sopenharmony_ci ... 'print("42", 7*6)', # Issue 18764 (not about breakpoints) 2577db96d56Sopenharmony_ci ... 'end', 2587db96d56Sopenharmony_ci ... 'continue', # will stop at breakpoint 2 (line 4) 2597db96d56Sopenharmony_ci ... 'clear', # clear all! 2607db96d56Sopenharmony_ci ... 'y', 2617db96d56Sopenharmony_ci ... 'tbreak 5', 2627db96d56Sopenharmony_ci ... 'continue', # will stop at temporary breakpoint 2637db96d56Sopenharmony_ci ... 'break', # make sure breakpoint is gone 2647db96d56Sopenharmony_ci ... 'commands 10', # out of range 2657db96d56Sopenharmony_ci ... 'commands a', # display help 2667db96d56Sopenharmony_ci ... 'commands 4', # already deleted 2677db96d56Sopenharmony_ci ... 'continue', 2687db96d56Sopenharmony_ci ... ]): 2697db96d56Sopenharmony_ci ... test_function() 2707db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(3)test_function() 2717db96d56Sopenharmony_ci -> print(1) 2727db96d56Sopenharmony_ci (Pdb) break 3 2737db96d56Sopenharmony_ci Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 2747db96d56Sopenharmony_ci (Pdb) disable 1 2757db96d56Sopenharmony_ci Disabled breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 2767db96d56Sopenharmony_ci (Pdb) ignore 1 10 2777db96d56Sopenharmony_ci Will ignore next 10 crossings of breakpoint 1. 2787db96d56Sopenharmony_ci (Pdb) condition 1 1 < 2 2797db96d56Sopenharmony_ci New condition set for breakpoint 1. 2807db96d56Sopenharmony_ci (Pdb) break 4 2817db96d56Sopenharmony_ci Breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 2827db96d56Sopenharmony_ci (Pdb) break 4 2837db96d56Sopenharmony_ci Breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 2847db96d56Sopenharmony_ci (Pdb) break 2857db96d56Sopenharmony_ci Num Type Disp Enb Where 2867db96d56Sopenharmony_ci 1 breakpoint keep no at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 2877db96d56Sopenharmony_ci stop only if 1 < 2 2887db96d56Sopenharmony_ci ignore next 10 hits 2897db96d56Sopenharmony_ci 2 breakpoint keep yes at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 2907db96d56Sopenharmony_ci 3 breakpoint keep yes at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 2917db96d56Sopenharmony_ci (Pdb) clear 3 2927db96d56Sopenharmony_ci Deleted breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 2937db96d56Sopenharmony_ci (Pdb) break 2947db96d56Sopenharmony_ci Num Type Disp Enb Where 2957db96d56Sopenharmony_ci 1 breakpoint keep no at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 2967db96d56Sopenharmony_ci stop only if 1 < 2 2977db96d56Sopenharmony_ci ignore next 10 hits 2987db96d56Sopenharmony_ci 2 breakpoint keep yes at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 2997db96d56Sopenharmony_ci (Pdb) condition 1 3007db96d56Sopenharmony_ci Breakpoint 1 is now unconditional. 3017db96d56Sopenharmony_ci (Pdb) enable 1 3027db96d56Sopenharmony_ci Enabled breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 3037db96d56Sopenharmony_ci (Pdb) clear 1 3047db96d56Sopenharmony_ci Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3 3057db96d56Sopenharmony_ci (Pdb) commands 2 3067db96d56Sopenharmony_ci (com) p "42" 3077db96d56Sopenharmony_ci (com) print("42", 7*6) 3087db96d56Sopenharmony_ci (com) end 3097db96d56Sopenharmony_ci (Pdb) continue 3107db96d56Sopenharmony_ci 1 3117db96d56Sopenharmony_ci '42' 3127db96d56Sopenharmony_ci 42 42 3137db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(4)test_function() 3147db96d56Sopenharmony_ci -> print(2) 3157db96d56Sopenharmony_ci (Pdb) clear 3167db96d56Sopenharmony_ci Clear all breaks? y 3177db96d56Sopenharmony_ci Deleted breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4 3187db96d56Sopenharmony_ci (Pdb) tbreak 5 3197db96d56Sopenharmony_ci Breakpoint 4 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5 3207db96d56Sopenharmony_ci (Pdb) continue 3217db96d56Sopenharmony_ci 2 3227db96d56Sopenharmony_ci Deleted breakpoint 4 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5 3237db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(5)test_function() 3247db96d56Sopenharmony_ci -> print(3) 3257db96d56Sopenharmony_ci (Pdb) break 3267db96d56Sopenharmony_ci (Pdb) commands 10 3277db96d56Sopenharmony_ci *** cannot set commands: Breakpoint number 10 out of range 3287db96d56Sopenharmony_ci (Pdb) commands a 3297db96d56Sopenharmony_ci *** Usage: commands [bnum] 3307db96d56Sopenharmony_ci ... 3317db96d56Sopenharmony_ci end 3327db96d56Sopenharmony_ci (Pdb) commands 4 3337db96d56Sopenharmony_ci *** cannot set commands: Breakpoint 4 already deleted 3347db96d56Sopenharmony_ci (Pdb) continue 3357db96d56Sopenharmony_ci 3 3367db96d56Sopenharmony_ci 4 3377db96d56Sopenharmony_ci """ 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_cidef test_pdb_breakpoints_preserved_across_interactive_sessions(): 3407db96d56Sopenharmony_ci """Breakpoints are remembered between interactive sessions 3417db96d56Sopenharmony_ci 3427db96d56Sopenharmony_ci >>> reset_Breakpoint() 3437db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE 3447db96d56Sopenharmony_ci ... 'import test.test_pdb', 3457db96d56Sopenharmony_ci ... 'break test.test_pdb.do_something', 3467db96d56Sopenharmony_ci ... 'break test.test_pdb.do_nothing', 3477db96d56Sopenharmony_ci ... 'break', 3487db96d56Sopenharmony_ci ... 'continue', 3497db96d56Sopenharmony_ci ... ]): 3507db96d56Sopenharmony_ci ... pdb.run('print()') 3517db96d56Sopenharmony_ci > <string>(1)<module>()... 3527db96d56Sopenharmony_ci (Pdb) import test.test_pdb 3537db96d56Sopenharmony_ci (Pdb) break test.test_pdb.do_something 3547db96d56Sopenharmony_ci Breakpoint 1 at ...test_pdb.py:... 3557db96d56Sopenharmony_ci (Pdb) break test.test_pdb.do_nothing 3567db96d56Sopenharmony_ci Breakpoint 2 at ...test_pdb.py:... 3577db96d56Sopenharmony_ci (Pdb) break 3587db96d56Sopenharmony_ci Num Type Disp Enb Where 3597db96d56Sopenharmony_ci 1 breakpoint keep yes at ...test_pdb.py:... 3607db96d56Sopenharmony_ci 2 breakpoint keep yes at ...test_pdb.py:... 3617db96d56Sopenharmony_ci (Pdb) continue 3627db96d56Sopenharmony_ci 3637db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE 3647db96d56Sopenharmony_ci ... 'break', 3657db96d56Sopenharmony_ci ... 'break pdb.find_function', 3667db96d56Sopenharmony_ci ... 'break', 3677db96d56Sopenharmony_ci ... 'clear 1', 3687db96d56Sopenharmony_ci ... 'continue', 3697db96d56Sopenharmony_ci ... ]): 3707db96d56Sopenharmony_ci ... pdb.run('print()') 3717db96d56Sopenharmony_ci > <string>(1)<module>()... 3727db96d56Sopenharmony_ci (Pdb) break 3737db96d56Sopenharmony_ci Num Type Disp Enb Where 3747db96d56Sopenharmony_ci 1 breakpoint keep yes at ...test_pdb.py:... 3757db96d56Sopenharmony_ci 2 breakpoint keep yes at ...test_pdb.py:... 3767db96d56Sopenharmony_ci (Pdb) break pdb.find_function 3777db96d56Sopenharmony_ci Breakpoint 3 at ...pdb.py:97 3787db96d56Sopenharmony_ci (Pdb) break 3797db96d56Sopenharmony_ci Num Type Disp Enb Where 3807db96d56Sopenharmony_ci 1 breakpoint keep yes at ...test_pdb.py:... 3817db96d56Sopenharmony_ci 2 breakpoint keep yes at ...test_pdb.py:... 3827db96d56Sopenharmony_ci 3 breakpoint keep yes at ...pdb.py:... 3837db96d56Sopenharmony_ci (Pdb) clear 1 3847db96d56Sopenharmony_ci Deleted breakpoint 1 at ...test_pdb.py:... 3857db96d56Sopenharmony_ci (Pdb) continue 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE 3887db96d56Sopenharmony_ci ... 'break', 3897db96d56Sopenharmony_ci ... 'clear 2', 3907db96d56Sopenharmony_ci ... 'clear 3', 3917db96d56Sopenharmony_ci ... 'continue', 3927db96d56Sopenharmony_ci ... ]): 3937db96d56Sopenharmony_ci ... pdb.run('print()') 3947db96d56Sopenharmony_ci > <string>(1)<module>()... 3957db96d56Sopenharmony_ci (Pdb) break 3967db96d56Sopenharmony_ci Num Type Disp Enb Where 3977db96d56Sopenharmony_ci 2 breakpoint keep yes at ...test_pdb.py:... 3987db96d56Sopenharmony_ci 3 breakpoint keep yes at ...pdb.py:... 3997db96d56Sopenharmony_ci (Pdb) clear 2 4007db96d56Sopenharmony_ci Deleted breakpoint 2 at ...test_pdb.py:... 4017db96d56Sopenharmony_ci (Pdb) clear 3 4027db96d56Sopenharmony_ci Deleted breakpoint 3 at ...pdb.py:... 4037db96d56Sopenharmony_ci (Pdb) continue 4047db96d56Sopenharmony_ci """ 4057db96d56Sopenharmony_ci 4067db96d56Sopenharmony_cidef test_pdb_pp_repr_exc(): 4077db96d56Sopenharmony_ci """Test that do_p/do_pp do not swallow exceptions. 4087db96d56Sopenharmony_ci 4097db96d56Sopenharmony_ci >>> class BadRepr: 4107db96d56Sopenharmony_ci ... def __repr__(self): 4117db96d56Sopenharmony_ci ... raise Exception('repr_exc') 4127db96d56Sopenharmony_ci >>> obj = BadRepr() 4137db96d56Sopenharmony_ci 4147db96d56Sopenharmony_ci >>> def test_function(): 4157db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 4167db96d56Sopenharmony_ci 4177db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 4187db96d56Sopenharmony_ci ... 'p obj', 4197db96d56Sopenharmony_ci ... 'pp obj', 4207db96d56Sopenharmony_ci ... 'continue', 4217db96d56Sopenharmony_ci ... ]): 4227db96d56Sopenharmony_ci ... test_function() 4237db96d56Sopenharmony_ci --Return-- 4247db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_pp_repr_exc[2]>(2)test_function()->None 4257db96d56Sopenharmony_ci -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 4267db96d56Sopenharmony_ci (Pdb) p obj 4277db96d56Sopenharmony_ci *** Exception: repr_exc 4287db96d56Sopenharmony_ci (Pdb) pp obj 4297db96d56Sopenharmony_ci *** Exception: repr_exc 4307db96d56Sopenharmony_ci (Pdb) continue 4317db96d56Sopenharmony_ci """ 4327db96d56Sopenharmony_ci 4337db96d56Sopenharmony_ci 4347db96d56Sopenharmony_cidef do_nothing(): 4357db96d56Sopenharmony_ci pass 4367db96d56Sopenharmony_ci 4377db96d56Sopenharmony_cidef do_something(): 4387db96d56Sopenharmony_ci print(42) 4397db96d56Sopenharmony_ci 4407db96d56Sopenharmony_cidef test_list_commands(): 4417db96d56Sopenharmony_ci """Test the list and source commands of pdb. 4427db96d56Sopenharmony_ci 4437db96d56Sopenharmony_ci >>> def test_function_2(foo): 4447db96d56Sopenharmony_ci ... import test.test_pdb 4457db96d56Sopenharmony_ci ... test.test_pdb.do_nothing() 4467db96d56Sopenharmony_ci ... 'some...' 4477db96d56Sopenharmony_ci ... 'more...' 4487db96d56Sopenharmony_ci ... 'code...' 4497db96d56Sopenharmony_ci ... 'to...' 4507db96d56Sopenharmony_ci ... 'make...' 4517db96d56Sopenharmony_ci ... 'a...' 4527db96d56Sopenharmony_ci ... 'long...' 4537db96d56Sopenharmony_ci ... 'listing...' 4547db96d56Sopenharmony_ci ... 'useful...' 4557db96d56Sopenharmony_ci ... '...' 4567db96d56Sopenharmony_ci ... '...' 4577db96d56Sopenharmony_ci ... return foo 4587db96d56Sopenharmony_ci 4597db96d56Sopenharmony_ci >>> def test_function(): 4607db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 4617db96d56Sopenharmony_ci ... ret = test_function_2('baz') 4627db96d56Sopenharmony_ci 4637db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE 4647db96d56Sopenharmony_ci ... 'list', # list first function 4657db96d56Sopenharmony_ci ... 'step', # step into second function 4667db96d56Sopenharmony_ci ... 'list', # list second function 4677db96d56Sopenharmony_ci ... 'list', # continue listing to EOF 4687db96d56Sopenharmony_ci ... 'list 1,3', # list specific lines 4697db96d56Sopenharmony_ci ... 'list x', # invalid argument 4707db96d56Sopenharmony_ci ... 'next', # step to import 4717db96d56Sopenharmony_ci ... 'next', # step over import 4727db96d56Sopenharmony_ci ... 'step', # step into do_nothing 4737db96d56Sopenharmony_ci ... 'longlist', # list all lines 4747db96d56Sopenharmony_ci ... 'source do_something', # list all lines of function 4757db96d56Sopenharmony_ci ... 'source fooxxx', # something that doesn't exit 4767db96d56Sopenharmony_ci ... 'continue', 4777db96d56Sopenharmony_ci ... ]): 4787db96d56Sopenharmony_ci ... test_function() 4797db96d56Sopenharmony_ci > <doctest test.test_pdb.test_list_commands[1]>(3)test_function() 4807db96d56Sopenharmony_ci -> ret = test_function_2('baz') 4817db96d56Sopenharmony_ci (Pdb) list 4827db96d56Sopenharmony_ci 1 def test_function(): 4837db96d56Sopenharmony_ci 2 import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 4847db96d56Sopenharmony_ci 3 -> ret = test_function_2('baz') 4857db96d56Sopenharmony_ci [EOF] 4867db96d56Sopenharmony_ci (Pdb) step 4877db96d56Sopenharmony_ci --Call-- 4887db96d56Sopenharmony_ci > <doctest test.test_pdb.test_list_commands[0]>(1)test_function_2() 4897db96d56Sopenharmony_ci -> def test_function_2(foo): 4907db96d56Sopenharmony_ci (Pdb) list 4917db96d56Sopenharmony_ci 1 -> def test_function_2(foo): 4927db96d56Sopenharmony_ci 2 import test.test_pdb 4937db96d56Sopenharmony_ci 3 test.test_pdb.do_nothing() 4947db96d56Sopenharmony_ci 4 'some...' 4957db96d56Sopenharmony_ci 5 'more...' 4967db96d56Sopenharmony_ci 6 'code...' 4977db96d56Sopenharmony_ci 7 'to...' 4987db96d56Sopenharmony_ci 8 'make...' 4997db96d56Sopenharmony_ci 9 'a...' 5007db96d56Sopenharmony_ci 10 'long...' 5017db96d56Sopenharmony_ci 11 'listing...' 5027db96d56Sopenharmony_ci (Pdb) list 5037db96d56Sopenharmony_ci 12 'useful...' 5047db96d56Sopenharmony_ci 13 '...' 5057db96d56Sopenharmony_ci 14 '...' 5067db96d56Sopenharmony_ci 15 return foo 5077db96d56Sopenharmony_ci [EOF] 5087db96d56Sopenharmony_ci (Pdb) list 1,3 5097db96d56Sopenharmony_ci 1 -> def test_function_2(foo): 5107db96d56Sopenharmony_ci 2 import test.test_pdb 5117db96d56Sopenharmony_ci 3 test.test_pdb.do_nothing() 5127db96d56Sopenharmony_ci (Pdb) list x 5137db96d56Sopenharmony_ci *** ... 5147db96d56Sopenharmony_ci (Pdb) next 5157db96d56Sopenharmony_ci > <doctest test.test_pdb.test_list_commands[0]>(2)test_function_2() 5167db96d56Sopenharmony_ci -> import test.test_pdb 5177db96d56Sopenharmony_ci (Pdb) next 5187db96d56Sopenharmony_ci > <doctest test.test_pdb.test_list_commands[0]>(3)test_function_2() 5197db96d56Sopenharmony_ci -> test.test_pdb.do_nothing() 5207db96d56Sopenharmony_ci (Pdb) step 5217db96d56Sopenharmony_ci --Call-- 5227db96d56Sopenharmony_ci > ...test_pdb.py(...)do_nothing() 5237db96d56Sopenharmony_ci -> def do_nothing(): 5247db96d56Sopenharmony_ci (Pdb) longlist 5257db96d56Sopenharmony_ci ... -> def do_nothing(): 5267db96d56Sopenharmony_ci ... pass 5277db96d56Sopenharmony_ci (Pdb) source do_something 5287db96d56Sopenharmony_ci ... def do_something(): 5297db96d56Sopenharmony_ci ... print(42) 5307db96d56Sopenharmony_ci (Pdb) source fooxxx 5317db96d56Sopenharmony_ci *** ... 5327db96d56Sopenharmony_ci (Pdb) continue 5337db96d56Sopenharmony_ci """ 5347db96d56Sopenharmony_ci 5357db96d56Sopenharmony_cidef test_pdb_whatis_command(): 5367db96d56Sopenharmony_ci """Test the whatis command 5377db96d56Sopenharmony_ci 5387db96d56Sopenharmony_ci >>> myvar = (1,2) 5397db96d56Sopenharmony_ci >>> def myfunc(): 5407db96d56Sopenharmony_ci ... pass 5417db96d56Sopenharmony_ci 5427db96d56Sopenharmony_ci >>> class MyClass: 5437db96d56Sopenharmony_ci ... def mymethod(self): 5447db96d56Sopenharmony_ci ... pass 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ci >>> def test_function(): 5477db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 5487db96d56Sopenharmony_ci 5497db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE 5507db96d56Sopenharmony_ci ... 'whatis myvar', 5517db96d56Sopenharmony_ci ... 'whatis myfunc', 5527db96d56Sopenharmony_ci ... 'whatis MyClass', 5537db96d56Sopenharmony_ci ... 'whatis MyClass()', 5547db96d56Sopenharmony_ci ... 'whatis MyClass.mymethod', 5557db96d56Sopenharmony_ci ... 'whatis MyClass().mymethod', 5567db96d56Sopenharmony_ci ... 'continue', 5577db96d56Sopenharmony_ci ... ]): 5587db96d56Sopenharmony_ci ... test_function() 5597db96d56Sopenharmony_ci --Return-- 5607db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_whatis_command[3]>(2)test_function()->None 5617db96d56Sopenharmony_ci -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 5627db96d56Sopenharmony_ci (Pdb) whatis myvar 5637db96d56Sopenharmony_ci <class 'tuple'> 5647db96d56Sopenharmony_ci (Pdb) whatis myfunc 5657db96d56Sopenharmony_ci Function myfunc 5667db96d56Sopenharmony_ci (Pdb) whatis MyClass 5677db96d56Sopenharmony_ci Class test.test_pdb.MyClass 5687db96d56Sopenharmony_ci (Pdb) whatis MyClass() 5697db96d56Sopenharmony_ci <class 'test.test_pdb.MyClass'> 5707db96d56Sopenharmony_ci (Pdb) whatis MyClass.mymethod 5717db96d56Sopenharmony_ci Function mymethod 5727db96d56Sopenharmony_ci (Pdb) whatis MyClass().mymethod 5737db96d56Sopenharmony_ci Method mymethod 5747db96d56Sopenharmony_ci (Pdb) continue 5757db96d56Sopenharmony_ci """ 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_cidef test_pdb_display_command(): 5787db96d56Sopenharmony_ci """Test display command 5797db96d56Sopenharmony_ci 5807db96d56Sopenharmony_ci >>> def test_function(): 5817db96d56Sopenharmony_ci ... a = 0 5827db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 5837db96d56Sopenharmony_ci ... a = 1 5847db96d56Sopenharmony_ci ... a = 2 5857db96d56Sopenharmony_ci ... a = 3 5867db96d56Sopenharmony_ci ... a = 4 5877db96d56Sopenharmony_ci 5887db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS 5897db96d56Sopenharmony_ci ... 'display a', 5907db96d56Sopenharmony_ci ... 'n', 5917db96d56Sopenharmony_ci ... 'display', 5927db96d56Sopenharmony_ci ... 'undisplay a', 5937db96d56Sopenharmony_ci ... 'n', 5947db96d56Sopenharmony_ci ... 'display a', 5957db96d56Sopenharmony_ci ... 'undisplay', 5967db96d56Sopenharmony_ci ... 'display a < 1', 5977db96d56Sopenharmony_ci ... 'n', 5987db96d56Sopenharmony_ci ... 'continue', 5997db96d56Sopenharmony_ci ... ]): 6007db96d56Sopenharmony_ci ... test_function() 6017db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_display_command[0]>(4)test_function() 6027db96d56Sopenharmony_ci -> a = 1 6037db96d56Sopenharmony_ci (Pdb) display a 6047db96d56Sopenharmony_ci display a: 0 6057db96d56Sopenharmony_ci (Pdb) n 6067db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_display_command[0]>(5)test_function() 6077db96d56Sopenharmony_ci -> a = 2 6087db96d56Sopenharmony_ci display a: 1 [old: 0] 6097db96d56Sopenharmony_ci (Pdb) display 6107db96d56Sopenharmony_ci Currently displaying: 6117db96d56Sopenharmony_ci a: 1 6127db96d56Sopenharmony_ci (Pdb) undisplay a 6137db96d56Sopenharmony_ci (Pdb) n 6147db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_display_command[0]>(6)test_function() 6157db96d56Sopenharmony_ci -> a = 3 6167db96d56Sopenharmony_ci (Pdb) display a 6177db96d56Sopenharmony_ci display a: 2 6187db96d56Sopenharmony_ci (Pdb) undisplay 6197db96d56Sopenharmony_ci (Pdb) display a < 1 6207db96d56Sopenharmony_ci display a < 1: False 6217db96d56Sopenharmony_ci (Pdb) n 6227db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_display_command[0]>(7)test_function() 6237db96d56Sopenharmony_ci -> a = 4 6247db96d56Sopenharmony_ci (Pdb) continue 6257db96d56Sopenharmony_ci """ 6267db96d56Sopenharmony_ci 6277db96d56Sopenharmony_cidef test_pdb_alias_command(): 6287db96d56Sopenharmony_ci """Test alias command 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_ci >>> class A: 6317db96d56Sopenharmony_ci ... def __init__(self): 6327db96d56Sopenharmony_ci ... self.attr1 = 10 6337db96d56Sopenharmony_ci ... self.attr2 = 'str' 6347db96d56Sopenharmony_ci ... def method(self): 6357db96d56Sopenharmony_ci ... pass 6367db96d56Sopenharmony_ci 6377db96d56Sopenharmony_ci >>> def test_function(): 6387db96d56Sopenharmony_ci ... o = A() 6397db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 6407db96d56Sopenharmony_ci ... o.method() 6417db96d56Sopenharmony_ci 6427db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS 6437db96d56Sopenharmony_ci ... 'alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")', 6447db96d56Sopenharmony_ci ... 'alias ps pi self', 6457db96d56Sopenharmony_ci ... 'pi o', 6467db96d56Sopenharmony_ci ... 's', 6477db96d56Sopenharmony_ci ... 'ps', 6487db96d56Sopenharmony_ci ... 'continue', 6497db96d56Sopenharmony_ci ... ]): 6507db96d56Sopenharmony_ci ... test_function() 6517db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_alias_command[1]>(4)test_function() 6527db96d56Sopenharmony_ci -> o.method() 6537db96d56Sopenharmony_ci (Pdb) alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}") 6547db96d56Sopenharmony_ci (Pdb) alias ps pi self 6557db96d56Sopenharmony_ci (Pdb) pi o 6567db96d56Sopenharmony_ci o.attr1 = 10 6577db96d56Sopenharmony_ci o.attr2 = str 6587db96d56Sopenharmony_ci (Pdb) s 6597db96d56Sopenharmony_ci --Call-- 6607db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_alias_command[0]>(5)method() 6617db96d56Sopenharmony_ci -> def method(self): 6627db96d56Sopenharmony_ci (Pdb) ps 6637db96d56Sopenharmony_ci self.attr1 = 10 6647db96d56Sopenharmony_ci self.attr2 = str 6657db96d56Sopenharmony_ci (Pdb) continue 6667db96d56Sopenharmony_ci """ 6677db96d56Sopenharmony_ci 6687db96d56Sopenharmony_cidef test_pdb_where_command(): 6697db96d56Sopenharmony_ci """Test where command 6707db96d56Sopenharmony_ci 6717db96d56Sopenharmony_ci >>> def g(): 6727db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 6737db96d56Sopenharmony_ci 6747db96d56Sopenharmony_ci >>> def f(): 6757db96d56Sopenharmony_ci ... g(); 6767db96d56Sopenharmony_ci 6777db96d56Sopenharmony_ci >>> def test_function(): 6787db96d56Sopenharmony_ci ... f() 6797db96d56Sopenharmony_ci 6807db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS 6817db96d56Sopenharmony_ci ... 'w', 6827db96d56Sopenharmony_ci ... 'where', 6837db96d56Sopenharmony_ci ... 'u', 6847db96d56Sopenharmony_ci ... 'w', 6857db96d56Sopenharmony_ci ... 'continue', 6867db96d56Sopenharmony_ci ... ]): 6877db96d56Sopenharmony_ci ... test_function() 6887db96d56Sopenharmony_ci --Return-- 6897db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_where_command[0]>(2)g()->None 6907db96d56Sopenharmony_ci -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 6917db96d56Sopenharmony_ci (Pdb) w 6927db96d56Sopenharmony_ci ... 6937db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[3]>(8)<module>() 6947db96d56Sopenharmony_ci -> test_function() 6957db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[2]>(2)test_function() 6967db96d56Sopenharmony_ci -> f() 6977db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[1]>(2)f() 6987db96d56Sopenharmony_ci -> g(); 6997db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_where_command[0]>(2)g()->None 7007db96d56Sopenharmony_ci -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 7017db96d56Sopenharmony_ci (Pdb) where 7027db96d56Sopenharmony_ci ... 7037db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[3]>(8)<module>() 7047db96d56Sopenharmony_ci -> test_function() 7057db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[2]>(2)test_function() 7067db96d56Sopenharmony_ci -> f() 7077db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[1]>(2)f() 7087db96d56Sopenharmony_ci -> g(); 7097db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_where_command[0]>(2)g()->None 7107db96d56Sopenharmony_ci -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 7117db96d56Sopenharmony_ci (Pdb) u 7127db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_where_command[1]>(2)f() 7137db96d56Sopenharmony_ci -> g(); 7147db96d56Sopenharmony_ci (Pdb) w 7157db96d56Sopenharmony_ci ... 7167db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[3]>(8)<module>() 7177db96d56Sopenharmony_ci -> test_function() 7187db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[2]>(2)test_function() 7197db96d56Sopenharmony_ci -> f() 7207db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_where_command[1]>(2)f() 7217db96d56Sopenharmony_ci -> g(); 7227db96d56Sopenharmony_ci <doctest test.test_pdb.test_pdb_where_command[0]>(2)g()->None 7237db96d56Sopenharmony_ci -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 7247db96d56Sopenharmony_ci (Pdb) continue 7257db96d56Sopenharmony_ci """ 7267db96d56Sopenharmony_ci 7277db96d56Sopenharmony_cidef test_post_mortem(): 7287db96d56Sopenharmony_ci """Test post mortem traceback debugging. 7297db96d56Sopenharmony_ci 7307db96d56Sopenharmony_ci >>> def test_function_2(): 7317db96d56Sopenharmony_ci ... try: 7327db96d56Sopenharmony_ci ... 1/0 7337db96d56Sopenharmony_ci ... finally: 7347db96d56Sopenharmony_ci ... print('Exception!') 7357db96d56Sopenharmony_ci 7367db96d56Sopenharmony_ci >>> def test_function(): 7377db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 7387db96d56Sopenharmony_ci ... test_function_2() 7397db96d56Sopenharmony_ci ... print('Not reached.') 7407db96d56Sopenharmony_ci 7417db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE 7427db96d56Sopenharmony_ci ... 'next', # step over exception-raising call 7437db96d56Sopenharmony_ci ... 'bt', # get a backtrace 7447db96d56Sopenharmony_ci ... 'list', # list code of test_function() 7457db96d56Sopenharmony_ci ... 'down', # step into test_function_2() 7467db96d56Sopenharmony_ci ... 'list', # list code of test_function_2() 7477db96d56Sopenharmony_ci ... 'continue', 7487db96d56Sopenharmony_ci ... ]): 7497db96d56Sopenharmony_ci ... try: 7507db96d56Sopenharmony_ci ... test_function() 7517db96d56Sopenharmony_ci ... except ZeroDivisionError: 7527db96d56Sopenharmony_ci ... print('Correctly reraised.') 7537db96d56Sopenharmony_ci > <doctest test.test_pdb.test_post_mortem[1]>(3)test_function() 7547db96d56Sopenharmony_ci -> test_function_2() 7557db96d56Sopenharmony_ci (Pdb) next 7567db96d56Sopenharmony_ci Exception! 7577db96d56Sopenharmony_ci ZeroDivisionError: division by zero 7587db96d56Sopenharmony_ci > <doctest test.test_pdb.test_post_mortem[1]>(3)test_function() 7597db96d56Sopenharmony_ci -> test_function_2() 7607db96d56Sopenharmony_ci (Pdb) bt 7617db96d56Sopenharmony_ci ... 7627db96d56Sopenharmony_ci <doctest test.test_pdb.test_post_mortem[2]>(10)<module>() 7637db96d56Sopenharmony_ci -> test_function() 7647db96d56Sopenharmony_ci > <doctest test.test_pdb.test_post_mortem[1]>(3)test_function() 7657db96d56Sopenharmony_ci -> test_function_2() 7667db96d56Sopenharmony_ci <doctest test.test_pdb.test_post_mortem[0]>(3)test_function_2() 7677db96d56Sopenharmony_ci -> 1/0 7687db96d56Sopenharmony_ci (Pdb) list 7697db96d56Sopenharmony_ci 1 def test_function(): 7707db96d56Sopenharmony_ci 2 import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 7717db96d56Sopenharmony_ci 3 -> test_function_2() 7727db96d56Sopenharmony_ci 4 print('Not reached.') 7737db96d56Sopenharmony_ci [EOF] 7747db96d56Sopenharmony_ci (Pdb) down 7757db96d56Sopenharmony_ci > <doctest test.test_pdb.test_post_mortem[0]>(3)test_function_2() 7767db96d56Sopenharmony_ci -> 1/0 7777db96d56Sopenharmony_ci (Pdb) list 7787db96d56Sopenharmony_ci 1 def test_function_2(): 7797db96d56Sopenharmony_ci 2 try: 7807db96d56Sopenharmony_ci 3 >> 1/0 7817db96d56Sopenharmony_ci 4 finally: 7827db96d56Sopenharmony_ci 5 -> print('Exception!') 7837db96d56Sopenharmony_ci [EOF] 7847db96d56Sopenharmony_ci (Pdb) continue 7857db96d56Sopenharmony_ci Correctly reraised. 7867db96d56Sopenharmony_ci """ 7877db96d56Sopenharmony_ci 7887db96d56Sopenharmony_ci 7897db96d56Sopenharmony_cidef test_pdb_skip_modules(): 7907db96d56Sopenharmony_ci """This illustrates the simple case of module skipping. 7917db96d56Sopenharmony_ci 7927db96d56Sopenharmony_ci >>> def skip_module(): 7937db96d56Sopenharmony_ci ... import string 7947db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(skip=['stri*'], nosigint=True, readrc=False).set_trace() 7957db96d56Sopenharmony_ci ... string.capwords('FOO') 7967db96d56Sopenharmony_ci 7977db96d56Sopenharmony_ci >>> with PdbTestInput([ 7987db96d56Sopenharmony_ci ... 'step', 7997db96d56Sopenharmony_ci ... 'continue', 8007db96d56Sopenharmony_ci ... ]): 8017db96d56Sopenharmony_ci ... skip_module() 8027db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module() 8037db96d56Sopenharmony_ci -> string.capwords('FOO') 8047db96d56Sopenharmony_ci (Pdb) step 8057db96d56Sopenharmony_ci --Return-- 8067db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()->None 8077db96d56Sopenharmony_ci -> string.capwords('FOO') 8087db96d56Sopenharmony_ci (Pdb) continue 8097db96d56Sopenharmony_ci """ 8107db96d56Sopenharmony_ci 8117db96d56Sopenharmony_ci 8127db96d56Sopenharmony_ci# Module for testing skipping of module that makes a callback 8137db96d56Sopenharmony_cimod = types.ModuleType('module_to_skip') 8147db96d56Sopenharmony_ciexec('def foo_pony(callback): x = 1; callback(); return None', mod.__dict__) 8157db96d56Sopenharmony_ci 8167db96d56Sopenharmony_ci 8177db96d56Sopenharmony_cidef test_pdb_skip_modules_with_callback(): 8187db96d56Sopenharmony_ci """This illustrates skipping of modules that call into other code. 8197db96d56Sopenharmony_ci 8207db96d56Sopenharmony_ci >>> def skip_module(): 8217db96d56Sopenharmony_ci ... def callback(): 8227db96d56Sopenharmony_ci ... return None 8237db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(skip=['module_to_skip*'], nosigint=True, readrc=False).set_trace() 8247db96d56Sopenharmony_ci ... mod.foo_pony(callback) 8257db96d56Sopenharmony_ci 8267db96d56Sopenharmony_ci >>> with PdbTestInput([ 8277db96d56Sopenharmony_ci ... 'step', 8287db96d56Sopenharmony_ci ... 'step', 8297db96d56Sopenharmony_ci ... 'step', 8307db96d56Sopenharmony_ci ... 'step', 8317db96d56Sopenharmony_ci ... 'step', 8327db96d56Sopenharmony_ci ... 'continue', 8337db96d56Sopenharmony_ci ... ]): 8347db96d56Sopenharmony_ci ... skip_module() 8357db96d56Sopenharmony_ci ... pass # provides something to "step" to 8367db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module() 8377db96d56Sopenharmony_ci -> mod.foo_pony(callback) 8387db96d56Sopenharmony_ci (Pdb) step 8397db96d56Sopenharmony_ci --Call-- 8407db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(2)callback() 8417db96d56Sopenharmony_ci -> def callback(): 8427db96d56Sopenharmony_ci (Pdb) step 8437db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback() 8447db96d56Sopenharmony_ci -> return None 8457db96d56Sopenharmony_ci (Pdb) step 8467db96d56Sopenharmony_ci --Return-- 8477db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()->None 8487db96d56Sopenharmony_ci -> return None 8497db96d56Sopenharmony_ci (Pdb) step 8507db96d56Sopenharmony_ci --Return-- 8517db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()->None 8527db96d56Sopenharmony_ci -> mod.foo_pony(callback) 8537db96d56Sopenharmony_ci (Pdb) step 8547db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[1]>(10)<module>() 8557db96d56Sopenharmony_ci -> pass # provides something to "step" to 8567db96d56Sopenharmony_ci (Pdb) continue 8577db96d56Sopenharmony_ci """ 8587db96d56Sopenharmony_ci 8597db96d56Sopenharmony_ci 8607db96d56Sopenharmony_cidef test_pdb_continue_in_bottomframe(): 8617db96d56Sopenharmony_ci """Test that "continue" and "next" work properly in bottom frame (issue #5294). 8627db96d56Sopenharmony_ci 8637db96d56Sopenharmony_ci >>> def test_function(): 8647db96d56Sopenharmony_ci ... import pdb, sys; inst = pdb.Pdb(nosigint=True, readrc=False) 8657db96d56Sopenharmony_ci ... inst.set_trace() 8667db96d56Sopenharmony_ci ... inst.botframe = sys._getframe() # hackery to get the right botframe 8677db96d56Sopenharmony_ci ... print(1) 8687db96d56Sopenharmony_ci ... print(2) 8697db96d56Sopenharmony_ci ... print(3) 8707db96d56Sopenharmony_ci ... print(4) 8717db96d56Sopenharmony_ci 8727db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +ELLIPSIS 8737db96d56Sopenharmony_ci ... 'next', 8747db96d56Sopenharmony_ci ... 'break 7', 8757db96d56Sopenharmony_ci ... 'continue', 8767db96d56Sopenharmony_ci ... 'next', 8777db96d56Sopenharmony_ci ... 'continue', 8787db96d56Sopenharmony_ci ... 'continue', 8797db96d56Sopenharmony_ci ... ]): 8807db96d56Sopenharmony_ci ... test_function() 8817db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(4)test_function() 8827db96d56Sopenharmony_ci -> inst.botframe = sys._getframe() # hackery to get the right botframe 8837db96d56Sopenharmony_ci (Pdb) next 8847db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(5)test_function() 8857db96d56Sopenharmony_ci -> print(1) 8867db96d56Sopenharmony_ci (Pdb) break 7 8877db96d56Sopenharmony_ci Breakpoint ... at <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>:7 8887db96d56Sopenharmony_ci (Pdb) continue 8897db96d56Sopenharmony_ci 1 8907db96d56Sopenharmony_ci 2 8917db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(7)test_function() 8927db96d56Sopenharmony_ci -> print(3) 8937db96d56Sopenharmony_ci (Pdb) next 8947db96d56Sopenharmony_ci 3 8957db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(8)test_function() 8967db96d56Sopenharmony_ci -> print(4) 8977db96d56Sopenharmony_ci (Pdb) continue 8987db96d56Sopenharmony_ci 4 8997db96d56Sopenharmony_ci """ 9007db96d56Sopenharmony_ci 9017db96d56Sopenharmony_ci 9027db96d56Sopenharmony_cidef pdb_invoke(method, arg): 9037db96d56Sopenharmony_ci """Run pdb.method(arg).""" 9047db96d56Sopenharmony_ci getattr(pdb.Pdb(nosigint=True, readrc=False), method)(arg) 9057db96d56Sopenharmony_ci 9067db96d56Sopenharmony_ci 9077db96d56Sopenharmony_cidef test_pdb_run_with_incorrect_argument(): 9087db96d56Sopenharmony_ci """Testing run and runeval with incorrect first argument. 9097db96d56Sopenharmony_ci 9107db96d56Sopenharmony_ci >>> pti = PdbTestInput(['continue',]) 9117db96d56Sopenharmony_ci >>> with pti: 9127db96d56Sopenharmony_ci ... pdb_invoke('run', lambda x: x) 9137db96d56Sopenharmony_ci Traceback (most recent call last): 9147db96d56Sopenharmony_ci TypeError: exec() arg 1 must be a string, bytes or code object 9157db96d56Sopenharmony_ci 9167db96d56Sopenharmony_ci >>> with pti: 9177db96d56Sopenharmony_ci ... pdb_invoke('runeval', lambda x: x) 9187db96d56Sopenharmony_ci Traceback (most recent call last): 9197db96d56Sopenharmony_ci TypeError: eval() arg 1 must be a string, bytes or code object 9207db96d56Sopenharmony_ci """ 9217db96d56Sopenharmony_ci 9227db96d56Sopenharmony_ci 9237db96d56Sopenharmony_cidef test_pdb_run_with_code_object(): 9247db96d56Sopenharmony_ci """Testing run and runeval with code object as a first argument. 9257db96d56Sopenharmony_ci 9267db96d56Sopenharmony_ci >>> with PdbTestInput(['step','x', 'continue']): # doctest: +ELLIPSIS 9277db96d56Sopenharmony_ci ... pdb_invoke('run', compile('x=1', '<string>', 'exec')) 9287db96d56Sopenharmony_ci > <string>(1)<module>()... 9297db96d56Sopenharmony_ci (Pdb) step 9307db96d56Sopenharmony_ci --Return-- 9317db96d56Sopenharmony_ci > <string>(1)<module>()->None 9327db96d56Sopenharmony_ci (Pdb) x 9337db96d56Sopenharmony_ci 1 9347db96d56Sopenharmony_ci (Pdb) continue 9357db96d56Sopenharmony_ci 9367db96d56Sopenharmony_ci >>> with PdbTestInput(['x', 'continue']): 9377db96d56Sopenharmony_ci ... x=0 9387db96d56Sopenharmony_ci ... pdb_invoke('runeval', compile('x+1', '<string>', 'eval')) 9397db96d56Sopenharmony_ci > <string>(1)<module>()->None 9407db96d56Sopenharmony_ci (Pdb) x 9417db96d56Sopenharmony_ci 1 9427db96d56Sopenharmony_ci (Pdb) continue 9437db96d56Sopenharmony_ci """ 9447db96d56Sopenharmony_ci 9457db96d56Sopenharmony_cidef test_next_until_return_at_return_event(): 9467db96d56Sopenharmony_ci """Test that pdb stops after a next/until/return issued at a return debug event. 9477db96d56Sopenharmony_ci 9487db96d56Sopenharmony_ci >>> def test_function_2(): 9497db96d56Sopenharmony_ci ... x = 1 9507db96d56Sopenharmony_ci ... x = 2 9517db96d56Sopenharmony_ci 9527db96d56Sopenharmony_ci >>> def test_function(): 9537db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 9547db96d56Sopenharmony_ci ... test_function_2() 9557db96d56Sopenharmony_ci ... test_function_2() 9567db96d56Sopenharmony_ci ... test_function_2() 9577db96d56Sopenharmony_ci ... end = 1 9587db96d56Sopenharmony_ci 9597db96d56Sopenharmony_ci >>> reset_Breakpoint() 9607db96d56Sopenharmony_ci >>> with PdbTestInput(['break test_function_2', 9617db96d56Sopenharmony_ci ... 'continue', 9627db96d56Sopenharmony_ci ... 'return', 9637db96d56Sopenharmony_ci ... 'next', 9647db96d56Sopenharmony_ci ... 'continue', 9657db96d56Sopenharmony_ci ... 'return', 9667db96d56Sopenharmony_ci ... 'until', 9677db96d56Sopenharmony_ci ... 'continue', 9687db96d56Sopenharmony_ci ... 'return', 9697db96d56Sopenharmony_ci ... 'return', 9707db96d56Sopenharmony_ci ... 'continue']): 9717db96d56Sopenharmony_ci ... test_function() 9727db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[1]>(3)test_function() 9737db96d56Sopenharmony_ci -> test_function_2() 9747db96d56Sopenharmony_ci (Pdb) break test_function_2 9757db96d56Sopenharmony_ci Breakpoint 1 at <doctest test.test_pdb.test_next_until_return_at_return_event[0]>:1 9767db96d56Sopenharmony_ci (Pdb) continue 9777db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(2)test_function_2() 9787db96d56Sopenharmony_ci -> x = 1 9797db96d56Sopenharmony_ci (Pdb) return 9807db96d56Sopenharmony_ci --Return-- 9817db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(3)test_function_2()->None 9827db96d56Sopenharmony_ci -> x = 2 9837db96d56Sopenharmony_ci (Pdb) next 9847db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[1]>(4)test_function() 9857db96d56Sopenharmony_ci -> test_function_2() 9867db96d56Sopenharmony_ci (Pdb) continue 9877db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(2)test_function_2() 9887db96d56Sopenharmony_ci -> x = 1 9897db96d56Sopenharmony_ci (Pdb) return 9907db96d56Sopenharmony_ci --Return-- 9917db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(3)test_function_2()->None 9927db96d56Sopenharmony_ci -> x = 2 9937db96d56Sopenharmony_ci (Pdb) until 9947db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[1]>(5)test_function() 9957db96d56Sopenharmony_ci -> test_function_2() 9967db96d56Sopenharmony_ci (Pdb) continue 9977db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(2)test_function_2() 9987db96d56Sopenharmony_ci -> x = 1 9997db96d56Sopenharmony_ci (Pdb) return 10007db96d56Sopenharmony_ci --Return-- 10017db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(3)test_function_2()->None 10027db96d56Sopenharmony_ci -> x = 2 10037db96d56Sopenharmony_ci (Pdb) return 10047db96d56Sopenharmony_ci > <doctest test.test_pdb.test_next_until_return_at_return_event[1]>(6)test_function() 10057db96d56Sopenharmony_ci -> end = 1 10067db96d56Sopenharmony_ci (Pdb) continue 10077db96d56Sopenharmony_ci """ 10087db96d56Sopenharmony_ci 10097db96d56Sopenharmony_cidef test_pdb_next_command_for_generator(): 10107db96d56Sopenharmony_ci """Testing skip unwindng stack on yield for generators for "next" command 10117db96d56Sopenharmony_ci 10127db96d56Sopenharmony_ci >>> def test_gen(): 10137db96d56Sopenharmony_ci ... yield 0 10147db96d56Sopenharmony_ci ... return 1 10157db96d56Sopenharmony_ci ... yield 2 10167db96d56Sopenharmony_ci 10177db96d56Sopenharmony_ci >>> def test_function(): 10187db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 10197db96d56Sopenharmony_ci ... it = test_gen() 10207db96d56Sopenharmony_ci ... try: 10217db96d56Sopenharmony_ci ... if next(it) != 0: 10227db96d56Sopenharmony_ci ... raise AssertionError 10237db96d56Sopenharmony_ci ... next(it) 10247db96d56Sopenharmony_ci ... except StopIteration as ex: 10257db96d56Sopenharmony_ci ... if ex.value != 1: 10267db96d56Sopenharmony_ci ... raise AssertionError 10277db96d56Sopenharmony_ci ... print("finished") 10287db96d56Sopenharmony_ci 10297db96d56Sopenharmony_ci >>> with PdbTestInput(['step', 10307db96d56Sopenharmony_ci ... 'step', 10317db96d56Sopenharmony_ci ... 'step', 10327db96d56Sopenharmony_ci ... 'next', 10337db96d56Sopenharmony_ci ... 'next', 10347db96d56Sopenharmony_ci ... 'step', 10357db96d56Sopenharmony_ci ... 'step', 10367db96d56Sopenharmony_ci ... 'continue']): 10377db96d56Sopenharmony_ci ... test_function() 10387db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(3)test_function() 10397db96d56Sopenharmony_ci -> it = test_gen() 10407db96d56Sopenharmony_ci (Pdb) step 10417db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(4)test_function() 10427db96d56Sopenharmony_ci -> try: 10437db96d56Sopenharmony_ci (Pdb) step 10447db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(5)test_function() 10457db96d56Sopenharmony_ci -> if next(it) != 0: 10467db96d56Sopenharmony_ci (Pdb) step 10477db96d56Sopenharmony_ci --Call-- 10487db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(1)test_gen() 10497db96d56Sopenharmony_ci -> def test_gen(): 10507db96d56Sopenharmony_ci (Pdb) next 10517db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(2)test_gen() 10527db96d56Sopenharmony_ci -> yield 0 10537db96d56Sopenharmony_ci (Pdb) next 10547db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(3)test_gen() 10557db96d56Sopenharmony_ci -> return 1 10567db96d56Sopenharmony_ci (Pdb) step 10577db96d56Sopenharmony_ci --Return-- 10587db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(3)test_gen()->1 10597db96d56Sopenharmony_ci -> return 1 10607db96d56Sopenharmony_ci (Pdb) step 10617db96d56Sopenharmony_ci StopIteration: 1 10627db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(7)test_function() 10637db96d56Sopenharmony_ci -> next(it) 10647db96d56Sopenharmony_ci (Pdb) continue 10657db96d56Sopenharmony_ci finished 10667db96d56Sopenharmony_ci """ 10677db96d56Sopenharmony_ci 10687db96d56Sopenharmony_cidef test_pdb_next_command_for_coroutine(): 10697db96d56Sopenharmony_ci """Testing skip unwindng stack on yield for coroutines for "next" command 10707db96d56Sopenharmony_ci 10717db96d56Sopenharmony_ci >>> import asyncio 10727db96d56Sopenharmony_ci 10737db96d56Sopenharmony_ci >>> async def test_coro(): 10747db96d56Sopenharmony_ci ... await asyncio.sleep(0) 10757db96d56Sopenharmony_ci ... await asyncio.sleep(0) 10767db96d56Sopenharmony_ci ... await asyncio.sleep(0) 10777db96d56Sopenharmony_ci 10787db96d56Sopenharmony_ci >>> async def test_main(): 10797db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 10807db96d56Sopenharmony_ci ... await test_coro() 10817db96d56Sopenharmony_ci 10827db96d56Sopenharmony_ci >>> def test_function(): 10837db96d56Sopenharmony_ci ... loop = asyncio.new_event_loop() 10847db96d56Sopenharmony_ci ... loop.run_until_complete(test_main()) 10857db96d56Sopenharmony_ci ... loop.close() 10867db96d56Sopenharmony_ci ... asyncio.set_event_loop_policy(None) 10877db96d56Sopenharmony_ci ... print("finished") 10887db96d56Sopenharmony_ci 10897db96d56Sopenharmony_ci >>> with PdbTestInput(['step', 10907db96d56Sopenharmony_ci ... 'step', 10917db96d56Sopenharmony_ci ... 'next', 10927db96d56Sopenharmony_ci ... 'next', 10937db96d56Sopenharmony_ci ... 'next', 10947db96d56Sopenharmony_ci ... 'step', 10957db96d56Sopenharmony_ci ... 'continue']): 10967db96d56Sopenharmony_ci ... test_function() 10977db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[2]>(3)test_main() 10987db96d56Sopenharmony_ci -> await test_coro() 10997db96d56Sopenharmony_ci (Pdb) step 11007db96d56Sopenharmony_ci --Call-- 11017db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[1]>(1)test_coro() 11027db96d56Sopenharmony_ci -> async def test_coro(): 11037db96d56Sopenharmony_ci (Pdb) step 11047db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[1]>(2)test_coro() 11057db96d56Sopenharmony_ci -> await asyncio.sleep(0) 11067db96d56Sopenharmony_ci (Pdb) next 11077db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[1]>(3)test_coro() 11087db96d56Sopenharmony_ci -> await asyncio.sleep(0) 11097db96d56Sopenharmony_ci (Pdb) next 11107db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[1]>(4)test_coro() 11117db96d56Sopenharmony_ci -> await asyncio.sleep(0) 11127db96d56Sopenharmony_ci (Pdb) next 11137db96d56Sopenharmony_ci Internal StopIteration 11147db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[2]>(3)test_main() 11157db96d56Sopenharmony_ci -> await test_coro() 11167db96d56Sopenharmony_ci (Pdb) step 11177db96d56Sopenharmony_ci --Return-- 11187db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[2]>(3)test_main()->None 11197db96d56Sopenharmony_ci -> await test_coro() 11207db96d56Sopenharmony_ci (Pdb) continue 11217db96d56Sopenharmony_ci finished 11227db96d56Sopenharmony_ci """ 11237db96d56Sopenharmony_ci 11247db96d56Sopenharmony_cidef test_pdb_next_command_for_asyncgen(): 11257db96d56Sopenharmony_ci """Testing skip unwindng stack on yield for coroutines for "next" command 11267db96d56Sopenharmony_ci 11277db96d56Sopenharmony_ci >>> import asyncio 11287db96d56Sopenharmony_ci 11297db96d56Sopenharmony_ci >>> async def agen(): 11307db96d56Sopenharmony_ci ... yield 1 11317db96d56Sopenharmony_ci ... await asyncio.sleep(0) 11327db96d56Sopenharmony_ci ... yield 2 11337db96d56Sopenharmony_ci 11347db96d56Sopenharmony_ci >>> async def test_coro(): 11357db96d56Sopenharmony_ci ... async for x in agen(): 11367db96d56Sopenharmony_ci ... print(x) 11377db96d56Sopenharmony_ci 11387db96d56Sopenharmony_ci >>> async def test_main(): 11397db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 11407db96d56Sopenharmony_ci ... await test_coro() 11417db96d56Sopenharmony_ci 11427db96d56Sopenharmony_ci >>> def test_function(): 11437db96d56Sopenharmony_ci ... loop = asyncio.new_event_loop() 11447db96d56Sopenharmony_ci ... loop.run_until_complete(test_main()) 11457db96d56Sopenharmony_ci ... loop.close() 11467db96d56Sopenharmony_ci ... asyncio.set_event_loop_policy(None) 11477db96d56Sopenharmony_ci ... print("finished") 11487db96d56Sopenharmony_ci 11497db96d56Sopenharmony_ci >>> with PdbTestInput(['step', 11507db96d56Sopenharmony_ci ... 'step', 11517db96d56Sopenharmony_ci ... 'next', 11527db96d56Sopenharmony_ci ... 'next', 11537db96d56Sopenharmony_ci ... 'step', 11547db96d56Sopenharmony_ci ... 'next', 11557db96d56Sopenharmony_ci ... 'continue']): 11567db96d56Sopenharmony_ci ... test_function() 11577db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[3]>(3)test_main() 11587db96d56Sopenharmony_ci -> await test_coro() 11597db96d56Sopenharmony_ci (Pdb) step 11607db96d56Sopenharmony_ci --Call-- 11617db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[2]>(1)test_coro() 11627db96d56Sopenharmony_ci -> async def test_coro(): 11637db96d56Sopenharmony_ci (Pdb) step 11647db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[2]>(2)test_coro() 11657db96d56Sopenharmony_ci -> async for x in agen(): 11667db96d56Sopenharmony_ci (Pdb) next 11677db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[2]>(3)test_coro() 11687db96d56Sopenharmony_ci -> print(x) 11697db96d56Sopenharmony_ci (Pdb) next 11707db96d56Sopenharmony_ci 1 11717db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[2]>(2)test_coro() 11727db96d56Sopenharmony_ci -> async for x in agen(): 11737db96d56Sopenharmony_ci (Pdb) step 11747db96d56Sopenharmony_ci --Call-- 11757db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[1]>(2)agen() 11767db96d56Sopenharmony_ci -> yield 1 11777db96d56Sopenharmony_ci (Pdb) next 11787db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[1]>(3)agen() 11797db96d56Sopenharmony_ci -> await asyncio.sleep(0) 11807db96d56Sopenharmony_ci (Pdb) continue 11817db96d56Sopenharmony_ci 2 11827db96d56Sopenharmony_ci finished 11837db96d56Sopenharmony_ci """ 11847db96d56Sopenharmony_ci 11857db96d56Sopenharmony_cidef test_pdb_return_command_for_generator(): 11867db96d56Sopenharmony_ci """Testing no unwindng stack on yield for generators 11877db96d56Sopenharmony_ci for "return" command 11887db96d56Sopenharmony_ci 11897db96d56Sopenharmony_ci >>> def test_gen(): 11907db96d56Sopenharmony_ci ... yield 0 11917db96d56Sopenharmony_ci ... return 1 11927db96d56Sopenharmony_ci ... yield 2 11937db96d56Sopenharmony_ci 11947db96d56Sopenharmony_ci >>> def test_function(): 11957db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 11967db96d56Sopenharmony_ci ... it = test_gen() 11977db96d56Sopenharmony_ci ... try: 11987db96d56Sopenharmony_ci ... if next(it) != 0: 11997db96d56Sopenharmony_ci ... raise AssertionError 12007db96d56Sopenharmony_ci ... next(it) 12017db96d56Sopenharmony_ci ... except StopIteration as ex: 12027db96d56Sopenharmony_ci ... if ex.value != 1: 12037db96d56Sopenharmony_ci ... raise AssertionError 12047db96d56Sopenharmony_ci ... print("finished") 12057db96d56Sopenharmony_ci 12067db96d56Sopenharmony_ci >>> with PdbTestInput(['step', 12077db96d56Sopenharmony_ci ... 'step', 12087db96d56Sopenharmony_ci ... 'step', 12097db96d56Sopenharmony_ci ... 'return', 12107db96d56Sopenharmony_ci ... 'step', 12117db96d56Sopenharmony_ci ... 'step', 12127db96d56Sopenharmony_ci ... 'continue']): 12137db96d56Sopenharmony_ci ... test_function() 12147db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(3)test_function() 12157db96d56Sopenharmony_ci -> it = test_gen() 12167db96d56Sopenharmony_ci (Pdb) step 12177db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(4)test_function() 12187db96d56Sopenharmony_ci -> try: 12197db96d56Sopenharmony_ci (Pdb) step 12207db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(5)test_function() 12217db96d56Sopenharmony_ci -> if next(it) != 0: 12227db96d56Sopenharmony_ci (Pdb) step 12237db96d56Sopenharmony_ci --Call-- 12247db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_generator[0]>(1)test_gen() 12257db96d56Sopenharmony_ci -> def test_gen(): 12267db96d56Sopenharmony_ci (Pdb) return 12277db96d56Sopenharmony_ci StopIteration: 1 12287db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(7)test_function() 12297db96d56Sopenharmony_ci -> next(it) 12307db96d56Sopenharmony_ci (Pdb) step 12317db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(8)test_function() 12327db96d56Sopenharmony_ci -> except StopIteration as ex: 12337db96d56Sopenharmony_ci (Pdb) step 12347db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(9)test_function() 12357db96d56Sopenharmony_ci -> if ex.value != 1: 12367db96d56Sopenharmony_ci (Pdb) continue 12377db96d56Sopenharmony_ci finished 12387db96d56Sopenharmony_ci """ 12397db96d56Sopenharmony_ci 12407db96d56Sopenharmony_cidef test_pdb_return_command_for_coroutine(): 12417db96d56Sopenharmony_ci """Testing no unwindng stack on yield for coroutines for "return" command 12427db96d56Sopenharmony_ci 12437db96d56Sopenharmony_ci >>> import asyncio 12447db96d56Sopenharmony_ci 12457db96d56Sopenharmony_ci >>> async def test_coro(): 12467db96d56Sopenharmony_ci ... await asyncio.sleep(0) 12477db96d56Sopenharmony_ci ... await asyncio.sleep(0) 12487db96d56Sopenharmony_ci ... await asyncio.sleep(0) 12497db96d56Sopenharmony_ci 12507db96d56Sopenharmony_ci >>> async def test_main(): 12517db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 12527db96d56Sopenharmony_ci ... await test_coro() 12537db96d56Sopenharmony_ci 12547db96d56Sopenharmony_ci >>> def test_function(): 12557db96d56Sopenharmony_ci ... loop = asyncio.new_event_loop() 12567db96d56Sopenharmony_ci ... loop.run_until_complete(test_main()) 12577db96d56Sopenharmony_ci ... loop.close() 12587db96d56Sopenharmony_ci ... asyncio.set_event_loop_policy(None) 12597db96d56Sopenharmony_ci ... print("finished") 12607db96d56Sopenharmony_ci 12617db96d56Sopenharmony_ci >>> with PdbTestInput(['step', 12627db96d56Sopenharmony_ci ... 'step', 12637db96d56Sopenharmony_ci ... 'next', 12647db96d56Sopenharmony_ci ... 'continue']): 12657db96d56Sopenharmony_ci ... test_function() 12667db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_coroutine[2]>(3)test_main() 12677db96d56Sopenharmony_ci -> await test_coro() 12687db96d56Sopenharmony_ci (Pdb) step 12697db96d56Sopenharmony_ci --Call-- 12707db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_coroutine[1]>(1)test_coro() 12717db96d56Sopenharmony_ci -> async def test_coro(): 12727db96d56Sopenharmony_ci (Pdb) step 12737db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_coroutine[1]>(2)test_coro() 12747db96d56Sopenharmony_ci -> await asyncio.sleep(0) 12757db96d56Sopenharmony_ci (Pdb) next 12767db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_return_command_for_coroutine[1]>(3)test_coro() 12777db96d56Sopenharmony_ci -> await asyncio.sleep(0) 12787db96d56Sopenharmony_ci (Pdb) continue 12797db96d56Sopenharmony_ci finished 12807db96d56Sopenharmony_ci """ 12817db96d56Sopenharmony_ci 12827db96d56Sopenharmony_cidef test_pdb_until_command_for_generator(): 12837db96d56Sopenharmony_ci """Testing no unwindng stack on yield for generators 12847db96d56Sopenharmony_ci for "until" command if target breakpoint is not reached 12857db96d56Sopenharmony_ci 12867db96d56Sopenharmony_ci >>> def test_gen(): 12877db96d56Sopenharmony_ci ... yield 0 12887db96d56Sopenharmony_ci ... yield 1 12897db96d56Sopenharmony_ci ... yield 2 12907db96d56Sopenharmony_ci 12917db96d56Sopenharmony_ci >>> def test_function(): 12927db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 12937db96d56Sopenharmony_ci ... for i in test_gen(): 12947db96d56Sopenharmony_ci ... print(i) 12957db96d56Sopenharmony_ci ... print("finished") 12967db96d56Sopenharmony_ci 12977db96d56Sopenharmony_ci >>> with PdbTestInput(['step', 12987db96d56Sopenharmony_ci ... 'until 4', 12997db96d56Sopenharmony_ci ... 'step', 13007db96d56Sopenharmony_ci ... 'step', 13017db96d56Sopenharmony_ci ... 'continue']): 13027db96d56Sopenharmony_ci ... test_function() 13037db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_until_command_for_generator[1]>(3)test_function() 13047db96d56Sopenharmony_ci -> for i in test_gen(): 13057db96d56Sopenharmony_ci (Pdb) step 13067db96d56Sopenharmony_ci --Call-- 13077db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_until_command_for_generator[0]>(1)test_gen() 13087db96d56Sopenharmony_ci -> def test_gen(): 13097db96d56Sopenharmony_ci (Pdb) until 4 13107db96d56Sopenharmony_ci 0 13117db96d56Sopenharmony_ci 1 13127db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_until_command_for_generator[0]>(4)test_gen() 13137db96d56Sopenharmony_ci -> yield 2 13147db96d56Sopenharmony_ci (Pdb) step 13157db96d56Sopenharmony_ci --Return-- 13167db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_until_command_for_generator[0]>(4)test_gen()->2 13177db96d56Sopenharmony_ci -> yield 2 13187db96d56Sopenharmony_ci (Pdb) step 13197db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_until_command_for_generator[1]>(4)test_function() 13207db96d56Sopenharmony_ci -> print(i) 13217db96d56Sopenharmony_ci (Pdb) continue 13227db96d56Sopenharmony_ci 2 13237db96d56Sopenharmony_ci finished 13247db96d56Sopenharmony_ci """ 13257db96d56Sopenharmony_ci 13267db96d56Sopenharmony_cidef test_pdb_until_command_for_coroutine(): 13277db96d56Sopenharmony_ci """Testing no unwindng stack for coroutines 13287db96d56Sopenharmony_ci for "until" command if target breakpoint is not reached 13297db96d56Sopenharmony_ci 13307db96d56Sopenharmony_ci >>> import asyncio 13317db96d56Sopenharmony_ci 13327db96d56Sopenharmony_ci >>> async def test_coro(): 13337db96d56Sopenharmony_ci ... print(0) 13347db96d56Sopenharmony_ci ... await asyncio.sleep(0) 13357db96d56Sopenharmony_ci ... print(1) 13367db96d56Sopenharmony_ci ... await asyncio.sleep(0) 13377db96d56Sopenharmony_ci ... print(2) 13387db96d56Sopenharmony_ci ... await asyncio.sleep(0) 13397db96d56Sopenharmony_ci ... print(3) 13407db96d56Sopenharmony_ci 13417db96d56Sopenharmony_ci >>> async def test_main(): 13427db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 13437db96d56Sopenharmony_ci ... await test_coro() 13447db96d56Sopenharmony_ci 13457db96d56Sopenharmony_ci >>> def test_function(): 13467db96d56Sopenharmony_ci ... loop = asyncio.new_event_loop() 13477db96d56Sopenharmony_ci ... loop.run_until_complete(test_main()) 13487db96d56Sopenharmony_ci ... loop.close() 13497db96d56Sopenharmony_ci ... asyncio.set_event_loop_policy(None) 13507db96d56Sopenharmony_ci ... print("finished") 13517db96d56Sopenharmony_ci 13527db96d56Sopenharmony_ci >>> with PdbTestInput(['step', 13537db96d56Sopenharmony_ci ... 'until 8', 13547db96d56Sopenharmony_ci ... 'continue']): 13557db96d56Sopenharmony_ci ... test_function() 13567db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_until_command_for_coroutine[2]>(3)test_main() 13577db96d56Sopenharmony_ci -> await test_coro() 13587db96d56Sopenharmony_ci (Pdb) step 13597db96d56Sopenharmony_ci --Call-- 13607db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_until_command_for_coroutine[1]>(1)test_coro() 13617db96d56Sopenharmony_ci -> async def test_coro(): 13627db96d56Sopenharmony_ci (Pdb) until 8 13637db96d56Sopenharmony_ci 0 13647db96d56Sopenharmony_ci 1 13657db96d56Sopenharmony_ci 2 13667db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_until_command_for_coroutine[1]>(8)test_coro() 13677db96d56Sopenharmony_ci -> print(3) 13687db96d56Sopenharmony_ci (Pdb) continue 13697db96d56Sopenharmony_ci 3 13707db96d56Sopenharmony_ci finished 13717db96d56Sopenharmony_ci """ 13727db96d56Sopenharmony_ci 13737db96d56Sopenharmony_cidef test_pdb_next_command_in_generator_for_loop(): 13747db96d56Sopenharmony_ci """The next command on returning from a generator controlled by a for loop. 13757db96d56Sopenharmony_ci 13767db96d56Sopenharmony_ci >>> def test_gen(): 13777db96d56Sopenharmony_ci ... yield 0 13787db96d56Sopenharmony_ci ... return 1 13797db96d56Sopenharmony_ci 13807db96d56Sopenharmony_ci >>> def test_function(): 13817db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 13827db96d56Sopenharmony_ci ... for i in test_gen(): 13837db96d56Sopenharmony_ci ... print('value', i) 13847db96d56Sopenharmony_ci ... x = 123 13857db96d56Sopenharmony_ci 13867db96d56Sopenharmony_ci >>> reset_Breakpoint() 13877db96d56Sopenharmony_ci >>> with PdbTestInput(['break test_gen', 13887db96d56Sopenharmony_ci ... 'continue', 13897db96d56Sopenharmony_ci ... 'next', 13907db96d56Sopenharmony_ci ... 'next', 13917db96d56Sopenharmony_ci ... 'next', 13927db96d56Sopenharmony_ci ... 'continue']): 13937db96d56Sopenharmony_ci ... test_function() 13947db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(3)test_function() 13957db96d56Sopenharmony_ci -> for i in test_gen(): 13967db96d56Sopenharmony_ci (Pdb) break test_gen 13977db96d56Sopenharmony_ci Breakpoint 1 at <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>:1 13987db96d56Sopenharmony_ci (Pdb) continue 13997db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>(2)test_gen() 14007db96d56Sopenharmony_ci -> yield 0 14017db96d56Sopenharmony_ci (Pdb) next 14027db96d56Sopenharmony_ci value 0 14037db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>(3)test_gen() 14047db96d56Sopenharmony_ci -> return 1 14057db96d56Sopenharmony_ci (Pdb) next 14067db96d56Sopenharmony_ci Internal StopIteration: 1 14077db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(3)test_function() 14087db96d56Sopenharmony_ci -> for i in test_gen(): 14097db96d56Sopenharmony_ci (Pdb) next 14107db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(5)test_function() 14117db96d56Sopenharmony_ci -> x = 123 14127db96d56Sopenharmony_ci (Pdb) continue 14137db96d56Sopenharmony_ci """ 14147db96d56Sopenharmony_ci 14157db96d56Sopenharmony_cidef test_pdb_next_command_subiterator(): 14167db96d56Sopenharmony_ci """The next command in a generator with a subiterator. 14177db96d56Sopenharmony_ci 14187db96d56Sopenharmony_ci >>> def test_subgenerator(): 14197db96d56Sopenharmony_ci ... yield 0 14207db96d56Sopenharmony_ci ... return 1 14217db96d56Sopenharmony_ci 14227db96d56Sopenharmony_ci >>> def test_gen(): 14237db96d56Sopenharmony_ci ... x = yield from test_subgenerator() 14247db96d56Sopenharmony_ci ... return x 14257db96d56Sopenharmony_ci 14267db96d56Sopenharmony_ci >>> def test_function(): 14277db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 14287db96d56Sopenharmony_ci ... for i in test_gen(): 14297db96d56Sopenharmony_ci ... print('value', i) 14307db96d56Sopenharmony_ci ... x = 123 14317db96d56Sopenharmony_ci 14327db96d56Sopenharmony_ci >>> with PdbTestInput(['step', 14337db96d56Sopenharmony_ci ... 'step', 14347db96d56Sopenharmony_ci ... 'next', 14357db96d56Sopenharmony_ci ... 'next', 14367db96d56Sopenharmony_ci ... 'next', 14377db96d56Sopenharmony_ci ... 'continue']): 14387db96d56Sopenharmony_ci ... test_function() 14397db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_subiterator[2]>(3)test_function() 14407db96d56Sopenharmony_ci -> for i in test_gen(): 14417db96d56Sopenharmony_ci (Pdb) step 14427db96d56Sopenharmony_ci --Call-- 14437db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_subiterator[1]>(1)test_gen() 14447db96d56Sopenharmony_ci -> def test_gen(): 14457db96d56Sopenharmony_ci (Pdb) step 14467db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_subiterator[1]>(2)test_gen() 14477db96d56Sopenharmony_ci -> x = yield from test_subgenerator() 14487db96d56Sopenharmony_ci (Pdb) next 14497db96d56Sopenharmony_ci value 0 14507db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_subiterator[1]>(3)test_gen() 14517db96d56Sopenharmony_ci -> return x 14527db96d56Sopenharmony_ci (Pdb) next 14537db96d56Sopenharmony_ci Internal StopIteration: 1 14547db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_subiterator[2]>(3)test_function() 14557db96d56Sopenharmony_ci -> for i in test_gen(): 14567db96d56Sopenharmony_ci (Pdb) next 14577db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_next_command_subiterator[2]>(5)test_function() 14587db96d56Sopenharmony_ci -> x = 123 14597db96d56Sopenharmony_ci (Pdb) continue 14607db96d56Sopenharmony_ci """ 14617db96d56Sopenharmony_ci 14627db96d56Sopenharmony_cidef test_pdb_issue_20766(): 14637db96d56Sopenharmony_ci """Test for reference leaks when the SIGINT handler is set. 14647db96d56Sopenharmony_ci 14657db96d56Sopenharmony_ci >>> def test_function(): 14667db96d56Sopenharmony_ci ... i = 1 14677db96d56Sopenharmony_ci ... while i <= 2: 14687db96d56Sopenharmony_ci ... sess = pdb.Pdb() 14697db96d56Sopenharmony_ci ... sess.set_trace(sys._getframe()) 14707db96d56Sopenharmony_ci ... print('pdb %d: %s' % (i, sess._previous_sigint_handler)) 14717db96d56Sopenharmony_ci ... i += 1 14727db96d56Sopenharmony_ci 14737db96d56Sopenharmony_ci >>> reset_Breakpoint() 14747db96d56Sopenharmony_ci >>> with PdbTestInput(['continue', 14757db96d56Sopenharmony_ci ... 'continue']): 14767db96d56Sopenharmony_ci ... test_function() 14777db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function() 14787db96d56Sopenharmony_ci -> print('pdb %d: %s' % (i, sess._previous_sigint_handler)) 14797db96d56Sopenharmony_ci (Pdb) continue 14807db96d56Sopenharmony_ci pdb 1: <built-in function default_int_handler> 14817db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function() 14827db96d56Sopenharmony_ci -> print('pdb %d: %s' % (i, sess._previous_sigint_handler)) 14837db96d56Sopenharmony_ci (Pdb) continue 14847db96d56Sopenharmony_ci pdb 2: <built-in function default_int_handler> 14857db96d56Sopenharmony_ci """ 14867db96d56Sopenharmony_ci 14877db96d56Sopenharmony_cidef test_pdb_issue_43318(): 14887db96d56Sopenharmony_ci """echo breakpoints cleared with filename:lineno 14897db96d56Sopenharmony_ci 14907db96d56Sopenharmony_ci >>> def test_function(): 14917db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 14927db96d56Sopenharmony_ci ... print(1) 14937db96d56Sopenharmony_ci ... print(2) 14947db96d56Sopenharmony_ci ... print(3) 14957db96d56Sopenharmony_ci ... print(4) 14967db96d56Sopenharmony_ci >>> reset_Breakpoint() 14977db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 14987db96d56Sopenharmony_ci ... 'break 3', 14997db96d56Sopenharmony_ci ... 'clear <doctest test.test_pdb.test_pdb_issue_43318[0]>:3', 15007db96d56Sopenharmony_ci ... 'continue' 15017db96d56Sopenharmony_ci ... ]): 15027db96d56Sopenharmony_ci ... test_function() 15037db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_43318[0]>(3)test_function() 15047db96d56Sopenharmony_ci -> print(1) 15057db96d56Sopenharmony_ci (Pdb) break 3 15067db96d56Sopenharmony_ci Breakpoint 1 at <doctest test.test_pdb.test_pdb_issue_43318[0]>:3 15077db96d56Sopenharmony_ci (Pdb) clear <doctest test.test_pdb.test_pdb_issue_43318[0]>:3 15087db96d56Sopenharmony_ci Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_issue_43318[0]>:3 15097db96d56Sopenharmony_ci (Pdb) continue 15107db96d56Sopenharmony_ci 1 15117db96d56Sopenharmony_ci 2 15127db96d56Sopenharmony_ci 3 15137db96d56Sopenharmony_ci 4 15147db96d56Sopenharmony_ci """ 15157db96d56Sopenharmony_ci 15167db96d56Sopenharmony_cidef test_pdb_issue_gh_91742(): 15177db96d56Sopenharmony_ci """See GH-91742 15187db96d56Sopenharmony_ci 15197db96d56Sopenharmony_ci >>> def test_function(): 15207db96d56Sopenharmony_ci ... __author__ = "pi" 15217db96d56Sopenharmony_ci ... __version__ = "3.14" 15227db96d56Sopenharmony_ci ... 15237db96d56Sopenharmony_ci ... def about(): 15247db96d56Sopenharmony_ci ... '''About''' 15257db96d56Sopenharmony_ci ... print(f"Author: {__author__!r}", 15267db96d56Sopenharmony_ci ... f"Version: {__version__!r}", 15277db96d56Sopenharmony_ci ... sep=" ") 15287db96d56Sopenharmony_ci ... 15297db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 15307db96d56Sopenharmony_ci ... about() 15317db96d56Sopenharmony_ci 15327db96d56Sopenharmony_ci 15337db96d56Sopenharmony_ci >>> reset_Breakpoint() 15347db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 15357db96d56Sopenharmony_ci ... 'step', 15367db96d56Sopenharmony_ci ... 'next', 15377db96d56Sopenharmony_ci ... 'next', 15387db96d56Sopenharmony_ci ... 'jump 5', 15397db96d56Sopenharmony_ci ... 'continue' 15407db96d56Sopenharmony_ci ... ]): 15417db96d56Sopenharmony_ci ... test_function() 15427db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(12)test_function() 15437db96d56Sopenharmony_ci -> about() 15447db96d56Sopenharmony_ci (Pdb) step 15457db96d56Sopenharmony_ci --Call-- 15467db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(5)about() 15477db96d56Sopenharmony_ci -> def about(): 15487db96d56Sopenharmony_ci (Pdb) next 15497db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(7)about() 15507db96d56Sopenharmony_ci -> print(f"Author: {__author__!r}", 15517db96d56Sopenharmony_ci (Pdb) next 15527db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(8)about() 15537db96d56Sopenharmony_ci -> f"Version: {__version__!r}", 15547db96d56Sopenharmony_ci (Pdb) jump 5 15557db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(5)about() 15567db96d56Sopenharmony_ci -> def about(): 15577db96d56Sopenharmony_ci (Pdb) continue 15587db96d56Sopenharmony_ci Author: 'pi' Version: '3.14' 15597db96d56Sopenharmony_ci """ 15607db96d56Sopenharmony_ci 15617db96d56Sopenharmony_cidef test_pdb_issue_gh_94215(): 15627db96d56Sopenharmony_ci """See GH-94215 15637db96d56Sopenharmony_ci 15647db96d56Sopenharmony_ci Check that frame_setlineno() does not leak references. 15657db96d56Sopenharmony_ci 15667db96d56Sopenharmony_ci >>> def test_function(): 15677db96d56Sopenharmony_ci ... def func(): 15687db96d56Sopenharmony_ci ... def inner(v): pass 15697db96d56Sopenharmony_ci ... inner( 15707db96d56Sopenharmony_ci ... 42 15717db96d56Sopenharmony_ci ... ) 15727db96d56Sopenharmony_ci ... 15737db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 15747db96d56Sopenharmony_ci ... func() 15757db96d56Sopenharmony_ci 15767db96d56Sopenharmony_ci >>> reset_Breakpoint() 15777db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 15787db96d56Sopenharmony_ci ... 'step', 15797db96d56Sopenharmony_ci ... 'next', 15807db96d56Sopenharmony_ci ... 'next', 15817db96d56Sopenharmony_ci ... 'jump 3', 15827db96d56Sopenharmony_ci ... 'next', 15837db96d56Sopenharmony_ci ... 'next', 15847db96d56Sopenharmony_ci ... 'jump 3', 15857db96d56Sopenharmony_ci ... 'next', 15867db96d56Sopenharmony_ci ... 'next', 15877db96d56Sopenharmony_ci ... 'jump 3', 15887db96d56Sopenharmony_ci ... 'continue' 15897db96d56Sopenharmony_ci ... ]): 15907db96d56Sopenharmony_ci ... test_function() 15917db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(9)test_function() 15927db96d56Sopenharmony_ci -> func() 15937db96d56Sopenharmony_ci (Pdb) step 15947db96d56Sopenharmony_ci --Call-- 15957db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(2)func() 15967db96d56Sopenharmony_ci -> def func(): 15977db96d56Sopenharmony_ci (Pdb) next 15987db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(3)func() 15997db96d56Sopenharmony_ci -> def inner(v): pass 16007db96d56Sopenharmony_ci (Pdb) next 16017db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(4)func() 16027db96d56Sopenharmony_ci -> inner( 16037db96d56Sopenharmony_ci (Pdb) jump 3 16047db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(3)func() 16057db96d56Sopenharmony_ci -> def inner(v): pass 16067db96d56Sopenharmony_ci (Pdb) next 16077db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(4)func() 16087db96d56Sopenharmony_ci -> inner( 16097db96d56Sopenharmony_ci (Pdb) next 16107db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(5)func() 16117db96d56Sopenharmony_ci -> 42 16127db96d56Sopenharmony_ci (Pdb) jump 3 16137db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(3)func() 16147db96d56Sopenharmony_ci -> def inner(v): pass 16157db96d56Sopenharmony_ci (Pdb) next 16167db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(4)func() 16177db96d56Sopenharmony_ci -> inner( 16187db96d56Sopenharmony_ci (Pdb) next 16197db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(5)func() 16207db96d56Sopenharmony_ci -> 42 16217db96d56Sopenharmony_ci (Pdb) jump 3 16227db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(3)func() 16237db96d56Sopenharmony_ci -> def inner(v): pass 16247db96d56Sopenharmony_ci (Pdb) continue 16257db96d56Sopenharmony_ci """ 16267db96d56Sopenharmony_ci 16277db96d56Sopenharmony_cidef test_pdb_issue_gh_101673(): 16287db96d56Sopenharmony_ci """See GH-101673 16297db96d56Sopenharmony_ci 16307db96d56Sopenharmony_ci Make sure ll won't revert local variable assignment 16317db96d56Sopenharmony_ci 16327db96d56Sopenharmony_ci >>> def test_function(): 16337db96d56Sopenharmony_ci ... a = 1 16347db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 16357db96d56Sopenharmony_ci 16367db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 16377db96d56Sopenharmony_ci ... '!a = 2', 16387db96d56Sopenharmony_ci ... 'll', 16397db96d56Sopenharmony_ci ... 'p a', 16407db96d56Sopenharmony_ci ... 'continue' 16417db96d56Sopenharmony_ci ... ]): 16427db96d56Sopenharmony_ci ... test_function() 16437db96d56Sopenharmony_ci --Return-- 16447db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_101673[0]>(3)test_function()->None 16457db96d56Sopenharmony_ci -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 16467db96d56Sopenharmony_ci (Pdb) !a = 2 16477db96d56Sopenharmony_ci (Pdb) ll 16487db96d56Sopenharmony_ci 1 def test_function(): 16497db96d56Sopenharmony_ci 2 a = 1 16507db96d56Sopenharmony_ci 3 -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 16517db96d56Sopenharmony_ci (Pdb) p a 16527db96d56Sopenharmony_ci 2 16537db96d56Sopenharmony_ci (Pdb) continue 16547db96d56Sopenharmony_ci """ 16557db96d56Sopenharmony_ci 16567db96d56Sopenharmony_cidef test_pdb_issue_gh_101517(): 16577db96d56Sopenharmony_ci """See GH-101517 16587db96d56Sopenharmony_ci 16597db96d56Sopenharmony_ci Make sure pdb doesn't crash when the exception is caught in a try/except* block 16607db96d56Sopenharmony_ci 16617db96d56Sopenharmony_ci >>> def test_function(): 16627db96d56Sopenharmony_ci ... try: 16637db96d56Sopenharmony_ci ... raise KeyError 16647db96d56Sopenharmony_ci ... except* Exception as e: 16657db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 16667db96d56Sopenharmony_ci 16677db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 16687db96d56Sopenharmony_ci ... 'continue' 16697db96d56Sopenharmony_ci ... ]): 16707db96d56Sopenharmony_ci ... test_function() 16717db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_101517[0]>(4)test_function() 16727db96d56Sopenharmony_ci -> except* Exception as e: 16737db96d56Sopenharmony_ci (Pdb) continue 16747db96d56Sopenharmony_ci """ 16757db96d56Sopenharmony_ci 16767db96d56Sopenharmony_cidef test_pdb_issue_gh_103225(): 16777db96d56Sopenharmony_ci """See GH-103225 16787db96d56Sopenharmony_ci 16797db96d56Sopenharmony_ci Make sure longlist uses 1-based line numbers in frames that correspond to a module 16807db96d56Sopenharmony_ci 16817db96d56Sopenharmony_ci >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 16827db96d56Sopenharmony_ci ... 'longlist', 16837db96d56Sopenharmony_ci ... 'continue' 16847db96d56Sopenharmony_ci ... ]): 16857db96d56Sopenharmony_ci ... a = 1 16867db96d56Sopenharmony_ci ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 16877db96d56Sopenharmony_ci ... b = 2 16887db96d56Sopenharmony_ci > <doctest test.test_pdb.test_pdb_issue_gh_103225[0]>(7)<module>() 16897db96d56Sopenharmony_ci -> b = 2 16907db96d56Sopenharmony_ci (Pdb) longlist 16917db96d56Sopenharmony_ci 1 with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE 16927db96d56Sopenharmony_ci 2 'longlist', 16937db96d56Sopenharmony_ci 3 'continue' 16947db96d56Sopenharmony_ci 4 ]): 16957db96d56Sopenharmony_ci 5 a = 1 16967db96d56Sopenharmony_ci 6 import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() 16977db96d56Sopenharmony_ci 7 -> b = 2 16987db96d56Sopenharmony_ci (Pdb) continue 16997db96d56Sopenharmony_ci """ 17007db96d56Sopenharmony_ci 17017db96d56Sopenharmony_ci 17027db96d56Sopenharmony_ci@support.requires_subprocess() 17037db96d56Sopenharmony_ciclass PdbTestCase(unittest.TestCase): 17047db96d56Sopenharmony_ci def tearDown(self): 17057db96d56Sopenharmony_ci os_helper.unlink(os_helper.TESTFN) 17067db96d56Sopenharmony_ci 17077db96d56Sopenharmony_ci @unittest.skipIf(sys.flags.safe_path, 17087db96d56Sopenharmony_ci 'PYTHONSAFEPATH changes default sys.path') 17097db96d56Sopenharmony_ci def _run_pdb(self, pdb_args, commands, expected_returncode=0): 17107db96d56Sopenharmony_ci self.addCleanup(os_helper.rmtree, '__pycache__') 17117db96d56Sopenharmony_ci cmd = [sys.executable, '-m', 'pdb'] + pdb_args 17127db96d56Sopenharmony_ci with subprocess.Popen( 17137db96d56Sopenharmony_ci cmd, 17147db96d56Sopenharmony_ci stdout=subprocess.PIPE, 17157db96d56Sopenharmony_ci stdin=subprocess.PIPE, 17167db96d56Sopenharmony_ci stderr=subprocess.STDOUT, 17177db96d56Sopenharmony_ci env = {**os.environ, 'PYTHONIOENCODING': 'utf-8'} 17187db96d56Sopenharmony_ci ) as proc: 17197db96d56Sopenharmony_ci stdout, stderr = proc.communicate(str.encode(commands)) 17207db96d56Sopenharmony_ci stdout = stdout and bytes.decode(stdout) 17217db96d56Sopenharmony_ci stderr = stderr and bytes.decode(stderr) 17227db96d56Sopenharmony_ci self.assertEqual( 17237db96d56Sopenharmony_ci proc.returncode, 17247db96d56Sopenharmony_ci expected_returncode, 17257db96d56Sopenharmony_ci f"Unexpected return code\nstdout: {stdout}\nstderr: {stderr}" 17267db96d56Sopenharmony_ci ) 17277db96d56Sopenharmony_ci return stdout, stderr 17287db96d56Sopenharmony_ci 17297db96d56Sopenharmony_ci def run_pdb_script(self, script, commands, expected_returncode=0): 17307db96d56Sopenharmony_ci """Run 'script' lines with pdb and the pdb 'commands'.""" 17317db96d56Sopenharmony_ci filename = 'main.py' 17327db96d56Sopenharmony_ci with open(filename, 'w') as f: 17337db96d56Sopenharmony_ci f.write(textwrap.dedent(script)) 17347db96d56Sopenharmony_ci self.addCleanup(os_helper.unlink, filename) 17357db96d56Sopenharmony_ci return self._run_pdb([filename], commands, expected_returncode) 17367db96d56Sopenharmony_ci 17377db96d56Sopenharmony_ci def run_pdb_module(self, script, commands): 17387db96d56Sopenharmony_ci """Runs the script code as part of a module""" 17397db96d56Sopenharmony_ci self.module_name = 't_main' 17407db96d56Sopenharmony_ci os_helper.rmtree(self.module_name) 17417db96d56Sopenharmony_ci main_file = self.module_name + '/__main__.py' 17427db96d56Sopenharmony_ci init_file = self.module_name + '/__init__.py' 17437db96d56Sopenharmony_ci os.mkdir(self.module_name) 17447db96d56Sopenharmony_ci with open(init_file, 'w') as f: 17457db96d56Sopenharmony_ci pass 17467db96d56Sopenharmony_ci with open(main_file, 'w') as f: 17477db96d56Sopenharmony_ci f.write(textwrap.dedent(script)) 17487db96d56Sopenharmony_ci self.addCleanup(os_helper.rmtree, self.module_name) 17497db96d56Sopenharmony_ci return self._run_pdb(['-m', self.module_name], commands) 17507db96d56Sopenharmony_ci 17517db96d56Sopenharmony_ci def _assert_find_function(self, file_content, func_name, expected): 17527db96d56Sopenharmony_ci with open(os_helper.TESTFN, 'wb') as f: 17537db96d56Sopenharmony_ci f.write(file_content) 17547db96d56Sopenharmony_ci 17557db96d56Sopenharmony_ci expected = None if not expected else ( 17567db96d56Sopenharmony_ci expected[0], os_helper.TESTFN, expected[1]) 17577db96d56Sopenharmony_ci self.assertEqual( 17587db96d56Sopenharmony_ci expected, pdb.find_function(func_name, os_helper.TESTFN)) 17597db96d56Sopenharmony_ci 17607db96d56Sopenharmony_ci def test_find_function_empty_file(self): 17617db96d56Sopenharmony_ci self._assert_find_function(b'', 'foo', None) 17627db96d56Sopenharmony_ci 17637db96d56Sopenharmony_ci def test_find_function_found(self): 17647db96d56Sopenharmony_ci self._assert_find_function( 17657db96d56Sopenharmony_ci """\ 17667db96d56Sopenharmony_cidef foo(): 17677db96d56Sopenharmony_ci pass 17687db96d56Sopenharmony_ci 17697db96d56Sopenharmony_cidef bœr(): 17707db96d56Sopenharmony_ci pass 17717db96d56Sopenharmony_ci 17727db96d56Sopenharmony_cidef quux(): 17737db96d56Sopenharmony_ci pass 17747db96d56Sopenharmony_ci""".encode(), 17757db96d56Sopenharmony_ci 'bœr', 17767db96d56Sopenharmony_ci ('bœr', 4), 17777db96d56Sopenharmony_ci ) 17787db96d56Sopenharmony_ci 17797db96d56Sopenharmony_ci def test_find_function_found_with_encoding_cookie(self): 17807db96d56Sopenharmony_ci self._assert_find_function( 17817db96d56Sopenharmony_ci """\ 17827db96d56Sopenharmony_ci# coding: iso-8859-15 17837db96d56Sopenharmony_cidef foo(): 17847db96d56Sopenharmony_ci pass 17857db96d56Sopenharmony_ci 17867db96d56Sopenharmony_cidef bœr(): 17877db96d56Sopenharmony_ci pass 17887db96d56Sopenharmony_ci 17897db96d56Sopenharmony_cidef quux(): 17907db96d56Sopenharmony_ci pass 17917db96d56Sopenharmony_ci""".encode('iso-8859-15'), 17927db96d56Sopenharmony_ci 'bœr', 17937db96d56Sopenharmony_ci ('bœr', 5), 17947db96d56Sopenharmony_ci ) 17957db96d56Sopenharmony_ci 17967db96d56Sopenharmony_ci def test_find_function_found_with_bom(self): 17977db96d56Sopenharmony_ci self._assert_find_function( 17987db96d56Sopenharmony_ci codecs.BOM_UTF8 + """\ 17997db96d56Sopenharmony_cidef bœr(): 18007db96d56Sopenharmony_ci pass 18017db96d56Sopenharmony_ci""".encode(), 18027db96d56Sopenharmony_ci 'bœr', 18037db96d56Sopenharmony_ci ('bœr', 1), 18047db96d56Sopenharmony_ci ) 18057db96d56Sopenharmony_ci 18067db96d56Sopenharmony_ci def test_issue7964(self): 18077db96d56Sopenharmony_ci # open the file as binary so we can force \r\n newline 18087db96d56Sopenharmony_ci with open(os_helper.TESTFN, 'wb') as f: 18097db96d56Sopenharmony_ci f.write(b'print("testing my pdb")\r\n') 18107db96d56Sopenharmony_ci cmd = [sys.executable, '-m', 'pdb', os_helper.TESTFN] 18117db96d56Sopenharmony_ci proc = subprocess.Popen(cmd, 18127db96d56Sopenharmony_ci stdout=subprocess.PIPE, 18137db96d56Sopenharmony_ci stdin=subprocess.PIPE, 18147db96d56Sopenharmony_ci stderr=subprocess.STDOUT, 18157db96d56Sopenharmony_ci ) 18167db96d56Sopenharmony_ci self.addCleanup(proc.stdout.close) 18177db96d56Sopenharmony_ci stdout, stderr = proc.communicate(b'quit\n') 18187db96d56Sopenharmony_ci self.assertNotIn(b'SyntaxError', stdout, 18197db96d56Sopenharmony_ci "Got a syntax error running test script under PDB") 18207db96d56Sopenharmony_ci 18217db96d56Sopenharmony_ci def test_issue46434(self): 18227db96d56Sopenharmony_ci # Temporarily patch in an extra help command which doesn't have a 18237db96d56Sopenharmony_ci # docstring to emulate what happens in an embeddable distribution 18247db96d56Sopenharmony_ci script = """ 18257db96d56Sopenharmony_ci def do_testcmdwithnodocs(self, arg): 18267db96d56Sopenharmony_ci pass 18277db96d56Sopenharmony_ci 18287db96d56Sopenharmony_ci import pdb 18297db96d56Sopenharmony_ci pdb.Pdb.do_testcmdwithnodocs = do_testcmdwithnodocs 18307db96d56Sopenharmony_ci """ 18317db96d56Sopenharmony_ci commands = """ 18327db96d56Sopenharmony_ci continue 18337db96d56Sopenharmony_ci help testcmdwithnodocs 18347db96d56Sopenharmony_ci """ 18357db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_script(script, commands) 18367db96d56Sopenharmony_ci output = (stdout or '') + (stderr or '') 18377db96d56Sopenharmony_ci self.assertNotIn('AttributeError', output, 18387db96d56Sopenharmony_ci 'Calling help on a command with no docs should be handled gracefully') 18397db96d56Sopenharmony_ci self.assertIn("*** No help for 'testcmdwithnodocs'; __doc__ string missing", output, 18407db96d56Sopenharmony_ci 'Calling help on a command with no docs should print an error') 18417db96d56Sopenharmony_ci 18427db96d56Sopenharmony_ci def test_issue13183(self): 18437db96d56Sopenharmony_ci script = """ 18447db96d56Sopenharmony_ci from bar import bar 18457db96d56Sopenharmony_ci 18467db96d56Sopenharmony_ci def foo(): 18477db96d56Sopenharmony_ci bar() 18487db96d56Sopenharmony_ci 18497db96d56Sopenharmony_ci def nope(): 18507db96d56Sopenharmony_ci pass 18517db96d56Sopenharmony_ci 18527db96d56Sopenharmony_ci def foobar(): 18537db96d56Sopenharmony_ci foo() 18547db96d56Sopenharmony_ci nope() 18557db96d56Sopenharmony_ci 18567db96d56Sopenharmony_ci foobar() 18577db96d56Sopenharmony_ci """ 18587db96d56Sopenharmony_ci commands = """ 18597db96d56Sopenharmony_ci from bar import bar 18607db96d56Sopenharmony_ci break bar 18617db96d56Sopenharmony_ci continue 18627db96d56Sopenharmony_ci step 18637db96d56Sopenharmony_ci step 18647db96d56Sopenharmony_ci quit 18657db96d56Sopenharmony_ci """ 18667db96d56Sopenharmony_ci bar = """ 18677db96d56Sopenharmony_ci def bar(): 18687db96d56Sopenharmony_ci pass 18697db96d56Sopenharmony_ci """ 18707db96d56Sopenharmony_ci with open('bar.py', 'w') as f: 18717db96d56Sopenharmony_ci f.write(textwrap.dedent(bar)) 18727db96d56Sopenharmony_ci self.addCleanup(os_helper.unlink, 'bar.py') 18737db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_script(script, commands) 18747db96d56Sopenharmony_ci self.assertTrue( 18757db96d56Sopenharmony_ci any('main.py(5)foo()->None' in l for l in stdout.splitlines()), 18767db96d56Sopenharmony_ci 'Fail to step into the caller after a return') 18777db96d56Sopenharmony_ci 18787db96d56Sopenharmony_ci def test_issue13120(self): 18797db96d56Sopenharmony_ci # Invoking "continue" on a non-main thread triggered an exception 18807db96d56Sopenharmony_ci # inside signal.signal. 18817db96d56Sopenharmony_ci 18827db96d56Sopenharmony_ci with open(os_helper.TESTFN, 'wb') as f: 18837db96d56Sopenharmony_ci f.write(textwrap.dedent(""" 18847db96d56Sopenharmony_ci import threading 18857db96d56Sopenharmony_ci import pdb 18867db96d56Sopenharmony_ci 18877db96d56Sopenharmony_ci def start_pdb(): 18887db96d56Sopenharmony_ci pdb.Pdb(readrc=False).set_trace() 18897db96d56Sopenharmony_ci x = 1 18907db96d56Sopenharmony_ci y = 1 18917db96d56Sopenharmony_ci 18927db96d56Sopenharmony_ci t = threading.Thread(target=start_pdb) 18937db96d56Sopenharmony_ci t.start()""").encode('ascii')) 18947db96d56Sopenharmony_ci cmd = [sys.executable, '-u', os_helper.TESTFN] 18957db96d56Sopenharmony_ci proc = subprocess.Popen(cmd, 18967db96d56Sopenharmony_ci stdout=subprocess.PIPE, 18977db96d56Sopenharmony_ci stdin=subprocess.PIPE, 18987db96d56Sopenharmony_ci stderr=subprocess.STDOUT, 18997db96d56Sopenharmony_ci env={**os.environ, 'PYTHONIOENCODING': 'utf-8'} 19007db96d56Sopenharmony_ci ) 19017db96d56Sopenharmony_ci self.addCleanup(proc.stdout.close) 19027db96d56Sopenharmony_ci stdout, stderr = proc.communicate(b'cont\n') 19037db96d56Sopenharmony_ci self.assertNotIn(b'Error', stdout, 19047db96d56Sopenharmony_ci "Got an error running test script under PDB") 19057db96d56Sopenharmony_ci 19067db96d56Sopenharmony_ci def test_issue36250(self): 19077db96d56Sopenharmony_ci 19087db96d56Sopenharmony_ci with open(os_helper.TESTFN, 'wb') as f: 19097db96d56Sopenharmony_ci f.write(textwrap.dedent(""" 19107db96d56Sopenharmony_ci import threading 19117db96d56Sopenharmony_ci import pdb 19127db96d56Sopenharmony_ci 19137db96d56Sopenharmony_ci evt = threading.Event() 19147db96d56Sopenharmony_ci 19157db96d56Sopenharmony_ci def start_pdb(): 19167db96d56Sopenharmony_ci evt.wait() 19177db96d56Sopenharmony_ci pdb.Pdb(readrc=False).set_trace() 19187db96d56Sopenharmony_ci 19197db96d56Sopenharmony_ci t = threading.Thread(target=start_pdb) 19207db96d56Sopenharmony_ci t.start() 19217db96d56Sopenharmony_ci pdb.Pdb(readrc=False).set_trace() 19227db96d56Sopenharmony_ci evt.set() 19237db96d56Sopenharmony_ci t.join()""").encode('ascii')) 19247db96d56Sopenharmony_ci cmd = [sys.executable, '-u', os_helper.TESTFN] 19257db96d56Sopenharmony_ci proc = subprocess.Popen(cmd, 19267db96d56Sopenharmony_ci stdout=subprocess.PIPE, 19277db96d56Sopenharmony_ci stdin=subprocess.PIPE, 19287db96d56Sopenharmony_ci stderr=subprocess.STDOUT, 19297db96d56Sopenharmony_ci env = {**os.environ, 'PYTHONIOENCODING': 'utf-8'} 19307db96d56Sopenharmony_ci ) 19317db96d56Sopenharmony_ci self.addCleanup(proc.stdout.close) 19327db96d56Sopenharmony_ci stdout, stderr = proc.communicate(b'cont\ncont\n') 19337db96d56Sopenharmony_ci self.assertNotIn(b'Error', stdout, 19347db96d56Sopenharmony_ci "Got an error running test script under PDB") 19357db96d56Sopenharmony_ci 19367db96d56Sopenharmony_ci def test_issue16180(self): 19377db96d56Sopenharmony_ci # A syntax error in the debuggee. 19387db96d56Sopenharmony_ci script = "def f: pass\n" 19397db96d56Sopenharmony_ci commands = '' 19407db96d56Sopenharmony_ci expected = "SyntaxError:" 19417db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_script( 19427db96d56Sopenharmony_ci script, commands, expected_returncode=1 19437db96d56Sopenharmony_ci ) 19447db96d56Sopenharmony_ci self.assertIn(expected, stdout, 19457db96d56Sopenharmony_ci '\n\nExpected:\n{}\nGot:\n{}\n' 19467db96d56Sopenharmony_ci 'Fail to handle a syntax error in the debuggee.' 19477db96d56Sopenharmony_ci .format(expected, stdout)) 19487db96d56Sopenharmony_ci 19497db96d56Sopenharmony_ci def test_issue26053(self): 19507db96d56Sopenharmony_ci # run command of pdb prompt echoes the correct args 19517db96d56Sopenharmony_ci script = "print('hello')" 19527db96d56Sopenharmony_ci commands = """ 19537db96d56Sopenharmony_ci continue 19547db96d56Sopenharmony_ci run a b c 19557db96d56Sopenharmony_ci run d e f 19567db96d56Sopenharmony_ci quit 19577db96d56Sopenharmony_ci """ 19587db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_script(script, commands) 19597db96d56Sopenharmony_ci res = '\n'.join([x.strip() for x in stdout.splitlines()]) 19607db96d56Sopenharmony_ci self.assertRegex(res, "Restarting .* with arguments:\na b c") 19617db96d56Sopenharmony_ci self.assertRegex(res, "Restarting .* with arguments:\nd e f") 19627db96d56Sopenharmony_ci 19637db96d56Sopenharmony_ci def test_readrc_kwarg(self): 19647db96d56Sopenharmony_ci script = textwrap.dedent(""" 19657db96d56Sopenharmony_ci import pdb; pdb.Pdb(readrc=False).set_trace() 19667db96d56Sopenharmony_ci 19677db96d56Sopenharmony_ci print('hello') 19687db96d56Sopenharmony_ci """) 19697db96d56Sopenharmony_ci 19707db96d56Sopenharmony_ci save_home = os.environ.pop('HOME', None) 19717db96d56Sopenharmony_ci try: 19727db96d56Sopenharmony_ci with os_helper.temp_cwd(): 19737db96d56Sopenharmony_ci with open('.pdbrc', 'w') as f: 19747db96d56Sopenharmony_ci f.write("invalid\n") 19757db96d56Sopenharmony_ci 19767db96d56Sopenharmony_ci with open('main.py', 'w') as f: 19777db96d56Sopenharmony_ci f.write(script) 19787db96d56Sopenharmony_ci 19797db96d56Sopenharmony_ci cmd = [sys.executable, 'main.py'] 19807db96d56Sopenharmony_ci proc = subprocess.Popen( 19817db96d56Sopenharmony_ci cmd, 19827db96d56Sopenharmony_ci stdout=subprocess.PIPE, 19837db96d56Sopenharmony_ci stdin=subprocess.PIPE, 19847db96d56Sopenharmony_ci stderr=subprocess.PIPE, 19857db96d56Sopenharmony_ci ) 19867db96d56Sopenharmony_ci with proc: 19877db96d56Sopenharmony_ci stdout, stderr = proc.communicate(b'q\n') 19887db96d56Sopenharmony_ci self.assertNotIn(b"NameError: name 'invalid' is not defined", 19897db96d56Sopenharmony_ci stdout) 19907db96d56Sopenharmony_ci 19917db96d56Sopenharmony_ci finally: 19927db96d56Sopenharmony_ci if save_home is not None: 19937db96d56Sopenharmony_ci os.environ['HOME'] = save_home 19947db96d56Sopenharmony_ci 19957db96d56Sopenharmony_ci def test_readrc_homedir(self): 19967db96d56Sopenharmony_ci save_home = os.environ.pop("HOME", None) 19977db96d56Sopenharmony_ci with os_helper.temp_dir() as temp_dir, patch("os.path.expanduser"): 19987db96d56Sopenharmony_ci rc_path = os.path.join(temp_dir, ".pdbrc") 19997db96d56Sopenharmony_ci os.path.expanduser.return_value = rc_path 20007db96d56Sopenharmony_ci try: 20017db96d56Sopenharmony_ci with open(rc_path, "w") as f: 20027db96d56Sopenharmony_ci f.write("invalid") 20037db96d56Sopenharmony_ci self.assertEqual(pdb.Pdb().rcLines[0], "invalid") 20047db96d56Sopenharmony_ci finally: 20057db96d56Sopenharmony_ci if save_home is not None: 20067db96d56Sopenharmony_ci os.environ["HOME"] = save_home 20077db96d56Sopenharmony_ci 20087db96d56Sopenharmony_ci def test_read_pdbrc_with_ascii_encoding(self): 20097db96d56Sopenharmony_ci script = textwrap.dedent(""" 20107db96d56Sopenharmony_ci import pdb; pdb.Pdb().set_trace() 20117db96d56Sopenharmony_ci print('hello') 20127db96d56Sopenharmony_ci """) 20137db96d56Sopenharmony_ci save_home = os.environ.pop('HOME', None) 20147db96d56Sopenharmony_ci try: 20157db96d56Sopenharmony_ci with os_helper.temp_cwd(): 20167db96d56Sopenharmony_ci with open('.pdbrc', 'w', encoding='utf-8') as f: 20177db96d56Sopenharmony_ci f.write("Fran\u00E7ais") 20187db96d56Sopenharmony_ci 20197db96d56Sopenharmony_ci with open('main.py', 'w', encoding='utf-8') as f: 20207db96d56Sopenharmony_ci f.write(script) 20217db96d56Sopenharmony_ci 20227db96d56Sopenharmony_ci cmd = [sys.executable, 'main.py'] 20237db96d56Sopenharmony_ci env = {'PYTHONIOENCODING': 'ascii'} 20247db96d56Sopenharmony_ci if sys.platform == 'win32': 20257db96d56Sopenharmony_ci env['PYTHONLEGACYWINDOWSSTDIO'] = 'non-empty-string' 20267db96d56Sopenharmony_ci proc = subprocess.Popen( 20277db96d56Sopenharmony_ci cmd, 20287db96d56Sopenharmony_ci stdout=subprocess.PIPE, 20297db96d56Sopenharmony_ci stdin=subprocess.PIPE, 20307db96d56Sopenharmony_ci stderr=subprocess.PIPE, 20317db96d56Sopenharmony_ci env={**os.environ, **env} 20327db96d56Sopenharmony_ci ) 20337db96d56Sopenharmony_ci with proc: 20347db96d56Sopenharmony_ci stdout, stderr = proc.communicate(b'c\n') 20357db96d56Sopenharmony_ci self.assertIn(b"UnicodeEncodeError: \'ascii\' codec can\'t encode character " 20367db96d56Sopenharmony_ci b"\'\\xe7\' in position 21: ordinal not in range(128)", stderr) 20377db96d56Sopenharmony_ci 20387db96d56Sopenharmony_ci finally: 20397db96d56Sopenharmony_ci if save_home is not None: 20407db96d56Sopenharmony_ci os.environ['HOME'] = save_home 20417db96d56Sopenharmony_ci 20427db96d56Sopenharmony_ci def test_header(self): 20437db96d56Sopenharmony_ci stdout = StringIO() 20447db96d56Sopenharmony_ci header = 'Nobody expects... blah, blah, blah' 20457db96d56Sopenharmony_ci with ExitStack() as resources: 20467db96d56Sopenharmony_ci resources.enter_context(patch('sys.stdout', stdout)) 20477db96d56Sopenharmony_ci resources.enter_context(patch.object(pdb.Pdb, 'set_trace')) 20487db96d56Sopenharmony_ci pdb.set_trace(header=header) 20497db96d56Sopenharmony_ci self.assertEqual(stdout.getvalue(), header + '\n') 20507db96d56Sopenharmony_ci 20517db96d56Sopenharmony_ci def test_run_module(self): 20527db96d56Sopenharmony_ci script = """print("SUCCESS")""" 20537db96d56Sopenharmony_ci commands = """ 20547db96d56Sopenharmony_ci continue 20557db96d56Sopenharmony_ci quit 20567db96d56Sopenharmony_ci """ 20577db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_module(script, commands) 20587db96d56Sopenharmony_ci self.assertTrue(any("SUCCESS" in l for l in stdout.splitlines()), stdout) 20597db96d56Sopenharmony_ci 20607db96d56Sopenharmony_ci def test_module_is_run_as_main(self): 20617db96d56Sopenharmony_ci script = """ 20627db96d56Sopenharmony_ci if __name__ == '__main__': 20637db96d56Sopenharmony_ci print("SUCCESS") 20647db96d56Sopenharmony_ci """ 20657db96d56Sopenharmony_ci commands = """ 20667db96d56Sopenharmony_ci continue 20677db96d56Sopenharmony_ci quit 20687db96d56Sopenharmony_ci """ 20697db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_module(script, commands) 20707db96d56Sopenharmony_ci self.assertTrue(any("SUCCESS" in l for l in stdout.splitlines()), stdout) 20717db96d56Sopenharmony_ci 20727db96d56Sopenharmony_ci def test_breakpoint(self): 20737db96d56Sopenharmony_ci script = """ 20747db96d56Sopenharmony_ci if __name__ == '__main__': 20757db96d56Sopenharmony_ci pass 20767db96d56Sopenharmony_ci print("SUCCESS") 20777db96d56Sopenharmony_ci pass 20787db96d56Sopenharmony_ci """ 20797db96d56Sopenharmony_ci commands = """ 20807db96d56Sopenharmony_ci b 3 20817db96d56Sopenharmony_ci quit 20827db96d56Sopenharmony_ci """ 20837db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_module(script, commands) 20847db96d56Sopenharmony_ci self.assertTrue(any("Breakpoint 1 at" in l for l in stdout.splitlines()), stdout) 20857db96d56Sopenharmony_ci self.assertTrue(all("SUCCESS" not in l for l in stdout.splitlines()), stdout) 20867db96d56Sopenharmony_ci 20877db96d56Sopenharmony_ci def test_run_pdb_with_pdb(self): 20887db96d56Sopenharmony_ci commands = """ 20897db96d56Sopenharmony_ci c 20907db96d56Sopenharmony_ci quit 20917db96d56Sopenharmony_ci """ 20927db96d56Sopenharmony_ci stdout, stderr = self._run_pdb(["-m", "pdb"], commands) 20937db96d56Sopenharmony_ci self.assertIn( 20947db96d56Sopenharmony_ci pdb._usage, 20957db96d56Sopenharmony_ci stdout.replace('\r', '') # remove \r for windows 20967db96d56Sopenharmony_ci ) 20977db96d56Sopenharmony_ci 20987db96d56Sopenharmony_ci def test_module_without_a_main(self): 20997db96d56Sopenharmony_ci module_name = 't_main' 21007db96d56Sopenharmony_ci os_helper.rmtree(module_name) 21017db96d56Sopenharmony_ci init_file = module_name + '/__init__.py' 21027db96d56Sopenharmony_ci os.mkdir(module_name) 21037db96d56Sopenharmony_ci with open(init_file, 'w'): 21047db96d56Sopenharmony_ci pass 21057db96d56Sopenharmony_ci self.addCleanup(os_helper.rmtree, module_name) 21067db96d56Sopenharmony_ci stdout, stderr = self._run_pdb( 21077db96d56Sopenharmony_ci ['-m', module_name], "", expected_returncode=1 21087db96d56Sopenharmony_ci ) 21097db96d56Sopenharmony_ci self.assertIn("ImportError: No module named t_main.__main__", 21107db96d56Sopenharmony_ci stdout.splitlines()) 21117db96d56Sopenharmony_ci 21127db96d56Sopenharmony_ci def test_package_without_a_main(self): 21137db96d56Sopenharmony_ci pkg_name = 't_pkg' 21147db96d56Sopenharmony_ci module_name = 't_main' 21157db96d56Sopenharmony_ci os_helper.rmtree(pkg_name) 21167db96d56Sopenharmony_ci modpath = pkg_name + '/' + module_name 21177db96d56Sopenharmony_ci os.makedirs(modpath) 21187db96d56Sopenharmony_ci with open(modpath + '/__init__.py', 'w'): 21197db96d56Sopenharmony_ci pass 21207db96d56Sopenharmony_ci self.addCleanup(os_helper.rmtree, pkg_name) 21217db96d56Sopenharmony_ci stdout, stderr = self._run_pdb( 21227db96d56Sopenharmony_ci ['-m', modpath.replace('/', '.')], "", expected_returncode=1 21237db96d56Sopenharmony_ci ) 21247db96d56Sopenharmony_ci self.assertIn( 21257db96d56Sopenharmony_ci "'t_pkg.t_main' is a package and cannot be directly executed", 21267db96d56Sopenharmony_ci stdout) 21277db96d56Sopenharmony_ci 21287db96d56Sopenharmony_ci def test_blocks_at_first_code_line(self): 21297db96d56Sopenharmony_ci script = """ 21307db96d56Sopenharmony_ci #This is a comment, on line 2 21317db96d56Sopenharmony_ci 21327db96d56Sopenharmony_ci print("SUCCESS") 21337db96d56Sopenharmony_ci """ 21347db96d56Sopenharmony_ci commands = """ 21357db96d56Sopenharmony_ci quit 21367db96d56Sopenharmony_ci """ 21377db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_module(script, commands) 21387db96d56Sopenharmony_ci self.assertTrue(any("__main__.py(4)<module>()" 21397db96d56Sopenharmony_ci in l for l in stdout.splitlines()), stdout) 21407db96d56Sopenharmony_ci 21417db96d56Sopenharmony_ci def test_relative_imports(self): 21427db96d56Sopenharmony_ci self.module_name = 't_main' 21437db96d56Sopenharmony_ci os_helper.rmtree(self.module_name) 21447db96d56Sopenharmony_ci main_file = self.module_name + '/__main__.py' 21457db96d56Sopenharmony_ci init_file = self.module_name + '/__init__.py' 21467db96d56Sopenharmony_ci module_file = self.module_name + '/module.py' 21477db96d56Sopenharmony_ci self.addCleanup(os_helper.rmtree, self.module_name) 21487db96d56Sopenharmony_ci os.mkdir(self.module_name) 21497db96d56Sopenharmony_ci with open(init_file, 'w') as f: 21507db96d56Sopenharmony_ci f.write(textwrap.dedent(""" 21517db96d56Sopenharmony_ci top_var = "VAR from top" 21527db96d56Sopenharmony_ci """)) 21537db96d56Sopenharmony_ci with open(main_file, 'w') as f: 21547db96d56Sopenharmony_ci f.write(textwrap.dedent(""" 21557db96d56Sopenharmony_ci from . import top_var 21567db96d56Sopenharmony_ci from .module import var 21577db96d56Sopenharmony_ci from . import module 21587db96d56Sopenharmony_ci pass # We'll stop here and print the vars 21597db96d56Sopenharmony_ci """)) 21607db96d56Sopenharmony_ci with open(module_file, 'w') as f: 21617db96d56Sopenharmony_ci f.write(textwrap.dedent(""" 21627db96d56Sopenharmony_ci var = "VAR from module" 21637db96d56Sopenharmony_ci var2 = "second var" 21647db96d56Sopenharmony_ci """)) 21657db96d56Sopenharmony_ci commands = """ 21667db96d56Sopenharmony_ci b 5 21677db96d56Sopenharmony_ci c 21687db96d56Sopenharmony_ci p top_var 21697db96d56Sopenharmony_ci p var 21707db96d56Sopenharmony_ci p module.var2 21717db96d56Sopenharmony_ci quit 21727db96d56Sopenharmony_ci """ 21737db96d56Sopenharmony_ci stdout, _ = self._run_pdb(['-m', self.module_name], commands) 21747db96d56Sopenharmony_ci self.assertTrue(any("VAR from module" in l for l in stdout.splitlines()), stdout) 21757db96d56Sopenharmony_ci self.assertTrue(any("VAR from top" in l for l in stdout.splitlines())) 21767db96d56Sopenharmony_ci self.assertTrue(any("second var" in l for l in stdout.splitlines())) 21777db96d56Sopenharmony_ci 21787db96d56Sopenharmony_ci def test_relative_imports_on_plain_module(self): 21797db96d56Sopenharmony_ci # Validates running a plain module. See bpo32691 21807db96d56Sopenharmony_ci self.module_name = 't_main' 21817db96d56Sopenharmony_ci os_helper.rmtree(self.module_name) 21827db96d56Sopenharmony_ci main_file = self.module_name + '/runme.py' 21837db96d56Sopenharmony_ci init_file = self.module_name + '/__init__.py' 21847db96d56Sopenharmony_ci module_file = self.module_name + '/module.py' 21857db96d56Sopenharmony_ci self.addCleanup(os_helper.rmtree, self.module_name) 21867db96d56Sopenharmony_ci os.mkdir(self.module_name) 21877db96d56Sopenharmony_ci with open(init_file, 'w') as f: 21887db96d56Sopenharmony_ci f.write(textwrap.dedent(""" 21897db96d56Sopenharmony_ci top_var = "VAR from top" 21907db96d56Sopenharmony_ci """)) 21917db96d56Sopenharmony_ci with open(main_file, 'w') as f: 21927db96d56Sopenharmony_ci f.write(textwrap.dedent(""" 21937db96d56Sopenharmony_ci from . import module 21947db96d56Sopenharmony_ci pass # We'll stop here and print the vars 21957db96d56Sopenharmony_ci """)) 21967db96d56Sopenharmony_ci with open(module_file, 'w') as f: 21977db96d56Sopenharmony_ci f.write(textwrap.dedent(""" 21987db96d56Sopenharmony_ci var = "VAR from module" 21997db96d56Sopenharmony_ci """)) 22007db96d56Sopenharmony_ci commands = """ 22017db96d56Sopenharmony_ci b 3 22027db96d56Sopenharmony_ci c 22037db96d56Sopenharmony_ci p module.var 22047db96d56Sopenharmony_ci quit 22057db96d56Sopenharmony_ci """ 22067db96d56Sopenharmony_ci stdout, _ = self._run_pdb(['-m', self.module_name + '.runme'], commands) 22077db96d56Sopenharmony_ci self.assertTrue(any("VAR from module" in l for l in stdout.splitlines()), stdout) 22087db96d56Sopenharmony_ci 22097db96d56Sopenharmony_ci def test_errors_in_command(self): 22107db96d56Sopenharmony_ci commands = "\n".join([ 22117db96d56Sopenharmony_ci 'print(', 22127db96d56Sopenharmony_ci 'debug print(', 22137db96d56Sopenharmony_ci 'debug doesnotexist', 22147db96d56Sopenharmony_ci 'c', 22157db96d56Sopenharmony_ci ]) 22167db96d56Sopenharmony_ci stdout, _ = self.run_pdb_script('pass', commands + '\n') 22177db96d56Sopenharmony_ci 22187db96d56Sopenharmony_ci self.assertEqual(stdout.splitlines()[1:], [ 22197db96d56Sopenharmony_ci '-> pass', 22207db96d56Sopenharmony_ci '(Pdb) *** SyntaxError: \'(\' was never closed', 22217db96d56Sopenharmony_ci 22227db96d56Sopenharmony_ci '(Pdb) ENTERING RECURSIVE DEBUGGER', 22237db96d56Sopenharmony_ci '*** SyntaxError: \'(\' was never closed', 22247db96d56Sopenharmony_ci 'LEAVING RECURSIVE DEBUGGER', 22257db96d56Sopenharmony_ci 22267db96d56Sopenharmony_ci '(Pdb) ENTERING RECURSIVE DEBUGGER', 22277db96d56Sopenharmony_ci '> <string>(1)<module>()', 22287db96d56Sopenharmony_ci "((Pdb)) *** NameError: name 'doesnotexist' is not defined", 22297db96d56Sopenharmony_ci 'LEAVING RECURSIVE DEBUGGER', 22307db96d56Sopenharmony_ci '(Pdb) ', 22317db96d56Sopenharmony_ci ]) 22327db96d56Sopenharmony_ci 22337db96d56Sopenharmony_ci def test_issue34266(self): 22347db96d56Sopenharmony_ci '''do_run handles exceptions from parsing its arg''' 22357db96d56Sopenharmony_ci def check(bad_arg, msg): 22367db96d56Sopenharmony_ci commands = "\n".join([ 22377db96d56Sopenharmony_ci f'run {bad_arg}', 22387db96d56Sopenharmony_ci 'q', 22397db96d56Sopenharmony_ci ]) 22407db96d56Sopenharmony_ci stdout, _ = self.run_pdb_script('pass', commands + '\n') 22417db96d56Sopenharmony_ci self.assertEqual(stdout.splitlines()[1:], [ 22427db96d56Sopenharmony_ci '-> pass', 22437db96d56Sopenharmony_ci f'(Pdb) *** Cannot run {bad_arg}: {msg}', 22447db96d56Sopenharmony_ci '(Pdb) ', 22457db96d56Sopenharmony_ci ]) 22467db96d56Sopenharmony_ci check('\\', 'No escaped character') 22477db96d56Sopenharmony_ci check('"', 'No closing quotation') 22487db96d56Sopenharmony_ci 22497db96d56Sopenharmony_ci def test_issue42384(self): 22507db96d56Sopenharmony_ci '''When running `python foo.py` sys.path[0] is an absolute path. `python -m pdb foo.py` should behave the same''' 22517db96d56Sopenharmony_ci script = textwrap.dedent(""" 22527db96d56Sopenharmony_ci import sys 22537db96d56Sopenharmony_ci print('sys.path[0] is', sys.path[0]) 22547db96d56Sopenharmony_ci """) 22557db96d56Sopenharmony_ci commands = 'c\nq' 22567db96d56Sopenharmony_ci 22577db96d56Sopenharmony_ci with os_helper.temp_cwd() as cwd: 22587db96d56Sopenharmony_ci expected = f'(Pdb) sys.path[0] is {os.path.realpath(cwd)}' 22597db96d56Sopenharmony_ci 22607db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_script(script, commands) 22617db96d56Sopenharmony_ci 22627db96d56Sopenharmony_ci self.assertEqual(stdout.split('\n')[2].rstrip('\r'), expected) 22637db96d56Sopenharmony_ci 22647db96d56Sopenharmony_ci @os_helper.skip_unless_symlink 22657db96d56Sopenharmony_ci def test_issue42384_symlink(self): 22667db96d56Sopenharmony_ci '''When running `python foo.py` sys.path[0] resolves symlinks. `python -m pdb foo.py` should behave the same''' 22677db96d56Sopenharmony_ci script = textwrap.dedent(""" 22687db96d56Sopenharmony_ci import sys 22697db96d56Sopenharmony_ci print('sys.path[0] is', sys.path[0]) 22707db96d56Sopenharmony_ci """) 22717db96d56Sopenharmony_ci commands = 'c\nq' 22727db96d56Sopenharmony_ci 22737db96d56Sopenharmony_ci with os_helper.temp_cwd() as cwd: 22747db96d56Sopenharmony_ci cwd = os.path.realpath(cwd) 22757db96d56Sopenharmony_ci dir_one = os.path.join(cwd, 'dir_one') 22767db96d56Sopenharmony_ci dir_two = os.path.join(cwd, 'dir_two') 22777db96d56Sopenharmony_ci expected = f'(Pdb) sys.path[0] is {dir_one}' 22787db96d56Sopenharmony_ci 22797db96d56Sopenharmony_ci os.mkdir(dir_one) 22807db96d56Sopenharmony_ci with open(os.path.join(dir_one, 'foo.py'), 'w') as f: 22817db96d56Sopenharmony_ci f.write(script) 22827db96d56Sopenharmony_ci os.mkdir(dir_two) 22837db96d56Sopenharmony_ci os.symlink(os.path.join(dir_one, 'foo.py'), os.path.join(dir_two, 'foo.py')) 22847db96d56Sopenharmony_ci 22857db96d56Sopenharmony_ci stdout, stderr = self._run_pdb([os.path.join('dir_two', 'foo.py')], commands) 22867db96d56Sopenharmony_ci 22877db96d56Sopenharmony_ci self.assertEqual(stdout.split('\n')[2].rstrip('\r'), expected) 22887db96d56Sopenharmony_ci 22897db96d56Sopenharmony_ci def test_issue42383(self): 22907db96d56Sopenharmony_ci with os_helper.temp_cwd() as cwd: 22917db96d56Sopenharmony_ci with open('foo.py', 'w') as f: 22927db96d56Sopenharmony_ci s = textwrap.dedent(""" 22937db96d56Sopenharmony_ci print('The correct file was executed') 22947db96d56Sopenharmony_ci 22957db96d56Sopenharmony_ci import os 22967db96d56Sopenharmony_ci os.chdir("subdir") 22977db96d56Sopenharmony_ci """) 22987db96d56Sopenharmony_ci f.write(s) 22997db96d56Sopenharmony_ci 23007db96d56Sopenharmony_ci subdir = os.path.join(cwd, 'subdir') 23017db96d56Sopenharmony_ci os.mkdir(subdir) 23027db96d56Sopenharmony_ci os.mkdir(os.path.join(subdir, 'subdir')) 23037db96d56Sopenharmony_ci wrong_file = os.path.join(subdir, 'foo.py') 23047db96d56Sopenharmony_ci 23057db96d56Sopenharmony_ci with open(wrong_file, 'w') as f: 23067db96d56Sopenharmony_ci f.write('print("The wrong file was executed")') 23077db96d56Sopenharmony_ci 23087db96d56Sopenharmony_ci stdout, stderr = self._run_pdb(['foo.py'], 'c\nc\nq') 23097db96d56Sopenharmony_ci expected = '(Pdb) The correct file was executed' 23107db96d56Sopenharmony_ci self.assertEqual(stdout.split('\n')[6].rstrip('\r'), expected) 23117db96d56Sopenharmony_ci 23127db96d56Sopenharmony_ci def test_gh_94215_crash(self): 23137db96d56Sopenharmony_ci script = """\ 23147db96d56Sopenharmony_ci def func(): 23157db96d56Sopenharmony_ci def inner(v): pass 23167db96d56Sopenharmony_ci inner( 23177db96d56Sopenharmony_ci 42 23187db96d56Sopenharmony_ci ) 23197db96d56Sopenharmony_ci func() 23207db96d56Sopenharmony_ci """ 23217db96d56Sopenharmony_ci commands = textwrap.dedent(""" 23227db96d56Sopenharmony_ci break func 23237db96d56Sopenharmony_ci continue 23247db96d56Sopenharmony_ci next 23257db96d56Sopenharmony_ci next 23267db96d56Sopenharmony_ci jump 2 23277db96d56Sopenharmony_ci """) 23287db96d56Sopenharmony_ci stdout, stderr = self.run_pdb_script(script, commands) 23297db96d56Sopenharmony_ci self.assertFalse(stderr) 23307db96d56Sopenharmony_ci 23317db96d56Sopenharmony_ci def test_gh_93696_frozen_list(self): 23327db96d56Sopenharmony_ci frozen_src = """ 23337db96d56Sopenharmony_ci def func(): 23347db96d56Sopenharmony_ci x = "Sentinel string for gh-93696" 23357db96d56Sopenharmony_ci print(x) 23367db96d56Sopenharmony_ci """ 23377db96d56Sopenharmony_ci host_program = """ 23387db96d56Sopenharmony_ci import os 23397db96d56Sopenharmony_ci import sys 23407db96d56Sopenharmony_ci 23417db96d56Sopenharmony_ci def _create_fake_frozen_module(): 23427db96d56Sopenharmony_ci with open('gh93696.py') as f: 23437db96d56Sopenharmony_ci src = f.read() 23447db96d56Sopenharmony_ci 23457db96d56Sopenharmony_ci # this function has a co_filename as if it were in a frozen module 23467db96d56Sopenharmony_ci dummy_mod = compile(src, "<frozen gh93696>", "exec") 23477db96d56Sopenharmony_ci func_code = dummy_mod.co_consts[0] 23487db96d56Sopenharmony_ci 23497db96d56Sopenharmony_ci mod = type(sys)("gh93696") 23507db96d56Sopenharmony_ci mod.func = type(lambda: None)(func_code, mod.__dict__) 23517db96d56Sopenharmony_ci mod.__file__ = 'gh93696.py' 23527db96d56Sopenharmony_ci 23537db96d56Sopenharmony_ci return mod 23547db96d56Sopenharmony_ci 23557db96d56Sopenharmony_ci mod = _create_fake_frozen_module() 23567db96d56Sopenharmony_ci mod.func() 23577db96d56Sopenharmony_ci """ 23587db96d56Sopenharmony_ci commands = """ 23597db96d56Sopenharmony_ci break 20 23607db96d56Sopenharmony_ci continue 23617db96d56Sopenharmony_ci step 23627db96d56Sopenharmony_ci list 23637db96d56Sopenharmony_ci quit 23647db96d56Sopenharmony_ci """ 23657db96d56Sopenharmony_ci with open('gh93696.py', 'w') as f: 23667db96d56Sopenharmony_ci f.write(textwrap.dedent(frozen_src)) 23677db96d56Sopenharmony_ci 23687db96d56Sopenharmony_ci with open('gh93696_host.py', 'w') as f: 23697db96d56Sopenharmony_ci f.write(textwrap.dedent(host_program)) 23707db96d56Sopenharmony_ci 23717db96d56Sopenharmony_ci self.addCleanup(os_helper.unlink, 'gh93696.py') 23727db96d56Sopenharmony_ci self.addCleanup(os_helper.unlink, 'gh93696_host.py') 23737db96d56Sopenharmony_ci stdout, stderr = self._run_pdb(["gh93696_host.py"], commands) 23747db96d56Sopenharmony_ci # verify that pdb found the source of the "frozen" function 23757db96d56Sopenharmony_ci self.assertIn('x = "Sentinel string for gh-93696"', stdout, "Sentinel statement not found") 23767db96d56Sopenharmony_ci 23777db96d56Sopenharmony_ci def test_non_utf8_encoding(self): 23787db96d56Sopenharmony_ci script_dir = os.path.join(os.path.dirname(__file__), 'encoded_modules') 23797db96d56Sopenharmony_ci for filename in os.listdir(script_dir): 23807db96d56Sopenharmony_ci if filename.endswith(".py"): 23817db96d56Sopenharmony_ci self._run_pdb([os.path.join(script_dir, filename)], 'q') 23827db96d56Sopenharmony_ci 23837db96d56Sopenharmony_ciclass ChecklineTests(unittest.TestCase): 23847db96d56Sopenharmony_ci def setUp(self): 23857db96d56Sopenharmony_ci linecache.clearcache() # Pdb.checkline() uses linecache.getline() 23867db96d56Sopenharmony_ci 23877db96d56Sopenharmony_ci def tearDown(self): 23887db96d56Sopenharmony_ci os_helper.unlink(os_helper.TESTFN) 23897db96d56Sopenharmony_ci 23907db96d56Sopenharmony_ci def test_checkline_before_debugging(self): 23917db96d56Sopenharmony_ci with open(os_helper.TESTFN, "w") as f: 23927db96d56Sopenharmony_ci f.write("print(123)") 23937db96d56Sopenharmony_ci db = pdb.Pdb() 23947db96d56Sopenharmony_ci self.assertEqual(db.checkline(os_helper.TESTFN, 1), 1) 23957db96d56Sopenharmony_ci 23967db96d56Sopenharmony_ci def test_checkline_after_reset(self): 23977db96d56Sopenharmony_ci with open(os_helper.TESTFN, "w") as f: 23987db96d56Sopenharmony_ci f.write("print(123)") 23997db96d56Sopenharmony_ci db = pdb.Pdb() 24007db96d56Sopenharmony_ci db.reset() 24017db96d56Sopenharmony_ci self.assertEqual(db.checkline(os_helper.TESTFN, 1), 1) 24027db96d56Sopenharmony_ci 24037db96d56Sopenharmony_ci def test_checkline_is_not_executable(self): 24047db96d56Sopenharmony_ci # Test for comments, docstrings and empty lines 24057db96d56Sopenharmony_ci s = textwrap.dedent(""" 24067db96d56Sopenharmony_ci # Comment 24077db96d56Sopenharmony_ci \"\"\" docstring \"\"\" 24087db96d56Sopenharmony_ci ''' docstring ''' 24097db96d56Sopenharmony_ci 24107db96d56Sopenharmony_ci """) 24117db96d56Sopenharmony_ci with open(os_helper.TESTFN, "w") as f: 24127db96d56Sopenharmony_ci f.write(s) 24137db96d56Sopenharmony_ci num_lines = len(s.splitlines()) + 2 # Test for EOF 24147db96d56Sopenharmony_ci with redirect_stdout(StringIO()): 24157db96d56Sopenharmony_ci db = pdb.Pdb() 24167db96d56Sopenharmony_ci for lineno in range(num_lines): 24177db96d56Sopenharmony_ci self.assertFalse(db.checkline(os_helper.TESTFN, lineno)) 24187db96d56Sopenharmony_ci 24197db96d56Sopenharmony_ci 24207db96d56Sopenharmony_cidef load_tests(loader, tests, pattern): 24217db96d56Sopenharmony_ci from test import test_pdb 24227db96d56Sopenharmony_ci tests.addTest(doctest.DocTestSuite(test_pdb)) 24237db96d56Sopenharmony_ci return tests 24247db96d56Sopenharmony_ci 24257db96d56Sopenharmony_ci 24267db96d56Sopenharmony_ciif __name__ == '__main__': 24277db96d56Sopenharmony_ci unittest.main() 2428