
    daf_                    4   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mZ d dlmZ ej4                   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,d Z-d Z. ej^                  d      Z0 e1de0jd                         d Z3d Z4d  Z5d! Z6d" Z7d# Z8d$ Z9esd% Z:d& Z;d' Z<esd( Z=d) Z>esd* Z?d+ Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZGd3 ZHd4 ZId5 ZJd6 ZK ej                          G d7 d8ej                               ZN G d9 d:ej                        ZO ej                          G d; d<ej                               ZPd= ZQeRd>k(  r ej                          yy)?    N)	ExitStackredirect_stdout)StringIO)support)	os_helper)import_module)run_pty	FakeInput)patchc                   "    e Zd ZdZd Zd Zd Zy)PdbTestInputz:Context manager that makes testing Pdb in doctests easier.c                     || _         y N)input)selfr   s     (/root/Python-3.12.4/Lib/test/test_pdb.py__init__zPdbTestInput.__init__   s	    
    c                     t         j                  | _        t        | j                        t         _        t        t         d      rt        j                         | _        y d | _        y )Ngettrace)sysstdin
real_stdinr
   r   hasattrr   
orig_tracer   s    r   	__enter__zPdbTestInput.__enter__    s9    ))djj)	,3C,D#,,.$r   c                     | j                   t        _        | j                  r t        j                  | j                         y y r   )r   r   r   r   settrace)r   excs     r   __exit__zPdbTestInput.__exit__%   s)    OO	??LL) r   N)__name__
__module____qualname____doc__r   r   r!    r   r   r   r      s    DO
*r   r   c                       y)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                       y)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+   H   r)   r   c                  @    dd l } | j                  j                          y )Nr   )bdb
BreakpointclearBreakpoints)r-   s    r   reset_Breakpointr0      s    NN##%r   c                       y)a  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',
    ...     'break 4, +',
    ...     'disable 1',
    ...     'ignore 1 10',
    ...     'condition 1 1 < 2',
    ...     'condition 1 1 <',
    ...     '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
    ...     'break 6, undefined', # condition causing `NameError` during evaluation
    ...     'continue', # will stop, ignoring runtime error
    ...     '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) break 4, +
    *** Invalid condition +: SyntaxError: invalid syntax
    (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) condition 1 1 <
    *** Invalid condition 1 <: SyntaxError: invalid syntax
    (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) break 6, undefined
    Breakpoint 5 at <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>:6
    (Pdb) continue
    3
    > <doctest test.test_pdb.test_pdb_breakpoint_commands[0]>(6)test_function()
    -> print(4)
    (Pdb) continue
    4
    Nr&   r&   r   r   test_pdb_breakpoint_commandsr2      r)   r   c                       y)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:...
    (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_sessionsr4   c  r)   r   c                       y)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_excr6     r)   r   c                       y r   r&   r&   r   r   
