
    z%iч                     N   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jL                  d    dd e'e%ddd      dZ(e(jS                  e%        G d d      Z* G d dejV                  e*      Z, G d dejV                  e*      Z- G d dejV                  e*      Z. G d dejV                        Z/e0dk(  r ejb                          yy)    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y)CodeExecutionMixin)nameparentorigincachedhas_locationsubmodule_search_locationsc                 "   	 |j                         }|j                         }t        |      D ]W  }|j                  d      s|j                  d      s'||vr|j	                  |       ||d   vsD|d   j	                  |       Y |j	                  d      }|j	                  d      }|| j                  |       n|j                  8| j                  t        |j                        t        |j                               | j                  D ]5  }d|z   }|t        ||      f}|t        ||      f}| j                  ||       7 | j                  t        |      t        |             |D ]"  }|||   f}|||   f}| j                  ||       $ y )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	            C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_runpy.pyassertNamespaceMatchesz)CodeExecutionMixin.assertNamespaceMatchesP   s   	
 NN$	!&&(i 	/A||D!ajj&6K'MM!$K11h'++A.	/  mmJ/#
3 k* ##/  k&8&8!9!%m&:&:!;=44 3$&W[$78w}d;<  2	3 	Y[)9: 	/A1&F;q>*HVX.	/    c                    	 t               }|j                         }|d   }t        j                  d   }t        j                  j                  ||      } |d       }| j                  ||       | j                  t        j                  d   |       | j                  t        j                  j                  ||      |       d|i}	||d<    ||	      }| j                  ||	       | j                  ||       | j                  t        j                  d   |       | j                  t        j                  j                  ||      |       y )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   s   	 8(--/z*hhqkKKOOHh7	$T*	##I{;chhqk;/ckkooh99E (+
"*J$Z0	J/##I{;chhqk;/ckkooh99ErC   N)r   
__module____qualname__r5   rB   rR    rC   rA   r#   r#   D   s    M&/PFrC   r#   c                       e Zd Z	 d Zd Zy)ExecutionLayerTestCasec                 |    t         j                         }|j                  dd i       d }| j                  ||       y )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=    ',,.$
 		?!!)[9rC   c                     dd}d}d}t         j                  j                  ||      t        j	                         }|j                  ||||ddd       fd}| j                  ||       y )	Nz
