
    daf                     R   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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jN                  d    dd e(e&ddd      dZ)e)jU                  e&        G d d      Z+ G d dejX                  e+      Z- G d dejX                  e+      Z. G d dejX                  e+      Z/ G d dejX                        Z0e1dk(  r ejd                          yy)    N)
no_tracingverboserequires_subprocessrequires_resource)forgetmake_legacy_pycunload)create_empty_filetemp_dirFakePath)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)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	            */root/Python-3.12.4/Lib/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)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getrC   assertIsassertIsNot)
r9   create_namespaceexpected_namespacerF   r;   run_namesaved_argv0	saved_modr:   
initial_nss
             rB   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ErD   N)r   
__module____qualname__r6   rC   rS    rD   rB   r$   r$   D   s    M&/PFrD   r$   c                       e Zd ZdZd Zd Zy)ExecutionLayerTestCasez9Unit tests for runpy._run_code and runpy._run_module_codec                 |    t         j                         }|j                  dd i       d }| j                  ||       y )Nr   c                 $    t        t        i |       S N)r   example_source)init_globalss    rB   	create_nsz7ExecutionLayerTestCase.test_run_code.<locals>.create_ns   s    ^R>>rD   )example_namespacer-   updaterS   )r9   r;   r^   s      rB   test_run_codez$ExecutionLayerTestCase.test_run_code   s=    ',,.$
 		?!!)[9rD   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'   r3   T)r   r   r   r   r   r   r    r!   c                 (    t        t        |       S r[   )r   r\   )r]   mod_namemod_specs    rB   r^   z>ExecutionLayerTestCase.test_run_module_code.<locals>.create_ns   s    #N$0$,$,. .rD   )	importlib	machinery
ModuleSpecr_   r-   r`   rS   )r9   	mod_fname
mod_loadermod_packager;   r^   re   rf   s         @@rB   test_run_module_codez+ExecutionLayerTestCase.test_run_module_code   s    )	2
&&11(9B9C 2 E (,,. !$& "'+%)	
 			.
 	!!)[9rD   N)r   rT   rU   r   ra   rm   rV   rD   rB   rX   rX      s    C::rD   rX   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y)"RunModuleTestCasezUnit tests for runpy.run_modulec                 b    	 t        |       | j                  d|z          y # t        $ r Y y w xY w)NzExpected import error for )r   failImportError)r9   re   s     rB   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)rs   r9   s    rB   test_invalid_namesz$RunModuleTestCase.test_invalid_names   s      '  0  0  )  +  +  /  -  !23rD   c                 @    | j                  t        d      d   d       y )Nr   r   )r4   r   rv   s    rB   test_library_modulez%RunModuleTestCase.test_library_module   s    G,Z8'BrD   Fc                     t        j                  |       |ry t         j                  j                  |d      }t	        |       |S )N__init__.py)osmkdirpathjoinr
   )r9   pkg_dir	namespace	pkg_fnames       rB   _add_pkg_dirzRunModuleTestCase._add_pkg_dir   s6    
GGLL-8	)$rD   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writerg   utilspec_from_file_location)r9   sourcedepthmod_baser   r   pkg_name
test_fnamer   sub_dirnamespace_flagsnamespace_flagr   rj   mod_filere   rf   s                    rB   	_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   rI   r/   r   r   r~   r|   walkremover   OSErrorrmdir)	r9   topentryrootdirsfilesr%   exfullnames	            rB   _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   )rg   r   r   r%   )r9   ns	alter_syschar_to_addspecnew_specs         rB   _fix_ns_for_legacy_pycz(RunModuleTestCase._fix_ns_for_legacy_pyc  sm    
:+%j><*~>>99$)):<Z.J!:{O{*O rD   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   re   s    rB   r^   z2RunModuleTestCase._check_module.<locals>.create_ns6      h	JJrD   r   Running from source:Running from compiled:Module executed successfully)r   r\   r   r_   r-   r`   r(   
rpartitionr   r   rS   rg   invalidate_caches
__import__r|   r   r   dont_write_bytecoder   r	   r   r   )r9   r   r   r   r   r   rj   rf   r;   r^   re   s     `       @rB   _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    rB   r^   z3RunModuleTestCase._check_package.<locals>.create_ns_  r   rD   r   r   r   zPackage executed successfully)r   r\   r   r   r_   r-   r`   rg   r   cache_from_sourcer   r   rS   r   r   r|   r   r   r   r   r	   r   r   )r9   r   r   r   r   r   rj   re   rf   r;   r^   r   s     `        @rB   _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   )r9   base_dirr   r   r   
module_diri
parent_dirsibling_fname	uncle_dir
cousin_dirnephew_fnames               rB   _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;rD   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   )rO   r   r   siblingnephewr   r   )r   r   r   r   r   r   r4   assertInrg   r   r   r|   r   r   r   r   r	   r   )r9   r   rO   contentsr   rj   re   rf   expected_namer   d1d2s               rB   _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   r9   r   s     rB   test_run_modulez!RunModuleTestCase.test_run_module  s4    1X 	&E{E":EBu%	&rD   c                 x    t        dd      D ]+  }t        dkD  rt        d|       | j                  |dd       - y Nr   r   r   Tr   r   r   s     rB   $test_run_module_in_namespace_packagez6RunModuleTestCase.test_run_module_in_namespace_package  s?    1a[ 	NE{E":EBuM	NrD   c                 r    t        dd      D ](  }t        dkD  rt        d|       | j                  |       * y )Nr   r   r   r   r   r   r   r   s     rB   test_run_packagez"RunModuleTestCase.test_run_package  s6    1a[ 	'E{E":EB&	'rD   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)Nrc   r   r   	.__main__r   r{   z raise {0}('{0} in __init__.py.')wtasciiencodingzNothing raised; expected {}zfinding specz
.submodule)r   replace
addCleanupr   r|   r~   r   rr   AttributeError	TypeErrorr   r   subTestformatr   r   r   rq   assertNotIn)r9   r   r   _re   init
exceptions	exceptionr%   r   r   errs               rB    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)Nrc   r   found in sys\.modules)r   r   assertWarnsRegexRuntimeWarningr   r   )r9   r   r   re   s       rB   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)Nrc   r   r   r   errorr  )r   r   r   r   r   r   r   rI   warningscatch_warningssimplefilterr  r   r  )r9   r   r   re   packages        rB    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     rB   %test_run_package_in_namespace_packagez7RunModuleTestCase.test_run_package_in_namespace_package  s;    1a[ 	?E{E":EB>	?rD   c                 v    t        dd      D ]*  }t        dkD  rt        d|       | j                  |d       , y )Nr   r   r   T)r   r   r   s     rB   test_run_namespace_packagez,RunModuleTestCase.test_run_namespace_package  ;    1a[ 	7E{E":EB6	7rD   c                 x    t        dd      D ]+  }t        dkD  rt        d|       | j                  |dd       - y r   r   r   s     rB   /test_run_namespace_package_in_namespace_packagezARunModuleTestCase.test_run_namespace_package_in_namespace_package  s?    1a[ 	OE{E":EBN	OrD   c                 t    t        d      D ]*  }t        dkD  rt        d|       | j                  |d       , y )Nr   r   r   Tr   r   r   s     rB   test_run_module_alter_sysz+RunModuleTestCase.test_run_module_alter_sys  s9    1X 	6E{E":EBu5	6rD   c                 v    t        dd      D ]*  }t        dkD  rt        d|       | j                  |d       , y )Nr   r   r   Tr   r   r   s     rB   test_run_package_alter_sysz,RunModuleTestCase.test_run_package_alter_sys	  r  rD   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     rB   test_explicit_relative_importz/RunModuleTestCase.test_explicit_relative_import  s6    1a[ 	0E{E"FN((/	0rD   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     rB   test_main_relative_importz+RunModuleTestCase.test_main_relative_import  s8    1a[ 	<E{E"KUS((
;	<rD   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 r[   r   )r]   re   rO   s    rB   r^   z2RunModuleTestCase.test_run_name.<locals>.create_ns&  s    hh??rD   )r   r\   r   r_   r-   r`   rg   r   r   r   rS   r   )	r9   r   r   rj   rf   r;   r^   re   rO   s	          @@rB   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_testrc   r  )pkgutilr8   r   r   addr   r   r   r   walk_packagesassertIsInstance
ModuleInfomodule_finderrg   rh   
FileFinderispkgr   r%   r4   len)r9   r$  	max_depth	base_namepackage_suffixesmodule_suffixesexpected_packagesexpected_modulesr   r   r%   r   rj   re   rf   
moduleinfos                   rB   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DrD   )F)
runpy_testr[   )r   rT   rU   r   rs   rw   ry   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r"  r4  rV   rD   rB   ro   ro      s    )?4C6"'56:&2	+&>&+u&>P'?','?RF.&>P&
N
'
J8# ?
7
O
6
7
0
<
#*"ErD   ro   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 ed      d               Zd Zy)RunPathTestCasezUnit tests for runpy.run_pathNc                 .    |t         }t        ||||      S r[   )r\   r   )r9   
script_dirscript_basenamer   omit_suffixs        rB   _make_test_scriptz!RunPathTestCase._make_test_scriptT  s"    >#F:!;0 	0rD   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 r[   r   )r]   script_names    rB   r^   z0RunPathTestCase._check_script.<locals>.create_ns_  s    K66rD   rc   T)r   r   r   r   r   r   r    r!   zprove.issue15230.is.fixedc                     t        |       S r[   r?  )r]   rO   r@  s    rB   r^   z0RunPathTestCase._check_script.<locals>.create_ns|  s    Kx@@rD   r   r   r   r   r   )
r_   r-   rg   r   r   r(   r3   r`   rS   r   )r9   r@  r   expected_fileexpected_argv0re   expect_speccheck_loaderr^   r;   	spec_namerf   
mod_cachedrO   s    `           @rB   _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"!!)[9rD   c                 f    t        j                  |      }| j                  t        |t        |       y r[   )reescapeassertRaisesRegexrr   r   )r9   r@  msgs      rB   _check_import_errorz#RunPathTestCase._check_import_error  s#    iin{C;GrD   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rD  r   r<  rH  r9   r9  re   r@  s       rB   test_basic_scriptz!RunPathTestCase.test_basic_script  sS    Z 	?:H00XFK{L+*  ?	? 	? 	?	   +?Ac                     t               5 }d}t        | j                  ||            }| j                  |d||d       d d d        y # 1 sw Y   y xY wrP  )r   r   r<  rH  rU  s       rB   &test_basic_script_with_pathlike_objectz6RunPathTestCase.test_basic_script_with_pathlike_object  sX    Z 	?:H"4#9#9*h#OPK{L+*  ?	? 	? 	?s   4AAc                     t               5 }d}| j                  ||d      }| j                  |d||d       d d d        y # 1 sw Y   y xY w)NrQ  T)r;  rR  FrS  rT  rU  s       rB   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)NrQ  TdoraiserR  FrS  )r   r<  
py_compilecompiler|   r   rH  )r9   r9  re   r@  compiled_names        rB   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   rR  re   rT  rU  s       rB   test_directoryzRunPathTestCase.test_directory  sS    Z 	>:!H00XFKz<)H  >	> 	> 	>rW  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]  rR  rd  )
r   r<  r_  r`  r|   r   r   r   r   rH  )r9   r9  re   r@  ra  
legacy_pycs         rB   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<  rN  )r9   r9  re   r@  rM  s        rB   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_ziprR  Fre   rE  )r   r<  r   rH  )r9   r9  re   r@  zip_namefnames         rB   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]  rn  rR  Fro  )r   r<  r_  r`  r   rH  )r9   r9  re   r@  ra  rp  rq  s          rB   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)Nrj  rn  rk  )r   r<  r   rN  )r9   r9  re   r@  rp  rq  rM  s          rB   test_zipfile_errorz"RunPathTestCase.test_zipfile_error  sa    Z 	4:!H00XFK-j*kROHe6AC$$Xs3	4 	4 	4rs  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)
rn  )r   r<  r   assertRaisesRecursionErrorr   )r9   r9  	dummy_dirre   r   r@  rp  rq  s           rB   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   r4   )r9   r9  filenamefr   s        rB   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   rT   rU   r   r<  rH  rN  rV  rY  r[  rb  re  rh  rl  rr  ru  rw  r   r   r}  r  rV   rD   rB   r7  r7  Q  s    ' 490 6:;?+:ZH???A>	B6FF4 uB  B	>rD   r7  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r[   )r   pathlibPath)argskwargstmp_fns      rB   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)r9   r  r  tmpr  	__class__s        rB   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  r0   r4   
returncodeEXPECTED_CODE)r9   cmdr  r  procs        rB   assertSigIntzTestExit.assertSigInt  sv     ~~t*c*~~cVDVFVjooV,,-DEt{{S$*<*<=rD   c                 <    | j                  | j                  g       y r[   )r  r  rv   s    rB   test_pymain_run_filezTestExit.test_pymain_run_file  s    488*%rD   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  )r9   r  r   s      rB   %test_pymain_run_file_runpy_run_modulez.TestExit.test_pymain_run_file_runpy_run_module  sQ    hhoo?*

OO	
 	:,C0rD   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  )r9   r  run_module_as_mains      rB   -test_pymain_run_file_runpy_run_module_as_mainz6TestExit.test_pymain_run_file_runpy_run_module_as_main'  sS    hhoo #::%%OO	
 	-.C8rD   c                 V    | j                  ddg| j                  j                         y )N-cz%import runpy; runpy.run_module('ham')r  r  r  r&   rv   s    rB   "test_pymain_run_command_run_modulez+TestExit.test_pymain_run_command_run_module4  s)    :; 	 	
