
    <e`0                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  G d d	e          Zd
 Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z' ej(        d          Z) e*de)j+                   d Z,d Z-d Z.d Z/d Z0d  Z1d! Z2d" Z3d# Z4d$ Z5d% Z6d& Z7d' Z8d( Z9d) Z:d* Z;d+ Z<d, Z=d- Z>d. Z?d/ Z@d0 ZA ejB                     G d1 d2ejC                              ZD G d3 d4ejC                  ZEd5 ZFeGd6k    r ejH                     dS dS )7    N)	ExitStackredirect_stdout)StringIO)support)	os_helper)
_FakeInput)patchc                   $    e Zd ZdZd Zd Zd ZdS )PdbTestInputz:Context manager that makes testing Pdb in doctests easier.c                     || _         d S N)input)selfr   s     $/usr/lib/python3.11/test/test_pdb.py__init__zPdbTestInput.__init__   s    


    c                     t           j        | _        t          | j                  t           _        t          t           d          rt          j                    nd | _        d S )Ngettrace)sysstdin
real_stdinr   r   hasattrr   
orig_tracer   s    r   	__enter__zPdbTestInput.__enter__   s@    )tz**	,3C,D,DN#,...$r   c                 l    | j         t          _        | j        rt          j        | j                   d S d S r   )r   r   r   r   settrace)r   excs     r   __exit__zPdbTestInput.__exit__"   s7    O	? 	*L)))))	* 	*r   N)__name__
__module____qualname____doc__r   r   r    r   r   r   r      sJ        DD  O O O
* * * * *r   r   c                      dS )a1  This tests the custom displayhook for pdb.

    >>> def test_function(foo, bar):
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     pass

    >>> with PdbTestInput([
    ...     'foo',
    ...     'bar',
    ...     'for i in range(5): print(i)',
    ...     'continue',
    ... ]):
    ...     test_function(1, None)
    > <doctest test.test_pdb.test_pdb_displayhook[0]>(3)test_function()
    -> pass
    (Pdb) foo
    1
    (Pdb) bar
    (Pdb) for i in range(5): print(i)
    0
    1
    2
    3
    4
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_displayhookr&   (         r   c                      dS )a  Test the basic commands of pdb.

    >>> def test_function_2(foo, bar='default'):
    ...     print(foo)
    ...     for i in range(5):
    ...         print(i)
    ...     print(bar)
    ...     for i in range(10):
    ...         never_executed
    ...     print('after for')
    ...     print('...')
    ...     return foo.upper()

    >>> def test_function3(arg=None, *, kwonly=None):
    ...     pass

    >>> def test_function4(a, b, c, /):
    ...     pass

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     ret = test_function_2('baz')
    ...     test_function3(kwonly=True)
    ...     test_function4(1, 2, 3)
    ...     print(ret)

    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...     'step',       # entering the function call
    ...     'args',       # display function args
    ...     'list',       # list function source
    ...     'bt',         # display backtrace
    ...     'up',         # step up to test_function()
    ...     'down',       # step down to test_function_2() again
    ...     'next',       # stepping to print(foo)
    ...     'next',       # stepping to the for loop
    ...     'step',       # stepping into the for loop
    ...     'until',      # continuing until out of the for loop
    ...     'next',       # executing the print(bar)
    ...     'jump 8',     # jump over second for loop
    ...     'return',     # return out of function
    ...     'retval',     # display return value
    ...     'next',       # step to test_function3()
    ...     'step',       # stepping into test_function3()
    ...     'args',       # display function args
    ...     'return',     # return out of function
    ...     'next',       # step to test_function4()
    ...     'step',       # stepping to test_function4()
    ...     'args',       # display function args
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_basic_commands[3]>(3)test_function()
    -> ret = test_function_2('baz')
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(1)test_function_2()
    -> def test_function_2(foo, bar='default'):
    (Pdb) args
    foo = 'baz'
    bar = 'default'
    (Pdb) list
      1  ->     def test_function_2(foo, bar='default'):
      2             print(foo)
      3             for i in range(5):
      4                 print(i)
      5             print(bar)
      6             for i in range(10):
      7                 never_executed
      8             print('after for')
      9             print('...')
     10             return foo.upper()
    [EOF]
    (Pdb) bt
    ...
      <doctest test.test_pdb.test_pdb_basic_commands[4]>(25)<module>()
    -> test_function()
      <doctest test.test_pdb.test_pdb_basic_commands[3]>(3)test_function()
    -> ret = test_function_2('baz')
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(1)test_function_2()
    -> def test_function_2(foo, bar='default'):
    (Pdb) up
    > <doctest test.test_pdb.test_pdb_basic_commands[3]>(3)test_function()
    -> ret = test_function_2('baz')
    (Pdb) down
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(1)test_function_2()
    -> def test_function_2(foo, bar='default'):
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(2)test_function_2()
    -> print(foo)
    (Pdb) next
    baz
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(3)test_function_2()
    -> for i in range(5):
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(4)test_function_2()
    -> print(i)
    (Pdb) until
    0
    1
    2
    3
    4
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(5)test_function_2()
    -> print(bar)
    (Pdb) next
    default
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(6)test_function_2()
    -> for i in range(10):
    (Pdb) jump 8
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(8)test_function_2()
    -> print('after for')
    (Pdb) return
    after for
    ...
    --Return--
    > <doctest test.test_pdb.test_pdb_basic_commands[0]>(10)test_function_2()->'BAZ'
    -> return foo.upper()
    (Pdb) retval
    'BAZ'
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_basic_commands[3]>(4)test_function()
    -> test_function3(kwonly=True)
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_basic_commands[1]>(1)test_function3()
    -> def test_function3(arg=None, *, kwonly=None):
    (Pdb) args
    arg = None
    kwonly = True
    (Pdb) return
    --Return--
    > <doctest test.test_pdb.test_pdb_basic_commands[1]>(2)test_function3()->None
    -> pass
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_basic_commands[3]>(5)test_function()
    -> test_function4(1, 2, 3)
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_basic_commands[2]>(1)test_function4()
    -> def test_function4(a, b, c, /):
    (Pdb) args
    a = 1
    b = 2
    c = 3
    (Pdb) continue
    BAZ
    Nr$   r$   r   r   test_pdb_basic_commandsr)   E   r'   r   c                  @    dd l } | j                                         d S )Nr   )bdb
BreakpointclearBreakpoints)r+   s    r   reset_Breakpointr.      s%    JJJN##%%%%%r   c                      dS )az  Test basic commands related to breakpoints.

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     print(1)
    ...     print(2)
    ...     print(3)
    ...     print(4)

    First, need to clear bdb state that might be left over from previous tests.
    Otherwise, the new breakpoints might get assigned different numbers.

    >>> reset_Breakpoint()

    Now test the breakpoint commands.  NORMALIZE_WHITESPACE is needed because
    the breakpoint list outputs a tab for the "stop only" and "ignore next"
    lines, which we don't want to put in here.

    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     'break 3',
    ...     'disable 1',
    ...     'ignore 1 10',
    ...     'condition 1 1 < 2',
    ...     'break 4',
    ...     'break 4',
    ...     'break',
    ...     'clear 3',
    ...     'break',
    ...     'condition 1',
    ...     'enable 1',
    ...     'clear 1',
    ...     'commands 2',
    ...     'p "42"',
    ...     'print("42", 7*6)',     # Issue 18764 (not about breakpoints)
    ...     'end',
    ...     'continue',  # will stop at breakpoint 2 (line 4)
    ...     'clear',     # clear all!
    ...     'y',
    ...     'tbreak 5',
    ...     'continue',  # will stop at temporary breakpoint
    ...     'break',     # make sure breakpoint is gone
    ...     'commands 10',  # out of range
    ...     'commands a',   # display help
    ...     'commands 4',   # already deleted
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(3)test_function()
    -> print(1)
    (Pdb) break 3
    Breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
    (Pdb) disable 1
    Disabled breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
    (Pdb) ignore 1 10
    Will ignore next 10 crossings of breakpoint 1.
    (Pdb) condition 1 1 < 2
    New condition set for breakpoint 1.
    (Pdb) break 4
    Breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
    (Pdb) break 4
    Breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
    (Pdb) break
    Num Type         Disp Enb   Where
    1   breakpoint   keep no    at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
            stop only if 1 < 2
            ignore next 10 hits
    2   breakpoint   keep yes   at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
    3   breakpoint   keep yes   at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
    (Pdb) clear 3
    Deleted breakpoint 3 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
    (Pdb) break
    Num Type         Disp Enb   Where
    1   breakpoint   keep no    at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
            stop only if 1 < 2
            ignore next 10 hits
    2   breakpoint   keep yes   at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
    (Pdb) condition 1
    Breakpoint 1 is now unconditional.
    (Pdb) enable 1
    Enabled breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
    (Pdb) clear 1
    Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:3
    (Pdb) commands 2
    (com) p "42"
    (com) print("42", 7*6)
    (com) end
    (Pdb) continue
    1
    '42'
    42 42
    > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(4)test_function()
    -> print(2)
    (Pdb) clear
    Clear all breaks? y
    Deleted breakpoint 2 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:4
    (Pdb) tbreak 5
    Breakpoint 4 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5
    (Pdb) continue
    2
    Deleted breakpoint 4 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:5
    > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(5)test_function()
    -> print(3)
    (Pdb) break
    (Pdb) commands 10
    *** cannot set commands: Breakpoint number 10 out of range
    (Pdb) commands a
    *** Usage: commands [bnum]
            ...
            end
    (Pdb) commands 4
    *** cannot set commands: Breakpoint 4 already deleted
    (Pdb) continue
    3
    4
    Nr$   r$   r   r   test_pdb_breakpoint_commandsr0      r'   r   c                      dS )a;  Breakpoints are remembered between interactive sessions

    >>> reset_Breakpoint()
    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...    'import test.test_pdb',
    ...    'break test.test_pdb.do_something',
    ...    'break test.test_pdb.do_nothing',
    ...    'break',
    ...    'continue',
    ... ]):
    ...    pdb.run('print()')
    > <string>(1)<module>()...
    (Pdb) import test.test_pdb
    (Pdb) break test.test_pdb.do_something
    Breakpoint 1 at ...test_pdb.py:...
    (Pdb) break test.test_pdb.do_nothing
    Breakpoint 2 at ...test_pdb.py:...
    (Pdb) break
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at ...test_pdb.py:...
    2   breakpoint   keep yes   at ...test_pdb.py:...
    (Pdb) continue

    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...    'break',
    ...    'break pdb.find_function',
    ...    'break',
    ...    'clear 1',
    ...    'continue',
    ... ]):
    ...    pdb.run('print()')
    > <string>(1)<module>()...
    (Pdb) break
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at ...test_pdb.py:...
    2   breakpoint   keep yes   at ...test_pdb.py:...
    (Pdb) break pdb.find_function
    Breakpoint 3 at ...pdb.py:97
    (Pdb) break
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at ...test_pdb.py:...
    2   breakpoint   keep yes   at ...test_pdb.py:...
    3   breakpoint   keep yes   at ...pdb.py:...
    (Pdb) clear 1
    Deleted breakpoint 1 at ...test_pdb.py:...
    (Pdb) continue

    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...    'break',
    ...    'clear 2',
    ...    'clear 3',
    ...    'continue',
    ... ]):
    ...    pdb.run('print()')
    > <string>(1)<module>()...
    (Pdb) break
    Num Type         Disp Enb   Where
    2   breakpoint   keep yes   at ...test_pdb.py:...
    3   breakpoint   keep yes   at ...pdb.py:...
    (Pdb) clear 2
    Deleted breakpoint 2 at ...test_pdb.py:...
    (Pdb) clear 3
    Deleted breakpoint 3 at ...pdb.py:...
    (Pdb) continue
    Nr$   r$   r   r   :test_pdb_breakpoints_preserved_across_interactive_sessionsr2   S  r'   r   c                      dS )a  Test that do_p/do_pp do not swallow exceptions.

    >>> class BadRepr:
    ...     def __repr__(self):
    ...         raise Exception('repr_exc')
    >>> obj = BadRepr()

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()

    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     'p obj',
    ...     'pp obj',
    ...     'continue',
    ... ]):
    ...    test_function()
    --Return--
    > <doctest test.test_pdb.test_pdb_pp_repr_exc[2]>(2)test_function()->None
    -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    (Pdb) p obj
    *** Exception: repr_exc
    (Pdb) pp obj
    *** Exception: repr_exc
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_pp_repr_excr4     r'   r   c                      d S r   r$   r$   r   r   
do_nothingr6     s    Dr   c                  $    t          d           d S )N*   )printr$   r   r   do_somethingr:     s    	"IIIIIr   c                      dS )a  Test the list and source commands of pdb.

    >>> def test_function_2(foo):
    ...     import test.test_pdb
    ...     test.test_pdb.do_nothing()
    ...     'some...'
    ...     'more...'
    ...     'code...'
    ...     'to...'
    ...     'make...'
    ...     'a...'
    ...     'long...'
    ...     'listing...'
    ...     'useful...'
    ...     '...'
    ...     '...'
    ...     return foo

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     ret = test_function_2('baz')

    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...     'list',      # list first function
    ...     'step',      # step into second function
    ...     'list',      # list second function
    ...     'list',      # continue listing to EOF
    ...     'list 1,3',  # list specific lines
    ...     'list x',    # invalid argument
    ...     'next',      # step to import
    ...     'next',      # step over import
    ...     'step',      # step into do_nothing
    ...     'longlist',  # list all lines
    ...     'source do_something',  # list all lines of function
    ...     'source fooxxx',        # something that doesn't exit
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_list_commands[1]>(3)test_function()
    -> ret = test_function_2('baz')
    (Pdb) list
      1         def test_function():
      2             import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
      3  ->         ret = test_function_2('baz')
    [EOF]
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_list_commands[0]>(1)test_function_2()
    -> def test_function_2(foo):
    (Pdb) list
      1  ->     def test_function_2(foo):
      2             import test.test_pdb
      3             test.test_pdb.do_nothing()
      4             'some...'
      5             'more...'
      6             'code...'
      7             'to...'
      8             'make...'
      9             'a...'
     10             'long...'
     11             'listing...'
    (Pdb) list
     12             'useful...'
     13             '...'
     14             '...'
     15             return foo
    [EOF]
    (Pdb) list 1,3
      1  ->     def test_function_2(foo):
      2             import test.test_pdb
      3             test.test_pdb.do_nothing()
    (Pdb) list x
    *** ...
    (Pdb) next
    > <doctest test.test_pdb.test_list_commands[0]>(2)test_function_2()
    -> import test.test_pdb
    (Pdb) next
    > <doctest test.test_pdb.test_list_commands[0]>(3)test_function_2()
    -> test.test_pdb.do_nothing()
    (Pdb) step
    --Call--
    > ...test_pdb.py(...)do_nothing()
    -> def do_nothing():
    (Pdb) longlist
    ...  ->     def do_nothing():
    ...             pass
    (Pdb) source do_something
    ...         def do_something():
    ...             print(42)
    (Pdb) source fooxxx
    *** ...
    (Pdb) continue
    Nr$   r$   r   r   test_list_commandsr<     r'   r   c                      dS )aI  Test the whatis command

    >>> myvar = (1,2)
    >>> def myfunc():
    ...     pass

    >>> class MyClass:
    ...    def mymethod(self):
    ...        pass

    >>> def test_function():
    ...   import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()

    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...    'whatis myvar',
    ...    'whatis myfunc',
    ...    'whatis MyClass',
    ...    'whatis MyClass()',
    ...    'whatis MyClass.mymethod',
    ...    'whatis MyClass().mymethod',
    ...    'continue',
    ... ]):
    ...    test_function()
    --Return--
    > <doctest test.test_pdb.test_pdb_whatis_command[3]>(2)test_function()->None
    -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    (Pdb) whatis myvar
    <class 'tuple'>
    (Pdb) whatis myfunc
    Function myfunc
    (Pdb) whatis MyClass
    Class test.test_pdb.MyClass
    (Pdb) whatis MyClass()
    <class 'test.test_pdb.MyClass'>
    (Pdb) whatis MyClass.mymethod
    Function mymethod
    (Pdb) whatis MyClass().mymethod
    Method mymethod
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_whatis_commandr>     r'   r   c                      dS )a  Test display command

    >>> def test_function():
    ...     a = 0
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     a = 1
    ...     a = 2
    ...     a = 3
    ...     a = 4

    >>> with PdbTestInput([  # doctest: +ELLIPSIS
    ...     'display a',
    ...     'n',
    ...     'display',
    ...     'undisplay a',
    ...     'n',
    ...     'display a',
    ...     'undisplay',
    ...     'display a < 1',
    ...     'n',
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_display_command[0]>(4)test_function()
    -> a = 1
    (Pdb) display a
    display a: 0
    (Pdb) n
    > <doctest test.test_pdb.test_pdb_display_command[0]>(5)test_function()
    -> a = 2
    display a: 1  [old: 0]
    (Pdb) display
    Currently displaying:
    a: 1
    (Pdb) undisplay a
    (Pdb) n
    > <doctest test.test_pdb.test_pdb_display_command[0]>(6)test_function()
    -> a = 3
    (Pdb) display a
    display a: 2
    (Pdb) undisplay
    (Pdb) display a < 1
    display a < 1: False
    (Pdb) n
    > <doctest test.test_pdb.test_pdb_display_command[0]>(7)test_function()
    -> a = 4
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_display_commandr@   A  r'   r   c                      dS )a.  Test alias command

    >>> class A:
    ...     def __init__(self):
    ...         self.attr1 = 10
    ...         self.attr2 = 'str'
    ...     def method(self):
    ...         pass

    >>> def test_function():
    ...     o = A()
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     o.method()

    >>> with PdbTestInput([  # doctest: +ELLIPSIS
    ...     'alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")',
    ...     'alias ps pi self',
    ...     'pi o',
    ...     's',
    ...     'ps',
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_alias_command[1]>(4)test_function()
    -> o.method()
    (Pdb) alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")
    (Pdb) alias ps pi self
    (Pdb) pi o
    o.attr1 = 10
    o.attr2 = str
    (Pdb) s
    --Call--
    > <doctest test.test_pdb.test_pdb_alias_command[0]>(5)method()
    -> def method(self):
    (Pdb) ps
    self.attr1 = 10
    self.attr2 = str
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_alias_commandrB   s  r'   r   c                      dS )aF  Test where command

    >>> def g():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()

    >>> def f():
    ...     g();

    >>> def test_function():
    ...     f()

    >>> with PdbTestInput([  # doctest: +ELLIPSIS
    ...     'w',
    ...     'where',
    ...     'u',
    ...     'w',
    ...     'continue',
    ... ]):
    ...    test_function()
    --Return--
    > <doctest test.test_pdb.test_pdb_where_command[0]>(2)g()->None
    -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    (Pdb) w
    ...
      <doctest test.test_pdb.test_pdb_where_command[3]>(8)<module>()
    -> test_function()
      <doctest test.test_pdb.test_pdb_where_command[2]>(2)test_function()
    -> f()
      <doctest test.test_pdb.test_pdb_where_command[1]>(2)f()
    -> g();
    > <doctest test.test_pdb.test_pdb_where_command[0]>(2)g()->None
    -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    (Pdb) where
    ...
      <doctest test.test_pdb.test_pdb_where_command[3]>(8)<module>()
    -> test_function()
      <doctest test.test_pdb.test_pdb_where_command[2]>(2)test_function()
    -> f()
      <doctest test.test_pdb.test_pdb_where_command[1]>(2)f()
    -> g();
    > <doctest test.test_pdb.test_pdb_where_command[0]>(2)g()->None
    -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    (Pdb) u
    > <doctest test.test_pdb.test_pdb_where_command[1]>(2)f()
    -> g();
    (Pdb) w
    ...
      <doctest test.test_pdb.test_pdb_where_command[3]>(8)<module>()
    -> test_function()
      <doctest test.test_pdb.test_pdb_where_command[2]>(2)test_function()
    -> f()
    > <doctest test.test_pdb.test_pdb_where_command[1]>(2)f()
    -> g();
      <doctest test.test_pdb.test_pdb_where_command[0]>(2)g()->None
    -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_where_commandrD     r'   r   c                      dS )a  Test post mortem traceback debugging.

    >>> def test_function_2():
    ...     try:
    ...         1/0
    ...     finally:
    ...         print('Exception!')

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     test_function_2()
    ...     print('Not reached.')

    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...     'next',      # step over exception-raising call
    ...     'bt',        # get a backtrace
    ...     'list',      # list code of test_function()
    ...     'down',      # step into test_function_2()
    ...     'list',      # list code of test_function_2()
    ...     'continue',
    ... ]):
    ...    try:
    ...        test_function()
    ...    except ZeroDivisionError:
    ...        print('Correctly reraised.')
    > <doctest test.test_pdb.test_post_mortem[1]>(3)test_function()
    -> test_function_2()
    (Pdb) next
    Exception!
    ZeroDivisionError: division by zero
    > <doctest test.test_pdb.test_post_mortem[1]>(3)test_function()
    -> test_function_2()
    (Pdb) bt
    ...
      <doctest test.test_pdb.test_post_mortem[2]>(10)<module>()
    -> test_function()
    > <doctest test.test_pdb.test_post_mortem[1]>(3)test_function()
    -> test_function_2()
      <doctest test.test_pdb.test_post_mortem[0]>(3)test_function_2()
    -> 1/0
    (Pdb) list
      1         def test_function():
      2             import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
      3  ->         test_function_2()
      4             print('Not reached.')
    [EOF]
    (Pdb) down
    > <doctest test.test_pdb.test_post_mortem[0]>(3)test_function_2()
    -> 1/0
    (Pdb) list
      1         def test_function_2():
      2             try:
      3  >>             1/0
      4             finally:
      5  ->             print('Exception!')
    [EOF]
    (Pdb) continue
    Correctly reraised.
    Nr$   r$   r   r   test_post_mortemrF     r'   r   c                      dS )a[  This illustrates the simple case of module skipping.

    >>> def skip_module():
    ...     import string
    ...     import pdb; pdb.Pdb(skip=['stri*'], nosigint=True, readrc=False).set_trace()
    ...     string.capwords('FOO')

    >>> with PdbTestInput([
    ...     'step',
    ...     'continue',
    ... ]):
    ...     skip_module()
    > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()
    -> string.capwords('FOO')
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()->None
    -> string.capwords('FOO')
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_skip_modulesrH     r'   r   module_to_skipz6def foo_pony(callback): x = 1; callback(); return Nonec                      dS )aA  This illustrates skipping of modules that call into other code.

    >>> def skip_module():
    ...     def callback():
    ...         return None
    ...     import pdb; pdb.Pdb(skip=['module_to_skip*'], nosigint=True, readrc=False).set_trace()
    ...     mod.foo_pony(callback)

    >>> with PdbTestInput([
    ...     'step',
    ...     'step',
    ...     'step',
    ...     'step',
    ...     'step',
    ...     'continue',
    ... ]):
    ...     skip_module()
    ...     pass  # provides something to "step" to
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()
    -> mod.foo_pony(callback)
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(2)callback()
    -> def callback():
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()
    -> return None
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(3)callback()->None
    -> return None
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()->None
    -> mod.foo_pony(callback)
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[1]>(10)<module>()
    -> pass  # provides something to "step" to
    (Pdb) continue
    Nr$   r$   r   r   #test_pdb_skip_modules_with_callbackrK   1  r'   r   c                      dS )a  Test that "continue" and "next" work properly in bottom frame (issue #5294).

    >>> def test_function():
    ...     import pdb, sys; inst = pdb.Pdb(nosigint=True, readrc=False)
    ...     inst.set_trace()
    ...     inst.botframe = sys._getframe()  # hackery to get the right botframe
    ...     print(1)
    ...     print(2)
    ...     print(3)
    ...     print(4)

    >>> with PdbTestInput([  # doctest: +ELLIPSIS
    ...     'next',
    ...     'break 7',
    ...     'continue',
    ...     'next',
    ...     'continue',
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(4)test_function()
    -> inst.botframe = sys._getframe()  # hackery to get the right botframe
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(5)test_function()
    -> print(1)
    (Pdb) break 7
    Breakpoint ... at <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>:7
    (Pdb) continue
    1
    2
    > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(7)test_function()
    -> print(3)
    (Pdb) next
    3
    > <doctest test.test_pdb.test_pdb_continue_in_bottomframe[0]>(8)test_function()
    -> print(4)
    (Pdb) continue
    4
    Nr$   r$   r   r    test_pdb_continue_in_bottomframerM   \  r'   r   c                 `     t          t          j        dd          |           |           dS )zRun pdb.method(arg).TF)nosigintreadrcN)getattrpdbPdb)methodargs     r   
