
    z%iB                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  G d d	e      Zd
 Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z( ejR                  d      Z* e+de*jX                         d Z-d Z.d Z/d Z0d  Z1d! Z2d" Z3d# Z4d$ Z5d% Z6d& Z7d' Z8d( Z9d) Z:d* Z;d+ Z<d, Z=d- Z>d. Z?d/ Z@d0 ZAd1 ZBd2 ZCd3 ZD ej                          G d4 d5ej                               ZG G d6 d7ej                        ZHd8 ZIeJd9k(  r ej                          yy):    N)	ExitStackredirect_stdout)StringIO)support)	os_helper)
_FakeInput)patchc                        e Zd Z	 d Zd Zd Zy)PdbTestInputc                     || _         y N)input)selfr   s     A/home/uftp/.pyenv/versions/3.12.0/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    ))tzz*	,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'   E   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_commandsr.      s    r   c                       y r   r#   r#   r   r   :test_pdb_breakpoints_preserved_across_interactive_sessionsr0   `  s    @r   c                       y r   r#   r#   r   r   test_pdb_pp_repr_excr2     s    r   c                       y r   r#   r#   r   r   
do_nothingr4     s    r   c                      t        d       y )N*   )printr#   r   r   do_somethingr8     s	    	"Ir   c                       y r   r#   r#   r   r   test_list_commandsr:     s    \r   c                       y r   r#   r#   r   r   test_pdb_whatis_commandr<   $      'r   c                       y r   r#   r#   r   r   test_pdb_display_commandr?   N      8r   c                       y r   r#   r#   r   r   test_pdb_alias_commandrB         &r   c                       y r   r#   r#   r   r   test_pdb_where_commandrE     r@   r   c                       y r   r#   r#   r   r   test_convenience_variablesrG     s    Kr   c                       y r   r#   r#   r   r   test_post_mortemrI   ;      :r   c                       y r   r#   r#   r   r   test_pdb_skip_modulesrL   y      r   module_to_skipz6def foo_pony(callback): x = 1; callback(); return Nonec                       y r   r#   r#   r   r   #test_pdb_skip_modules_with_callbackrP     r=   r   c                       y r   r#   r#   r   r    test_pdb_continue_in_bottomframerR     rC   r   c                 T    	  t        t        j                  dd      |       |       y )NTF)nosigintreadrc)getattrpdbPdb)methodargs     r   
pdb_invoker[     s!    9GCGGT%0&9#>r   c                       y r   r#   r#   r   r   $test_pdb_run_with_incorrect_argumentr]     s    r   c                       y r   r#   r#   r   r   test_pdb_run_with_code_objectr_     rM   r   c                       y r   r#   r#   r   r   &test_next_until_return_at_return_eventra     s    =r   c                       y r   r#   r#   r   r   #test_pdb_next_command_for_generatorrc   U  r@   r   c                       y r   r#   r#   r   r   #test_pdb_next_command_for_coroutinere     s    5r   c                       y r   r#   r#   r   r   "test_pdb_next_command_for_asyncgenrg     rJ   r   c                       y r   r#   r#   r   r   %test_pdb_return_command_for_generatorri     s    4r   c                       y r   r#   r#   r   r   %test_pdb_return_command_for_coroutinerk   <  r=   r   c                       y r   r#   r#   r   r   $test_pdb_until_command_for_generatorrm   f  s    )r   c                       y r   r#   r#   r   r   $test_pdb_until_command_for_coroutinero         ,r   c                       y r   r#   r#   r   r   +test_pdb_next_command_in_generator_for_looprr     r=   r   c                       y r   r#   r#   r   r   !test_pdb_next_command_subiteratorrt     rp   r   c                       y r   r#   r#   r   r   test_pdb_issue_20766rv         r   c                       y r   r#   r#   r   r   test_pdb_issue_43318ry   3      r   c                       y r   r#   r#   r   r   test_pdb_issue_gh_91742r|   P  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     rz   r   c                       y r   r#   r#   r   r   test_pdb_issue_gh_103225r     rw   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                   `   e Zd Zd Z ej
                  ej                  j                  d      d(d       Z	d(dZ
d Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&d! Z'e(jR                  d"        Z*d# Z+d$ Z,d% Z-d& Z.y'))PdbTestCasec                 J    t        j                  t         j                         y r   r   unlinkTESTFNr   s    r   tearDownzPdbTestCase.tearDown6      ))*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__-mrW   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_pdb9  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!c                     	 d}t        |d      5 }|j                  t        j                  |             d d d        | j	                  t
        j                  |       | j                  |g||      S # 1 sw Y   =xY w)Nmain.pyw)openwritetextwrapdedentr   r   r   r   )r   scriptr   r   filenamefs         r   run_pdb_scriptzPdbTestCase.run_pdb_scriptO  sj    A(C  	-AGGHOOF+,	-	(((3}}hZ3FGG	- 	-s   %A11A: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_moduleW  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   rW   find_function)r   file_content	func_nameexpectedr   s        r   _assert_find_functionz!PdbTestCase._assert_find_functione  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_filen  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_foundq  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                    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   rW   r   r   r   s   quit