do_nothingr8     s    r   c                      t        d       y )N*   )printr&   r   r   do_somethingr<     s	    	"Ir   c                       y)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                       y)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                       y)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 +',
    ...     'display',
    ...     'display a',
    ...     'n',
    ...     'display',
    ...     'undisplay a',
    ...     'n',
    ...     'display a',
    ...     'undisplay',
    ...     'display a < 1',
    ...     'n',
    ...     'display undefined',
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_display_command[0]>(4)test_function()
    -> a = 1
    (Pdb) display +
    *** Unable to display +: SyntaxError: invalid syntax
    (Pdb) display
    No expression is being displayed
    (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) display undefined
    display undefined: ** raised NameError: name 'undefined' is not defined **
    (Pdb) continue
    Nr&   r&   r   r   test_pdb_display_commandrB   Q  r)   r   c                       y)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',
    ...     'alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")',
    ...     'alias ps pi self',
    ...     'alias ps',
    ...     'pi o',
    ...     's',
    ...     'ps',
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_alias_command[1]>(4)test_function()
    -> o.method()
    (Pdb) alias pi
    *** Unknown alias 'pi'
    (Pdb) alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")
    (Pdb) alias ps pi self
    (Pdb) alias ps
    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_commandrD     r)   r   c                       y)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_commandrF     r)   r   c                       y)a
  Test convenience variables

    >>> def util_function():
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     try:
    ...         raise Exception('test')
    ...     except:
    ...         pass
    ...     return 1

    >>> def test_function():
    ...     util_function()

    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...     '$_frame.f_lineno', # Check frame convenience variable
    ...     '$ _frame',         # This should be a syntax error
    ...     '$a = 10',          # Set a convenience variable
    ...     '$a',               # Print its value
    ...     'p "$a"',           # Print the string $a
    ...     'p $a + 2',         # Do some calculation
    ...     'p f"$a = {$a}"',   # Make sure $ in string is not converted and f-string works
    ...     'u',                # Switch frame
    ...     '$_frame.f_lineno', # Make sure the frame changed
    ...     '$a',               # Make sure the value persists
    ...     'd',                # Go back to the original frame
    ...     'next',
    ...     '$a',               # The value should be gone
    ...     'next',
    ...     '$_exception',      # Check exception convenience variable
    ...     'next',
    ...     '$_exception',      # Exception should be gone
    ...     'return',
    ...     '$_retval',         # Check return convenience variable
    ...     'continue',
    ... ]):
    ...     test_function()
    > <doctest test.test_pdb.test_convenience_variables[0]>(3)util_function()
    -> try:
    (Pdb) $_frame.f_lineno
    3
    (Pdb) $ _frame
    *** SyntaxError: invalid syntax
    (Pdb) $a = 10
    (Pdb) $a
    10
    (Pdb) p "$a"
    '$a'
    (Pdb) p $a + 2
    12
    (Pdb) p f"$a = {$a}"
    '$a = 10'
    (Pdb) u
    > <doctest test.test_pdb.test_convenience_variables[1]>(2)test_function()
    -> util_function()
    (Pdb) $_frame.f_lineno
    2
    (Pdb) $a
    10
    (Pdb) d
    > <doctest test.test_pdb.test_convenience_variables[0]>(3)util_function()
    -> try:
    (Pdb) next
    > <doctest test.test_pdb.test_convenience_variables[0]>(4)util_function()
    -> raise Exception('test')
    (Pdb) $a
    *** KeyError: 'a'
    (Pdb) next
    Exception: test
    > <doctest test.test_pdb.test_convenience_variables[0]>(4)util_function()
    -> raise Exception('test')
    (Pdb) $_exception
    Exception('test')
    (Pdb) next
    > <doctest test.test_pdb.test_convenience_variables[0]>(5)util_function()
    -> except:
    (Pdb) $_exception
    *** KeyError: '_exception'
    (Pdb) return
    --Return--
    > <doctest test.test_pdb.test_convenience_variables[0]>(7)util_function()->1
    -> return 1
    (Pdb) $_retval
    1
    (Pdb) continue
    Nr&   r&   r   r   test_convenience_variablesrH     r)   r   c                       y)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_mortemrJ   M  r)   r   c                       y)ah  When pdb returns to a different file, it should not skip if f_trace is
       not already set

    >>> import pprint

    >>> class A:
    ...    def __repr__(self):
    ...        return 'A'

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

    >>> reset_Breakpoint()
    >>> with PdbTestInput([  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    ...     'b A.__repr__',
    ...     'continue',
    ...     'return',
    ...     'next',
    ...     'return',
    ...     'return',
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_return_to_different_file[2]>(3)test_function()
    -> pprint.pprint(A())
    (Pdb) b A.__repr__
    Breakpoint 1 at <doctest test.test_pdb.test_pdb_return_to_different_file[1]>:2
    (Pdb) continue
    > <doctest test.test_pdb.test_pdb_return_to_different_file[1]>(3)__repr__()
    -> return 'A'
    (Pdb) return
    --Return--
    > <doctest test.test_pdb.test_pdb_return_to_different_file[1]>(3)__repr__()->'A'
    -> return 'A'
    (Pdb) next
    > ...pprint.py..._safe_repr()
    -> return rep,...
    (Pdb) return
    --Return--
    > ...pprint.py..._safe_repr()->('A'...)
    -> return rep,...
    (Pdb) return
    --Return--
    > ...pprint.py...format()->('A'...)
    -> return...
    (Pdb) continue
    A
    Nr&   r&   r   r   !test_pdb_return_to_different_filerL     r)   r   c                       y)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_modulesrN     r)   r   module_to_skipz6def foo_pony(callback): x = 1; callback(); return Nonec                       y)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_callbackrQ     r)   r   c                       y)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_bottomframerS     r)   r   c                 R     t        t        j                  dd      |       |       y)zRun pdb.method(arg).TF)nosigintreadrcN)getattrpdbPdb)methodargs     r   
