
    5\hCF                    
   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j         Z G d	 d
e          Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z, ej-        d          Z. e/de.j0                   d Z1d Z2d Z3d Z4d  Z5d! Z6d" Z7esd# Z8d$ Z9d% Z:esd& Z;d' Z<esd( Z=d) Z>d* Z?d+ Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZG ejH                     G d3 d4ejI                              ZJ G d5 d6ejI                  ZK ejH                     G d7 d8ejI                              ZLd9 ZMeNd:k    r ejO                     dS dS );    N)	ExitStackredirect_stdout)StringIO)support)	os_helper)import_module)run_pty	FakeInput)patchc                   "    e Zd Z	 d Zd Zd ZdS )PdbTestInputc                     || _         d S N)input)selfr   s     7/opt/python-3.11.14/usr/lib/python3.11/test/test_pdb.py__init__zPdbTestInput.__init__   s    


    c                     t           j        | _        t          | j                  t           _        t          t           d          rt          j                    nd | _        d S )Ngettrace)sysstdin
real_stdinr
   r   hasattrr   
orig_tracer   s    r   	__enter__zPdbTestInput.__enter__    s@    )dj))	,3C,D,DN#,...$r   c                 l    | j         t          _        | j        rt          j        | j                   d S d S r   )r   r   r   r   settrace)r   excs     r   __exit__zPdbTestInput.__exit__%   s7    O	? 	*L)))))	* 	*r   N)__name__
__module____qualname__r   r   r!    r   r   r   r      sG        D  O O O
* * * * *r   r   c                      d S r   r%   r%   r   r   test_pdb_displayhookr'   +   s     r   c                      d S r   r%   r%   r   r   test_pdb_basic_commandsr)   H   s    R Rr   c                  @    dd l } | j                                         d S )Nr   )bdb
BreakpointclearBreakpoints)r+   s    r   reset_Breakpointr.      s%    JJJN##%%%%%r   c                      d S r   r%   r%   r   r   test_pdb_breakpoint_commandsr0      s    r rr   c                      d S r   r%   r%   r   r   :test_pdb_breakpoints_preserved_across_interactive_sessionsr2   V  s    @ @r   c                      d S r   r%   r%   r   r   test_pdb_pp_repr_excr4     s     r   c                      d S r   r%   r%   r   r   
do_nothingr6     s    Dr   c                  $    t          d           d S )N*   )printr%   r   r   do_somethingr:     s    	"IIIIIr   c                      d S r   r%   r%   r   r   test_list_commandsr<     s    \ \r   c                      d S r   r%   r%   r   r   test_pdb_whatis_commandr>         ' 'r   c                      d S r   r%   r%   r   r   test_pdb_display_commandrA   D  s    / /r   c                      d S r   r%   r%   r   r   test_pdb_alias_commandrC   v      , ,r   c                      d S r   r%   r%   r   r   test_pdb_where_commandrF         8 8r   c                      d S r   r%   r%   r   r   test_post_mortemrI     s    : :r   c                      d S r   r%   r%   r   r   test_pdb_skip_modulesrK          r   module_to_skipz6def foo_pony(callback): x = 1; callback(); return Nonec                      d S r   r%   r%   r   r   #test_pdb_skip_modules_with_callbackrO   :  r?   r   c                      d S r   r%   r%   r   r    test_pdb_continue_in_bottomframerQ   e  s    & &r   c                 b    	  t          t          j        dd          |           |           d S )NTF)nosigintreadrc)getattrpdbPdb)methodargs     r   
pdb_invokerZ     s4    9GCGT%000&99#>>>>>r   c                      d S r   r%   r%   r   r   $test_pdb_run_with_incorrect_argumentr\     s     r   c                      d S r   r%   r%   r   r   test_pdb_run_with_code_objectr^     rL   r   c                      d S r   r%   r%   r   r   &test_next_until_return_at_return_eventr`     s    = =r   c                      d S r   r%   r%   r   r   #test_pdb_next_command_for_generatorrb     rG   r   c                      d S r   r%   r%   r   r   #test_pdb_next_command_for_coroutinerd   6  s    5	 5	r   c                      d S r   r%   r%   r   r   "test_pdb_next_command_for_asyncgenrf   n  s    :	 :	r   c                      d S r   r%   r%   r   r   %test_pdb_return_command_for_generatorrh     s    4 4r   c                      d S r   r%   r%   r   r   %test_pdb_return_command_for_coroutinerj     s    '	 '	r   c                      d S r   r%   r%   r   r   $test_pdb_until_command_for_generatorrl     s    ) )r   c                      d S r   r%   r%   r   r   $test_pdb_until_command_for_coroutinern   :  s    ,	 ,	r   c                      d S r   r%   r%   r   r   +test_pdb_next_command_in_generator_for_looprp   i  r?   r   c                      d S r   r%   r%   r   r   !test_pdb_next_command_subiteratorrr     rD   r   c                      d S r   r%   r%   r   r   test_pdb_issue_20766rt          r   c                      d S r   r%   r%   r   r   test_pdb_issue_43318rw          r   c                      d S r   r%   r%   r   r   test_pdb_issue_gh_91742rz     s    * *r   c                      d S r   r%   r%   r   r   test_pdb_issue_gh_94215r|   %  s    ? ?r   c                      d S r   r%   r%   r   r   test_pdb_issue_gh_101673r~   g  rx   r   c                      d S r   r%   r%   r   r   test_pdb_issue_gh_101517r     s     r   c                      d S r   r%   r%   r   r   test_pdb_issue_gh_103225r     ru   r   c                      d S r   r%   r%   r   r   test_pdb_issue_gh_65052r     rD   r   c                      e Zd Zd Z ej        ej        j        d          d2d            Z		 	 	 d3d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/e0j1        d-             Z2d. Z3d/ Z4d0 Z5d1 Z6dS )4PdbTestCasec                 B    t          j        t           j                   d S r   r   unlinkTESTFNr   s    r   tearDownzPdbTestCase.tearDown      )*****r   z'PYTHONSAFEPATH changes default sys.pathr   c           	      @   |                      t          j        d           t          j        ddg|z   }t          j        |t
          j        t
          j        t
          j        i t          j
        ddi          5 }|                    t                              |                    \  }}d d d            n# 1 swxY w Y   |ot                              |          }|ot                              |          }|                     |j        |d| d|            ||fS )	N__pycache__-mrV   PYTHONIOENCODINGutf-8stdoutr   stderrenvzUnexpected return code
