
    <e                     L   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Zd dlZd dlZd dlZd dlmZmZmZ d dlmZmZmZ d dlmZmZ d dlmZmZ d dlZd dlmZm Z m!Z!m"Z" dZ#dddddddZ$eed	d
gej%        d          dd e&e$ddd          dZ'e'(                    e$            G d d          Z) G d dej*        e)          Z+ G d dej*        e)          Z, G d dej*        e)          Z- G d dej*                  Z.e/dk    r ej0                     dS dS )    N)
no_tracingverboserequires_subprocess)forgetmake_legacy_pycunload)create_empty_filetemp_dir)make_scriptmake_zip_script)	_run_code_run_module_code
run_modulerun_patha  # Check basic code execution
result = ['Top level assignment']
def f():
    result.append('Lower level reference')
f()
del f
# Check the sys module
import sys
run_argv0 = sys.argv[0]
run_name_in_sys_modules = __name__ in sys.modules
module_in_sys_modules = (run_name_in_sys_modules and
                         globals() is sys.modules[__name__].__dict__)
# Check nested operation
import runpy
nested = runpy._run_module_code('x=1\n', mod_name='<run>')
)__name____file__
__cached____package____doc____spec__zTop level assignmentzLower level referenceF   z<run>)xr   
__loader__)sysrunpyresult	run_argv0run_name_in_sys_modulesmodule_in_sys_modulesnestedc                   "    e Zd Zg dZd Zd ZdS )CodeExecutionMixin)nameparentorigincachedhas_locationsubmodule_search_locationsc                    |                                 }|                                 }t          |          D ]j}|                    d          rS|                    d          r>||vr|                    |           ||d         vr|d                             |           k|                    d          }|                    d          }||                     |           n|j        :|                     t          |j                  t          |j                             | j	        D ]A}d|z   }|t          ||          f}|t          ||          f}|                     ||           B|                     t          |          t          |                     |D ],}|||         f}|||         f}|                     ||           -dS )zbCheck two namespaces match.

           Ignores any unspecified interpreter created names
        __r    r   Nz	__spec__.)copylist
startswithendswithpopassertIsNoneloaderassertEqualtypeCHECKED_SPEC_ATTRIBUTESgetattrset)	self	result_nsexpected_nskresult_specexpected_specattractualexpecteds	            &/usr/lib/python3.11/test/test_runpy.pyassertNamespaceMatchesz)CodeExecutionMixin.assertNamespaceMatchesP   s    NN$$	!&&((i 	/ 	/A||D!! /ajj&6&6 /K''MM!$$$K111h'++A...  mmJ//#
33 k**** #/  k&8!9!9!%m&:!;!;= = =4 3 3$&W[$778w}d;;<  2222 	Y[)9)9::: 	/ 	/A1&F;q>*HVX....	/ 	/    c                    t                      }|                                }|d         }t          j        d         }t          j                            ||          } |d          }|                     ||           |                     t          j        d         |           |                     t          j                            ||          |           d|i}	||d<    ||	          }|                     ||	           |                     ||           |                     t          j        d         |           |                     t          j                            ||          |           dS )zCheck that an interface runs the example code correctly

           First argument is a callable accepting the initial globals and
           using them to create the actual namespace
           Second argument is the expected result
        r   r   Nsentinel)	objectr+   r   argvmodulesgetrA   assertIsassertIsNot)
r7   create_namespaceexpected_namespacerD   r9   run_namesaved_argv0	saved_modr8   
initial_nss
             r@   check_code_executionz'CodeExecutionMixin.check_code_executionx   s@    88(--//z*hqkKOOHh77	$$T**	##I{;;;chqk;///ckooh999EEE (+
"*J$$Z00	J///##I{;;;chqk;///ckooh999EEEEErB   N)r   
__module____qualname__r4   rA   rQ    rB   r@   r"   r"   D   sM        M M M&/ &/ &/PF F F F FrB   r"   c                       e Zd ZdZd Zd ZdS )ExecutionLayerTestCasez9Unit tests for runpy._run_code and runpy._run_module_codec                     t                                           }|                    dd i           d }|                     ||           d S )Nr   c                 .    t          t          i |           S N)r   example_source)init_globalss    r@   	create_nsz7ExecutionLayerTestCase.test_run_code.<locals>.create_ns   s    ^R>>>rB   )example_namespacer+   updaterQ   )r7   r9   r\   s      r@   test_run_codez$ExecutionLayerTestCase.test_run_code   s`    ',,..$
 	 	 		? 	? 	?!!)[99999rB   c                    dd}d}d}t           j                            ||          t                                          }|                    ||||ddd           fd}|                     ||           d S )	Nz