pdb_invokerV     s1    9GCGT%000&99#>>>>>r   c                      dS )a  Testing run and runeval with incorrect first argument.

    >>> pti = PdbTestInput(['continue',])
    >>> with pti:
    ...     pdb_invoke('run', lambda x: x)
    Traceback (most recent call last):
    TypeError: exec() arg 1 must be a string, bytes or code object

    >>> with pti:
    ...     pdb_invoke('runeval', lambda x: x)
    Traceback (most recent call last):
    TypeError: eval() arg 1 must be a string, bytes or code object
    Nr$   r$   r   r   $test_pdb_run_with_incorrect_argumentrX     r'   r   c                      dS )a   Testing run and runeval with code object as a first argument.

    >>> with PdbTestInput(['step','x', 'continue']):  # doctest: +ELLIPSIS
    ...     pdb_invoke('run', compile('x=1', '<string>', 'exec'))
    > <string>(1)<module>()...
    (Pdb) step
    --Return--
    > <string>(1)<module>()->None
    (Pdb) x
    1
    (Pdb) continue

    >>> with PdbTestInput(['x', 'continue']):
    ...     x=0
    ...     pdb_invoke('runeval', compile('x+1', '<string>', 'eval'))
    > <string>(1)<module>()->None
    (Pdb) x
    1
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_run_with_code_objectrZ     r'   r   c                      dS )a  Test that pdb stops after a next/until/return issued at a return debug event.

    >>> def test_function_2():
    ...     x = 1
    ...     x = 2

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     test_function_2()
    ...     test_function_2()
    ...     test_function_2()
    ...     end = 1

    >>> reset_Breakpoint()
    >>> with PdbTestInput(['break test_function_2',
    ...                    'continue',
    ...                    'return',
    ...                    'next',
    ...                    'continue',
    ...                    'return',
    ...                    'until',
    ...                    'continue',
    ...                    'return',
    ...                    'return',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_next_until_return_at_return_event[1]>(3)test_function()
    -> test_function_2()
    (Pdb) break test_function_2
    Breakpoint 1 at <doctest test.test_pdb.test_next_until_return_at_return_event[0]>:1
    (Pdb) continue
    > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(2)test_function_2()
    -> x = 1
    (Pdb) return
    --Return--
    > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(3)test_function_2()->None
    -> x = 2
    (Pdb) next
    > <doctest test.test_pdb.test_next_until_return_at_return_event[1]>(4)test_function()
    -> test_function_2()
    (Pdb) continue
    > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(2)test_function_2()
    -> x = 1
    (Pdb) return
    --Return--
    > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(3)test_function_2()->None
    -> x = 2
    (Pdb) until
    > <doctest test.test_pdb.test_next_until_return_at_return_event[1]>(5)test_function()
    -> test_function_2()
    (Pdb) continue
    > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(2)test_function_2()
    -> x = 1
    (Pdb) return
    --Return--
    > <doctest test.test_pdb.test_next_until_return_at_return_event[0]>(3)test_function_2()->None
    -> x = 2
    (Pdb) return
    > <doctest test.test_pdb.test_next_until_return_at_return_event[1]>(6)test_function()
    -> end = 1
    (Pdb) continue
    Nr$   r$   r   r   &test_next_until_return_at_return_eventr\     r'   r   c                      dS )aX  Testing skip unwindng stack on yield for generators for "next" command

    >>> def test_gen():
    ...     yield 0
    ...     return 1
    ...     yield 2

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     it = test_gen()
    ...     try:
    ...         if next(it) != 0:
    ...             raise AssertionError
    ...         next(it)
    ...     except StopIteration as ex:
    ...         if ex.value != 1:
    ...             raise AssertionError
    ...     print("finished")

    >>> with PdbTestInput(['step',
    ...                    'step',
    ...                    'step',
    ...                    'next',
    ...                    'next',
    ...                    'step',
    ...                    'step',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(3)test_function()
    -> it = test_gen()
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(4)test_function()
    -> try:
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(5)test_function()
    -> if next(it) != 0:
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(1)test_gen()
    -> def test_gen():
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(2)test_gen()
    -> yield 0
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(3)test_gen()
    -> return 1
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_next_command_for_generator[0]>(3)test_gen()->1
    -> return 1
    (Pdb) step
    StopIteration: 1
    > <doctest test.test_pdb.test_pdb_next_command_for_generator[1]>(7)test_function()
    -> next(it)
    (Pdb) continue
    finished
    Nr$   r$   r   r   #test_pdb_next_command_for_generatorr^     r'   r   c                      dS )a,  Testing skip unwindng stack on yield for coroutines for "next" command

    >>> import asyncio

    >>> async def test_coro():
    ...     await asyncio.sleep(0)
    ...     await asyncio.sleep(0)
    ...     await asyncio.sleep(0)

    >>> async def test_main():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     await test_coro()

    >>> def test_function():
    ...     loop = asyncio.new_event_loop()
    ...     loop.run_until_complete(test_main())
    ...     loop.close()
    ...     asyncio.set_event_loop_policy(None)
    ...     print("finished")

    >>> with PdbTestInput(['step',
    ...                    'step',
    ...                    'next',
    ...                    'next',
    ...                    'next',
    ...                    'step',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[2]>(3)test_main()
    -> await test_coro()
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[1]>(1)test_coro()
    -> async def test_coro():
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[1]>(2)test_coro()
    -> await asyncio.sleep(0)
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[1]>(3)test_coro()
    -> await asyncio.sleep(0)
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[1]>(4)test_coro()
    -> await asyncio.sleep(0)
    (Pdb) next
    Internal StopIteration
    > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[2]>(3)test_main()
    -> await test_coro()
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_next_command_for_coroutine[2]>(3)test_main()->None
    -> await test_coro()
    (Pdb) continue
    finished
    Nr$   r$   r   r   #test_pdb_next_command_for_coroutiner`   ,  r'   r   c                      dS )a*  Testing skip unwindng stack on yield for coroutines for "next" command

    >>> import asyncio

    >>> async def agen():
    ...     yield 1
    ...     await asyncio.sleep(0)
    ...     yield 2

    >>> async def test_coro():
    ...     async for x in agen():
    ...         print(x)

    >>> async def test_main():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     await test_coro()

    >>> def test_function():
    ...     loop = asyncio.new_event_loop()
    ...     loop.run_until_complete(test_main())
    ...     loop.close()
    ...     asyncio.set_event_loop_policy(None)
    ...     print("finished")

    >>> with PdbTestInput(['step',
    ...                    'step',
    ...                    'next',
    ...                    'next',
    ...                    'step',
    ...                    'next',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[3]>(3)test_main()
    -> await test_coro()
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[2]>(1)test_coro()
    -> async def test_coro():
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[2]>(2)test_coro()
    -> async for x in agen():
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[2]>(3)test_coro()
    -> print(x)
    (Pdb) next
    1
    > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[2]>(2)test_coro()
    -> async for x in agen():
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[1]>(2)agen()
    -> yield 1
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_next_command_for_asyncgen[1]>(3)agen()
    -> await asyncio.sleep(0)
    (Pdb) continue
    2
    finished
    Nr$   r$   r   r   "test_pdb_next_command_for_asyncgenrb   d  r'   r   c                      dS )a  Testing no unwindng stack on yield for generators
       for "return" command

    >>> def test_gen():
    ...     yield 0
    ...     return 1
    ...     yield 2

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     it = test_gen()
    ...     try:
    ...         if next(it) != 0:
    ...             raise AssertionError
    ...         next(it)
    ...     except StopIteration as ex:
    ...         if ex.value != 1:
    ...             raise AssertionError
    ...     print("finished")

    >>> with PdbTestInput(['step',
    ...                    'step',
    ...                    'step',
    ...                    'return',
    ...                    'step',
    ...                    'step',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(3)test_function()
    -> it = test_gen()
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(4)test_function()
    -> try:
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(5)test_function()
    -> if next(it) != 0:
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_return_command_for_generator[0]>(1)test_gen()
    -> def test_gen():
    (Pdb) return
    StopIteration: 1
    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(7)test_function()
    -> next(it)
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(8)test_function()
    -> except StopIteration as ex:
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_return_command_for_generator[1]>(9)test_function()
    -> if ex.value != 1:
    (Pdb) continue
    finished
    Nr$   r$   r   r   %test_pdb_return_command_for_generatorrd     r'   r   c                      dS )a%  Testing no unwindng stack on yield for coroutines for "return" command

    >>> import asyncio

    >>> async def test_coro():
    ...     await asyncio.sleep(0)
    ...     await asyncio.sleep(0)
    ...     await asyncio.sleep(0)

    >>> async def test_main():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     await test_coro()

    >>> def test_function():
    ...     loop = asyncio.new_event_loop()
    ...     loop.run_until_complete(test_main())
    ...     loop.close()
    ...     asyncio.set_event_loop_policy(None)
    ...     print("finished")

    >>> with PdbTestInput(['step',
    ...                    'step',
    ...                    'next',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_return_command_for_coroutine[2]>(3)test_main()
    -> await test_coro()
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_return_command_for_coroutine[1]>(1)test_coro()
    -> async def test_coro():
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_return_command_for_coroutine[1]>(2)test_coro()
    -> await asyncio.sleep(0)
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_return_command_for_coroutine[1]>(3)test_coro()
    -> await asyncio.sleep(0)
    (Pdb) continue
    finished
    Nr$   r$   r   r   %test_pdb_return_command_for_coroutinerf     r'   r   c                      dS )a  Testing no unwindng stack on yield for generators
       for "until" command if target breakpoint is not reached

    >>> def test_gen():
    ...     yield 0
    ...     yield 1
    ...     yield 2

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     for i in test_gen():
    ...         print(i)
    ...     print("finished")

    >>> with PdbTestInput(['step',
    ...                    'until 4',
    ...                    'step',
    ...                    'step',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_until_command_for_generator[1]>(3)test_function()
    -> for i in test_gen():
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_until_command_for_generator[0]>(1)test_gen()
    -> def test_gen():
    (Pdb) until 4
    0
    1
    > <doctest test.test_pdb.test_pdb_until_command_for_generator[0]>(4)test_gen()
    -> yield 2
    (Pdb) step
    --Return--
    > <doctest test.test_pdb.test_pdb_until_command_for_generator[0]>(4)test_gen()->2
    -> yield 2
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_until_command_for_generator[1]>(4)test_function()
    -> print(i)
    (Pdb) continue
    2
    finished
    Nr$   r$   r   r   $test_pdb_until_command_for_generatorrh     r'   r   c                      dS )a  Testing no unwindng stack for coroutines
       for "until" command if target breakpoint is not reached

    >>> import asyncio

    >>> async def test_coro():
    ...     print(0)
    ...     await asyncio.sleep(0)
    ...     print(1)
    ...     await asyncio.sleep(0)
    ...     print(2)
    ...     await asyncio.sleep(0)
    ...     print(3)

    >>> async def test_main():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     await test_coro()

    >>> def test_function():
    ...     loop = asyncio.new_event_loop()
    ...     loop.run_until_complete(test_main())
    ...     loop.close()
    ...     asyncio.set_event_loop_policy(None)
    ...     print("finished")

    >>> with PdbTestInput(['step',
    ...                    'until 8',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_until_command_for_coroutine[2]>(3)test_main()
    -> await test_coro()
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_until_command_for_coroutine[1]>(1)test_coro()
    -> async def test_coro():
    (Pdb) until 8
    0
    1
    2
    > <doctest test.test_pdb.test_pdb_until_command_for_coroutine[1]>(8)test_coro()
    -> print(3)
    (Pdb) continue
    3
    finished
    Nr$   r$   r   r   $test_pdb_until_command_for_coroutinerj   .  r'   r   c                      dS )a  The next command on returning from a generator controlled by a for loop.

    >>> def test_gen():
    ...     yield 0
    ...     return 1

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     for i in test_gen():
    ...         print('value', i)
    ...     x = 123

    >>> reset_Breakpoint()
    >>> with PdbTestInput(['break test_gen',
    ...                    'continue',
    ...                    'next',
    ...                    'next',
    ...                    'next',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(3)test_function()
    -> for i in test_gen():
    (Pdb) break test_gen
    Breakpoint 1 at <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>:1
    (Pdb) continue
    > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>(2)test_gen()
    -> yield 0
    (Pdb) next
    value 0
    > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>(3)test_gen()
    -> return 1
    (Pdb) next
    Internal StopIteration: 1
    > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(3)test_function()
    -> for i in test_gen():
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(5)test_function()
    -> x = 123
    (Pdb) continue
    Nr$   r$   r   r   +test_pdb_next_command_in_generator_for_looprl   ]  r'   r   c                      dS )a  The next command in a generator with a subiterator.

    >>> def test_subgenerator():
    ...     yield 0
    ...     return 1

    >>> def test_gen():
    ...     x = yield from test_subgenerator()
    ...     return x

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     for i in test_gen():
    ...         print('value', i)
    ...     x = 123

    >>> with PdbTestInput(['step',
    ...                    'step',
    ...                    'next',
    ...                    'next',
    ...                    'next',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_next_command_subiterator[2]>(3)test_function()
    -> for i in test_gen():
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_next_command_subiterator[1]>(1)test_gen()
    -> def test_gen():
    (Pdb) step
    > <doctest test.test_pdb.test_pdb_next_command_subiterator[1]>(2)test_gen()
    -> x = yield from test_subgenerator()
    (Pdb) next
    value 0
    > <doctest test.test_pdb.test_pdb_next_command_subiterator[1]>(3)test_gen()
    -> return x
    (Pdb) next
    Internal StopIteration: 1
    > <doctest test.test_pdb.test_pdb_next_command_subiterator[2]>(3)test_function()
    -> for i in test_gen():
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_next_command_subiterator[2]>(5)test_function()
    -> x = 123
    (Pdb) continue
    Nr$   r$   r   r   !test_pdb_next_command_subiteratorrn     r'   r   c                      dS )a\  Test for reference leaks when the SIGINT handler is set.

    >>> def test_function():
    ...     i = 1
    ...     while i <= 2:
    ...         sess = pdb.Pdb()
    ...         sess.set_trace(sys._getframe())
    ...         print('pdb %d: %s' % (i, sess._previous_sigint_handler))
    ...         i += 1

    >>> reset_Breakpoint()
    >>> with PdbTestInput(['continue',
    ...                    'continue']):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
    -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
    (Pdb) continue
    pdb 1: <built-in function default_int_handler>
    > <doctest test.test_pdb.test_pdb_issue_20766[0]>(6)test_function()
    -> print('pdb %d: %s' % (i, sess._previous_sigint_handler))
    (Pdb) continue
    pdb 2: <built-in function default_int_handler>
    Nr$   r$   r   r   test_pdb_issue_20766rp     r'   r   c                      dS )aN  echo breakpoints cleared with filename:lineno

    >>> def test_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     print(1)
    ...     print(2)
    ...     print(3)
    ...     print(4)
    >>> reset_Breakpoint()
    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     'break 3',
    ...     'clear <doctest test.test_pdb.test_pdb_issue_43318[0]>:3',
    ...     'continue'
    ... ]):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_issue_43318[0]>(3)test_function()
    -> print(1)
    (Pdb) break 3
    Breakpoint 1 at <doctest test.test_pdb.test_pdb_issue_43318[0]>:3
    (Pdb) clear <doctest test.test_pdb.test_pdb_issue_43318[0]>:3
    Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_issue_43318[0]>:3
    (Pdb) continue
    1
    2
    3
    4
    Nr$   r$   r   r   test_pdb_issue_43318rr     r'   r   c                      dS )a  See GH-91742

    >>> def test_function():
    ...    __author__ = "pi"
    ...    __version__ = "3.14"
    ...
    ...    def about():
    ...        '''About'''
    ...        print(f"Author: {__author__!r}",
    ...            f"Version: {__version__!r}",
    ...            sep=" ")
    ...
    ...    import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...    about()


    >>> reset_Breakpoint()
    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     'step',
    ...     'next',
    ...     'next',
    ...     'jump 5',
    ...     'continue'
    ... ]):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(12)test_function()
    -> about()
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(5)about()
    -> def about():
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(7)about()
    -> print(f"Author: {__author__!r}",
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(8)about()
    -> f"Version: {__version__!r}",
    (Pdb) jump 5
    > <doctest test.test_pdb.test_pdb_issue_gh_91742[0]>(5)about()
    -> def about():
    (Pdb) continue
    Author: 'pi' Version: '3.14'
    Nr$   r$   r   r   test_pdb_issue_gh_91742rt     r'   r   c                      dS )a  See GH-94215

    Check that frame_setlineno() does not leak references.

    >>> def test_function():
    ...    def func():
    ...        def inner(v): pass
    ...        inner(
    ...             42
    ...        )
    ...
    ...    import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...    func()

    >>> reset_Breakpoint()
    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     'step',
    ...     'next',
    ...     'next',
    ...     'jump 3',
    ...     'next',
    ...     'next',
    ...     'jump 3',
    ...     'next',
    ...     'next',
    ...     'jump 3',
    ...     'continue'
    ... ]):
    ...     test_function()
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(9)test_function()
    -> func()
    (Pdb) step
    --Call--
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(2)func()
    -> def func():
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(3)func()
    -> def inner(v): pass
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(4)func()
    -> inner(
    (Pdb) jump 3
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(3)func()
    -> def inner(v): pass
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(4)func()
    -> inner(
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(5)func()
    -> 42
    (Pdb) jump 3
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(3)func()
    -> def inner(v): pass
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(4)func()
    -> inner(
    (Pdb) next
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(5)func()
    -> 42
    (Pdb) jump 3
    > <doctest test.test_pdb.test_pdb_issue_gh_94215[0]>(3)func()
    -> def inner(v): pass
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_issue_gh_94215rv     r'   r   c                      dS )a  See GH-101673

    Make sure ll won't revert local variable assignment

    >>> def test_function():
    ...    a = 1
    ...    import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()

    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     '!a = 2',
    ...     'll',
    ...     'p a',
    ...     'continue'
    ... ]):
    ...     test_function()
    --Return--
    > <doctest test.test_pdb.test_pdb_issue_gh_101673[0]>(3)test_function()->None
    -> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    (Pdb) !a = 2
    (Pdb) ll
      1         def test_function():
      2            a = 1
      3  ->        import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    (Pdb) p a
    2
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_issue_gh_101673rx   [  r'   r   c                      dS )a!  See GH-101517

    Make sure pdb doesn't crash when the exception is caught in a try/except* block

    >>> def test_function():
    ...     try:
    ...         raise KeyError
    ...     except* Exception as e:
    ...         import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()

    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     'continue'
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_issue_gh_101517[0]>(4)test_function()
    -> except* Exception as e:
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_issue_gh_101517rz   x  r'   r   c                      dS )a  See GH-103225

    Make sure longlist uses 1-based line numbers in frames that correspond to a module

    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     'longlist',
    ...     'continue'
    ... ]):
    ...     a = 1
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     b = 2
    > <doctest test.test_pdb.test_pdb_issue_gh_103225[0]>(7)<module>()
    -> b = 2
    (Pdb) longlist
      1     with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
      2         'longlist',
      3         'continue'
      4     ]):
      5         a = 1
      6         import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
      7  ->     b = 2
    (Pdb) continue
    Nr$   r$   r   r   test_pdb_issue_gh_103225r|     r'   r   c                   L   e Zd Zd Z ej        ej        j        d          d)d            Z	d)dZ
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'e(j)        d#             Z*d$ Z+d% Z,d& Z-d' Z.d(S )*PdbTestCasec                 B    t          j        t           j                   d S r   r   unlinkTESTFNr   s    r   tearDownzPdbTestCase.tearDown      )*****r   z'PYTHONSAFEPATH changes default sys.pathr   c           	      @   |                      t          j        d           t          j        ddg|z   }t          j        |t
          j        t
          j        t
          j        i t          j
        ddi          5 }|                    t                              |                    \  }}d d d            n# 1 swxY w Y   |ot                              |          }|ot                              |          }|                     |j        |d| d|            ||fS )	N__pycache__-mrR   PYTHONIOENCODINGutf-8stdoutr   stderrenvzUnexpected return code
stdout: z	
stderr: )
addCleanupr   rmtreer   
executable
subprocessPopenPIPESTDOUTosenvironcommunicatestrencodebytesdecodeassertEqual
returncode)r   pdb_argscommandsexpected_returncodecmdprocr   r   s           r   _run_pdbzPdbTestCase._run_pdb  sc    		(-888~tU+h6! o!(AA%7AA
 
 
 	D !--cjj.B.BCCNFF	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 0ELL000ELL00OIvIIII	
 	
 	

 v~s   :1B77B;>B;c                    d}t          |d          5 }|                    t          j        |                     ddd           n# 1 swxY w Y   |                     t
          j        |           |                     |g||          S )z3Run 'script' lines with pdb and the pdb 'commands'.main.pywN)openwritetextwrapdedentr   r   r   r   )r   scriptr   r   filenamefs         r   run_pdb_scriptzPdbTestCase.run_pdb_script  s    (C   	-AGGHOF++,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-	((333}}hZ3FGGGs   (AAAc                    d| _         t          j        | j                    | j         dz   }| j         dz   }t          j        | j                    t          |d          5 }	 ddd           n# 1 swxY w Y   t          |d          5 }|                    t          j        |                     ddd           n# 1 swxY w Y   | 	                    t          j        | j                    | 
                    d| j         g|          S )z(Runs the script code as part of a modulet_main/__main__.py/__init__.pyr   Nr   )module_namer   r   r   mkdirr   r   r   r   r   r   )r   r   r   	main_file	init_filer   s         r   run_pdb_modulezPdbTestCase.run_pdb_module  sd   #)***$~5	$~5	