stdout: z	
stderr: )
addCleanupr   rmtreer   
executable
subprocessPopenPIPESTDOUTosenvironcommunicatestrencodebytesdecodeassertEqual
returncode)r   pdb_argscommandsexpected_returncodecmdprocr   r   s           r   _run_pdbzPdbTestCase._run_pdb  sc    		(-888~tU+h6! o!(AA%7AA
 
 
 	D !--cjj.B.BCCNFF	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 0ELL000ELL00OIvIIII	
 	
 	

 v~s   :1B77B;>B;NFc                    	 d}t          |d          5 }|                    t          j        |                     d d d            n# 1 swxY w Y   |ot          dd          5 }|                    t          j        |                     d d d            n# 1 swxY w Y   |                     t
          j        d           |                     t
          j        |           d }|r t          j        	                    dd           }	 | 
                    |g||          \  }	}
||t          j        d<   n# ||t          j        d<   w xY w|	|
fS )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GGHOF++,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- h$$ 0..///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0OOI,h777	((333 	4z~~fd33H	.!]]H:xATUUNFF#%-
6" #%-
6"----v~s/   (AAA%(BB B	D6 6E	c                    	 d| _         t          j        | j                    | j         dz   }| j         dz   }t          j        | j                    t          |d          5 }	 d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j        |                     d d d            n# 1 swxY w Y   | 	                    t          j        | j                    | 
                    d| j         g|          S )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_module  sg   6#)***$~5	$~5	