<Nonsense>zSome other nonsensezNow you're just being silly )r%   r1   T)r   r   r   r   r   r   r   r   c                 2    t          t          |           S rY   )r   rZ   )r[   mod_namemod_specs    r@   r\   z>ExecutionLayerTestCase.test_run_module_code.<locals>.create_ns   s     #N$0$,$,. . .rB   )	importlib	machinery
ModuleSpecr]   r+   r^   rQ   )r7   	mod_fname
mod_loadermod_packager9   r\   rc   rd   s         @@r@   test_run_module_codez+ExecutionLayerTestCase.test_run_module_code   s    )	2
&11(9B9C 2 E E (,,.. !$& "'+%)	
 	
 		 		 			. 	. 	. 	. 	. 	.
 	!!)[99999rB   N)r   rR   rS   r   r_   rk   rT   rB   r@   rV   rV      s8        CC: : :: : : : :rB   rV   c                       e Zd ZdZd Zd Zd Zd dZd!dddd	Zd
 Z	d Z
d ddddZd ddddZ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S )#RunModuleTestCasezUnit tests for runpy.run_modulec                 x    	 t          |           |                     d|z              d S # t          $ r Y d S w xY w)NzExpected import error for )r   failImportError)r7   rc   s     r@   expect_import_errorz%RunModuleTestCase.expect_import_error   sY    	?x    II2X=>>>>>  	 	 	DD	s   + 
99c                    |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d           |                      d	           d S )
Nr   zsys.imp.ericzos.path.halfza.beez.howardz..eatenz.test_runpyz	.unittestmultiprocessing)rq   r7   s    r@   test_invalid_namesz$RunModuleTestCase.test_invalid_names   s      '''  000  000  )))  +++  +++  ///  ---  !233333rB   c                 X    |                      t          d          d         d           d S )Nr   r   )r2   r   rt   s    r@   test_library_modulez%RunModuleTestCase.test_library_module   s+    G,,Z8'BBBBBrB   Fc                     t          j        |           |rd S t           j                            |d          }t	          |           |S )N__init__.py)osmkdirpathjoinr	   )r7   pkg_dir	namespace	pkg_fnames       r@   _add_pkg_dirzRunModuleTestCase._add_pkg_dir   sH    
 	4GLL-88	)$$$rB   
runpy_testr   parent_namespacesc                   |s|r|st          d          d}|t          j        z   dz   }t          j                            t          j                              x}}	t          dk    rt          d|	           t          j        
                    d|           t          dk    r t          dt          j        d                    |r||g|z  }
||
d<   |
D ]n}t          j                            |	|          }	|                     |	|          }t          dk    rt          d	|	           t          dk    rt          d
|           ot          j                            |	|          }t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          dk    rt          d
|           |dz   |z  |z   }t          j                            ||          }||||fS )Nz2Can't mark top level module as a namespace package__runpy_pkg__pyr   z  Package tree in:r   z  Updated sys.path:z  Next level in:z
  Created:w.)RuntimeErrorrz   extsepr|   realpathtempfilemkdtempr   printr   insertr}   r   openwritere   utilspec_from_file_location)r7   sourcedepthmod_baser   r   pkg_name
test_fnamer~   sub_dirnamespace_flagsnamespace_flagr   rh   mod_filerc   rd   s                    r@   	_make_pkgzRunModuleTestCase._make_pkg   s$     	4* 	4E 	4  3 4 4 4"bi',
G,,X-=-?-?@@@'Q;;2G<<<7###Q;;3SXa[AAA 	?01E9O"+OB"1 ? ?',,w99 --g~FF	Q;;&8' B B BQ;;lI > > >GLL*55	)S!! 	#XNN6"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#Q;;lI666SL%'(2>99(:CE E	8X55s   0FFFc                    t          t          j                  D ]$}|                    d          rt          j        |= %t          dk    rt          d           t          j        d= t          dk    rt          d           t          j        |d          D ]\  }}}|D ]f}	 t          j	        t          j        
                    ||                     6# t          $ r$}t          dk    rt          |           Y d }~_d }~ww xY w|D ]h}t          j        
                    ||          }	 t          j        |           8# t          $ r$}t          dk    rt          |           Y d }~ad }~ww xY w	 t          j        |           t          dk    rt          d           d S d S # t          $ r+}t          dk    rt          |           Y d }~d S Y d }~d S d }~ww xY w)	Nr   r   z  Removed sys.modules entriesr   z  Removed sys.path entryF)topdownz  Removed package tree)r,   r   rG   r-   r   r   r|   rz   walkremover}   OSErrorrmdir)	r7   topentryrootdirsfilesr#   exfullnames	            r@   _del_pkgzRunModuleTestCase._del_pkg   s   #+&& 	' 	'E00 'K&Q;;=>>>HQKQ;;8999!#e!<!<!< 	. 	.D$ . ..Ibgll4667777 . . .{{E"III. . .7<<d33.HX&&&& . . .{{E"III.	.	&HSMMM{{E":;;;;;{{ 	& 	& 	&{{E"IIIIIIIII{{{{{{	&sH   !2C
DC==D*D??
E-	E((E-2.F$ $
G.GGc                     d}|dxx         |z  cc<   |d         |d<   |d         }t           j                            |j        |d                   }||d<   |r|dxx         |z  cc<   d S d S )Ncr   r   r   r   )re   r   r   r#   )r7   ns	alter_syschar_to_addspecnew_specs         r@   _fix_ns_for_legacy_pycz(RunModuleTestCase._fix_ns_for_legacy_pyc  s    
:+%j><*~>99$):<Z.J J!: 	+{OOO{*OOOOO	+ 	+rB   c                  
 |                      t          |||          \  }}
}t          
           t                                          }|                    
||j        
                    d          d         |d           r|                    |ddd           
fd}		 t          dk    rt          d	
           | 
                    |	|           t          j                     t          
           t          j        |           t           j        sxt%          |           t'          
           t          j                     t          dk    rt          d

           |                     |           | 
                    |	|           |                     |           n# |                     |           w xY wt          dk    rt          d           d S d S )Nr   r   r   r   r   r   r   r   Tr   r   r   c                 (    t          |           S Nr   r   )r[   r   rc   s    r@   r\   z2RunModuleTestCase._check_module.<locals>.create_ns6      h	JJJJrB   r   Running from source:Running from compiled:Module executed successfully)r   rZ   r   r]   r+   r^   r&   
rpartitionr   r   rQ   re   invalidate_caches
__import__rz   r   r   dont_write_bytecoder   r   r   r   )r7   r   r   r   r   r~   rh   rd   r9   r\   rc   s     `       @r@   _check_modulezRunModuleTestCase._check_module!  s     ~~ne(10A  C C 	/Hh 	x',,.. !"/#..s33A6 
 
 	 	 	  	&+/)-      
	K 	K 	K 	K 	K 	K	#{{E"8(CCC%%i===')))x   Ii   * B	***x   +---Q;;&> I I I++KCCC)))[AAAMM'""""DMM'""""Q;;<=====;;s   )C+F* *Gc                   |                      t          |d||          \  }}}}|                    d          d         t          |           t                                          }	|	                    ||t          j        	                    |          |d           r|	                    |ddd           fd}
	 t          d	k    rt          d
           |                     |
|	           t          j                     t          |           t          j        |           t"          j        sxt'          |           t)          |           t          d	k    rt          d           t          j                     |                     |	           |                     |
|	           |                     |           n# |                     |           w xY wt          d	k    rt          d           d S d S )N__main__r   r   r   r   Tr   c                 (    t          |           S r   r   )r[   r   r   s    r@   r\   z3RunModuleTestCase._check_package.<locals>.create_ns_  r   rB   r   r   r   zPackage executed successfully)r   rZ   r   r   r]   r+   r^   re   r   cache_from_sourcer   r   rQ   r   r   rz   r   r   r   r   r   r   r   )r7   r   r   r   r   r~   rh   rc   rd   r9   r\   r   s     `        @r@   _check_packagez RunModuleTestCase._check_packageI  s5    ~~neZ(10A  C C 	/Hh &&s++A.x',,.. !#.::9EE# 
 
 	 	 	  	&+/)-      
	K 	K 	K 	K 	K 	K	#{{E"8(CCC%%i===')))x   Ii   * B	***x   Q;;&> I I I+---++KCCC)))[AAAMM'""""DMM'""""Q;;=>>>>>;;s   C+G Gc                    |dk    rt          d          d}|}t          |          D ]$}|}t          j                            ||          }%t          j                            |d          }t          |           t          dk    rt          d|           t          j                            |d          }	|                     |	           t          dk    rt          d|	           t          j                            |	d          }
|                     |
           t          dk    rt          d	|
           t          j                            |
d
          }t          |           t          dk    rt          d|           d S d S )Nr   z$Relative module test needs depth > 1r   z
sibling.pyz  Added sibling module:unclez  Added uncle package:cousinz  Added cousin package:z	nephew.pyz  Added nephew module:)	
ValueErrorrangerz   r|   r}   r	   r   r   r   )r7   base_dirr   r   r   
module_diri
parent_dirsibling_fname	uncle_dir
cousin_dirnephew_fnames               r@   _add_relative_modulesz'RunModuleTestCase._add_relative_modulesr  s[   A::CDDD"
u 	< 	<A#Jj(;;JJZ>>-(((Q;;7GGGGLLW55	)$$$Q;;6	BBBW\\)X66
*%%%Q;;7DDDw||J<<,'''Q;;6EEEEE;;rB   Nc                 v   d}|                      ||          \  }}}}||}n|}	 |                     |||           |                    d          d         }	t          dk    rt	          d|           t          ||          }
|                     |
d         |           |                     |
d         |	           |                     d	|
           |                     d
