
    7bhs                    F   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.d Z/d Z0 ejb                  d      Z2 e3de2jh                         d  Z5d! Z6d" Z7d# Z8d$ Z9d% Z:d& Z;esd' Z<d( Z=d) Z>esd* Z?d+ Z@esd, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZGd3 ZHd4 ZId5 ZJd6 ZKd7 ZLd8 ZMd9 ZN ej                          G d: d;ej                               ZQ G d< d=ej                        ZR ej                          G d> d?ej                               ZSd@ ZTeUdAk(  r ej                          yy)B    N)	ExitStackredirect_stdout)StringIO)support)	os_helper)import_module)run_pty	FakeInput)patchc                        e Zd Z	 d Zd Zd Zy)PdbTestInputc                     || _         y N)input)selfr   s     7/opt/python-3.12.12/usr/lib/python3.12/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__r   r   r!    r   r   r   r      s    DO
*r   r   c                       y r   r%   r%   r   r   test_pdb_displayhookr'   +   s    r   c                       y r   r%   r%   r   r   test_pdb_basic_commandsr)   H   s    Rr   c                  @    dd l } | j                  j                          y )Nr   )bdb
BreakpointclearBreakpoints)r+   s    r   reset_Breakpointr.      s    NN##%r   c                       y r   r%   r%   r   r   test_pdb_breakpoint_commandsr0      s    r   c                       y r   r%   r%   r   r   -test_pdb_breakpoint_on_annotated_function_defr2   c  s    !r   c                       y r   r%   r%   r   r   :test_pdb_breakpoints_preserved_across_interactive_sessionsr4     s    @r   c                       y r   r%   r%   r   r   test_pdb_pp_repr_excr6     s    r   c                       y r   r%   r%   r   r   test_pdb_empty_liner8     s    r   c                       y r   r%   r%   r   r   
do_nothingr:     s    r   c                      t        d       y )N*   )printr%   r   r   do_somethingr>   	  s	    	"Ir   c                       y r   r%   r%   r   r   test_list_commandsr@     s    \r   c                       y r   r%   r%   r   r   test_pdb_whatis_commandrB   k      'r   c                       y r   r%   r%   r   r   test_pdb_display_commandrE         8r   c                       y r   r%   r%   r   r   test_pdb_alias_commandrH         ,r   c                       y r   r%   r%   r   r   test_pdb_where_commandrK     rF   r   c                       y r   r%   r%   r   r   test_convenience_variablesrM   :  s    Tr   c                       y r   r%   r%   r   r   test_post_mortemrO     s    :r   c                       y r   r%   r%   r   r   !test_pdb_return_to_different_filerQ     s    0r   c                       y r   r%   r%   r   r   test_pdb_skip_modulesrS         r   module_to_skipz6def foo_pony(callback): x = 1; callback(); return Nonec                       y r   r%   r%   r   r   #test_pdb_skip_modules_with_callbackrW     rC   r   c                       y r   r%   r%   r   r    test_pdb_continue_in_bottomframerY   J  s    &r   c                 T    	  t        t        j                  dd      |       |       y )NTF)nosigintreadrc)getattrpdbPdb)methodargs     r   
pdb_invokerb   t  s!    9GCGGT%0&9#>r   c                       y r   r%   r%   r   r   $test_pdb_run_with_incorrect_argumentrd   y  s    r   c                       y r   r%   r%   r   r   test_pdb_run_with_code_objectrf     rT   r   c                       y r   r%   r%   r   r   &test_next_until_return_at_return_eventrh     s    =r   c                       y r   r%   r%   r   r   #test_pdb_next_command_for_generatorrj     rF   r   c                       y r   r%   r%   r   r   #test_pdb_next_command_for_coroutinerl     s    5	r   c                       y r   r%   r%   r   r   "test_pdb_next_command_for_asyncgenrn   S  s    :	r   c                       y r   r%   r%   r   r   %test_pdb_return_command_for_generatorrp     s    4r   c                       y r   r%   r%   r   r   %test_pdb_return_command_for_coroutinerr     s    '	r   c                       y r   r%   r%   r   r   $test_pdb_until_command_for_generatorrt     s    )r   c                       y r   r%   r%   r   r   $test_pdb_until_command_for_coroutinerv     s    ,	r   c                       y r   r%   r%   r   r   +test_pdb_next_command_in_generator_for_looprx   N  rC   r   c                       y r   r%   r%   r   r   !test_pdb_next_command_subiteratorrz   x  rI   r   c                       y r   r%   r%   r   r   test_pdb_issue_20766r|         r   c                       y r   r%   r%   r   r   test_pdb_issue_43318r         r   c                       y r   r%   r%   r   r   test_pdb_issue_gh_91742r     s    *r   c                       y r   r%   r%   r   r   test_pdb_issue_gh_94215r   
  s    ?r   c                       y r   r%   r%   r   r   test_pdb_issue_gh_101673r   L  r   r   c                       y r   r%   r%   r   r   test_pdb_issue_gh_103225r   i  r}   r   c                       y r   r%   r%   r   r   test_pdb_issue_gh_101517r     s    r   c                       y r   r%   r%   r   r   test_pdb_issue_gh_108976r     s    r   c                       y r   r%   r%   r   r   test_pdb_ambiguous_statementsr     s    r   c                       y r   r%   r%   r   r   test_pdb_frame_refleakr     s    1r   c                       y r   r%   r%   r   r   test_pdb_issue_gh_65052r     rI   r   c                      e Zd Zd Z ej
                  ej                  j                  d      d3d       Z		 	 	 d4d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/d+ Z0d, Z1e2jf                  d-        Z4d. Z5d/ Z6d0 Z7d1 Z8d2 Z9y)5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__-mr^   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
 !--cjj.BCNFF
 0ELL00ELL0OO.vhjI	

 v~
 
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)Nzmain.pyw.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    	B(C AGGHOOF+, ! h$./ %OOI,,h7	(((3zz~~fd3H	.!]]H:xATUNFF#%-

6"v~# !  %$ #%-

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)Nt_main/__main__.py/__init__.pyr   r   )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_moduleX  s    6#))*$$~5	$$~5	
!!")S!Q ")S!QGGHOOF+, "	(($*:*:;}}dD$4$45x@@ "!!!s   1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   r^   find_function)r   file_content	func_nameexpectedr   s        r   _assert_find_functionz!PdbTestCase._assert_find_functionf  sx    )""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_fileo  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_foundr  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   r^   )r   r   r   s   quit
s   SyntaxErrorz0Got a syntax error running test script under PDB)r   r   r   r   r   r   r   r   r   r   r   r   closer   assertNotInr   r   r   r   r   r   s         r   test_issue7964zPdbTestCase.test_issue7964  s    )""D)QGG23 *~~tUI,<,<=??//$$
 	))*)))4K	M *)s   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
        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>  s     J6I'1,6I   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_issue13183  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_issue13120  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_issue260538	  s|    ! ,,VX>iiF,=,=,?@,?q,?@ADEDE As   A:c                 l   d}d}d}t        dd      5 }|j                  t        j                  |             d d d        | j	                  t
        j                  d       | j                  ||      \  }}|j                         }| j                  d|       | j                  d|       y # 1 sw Y   sxY w)Nz~
            import bar
            def foo():
                ret = bar.bar()
                pass
            foo()
        zv
            b bar.bar
            c
            b main.py:5
            c
            p ret
            quit
        z:
            def bar():
                return 42
        r   r   -> passz(Pdb) 42)