pdb_invoker\   0  s    9GCGGT%0&9#>r   c                       y)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_argumentr^   5  r)   r   c                       y)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_objectr`   E  r)   r   c                       y)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_eventrb   [  r)   r   c                       y)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_generatorrd     r)   r   c                       y)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_coroutinerf     r)   r   c                       y)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_asyncgenrh     r)   r   c                       y)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_generatorrj   L  r)   r   c                       y)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_coroutinerl     r)   r   c                       y)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_generatorrn     r)   r   c                       y)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_coroutinerp     r)   r   c                       y)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_looprr   
  r)   r   c                       y)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_subiteratorrt   4  r)   r   c                       y)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_20766rv   c  r)   r   c                       y)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_43318rx   |  r)   r   c                       y)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_91742rz     r)   r   c                       y)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_94215r|     r)   r   c                       y)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_101673r~     r)   r   c                       y)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                       y)a9  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()
    --Return--
    > <doctest test.test_pdb.test_pdb_issue_gh_101517[0]>(None)test_function()->None
    -> Warning: lineno is None
    (Pdb) continue
    Nr&   r&   r   r   test_pdb_issue_gh_101517r   >  r)   r   c                       y)a1  See GH-108976
    Make sure setting f_trace_opcodes = True won't crash pdb
    >>> def test_function():
    ...     import sys
    ...     sys._getframe().f_trace_opcodes = True
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     a = 1
    >>> with PdbTestInput([  # doctest: +NORMALIZE_WHITESPACE
    ...     'continue'
    ... ]):
    ...    test_function()
    bdb.Bdb.dispatch: unknown debugging event: 'opcode'
    > <doctest test.test_pdb.test_pdb_issue_gh_108976[0]>(5)test_function()
    -> a = 1
    (Pdb) continue
    Nr&   r&   r   r   test_pdb_issue_gh_108976r   S  r)   r   c                       y)a  See GH-104301

    Make sure that ambiguous statements prefixed by '!' are properly disambiguated

    >>> with PdbTestInput([
    ...     '! n = 42',  # disambiguated statement: reassign the name n
    ...     'n',         # advance the debugger into the print()
    ...     'continue'
    ... ]):
    ...     n = -1
    ...     import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...     print(f"The value of n is {n}")
    > <doctest test.test_pdb.test_pdb_ambiguous_statements[0]>(8)<module>()
    -> print(f"The value of n is {n}")
    (Pdb) ! n = 42
    (Pdb) n
    The value of n is 42
    > <doctest test.test_pdb.test_pdb_ambiguous_statements[0]>(1)<module>()
    -> with PdbTestInput([
    (Pdb) continue
    Nr&   r&   r   r   test_pdb_ambiguous_statementsr   e  r)   r   c                       y)aA  See GH-65052

    args, retval and display should not crash if the object is not displayable
    >>> class A:
    ...     def __new__(cls):
    ...         import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...         return object.__new__(cls)
    ...     def __init__(self):
    ...         import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
    ...         self.a = 1
    ...     def __repr__(self):
    ...         return self.a

    >>> def test_function():
    ...     A()
    >>> with PdbTestInput([  # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
    ...     's',
    ...     'retval',
    ...     'continue',
    ...     'args',
    ...     'display self',
    ...     'display',
    ...     'continue',
    ... ]):
    ...    test_function()
    > <doctest test.test_pdb.test_pdb_issue_gh_65052[0]>(4)__new__()
    -> return object.__new__(cls)
    (Pdb) s
    --Return--
    > <doctest test.test_pdb.test_pdb_issue_gh_65052[0]>(4)__new__()-><A instance at ...>
    -> return object.__new__(cls)
    (Pdb) retval
    *** repr(retval) failed: AttributeError: 'A' object has no attribute 'a' ***
    (Pdb) continue
    > <doctest test.test_pdb.test_pdb_issue_gh_65052[0]>(7)__init__()
    -> self.a = 1
    (Pdb) args
    self = *** repr(self) failed: AttributeError: 'A' object has no attribute 'a' ***
    (Pdb) display self
    display self: *** repr(self) failed: AttributeError: 'A' object has no attribute 'a' ***
    (Pdb) display
    Currently displaying:
    self: *** repr(self) failed: AttributeError: 'A' object has no attribute 'a' ***
    (Pdb) continue
    Nr&   r&   r   r   test_pdb_issue_gh_65052r   |  r)   r   c                      e Zd Zd Z ej
                  ej                  j                  d      d0d       Z		 	 	 d1d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'd# Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/e0jb                  d+        Z2d, Z3d- Z4d. Z5d/ Z6y)2PdbTestCasec                 J    t        j                  t         j                         y r   r   unlinkTESTFNr   s    r   tearDownzPdbTestCase.tearDown      ))*r   z'PYTHONSAFEPATH changes default sys.pathc           	      H   | j                  t        j                  d       t        j                  ddg|z   }t        j                  |t
        j                  t
        j                  t
        j                  i t        j                  ddi      5 }|j                  t        j                  |            \  }}d d d        xr t        j                  |      }xr t        j                  |      }| j!                  j"                  |d| d|        ||fS # 1 sw Y   bxY w)	N__pycache__-mrX   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  s     		((-8~~tU+h6! oo!((AA%7A
 	D !--cjj.BCNFF	D 0ELL00ELL0OO.vhjI	

 v~	D 	Ds   (DD!Nc                 ~   d}t        |d      5 }|j                  t        j                  |             ddd       |Yt        dd      5 }|j                  t        j                  |             ddd       | j	                  t
        j                  d       | j	                  t
        j                  |       d}|r t        j                  j                  dd      }	 | j                  |g||      \  }	}