rD   c                 V    | j                  ddg| j                  j                         y )Nr  
import hamr  r  rv   s    rB   test_pymain_run_commandz TestExit.test_pymain_run_command:  s"    4.DHHOODrD   c                 T    | j                  g d| j                  j                         y )Nr  )inputr  r  rv   s    rB   test_pymain_run_stdinzTestExit.test_pymain_run_stdin=  s    "LdhhooFrD   c                 n    | j                   }| j                  d|j                  g|j                         y )Nz-mr  )r  r  stemr&   )r9   r  s     rB   test_pymain_run_modulezTestExit.test_pymain_run_module@  s+    hh4*

;rD   )r   rT   rU   STATUS_CONTROL_C_EXITr   platformsignalSIGINTr  staticmethod
contextlibcontextmanagerr  r  r   r  r  r  r  r  r  r  r  __classcell__)r  s   @rB   r  r    s    & <<7" 	mm^ 
 '  '

) > >&19
EG<rD   r  r   )3r  importlib.machineryrg   importlib.utilos.pathr|   r  r_  rJ  r  r  r   r   r  unittestr	  test.supportr   r   r   r   test.support.import_helperr   r   r	   test.support.os_helperr
   r   r   test.support.script_helperr   r   r   r   r   r   r   r\   implicit_namespacerH   dictr_   r`   r$   TestCaserX   ro   r7  r  r   mainrV   rD   rB   <module>r     sB    *    	   
     T T F F H H C  C C&   %'>?!$"%T;	    + ,LF LF^$:X..0B $:NUE))+= UEna>h''); a>HM<x   M<` zHMMO rD   