
    0hhЏ                        S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
JrJr  SS	KJrJr  SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSS
KJr  SSKrSSKrSSKJ r   SSK!J!r!  \RD                  RF                  (       a  \RH                  " S5      eSSK%r%\%RL                  SLr'Sq(S r)S r* " S S\RV                  5      r, " S S\-5      r. " S S\RV                  5      r/ " S S\RV                  5      r0 " S S\RV                  5      r1 " S S\RV                  5      r2\3S:X  a  \Rh                  " 5         gg)zTests for 'site'.

Tests assume the initial paths in sys.path once the interpreter has begun
executing have not been removed.

    N)support)assert_python_ok)	os_helper)socket_helper)captured_stderr)TESTFNEnvironmentVarGuard)spawn_pythonkill_python)dedent)mock)copyzPython was invoked with -Sc                     [         R                  S S  q[        R                  (       a}  [
        R                  R                  [        R                  5      (       dJ   [
        R                  " [        R                  5        [        R                  " [        R                  5        g g g ! [         a1  n [        R                  " S[        R                  < SU < 35      eS n A ff = f)Nz&unable to create user site directory (z): )syspathOLD_SYS_PATHsiteENABLE_USER_SITEosisdir	USER_SITEmakedirs
addsitedirPermissionErrorunittestSkipTest)excs    7/opt/python-3.13.8/usr/lib/python3.13/test/test_site.pysetUpModuler   /   s    88A;LRWW]]4>>%B%B	=KK'OODNN+ &C  	=##'+~~s%< = =	=s   AB' '
C"1,CC"c                  2    [         [        R                  S S & g N)r   r   r        r   tearDownModuler$   >   s    CHHQKr#   c                   p   \ rS rSrSrS rS rS rS rS r	S r
S	\4S
 jrS rS rS rS rS rS r\R(                  " \" \S5      S5      S 5       r\R(                  " \R2                  S:H  S5      \R6                  " 5       S 5       5       rS r\R(                  " \S5      S 5       r\R(                  " \ RB                  S5      \R6                  " 5       S 5       5       r"\R(                  " \S5      S 5       r#\R(                  " \S5      S 5       r$S r%\R(                  " \S5      S 5       r&S  r'S! r(S"r)g#)$HelperFunctionsTestsB   z Tests for helper functions.
    c                    [         R                  SS U l        [        R                  U l        [        R                  U l        [        R                  U l	        [        R                  U l        [        [        R                  5      U l        g)zSave a copy of sys.pathN)r   r   sys_pathr   	USER_BASEold_baser   old_sitePREFIXESold_prefixes	sysconfig_CONFIG_VARSoriginal_varsr   old_varsselfs    r   setUpHelperFunctionsTests.setUpF   sS     MM&33Y334r#   c                    U R                   [        R                  SS& U R                  [        l        U R                  [        l        U R                  [        l	        U R                  [        l        [        R                  bH  [        R                  R                  5         [        R                  R                  U R                  5        ggzRestore sys.pathN)r)   r   r   r+   r   r*   r,   r   r.   r-   r1   r/   r0   clearupdater2   r3   s    r   tearDownHelperFunctionsTests.tearDownO   s    mm))!%!3!3	!!-""((*""))$--8 .r#   c                    Sn[         R                  R                  " U6 n[        R                  " U6 u  p4U R                  [         R                  R                  U5      U5        U[         R                  R                  U5      :X  a  U R                  X45        g U R                  [         R                  R                  U5      U5        g )N)	BeginningEnd)r   r   joinr   makepathassertEqualabspathnormcase)r4   
path_partsoriginal_dirabs_dirnorm_dirs        r   test_makepath"HelperFunctionsTests.test_makepath[   s     *
ww||Z0 MM:66@277++L99W/RWW--g6Ar#   c                 F   [         R                  " 5       n[        R                   Vs/ s HK  nU(       d  M  [        R                  R                  U5      (       d  M2  [         R                  " U5      S   PMM     sn H  nU R                  X1U< SU< 35        M     g s  snf )N   z> from sys.path not found in set returned by _init_pathinfo(): )r   _init_pathinfor   r   r   existsrA   assertIn)r4   dir_setr   entrys       r   test_init_pathinfo'HelperFunctionsTests.test_init_pathinfoh   s{    %%'9< : -$&GGNN4$8 -dmmD)!, :EMM%7<gGH: :s   B"BBc                 f   U R                  UR                  [        R                  SUR                  -  5        U R                  [        R
                  " UR                  5      S   [        R                  5        U R                  [        R                  R                  UR                  5      5        g)z>Contain common code for testing results of reading a .pth filez%s not in sys.modulesr   N)rO   importedr   modulesr   rA   good_dir_pathr   assertFalser   rN   bad_dir_pathr4   pth_files     r   pth_file_tests#HelperFunctionsTests.pth_file_testsp   sr    h''-0A0AA	CdmmH$:$:;A>I(=(=>?r#   c                 ,   [        5       nUR                  SS9   UR                  5         [        R                  " UR
                  UR                  [        5       5        U R                  U5        UR                  5         g ! UR                  5         f = fNTprep)	PthFilecleanupcreater   
addpackagebase_dirfilenamesetr\   rZ   s     r   test_addpackage$HelperFunctionsTests.test_addpackagew   sp    
 9d#	OOOOH--x/@/@#%H)Hs   AB B.c                 *  ^ [         R                  R                  U5      nUS-   n[         R                  R                  X$5      m[	        TSSS9 nU R                  U4S j5        UR                  U5        S S S 5        X$4$ ! , (       d  f       X$4$ = f)N.pthwutf-8encodingc                  0   > [         R                  " T 5      $ r!   )r   remove)pth_fns   r   <lambda>/HelperFunctionsTests.make_pth.<locals>.<lambda>   s    BIIf$5r#   )r   r   rC   r@   open
addCleanupwrite)r4   contentspth_dirpth_namepth_basenamer[   rt   s         @r   make_pthHelperFunctionsTests.make_pth   s|    ''//'*&(g4&#0HOO56NN8$ 1 $$ 10 $$s   'B
Bc           	      R   U R                  S5      u  p[        5        n[        R                  " X[	        5       5        S S S 5        U R                  WR                  5       S5        U R                  UR                  5       [        R                  " [        R                  R                  X5      5      5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        g ! , (       d  f       N= f)Nzimport bad-syntax
zline 1	Tracebackzimport bad-syntaxSyntaxErrorr~   r   r   re   rh   assertRegexgetvaluereescaper   r   r@   r4   r{   rt   err_outs       r   !test_addpackage_import_bad_syntax6HelperFunctionsTests.test_addpackage_import_bad_syntax   s    --(=>'OOGSU3 ))+X6))+IIbggll734	6
 	))+[9))+-AB))+]; s    D
D&c           	         U R                  S5      u  p[        5        n[        R                  " X[	        5       5        S S S 5        U R                  WR                  5       S5        U R                  UR                  5       [        R                  " [        R                  R                  X5      5      5        U R                  UR                  5       S5        U R                  UR                  5       S5        g ! , (       d  f       N= f)Nzrandompath
import nosuchmodule
zline 2r   ModuleNotFoundErrorr   r   s       r   test_addpackage_import_bad_exec4HelperFunctionsTests.test_addpackage_import_bad_exec   s    --(KL'OOGSU3 ))+X6))+IIbggll734	6 	))+[9))+-BC s    C88
Dc                     U R                  S5      u  p[        R                  " X[        5       5      nU R	                  U[        5       5        g )Nz

  

)r~   r   re   rh   rB   )r4   r{   rt   known_pathss       r   test_addpackage_empty_lines0HelperFunctionsTests.test_addpackage_empty_lines   s6    --5oogsu=ce,r#   c           	         U R                  S5      u  p[        5        nU R                  [        R                  " X[        5       5      5        S S S 5        S U l        U R                  WR                  5       S5        [        R                   H,  n[        U[        5      (       d  M  U R                  SU5        M.     g ! , (       d  f       Nv= f)Nzabc def
 zabc def)r~   r   rX   r   re   rh   maxDiffrB   r   r   r   
isinstancestrassertNotIn)r4   r{   rt   r   r   s        r   #test_addpackage_import_bad_pth_file8HelperFunctionsTests.test_addpackage_import_bad_pth_file   s    --7'T__WceDE ))+R0HHD$$$  t4 	 s   /B==
Cc                    [        5       nUR                  SS9   UR                  5         [        R                  " UR
                  [        5       5        U R                  U5        UR                  5         g ! UR                  5         f = fr_   )rb   rc   rd   r   r   rf   rh   r\   rZ   s     r   test_addsitedir$HelperFunctionsTests.test_addsitedir   sh     9d#	OOOOH--su5)Hs   A
A6 6Bc                    [        S5      nUR                  SS9   UR                  5         [        R                  " UR
                  [        5       5        U R                  [        R                  " UR                  5      S   [        R                  5        U R                  UR
                  [        R                  5        UR                  5         g ! UR                  5         f = f)Nz.dotfileTr`   r   )rb   rc   rd   r   r   rf   rh   r   rA   rW   r   r   rO   rZ   s     r   test_addsitedir_dotfile,HelperFunctionsTests.test_addsitedir_dotfile   s    :&d#	OOOOH--su5T]]8+A+AB1EsxxPMM(++SXX6Hs   B$C C#chflagsztest needs os.chflags()c                    [        5       nUR                  SS9   UR                  5         [        R                  " UR
                  5      n[        R                  " UR
                  UR                  [        R                  -  5        [        R                  " UR                  [        5       5        U R                  [        R                  " UR                  5      S   [         R"                  5        U R%                  UR                  [         R"                  5        UR                  5         g ! UR                  5         f = f)NTr`   r   )rb   rc   rd   r   stat	file_pathr   st_flags	UF_HIDDENr   r   rf   rh   r   rA   rW   r   r   rO   )r4   r[   sts      r   test_addsitedir_hidden_flags1HelperFunctionsTests.test_addsitedir_hidden_flags   s    9d#	OO++,BJJx))2;;+GHOOH--su5T]]8+A+AB1EsxxPMM(++SXX6Hs   D D, ,D>win32ztest needs Windowsc                    [        5       nUR                  SS9   UR                  5         [        R                  " SSUR
                  /5        [        R                  " UR                  [        5       5        U R                  [        R                  " UR                  5      S   [        R                  5        U R                  UR                  [        R                  5        UR                  5         g ! UR                  5         f = f)NTr`   attribz+Hr   )rb   rc   rd   
subprocess
check_callr   r   r   rf   rh   r   rA   rW   r   r   rO   rZ   s     r   %test_addsitedir_hidden_file_attribute:HelperFunctionsTests.test_addsitedir_hidden_file_attribute   s     9d#	OO!!8T83E3E"FGOOH--su5T]]8+A+AB1EsxxPMM(++SXX6Hs   CC3 3Dc                 t    U R                  [        R                  " 5       [        R                  " 5       5        g r!   )rB   r   _getuserbaser/   r3   s    r   test__getuserbase&HelperFunctionsTests.test__getuserbase   s$    **,i.D.D.FGr#   zneed user sitec                 X   [         R                  S:X  a  [         R                  (       a  SnO[        R                  S-   nU R                  [        R                  R                  [        R                  " [        R                  " 5       5      5      [        R                  " SU5      5        g )Ndarwinosx_framework_user_userpurelib)r   platform
_frameworkr   namerB   r   normpathr   	_get_pathr   r/   get_path)r4   schemes     r   test_get_path"HelperFunctionsTests.test_get_path   si    <<8#)FWWw&F))$..9J9J9L*MN"++Iv>	@r#   z<requires access to PEP 370 user-site (site.ENABLE_USER_SITE)c                 8   [         R                  R                  [        R                  5      nU R                  U[        R                  5        [         R                  R                  5       n[        R                  " [        R                  SSU-  /US9nU R                  US5        [         R                  R                  5       n[        R                  " [        R                  SSSU-  /US9nU[        R                  " 5       S   :X  a  U R                  US5        OU R                  USS5        [         R                  R                  5       nSUS	'   [        R                  " [        R                  SSU-  /US9nU[        R                  " 5       S   :X  a  U R                  US5        OU R                  USS
5        [         R                  R                  5       nSUS'   [        R                  " [        R                  SS/US9nU R                  USS5        g )N-cz$import sys; sys.exit(%r in sys.path)envrL   -sr   z%User site still added to path with -s1PYTHONNOUSERSITEz3User site still added to path with PYTHONNOUSERSITEz/tmpPYTHONUSERBASEz=import sys, site; sys.exit(site.USER_BASE.startswith("/tmp"))z#User base not set by PYTHONUSERBASE)r   r   r   r   r   rO   r   environr   r   call
executablerB   getsitepackages)r4   usersiter   rcs       r   test_s_option"HelperFunctionsTests.test_s_option   s   
 77##DNN3h)jjoo__cnnd2X=? 	Qjjoo__cnndD2X=? t++-a00R#R$KLjjoo"%__cnnd2X=? t++-a00R#RMO jjoo &__cnndKM 	Q=	?r#   c                    S [         l        [         R                  " 5       nU R                  [         R                  U5        S [         l        SS KnS Ul        [        5        nSUS'   U R                  [         R                  " 5       R                  S5      [         R                  " 5       5        S S S 5        g ! , (       d  f       g = f)Nr   xoxor   )	r   r*   getuserbaserB   r/   r0   r	   
assertTrue
startswith)r4   	user_baser/   r   s       r   test_getuserbase%HelperFunctionsTests.test_getuserbase(  s    $$&	 	3 !%	 "g(.G$%OOD,,.99&A ,,.0 #""s   !AB77
Cc                 ^   S [         l        S [         l        [         R                  " 5       nU R	                  [         R                  U5        U R                  UR                  [         R                  5      U5        U R	                  [         R                  [         R                  " 5       5        g r!   )r   r   r*   getusersitepackagesrB   r   r   r   )r4   	user_sites     r   test_getusersitepackages-HelperFunctionsTests.test_getusersitepackages:  sn    ,,.	 	3	,,T^^<iH)9)9);<r#   c                    S/[         l        [         R                  " 5       n[        R                  S:X  a  [
        R                  S:w  aw  U R                  [        U5      S5        [        R                  R                  S[
        R                  S[        R                  " 5        3S5      nU R                  US   U5        OU R                  [        U5      S5        [        R                  R                  SSS[        R                  " 5        3S5      nU R                  US	   U5        g U R                  [        U5      S5        U R                  US   S5        [        R                  R                  SSS5      nU R                  [        R                  R                  US   5      [        R                  R                  U5      5        g )
Nr   /lib   pythonzsite-packagesr   rL   )r   r-   r   r   sepr   
platlibdirrB   lenr   r@   r/   _get_python_version_abirD   )r4   dirswanteds      r   test_getsitepackages)HelperFunctionsTests.test_getsitepackagesE  sW   ##%66S=~~&  TA.fcnn(.y/P/P/R.S&T&57   a&1  TA.WW\\&%$*9+L+L+N*O"P"13F T"Xv. SY*T!Wf-WW\\&%AFRWW--d1g6WW--f57r#   c                    S [         l        S [         l        [        5        n[        R
                  " SS 5         UR                  SS5        [         R                  " 5       nU R                  UR                  S[        R                  -   5      U5        [         R                  " 5       nU R                  UR                  U5      U5        S S S 5        S S S 5        [        R
                  " SSS9 n[        R
                  R                  [         S	5       n[        R                  " [         S
S5         [!        5       n[         R"                  " U5        UR%                  W5        UR'                  5         U R)                  U5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NA= f! , (       d  f       NJ= f! , (       d  f       g = f)Nzos.path.expanduserc                     U $ r!   r"   )r   s    r   ru   =HelperFunctionsTests.test_no_home_directory.<locals>.<lambda>g  s    4r#   r   APPDATA~zos.path.isdirF)return_valuer   r   T)r   r   r*   r	   r   patchunsetr   r   r   r   r   r   objectr   	swap_attrrh   addusersitepackagesassert_called_once_withassert_not_calledrX   )r4   r   r   r   
mock_isdirmock_addsitedirr   s          r   test_no_home_directory+HelperFunctionsTests.test_no_home_directory^  sY   
  "gZZ,.?@MM*I6((*IOOI00rvv>%' 002IOOI00;YG A # ZZe<
ZZt\2ot%7> %K$$[1..y9--/[) ? 3 =< A@ #" ?> 32 =<s`   F.BF
F./%G!G1AF?GG!
F+	'F..
F<?
G	G
G	G!!
G/c                     Sn[        SSU S3US9u  p#nU R                  US5        [        SSSU S3US9u  p#nU R                  US5        g )	Nfiler   z.import site; assert site.gethistoryfile() == "")PYTHON_HISTORYr   -Iz.import site; assert site.gethistoryfile() != ")r   rB   )r4   rg   r   outerrs        r   test_gethistoryfile(HelperFunctionsTests.test_gethistoryfile~  sm    '<XJaH#% 	Q (d<XJaH#% 	Qr#   c                    SnSUS-   4S4 H  u  p#[         R                  " S[         R                  " US95         [         R                  " S[        R                  " 5       5         [
        R                  " U5        U R                  [        R                  R                  5       U5        S S S 5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)Nzbla-bla-blaT
)Fr   z	sys.flags)verbosez
sys.stderr)r   r   MockioStringIOr   _tracerB   r   stderrr   )r4   messager  r  s       r   
test_traceHelperFunctionsTests.test_trace  s    !7T>2K?LGK7)CDJJ|R[[];G$  !4!4!6< < ED @;; EDs$   +C%AB?*C?
C	C
C	)r   r+   r.   r,   r2   r1   r)   N)*__name__
__module____qualname____firstlineno____doc__r5   r;   rI   rR   r\   ri   r   r~   r   r   r   r   r   r   r   
skipUnlesshasattrr   r   r   r   r   requires_subprocessr   r   HAS_USER_SITEr   r   r   r   r   r   r   r   r  r  __static_attributes__r"   r#   r   r&   r&   B   s   5
9BH@ *-v %<
D-	5	 Y/1JK L 02FG  "
 # H
H (89@ :@ .. 1> ?  "%? #?%?N (890 :0" (89= :=72 (89* :*> =r#   r&   c                   :    \ rS rSrSr\SSS4S jrS rSS jrS	r	g
)rb   i  z/Helper class for handling testing of .pth filestime__testdir____badc                    US-   U l         [        R                  R                  S5      U l        [        R                  R                  U R                  U R                   5      U l        X l        X0l        X@l	        [        R                  R                  U R                  U R                  5      U l
        [        R                  R                  U R                  U R                  5      U l        g)zInitialize instance variablesrm   r   N)rg   r   r   rC   rf   r@   r   rU   good_dirnamebad_dirnamerW   rY   )r4   filename_baserU   r#  r$  s        r   __init__PthFile.__init__  s     &.+dmmT]]C (&WW\\$--9J9JKGGLL8H8HIr#   c                 b   [        U R                  S5      n [        SUS9  [        SUS9  [        SU R                  -  US9  [        U R                  US9  [        U R
                  US9  UR                  5         [        R                  " U R                  5        g! UR                  5         f = f)a?  Create a .pth file with a comment, blank lines, an ``import
<self.imported>``, a line with self.good_dirname, and a line with
self.bad_dirname.

Creation of the directory for self.good_dir_path (based off of
self.good_dirname) is also performed.

Make sure to call self.cleanup() to undo anything done by this method.

rn   z#import @bad module namer  r
  z	import %sN)
rw   r   printrU   r#  r$  closer   mkdirrW   )r4   FILEs     r   rd   PthFile.create  s     DNNC(	,48$T"+-D9$##$/$"".JJL
##$ JJLs   AB B.c                    [         R                  R                  U R                  5      (       a   [         R                  " U R                  5        U(       a[  [
        R                  R                  U R                  5      U l	        U R                  (       a  [
        R                  U R                  	 O8U R                  (       a'  U R                  [
        R                  U R                  '   [         R                  R                  U R                  5      (       a   [         R                  " U R                  5        [         R                  R                  U R                  5      (       a!  [         R                  " U R                  5        gg)zMake sure that the .pth file is deleted, self.imported is not in
sys.modules, and that both self.good_dirname and self.bad_dirname are
not existing directories.N)r   r   rN   r   rs   r   rV   getrU   imported_modulerW   rmdirrY   )r4   ra   s     r   rc   PthFile.cleanup  s     77>>$..))IIdnn%#&;;??4==#AD ##KK.##-1-A-ADMM*77>>$,,--HHT''(77>>$++,,HHT&&' -r#   )	rY   r$  rf   r   rg   rW   r#  rU   r1  N)F)
r  r  r  r  r  r   r&  rd   rc   r  r"   r#   r   rb   rb     s    9%+f!.G
J%,(r#   rb   c                   h   \ rS rSrSrS rS rS rS r\	R                  " S5      S 5       rS	 rS
 rS rS r\R"                  " 5       S 5       r\	R&                  " \" \R,                  S5      S5      \R                   R1                  S5      \R                   R2                  S 5       5       5       rSrg)ImportSideEffectTestsi  z(Test side-effects from importing 'site'.c                 4    [         R                  SS U l        g)zMake a copy of sys.pathN)r   r   r)   r3   s    r   r5   ImportSideEffectTests.setUp  s    r#   c                 >    U R                   [        R                  SS& gr8   )r)   r   r   r3   s    r   r;   ImportSideEffectTests.tearDown  s    mmr#   c                     S[         R                  S   l        [        R                  " 5         U R                  [         R                  S   R                  5        g)z{Test for __cached__ is None.

Regarding to PEP 3147, __cached__ can be None.

See also: https://bugs.python.org/issue30167
Ntest)r   rV   
__cached__r   	abs_pathsassertIsNoner3   s    r   test_abs_paths_cached_None0ImportSideEffectTests.test_abs_paths_cached_None  s<     *.F&#++f-889r#   c                     [         R                  " 5         [        5       n[        R                   H%  nU R                  X!5        UR                  U5        M'     g r!   )r   removeduppathsrh   r   r   r   add)r4   
seen_pathsr   s      r   test_no_duplicate_paths-ImportSideEffectTests.test_no_duplicate_paths  s?     	U
HHDT.NN4  r#   ztest not implementedc                     g r!   r"   r3   s    r   test_add_build_dir(ImportSideEffectTests.test_add_build_dir  s    
 	r#   c                     U R                  [        [        S5      5        U R                  [        [        S5      5        g )Nquitexitr   r  builtinsr3   s    r   test_setting_quit'ImportSideEffectTests.test_setting_quit  s(    &12&12r#   c                     U R                  [        [        S5      5        U R                  [        [        S5      5        U R                  [        [        S5      5        g )N	copyrightcreditslicenserM  r3   s    r   test_setting_copyright,ImportSideEffectTests.test_setting_copyright  s;    +67)45)45r#   c                 B    U R                  [        [        S5      5        g )NhelprM  r3   s    r   test_setting_help'ImportSideEffectTests.test_setting_help  s    &12r#   c                 z    S[         R                  ;  a   SS KnU R                  S5        g g ! [         a     g f = f)Nsitecustomizer   z(sitecustomize not imported automatically)r   rV   r\  failImportError)r4   r\  s     r   test_sitecustomize_executed1ImportSideEffectTests.test_sitecustomize_executed   s?    #++-F$ 		DE .  s   - 
::c                    S/n[         R                  (       a  UR                  S5        [        R                  " 5       nU R                  [        R                  U5        [        5        nX#S'   U GHa  n[        R                  " U5        [        R                  " U5        [        R                  R                  X$ S35      nSU 3n[        US5       nUR                  SU S35        S S S 5        [        R                   " ["        R$                  S	S
/5      nU R'                  XhR)                  S5      5        [        R                   " ["        R$                  SS	S
/5      nU R+                  XhR)                  S5      5        SU:X  d  GM  [        R                   " ["        R$                  SS	S
/5      nU R+                  XhR)                  S5      5        GMd     S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr\  usercustomize
PYTHONPATHz.py	EXECUTED_rn   zprint("z")r   z""ro   z-Sr   )r   r   appendtempfilemkdtemprx   r   rmtreer	   r   r,  r   r@   rw   ry   r   check_outputr   r   rO   decoder   )	r4   	mod_namestemp_dirr   module_namecustomize_path
eyecatcherfoutputs	            r   %test_customization_modules_on_startup;ImportSideEffectTests.test_customization_modules_on_startup
  s    
	   _-##%	(((3 "g$,L!(  *"!#h-s8K!L(6
.#.!GGgj\45 / $00#..$1MNj--*@A $00#..$d1ST  ]]7-CD #k1'44cnndDRV5WXF$$Zw1GH)  ) #" /. #"s-   )A*G0G)BG0	AG0
G-)G00
G>HTTPSHandlerz$need SSL support to download licensenetworkc                 ^   [         R                  R                  5       S   n[        R                  R                  USS9nU R                  [        R                  R                  5         [        R                  " U5         [        R                  R                  U5       nUR                  5       nS S S 5        S S S 5        U R                  WSSU-   S9  g ! , (       d  f       N+= f! , (       d  f       N4= f! [        R                  R                   a  nUR                  n S nANfS nAff = f)NrL   HEAD)method   zCan't find )msg)rT  _Printer__dataspliturllibrequestRequestrx   
urlcleanupr   transient_interneturlopengetcodeerror	HTTPErrorcoderB   )r4   urlreqdatar  es         r   test_license_exists_at_url0ImportSideEffectTests.test_license_exists_at_url0  s     $$**,Q/nn$$S$8112	11#6^^++C0D<<>D 1 7
 	s(;<	 10 76 ||%% 	66D	sN   *C8   C' C1C'9C8 
C$	 C''
C51C8 5C8 8D,D''D,)r)   N)r  r  r  r  r  r5   r;   r?  rE  r   skiprH  rO  rU  rY  r_  r   r  rr  r  r  r}  r~  r;  requires_resourcesystem_must_validate_certr  r  r"   r#   r   r5  r5    s    2$$	:! ]])* +3
63F   ""I #"IJ @?A	\\##I.	\\++= , /A=r#   r5  c                       \ rS rSr\R
                  " 5       S 5       r\R
                  " 5       S 5       r\R
                  " 5       S 5       r\R
                  " 5       S 5       r	Sr
g)StartupImportTestsiD  c           	      `   [         R                  " [        R                  SSSSS/[         R                  SSS9nUR                  5       S	   nU R                  UR                  S	[        U5      5        [        R                  " U5      nU Ht  n[        R                  " [        R                  R                  [        R                  " U5      S
5      5      nU(       d  MT  U R!                  S[#        U5       SU 35        Mv     [         R                  " [        R                  SSSSSS/[         R                  [         R                  SSS9nUR                  5       u  p&U R                  UR                  S	X&45        [        R                  " U5      nU R%                  SU5        1 SknU R'                  UR)                  U5      U5        U R+                  SXv5        U R+                  SXv5        1 SkR-                  [        R.                  5      n	U R'                  UR)                  U	5      U5        g )N-Xutf8r  r   z!import sys; print(repr(sys.path))ro   surrogateescape)stdoutrq   errorsr   z*.pthzfound z .pth files in: z-vz#import sys; print(set(sys.modules)))r  r  rq   r  r   >   r   _sre
re._parserre._compilerre._constantslocalecopyreg>
   heapqtypeskeywordreprlibweakrefoperator	functools	itertoolscollections_collections)r   Popenr   r   PIPEcommunicaterB   
returncodereprastliteral_evalglobr   r   r@   r   skipTestr   rO   rX   intersectionr   
differencebuiltin_module_names)
r4   popenr  isolated_pathsr   	pth_filesr  rV   re_modscollection_modss
             r   test_startup_imports'StartupImportTests.test_startup_importsF  s      #..$"&(K"M(2*1(9	;
 ""$Q'))1d6l;))&1
 #D		"'',,t{{4/@'"JKIys9~&66FtfMN #   #..$d"&(M"O(2(2*1(9; **,))1v.>?""6*fg& P--g6? 	73 	G4 'Js'?'?@ 	 	--o>Gr#   c                     [         R                  " [        R                  SS/5      R	                  5       nU R                  US5        g )Nr   9import sys; sys.exit(hasattr(sys, "__interactivehook__"))z''__interactivehook__' not added by siter   r  r   r   waitr   r4   rs     r   test_startup_interactivehook/StartupImportTests.test_startup_interactivehooky  s=    cnndGI JJN$& 	
DEr#   c                     [         R                  " [        R                  SSS/5      R	                  5       nU R                  US5        g )Nr  r   r  z,'__interactivehook__' added in isolated mode)r   r  r   r   r  rX   r  s     r   %test_startup_interactivehook_isolated8StartupImportTests.test_startup_interactivehook_isolated  sC     cnndDGI JJN$& 	
JKr#   c                     [         R                  " [        R                  SSS/5      R	                  5       nU R                  US5        g )Nr  r   zYimport site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))z6'__interactivehook__' not added by enablerlcompleter()r  r  s     r   .test_startup_interactivehook_isolated_explicitAStartupImportTests.test_startup_interactivehook_isolated_explicit  sC     cnndDgi jjnjnjp 	
STr#   r"   N)r  r  r  r  r   r  r  r  r  r  r  r"   r#   r   r  r  D  s}      "0H #0Hd   "F #F
   "L #L   "U #Ur#   r  c                      \ rS rSr\R
                  S:X  a  SS jrOSS jrS rS\S\	4S jr
\R                  " 5       S	 5       r\R                  " 5       S
 5       r\R                  " 5       S 5       r\R                  " 5       S 5       rSrg)_pthFileTestsi  r   c           
         SS K n[        R                  " 5       nU R                  [        R
                  U5        [        R                  R                  U[        R                  R                  [        R                  5      S   5      nUR                  [        R                  5      n[        R                  R                  U[        R                  R                  U5      S   5      n[        R                  " [        R                  U5        [        R                  " Xg5        [         R                   " [        R                  R                  [        R                  R                  U5      S   S5      5       HX  n[        R                  " U[        R                  R                  U[        R                  R                  U5      S   5      5        MZ     U(       a&  [        R                  R#                  U5      S   S-   n	O%[        R                  R#                  U5      S   S-   n	[%        U	SSS9 n
U H  n['        XS9  M     S S S 5        U$ ! , (       d  f       U$ = f)	Nr   rL   zvcruntime*.dll._pthrn   r  rp   r)  )_winapirf  rg  rx   r   rh  r   r   r@   r|  r   r   GetModuleFileName	dllhandleshutilr   r  splitextrw   r*  )r4   linesexe_pthr  rl  exe_filedll_src_filedll_filefn	_pth_filerp  lines               r   _create_underpth_exe"_pthFileTests._create_underpth_exe  s   '')HOOI,,h7ww||HbggmmCNN.KA.NOH"44S]]CLww||HbggmmL.I!.LMHKK1KK/iiRWW]]<-H-KM] ^_BXrww}}R7H7K LM `GG,,X6q9GC	GG,,X6q9GC	iv6!!D$' " 7 O 76 Os   /I
Ic                    U(       d  [         R                  " S5      e[        R                  " 5       nU R	                  [
        R                  U5        [        R                  R                  U[        R                  R                  [        R                  5      S   5      n[        R                  " [        R                  U5        US-   n[        US5       nU H  n[        XvS9  M     S S S 5        U$ ! , (       d  f       U$ = f)Nz1library ._pth file not supported on this platformrL   r  rn   r)  )r   r   rf  rg  rx   r   rh  r   r   r@   r|  r   r   symlinkrw   r*  )r4   r  r  rl  r  r  rp  r  s           r   r  r    s    ''([\\'')HOOI,,h7ww||HbggmmCNN.KA.NOHJJs~~x0 7*Ii%!D$' " & O &% Os   C44
Dc                     / nU Hb  nU(       a	  US   S:X  a  M  [         R                  R                  [         R                  R                  X5      5      nUR	                  U5        Md     U$ )Nr   #)r   r   rC   r@   re  )r4   
sys_prefixr  r)   r  abs_paths         r   "_calc_sys_path_for_underpth_nosite0_pthFileTests._calc_sys_path_for_underpth_nosite  sS    D47c>wwrww||J'EFHOOH%	 
 r#   libpathimport_sitec                6  ^ S/n[        TR                  S5      5      n[        SSU-  5      nUS::  a  U R                  SUS S35        UR	                  U4S	 j[        U5       5       5        UR	                  S
S/5        U(       a  UR                  S5        U$ )Nfake-path-namero   ry  i0u  r   z Python stdlib path is too long (,z bytes)c              3   (   >#    U  H  nTv   M	     g 7fr!   r"   ).0_r  s     r   	<genexpr>/_pthFileTests._get_pth_lines.<locals>.<genexpr>  s     =*<Q*<s   r   z	# commentzimport site)r   encodeminr  extendrangere  )r4   r  r  	pth_linesencoded_libpath_lengthrepetitionss    `    r   _get_pth_lines_pthFileTests._get_pth_lines  s    %&	 "%W^^G%<!=#u(>>?!MM23I!2LGTV=%*<=="k*+]+r#   c                 r   SS/[         R                  QSPSPnU R                  U5      nU R                  [        R                  R                  U5      U5      n[        R                  " USSSS/S	S
S9nUR                  5       R                  S5      nU R                  US5        U R                  UUS5        g )Nz#.z# ..rk   z..r  r  r   Cimport sys; print("\n".join(sys.path) if sys.flags.no_site else "")ro   r  )rq   r  r
  sys.flags.no_site was Falsesys.path is incorrect)r   r   r  r  r   dirnamer   ri  rstripr|  r   rB   )r4   r  r  r)   rq  actual_sys_paths         r   test_underpth_basic!_pthFileTests.test_underpth_basic  s    68CHH8c848	,,Y7::GGOOH% (((D&$R*
$57 !--///5)FG#	
r#   c                    [         R                  R                  n[        R                  R                  [        R                  5      nU R                  USS9nU R                  U5      nU R                  [        R                  R                  U5      U5      n[        R                  R                  5       nSUS'   SR                  U[        R                  [        R                  " S5      5      US'   [         R"                  " USS/US	S
S9nUR%                  5       R'                  S5      nU R)                  US5        U R+                  UUS5        g )NFr  from-envrc  z{}{}{}PATHr   r  ro   r  )r   rq   r  r
  r  r  )r;  r   
STDLIB_DIRr   r   r  r   r   r  r  r  r   r   formatpathsepgetenvr   ri  r  r|  r   rB   )	r4   r  
exe_prefixr  r  r)   r   rq  r  s	            r   test_underpth_nosite_file'_pthFileTests.test_underpth_nosite_file  s   ,,))WW__S^^4
''U'C	,,Y7::GGOOH% jjoo&Looj"**bii>OPF(((DR*
W->@ !--///5)FG#	
r#   c                    [         R                  R                  n[        R                  R                  [        R                  5      nU R                  U R                  USS95      n[        R                  R                  U5      n[        R                  R                  5       nSUS'   SR                  U[        R                  " S5      5      US'   [        R                  " USS[        R                  R!                  US	5      < S
U< S
[        R                  R!                  US5      < S3/US9nU R#                  US5        g )NTr  r  rc  {};{}r  r   /import sys; sys.exit(not sys.flags.no_site and r   in sys.path and L not in sys.path and all("\r" not in p and "\n" not in p for p in sys.path))r   r  r;  r   r  r   r   r  r   r   r  r  r   r   r  r  r   r   r@   r   r4   r  r  r  r  r   r   s          r   test_underpth_file _pthFileTests.test_underpth_file  s    ,,))WW__S^^4
,,T:<WW__X.
jjoo&LnnZ61BCF__h Z)9:Z4  	34r#   c                    [         R                  R                  n[        R                  R                  [        R                  5      nU R                  U R                  USS9SS9n[        R                  R                  U5      n[        R                  R                  5       nSUS'   SR                  U[        R                  " S5      5      US'   [        R                  " US	S
[        R                  R!                  US5      < SU< S[        R                  R!                  US5      < S3/US9nU R#                  US5        g )NTr  F)r  r  rc  r  r  r   r  r  r  r  r   r  r  r  s          r   test_underpth_dll_file$_pthFileTests.test_underpth_dll_file	  s    ,,))WW__S^^4
,,T:E - KWW__X.
jjoo&LnnZ61BCF__h Z)9:Z4  	34r#   r"   N)T)r  r  r  r  r   r   r  r  r   boolr  r   r  r  r	  r  r  r  r"   r#   r   r  r    s    
||w	(	c 4     "
 #
$   "
 #
.   "5 #5&   "5 #5r#   r  c                      \ rS rSrS rS rS r\R                  " 5       S 5       r	\R                  " 5       S 5       r
\R                  " 5       S 5       r\R                  " 5       S 5       r\R                  " 5       S	 5       rS
rg)CommandLineTestsi  c                 T    Ub%  [         R                  R                  U5      (       a  gg)NrN   zdoesn't exist)r   r   r   )r4   r   s     r   rN   CommandLineTests.exists  s     d 3 3"r#   c                 b   [        U5      S:X  Ga(  [        R                  " 5       n[        R                  " 5       n[        R
                  " 5       nUR                  S5        [        R                   H  nUR                  SU< S35        M     UR                  S5        UR                  SU SU R                  U5       S35        UR                  S	U SU R                  U5       S35        UR                  S
[        R                   S35        S[        UR                  5       5      R                  5       4$ / nSU;   a$  UR                  [        R                  " 5       5        SU;   a$  UR                  [        R                  " 5       5        U(       a  Sn[        R                  (       a  SnO)[        R                  SL a  SnO[        R                  c  Sn[        R                   R#                  U5      nU[        R                  R%                  [        U5      R                  5       5      4$ g)Nr   zsys.path = [
z    z,
z]
zUSER_BASE:  (z)
zUSER_SITE: ENABLE_USER_SITE: r
  --user-base--user-site   FrL   r   )
   N)r   r   r   r   r  r  ry   r   r   rN   r   r   r   stripre  r   r  r@   r   )r4   argsr   r   rq  dirbufferreturn_codes           r   get_excepted_output$CommandLineTests.get_excepted_output%  s   t9>((*I002I[[]FLL)*xxC12  LLLL;ykDKK	4J3K3OPLL;ykDKK	4J3K3OPLL-d.C.C-DBGHfV__./55777D MM$**,-D MM$2245K$$&&%/&&.ZZ__V,F 0 01E1E1G HHHr#   c           	      $   SS/UQn[        5        nSUS'   SUS'   [        USUSSS	.6nS S S 5        [        W5      nUR                  nU[        R
                  R                  [        U5      R                  5       5      4$ ! , (       d  f       N]= f)
Nz-mr   r   
PYTHONUTF8ro   PYTHONIOENCODINGTreplace)textr   rq   r  )	r	   r
   r   r  r   r   r   r   r#  )r4   r$  r   procrq  r'  s         r   invoke_command_line$CommandLineTests.invoke_command_lineF  s    f$t$ "c #C&-C"#Dc)0DD # T"ooBGG,,VF^-A-A-CDDD #"s   B
Bc                    U R                  5       u  pU R                  5       u  p4U R                  X5        UR                  5       nU R                  US   S5        U R                  US   S5        S[        R
                  " 5        S3SU R                  [        R
                  " 5       5       S3-   nU R                  US	   U5        S
[        R                  " 5        S3SU R                  [        R                  " 5       5       S3-   nU R                  US   U5        U R                  US   S[        R                   35        g )Nr   zsys.path = []zUSER_BASE: ''r  )zUSER_SITE: 'r   r  )	r0  r(  rB   
splitlinesr   r   rN   r   r   )r4   r'  rq  excepted_return_coder  r  excepted_baseexcepted_sites           r   test_no_argsCommandLineTests.test_no_argsS  s,   "668"&":":"<;!!#q>2rC(&t'7'7'9&:!<T--/0134rM2&t'?'?'A&B!DT55789;<rM2r&89N9N8O$PQr#   c                     U R                  S5      u  pU R                  S5      u  p4U R                  X5        U R                  SU5        g )Nz--unknown-argz[--user-base] [--user-site])r0  r(  rB   rO   )r4   r'  rq  r:  r  s        r   test_unknown_args"CommandLineTests.test_unknown_argsc  sF    "66G"&":":?"K;3V<r#   c                     U R                  S5      u  pU R                  S5      nUu  pEU R                  X5        U R                  X%5        g )Nr  r0  r(  rB   r4   r'  rq  exceptedr:  excepted_outputs         r   test_base_argCommandLineTests.test_base_argj  J    "66}E++M:08-;1r#   c                     U R                  S5      u  pU R                  S5      nUu  pEU R                  X5        U R                  X%5        g )Nr   rC  rD  s         r   test_site_argCommandLineTests.test_site_argr  rI  r#   c                     U R                  SS5      u  pU R                  SS5      nUu  pEU R                  X5        U R                  X%5        g )Nr  r   rC  rD  s         r   test_both_argsCommandLineTests.test_both_argsz  sR    "66}7DF++M=I08-;1r#   r"   N)r  r  r  r  rN   r(  r0  r   r  r=  r@  rG  rK  rN  r  r"   r#   r   r  r    s    #BE   "R #R   "= #=   "2 #2   "2 #2   "2 #2r#   r  __main__)5r  r   test.supportr;  r   test.support.script_helperr   r   r   r   test.support.os_helperr   r	   r
   r   r  rN  r  r  r   r   r  r   r   r   r/   rf  textwrapr   urllib.errorr}  urllib.requestr   r   flagsno_siter   r   r   r  r   r   r$   TestCaser&   r   rb   r5  r  r  r  r  mainr"   r#   r   <module>r[     s-      7 " & ( > @ 
   	 	 	    
       
 99


8
99  t+=O=8,, O=d
5(f 5(nv=H-- v=rGU** GURN5H%% N5bc2x(( c2L zMMO r#   