||t        j                  d<   |	|
fS # 1 sw Y   xY w# 1 sw Y   xY w# ||t        j                  d<   w w xY w)z3Run 'script' lines with pdb and the pdb 'commands'.zmain.pywN.pdbrcHOME)openwritetextwrapdedentr   r   r   r   r   popr   )r   scriptr   r   pdbrcremove_homefilenamefhomesaver   r   s              r   run_pdb_scriptzPdbTestCase.run_pdb_script  s   
 (C  	-AGGHOOF+,	- h$ 0./0OOI,,h7	(((3zz~~fd3H	.!]]H:xATUNFF#%-

6"v~#	- 	-0 0 #%-

6" $s#   %D
%DD$ DD!$D<c                 &   d| _         t        j                  | j                          | j                   dz   }| j                   dz   }t        j                  | j                          t        |d      5 }	 ddd       t        |d      5 }|j                  t        j                  |             ddd       | j                  t        j                  | j                          | j                  d| j                   g|      S # 1 sw Y   xY w# 1 sw Y   ]xY w)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  s    #))*$$~5	$$~5	
!!")S! 	Q	)S! 	-QGGHOOF+,	-	(($*:*:;}}dD$4$45x@@	 		- 	-s   0C;%D;DDc                 &   t        t        j                  d      5 }|j                  |       d d d        |sd n|d   t        j                  |d   f}| j	                  |t        j                  |t        j                               y # 1 sw Y   [xY w)Nwbr      )r   r   r   r   r   rX   find_function)r   file_content	func_nameexpectedr   s        r   _assert_find_functionz!PdbTestCase._assert_find_function  s    )""D) 	"QGGL!	"  (4QK))8A;.8c''	93C3CD	F	" 	"s   BBc                 *    | j                  ddd        y )Nr   foo)r   r   s    r   test_find_function_empty_filez)PdbTestCase.test_find_function_empty_file  s    ""3t4r   c                 F    | j                  dj                         dd       y )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$    ""	 FH	
r   c                 H    | j                  dj                  d      dd       y )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                 h    | j                  t        j                  dj                         z   dd       y )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  s2    ""OO  FH 	
r   c                 Z    d}d}| j                  ||      \  }}| j                  d|       y )NzJ
            import __main__
            print(__main__.__spec__)
        continueNone)r   assertIn)r   r   r   r   _s        r   	test_speczPdbTestCase.test_spec%  s4    
 ''9	ff%r   c                    t        t        j                  d      5 }|j                  d       d d d        t        j
                  ddt        j                  g}t        j                  |t        j                  t        j                  t        j                        }| j                  |j                  j                         |j                  d      \  }}| j                  d|d       y # 1 sw Y   xY w)	Nr   s   print("testing my pdb")