s   SyntaxErrorz0Got a syntax error running test script under PDB)r   r   r   r   r   r   r   r   r   r   r   r   closer   assertNotInr   r   r   r   r   r   s         r   test_issue7964zPdbTestCase.test_issue7964  s    )""D) 	4QGG23	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   assertIn)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>  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_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_issue26053+  sv    ! ,,VX>iiF,=,=,?@q@ADEDE As   A:c                    t        j                  d      }t        j                  j	                  dd       }	 t        j                         5  t        dd      5 }|j                  d       d d d        t        dd      5 }|j                  |       d d d        t        j                  dg}t        j                  |t        j                  t        j                  t        j                        }|5  |j                  d      \  }}| j                  d	|       d d d        d d d        ||t        j                  d<   y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   @xY w# 1 sw Y   DxY w# ||t        j                  d<   w w xY w)
Nz_
            import pdb; pdb.Pdb(readrc=False).set_trace()

            print('hello')
        HOME.pdbrcr   zinvalid
r   r   s   q
s(   NameError: name 'invalid' is not defined)r   r   r   r   popr   temp_cwdr   r   r   r   r   r   r   r   r   )r   r   	save_homer   r   r   r   r   s           r   test_readrc_kwargzPdbTestCase.test_readrc_kwarg9  s]    "  JJNN640		/##% *(C( )AGGK() )S) $QGGFO$ ~~y1!''%??$//%??	  *%)%5%5f%=NFF$$%P"(***( $%.

6" %') )$ $* ** *( $%.

6" %sl   E- E!D=*E!>E	AE!/'EE!E- =E	E!	E	E!E	E!!E*&E- -F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   invalidr   )r   r   r  r   temp_dirr	   pathr  
expanduserreturn_valuer   r   r   rW   rX   rcLines)r   r  r  rc_pathr   s        r   test_readrc_homedirzPdbTestCase.test_readrc_homedirY  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           	      x   t        j                  d      }t        j                  j	                  dd       }	 t        j                         5  t        ddd      5 }|j                  d       d d d        t        ddd      5 }|j                  |       d d d        t        j                  dg}d	d
i}t        j                  dk(  rd|d<   t        j                  |t        j                  t        j                  t        j                  i t        j                  |      }|5  |j                  d      \  }}| j!                  d|       d d d        d d d        ||t        j                  d<   y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   AxY w# 1 sw Y   ExY w# ||t        j                  d<   w w xY w)NzR
            import pdb; pdb.Pdb().set_trace()
            print('hello')
        r
  r  r   r   )encodingu	   Françaisr   r   r   win32znon-empty-stringPYTHONLEGACYWINDOWSSTDIOr   s   c
si   UnicodeEncodeError: 'ascii' codec can't encode character '\xe7' in position 21: ordinal not in range(128))r   r   r   r   r  r   r  r   r   r   r   platformr   r   r   r   r   )	r   r   r  r   r   r   r   r   r   s	            r   #test_read_pdbrc_with_ascii_encodingz/PdbTestCase.test_read_pdbrc_with_ascii_encodingf  s    "  JJNN640		/##% b(C': -aGGO,- )S7; $qGGFO$ ~~y1)73<<7*6HC23!''%??$//%??-2::--  b%)%5%5f%=NFFMM #YZ`bb%b0 $%.

