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