r   r   r   r   r   r   r   r   r  r   )r   r   r   r  r   r   r   liness           r   test_issue58956zPdbTestCase.test_issue58956F	  s     (C AGGHOOC() !	(((3,,VX>!!#i'j%( ! s   %B**B3c                 ~    d}d}| j                  ||      \  }}| j                  d|       | j                  d|       y )Nzx = 1zM
            step
            step
            step
            quit
        zThe program finishedzbdb.py)r   r   r   r   s        r   test_step_into_botframez#PdbTestCase.test_step_into_botframed	  sG      ''9	,f56*r   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_basicr	  sh     " 
  !  ,,VU%UY,Z/gv&r   c                     	 t        j                  d      }t        j                  d      }| j                  |d|d      \  }}| j                  d|       | j	                  d|       y )Nz?
            a = 1
            b = 2
            c = 3
        z
            n

        r%  Tr&  zb = 2zc = 3)r   r   r   r   r   r(  s        r   test_pdbrc_empty_linez!PdbTestCase.test_pdbrc_empty_line	  sk    : "   ! 
 ,,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   r5  r   )r   r   r   r   temp_dirr   pathr  
expanduserreturn_valuer   r   r   r^   r_   rcLines)r   	save_homer8  rc_pathr   s        r   test_readrc_homedirzPdbTestCase.test_readrc_homedir	  s    JJNN640	!Xu5I/Jggll8X6G.5BGG+3'3'1GGI& (  !2!21!5yA()2BJJv& 0K!! (' ()2BJJv& ) 0K/J!!sT   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   objectr^   r_   rA  r   getvalue)r   r   rB  	resourcess       r   test_headerzPdbTestCase.test_header	  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>	       H4GqIN4Gr  r   r  r  r  r   r   r   r   r   s        r   test_run_modulezPdbTestCase.test_run_module	  sH    ' ,,VX>HF4E4E4GHH&Qr   c                     d}d}| j                  ||      \  }}| j                  t        d |j                         D              |       y )NzQ
            if __name__ == '__main__':
                print("SUCCESS")
        rI  c              3   $   K   | ]  }d |v  
 ywrK  r%   r   s     r   r  z9PdbTestCase.test_module_is_run_as_main.<locals>.<genexpr>	  rM  r  rN  rO  s        r   test_module_is_run_as_mainz&PdbTestCase.test_module_is_run_as_main	  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>
       P<Oq-2<Or  c              3   $   K   | ]  }d |v 
 ywrK  r%   r   s     r   r  z.PdbTestCase.test_breakpoint.<locals>.<genexpr>
  s     L8K1IQ.8Kr  )r   r  r  r  allrO  s        r   test_breakpointzPdbTestCase.test_breakpoint	  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   r^   r   )r   r   r^   _usagereplace)r   r   r   r   s       r   test_run_pdb_with_pdbz!PdbTestCase.test_run_pdb_with_pdb

  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_main
  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   r]  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 1	(((37??3,-rq ' 
 	I	 10s   B,,B5c                     | j                  dt        j                  gdd      \  }}| j                  dt        j                   |       y )Nr   r   r   r  zImportError: No module named )r   r   r   r   r   r   r   s      r   test_nonexistent_modulez#PdbTestCase.test_nonexistent_module2
  sC    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   r8  r   r   )r   r8  r   r   s       r   test_dir_as_scriptzPdbTestCase.test_dir_as_script7
  sM    !X!]]H:rq]QNFFMMGH:_=vF "!!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   rj  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>L
  s       ?*=Q 7 !*=r  rN  rO  s        r   test_blocks_at_first_code_linez*PdbTestCase.test_blocks_at_first_code_lineB
  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>p
  rV  r  c              3   $   K   | ]  }d |v  
 yw)zVAR from topNr%   r   s     r   r  z4PdbTestCase.test_relative_imports.<locals>.<genexpr>q
  s     M9LANa/9Lr  c              3   $   K   | ]  }d |v  
 yw)z