r   rX   )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_issue79641  s    )""D) 	4QGG23	4~~tUI,<,<=??//$$
 	))*)))4K	M	4 	4s   C''C0c                     d}d}| j                  ||      \  }}|xs d|xs dz   }| j                  d|d       | j                  d|d       y )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   r   )r   r   r   r   r   outputs         r   test_issue46434zPdbTestCase.test_issue46434@  sg     ,,VX>,B6<R0)6^	`SU[T	Vr   c                 d   d}d}d}t        dd      5 }|j                  t        j                  |             d d d        | j	                  t
        j                  d       | j                  ||      \  }}| j                  t        d |j                         D              d       y # 1 sw Y   oxY w)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  
 yw)zmain.py(5)foo()->NoneNr&   .0ls     r   	<genexpr>z.PdbTestCase.test_issue13183.<locals>.<genexpr>v  s     J'1,J   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_issue13183U  s     (C  	*AGGHOOC()	*	(((3,,VX>Jf6G6G6IJJ9	;		* 	*s   %B&&B/c           	      R   t        t        j                  d      5 }|j                  t	        j
                  d      j                  d             d d d        t        j                  dt        j                  g}t        j                  |t        j                  t        j                  t        j                  i t        j                  ddi      }| j                  |j                   j"                         |j%                  d      \  }}| j'                  d	|d
       y # 1 sw Y   xY w)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_issue13120y  s     )""D) 	/QGGHOO 
% 
 %fWo
/	/ ~~tY%5%56??//$$;2::;17;	 	))*)))46E	G+	/ 	/   4DD&c           	      R   t        t        j                  d      5 }|j                  t	        j
                  d      j                  d             d d d        t        j                  dt        j                  g}t        j                  |t        j                  t        j                  t        j                  i t        j                  ddi      }| j                  |j                   j"                         |j%                  d      \  }}| j'                  d	|d
       y # 1 sw Y   xY w)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_issue36250  s    )""D) 	.QGGHOO %  $VG_.	.  ~~tY%5%56??//$$=RZZ=!3W=	 	))*))/:6E	G3	. 	.r  c                     d}d}d}| j                  ||d      \  }}| j                  ||dj                  ||             y )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  sT     !,,H! - 
 	h=VHf%	'r   c                     d}d}| j                  ||      \  }}dj                  |j                         D cg c]  }|j                          c}      }| j	                  |d       | j	                  |d       y c c}w )Nzprint('hello')z[
            continue
            run a b c
            run d e f
            quit
        
z#Restarting .* with arguments:
a b cz#Restarting .* with arguments:
d e f)r   joinr   stripassertRegex)r   r   r   r   r   xress          r   test_issue26053zPdbTestCase.test_issue26053  sv    ! ,,VX>iiF,=,=,?@q@ADEDE As   A:c                     t        j                  d      }t        j                  d      }| j                  |d|d      \  }}| j                  d|       | j	                  d|       y )Nz-
            a = 1
            b = 2
        zU
            # Comments should be fine
            n
            p f"{a+8=}"
        q
Tr   r   SyntaxErrorza+8=9)r   r   r   r   r   r   r   r   r   r   s        r   test_pdbrc_basiczPdbTestCase.test_pdbrc_basic  sh     " 
  !  ,,VU%UY,Z/gv&r   c                     t        j                  d      }t        j                  d      }| j                  |d|d      \  }}| j                  d|       | j	                  d|       y)	z,Test that empty lines in .pdbrc are ignored.z?
            a = 1
            b = 2
            c = 3
        z
            n

        r  Tr  zb = 2zc = 3N)r   r   r   r   r   r  s        r   test_pdbrc_empty_linez!PdbTestCase.test_pdbrc_empty_line  sj      "   ! 
 ,,VU%UY,Zgv&&)r   c                     t        j                  d      }t        j                  d      }| j                  |d|d      \  }}| j                  d|       y )N
            class A:
                def __init__(self):
                    self.attr = 1
            a = A()
            b = 2
        z
            alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")
            until 6
            pi a
        r  Tr  z
a.attr = 1r   r   r   r   r  s        r   test_pdbrc_aliaszPdbTestCase.test_pdbrc_alias  sX     "   !  ,,VU%UY,ZlF+r   c                     t        j                  d      }t        j                  d      }| j                  |d|d      \  }}| j                  d|       y )Nr  z
            b 5;;c;;n
        r  Tr  z-> b = 2r  r  s        r   test_pdbrc_semicolonz PdbTestCase.test_pdbrc_semicolon	  sX     "   !  ,,VU%UY,Zj&)r   c                     t        j                  d      }t        j                  d      }| j                  |d|d      \  }}| j                  d|       y )Nr  zK
            b 6
            commands 1 ;; p a;; end
            c
        r  Tr  z<__main__.A object atr  r  s        r   test_pdbrc_commandszPdbTestCase.test_pdbrc_commands	  sY     "   !  ,,VU%UY,Z-v6r   c                     t        j                  d      }| j                  |ddd      \  }}| j                  d|       y )Nz$
            print('hello')
        r  invalidTr  z(NameError: name 'invalid' is not definedr  )r   r   r   r   s       r   test_readrc_kwargzPdbTestCase.test_readrc_kwarg$	  sD     "  ,,VU)Y],^@&Ir   c                 ~   t         j                  j                  dd       }t        j                         5 }t        d      5  t         j                  j                  |d      }|t         j                  j                  _	        	 t        |d      5 }|j                  d       d d d        | j                  t        j                         j                  d   d       ||t         j                  d<   	 d d d        d d d        y # 1 sw Y   axY w# ||t         j                  d<   w w xY w# 1 sw Y   9xY w# 1 sw Y   y xY w)Nr   zos.path.expanduserr   r   r#  r   )r   r   r   r   temp_dirr   pathr  
expanduserreturn_valuer   r   r   rX   rY   rcLines)r   	save_homer&  rc_pathr   s        r   test_readrc_homedirzPdbTestCase.test_readrc_homedir,	  s   JJNN640	! 		3Xu5I/J 		3ggll8X6G.5BGG+3'3' '1GGI&'  !2!21!5yA()2BJJv&		3 		3 		3' ' ()2BJJv& )		3 		3 		3 		3sT   D3A D'DD  9DD'/D3 D	DD$$D''D0	,D33D<c                 h   t               }d}t               5 }|j                  t        d|             |j                  t        j                  t
        j                  d             t        j                  |       d d d        | j                  |j                         |dz          y # 1 sw Y   -xY w)Nz"Nobody expects... blah, blah, blahz
sys.stdout	set_trace)headerr  )
r   r   enter_contextr   objectrX   rY   r/  r   getvalue)r   r   r0  	resourcess       r   test_headerzPdbTestCase.test_header9	  s    5[ 	)I##E,$?@##ELL+$FGMM(	) 	*FTM:		) 	)s   A%B((B1c                     d}d}| j                  ||      \  }}| j                  t        d |j                         D              |       y )Nzprint("SUCCESS")/
            continue
            quit
        c              3   $   K   | ]  }d |v  
 ywSUCCESSNr&   r   s     r   r   z.PdbTestCase.test_run_module.<locals>.<genexpr>I	       HqINHr   r   r   r   r   r   r   r   r   r   s        r   test_run_modulezPdbTestCase.test_run_moduleB	  sH    ' ,,VX>HF4E4E4GHH&Qr   c                     d}d}| j                  ||      \  }}| j                  t        d |j                         D              |       y )NzQ
            if __name__ == '__main__':
                print("SUCCESS")
        r7  c              3   $   K   | ]  }d |v  
 ywr9  r&   r   s     r   r   z9PdbTestCase.test_module_is_run_as_main.<locals>.<genexpr>U	  r;  r   r<  r=  s        r   test_module_is_run_as_mainz&PdbTestCase.test_module_is_run_as_mainK	  sJ     ,,VX>HF4E4E4GHH&Qr   c                     d}d}| j                  ||      \  }}| j                  t        d |j                         D              |       | j                  t	        d |j                         D              |       y )Nz{
            if __name__ == '__main__':
                pass
                print("SUCCESS")
                pass
        z*
            b 3
            quit
        c              3   $   K   | ]  }d |v  
 yw)zBreakpoint 1 atNr&   r   s     r   r   z.PdbTestCase.test_breakpoint.<locals>.<genexpr>c	       Pq-2Pr   c              3   $   K   | ]  }d |v 
 ywr9  r&   r   s     r   r   z.PdbTestCase.test_breakpoint.<locals>.<genexpr>d	  s     L1IQ.Lr   )r   r   r   r   allr=  s        r   test_breakpointzPdbTestCase.test_breakpointW	  sm     ,,VX>PF<M<M<OPPRXYL8I8I8KLLfUr   c                     d}| j                  ddg|      \  }}| j                  t        j                  |j	                  dd             y )Nz(
            c
            quit
        r   rX   r   )r   r   rX   _usagereplace)r   r   r   r   s       r   test_run_pdb_with_pdbz!PdbTestCase.test_run_pdb_with_pdbf	  sD     e}h?JJNN4$	
r   c                 @   d}t        j                  |       |dz   }t        j                  |       t	        |d      5  	 d d d        | j                  t         j                  |       | j                  d|gdd      \  }}| j                  d|       y # 1 sw Y   UxY w)	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   s        r   test_module_without_a_mainz&PdbTestCase.test_module_without_a_mainq	  s    %.0	
)S! 			((+6; ' 
 	EvN	 	s   BBc                 p   d}d}t        j                  |       |dz   |z   }t        j                  |       t	        |dz   d      5  	 d d d        | j                  t         j                  |       | j                  d|j                  dd      gdd	
      \  }}| j                  d|       y # 1 sw Y   exY w)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   rK  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 			(((37??3,-rq ' 
 	I		 	s   B,,B5c                     t         j                  j                  t        j                        rJ | j                  dt        j                  gdd      \  }}| j                  dt        j                   |       y )Nr   r   r   r  zImportError: No module named )r   r'  existsr   r   r   r   r   r   r   s      r   test_nonexistent_modulez#PdbTestCase.test_nonexistent_module	  s_    77>>)"2"2333i.>.>'?YZ[5i6F6F5GH&Qr   c                     t        j                         5 }| j                  |gdd      \  }}| j                  d| d|       d d d        y # 1 sw Y   y xY w)Nr   r   r  zError: z is a directory)r   r&  r   r   )r   r&  r   r   s       r   test_dir_as_scriptzPdbTestCase.test_dir_as_script	  sZ    ! 	GX!]]H:rq]QNFFMMGH:_=vF	G 	G 	Gs   /AAc                     | j                  dgdd      \  }}| j                  d|       | j                  dgdd      \  }}| j                  d|       y )Nz-cr   r   r  z"Error: option -c requires argumentz--spamz#Error: option --spam not recognized)r   r   rY  s      r   test_invalid_cmd_line_optionsz)PdbTestCase.test_invalid_cmd_line_options	  sT    vrqI:VDz21M;fEr   c                     d}d}| j                  ||      \  }}| j                  t        d |j                         D              |       y )NzY
                #This is a comment, on line 2

                print("SUCCESS")
        z
            quit
        c              3   $   K   | ]  }d |v  
 yw)z__main__.py(4)<module>()Nr&   r   s     r   r   z=PdbTestCase.test_blocks_at_first_code_line.<locals>.<genexpr>	  s       ?%& 7 ! ?r   r<  r=  s        r   test_blocks_at_first_code_linez*PdbTestCase.test_blocks_at_first_code_line	  sU    
 ,,VX> ?*0*;*;*=? ?@F	Hr   c                 @   d| _         t        j                  | j                          | j                   dz   }| j                   dz   }| j                   dz   }| j                  t        j                  | j                          t	        j
                  | j                          t        |d      5 }|j                  t        j                  d             d d d        t        |d      5 }|j                  t        j                  d             d d d        t        |d      5 }|j                  t        j                  d             d d d        d	}| j                  d
| j                   g|      \  }}| j                  t        d |j                         D              |       | j                  t        d |j                         D                     | j                  t        d |j                         D                     y # 1 sw Y   .xY w# 1 sw Y   xY w# 1 sw Y   xY w)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  
 ywzVAR from moduleNr&   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>	  rD  r   c              3   $   K   | ]  }d |v  
 yw)zVAR from topNr&   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>	  s     MANa/Mr   c              3   $   K   | ]  }d |v  
 yw)z
second varNr&   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>	  s     K!LA-Kr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   module_filer   r   r   r   s           r   test_relative_importsz!PdbTestCase.test_relative_imports	  s   #))*$$~5	$$~5	&&5	(($*:*:;
!!")S! 	QGGHOO %  	 )S! 	QGGHOO %  	 +s# 	qGGHOO %  	
 MM4)9)9":HE	PF<M<M<OPPRXYM9J9J9LMMNKv7H7H7JKKL7	 		 		 	s$   )%G:"%H%H:HHHc                    d| _         t        j                  | j                          | j                   dz   }| j                   dz   }| j                   dz   }| j                  t        j                  | j                          t	        j
                  | j                          t        |d      5 }|j                  t        j                  d             d d d        t        |d      5 }|j                  t        j                  d             d d d        t        |d      5 }|j                  t        j                  d             d d d        d	}| j                  d
| j                   dz   g|      \  }}| j                  t        d |j                         D              |       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xxY w)Nr   z	/runme.pyr   rc  r   rd  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  
 ywrf  r&   r   s     r   r   zDPdbTestCase.test_relative_imports_on_plain_module.<locals>.<genexpr>	  rD  r   ri  rj  s           r   %test_relative_imports_on_plain_modulez1PdbTestCase.test_relative_imports_on_plain_module	  s   #))*$${2	$$~5	&&5	(($*:*:;
!!")S! 	QGGHOO %  	 )S! 	QGGHOO %  	
 +s# 	qGGHOO %  	 MM4)9)9H)D"ExP	PF<M<M<OPPRXY)	 		 	
	 	s$   )%F"%F+%F7F(+F47G c                     dj                  g d      }| j                  d|dz         \  }}| j                  |j                         dd  g d       y )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 DEBUGGERrt  z> <string>(1)<module>()z9((Pdb)) *** NameError: name 'doesnotexist' is not definedru  (Pdb) r  r   r   r   )r   r   r   r   s       r   test_errors_in_commandz"PdbTestCase.test_errors_in_command	  sV    99 
  ''4@	**,QR0 3
 	r   c                 4      fd} |dd        |dd       y)z.do_run handles exceptions from parsing its argc                     dj                  d|  dg      }j                  d|dz         \  }}j                  |j                         dd  dd|  d| d	g       y )
Nr  zrun qrr  r   rs  z(Pdb) *** Cannot run z: rv  rw  )bad_argmsgr   r   r   r   s        r   checkz*PdbTestCase.test_issue34266.<locals>.check	
  sz    yywi " H ++FHtODIFAV..04'y3%87 r   \zNo escaped character"zNo closing quotationNr&   )r   r~  s   ` r   test_issue34266zPdbTestCase.test_issue34266
  s     
	 	d*+c)*r   c                 X   t        j                  d      }d}t        j                         5 }dt        j
                  j                  |       }| j                  ||      \  }}| j                  |j                  d      d   j                  d      |       ddd       y# 1 sw Y   yxY w)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     rI  N)r   r   r   temp_cwdr   r'  realpathr   r   splitrstrip)r   r   r   cwdr   r   r   s          r   test_issue42384zPdbTestCase.test_issue42384
  s     "  ! 	KS.rww/?/?/D.EFH!00BNFFV\\$/299$?J	K 	K 	Ks   A+B  B)c                    t        j                  d      }d}t        j                         5 }t        j
                  j                  |      }t        j
                  j                  |d      }t        j
                  j                  |d      }d| }t	        j                  |       t        t        j
                  j                  |d      d      5 }|j                  |       ddd       t	        j                  |       t	        j                  t        j
                  j                  |d      t        j
                  j                  |d             | j                  t        j
                  j                  dd      g|      \  }}	| j                  |j                  d	      d
   j                  d      |       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)ziWhen running `python foo.py` sys.path[0] resolves symlinks. `python -m pdb foo.py` should behave the samer  r  dir_onedir_twor  foo.pyr   Nr  r  rI  )r   r   r   r  r   r'  r  r  r   r   r   symlinkr   r   r  r  )