|
           ~
t          j	                     t          |           t          j        |           t          j        st          |           t!          |           t          dk    rt	          d|           t          j	                     t          ||          }|                     |d         |           |                     |d         |	           |                     d	|           |                     d
|           ~|                     |           n# |                     |           w xY wt          dk    rt	          d           d S d S )Nza\
from __future__ import absolute_import
from . import sibling
from ..uncle.cousin import nephew
r   r   r   r   )rM   r   r   siblingnephewr   r   )r   r   r   r   r   r   r2   assertInre   r   r   rz   r   r   r   r   r   r   )r7   r   rM   contentsr~   rh   rc   rd   expected_namer   d1d2s               r@   _check_relative_importsz)RunModuleTestCase._check_relative_imports  s7    ~~h.. 	/Hh$MM$M	#&&w%@@@**3//2H{{E"8(CCCHx888BR
^];;;R.999MM)R(((MM(B'''')))x   Ii   * 
	***x   Q;;&> I I I+---8<<<  J???  M!2H===i,,,h+++MM'""""DMM'""""Q;;<=====;;s   GH Hc                     t          d          D ]2}t          dk    rt          d|           |                     |           3d S )N   r   Testing package depth:r   r   r   r   r7   r   s     r@   test_run_modulez!RunModuleTestCase.test_run_module  sQ    1XX 	& 	&E{{E":EBBBu%%%%	& 	&rB   c                     t          dd          D ]5}t          dk    rt          d|           |                     |dd           6d S Nr   r   r   Tr   r   r   s     r@   $test_run_module_in_namespace_packagez6RunModuleTestCase.test_run_module_in_namespace_package  s^    1a[[ 	N 	NE{{E":EBBBuMMMM	N 	NrB   c                     t          dd          D ]2}t          dk    rt          d|           |                     |           3d S )Nr   r   r   r   r   r   r   r   s     r@   test_run_packagez"RunModuleTestCase.test_run_package  sS    1a[[ 	' 	'E{{E":EBBB&&&&	' 	'rB   c           	         |                      ddd          }|\  }}}}|                    dd          }|                     | j        |           t          j                            |dd          }t          t          t          t          f}|D ]j}|j        }|                     |          5  d                    |          }	t          |dd	
          5 }
|
                    |	           d d d            n# 1 swxY w Y   	 t!          |           |                     d                    |                     n5# |$ r-}|                     dt          |                     Y d }~nd }~ww xY w	 t!          |dz              |                     d                    |                     n5# |$ r-}|                     dt          |                     Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   ld S )Nra   r   r   	.__main__r   ry   z raise {0}('{0} in __init__.py.')wtasciiencodingzNothing raised; expected {}zfinding specz
.submodule)r   replace
addCleanupr   rz   r|   r}   rp   AttributeError	TypeErrorr   r   subTestformatr   r   r   ro   assertNotIn)r7   r   r~   _rc   init
exceptions	exceptionr#   r   r   errs               r@    test_run_package_init_exceptionsz2RunModuleTestCase.test_run_package_init_exceptions  s   Az22"(Ha##K44w///w||G_mDD!>9jI
# 	J 	JI%Dd## J J;BB4HH$w777 +8NN6***+ + + + + + + + + + + + + + +Jx((( II;BB4HHIIII ! B B B$$^VC[[AAAAAAAABJx,6777 II;BB4HHIIII ! B B B$$^VC[[AAAAAAAABJ J J J J J J J J J J J J J J	J 	Js   ,(G,C6*G,6C::G,=C:>G,D:)G,:E,?#E'"G,'E,,G,0F+)G,+G0#GG,GG,,G0	3G0	c                 >   |                      dd          \  }}}}	 t          |           |                     t          d          5  t	          |           d d d            n# 1 swxY w Y   |                     |           d S # |                     |           w xY w)Nra   r   found in sys\.modules)r   r   assertWarnsRegexRuntimeWarningr   r   )r7   r~   r   rc   s       r@   test_submodule_imported_warningz1RunModuleTestCase.test_submodule_imported_warning  s    "&..Q"7"7Ha	#x   &&~,. . % %8$$$% % % % % % % % % % % % % % % MM'"""""DMM'""""s/   *B A#B #A''B *A'+B Bc                 J   |                      ddd          \  }}}}|                     | j        |           |                    dd          }t	          |           |                     |t          j                   t          j	                    5  t          j
        dt                     t          |           d d d            n# 1 swxY w Y   t	          |           |                     t          d          5  t          |           d d d            d S # 1 swxY w Y   d S )Nra   r   r   r   errorr  )r   r   r   r   r   r   r   rG   warningscatch_warningssimplefilterr  r   r  )r7   r~   r   rc   packages        r@    test_package_imported_no_warningz2RunModuleTestCase.test_package_imported_no_warning  s   "&..Q
"C"CHaw///"";337gs{+++$&& 	  	 !'>:::w	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	8"">3KLL 	  	 w	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s$   *CC
C
;DDDc                     t          dd          D ]4}t          dk    rt          d|           |                     |d           5d S )Nr   r   r   T)r   r   r   s     r@   %test_run_package_in_namespace_packagez7RunModuleTestCase.test_run_package_in_namespace_package  sX    1a[[ 	? 	?E{{E":EBBB>>>>	? 	?rB   c                     t          dd          D ]4}t          dk    rt          d|           |                     |d           5d S )Nr   r   r   T)r   r   r   s     r@   test_run_namespace_packagez,RunModuleTestCase.test_run_namespace_package  X    1a[[ 	7 	7E{{E":EBBB6666	7 	7rB   c                     t          dd          D ]5}t          dk    rt          d|           |                     |dd           6d S r   r   r   s     r@   /test_run_namespace_package_in_namespace_packagezARunModuleTestCase.test_run_namespace_package_in_namespace_package  s^    1a[[ 	O 	OE{{E":EBBBNNNN	O 	OrB   c                     t          d          D ]4}t          dk    rt          d|           |                     |d           5d S )Nr   r   r   Tr   r   r   s     r@   test_run_module_alter_sysz+RunModuleTestCase.test_run_module_alter_sys  sV    1XX 	6 	6E{{E":EBBBu5555	6 	6rB   c                     t          dd          D ]4}t          dk    rt          d|           |                     |d           5d S )Nr   r   r   Tr   r   r   s     r@   test_run_package_alter_sysz,RunModuleTestCase.test_run_package_alter_sys	  r  rB   c                     t          dd          D ]2}t          dk    rt          d|           |                     |           3d S )N      r   z"Testing relative imports at depth:r   r   r   r   r   s     r@   test_explicit_relative_importz/RunModuleTestCase.test_explicit_relative_import  sS    1a[[ 	0 	0E{{E"FNNN((////	0 	0rB   c                     t          dd          D ]3}t          dk    rt          d|           |                     |d           4d S )Nr  r  r   z'Testing main relative imports at depth:r   r  r   s     r@   test_main_relative_importz+RunModuleTestCase.test_main_relative_import  sU    1a[[ 	< 	<E{{E"KUSSS((
;;;;	< 	<rB   c                    d}d|                      t          |          \  }}}t                     t                                          }|                    |t          j                            |          	                    d          d         |d           fd}	 | 
                    ||           |                     |           d S # |                     |           w xY w)Nr   z*And now for something completely differentr   r   r   c                 &    t          |           S rY   r   )r[   rc   rM   s    r@   r\   z2RunModuleTestCase.test_run_name.<locals>.create_ns&  s    hh???rB   )r   rZ   r   r]   r+   r^   re   r   r   r   rQ   r   )	r7   r   r~   rh   rd   r9   r\   rc   rM   s	          @@r@   test_run_namezRunModuleTestCase.test_run_name  s   ?~~ne44 	/Hhx',,.. !#.::9EE#..s33A6 
 
 	 	 		@ 	@ 	@ 	@ 	@ 	@	#%%i===MM'"""""DMM'""""s   'C C+c                 |   dd l }d}d}ddg}d|dz   g}t                      }t                      }t          d|          D ]p}d	                    |g|z            }	|                    |	           |D ]}
|                    |	d	z   |
z              |D ]}
|                    |	d	z   |
z              qd	                    |g|z            }	|                    |	           |                    |	d
z              |                     d|          \  }}}}|                     | j        |           t          d|dz             D ]}|                     |d|           |	                    |g          D ]}| 
                    ||j                   | 
                    |j        t          j        j                   |j        r|                    |j                   i|                    |j                   |                     t)          |          d|           |                     t)          |          d|           d S )Nr   r   r   r   zuncle.cousinzuncle.cousin.nephewz.siblingr   r   z.runpy_testra   r  )pkgutilr6   r   r}   addr   r   r   r   walk_packagesassertIsInstance
ModuleInfomodule_finderre   rf   
FileFinderispkgr   r#   r2   len)r7   r#  	max_depth	base_namepackage_suffixesmodule_suffixesexpected_packagesexpected_modulesr   r   r#   r~   rh   rc   rd   
moduleinfos                   r@   test_pkgutil_walk_packagesz,RunModuleTestCase.test_pkgutil_walk_packages-  s    		#	#^40)j2HIEE551i(( 	< 	<Exxe 344H!!(+++( = =!%%hnt&;<<<<' < < $$X^d%:;;;;<88YK)344h'''X5666~~b),, 	/Hhw///1ik** 	; 	;E&&wE::::!//	:: 	9 	9J!!*g.@AAA!!*":"+"5"@B B B 9!((9999 ''
8888.//4EFFF-..3CDDDDDrB   )F)r   rY   )r   rR   rS   r   rq   ru   rw   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r!  r3  rT   rB   r@   rm   rm      s       ))? ? ?4 4 4C C C   6"'56 6 6 6 6:& & &2	+ 	+ 	+&>&+u&> &> &> &> &>P'?','? '? '? '? '?RF F F.&> &> &> &>P& & &
N N N
' ' '
J J J8# # #     ? ? ?
7 7 7
O O O
6 6 6
7 7 7
0 0 0
< < <
# # #*"E "E "E "E "ErB   rm   c                       e Zd ZdZ	 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ed             Zd ZdS )RunPathTestCasezUnit tests for runpy.run_pathNFc                 8    |t           }t          ||||          S rY   )rZ   r   )r7   
script_dirscript_basenamer   omit_suffixs        r@   _make_test_scriptz!RunPathTestCase._make_test_scriptT  s'    >#F:!;0 0 	0rB   Tc                    fd}t                                           }	||}
n|}
|r1t          j                            |
|          }|j        }|sd |_        nd x}}|	                    |||d||ddd           |                     ||	           dfd}|r0|.t          j                            |          }|sd |_        ||	d<   |	d<   	                    d	          d
         |	d<   |                     ||	           d S )Nc                 $    t          |           S rY   r   )r[   script_names    r@   r\   z0RunPathTestCase._check_script.<locals>.create_ns_  s    K666rB   ra   T)r   r   r   r   r   r   r   r   zprove.issue15230.is.fixedc                 &    t          |           S rY   r=  )r[   rM   r>  s    r@   r\   z0RunPathTestCase._check_script.<locals>.create_ns|  s    Kx@@@rB   r   r   r   r   r   )