second varNr%   r   s     r   r  z4PdbTestCase.test_relative_imports.<locals>.<genexpr>r
  s     K7J!LA-7Jr  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_importsO
  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   rt  r   ru  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rw  r%   r   s     r   r  zDPdbTestCase.test_relative_imports_on_plain_module.<locals>.<genexpr>
  rV  r  rz  r{  s           r   %test_relative_imports_on_plain_modulez1PdbTestCase.test_relative_imports_on_plain_modulet
  sp   #))*$${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   )
r  z+(Pdb) *** SyntaxError: '(' was never closed!(Pdb) ENTERING RECURSIVE DEBUGGERz%*** SyntaxError: '(' was never closedLEAVING RECURSIVE DEBUGGERr  z> <string>(1)<module>()z9((Pdb)) *** NameError: name 'doesnotexist' is not definedr  (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                 6     	  fd} |dd        |dd       y )Nc                     dj                  d|  dg      }j                  d|dz         \  }}j                  |j                         dd  dd|  d| d	g       y )
Nr  zrun qr  r   r  z(Pdb) *** Cannot run z: r  r  )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 quotationr%   )r   r  s   ` r   test_issue34266zPdbTestCase.test_issue34266
  s#    <
	 	d*+c)*r   c                 Z   	 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)NQ
            import sys
            print('sys.path[0] is', sys.path[0])
        c
q(Pdb) sys.path[0] is r     r[  )r   r   r   temp_cwdr   r9  realpathr   r   splitrstrip)r   r   r   cwdr   r   r   s          r   test_issue42384zPdbTestCase.test_issue42384
  s    y "  !S.rww/?/?/D.EFH!00BNFFV\\$/299$?J "!!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)Nr  r  dir_onedir_twor  foo.pyr   r  r  r[  )r   r   r   r  r   r9  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
  sN   w "  !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 "! <; "!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     r[  )r   r  r   r   r   r   r   r9  r  r   r   r   r  r  )	r   r  r   sr  
wrong_filer   r   r   s	            r   test_issue42383zPdbTestCase.test_issue42383
  s   !Sh$OO %  
 % WW\\#x0FHHVHHRWW\\&(34fh7Jj#&!>? ' "]]H:yANFF<HV\\$/299$?J) "!$$ '& "!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   assertFalserO  s        r   test_gh_94215_crashzPdbTestCase.test_gh_94215_crash
  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_list  s    

* ,$GGHOOJ/0 % #S)QGGHOOL12 * 		((,7	((*;<(9':HE:FDbc %$ *)s   %C#%C/#C,/C8c                     d}d}| j                  ||      \  }}| j                  d|       | j                  ||      \  }}| j                  d|       y )Nr   r%  z
main.py(0)z__main__.py(0))r   r   r   r   s        r   test_empty_filezPdbTestCase.test_empty_file;  sW     ''9	lF+''9	&/r   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   r9  r  dirname__file__listdirendswithr   )r   
script_dirr   s      r   test_non_utf8_encodingz"PdbTestCase.test_non_utf8_encodingE  se    WW\\"''//(";=NO


:.H  'rww||JABCH /r   )r   )r   NF):r"   r#   r$   r   unittestskipIfr   flags	safe_pathr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r!  r#  r)  r+  r/  r1  r3  r6  r?  rG  rP  rS  rY  r^  r`  rh  rk  rm  ro  rr  r}  r  r  r  r  r   skip_unless_symlinkr  r  r  r  r  r  r%   r   r   r   r   $  sX   + 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\0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.setUpL  s    r   c                 J    t        j                  t         j                         y r   r   r   s    r   r   zChecklineTests.tearDownO  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   r^   r_   r   	checkliner   r   dbs      r   test_checkline_before_debuggingz.ChecklineTests.test_checkline_before_debuggingR  sZ    )""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   r^   r_   resetr   r  r  s      r   test_checkline_after_resetz)ChecklineTests.test_checkline_after_resetX  sc    )""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   r^   r_   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(B	*  i.>.>!GH + )( )( )(s   C9AC#C #C,N)r"   r#   r$   r  r   r  r  r  r%   r   r   r  r  K  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   __doc__r  SkipTest)r  s    r   
setUpClasszPdbTestReadline.setUpClassr  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_completiony  s`     "  "'k6*lF+k6*i(r   N)r"   r#   r$   r  r  r%   r   r   r  r  p  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__)Wr  r   r^   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_TESTSrD  r   r'   r)   r.   r0   r2   r4   r6   r8   r:   r>   r@   rB   rE   rH   rK   rM   rO   rQ   rS   
ModuleTypemodexec__dict__rW   rY   rb   rd   rf   rh   rj   rl   rn   rp   rr   rt   rv   rx   rz   r|   r   r   r   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"HAF6B	]~(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*$.2h-` dI(## dI dIL"IX&& "IJ )h'' ) )6 zHMMO r   