!""")S!! 	Q	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)S!! 	-QGGHOF++,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-	($*:;;;}}dD$45x@@@s$   A--A14A1(B<<C C c                 8   t          t          j        d          5 }|                    |           d d d            n# 1 swxY w Y   |sd n|d         t          j        |d         f}|                     |t          j        |t          j                             d S )Nwbr      )r   r   r   r   r   rV   find_function)r   file_content	func_nameexpectedr   s        r   _assert_find_functionz!PdbTestCase._assert_find_function#  s    )"D)) 	"QGGL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"  ( 844QK)8A;.8c'	93CDD	F 	F 	F 	F 	F   =AAc                 4    |                      ddd            d S )Nr   foo)r   r   s    r   test_find_function_empty_filez)PdbTestCase.test_find_function_empty_file,  s     ""3t44444r   c                 X    |                      d                                dd           d S )Nu@   def foo():
    pass

def bœr():
    pass

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

def bœr():
    pass

def quux():
    pass
ziso-8859-15r   )r      r   r   s    r   -test_find_function_found_with_encoding_cookiez9PdbTestCase.test_find_function_found_with_encoding_cookie?  s>    ""
 F=	
 	
 	
 	
 	
r   c                 r    |                      t          j        d                                z   dd           d S )Nu   def bœr():
    pass
r   )r   r   )r   codecsBOM_UTF8r   r   s    r   !test_find_function_found_with_bomz-PdbTestCase.test_find_function_found_with_bomP  sF    ""O  FHH 	
 	
 	
 	
 	
r   c                 l    d}d}|                      ||          \  }}|                     d|           d S )NzJ
            import __main__
            print(__main__.__spec__)
        continueNone)r   assertIn)r   r   r   r   _s        r   	test_speczPdbTestCase.test_specZ  sC    
 ''99	ff%%%%%r   c                    t          t          j        d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        ddt          j        g}t          j        |t          j        t          j        t          j	                  }| 
                    |j        j                   |                    d          \  }}|                     d|d           d S )	Nr   s   print("testing my pdb")
r   rV   )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_issue7964f  s   )"D)) 	4QGG2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4~tUI,<=?/$  
 	)***)))44K	M 	M 	M 	M 	Mr   c                     d}d}|                      ||          \  }}|pd|pdz   }|                     d|d           |                     d|d           d S )Nz
            def do_testcmdwithnodocs(self, arg):
                pass

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

            def foo():
                bar()

            def nope():
                pass

            def foobar():
                foo()
                nope()

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

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

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

                evt = threading.Event()

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

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

Expected:
{}
Got:
{}
Fail to handle a syntax error in the debuggee.)r   r   format)r   r   r   r   r   r   s         r   test_issue16180zPdbTestCase.test_issue16180  sp     !,,H! - 
 
 	h=VHf%%	' 	' 	' 	' 	'r   c                     d}d}|                      ||          \  }}d                    d |                                D                       }|                     |d           |                     |d           d S )Nzprint('hello')z[
            continue
            run a b c
            run d e f
            quit
        
c                 6    g | ]}|                                 S r%   )strip)r   xs     r   
<listcomp>z/PdbTestCase.test_issue26053.<locals>.<listcomp>  s     @@@q@@@r   z#Restarting .* with arguments:
a b cz#Restarting .* with arguments:
d e f)r   joinr   assertRegex)r   r   r   r   r   ress         r   test_issue26053zPdbTestCase.test_issue26053  s    ! ,,VX>>ii@@F,=,=,?,?@@@AADEEEDEEEEEr   c                     t          j        d          }t          j        d          }|                     |d|d          \  }}|                     d|           |                     d|           d S )Nz-
            a = 1
            b = 2
        zU
            # Comments should be fine
            n
            p f"{a+8=}"
        q
Tr   r   SyntaxErrorza+8=9)r   r   r   r   r   r   r   r   r   r   s        r   test_pdbrc_basiczPdbTestCase.test_pdbrc_basic  s     "  
  !   ,,VU%UY,ZZ///gv&&&&&r   c                     	 t          j        d          }t          j        d          }|                     |d|d          \  }}|                     d|           |                     d|           d S )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  s    : "    !  
 ,,VU%UY,ZZgv&&&&)))))r   c                     t          j        d          }t          j        d          }|                     |d|d          \  }}|                     d|           d S )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%  sm     "    !   ,,VU%UY,ZZlF+++++r   c                     t          j        d          }t          j        d          }|                     |d|d          \  }}|                     d|           d S )Nr  z
            b 5;;c;;n
        r  Tr  z-> b = 2r  r  s        r   test_pdbrc_semicolonz PdbTestCase.test_pdbrc_semicolon7  sm     "    !   ,,VU%UY,ZZj&)))))r   c                     t          j        d          }t          j        d          }|                     |d|d          \  }}|                     d|           d S )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_commandsG  sn     "    !   ,,VU%UY,ZZ-v66666r   c                     t          j        d          }|                     |ddd          \  }}|                     d|           d S )Nz$
            print('hello')
        r  invalidTr  z(NameError: name 'invalid' is not definedr  )r   r   r   r   s       r   test_readrc_kwargzPdbTestCase.test_readrc_kwargY  sV     "   ,,VU)Y],^^@&IIIIIr   c                    t           j                            dd           }t          j                    5 }t          d          5  t           j                            |d          }|t           j        j        _	        	 t          |d          5 }|                    d           d d d            n# 1 swxY w Y   |                     t          j                    j        d         d           ||t           j        d<   n# ||t           j        d<   w xY wd d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   zos.path.expanduserr   r   r!  r   )r   r   r   r   temp_dirr   pathr  
expanduserreturn_valuer   r   r   rV   rW   rcLines)r   	save_homer$  rc_pathr   s        r   test_readrc_homedirzPdbTestCase.test_readrc_homedira  s   JNN6400	!! 		3Xu5I/J/J 		3 		3gll8X66G.5BG+3'3'' '1GGI&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '  !21!5yAAA()2BJv& ()2BJv&2222		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3sq   D77D<C=B."C=.B22C=5B265C=+D=DDD7D#	#D7&D#	'D77D;>D;c                    t                      }d}t                      5 }|                    t          d|                     |                    t          j        t
          j        d                     t          j        |           d d d            n# 1 swxY w Y   |                     |	                                |dz              d S )Nz"Nobody expects... blah, blah, blahz
sys.stdout	set_trace)headerr  )
r   r   enter_contextr   objectrV   rW   r-  r   getvalue)r   r   r.  	resourcess       r   test_headerzPdbTestCase.test_headern  s    5[[ 	)I##E,$?$?@@@##EL+$F$FGGGM((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	**FTM:::::s   A+BBBc                     d}d}|                      ||          \  }}|                     t          d |                                D                       |           d S )Nzprint("SUCCESS")/
            continue
            quit
        c              3      K   | ]}d |v V  	dS SUCCESSNr%   r   s     r   r   z.PdbTestCase.test_run_module.<locals>.<genexpr>~  &      HHqINHHHHHHr   r   r   r   r   r   r   r   r   r   s        r   test_run_modulezPdbTestCase.test_run_modulew  sf    ' ,,VX>>HHF4E4E4G4GHHHHH&QQQQQr   c                     d}d}|                      ||          \  }}|                     t          d |                                D                       |           d S )NzQ
            if __name__ == '__main__':
                print("SUCCESS")
        r5  c              3      K   | ]}d |v V  	dS r7  r%   r   s     r   r   z9PdbTestCase.test_module_is_run_as_main.<locals>.<genexpr>  r9  r   r:  r;  s        r   test_module_is_run_as_mainz&PdbTestCase.test_module_is_run_as_main  sh     ,,VX>>HHF4E4E4G4GHHHHH&QQQQQr   c                 <   d}d}|                      ||          \  }}|                     t          d |                                D                       |           |                     t	          d |                                D                       |           d S )Nz{
            if __name__ == '__main__':
                pass
                print("SUCCESS")
                pass
        z*
            b 3
            quit
        c              3      K   | ]}d |v V  	dS )zBreakpoint 1 atNr%   r   s     r   r   z.PdbTestCase.test_breakpoint.<locals>.<genexpr>  (      PPq-2PPPPPPr   c              3      K   | ]}d |vV  	dS r7  r%   r   s     r   r   z.PdbTestCase.test_breakpoint.<locals>.<genexpr>  s'      LL1IQ.LLLLLLr   )r   r   r   r   allr;  s        r   test_breakpointzPdbTestCase.test_breakpoint  s     ,,VX>>PPF<M<M<O<OPPPPPRXYYYLL8I8I8K8KLLLLLfUUUUUr   c                     d}|                      ddg|          \  }}|                     t          j        |                    dd                     d S )Nz(
            c
            quit
        r   rV   r   )r   r   rV   _usagereplace)r   r   r   r   s       r   test_run_pdb_with_pdbz!PdbTestCase.test_run_pdb_with_pdb  s\     e}h??JNN4$$	
 	
 	
 	
 	
r   c                 \   d}t          j        |           |dz   }t          j        |           t	          |d          5  	 d d d            n# 1 swxY w Y   |                     t           j        |           |                     d|gdd          \  }}|                     d|           d S )	Nr   r   r   r   r   r   r  z-ImportError: No module named t_main.__main__;)r   r   r   r   r   r   r   r   )r   r   r   r   r   s        r   test_module_without_a_mainz&PdbTestCase.test_module_without_a_main  s    %%%.0	
)S!! 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 		(+666; ' 
 
 	EvNNNNNs    AAAc                    d}d}t          j        |           |dz   |z   }t          j        |           t	          |dz   d          5  	 d d d            n# 1 swxY w Y   |                     t           j        |           |                     d|                    dd          gdd	
          \  }}|                     d|           d S )Nt_pkgr   /r   r   r   .r   r   r  z;'t_pkg.t_main' is a package and cannot be directly executed)	r   r   r   makedirsr   r   r   rI  r   )r   pkg_namer   modpathr   r   s         r   test_package_without_a_mainz'PdbTestCase.test_package_without_a_main  s   """S.;.