!""")S!! 	Q	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)S!! 	-QGGHOF++,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-	($*:;;;}}dD$45x@@@s$   A,,A03A0(B;;B?B?c                 8   t          t          j        d          5 }|                    |           d d d            n# 1 swxY w Y   |sd n|d         t          j        |d         f}|                     |t          j        |t          j                             d S )Nwbr      )r   r   r   r   r   rR   find_function)r   file_content	func_nameexpectedr   s        r   _assert_find_functionz!PdbTestCase._assert_find_function  s    )"D)) 	"QGGL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"  ( 844QK)8A;.8c'	93CDD	F 	F 	F 	F 	F   =AAc                 4    |                      ddd            d S )Nr   foo)r   r   s    r   test_find_function_empty_filez)PdbTestCase.test_find_function_empty_file  s     ""3t44444r   c                 X    |                      d                                dd           d S )Nu@   def foo():
    pass

def bœr():
    pass

def quux():
    pass
   bœr)r      r   r   r   s    r   test_find_function_foundz$PdbTestCase.test_find_function_found  s:    ""	 FHH	
 	
 	
 	
 	
r   c                 Z    |                      d                    d          dd           d S )NuV   # coding: iso-8859-15
def foo():
    pass

def bœr():
    pass

def quux():
    pass
ziso-8859-15r   )r      r   r   s    r   -test_find_function_found_with_encoding_cookiez9PdbTestCase.test_find_function_found_with_encoding_cookie  s>    ""
 F=	
 	
 	
 	
 	
r   c                 r    |                      t          j        d                                z   dd           d S )Nu   def bœr():
    pass
r   )r   r   )r   codecsBOM_UTF8r   r   s    r   !test_find_function_found_with_bomz-PdbTestCase.test_find_function_found_with_bom  sF    ""O  FHH 	
 	
 	
 	
 	
r   c                    t          t          j        d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        ddt          j        g}t          j        |t          j        t          j        t          j	                  }| 
                    |j        j                   |                    d          \  }}|                     d|d           d S )	Nr   s   print("testing my pdb")
r   rR   r   r   r   s   quit
s   SyntaxErrorz0Got a syntax error running test script under PDB)r   r   r   r   r   r   r   r   r   r   r   r   closer   assertNotInr   r   r   r   r   r   s         r   test_issue7964zPdbTestCase.test_issue7964  s   )"D)) 	4QGG2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4~tUI,<=?/$  
 	)***)))44K	M 	M 	M 	M 	Mr   c                     d}d}|                      ||          \  }}|pd|pdz   }|                     d|d           |                     d|d           d S )Nz
            def do_testcmdwithnodocs(self, arg):
                pass

            import pdb
            pdb.Pdb.do_testcmdwithnodocs = do_testcmdwithnodocs
        zA
            continue
            help testcmdwithnodocs
         AttributeErrorzCCalling help on a command with no docs should be handled gracefullyz;*** No help for 'testcmdwithnodocs'; __doc__ string missingz<Calling help on a command with no docs should print an error)r   r   assertIn)r   r   r   r   r   outputs         r   test_issue46434zPdbTestCase.test_issue46434  s     ,,VX>>,B6<R0)6^	` 	` 	`SU[T	V 	V 	V 	V 	Vr   c                    d}d}d}t          dd          5 }|                    t          j        |                     d d d            n# 1 swxY w Y   |                     t
          j        d           |                     ||          \  }}|                     t          d |
                                D                       d           d S )Nz
            from bar import bar

            def foo():
                bar()

            def nope():
                pass

            def foobar():
                foo()
                nope()

            foobar()
        z
            from bar import bar
            break bar
            continue
            step
            step
            quit
        z5
            def bar():
                pass
        zbar.pyr   c              3      K   | ]}d |v V  	dS )zmain.py(5)foo()->NoneNr$   .0ls     r   	<genexpr>z.PdbTestCase.test_issue13183.<locals>.<genexpr>S  s(      JJ'1,JJJJJJr   z+Fail to step into the caller after a return)r   r   r   r   r   r   r   r   
assertTrueany
splitlines)r   r   r   barr   r   r   s          r   test_issue13183zPdbTestCase.test_issue131832  s    (C   	*AGGHOC(()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*	((333,,VX>>JJf6G6G6I6IJJJJJ9	; 	; 	; 	; 	;s   (AAAc           	      :   t          t          j        d          5 }|                    t	          j        d                              d                     d d d            n# 1 swxY w Y   t          j        dt          j        g}t          j
        |t          j        t          j        t          j        i t          j        ddi          }|                     |j        j                   |                    d          \  }}|                     d	|d
           d S )Nr   a  
                import threading
                import pdb

                def start_pdb():
                    pdb.Pdb(readrc=False).set_trace()
                    x = 1
                    y = 1

                t = threading.Thread(target=start_pdb)
                t.start()ascii-ur   r   r   s   cont
   Error*Got an error running test script under PDBr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s         r   test_issue13120zPdbTestCase.test_issue13120V  sN    )"D)) 	/QGGHO 
% 
 
 %fWoo
/ 
/ 
/	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ ~tY%56?/$;2:;17;;	   	)***)))446E	G 	G 	G 	G 	G   ;A""A&)A&c           	      :   t          t          j        d          5 }|                    t	          j        d                              d                     d d d            n# 1 swxY w Y   t          j        dt          j        g}t          j
        |t          j        t          j        t          j        i t          j        ddi          }|                     |j        j                   |                    d          \  }}|                     d	|d
           d S )Nr   a  
                import threading
                import pdb

                evt = threading.Event()

                def start_pdb():
                    evt.wait()
                    pdb.Pdb(readrc=False).set_trace()

                t = threading.Thread(target=start_pdb)
                t.start()
                pdb.Pdb(readrc=False).set_trace()
                evt.set()
                t.join()r   r   r   r   r   s
   cont
cont
r   r   r   r   s         r   test_issue36250zPdbTestCase.test_issue36250r  sL   )"D)) 	.QGGHO %   $VG__. . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.  ~tY%56?/$=RZ=!3W==	   	)***))/::6E	G 	G 	G 	G 	Gr   c                     d}d}d}|                      ||d          \  }}|                     ||d                    ||                     d S )Nzdef f: pass
r   zSyntaxError:r   r   zE

Expected:
{}
Got:
{}
Fail to handle a syntax error in the debuggee.)r   r   format)r   r   r   r   r   r   s         r   test_issue16180zPdbTestCase.test_issue16180  sp     !,,H! - 
 
 	h=VHf%%	' 	' 	' 	' 	'r   c                     d}d}|                      ||          \  }}d                    d |                                D                       }|                     |d           |                     |d           d S )Nzprint('hello')z[
            continue
            run a b c
            run d e f
            quit
        
c                 6    g | ]}|                                 S r$   )strip)r   xs     r   
<listcomp>z/PdbTestCase.test_issue26053.<locals>.<listcomp>  s     @@@q@@@r   z#Restarting .* with arguments:
a b cz#Restarting .* with arguments:
d e f)r   joinr   assertRegex)r   r   r   r   r   ress         r   test_issue26053zPdbTestCase.test_issue26053  s    ! ,,VX>>ii@@F,=,=,?,?@@@AADEEEDEEEEEr   c                 $   t          j        d          }t          j                            dd           }	 t          j                    5  t          dd          5 }|                    d           d d d            n# 1 swxY w Y   t          dd          5 }|                    |           d d d            n# 1 swxY w Y   t          j
        dg}t          j        |t          j        t          j        t          j                  }|5  |                    d          \  }}|                     d	|           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   ||t          j        d<   d S d S # ||t          j        d<   w xY w)
Nz_
            import pdb; pdb.Pdb(readrc=False).set_trace()

            print('hello')
        HOME.pdbrcr   zinvalid
r   r   s   q
s(   NameError: name 'invalid' is not defined)r   r   r   r   popr   temp_cwdr   r   r   r   r   r   r   r   r   )r   r   	save_homer   r   r   r   r   s           r   test_readrc_kwargzPdbTestCase.test_readrc_kwarg  s    "   JNN6400		/#%% * *(C(( )AGGK((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) )S)) $QGGFOOO$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~y1!'%?$/%?	    * *%)%5%5f%=%=NFF$$%P"(* * ** * * * * * * * * * * * * * ** * * * * * * * * * * * * * *( $%.
6""" %$y$%.
6"....s   E< 	EA<0E<B 	 EB 	EB9-E9B=	=E B=	A	E
/E9EE			EE		EE< E  E< #E $E< <Fc                    t           j                            dd           }t          j                    5 }t          d          5  t           j                            |d          }|t           j        j        _	        	 t          |d          5 }|                    d           d d d            n# 1 swxY w Y   |                     t          j                    j        d         d           ||t           j        d<   n# ||t           j        d<   w xY wd d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   zos.path.expanduserr  r   invalidr   )r   r   r  r   temp_dirr	   pathr   
expanduserreturn_valuer   r   r   rR   rS   rcLines)r   r  r  rc_pathr   s        r   test_readrc_homedirzPdbTestCase.test_readrc_homedir  s   JNN6400	!! 		3Xu5I/J/J 		3 		3gll8X66G.5BG+3'3'' '1GGI&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '  !21!5yAAA()2BJv& ()2BJv&2222		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3sq   D77D<C=B."C=.B22C=5B265C=+D=DDD7D#	#D7&D#	'D77D;>D;c           	      |   t          j        d          }t          j                            dd           }	 t          j                    5  t          ddd          5 }|                    d           d d d            n# 1 swxY w Y   t          ddd          5 }|                    |           d d d            n# 1 swxY w Y   t          j
        dg}d	d
