
    6\hч                     P   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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/e0dk    r ej1                     dS dS )    N)
no_tracingverboserequires_subprocessrequires_resource)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 )N__r!   r   z	__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	            9/opt/python-3.11.14/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 )Nr   r   sentinel)	objectr,   r   argvmodulesgetrB   assertIsassertIsNot)
r8   create_namespaceexpected_namespacerE   r:   run_namesaved_argv0	saved_modr9   
initial_nss
             rA   check_code_executionz'CodeExecutionMixin.check_code_executionx   sE   	 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ErC   N)r   
__module____qualname__r5   rB   rR    rC   rA   r#   r#   D   sM        M M M&/ &/ &/PF F F F FrC   r#   c                       e Zd Z	 d Zd ZdS )ExecutionLayerTestCasec                     t                                           }|                    dd i           d }|                     ||           d S )Nr   c                 .    t          t          i |           S N)r   example_source)init_globalss    rA   	create_nsz7ExecutionLayerTestCase.test_run_code.<locals>.create_ns   s    ^R>>>rC   )example_namespacer,   updaterR   )r8   r:   r]   s      rA   test_run_codez$ExecutionLayerTestCase.test_run_code   s`    ',,..$
 	 	 		? 	? 	?!!)[99999rC   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&   r2   T)r   r   r   r   r   r   r   r    c                 2    t          t          |           S rZ   )r   r[   )r\   mod_namemod_specs    rA   r]   z>ExecutionLayerTestCase.test_run_module_code.<locals>.create_ns   s     #N$0$,$,. . .rC   )	importlib	machinery