G'N*C00 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 		((3337??3,,-rq ' 
 
 	I	 	 	 	 	s   AAAc                     |                      dt          j        gdd          \  }}|                     dt          j         |           d S )Nr   r   r   r  zImportError: No module named )r   r   r   r   r   r   r   s      r   test_nonexistent_modulez#PdbTestCase.test_nonexistent_module  sL    i.>'?YZ[[Hi6FHH&QQQQQr   c                     t          j                    5 }|                     |gdd          \  }}|                     d| d|           d d d            d S # 1 swxY w Y   d S )Nr   r   r  zError: z is a directory)r   r$  r   r   )r   r$  r   r   s       r   test_dir_as_scriptzPdbTestCase.test_dir_as_script  s    !! 	GX!]]H:rq]QQNFFMM=H===vFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   7AAAc                     |                      dgdd          \  }}|                     d|           |                      dgdd          \  }}|                     d|           d S )Nz-cr   r   r  z"Error: option -c requires argumentz--spamz#Error: option --spam not recognized)r   r   rV  s      r   test_invalid_cmd_line_optionsz)PdbTestCase.test_invalid_cmd_line_options  sl    vrqII;VDDDz21MM<fEEEEEr   c                     d}d}|                      ||          \  }}|                     t          d |                                D                       |           d S )NzY
                #This is a comment, on line 2

                print("SUCCESS")
        z
            quit
        c              3      K   | ]}d |v V  	dS )z__main__.py(4)<module>()Nr%   r   s     r   r   z=PdbTestCase.test_blocks_at_first_code_line.<locals>.<genexpr>  s>       ? ?%& 7 ! ? ? ? ? ? ?r   r:  r;  s        r   test_blocks_at_first_code_linez*PdbTestCase.test_blocks_at_first_code_line  s    
 ,,VX>> ? ?*0*;*;*=*=? ? ? ? ?@F	H 	H 	H 	H 	Hr   c                    d| _         t          j        | j                    | j         dz   }| j         dz   }| j         dz   }|                     t          j        | j                    t	          j        | j                    t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   d	}| 
                    d