r]   r+   re   r   r   r&   r1   r^   rQ   r   )r7   r>  r   expected_fileexpected_argv0rc   expect_speccheck_loaderr\   r9   	spec_namerd   
mod_cachedrM   s    `           @r@   _check_scriptzRunPathTestCase._check_script[  s   	7 	7 	7 	7 	7',,..%II I 	) ~==i>KM MH!J '"&$((Hz%%$ ''+%)	
 	
 		 		 		 	!!)[999.	A 	A 	A 	A 	A 	A 	/8+ ~==h>KM MH '"&&.K
#"*J%-%8%8%=%=a%@M"!!)[99999rB   c                 r    t          j        |          }|                     t          |t          |           d S rY   )reescapeassertRaisesRegexrp   r   )r7   r>  msgs      r@   _check_import_errorz#RunPathTestCase._check_import_error  s/    inn{C;GGGGGrB   c                     t                      5 }d}|                     ||          }|                     |d||d           d d d            d S # 1 swxY w Y   d S Nscript
<run_path>FrB  r
   r:  rF  r7   r7  rc   r>  s       r@   test_basic_scriptz!RunPathTestCase.test_basic_script  s    ZZ 	?:H00XFFK{L+*  ? ? ?	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?   3AAAc                     t                      5 }d}t          j        |                     ||                    }|                     |d||d           d d d            d S # 1 swxY w Y   d S rN  )r
   pathlibPathr:  rF  rS  s       r@   "test_basic_script_with_path_objectz2RunPathTestCase.test_basic_script_with_path_object  s    ZZ 	?:H!,t'='=j>F(H (H I IK{L+*  ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   AA!!A%(A%c                     t                      5 }d}|                     ||d          }|                     |d||d           d d d            d S # 1 swxY w Y   d S )NrO  T)r9  rP  FrQ  rR  rS  s       r@   test_basic_script_no_suffixz+RunPathTestCase.test_basic_script_no_suffix  s    ZZ 	?:H00X=A 1 C CK{L+*  ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   5AAAc                    t                      5 }d}|                     ||          }t          j        |d          }t	          j        |           |                     |d||d           d d d            d S # 1 swxY w Y   d S )NrO  TdoraiserP  FrQ  )r
   r:  
py_compilecompilerz   r   rF  )r7   r7  rc   r>  compiled_names        r@   test_script_compiledz$RunPathTestCase.test_script_compiled  s    ZZ 	A:H00XFFK&.{DIIIMIk"""}lM,%  A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   AA99A= A=c                     t                      5 }d}|                     ||          }|                     |d|||           d d d            d S # 1 swxY w Y   d S )Nr   rP  rc   rR  rS  s       r@   test_directoryzRunPathTestCase.test_directory  s    ZZ 	>:!H00XFFKz<)H  > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>rU  c                 B   t                      5 }d}|                     ||          }t          j        |d          }t	          j        |           t          j        s)t          |          }| 	                    |d|||           d d d            d S # 1 swxY w Y   d S )Nr   Tr]  rP  rd  )
r
   r:  r_  r`  rz   r   r   r   r   rF  )r7   r7  rc   r>  ra  