ModuleSpecr^   r,   r_   rR   )r8   	mod_fname
mod_loadermod_packager:   r]   rd   re   s         @@rA   test_run_module_codez+ExecutionLayerTestCase.test_run_module_code   s    )	2
&11(9B9C 2 E E (,,.. !$& "'+%)	
 	
 		 		 			. 	. 	. 	. 	. 	.
 	!!)[99999rC   N)r   rS   rT   r`   rl   rU   rC   rA   rW   rW      s5        C: : :: : : : :rC   rW   c                       e 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 )"RunModuleTestCasec                 x    	 t          |           |                     d|z              d S # t          $ r Y d S w xY w)NzExpected import error for )r   failImportError)r8   rd   s     rA   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)rr   r8   s    rA   test_invalid_namesz$RunModuleTestCase.test_invalid_names   s      '''  000  000  )))  +++  +++  ///  ---  !233333rC   c                 X    |                      t          d          d         d           d S )Nr   r   )r3   r   ru   s    rA   test_library_modulez%RunModuleTestCase.test_library_module   s+    G,,Z8'BBBBBrC   Fc                     t          j        |           |rd S t           j                            |d          }t	          |           |S )N__init__.py)osmkdirpathjoinr
   )r8   pkg_dir	namespace	pkg_fnames       rA   _add_pkg_dirzRunModuleTestCase._add_pkg_dir   sH    
 	4GLL-88	)$$$rC   
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.)RuntimeErrorr{   extsepr}   realpathtempfilemkdtempr   printr   insertr~   r   openwriterf   utilspec_from_file_location)r8   sourcedepthmod_baser   r   pkg_name
test_fnamer   sub_dirnamespace_flagsnamespace_flagr   ri   mod_filerd   re   s                    rA   	_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   rH   r.   r   r   r}   r{   walkremover~   OSErrorrmdir)	r8   topentryrootdirsfilesr$   exfullnames	            rA   _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   )rf   r   r   r$   )r8   ns	alter_syschar_to_addspecnew_specs         rA   _fix_ns_for_legacy_pycz(RunModuleTestCase._fix_ns_for_legacy_pyc  s    
:+%j><*~>99$):<Z.J J!: 	+{OOO{*OOOOO	+ 	+rC   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   rd   s    rA   r]   z2RunModuleTestCase._check_module.<locals>.create_ns6      h	JJJJrC   r   Running from source:Running from compiled:Module executed successfully)r   r[   r   r^   r,   r_   r'   
rpartitionr   r   rR   rf   invalidate_caches
__import__r{   r   r   dont_write_bytecoder   r	   r   r   )r8   r   r   r   r   r   ri   re   r:   r]   rd   s     `       @rA   _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    rA   r]   z3RunModuleTestCase._check_package.<locals>.create_ns_  r   rC   r   r   r   zPackage executed successfully)r   r[   r   r   r^   r,   r_   rf   r   cache_from_sourcer   r   rR   r   r   r{   r   r   r   r   r	   r   r   )r8   r   r   r   r   r   ri   rd   re   r:   r]   r   s     `        @rA   _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ranger{   r}   r~   r
   r   r   r   )r8   base_dirr   r   r   
module_diri
parent_dirsibling_fname	uncle_dir
cousin_dirnephew_fnames               rA   _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;;rC   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   )rN   r   r   siblingnephewr   r   )r   r   r   r   r   r   r3   assertInrf   r   r   r{   r   r   r   r   r	   r   )r8   r   rN   contentsr   ri   rd   re   expected_namer   d1d2s               rA   _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   r8   r   s     rA   test_run_modulez!RunModuleTestCase.test_run_module  sQ    1XX 	& 	&E{{E":EBBBu%%%%	& 	&rC   c                     t          dd          D ]5}t          dk    rt          d|           |                     |dd           6d S Nr   r   r   Tr   r   r   s     rA   $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rC   c                     t          dd          D ]2}t          dk    rt          d|           |                     |           3d S )Nr   r   r   r   r   r   r   r   s     rA   test_run_packagez"RunModuleTestCase.test_run_package  sS    1a[[ 	' 	'E{{E":EBBB&&&&	' 	'rC   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 )Nrb   r   r   	.__main__r   rz   z raise {0}('{0} in __init__.py.')wtasciiencodingzNothing raised; expected {}zfinding specz
.submodule)r   replace
addCleanupr   r{   r}   r~   rq   AttributeError	TypeErrorr   r   subTestformatr   r   r   rp   assertNotIn)r8   r   r   _rd   init
exceptions	exceptionr$   r   r   errs               rA    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)Nrb   r   found in sys\.modules)r   r   assertWarnsRegexRuntimeWarningr   r   )r8   r   r   rd   s       rA   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 )Nrb   r   r   r   errorr  )r   r   r   r   r   r   r   rH   warningscatch_warningssimplefilterr  r   r  )r8   r   r   rd   packages        rA    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     rA   %test_run_package_in_namespace_packagez7RunModuleTestCase.test_run_package_in_namespace_package  sX    1a[[ 	? 	?E{{E":EBBB>>>>	? 	?rC   c                     t          dd          D ]4}t          dk    rt          d|           |                     |d           5d S )Nr   r   r   T)r   r   r   s     rA   test_run_namespace_packagez,RunModuleTestCase.test_run_namespace_package  X    1a[[ 	7 	7E{{E":EBBB6666	7 	7rC   c                     t          dd          D ]5}t          dk    rt          d|           |                     |dd           6d S r   r   r   s     rA   /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rC   c                     t          d          D ]4}t          dk    rt          d|           |                     |d           5d S )Nr   r   r   Tr   r   r   s     rA   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 	6rC   c                     t          dd          D ]4}t          dk    rt          d|           |                     |d           5d S )Nr   r   r   Tr   r   r   s     rA   test_run_package_alter_sysz,RunModuleTestCase.test_run_package_alter_sys	  r  rC   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     rA   test_explicit_relative_importz/RunModuleTestCase.test_explicit_relative_import  sS    1a[[ 	0 	0E{{E"FNNN((////	0 	0rC   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     rA   test_main_relative_importz+RunModuleTestCase.test_main_relative_import  sU    1a[[ 	< 	<E{{E"KUSSS((
;;;;	< 	<rC   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 rZ   r   )r\   rd   rN   s    rA   r]   z2RunModuleTestCase.test_run_name.<locals>.create_ns&  s    hh???rC   )r   r[   r   r^   r,   r_   rf   r   r   r   rR   r   )	r8   r   r   ri   re   r:   r]   rd   rN   s	          @@rA   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_testrb   r  )pkgutilr7   r   r~   addr   r   r   r   walk_packagesassertIsInstance
ModuleInfomodule_finderrf   rg   
FileFinderispkgr   r$   r3   len)r8   r$  	max_depth	base_namepackage_suffixesmodule_suffixesexpected_packagesexpected_modulesr   r   r$   r   ri   rd   re   
moduleinfos                   rA   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DrC   )F)r   rZ   )r   rS   rT   rr   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r"  r4  rU   rC   rA   rn   rn      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rC   rn   c                       e 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 ed          d                         Zd ZdS )RunPathTestCaseNFc                 8    |t           }t          ||||          S rZ   )r[   r   )r8   
script_dirscript_basenamer   omit_suffixs        rA   _make_test_scriptz!RunPathTestCase._make_test_scriptT  s'    >#F:!;0 0 	0rC   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 rZ   r   )r\   script_names    rA   r]   z0RunPathTestCase._check_script.<locals>.create_ns_  s    K666rC   rb   T)r   r   r   r   r   r   r   r    zprove.issue15230.is.fixedc                 &    t          |           S rZ   r>  )r\   rN   r?  s    rA   r]   z0RunPathTestCase._check_script.<locals>.create_ns|  s    Kx@@@rC   r   r   r   r   r   )
r^   r,   rf   r   r   r'   r2   r_   rR   r   )r8   r?  r   expected_fileexpected_argv0rd   expect_speccheck_loaderr]   r:   	spec_namere   
mod_cachedrN   s    `           @rA   _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9rC   c                 r    t          j        |          }|                     t          |t          |           d S rZ   )reescapeassertRaisesRegexrq   r   )r8   r?  msgs      rA   _check_import_errorz#RunPathTestCase._check_import_error  s/    inn{C;GGGGGrC   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rC  r   r;  rG  r8   r8  rd   r?  s       rA   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 rO  )r   pathlibPathr;  rG  rT  s       rA   "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 )NrP  T)r:  rQ  FrR  rS  rT  s       rA   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 )NrP  TdoraiserQ  FrR  )r   r;  
py_compilecompiler{   r   rG  )r8   r8  rd   r?  compiled_names        rA   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   rQ  rd   rS  rT  s       rA   test_directoryzRunPathTestCase.test_directory  s    ZZ 	>:!H00XFFKz<)H  > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>rV  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^  rQ  re  )
r   r;  r`  ra  r{   r   r   r   r   rG  )r8   r8  rd   r?  rb  
legacy_pycs         rA   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;  rM  )r8   r8  rd   r?  rL  s        rA   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_ziprQ  Frd   rD  )r   r;  r   rG  )r8   r8  rd   r?  zip_namefnames         rA   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^  ro  rQ  Frp  )r   r;  r`  ra  r   rG  )r8   r8  rd   r?  rb  rq  rr  s          rA   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 )Nrk  ro  rl  )r   r;  r   rM  )r8   r8  rd   r?  rq  rr  rL  s          rA   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 	4rt  cpuc                 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)
ro  )r   r;  r   assertRaisesRecursionErrorr   )r8   r8  	dummy_dirrd   r   r?  rq  rr  s           rA   test_main_recursion_errorz)RunPathTestCase.test_main_recursion_error  sE    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   r{   r}   r~   r   r   r   r3   )r8   r8  filenamefr   s        rA   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   rS   rT   r;  rG  rM  rU  rZ  r\  rc  rf  ri  rm  rs  rv  rx  r   r   r~  r  rU   rC   rA   r6  r6  Q  sD       ' 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 uB B  ZB	> 	> 	> 	> 	>rC   r6  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 rZ   )r   rX  rY  )argskwargstmp_fns      rA   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)r8   r  r  tmpr  	__class__s        rA   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/   r3   
returncodeEXPECTED_CODE)r8   cmdr  r  procs        rA   assertSigIntzTestExit.assertSigInt  s     ~t*c*~cVDVVVFVjoVVVV,,-DEEt{SSS$*<=====rC   c                 <    |                      | j        g           d S rZ   )r  r  ru   s    rA   test_pymain_run_filezTestExit.test_pymain_run_file  s     48*%%%%%rC   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  )r8   r  r   s      rA   %test_pymain_run_file_runpy_run_modulez.TestExit.test_pymain_run_file_runpy_run_module  sc    ho?*