| j         g|          \  }}|                     t          d |                                D                       |           |                     t          d |                                D                                  |                     t          d |                                D                                  d S )Nr   r   r   
/module.pyr   6
                top_var = "VAR from top"
            z
                from . import top_var
                from .module import var
                from . import module
                pass # We'll stop here and print the vars
            zY
                var = "VAR from module"
                var2 = "second var"
            zz
            b 5
            c
            p top_var
            p var
            p module.var2
            quit
        r   c              3      K   | ]}d |v V  	dS zVAR from moduleNr%   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>	  rB  r   c              3      K   | ]}d |v V  	dS )zVAR from topNr%   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>	  s'      MMANa/MMMMMMr   c              3      K   | ]}d |v V  	dS )z
second varNr%   r   s     r   r   z4PdbTestCase.test_relative_imports.<locals>.<genexpr>	  s'      KK!LA-KKKKKKr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   module_filer   r   r   r   s           r   test_relative_importsz!PdbTestCase.test_relative_imports  s   #)***$~5	$~5	&5	($*:;;;
!""")S!! 	QGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 )S!! 	QGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 +s## 	qGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 MM4)9":HEE	PPF<M<M<O<OPPPPPRXYYYMM9J9J9L9LMMMMMNNNKKv7H7H7J7JKKKKKLLLLL6   (CCC(DDD+(EE#&E#c                    d| _         t          j        | j                    | j         dz   }| j         dz   }| j         dz   }|                     t          j        | j                    t	          j        | j                    t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j	        d                     d d d            n# 1 swxY w Y   d	}| 
                    d
| j         dz   g|          \  }}|                     t          d |                                D                       |           d S )Nr   z	/runme.pyr   r`  r   ra  zl
                from . import module
                pass # We'll stop here and print the vars
            z5
                var = "VAR from module"
            zQ
            b 3
            c
            p module.var
            quit
        r   z.runmec              3      K   | ]}d |v V  	dS rc  r%   r   s     r   r   zDPdbTestCase.test_relative_imports_on_plain_module.<locals>.<genexpr>"	  rB  r   rf  rg  s           r   %test_relative_imports_on_plain_modulez1PdbTestCase.test_relative_imports_on_plain_module	  s   #)***${2	$~5	&5	($*:;;;
!""")S!! 	QGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 )S!! 	QGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 +s## 	qGGHO %     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 MM4)9H)D"ExPP	PPF<M<M<O<OPPPPPRXYYYYYrj  c                     d                     g d          }|                     d|dz             \  }}|                     |                                dd          g d           d S )Nr  )zprint(zdebug print(zdebug doesnotexistcpassr   )
-> passz+(Pdb) *** SyntaxError: '(' was never closed!(Pdb) ENTERING RECURSIVE DEBUGGERz%*** SyntaxError: '(' was never closedLEAVING RECURSIVE DEBUGGERrr  z> <string>(1)<module>()z9((Pdb)) *** NameError: name 'doesnotexist' is not definedrs  (Pdb) r  r   r   r   )r   r   r   r   s       r   test_errors_in_commandz"PdbTestCase.test_errors_in_command$	  s    99 
 
 
   ''4@@	**,,QRR0 3
 3
 3
 	 	 	 	 	r   c                 D     	  fd} |dd            |dd           d S )Nc                     d                     d|  dg          }                    d|dz             \  }}                    |                                dd          dd|  d| d	g           d S )