i}t          j        dk    rd|d<   t          j        |t          j        t          j        t          j        i t          j        |          }|5  |                    d          \  }}|                     d|           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   ||t          j        d<   d S d S # ||t          j        d<   w xY w)NzR
            import pdb; pdb.Pdb().set_trace()
            print('hello')
        r   r  r   r   )encodingu	   Françaisr   r   r   win32znon-empty-stringPYTHONLEGACYWINDOWSSTDIOr   s   c
si   UnicodeEncodeError: 'ascii' codec can't encode character '\xe7' in position 21: ordinal not in range(128))r   r   r   r   r  r   r  r   r   r   r   platformr   r   r   r   r   )	r   r   r  r   r   r   r   r   r   s	            r   #test_read_pdbrc_with_ascii_encodingz/PdbTestCase.test_read_pdbrc_with_ascii_encoding  s    "   JNN6400		/#%% b b(C'::: -aGGO,,,- - - - - - - - - - - - - - - )S7;;; $qGGFOOO$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~y1)73<7**6HC23!'%?$/%?-2:--    b b%)%5%5f%=%=NFFMM #YZ`b b bb b b b b b b b b b b b b b b%b b b b b b b b b b b b b b b0 $%.
6""" %$y$%.
6"....s   F( 	FA>2F>B	FB	FB=1F=C	FC	A1F6/E1%F1E5	5F8E5	9F<F( FF( FF( (F;c                    t                      }d}t                      5 }|                    t          d|                     |                    t          j        t
          j        d                     t          j        |           d d d            n# 1 swxY w Y   |                     |	                                |dz              d S )Nz"Nobody expects... blah, blah, blahz
sys.stdout	set_trace)headerr   )
r   r   enter_contextr	   objectrR   rS   r  r   getvalue)r   r   r  	resourcess       r   test_headerzPdbTestCase.test_header  s    5[[ 	)I##E,$?$?@@@##EL+$F$FGGGM((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	**FTM:::::s   A+BBBc                     d}d}|                      ||          \  }}|                     t          d |                                D                       |           d S )Nzprint("SUCCESS")/
            continue
            quit
        c              3      K   | ]}d |v V  	dS SUCCESSNr$   r   s     r   r   z.PdbTestCase.test_run_module.<locals>.<genexpr>
  &      HHqINHHHHHHr   r   r   r   r   r   r   r   r   r   s        r   test_run_modulezPdbTestCase.test_run_module  sf    ' ,,VX>>HHF4E4E4G4GHHHHH&QQQQQr   c                     d}d}|                      ||          \  }}|                     t          d |                                D                       |           d S )NzQ
            if __name__ == '__main__':
                print("SUCCESS")
        r  c              3      K   | ]}d |v V  	dS r   r$   r   s     r   r   z9PdbTestCase.test_module_is_run_as_main.<locals>.<genexpr>  r"  r   r#  r$  s        r   test_module_is_run_as_mainz&PdbTestCase.test_module_is_run_as_main  sh     ,,VX>>HHF4E4E4G4GHHHHH&QQQQQr   c                 <   d}d}|                      ||          \  }}|                     t          d |                                D                       |           |                     t	          d |                                D                       |           d S )Nz{
            if __name__ == '__main__':
                pass
                print("SUCCESS")
                pass
        z*
            b 3
            quit
        c              3      K   | ]}d |v V  	dS )zBreakpoint 1 atNr$   r   s     r   r   z.PdbTestCase.test_breakpoint.<locals>.<genexpr>$  (      PPq-2PPPPPPr   c              3      K   | ]}d |vV  	dS r   r$   r   s     r   r   z.PdbTestCase.test_breakpoint.<locals>.<genexpr>%  s'      LL1IQ.LLLLLLr   )r   r   r   r   allr$  s        r   test_breakpointzPdbTestCase.test_breakpoint  s     ,,VX>>PPF<M<M<O<OPPPPPRXYYYLL8I8I8K8KLLLLLfUUUUUr   c                     d}|                      ddg|          \  }}|                     t          j        |                    dd                     d S )Nz(
            c
            quit
        r   rR   r   )r   r   rR   _usagereplace)r   r   r   r   s       r   test_run_pdb_with_pdbz!PdbTestCase.test_run_pdb_with_pdb'  s\     e}h??JNN4$$	
 	
 	
 	
 	
r   c                    d}t          j        |           |dz   }t          j        |           t	          |d          5  	 d d d            n# 1 swxY w Y   |                     t           j        |           |                     d|gdd          \  }}|                     d|                                           d S )	Nr   r   r   r   r   r   r   z,ImportError: No module named t_main.__main__)	r   r   r   r   r   r   r   r   r   )r   r   r   r   r   s        r   test_module_without_a_mainz&PdbTestCase.test_module_without_a_main2  s   %%%.0	
)S!! 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 		(+666; ' 
 
 	D''))	+ 	+ 	+ 	+ 	+s    AAAc                    d}d}t          j        |           |dz   |z   }t          j        |           t	          |dz   d          5  	 d d d            n# 1 swxY w Y   |                     t           j        |           |                     d|                    dd          gdd	
          \  }}|                     d|           d S )Nt_pkgr   /r   r   r   .r   r   r   z;'t_pkg.t_main' is a package and cannot be directly executed)	r   r   r   makedirsr   r   r   r2  r   )r   pkg_namer   modpathr   r   s         r   test_package_without_a_mainz'PdbTestCase.test_package_without_a_main@  s   """S.;.