O 	
 	
 	
 	:,C00000rC   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  )r8   r  run_module_as_mains      rA   -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8rC   c                 L    |                      ddg| j        j                   d S )N-cz%import runpy; runpy.run_module('ham')r  r  r  r%   ru   s    rA   "test_pymain_run_command_run_modulez+TestExit.test_pymain_run_command_run_module5  s9    :; 	 	
 	
 	
 	
 	
rC   c                 L    |                      ddg| j        j                   d S )Nr  
import hamr  r  ru   s    rA   test_pymain_run_commandz TestExit.test_pymain_run_command;  s*    4.DHODDDDDrC   c                 J    |                      g d| j        j                   d S )Nr  )inputr  r  ru   s    rA   test_pymain_run_stdinzTestExit.test_pymain_run_stdin>  s'    "LdhoFFFFFrC   c                 Z    | j         }|                     d|j        g|j                   d S )Nz-mr  )r  r  stemr%   )r8   r  s     rA   test_pymain_run_modulezTestExit.test_pymain_run_moduleA  s1    h4*
;;;;;rC   )r   rS   rT   STATUS_CONTROL_C_EXITr   platformsignalSIGINTr  staticmethod
contextlibcontextmanagerr  r  r   r  r  r  r  r  r  r  r  __classcell__)r  s   @rA   r  r    s       & <7"" 	m^ 
 ' '  \'

) 
) 
) 
) 
) > > >& & &1 1 19 9 9
 
 
E E EG G G< < < < < < <rC   r  r   )2r  importlib.machineryrf   importlib.utilos.pathr{   rX  r`  rI  r  r  r   r   r  unittestr	  test.supportr   r   r   r   test.support.import_helperr   r   r	   test.support.os_helperr
   r   test.support.script_helperr   r   r   r   r   r   r   r[   implicit_namespacerG   dictr^   r_   r#   TestCaserW   rn   r6  r  r   mainrU   rC   rA   <module>r     s       * * * * * * * *       				      



     T T T T T T T T T T T T 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b> b> b> b> b>h'); b> b> b>JM< M< M< M< M<x  M< M< M<` zHMOOOOO rC   