r   r   r   r  r  r  r   r   r   r   s
             r   test_issue42384_symlinkz#PdbTestCase.test_issue42384_symlink&
  sb     "  ! 	KS''""3'Cggll3	2Gggll3	2G.wi8HHHWbggll7H5s;  q HHWJJrww||GX6Wh8WX!]]BGGLLH,M+NPXYNFFV\\$/299$?J	K 	K   	K 	Ks%   B$GG"CGG
	GGc                    t        j                         5 }t        dd      5 }t        j                  d      }|j                  |       d d d        t        j                  j                  |d      }t        j                  |       t        j                  t        j                  j                  |d             t        j                  j                  |d      }t        |d      5 }|j                  d       d d d        | j                  dgd      \  }}d}| j                  |j                  d      d	   j                  d
      |       d d d        y # 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   y xY w)Nr  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     rI  )r   r  r   r   r   r   r   r'  r  r   r   r   r  r  )	r   r  r   sr  
wrong_filer   r   r   s	            r   test_issue42383zPdbTestCase.test_issue42383?
  s9   ! 	KSh$ OO %  
 WW\\#x0FHHVHHRWW\\&(34fh7Jj#& @!>?@ "]]H:yANFF<HV\\$/299$?J)	K 	K @ @	K 	Ks<   E,'E	BE,%E 7AE,E	E, E)	%E,,E5c                 ~    d}t        j                  d      }| j                  ||      \  }}| j                  |       y )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_crashV
  sD     ?? $  ,,VX> r   c                    d}d}d}t        dd      5 }|j                  t        j                  |             d d d        t        dd      5 }|j                  t        j                  |             d d d        | j	                  t
        j                  d       | j	                  t
        j                  d       | j                  dg|      \  }}| j                  d|d       y # 1 sw Y   xY w# 1 sw Y   xY w)	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_listi
  s    