G'N*C00 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 		((3337??3,,-rq ' 
 
 	I	 	 	 	 	s   AAAc                     d}d}|                      ||          \  }}|                     t          d |                                D                       |           d S )NzY
                #This is a comment, on line 2

                print("SUCCESS")
        z
            quit
        c              3      K   | ]}d |v V  	dS )z__main__.py(4)<module>()Nr$   r   s     r   r   z=PdbTestCase.test_blocks_at_first_code_line.<locals>.<genexpr>Z  s>       ? ?%& 7 ! ? ? ? ? ? ?r   r#  r$  s        r   test_blocks_at_first_code_linez*PdbTestCase.test_blocks_at_first_code_lineP  s    
 ,,VX>> ? ?*0*;*;*=*=? ? ? ? ?@F	H 	H 	H 	H 	Hr   c                    d| _         t          j        | j                    | j         dz   }| j         dz   }| j         dz   }|                     t          j        | j                    t	          j        | j                    t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   d	}| 
                    d
| j         g|          \  }}|                     t          d |                                D                       |           |                     t          d |                                D                                  |                     t          d |                                D                                  d S )Nr   r   r   
/module.pyr   6
                top_var = "VAR from top"
            z
                from . import top_var
                from .module import var
                from . import module
                pass # We'll stop here and print the vars
            zY
                var = "VAR from module"
                var2 = "second var"
            zz
            b 5
            c
            p top_var
            p var
            p module.var2
            quit
        r   c              3      K   | ]}d |v V  	dS zVAR from moduleNr$   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>~  r+  r   c              3      K   | ]}d |v V  	dS )zVAR from topNr$   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>  s'      MMANa/MMMMMMr   c              3      K   | ]}d |v V  	dS )z