6" %/- -$ $b b%b b0 $%.

6" %sl   F! FE0,FE=BF"'F		FF! 0E:	5F=F	F	F	FFF! !F9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	   objectrW   rX   r   r   getvalue)r   r   r!  	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>       HqINHr   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")
        r(  c              3   $   K   | ]  }d |v  
 ywr*  r#   r   s     r   r   z9PdbTestCase.test_module_is_run_as_main.<locals>.<genexpr>  r,  r   r-  r.  s        r   test_module_is_run_as_mainz&PdbTestCase.test_module_is_run_as_main  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>       Pq-2Pr   c              3   $   K   | ]  }d |v 
 ywr*  r#   r   s     r   r   z.PdbTestCase.test_breakpoint.<locals>.<genexpr>  s     L1IQ.Lr   )r   r   r   r   allr.  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   rW   r   )r   r   rW   _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|j                                y # 1 sw Y   cx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   r   s        r   test_module_without_a_mainz&PdbTestCase.test_module_without_a_main  s    %.0	
)S! 			((+6; ' 
 	D'')	+	 	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 			(((37??3,-rq ' 
 	I		 	s   B,,B5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>	  r5  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   _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   rL  r   rM  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rO  r#   r   s     r   r   zDPdbTestCase.test_relative_imports_on_plain_module.<locals>.<genexpr>-	  r5  r   rR  rS  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 DEBUGGERr^  z> <string>(1)<module>()z9((Pdb)) *** NameError: name 'doesnotexist' is not definedr_  (Pdb) r  r   r   r   )r   r   r   rU  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`  ra  )bad_argmsgr   r   rU  r   s        r   checkz*PdbTestCase.test_issue34266.<locals>.checkI	  sz    yywi " H ++FHtODIFAV..04'y3%87 r   \zNo escaped character"zNo closing quotationr#   )r   rh  s   ` r   test_issue34266zPdbTestCase.test_issue34266G	  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   r  r   r  realpathr   r   splitrstrip)r   r   r   cwdr   r   r   s          r   test_issue42384zPdbTestCase.test_issue42384W	  s    y "  ! 	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)Nrm  rn  dir_onedir_tworo  foo.pyr   r  rp  r:  )r   r   r   r  r   r  rq  r  r   r   r   symlinkr   r   rr  rs  )
r   r   r   rt  rw  rx  r   r   r   r   s
             r   test_issue42384_symlinkz#PdbTestCase.test_issue42384_symlinkf	  sc   w "  ! 	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)Nry  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   r  r  r   r   r   rr  rs  )	r   rt  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_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    

* ,$ 	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.pyre  )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   N)r   )/r    r!   r"   r   unittestskipIfr   flags	safe_pathr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r&  r/  r2  r8  r=  r?  rG  rJ  rV  rY  rb  rk  ru  r   skip_unless_symlinkr{  r  r  r  r  r#   r   r   r   r   4  s   + X__SYY((>@@(HAF5
 
"
MV*";HG8G<'F/@3 /D;R
RV	
+ 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   rW   rX   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   rW   rX   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   rp  )r   r   r   r   r   r   lenr   r   r   rW   rX   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                 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__)Lr  r   rW   r   typesr   r  r   r   r  
contextlibr   r   ior   r  r   test.supportr   test.test_doctestr   unittest.mockr	   r#  r   r%   r'   r,   r.   r0   r2   r4   r8   r:   r<   r?   rB   rE   rG   rI   rL   
ModuleTypemodexec__dict__rP   rR   r[   r]   r_   ra   rc   re   rg   ri   rk   rm   ro   rr   rt   rv   ry   r|   r~   r   r   r   r   r   requires_subprocessTestCaser   r  r  r    mainr#   r   r   <module>r     s    	 
 
       1   " ( *6 *":Sj&@DAF8	]~(T9v'R9vL\;|0 e'( =s|| L(V'T?
 ,>@9v6p;z5n(T*X-^(T-^2:+Z@D:2*$0 f
I(## f
I f
IP"IX&& "IJ zHMMO r   