* ,$ 	1GGHOOJ/0	1 #S) 	3QGGHOOL12	3 		((,7	((*;<(9':HE:FDbc	1 	1	3 	3s   %C#%C/#C,/C8c                 @   t         j                  j                  t         j                  j                  t              d      }t        j
                  |      D ]E  }|j                  d      s| j                  t         j                  j                  ||      gd       G y )Nencoded_modulesz.pyr{  )r   r'  r  dirname__file__listdirendswithr   )r   
script_dirr   s      r   test_non_utf8_encodingz"PdbTestCase.test_non_utf8_encoding
  sl    WW\\"''//(";=NO


:. 	IH  'rww||JABCH	Ir   )r   )r   NF)7r"   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$  r-  r5  r>  rA  rG  rL  rN  rV  rZ  r\  r^  ra  rl  ro  rx  r  r  r   skip_unless_symlinkr  r  r  r  r  r&   r   r   r   r     sI   + X__SYY((>@@* ,-!#(2AF5
 
"

&MV*";HG8G<'F' *$,$* 7$J3;R
RV	
O R
G
FH#MJZ>0+ K ""K #K0K.!&,d\Ir   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)ChecklineTestsc                 ,    t        j                          y r   )	linecache
clearcacher   s    r   setUpzChecklineTests.setUp
  s    r   c                 J    t        j                  t         j                         y r   r   r   s    r   r   zChecklineTests.tearDown
  r   r   c                    t        t        j                  d      5 }|j                  d       d d d        t	        j
                         }| j                  |j                  t        j                  d      d       y # 1 sw Y   NxY wNr   z