second varNr$   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>  s'      KK!LA-KKKKKKr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   module_filer   r   r   _s           r   test_relative_importsz!PdbTestCase.test_relative_imports]  s   #)***$~5	$~5	&5	($*:;;;
!""")S!! 	QGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 )S!! 	QGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 +s## 	qGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 MM4)9":HEE	PPF<M<M<O<OPPPPPRXYYYMM9J9J9L9LMMMMMNNNKKv7H7H7J7JKKKKKLLLLL6   (CCC(DDD+(EE#&E#c                    d| _         t          j        | j                    | j         dz   }| j         dz   }| j         dz   }|                     t          j        | j                    t	          j        | j                    t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   d	}| 
                    d
| j         dz   g|          \  }}|                     t          d |                                D                       |           d S )Nr   z	/runme.pyr   rB  r   rC  zl
                from . import module
                pass # We'll stop here and print the vars
            z5
                var = "VAR from module"
            zQ
            b 3
            c
            p module.var
            quit
        r   z.runmec              3      K   | ]}d |v V  	dS rE  r$   r   s     r   r   zDPdbTestCase.test_relative_imports_on_plain_module.<locals>.<genexpr>  r+  r   rH  rI  s           r   %test_relative_imports_on_plain_modulez1PdbTestCase.test_relative_imports_on_plain_module  s   #)***${2	$~5	&5	($*:;;;
!""")S!! 	QGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 )S!! 	QGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 +s## 	qGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 MM4)9H)D"ExPP	PPF<M<M<O<OPPPPPRXYYYYYrM  c                     d                     g d          }|                     d|dz             \  }}|                     |                                dd          g d           d S )Nr   )zprint(zdebug print(zdebug doesnotexistcpassr   )
-> passz+(Pdb) *** SyntaxError: '(' was never closed!(Pdb) ENTERING RECURSIVE DEBUGGERz%*** SyntaxError: '(' was never closedLEAVING RECURSIVE DEBUGGERrU  z> <string>(1)<module>()z9((Pdb)) *** NameError: name 'doesnotexist' is not definedrV  (Pdb) r   r   r   r   )r   r   r   rK  s       r   test_errors_in_commandz"PdbTestCase.test_errors_in_command  s    99 
 
 
   ''4@@	**,,QRR0 3
 3
 3
 	 	 	 	 	r   c                 B      fd} |dd            |dd           dS )z.do_run handles exceptions from parsing its argc                     d                     d|  dg          }                    d|dz             \  }}                    |                                dd          dd|  d| d	g           d S )