Nr  zrun qrp  r   rq  z(Pdb) *** Cannot run z: rt  ru  )bad_argmsgr   r   r   r   s        r   checkz*PdbTestCase.test_issue34266.<locals>.check>	  s    yy w  "  H ++FHtODDIFAV..0048883887     r   \zNo escaped character"zNo closing quotationr%   )r   r|  s   ` r   test_issue34266zPdbTestCase.test_issue34266<	  sM    <
	 
	 
	 
	 
	 	d*+++c)*****r   c                    	 t          j        d          }d}t          j                    5 }dt          j                            |           }|                     ||          \  }}|                     |	                    d          d         
                    d          |           d d d            d S # 1 swxY w Y   d S )NQ
            import sys
            print('sys.path[0] is', sys.path[0])
        c
q(Pdb) sys.path[0] is r     rG  )r   r   r   temp_cwdr   r%  realpathr   r   splitrstrip)r   r   r   cwdr   r   r   s          r   test_issue42384zPdbTestCase.test_issue42384L	  s   y "   !! 	KSFrw/?/?/D/DFFH!00BBNFFV\\$//299$??JJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   A>B66B:=B:c                    	 t          j        d          }d}t          j                    5 }t          j                            |          }t          j                            |d          }t          j                            |d          }d| }t	          j        |           t          t          j                            |d          d          5 }|
                    |           d d d            n# 1 swxY w Y   t	          j        |           t	          j        t          j                            |d          t          j                            |d                     |                     t          j                            dd          g|          \  }}	|                     |                    d          d	                             d
          |           d d d            d S # 1 swxY w Y   d S )Nr  r  dir_onedir_twor  foo.pyr   r  r  rG  )r   r   r   r  r   r%  r  r  r   r   r   symlinkr   r   r  r  )
r   r   r   r  r  r  r   r   r   r   s
             r   test_issue42384_symlinkz#PdbTestCase.test_issue42384_symlink[	  s$   w "   !! 	KS'""3''Cgll3	22Ggll3	22G8w88HHWbgll7H55s;;  q                             HWJrw||GX66Wh8W8WXXX!]]BGLLH,M,M+NPXYYNFFV\\$//299$??JJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks7   B'G+C4(G+4C8	8G+;C8	<C"G++G/2G/c                 B   t          j                    5 }t          dd          5 }t          j        d          }|                    |           d d d            n# 1 swxY w Y   t          j                            |d          }t          j	        |           t          j	        t          j                            |d                     t          j                            |d          }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   | 
                    dgd          \  }}d}|                     |                    d          d	                             d
          |           d d d            d S # 1 swxY w Y   d S )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     rG  )r   r  r   r   r   r   r   r%  r  r   r   r   r  r  )	r   r  r   sr  
wrong_filer   r   r   s	            r   test_issue42383zPdbTestCase.test_issue42383t	  sD   !! 	KSh$$ O %   


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

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

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

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

            return mod

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

* ,$$ 	1GGHOJ//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 #S)) 	3QGGHOL11222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 		(,777	(*;<<<(9':HEE:FDbcccccs#   (AAA&(BB!Bc                 L   t           j                            t           j                            t                    d          }t          j        |          D ]L}|                    d          r5|                     t           j                            ||          gd           Md S )Nencoded_modulesz.pyry  )r   r%  r  dirname__file__listdirendswithr   )r   
script_dirr   s      r   test_non_utf8_encodingz"PdbTestCase.test_non_utf8_encoding	  s    W\\"'//(";";=NOO

:.. 	I 	IH  '' Irw||JAABCHHH	I 	Ir   )r   )r   NF)7r"   r#   r$   r   unittestskipIfr   flags	safe_pathr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r"  r+  r3  r<  r?  rE  rJ  rL  rT  rW  rY  r[  r^  ri  rm  rv  r  r  r   skip_unless_symlinkr  r  r  r  r  r%   r   r   r   r     sQ       + + + X_SY(>@ @  @ @* ,-!#(   2A A AF F F5 5 5
 
 
 
 
 
"
 
 

& 
& 
&M M MV V V*"; "; ";HG G G8G G G<' ' 'F F F' ' ' * * *$, , ,$* * * 7 7 7$J J J3 3 3; ; ;R R R
R 
R 
RV V V	
 	
 	
O O O   R R R
G G G
F F FH H H#M #M #MJZ Z Z>  0+ + + K K K "K K #"K0K K K.! ! !&,d ,d ,d\I I I I Ir   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )ChecklineTestsc                 ,    t          j                     d S r   )	linecache
clearcacher   s    r   setUpzChecklineTests.setUp	  s    r   c                 B    t          j        t           j                   d S r   r   r   s    r   r   zChecklineTests.tearDown	  r   r   c                 "   t          t          j        d          5 }|                    d           d d d            n# 1 swxY w Y   t	          j                    }|                     |                    t          j        d          d           d S Nr   z
print(123)r   )r   r   r   r   rV   rW   r   	checkliner   r   dbs      r   test_checkline_before_debuggingz.ChecklineTests.test_checkline_before_debugging	  s    )"C(( 	"AGGL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"WYYi&6::A>>>>>r   c                 J   t          t          j        d          5 }|                    d           d d d            n# 1 swxY w Y   t	          j                    }|                                 |                     |                    t          j        d          d           d S r  )	r   r   r   r   rV   rW   resetr   r  r  s      r   test_checkline_after_resetz)ChecklineTests.test_checkline_after_reset	  s    )"C(( 	"AGGL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"WYY



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

        r   r  )r   r   r   r   r   r   lenr   r   r   rV   rW   ranger  r  )r   r  r   	num_linesr  linenos         r    test_checkline_is_not_executablez/ChecklineTests.test_checkline_is_not_executable	  s   O    )"C(( 	AGGAJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	''!+	XZZ(( 	I 	IB	** I I  i.>!G!GHHHHI	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is$   AAAADD	DN)r"   r#   r$   r  r   r  r  r  r%   r   r   r  r  	  sd          + + +? ? ?? ? ?I I I I Ir   r  c                       e Zd Zd Zd ZdS )PdbTestReadlinec                  p    t          d          } | j        rd| j        v rt          j        d          d S d S )Nreadlinelibeditz)libedit readline is not supported for pdb)r   __doc__r  SkipTest)r  s    r   
setUpClasszPdbTestReadline.setUpClass	  sN     !,, 	Q	X-= = =#$OPPP	Q 	Q = =r   c                    t          j        d          }d}t          ||          }|                     d|           |                     d|           |                     d|           |                     d|           d S )Nz
            import pdb; pdb.Pdb().set_trace()
            # Concatenate strings so that the output doesn't appear in the source
            print('hello' + '!')
        s
   co		ntin	
s   commandss	   conditions   continues   hello!)r   r   r	   r   )r   r   r   r   s       r   test_basic_completionz%PdbTestReadline.test_basic_completion 
  s     "   "''k6***lF+++k6***i(((((r   N)r"   r#   r$   r  r  r%   r   r   r  r  	  s5        Q Q Q) ) ) ) )r   r  c                 `    ddl m} |                    t          j        |                     |S )Nr   )test_pdb)testr  addTestdoctestDocTestSuite)loadertestspatternr  s       r   
load_testsr  
  s6    	MM'&x00111Lr   __main__)Pr  r   rV   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_TESTSr0  r   r'   r)   r.   r0   r2   r4   r6   r:   r<   r>   rA   rC   rF   rI   rK   
ModuleTypemodexec__dict__rO   rQ   rZ   r\   r^   r`   rb   rd   rf   rh   rj   rl   rn   rp   rr   rt   rw   rz   r|   r~   r   r   r   requires_subprocessTestCaser   r  r  r  r"   mainr%   r   r   <module>r     s    				 



 



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