legacy_pycs         r@   test_directory_compiledz'RunPathTestCase.test_directory_compiled  s   ZZ 	B:!H00XFFK&.{DIIIMIk"""* B,[99
"":|Z#- # B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   A8BBBc                     t                      5 }d}|                     ||          }d|z  }|                     ||           d d d            d S # 1 swxY w Y   d S )Nnot_main"can't find '__main__' module in %r)r
   r:  rL  )r7   r7  rc   r>  rK  s        r@   test_directory_errorz$RunPathTestCase.test_directory_error  s    ZZ 	6:!H00XFFK6CC$$Z555		6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   4AAAc           	          t                      5 }d}|                     ||          }t          |d|          \  }}|                     |d|||d           d d d            d S # 1 swxY w Y   d S )Nr   test_ziprP  Frc   rC  )r
   r:  r   rF  )r7   r7  rc   r>  zip_namefnames         r@   test_zipfilezRunPathTestCase.test_zipfile  s    ZZ 	F:!H00XFFK-j*kRROHexuh(0u  F F F		F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F   AA$$A(+A(c           	         t                      5 }d}|                     ||          }t          j        |d          }t	          |d|          \  }}|                     |d|||d           d d d            d S # 1 swxY w Y   d S )Nr   Tr]  rn  rP  Fro  )r
   r:  r_  r`  r   rF  )r7   r7  rc   r>  ra  rp  rq  s          r@   test_zipfile_compiledz%RunPathTestCase.test_zipfile_compiled  s    ZZ 	F:!H00XFFK&.{DIIIM-j*.;= =OHexuh(0u  F F F	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs   AA::A>A>c                     t                      5 }d}|                     ||          }t          |d|          \  }}d|z  }|                     ||           d d d            d S # 1 swxY w Y   d S )Nrj  rn  rk  )r
   r:  r   rL  )r7   r7  rc   r>  rp  rq  rK  s          r@   test_zipfile_errorz"RunPathTestCase.test_zipfile_error  s    ZZ 	4:!H00XFFK-j*kRROHe6AC$$Xs333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4rs  c                 F   t                      5 }t                      5 }d}d|z  }|                     |||          }t          |d|          \  }}|                     t          t
          |           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 import runpy
runpy.run_path(%r)
rn  )r
   r:  r   assertRaisesRecursionErrorr   )r7   r7  	dummy_dirrc   r   r>  rp  rq  s           r@   test_main_recursion_errorz)RunPathTestCase.test_main_recursion_error  sC   ZZ 	B:xzz 	BY!H-09:F00XvNNK-j*kRROHenhAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs5   BAA>2B>B	BB	BBBc                 h   t                      5 }t          j                            |d          }t	          |dd          5 }|                    d           d d d            n# 1 swxY w Y   t          |          }|                     |d         d           d d d            d S # 1 swxY w Y   d S )Nz	script.pyr   latin1r   u%   
#coding:latin1
s = "non-ASCII: hé"
su   non-ASCII: hé)r
   rz   r|   r}   r   r   r   r2   )r7   r7  filenamefr   s        r@   test_encodingzRunPathTestCase.test_encoding  s.   ZZ 	>:w||J<<Hhh777 1                  
 h''FVC[*<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s5   3B'A$B'$A(	(B'+A(	,.B''B+.B+)NF)NTT)r   rR   rS   r   r:  rF  rL  rT  rY  r[  rb  re  rh  rl  rr  ru  rw  r   r|  r  rT   rB   r@   r5  r5  Q  s1       '' 490 0 0 0 6:;?+: +: +: +:ZH H H? ? ?? ? ?? ? ?A A A> > >	B 	B 	B6 6 6F F FF F F4 4 4 B B ZB	> 	> 	> 	> 	>rB   r5  c                        e Zd ZdZej        dk    renej         Ze	e
j        d                         Z fdZ e            d             Zd Zd Zd Zd	 Zd
 Zd Zd Z xZS )TestExitl   :   win32c               /      K   t                      5 }t          j        |          V  d d d            d S # 1 swxY w Y   d S rY   )r
   rW  rX  )argskwargstmp_fns      r@   tmp_pathzTestExit.tmp_path  s       ZZ 	'6,v&&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   599c                     |                                  5 }|dz  x| _        }|                    t          j        d                      t                      j        |i | d d d            d S # 1 swxY w Y   d S )Nzham.pyz@                    raise KeyboardInterrupt
                    )r  ham
write_texttextwrapdedentsuperrun)r7   r  r  tmpr  	__class__s        r@   r  zTestExit.run  s    ]]__ 		) 8^+DHsNN    EGGK((((		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		) 		)s   AA00A47A4c                    t           j        dg|}t          j        |g|R i |dt          j        d}|                     |j                            d          |j                   |                     |j	        | j
                   d S )Nz-ET)textstderrz
KeyboardInterrupt
)r   
executable
subprocessr  PIPE
assertTruer  r.   r2   
returncodeEXPECTED_CODE)r7   cmdr  r  procs        r@   assertSigIntzTestExit.assertSigInt  s     ~t*c*~cVDVVVFVjoVVVV,,-DEEt{SSS$*<=====rB   c                 <    |                      | j        g           d S rY   )r  r  rt   s    r@   test_pymain_run_filezTestExit.test_pymain_run_file  s     48*%%%%%rB   c                     | j         j        }|dz  } |j        t          j        d                     |                     |g|           d S )Nzrun_module.pyzU                import runpy
                runpy.run_module("ham")
                cwdr  r$   r  r  r  r  )r7   r  r   s      r@   %test_pymain_run_file_runpy_run_modulez.TestExit.test_pymain_run_file_runpy_run_module  sc    ho?*

O 	
 	
 	
 	:,C00000rB   c                     | j         j        }|dz  }|                    t          j        d                     |                     |g|           d S )Nzrun_module_as_main.pyz^                import runpy
                runpy._run_module_as_main("ham")
                r  r  )r7   r  run_module_as_mains      r@   -test_pymain_run_file_runpy_run_module_as_mainz6TestExit.test_pymain_run_file_runpy_run_module_as_main'  sh    ho #::%%O 	
 	
 	
 	-.C88888rB   c                 L    |                      ddg| j        j                   d S )N-cz%import runpy; runpy.run_module('ham')r  r  r  r$   rt   s    r@   "test_pymain_run_command_run_modulez+TestExit.test_pymain_run_command_run_module4  s9    :; 	 	
 	
 	
 	
 	
rB   c                 L    |                      ddg| j        j                   d S )Nr  
import hamr  r  rt   s    r@   test_pymain_run_commandz TestExit.test_pymain_run_command:  s*    4.DHODDDDDrB   c                 J    |                      g d| j        j                   d S )Nr  )inputr  r  rt   s    r@   test_pymain_run_stdinzTestExit.test_pymain_run_stdin=  s'    "LdhoFFFFFrB   c                 Z    | j         }|                     d|j        g|j                   d S )Nz-mr  )r  r  stemr$   )r7   r  s     r@   test_pymain_run_modulezTestExit.test_pymain_run_module@  s1    h4*
;;;;;rB   )r   rR   rS   STATUS_CONTROL_C_EXITr   platformsignalSIGINTr  staticmethod
contextlibcontextmanagerr  r  r   r  r  r  r  r  r  r  r  __classcell__)r  s   @r@   r  r    s       & <7"" 	m^ 
 ' '  \'

) 
) 
) 
) 
) > > >& & &1 1 19 9 9
 
 
E E EG G G< < < < < < <rB   r  r   )1r  importlib.machineryre   importlib.utilos.pathrz   rW  r_  rH  r  r  r   r   r  unittestr  test.supportr   r   r   test.support.import_helperr   r   r   test.support.os_helperr	   r
   test.support.script_helperr   r   r   r   r   r   r   rZ   implicit_namespacerF   dictr]   r^   r"   TestCaserV   rm   r5  r  r   mainrT   rB   r@   <module>r     s       * * * * * * * *       				      



     A A A A A A A A A A F F F F F F F F F F > > > > > > > > C C C C C C C C  C C C C C C C C C C C C&    %'>?!$"d%T; ; ;	 	    + , , ,LF LF LF LF LF LF LF LF^$: $: $: $: $:X.0B $: $: $:NUE UE UE UE UE)+= UE UE UEna> a> a> a> a>h'); a> a> a>HM< M< M< M< M<x  M< M< M<` zHMOOOOO rB   