Nr   zrun qrS  r   rT  z(Pdb) *** Cannot run z: rW  rX  )bad_argmsgr   r   rK  r   s        r   checkz*PdbTestCase.test_issue34266.<locals>.check  s    yy w  "  H ++FHtODDIFAV..0048883887     r   \zNo escaped character"zNo closing quotationNr$   )r   r_  s   ` r   test_issue34266zPdbTestCase.test_issue34266  sJ    
	 
	 
	 
	 
	 	d*+++c)*****r   c                    t          j        d          }d}t          j                    5 }dt          j                            |           }|                     ||          \  }}|                     |	                    d          d         
                    d          |           ddd           dS # 1 swxY w Y   dS )zkWhen running `python foo.py` sys.path[0] is an absolute path. `python -m pdb foo.py` should behave the sameQ
            import sys
            print('sys.path[0] is', sys.path[0])
        c
q(Pdb) sys.path[0] is r      r0  N)r   r   r   r  r   r	  realpathr   r   splitrstrip)r   r   r   cwdr   r   r   s          r   test_issue42384zPdbTestCase.test_issue42384  s    "   !! 	KSFrw/?/?/D/DFFH!00BBNFFV\\$//299$??JJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   A>B55B9<B9c                    t          j        d          }d}t          j                    5 }t          j                            |          }t          j                            |d          }t          j                            |d          }d| }t	          j        |           t          t          j                            |d          d          5 }|
                    |           ddd           n# 1 swxY w Y   t	          j        |           t	          j        t          j                            |d          t          j                            |d                     |                     t          j                            dd          g|          \  }}	|                     |                    d	          d
                             d          |           ddd           dS # 1 swxY w Y   dS )ziWhen running `python foo.py` sys.path[0] resolves symlinks. `python -m pdb foo.py` should behave the samerd  re  dir_onedir_tworf  foo.pyr   Nr   rg  r0  )r   r   r   r  r   r	  rh  r   r   r   r   symlinkr   r   ri  rj  )
r   r   r   rk  rn  ro  r   r   r   r   s
             r   test_issue42384_symlinkz#PdbTestCase.test_issue42384_symlink  s#     "   !! 	KS'""3''Cgll3	22Ggll3	22G8w88HHWbgll7H55s;;  q                             HWJrw||GX66Wh8W8WXXX!]]BGLLH,M,M+NPXYYNFFV\\$//299$??JJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks7   B'G*C3'G*3C7	7G*:C7	;C"G**G.1G.c                 B   t          j                    5 }t          dd          5 }t          j        d          }|                    |           d d d            n# 1 swxY w Y   t          j                            |d          }t          j	        |           t          j	        t          j                            |d                     t          j                            |d          }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   | 
                    dgd          \  }}d}|                     |                    d          d	                             d
          |           d d d            d S # 1 swxY w Y   d S )Nrp  r   z
                    print('The correct file was executed')

                    import os
                    os.chdir("subdir")
                subdirz$print("The wrong file was executed")zc
c
qz#(Pdb) The correct file was executedr      r0  )r   r  r   r   r   r   r   r	  r   r   r   r   ri  rj  )	r   rk  r   srt  
wrong_filer   r   r   s	            r   test_issue42383zPdbTestCase.test_issue42383  sD   !! 	KSh$$ O %   


               W\\#x00FHVHRW\\&(33444fh77Jj#&& @!>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ "]]H:yAANFF<HV\\$//299$??JJJ)	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	KsZ   F*AFA	F"A	#BF<DFD"	"F%D"	&A!FFFc                     d}t          j        d          }|                     ||          \  }}|                     |           d S )Nz            def func():
                def inner(v): pass
                inner(
                    42
                )
            func()
        zj
            break func
            continue
            next
            next
            jump 2
        )r   r   r   assertFalser$  s        r   test_gh_94215_crashzPdbTestCase.test_gh_94215_crash	  sV     ? $   ,,VX>>     r   c                 0   d}d}d}t          dd          5 }|                    t          j        |                     d d d            n# 1 swxY w Y   t          dd          5 }|                    t          j        |                     d d d            n# 1 swxY w Y   |                     t
          j        d           |                     t
          j        d           |                     dg|          \  }}|                     d|d           d S )	Nza
        def func():
            x = "Sentinel string for gh-93696"
            print(x)
        aL  
        import os
        import sys

        def _create_fake_frozen_module():
            with open('gh93696.py') as f:
                src = f.read()

            # this function has a co_filename as if it were in a frozen module
            dummy_mod = compile(src, "<frozen gh93696>", "exec")
            func_code = dummy_mod.co_consts[0]

            mod = type(sys)("gh93696")
            mod.func = type(lambda: None)(func_code, mod.__dict__)
            mod.__file__ = 'gh93696.py'

            return mod

        mod = _create_fake_frozen_module()
        mod.func()
        zf
            break 20
            continue
            step
            list
            quit
        z
gh93696.pyr   zgh93696_host.pyz"x = "Sentinel string for gh-93696"zSentinel statement not found)	r   r   r   r   r   r   r   r   r   )r   
frozen_srchost_programr   r   r   r   s          r   test_gh_93696_frozen_listz%PdbTestCase.test_gh_93696_frozen_list	  s   

* ,$$ 	1GGHOJ//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 #S)) 	3QGGHOL11222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 		(,777	(*;<<<(9':HEE:FDbcccccs#   (AAA&(BB!Bc                 L   t           j                            t           j                            t                    d          }t          j        |          D ]L}|                    d          r5|                     t           j                            ||          gd           Md S )Nencoded_modulesz.pyr\  )r   r	  r   dirname__file__listdirendswithr   )r   
script_dirr   s      r   test_non_utf8_encodingz"PdbTestCase.test_non_utf8_encodingI	  s    W\\"'//(";";=NOO

:.. 	I 	IH  '' Irw||JAABCHHH	I 	Ir   N)r   )/r    r!   r"   r   unittestskipIfr   flags	safe_pathr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r(  r.  r3  r5  r=  r@  rL  rP  rY  rb  rl  r   skip_unless_symlinkrr  rx  r{  r  r  r$   r   r   r~   r~     s       + + + X_SY(>@ @  @ @(H H H HA A AF F F5 5 5
 
 
 
 
 
"
 
 
M M MV V V*"; "; ";HG G G8G G G<' ' 'F F F/ / /@3 3 3 /  /  /D; ; ;R R R
R 
R 
RV V V	
 	
 	
+ + +   H H H#M #M #MJZ Z Z>  0+ + + K K K "K K #"K0K K K.! ! !&,d ,d ,d\I I I I Ir   r~   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )ChecklineTestsc                 ,    t          j                     d S r   )	linecache
clearcacher   s    r   setUpzChecklineTests.setUpP	  s    r   c                 B    t          j        t           j                   d S r   r   r   s    r   r   zChecklineTests.tearDownS	  r   r   c                 "   t          t          j        d          5 }|                    d           d d d            n# 1 swxY w Y   t	          j                    }|                     |                    t          j        d          d           d S Nr   z
print(123)r   )r   r   r   r   rR   rS   r   	checkliner   r   dbs      r   test_checkline_before_debuggingz.ChecklineTests.test_checkline_before_debuggingV	  s    )"C(( 	"AGGL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"WYYi&6::A>>>>>r   c                 J   t          t          j        d          5 }|                    d           d d d            n# 1 swxY w Y   t	          j                    }|                                 |                     |                    t          j        d          d           d S r  )	r   r   r   r   rR   rS   resetr   r  r  s      r   test_checkline_after_resetz)ChecklineTests.test_checkline_after_reset\	  s    )"C(( 	"AGGL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"WYY



i&6::A>>>>>r   c                    t          j        d          }t          t          j        d          5 }|                    |           d d d            n# 1 swxY w Y   t          |                                          dz   }t          t                                5  t          j                    }t          |          D ]5}|                     |                    t          j        |                     6	 d d d            d S # 1 swxY w Y   d S )Nz\
            # Comment
            """ docstring """
            ''' docstring '''

        r   rg  )r   r   r   r   r   r   lenr   r   r   rR   rS   rangerz  r  )r   rv  r   	num_linesr  linenos         r    test_checkline_is_not_executablez/ChecklineTests.test_checkline_is_not_executablec	  s   O    )"C(( 	AGGAJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	''!+	XZZ(( 	I 	IB	** I I  i.>!G!GHHHHI	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is$   AAAADD	DN)r    r!   r"   r  r   r  r  r  r$   r   r   r  r  O	  sd          + + +? ? ?? ? ?I I I I Ir   r  c                 `    ddl m} |                    t          j        |                     |S )Nr   )test_pdb)testr  addTestdoctestDocTestSuite)loadertestspatternr  s       r   