<Nonsense>zSome other nonsensezNow you're just being silly )r&   r2   T)r   r   r   r   r   r   r   r    c                 (    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 (,,. !$& "'+%)	
 			.
 	!!)[9rC   N)r   rS   rT   r`   rl   rU   rC   rA   rW   rW      s    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y)!RunModuleTestCasec                 b    	 t        |       | j                  d|z          y # t        $ r Y y w xY w)NzExpected import error for )r   failImportError)r8   rd   s     rA   expect_import_errorz%RunModuleTestCase.expect_import_error   s7    	?x  II2X=>  		s   " 	..c                 6   | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d	       y )
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  )  +  +  /  -  !23rC   c                 @    | j                  t        d      d   d       y )Nr   r   )r3   r   ru   s    rA   test_library_modulez%RunModuleTestCase.test_library_module   s    G,Z8'BrC   Fc                     t        j                  |       |ry t         j                  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   s6    
GGLL-8	)$rC   r   parent_namespacesc                   |s|r|st        d      d}|t        j                  z   dz   }t        j                  j	                  t        j                               x}}	t        dkD  rt        d|	       t        j                  j                  d|       t        dkD  rt        dt        j                  d          |ro|g|z  }
||
d<   |
D ]_  }t        j                  j                  |	|      }	| j                  |	|      }t        dkD  rt        d	|	       t        dkD  sTt        d
|       a t        j                  j                  |	|      }t        |d      5 }|j                  |       d d d        t        dkD  rt        d
|       |dz   |z  |z   }t        j                   j#                  ||      }||||fS # 1 sw Y   OxY w)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    *E  3 4 4"bii',
GG,,X-=-=-?@@'Q;2G<7#Q;3SXXa[A01E9O"+OB"1 ?'',,w9 --g~F	Q;&8' BQ;lI >	?
 GGLL*5	)S! 	#XNN6"	#Q;lI6SL%'(2>>99(:CE	8X55	# 	#s   F55F>c                    t        t        j                        D ]%  }|j                  d      st        j                  |= ' t        dkD  rt        d       t        j                  d= t        dkD  rt        d       t        j                  |d      D ]~  \  }}}|D ]6  }	 t        j                  t        j                  j                  ||             8 |D ]8  }t        j                  j                  ||      }	 t        j                  |       :  	 t        j                  |       t        dkD  rt        d       y y # t        $ r}t        dkD  rt        |       Y d }~d }~ww xY w# t        $ r}t        dkD  rt        |       Y d }~d }~ww xY w# t        $ r#}t        dkD  rt        |       Y d }~y Y d }~y 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   sg   #++& 	'E0KK&	' Q;=>HHQKQ;89!#e!< 	.D$ ..IIbggll467.
  .77<<d3.HHX&.	.	&HHSM{E":;{  .{E"I.  .{E"I.
  	&{E"II{	&sH   3D?:E))F ?	E&E!!E&)	F2FF	F?F::F?c                     d}|dxx   |z  cc<   |d   |d<   |d   }t         j                  j                  |j                  |d         }||d<   |r|dxx   |z  cc<   y y )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  sm    
:+%j><*~>>99$)):<Z.J!:{O{*O rC   c                8  
 | j                  t        |||      \  }}
}t        
       t        j	                         }|j                  
||j                  
j                  d      d   |d       r|j                  |ddd       
fd}		 t        dkD  rt        d	
       | j                  |	|       t        j                          t        
       t        j                  |       t         j"                  sct%        |       t'        
       t        j                          t        dkD  rt        d

       | j)                  |       | j                  |	|       | j+                  |       t        dkD  rt        d       y y # | j+                  |       w xY w)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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!  sl    ~~ne(10A  C 	/Hh 	x',,. !"//#..s3A6 
 	 &+/)-  
	K	#{E"8(C%%i='')x IIi **	*x ++-Q;&> I++KC)))[AMM'"Q;<=; MM'"s   CF Fc                d   | j                  t        |d||      \  }}}}|j                  d      d   t        |       t        j                         }	|	j                  ||t        j                  j                  |      |d       r|	j                  |ddd       fd}
	 t        d	kD  rt        d
       | j                  |
|	       t        j                          t        |       t        j                   |       t"        j$                  sct'        |       t)        |       t        d	kD  rt        d       t        j                          | j+                  |	       | j                  |
|	       | j-                  |       t        d	kD  rt        d       y y # | j-                  |       w xY w)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  s~    ~~neZ(10A  C 	/Hh &&s+A.x',,. !#..::9E# 
 	 &+/)-  
	K	#{E"8(C%%i='')x IIi **	*x Q;&> I++-++KC)))[AMM'"Q;=>; MM'"s   'CF F/c                    |dk  rt        d      d}|}t        |      D ]$  }|}t        j                  j	                  ||      }& t        j                  j	                  |d      }t        |       t        dkD  rt        d|       t        j                  j	                  d      }	| j                  |	       t        dkD  rt        d|	       t        j                  j	                  |	d      }
| j                  |
       t        dkD  rt        d	|
       t        j                  j	                  |
d
      }t        |       t        dkD  rt        d|       y y )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"
u 	<A#Jj(;J	< Z>-(Q;7GGGLLW5	)$Q;6	BWW\\)X6
*%Q;7Dww||J<,'Q;6E;rC   Nc                    d}| j                  ||      \  }}}}||}n|}	 | j                  |||       |j                  d      d   }	t        dkD  rt	        d|       t        ||      }
| j                  |
d   |       | j                  |
d   |	       | j                  d	|
       | j                  d
|
       ~
t        j                          t        |       t        j                  |       t        j                  st        |       t!        |       t        dkD  rt	        d|       t        j                          t        ||      }| j                  |d   |       | j                  |d   |	       | j                  d	|       | j                  d
|       ~| j#                  |       t        dkD  rt	        d       y y # | j#                  |       w xY w)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  s    ~~h. 	/Hh$M$M	#&&w%@**3/2H{E"8(CHx8BR
^];R.9MM)R(MM(B''')x IIi **	*x Q;&> I++-8<  J?  M!2H=i,h+MM'"Q;<=; MM'"s   E7G   Gc                 p    t        d      D ](  }t        dkD  rt        d|       | j                  |       * y )N   r   Testing package depth:r   r   r   r   r8   r   s     rA   test_run_modulez!RunModuleTestCase.test_run_module  s4    1X 	&E{E":EBu%	&rC   c                 x    t        dd      D ]+  }t        dkD  rt        d|       | j                  |dd       - y Nr   r   r   Tr   r   r   s     rA   $test_run_module_in_namespace_packagez6RunModuleTestCase.test_run_module_in_namespace_package  s?    1a[ 	NE{E":EBuM	NrC   c                 r    t        dd      D ](  }t        dkD  rt        d|       | j                  |       * y )Nr   r   r   r   r   r   r   r   s     rA   test_run_packagez"RunModuleTestCase.test_run_package  s6    1a[ 	'E{E":EB&	'rC   c           	      j   | j                  ddd      }|\  }}}}|j                  dd      }| j                  | j                  |       t        j
                  j                  |dd      }t        t        t        t        f}|D ]  }|j                  }| j                  |      5  dj                  |      }	t        |dd	
      5 }
|
j                  |	       d d d        	 t!        |       | j#                  dj                  |             	 t!        |dz          | j#                  dj                  |             d d d         y # 1 sw Y   oxY w# |$ r%}| j%                  dt        |             Y d }~kd }~ww xY w# |$ r%}| j%                  dt        |             Y d }~id }~ww xY w# 1 sw Y   0xY w)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"(Ha##K4w/ww||G_mD!>9jI
# 	JI%%Dd# J;BB4H$w7 +8NN6*+Jx( II;BB4HIJx,67 II;BB4HIJ J	J+ + ! B$$^VC[AAB ! B$$^VC[AABJ Jsx   " F(EF(E( F(	E; F(EF(E8E3.F(3E88F(;F% F F( F%%F((F2	c                    | j                  dd      \  }}}}	 t        |       | j                  t        d      5  t	        |       d d d        | j                  |       y # 1 sw Y   xY w# | j                  |       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  su    "&..Q"7Ha	#x &&~,. %8$% MM'"	% % MM'"s"   !A, A A,  A)%A, ,A?c                    | j                  ddd      \  }}}}| j                  | j                  |       |j                  dd      }t	        |       | j                  |t        j                         t        j                         5  t        j                  dt               t        |       d d d        t	        |       | j                  t        d      5  t        |       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)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Haw/"";37gs{{+$$& 	 !!'>:w	  	8"">3KL 	 w	  	 	  	 
	  	 s   &C*C6*C36C?c                 v    t        dd      D ]*  }t        dkD  rt        d|       | j                  |d       , y )Nr   r   r   T)r   r   r   s     rA   %test_run_package_in_namespace_packagez7RunModuleTestCase.test_run_package_in_namespace_package  s;    1a[ 	?E{E":EB>	?rC   c                 v    t        dd      D ]*  }t        dkD  rt        d|       | j                  |d       , y )Nr   r   r   T)r   r   r   s     rA   test_run_namespace_packagez,RunModuleTestCase.test_run_namespace_package  ;    1a[ 	7E{E":EB6	7rC   c                 x    t        dd      D ]+  }t        dkD  rt        d|       | j                  |dd       - y r   r   r   s     rA   /test_run_namespace_package_in_namespace_packagezARunModuleTestCase.test_run_namespace_package_in_namespace_package  s?    1a[ 	OE{E":EBN	OrC   c                 t    t        d      D ]*  }t        dkD  rt        d|       | j                  |d       , y )Nr   r   r   Tr   r   r   s     rA   test_run_module_alter_sysz+RunModuleTestCase.test_run_module_alter_sys  s9    1X 	6E{E":EBu5	6rC   c                 v    t        dd      D ]*  }t        dkD  rt        d|       | j                  |d       , y )Nr   r   r   Tr   r   r   s     rA   test_run_package_alter_sysz,RunModuleTestCase.test_run_package_alter_sys	  r  rC   c                 r    t        dd      D ](  }t        dkD  rt        d|       | j                  |       * y )N      r   z"Testing relative imports at depth:r   r   r   r   r   s     rA   test_explicit_relative_importz/RunModuleTestCase.test_explicit_relative_import  s6    1a[ 	0E{E"FN((/	0rC   c                 t    t        dd      D ])  }t        dkD  rt        d|       | j                  |d       + y )Nr  r  r   z'Testing main relative imports at depth:r   r  r   s     rA   test_main_relative_importz+RunModuleTestCase.test_main_relative_import  s8    1a[ 	<E{E"KUS((
;	<rC   c                    d}d| j                  t        |      \  }}}t               t        j	                         }|j                  |t        j                  j                  |      j                  d      d   |d       fd}	 | j                  ||       | j                  |       y # | j                  |       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 	/Hhx',,. !#..::9E#..s3A6 
 		@	#%%i=MM'"DMM'"s   B2 2Cc                 $   dd l }d}d}ddg}d|dz   g}t               }t               }t        d|      D ]d  }d	j                  |g|z        }	|j	                  |	       |D ]  }
|j	                  |	d	z   |
z           |D ]  }
|j	                  |	d	z   |
z           f d	j                  |g|z        }	|j	                  |	       |j	                  |	d
z          | j                  d|      \  }}}}| j                  | j                  |       t        d|dz         D ]  }| j                  |d|        |j                  |g      D ]  }| j                  ||j                         | j                  |j                  t        j                  j                         |j                   r|j#                  |j$                         {|j#                  |j$                          | j'                  t)        |      d|       | j'                  t)        |      d|       y )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E51i( 	<Exxe 34H!!(+( =!%%hnt&;<=' < $$X^d%:;<	< 88YK)34h'X56~~b), 	/Hhw/1ik* 	;E&&wE:	;!//	: 	9J!!*g.@.@A!!*":":"+"5"5"@"@B!((9 ''
8	9 	./4EF-.3CDrC   )F)
runpy_testrZ   )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!  r3  rU   rC   rA   rn   rn      s    )?4C6"'56:&2	+&>&+u&>P'?','?RF.&>P&
N
'
J8# ?
7
O
6
7
0
<
#*"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y)RunPathTestCaseNc                 .    |t         }t        ||||      S rZ   )r[   r   )r8   
script_dirscript_basenamer   omit_suffixs        rA   _make_test_scriptz!RunPathTestCase._make_test_scriptT  s"    >#F:!;0 	0rC   c                    fd}t         j                         }	||}
n|}
|r6t        j                  j	                  |
|      }|j
                  }|sd |_        nd x}}|	j                  |||d||ddd       | j                  ||	       dfd}|r0|.t        j                  j	                  |      }|sd |_        ||	d<   |	d<   j                  d	      d
   |	d<   | j                  ||	       y )Nc                     t        |       S rZ   r   )r\   script_names    rA   r]   z0RunPathTestCase._check_script.<locals>.create_ns_  s    K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',,.%I I ~~==i>KMH!J"&$((Hz%%$ ''+%)	
 		 	!!)[9.	A8+ ~~==h>KMH"&&.K
#"*J%-%8%8%=a%@M"!!)[9rC   c                 f    t        j                  |      }| j                  t        |t        |       y rZ   )reescapeassertRaisesRegexrq   r   )r8   r?  msgs      rA   _check_import_errorz#RunPathTestCase._check_import_error  s#    iin{C;GrC   c                     t               5 }d}| j                  ||      }| j                  |d||d       d d d        y # 1 sw Y   y xY wNscript
<run_path>FrC  r   r;  rG  r8   r8  rd   r?  s       rA   test_basic_scriptz!RunPathTestCase.test_basic_script  sS    Z 	?:H00XFK{L+*  ?	? 	? 	?	   +?Ac                     t               5 }d}t        j                  | j                  ||            }| j	                  |d||d       d d d        y # 1 sw Y   y xY wrO  )r   pathlibPathr;  rG  rT  s       rA   "test_basic_script_with_path_objectz2RunPathTestCase.test_basic_script_with_path_object  sc    Z 	?:H!,,t'='=j>F(H IK{L+*  ?		? 	? 	?s   >AAc                     t               5 }d}| j                  ||d      }| j                  |d||d       d d d        y # 1 sw Y   y xY w)NrP  T)r:  rQ  FrR  rS  rT  s       rA   test_basic_script_no_suffixz+RunPathTestCase.test_basic_script_no_suffix  s^    Z 	?:H00X=A 1 CK{L+*  ?		? 	? 	?s   -AA
c                     t               5 }d}| j                  ||      }t        j                  |d      }t	        j
                  |       | j                  |d||d       d d d        y # 1 sw Y   y xY w)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  sv    Z 	A:H00XFK&..{DIMIIk"}lM,%  A	A 	A 	As   AA++A4c                     t               5 }d}| j                  ||      }| j                  |d|||       d d d        y # 1 sw Y   y xY w)Nr   rQ  rd   rS  rT  s       rA   test_directoryzRunPathTestCase.test_directory  sS    Z 	>:!H00XFKz<)H  >	> 	> 	>rV  c                 $   t               5 }d}| j                  ||      }t        j                  |d      }t	        j
                  |       t        j                  s!t        |      }| j                  |d|||       d d d        y # 1 sw Y   y xY w)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    Z 	B:!H00XFK&..{DIMIIk"**,[9
"":|Z#- # B	B 	B 	Bs   A2BBc                     t               5 }d}| j                  ||      }d|z  }| j                  ||       d d d        y # 1 sw Y   y xY w)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  sO    Z 	6:!H00XFK6CC$$Z5		6 	6 	6s   ,A  A	c           	          t               5 }d}| j                  ||      }t        |d|      \  }}| j                  |d|||d       d d d        y # 1 sw Y   y xY w)Nr   test_ziprQ  Frd   rD  )r   r;  r   rG  )r8   r8  rd   r?  zip_namefnames         rA   test_zipfilezRunPathTestCase.test_zipfile  sl    Z 	F:!H00XFK-j*kROHexuh(0u  F		F 	F 	F   <AAc           	          t               5 }d}| j                  ||      }t        j                  |d      }t	        |d|      \  }}| j                  |d|||d       d d d        y # 1 sw Y   y xY w)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    Z 	F:!H00XFK&..{DIM-j*.;=OHexuh(0u  F	F 	F 	Fs   AA''A0c                     t               5 }d}| j                  ||      }t        |d|      \  }}d|z  }| j                  ||       d d d        y # 1 sw Y   y xY w)Nrk  ro  rl  )r   r;  r   rM  )r8   r8  rd   r?  rq  rr  rL  s          rA   test_zipfile_errorz"RunPathTestCase.test_zipfile_error  sa    Z 	4:!H00XFK-j*kROHe6AC$$Xs3	4 	4 	4rt  cpuc                 
   t               5 }t               5 }d}d|z  }| j                  |||      }t        |d|      \  }}| j                  t        t
        |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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  s     Z 	B:xz 	BY!H-09:F00XvNK-j*kROHenhA	B 	B 	B 	B 	B 	Bs#   A9AA-A9-A6	2A99Bc                 *   t               5 }t        j                  j                  |d      }t	        |dd      5 }|j                  d       d d d        t        |      }| j                  |d   d       d d d        y # 1 sw Y   2xY w# 1 sw Y   y xY w)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    Z 	>:ww||J<Hhh7 1  
 h'FVC[*<=	> 	> 	> 	>s"   /B	A=(B	=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  s    ' 490 6:;?+:ZH???A>	B6FF4 uB  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               /   x   K   t               5 }t        j                  |       d d d        y # 1 sw Y   y xY wwrZ   )r   rX  rY  )argskwargstmp_fns      rA   tmp_pathzTestExit.tmp_path  s2      Z 	'6,,v&&	' 	' 	's   :.	:7:c                     | j                         5 }|dz  x| _        }|j                  t        j                  d             t        |   |i | d d d        y # 1 sw Y   y xY w)Nzham.pyz@                    raise KeyboardInterrupt
                    )r  ham
write_texttextwrapdedentsuperrun)r8   r  r  tmpr  	__class__s        rA   r  zTestExit.run  sc    ]]_ 		) 8^+DHsNN GK((		) 		) 		)s   A AA$c                 :   t         j                  dg|}t        j                  |g|i |dt        j                  d}| j                  |j                  j                  d      |j                         | j                  |j                  | j                         y )Nz-ET)textstderrz
KeyboardInterrupt
)r   
executable
subprocessr  PIPE
assertTruer  r/   r3   
returncodeEXPECTED_CODE)r8   cmdr  r  procs        rA   assertSigIntzTestExit.assertSigInt  sv     ~~t*c*~~cVDVFVjooV,,-DEt{{S$*<*<=rC   c                 <    | j                  | j                  g       y rZ   )r  r  ru   s    rA   test_pymain_run_filezTestExit.test_pymain_run_file  s    488*%rC   c                     | j                   j                  }|dz  } |j                  t        j                  d             | j                  |g|       y )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  sQ    hhoo?*

OO	
 	:,C0rC   c                     | j                   j                  }|dz  }|j                  t        j                  d             | j                  |g|       y )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(  sS    hhoo #::%%OO	
 	-.C8rC   c                 V    | j                  ddg| j                  j                         y )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  s)    :; 	 	
rC   c                 V    | j                  ddg| j                  j                         y )Nr  
import hamr  r  ru   s    rA   test_pymain_run_commandz TestExit.test_pymain_run_command;  s"    4.DHHOODrC   c                 T    | j                  g d| j                  j                         y )Nr  )inputr  r  ru   s    rA   test_pymain_run_stdinzTestExit.test_pymain_run_stdin>  s    "LdhhooFrC   c                 n    | j                   }| j                  d|j                  g|j                         y )Nz-mr  )r  r  stemr%   )r8   r  s     rA   test_pymain_run_modulezTestExit.test_pymain_run_moduleA  s+    hh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" 	mm^ 
 '  '

) > >&19
E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 F F > C  C C&   %'>?!$"%T;	    + ,LF LF^$:X..0B $:NUE))+= UEnb>h''); b>JM<x   M<` zHMMO rC   