print(123)r   )r   r   r   r   rX   rY   r   	checkliner   r   dbs      r   test_checkline_before_debuggingz.ChecklineTests.test_checkline_before_debugging
  sa    )""C( 	"AGGL!	"WWYi&6&6:A>	" 	"s   A::Bc                 ,   t        t        j                  d      5 }|j                  d       d d d        t	        j
                         }|j                          | j                  |j                  t        j                  d      d       y # 1 sw Y   ^xY wr  )	r   r   r   r   rX   rY   resetr   r  r  s      r   test_checkline_after_resetz)ChecklineTests.test_checkline_after_reset
  sj    )""C( 	"AGGL!	"WWY

i&6&6:A>		" 	"s   B

Bc                    t        j                  d      }t        t        j                  d      5 }|j                  |       d d d        t        |j                               dz   }t        t                     5  t        j                         }t        |      D ]1  }| j                  |j                  t        j                  |             3 	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz\
            # Comment
            """ docstring """
            ''' docstring '''

        r   r  )r   r   r   r   r   r   lenr   r   r   rX   rY   ranger  r  )r   r  r   	num_linesr  linenos         r    test_checkline_is_not_executablez/ChecklineTests.test_checkline_is_not_executable
  s    OO   )""C( 	AGGAJ	'!+	XZ( 	IB	* I  i.>.>!GHI	I 	I	 		I 	Is   C9AC#C #C,N)r"   r#   r$   r  r   r  r  r  r&   r   r   r  r  
  s    +??Ir   r  c                       e Zd Zd Zd Zy)PdbTestReadlinec                  z    t        d      } | j                  r$d| j                  v rt        j                  d      y y )Nreadlinelibeditz)libedit readline is not supported for pdb)r   r%   r  SkipTest)r  s    r   
setUpClasszPdbTestReadline.setUpClass
  s>     !,	X-=-= =##$OPP !>r   c                     t        j                  d      }d}t        ||      }| j                  d|       | j                  d|       | j                  d|       | j                  d|       y )Nz
            import pdb; pdb.Pdb().set_trace()
            # Concatenate strings so that the output doesn't appear in the source
            print('hello' + '!')
        s
   co		ntin	
s   commandss	   conditions   continues   hello!)r   r   r	   r   )r   r   r   r   s       r   test_basic_completionz%PdbTestReadline.test_basic_completion
  s`     "  "'k6*lF+k6*i(r   N)r"   r#   r$   r  r  r&   r   r   r  r  
  s    Q)r   r  c                 Z    ddl m} |j                  t        j                  |             |S )Nr   )test_pdb)testr  addTestdoctestDocTestSuite)loadertestspatternr  s       r   
load_testsr  
  s!    	MM'&&x01Lr   __main__)Tr  r   rX   r   typesr   r  r   r   r  
contextlibr   r   ior   r  r   test.supportr   test.support.import_helperr   test.support.pty_helperr	   r
   unittest.mockr   has_socket_supportSKIP_ASYNCIO_TESTSr2  r   r(   r+   r0   r2   r4   r6   r8   r<   r>   r@   rB   rD   rF   rH   rJ   rL   rN   
ModuleTypemodexec__dict__rQ   rS   r\   r^   r`   rb   rd   rf   rh   rj   rl   rn   rp   rr   rt   rv   rx   rz   r|   r~   r   r   r   r   r   requires_subprocessTestCaser   r  r  r  r"   mainr&   r   r   <module>r     s    	 
 
       1   " 4 6  "444 *6 *":Sj&@DAF8	]~(T9v-^9vUn;|1h0 e'( =s|| L(V'T?
 ,>@9v 6p;z5n (T*X -^(T-^2:+Z@D:2*$.-` nI(## nI nI`"IX&& "IJ )h'' ) )6 zHMMO r   