load_testsr  t	  s6    	MM'&x00111Lr   __main__)Ir  r   rR   r   typesr   r  r   r   r  
contextlibr   r   ior   r  r   test.supportr   test.test_doctestr   unittest.mockr	   r  r   r&   r)   r.   r0   r2   r4   r6   r:   r<   r>   r@   rB   rD   rF   rH   
ModuleTypemodexec__dict__rK   rM   rV   rX   rZ   r\   r^   r`   rb   rd   rf   rh   rj   rl   rn   rp   rr   rt   rv   rx   rz   r|   requires_subprocessTestCaser~   r  r  r    mainr$   r   r   <module>r     s?    				 



 



             1 1 1 1 1 1 1 1             " " " " " " ( ( ( ( ( (      * * * * *6 * * *"  :S S Sj& & &s s sjA A AF  8	 	 	  ] ] ]~( ( (T0 0 0d' ' 'R9 9 9v; ; ;|  0 e'(( =s| L L L( ( (V' ' 'T? ? ?
     ,> > >@9 9 9v6 6 6p; ; ;z5 5 5n( ( (T* * *X- - -^( ( (T- - -^  2  :+ + +Z@ @ @D  :  (  4 f
I f
I f
I f
I f
I(# f
I f
I f
IP"I "I "I "I "IX& "I "I "IJ   zHMOOOOO r   