
    daf,w                     P   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	m
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ZddlmZ dd	lmZ ej8                  j:                  r ej<                  d
      ddlZej@                  duZ!da"d Z#d Z$ G d dejJ                        Z& G d de'      Z( G d dejJ                        Z) G d dejJ                        Z* G d dejJ                        Z+e,dk(  r ejZ                          yy)zTests for 'site'.

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

    N)support)	os_helper)socket_helper)captured_stderr)TESTFNEnvironmentVarGuard)mock)copyzPython was invoked with -Sc                     t         j                  d d  at        j                  rvt
        j                  j                  t        j                        sH	 t        j                  t        j                         t        j                  t        j                         y y y # t        $ r.} t        j                  dt        j                  d|       d } ~ ww xY w)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    )/root/Python-3.12.4/Lib/test/test_site.pysetUpModuler   ,   s    88A;LRWW]]4>>%B	=KK'OODNN+ &C  	=##'+~~s%< = =	=s   AB 	C$)CCc                  2    t         t        j                  d d  y N)r   r   r        r   tearDownModuler    ;   s    CHHQKr   c                   `   e Zd ZdZd Zd Zd Zd Zd Zd Z	de
fd	Zd
 Zd Zd Zd Zd Zd Z ej&                   eed      d      d        Z ej&                  ej0                  dk(  d       ej4                         d               Zd Z ej&                  ed      d        Z ej&                  ej@                  d       ej4                         d               Z! ej&                  ed      d        Z" ej&                  ed      d        Z#d Z$ ej&                  ed      d        Z%d Z&y )!HelperFunctionsTestsz Tests for helper functions.
    c                    t         j                  dd | _        t        j                  | _        t        j                  | _        t        j                  | _	        t        j                  | _        t        t        j                        | _        y)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   setUpzHelperFunctionsTests.setUpC   sS     MM&33Y334r   c                    | j                   t        j                  dd | j                  t        _        | j                  t        _        | j                  t        _	        | j                  t        _        t        j                  Ht        j                  j                          t        j                  j                  | j                         yyzRestore sys.pathN)r$   r   r   r&   r   r%   r'   r   r)   r(   r,   r*   r+   clearupdater-   r.   s    r   tearDownzHelperFunctionsTests.tearDownL   s    mm))!%!3!3	!!-""((*""))$--8 .r   c                    d}t        j                  j                  | }t        j                  | \  }}| j                  t         j                  j                  |      |       |t         j                  j                  |      k(  r| j                  ||       y | j                  t         j                  j                  |      |       y )N)	BeginningEnd)r   r   joinr   makepathassertEqualabspathnormcase)r/   
path_partsoriginal_dirabs_dirnorm_dirs        r   test_makepathz"HelperFunctionsTests.test_makepathX   s     *
ww||Z0 MM:66@277++L99Wh/RWW--g6Ar   c                    t        j                         }t        j                  D cg c];  }|r7t        j                  j                  |      rt        j                  |      d   = c}D ]  }| j                  |||d|        y c c}w )N   z> from sys.path not found in set returned by _init_pathinfo(): )r   _init_pathinfor   r   r   existsr:   assertIn)r/   dir_setr   entrys       r   test_init_pathinfoz'HelperFunctionsTests.test_init_pathinfoe   sx    %%'9< :BGGNN4$8 mmD)!, : 	HEMM%7<gGH	H :s   A Bc                 d   | j                  |j                  t        j                  d|j                  z         | j                  t	        j
                  |j                        d   t        j                         | j                  t        j                  j                  |j                               y)z>Contain common code for testing results of reading a .pth filez%s not in sys.modulesr   N)rG   importedr   modulesr   r:   good_dir_pathr   assertFalser   rF   bad_dir_pathr/   pth_files     r   pth_file_testsz#HelperFunctionsTests.pth_file_testsm   sr    h''-0A0AA	CdmmH$:$:;A>I(=(=>?r   c                 0   t               }|j                  d       	 |j                          t        j                  |j
                  |j                  t                      | j                  |       |j                          y # |j                          w xY wNTprep)	PthFilecleanupcreater   
addpackagebase_dirfilenamesetrS   rQ   s     r   test_addpackagez$HelperFunctionsTests.test_addpackaget   sp    
 9d#	OOOOH--x/@/@#%H)Hs   AB B.c                 *   t         j                  j                  |      }|dz   }t         j                  j                  ||      t	        dd      5 }| j                  fd       |j                  |       d d d        ||fS # 1 sw Y   ||fS xY w)N.pthwutf-8encodingc                  .    t        j                         S r   )r   remove)pth_fns   r   <lambda>z/HelperFunctionsTests.make_pth.<locals>.<lambda>   s    BIIf$5 r   )r   r   r<   r9   open
addCleanupwrite)r/   contentspth_dirpth_namepth_basenamerR   ri   s         @r   make_pthzHelperFunctionsTests.make_pth   s    ''//'*&(g|4&#0 	%HOO56NN8$	% $$	% $$s   &BBc           	      J   | j                  d      \  }}t               5 }t        j                  ||t	                      d d d        | j                  j                         d       | j                  |j                         t        j                  t        j                  j                  ||                   | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       y # 1 sw Y   xY w)Nzimport bad-syntax
zline 1	Tracebackzimport bad-syntaxSyntaxErrorrr   r   r   r[   r^   assertRegexgetvaluereescaper   r   r9   r/   ro   ri   err_outs       r   !test_addpackage_import_bad_syntaxz6HelperFunctionsTests.test_addpackage_import_bad_syntax   s    --(=> 	4'OOGVSU3	4))+X6))+IIbggll7F34	6
 	))+[9))+-AB))+];	4 	4s    DD"c           	      
   | j                  d      \  }}t               5 }t        j                  ||t	                      d d d        | j                  j                         d       | j                  |j                         t        j                  t        j                  j                  ||                   | j                  |j                         d       | j                  |j                         d       y # 1 sw Y   xY w)Nzrandompath
import nosuchmodule
zline 2rt   ModuleNotFoundErrorrv   r{   s       r   test_addpackage_import_bad_execz4HelperFunctionsTests.test_addpackage_import_bad_exec   s    --(KL 	4'OOGVSU3	4))+X6))+IIbggll7F34	6 	))+[9))+-BC	4 	4s    C99Dc                     | j                  d      \  }}t        j                  ||t                     }| j	                  |t                      y )Nz

  

)rr   r   r[   r^   r;   )r/   ro   ri   known_pathss       r   test_addpackage_empty_linesz0HelperFunctionsTests.test_addpackage_empty_lines   s:    --5oogvsu=ce,r   c           	         | j                  d      \  }}t               5 }| j                  t        j                  ||t                            d d d        d | _        | j                  j                         d       t        j                  D ]%  }t        |t              s| j                  d|       ' y # 1 sw Y   ixY w)Nzabc def
 zabc def)rr   r   rO   r   r[   r^   maxDiffr;   rx   r   r   
isinstancestrassertNotIn)r/   ro   ri   r|   r   s        r   #test_addpackage_import_bad_pth_filez8HelperFunctionsTests.test_addpackage_import_bad_pth_file   s    --7 	F'T__WfceDE	F))+R0HH 	5D$$  t4	5		F 	Fs   /B66B?c                    t               }|j                  d       	 |j                          t        j                  |j
                  t                      | j                  |       |j                          y # |j                          w xY wrU   )rX   rY   rZ   r   r   r\   r^   rS   rQ   s     r   test_addsitedirz$HelperFunctionsTests.test_addsitedir   sh     9d#	OOOOH--su5)Hs   A	A8 8B
c                    t        d      }|j                  d       	 |j                          t        j                  |j
                  t                      | j                  t        j                  |j                        d   t        j                         | j                  |j
                  t        j                         |j                          y # |j                          w xY w)Nz.dotfileTrV   r   )rX   rY   rZ   r   r   r\   r^   r   r:   rN   r   r   rG   rQ   s     r   test_addsitedir_dotfilez,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                    t               }|j                  d       	 |j                          t        j                  |j
                        }t        j                  |j
                  |j                  t        j                  z         t        j                  |j                  t                      | j                  t        j                  |j                        d   t         j"                         | j%                  |j                  t         j"                         |j                          y # |j                          w xY w)NTrV   r   )rX   rY   rZ   r   stat	file_pathr   st_flags	UF_HIDDENr   r   r\   r^   r   r:   rN   r   r   rG   )r/   rR   sts      r   test_addsitedir_hidden_flagsz1HelperFunctionsTests.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   C<D+ +D=win32ztest needs Windowsc                    t               }|j                  d       	 |j                          t        j                  dd|j
                  g       t        j                  |j                  t                      | j                  t        j                  |j                        d   t        j                         | j                  |j                  t        j                         |j                          y # |j                          w xY w)NTrV   attribz+Hr   )rX   rY   rZ   
subprocess
check_callr   r   r   r\   r^   r   r:   rN   r   r   rG   rQ   s     r   %test_addsitedir_hidden_file_attributez: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                 p    | j                  t        j                         t        j                                y r   )r;   r   _getuserbaser*   r.   s    r   test__getuserbasez&HelperFunctionsTests.test__getuserbase   s$    **,i.D.D.FGr   zneed user sitec                 F   t         j                  dk(  rt         j                  rd}nt        j                  dz   }| j                  t        j                  j                  t        j                  t        j                                     t        j                  d|             y )Ndarwinosx_framework_user_userpurelib)r   platform
_frameworkr   namer;   r   normpathr   	_get_pathr   r*   get_path)r/   schemes     r   test_get_pathz"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                 @   t         j                  j                  t        j                        }| j                  |t        j                         t         j                  j                         }t        j                  t        j                  dd|z  g|      }| j                  |d       t         j                  j                         }t        j                  t        j                  ddd|z  g|      }|t        j                         d   k(  r| j                  |d       n| j                  |dd       t         j                  j                         }d|d	<   t        j                  t        j                  dd|z  g|      }|t        j                         d   k(  r| j                  |d       n| j                  |dd
       t         j                  j                         }d|d<   t        j                  t        j                  ddg|      }| j                  |dd       y )N-cz$import sys; sys.exit(%r in sys.path)envrD   z-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   rG   r   environr
   r   call
executabler;   getsitepackages)r/   usersiter   rcs       r   test_s_optionz"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                    d t         _        t        j                         }| j                  t         j                  |       d t         _        dd l}d |_        t               5 }d|d<   | j                  t        j                         j                  d      t        j                                d d d        y # 1 sw Y   y xY w)Nr   xoxor   )	r   r%   getuserbaser;   r*   r+   r   
assertTrue
startswith)r/   	user_baser*   r   s       r   test_getuserbasez%HelperFunctionsTests.test_getuserbase%  s    $$&	 	3 !%	 " 	0g(.G$%OOD,,.99&A ,,.0	0 	0 	0s    AB44B=c                 Z   d t         _        d t         _        t        j                         }| j	                  t         j                  |       | j                  |j                  t         j                        |       | j	                  t         j                  t        j                                y r   )r   r   r%   getusersitepackagesr;   r   r   r   )r/   	user_sites     r   test_getusersitepackagesz-HelperFunctionsTests.test_getusersitepackages7  sn    ,,.	 	3	,,T^^<iH)9)9);<r   c                    dgt         _        t        j                         }t        j                  dk(  rt
        j                  dk7  ru| j                  t        |      d       t        j                  j                  dt
        j                  dt
        j                  d d z  d      }| j                  |d   |       n| j                  t        |      d       t        j                  j                  dddt
        j                  d d z  d      }| j                  |d	   |       y | j                  t        |      d       | j                  |d   d       t        j                  j                  ddd      }| j                  t        j                  j                  |d         t        j                  j                  |             y )
Nr   /lib   zpython%d.%dzsite-packagesr   rD   )r   r(   r   r   sepr   
platlibdirr;   lenr   r9   version_infor=   )r/   dirswanteds      r   test_getsitepackagesz)HelperFunctionsTests.test_getsitepackagesB  sY   ##%66S=~~&  TA.fcnn&3c6F6Fr6J&J&57   a&1  TA.WW\\&%"/#2B2B2A2F"F"13F T"Xv. SY*T!Wf-WW\\&%AFRWW--d1g6WW--f57r   c                    d t         _        d t         _        t               5 }t	        j
                  dd       5  |d= |d= t        j                         }| j                  |j                  dt        j                  z         |       t        j                         }| j                  |j                  |      |       d d d        d d d        t	        j
                  dd      5 }t        j
                  j                  t         d	      5 }t        j                  t         d
d      5  t               }t        j                   |       |j#                         |j%                          | j'                  |       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   2xY w# 1 sw Y   6xY w# 1 sw Y   y xY w)Nzos.path.expanduserc                     | S r   r   )r   s    r   rj   z=HelperFunctionsTests.test_no_home_directory.<locals>.<lambda>d  s    4 r   r   APPDATA~zos.path.isdirF)return_valuer   r   T)r   r   r%   r   r	   patchr   r   r   r   r   r   objectr   	swap_attrr^   addusersitepackagesassert_called_once_withassert_not_calledrO   )r/   r   r   r   
mock_isdirmock_addsitedirr   s          r   test_no_home_directoryz+HelperFunctionsTests.test_no_home_directory[  s   
  " 	HgZZ,.?@	H ()	"((*IOOI00rvv>%' 002IOOI00;YG	H 	H ZZe< 	*
ZZt\2	*6Et%7>	* %K$$[1..y9--/[)	* 	* 	* 	*	H 	H 	H 	H	* 	* 	* 	* 	* 	*s`   FBF;F"%F>F2#AF&5F2=F>F	FF#&F/+F22F;	7F>>Gc                    d}d|dz   fdfD ]  \  }}t        j                  dt        j                  |            5  t        j                  dt        j                               5  t        j                  |       | j                  t        j                  j                         |       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nzbla-bla-blaT
)Fr   z	sys.flags)verbosez
sys.stderr)r	   r   MockioStringIOr   _tracer;   r   stderrrx   )r/   messager   outs       r   
test_tracezHelperFunctionsTests.test_trace}  s    !7T>2K? 	=LGSK7)CD =JJ|R[[];=G$  !4!4!6<= = =	== = = =s$   )C%AB<)C<CCC	N)'__name__
__module____qualname____doc__r0   r5   rB   rJ   rS   r_   r   rr   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   r   r   r"   r"   ?   s   5
9BH@ *-v %<
D-	5	 XY/1JK L X02FG W  "
 # H
H X(89@ :@ X.. 1> ? W  "%? #?%?N X(890 :0" X(89= :=72 X(89* :*B=r   r"   c                   .    e Zd ZdZedddfdZd Zd	dZy)
rX   z/Helper class for handling testing of .pth filestime__testdir____badc                    |dz   | _         t        j                  j                  d      | _        t        j                  j                  | j                  | j                         | _        || _        || _        || _	        t        j                  j                  | j                  | j                        | _
        t        j                  j                  | j                  | j                        | _        y)zInitialize instance variablesrb   r   N)r]   r   r   r<   r\   r9   r   rL   good_dirnamebad_dirnamerN   rP   )r/   filename_baserL   r   r   s        r   __init__zPthFile.__init__  s     &.+dmmT]]C (&WW\\$--9J9JKGGLL8H8HIr   c                 ~   t        | j                  d      }	 t        d|       t        d|       t        d| j                  z  |       t        | j                  |       t        | j
                  |       |j                          t        j                  | j                         y# |j                          w xY w)ao  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.

        rc   z#import @bad module namefiler   z	import %sN)
rk   r   printrL   r   r   closer   mkdirrN   )r/   FILEs     r   rZ   zPthFile.create  s     DNNC(	,48$T"+-D9$##$/$"".JJL
##$ JJLs   A"B* *B<c                    t         j                  j                  | j                        rt        j                  | j                         |rVt
        j                  j                  | j                        | _	        | j                  rOt
        j                  | j                  = n3| j                  r'| j                  t
        j                  | j                  <   t         j                  j                  | j                        rt        j                  | j                         t         j                  j                  | j                        r t        j                  | j                         yy)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   rF   r   rh   r   rM   getrL   imported_modulerN   rmdirrP   )r/   rW   s     r   rY   zPthFile.cleanup  s     77>>$..)IIdnn%#&;;??4==#AD ##KK.##-1-A-ADMM*77>>$,,-HHT''(77>>$++,HHT&&' -r   N)F)r   r   r   r   r   r   rZ   rY   r   r   r   rX   rX     s    9%+f!.G
J%,(r   rX   c                   2   e Zd ZdZd Zd Zd Zd Z ej                  d      d        Z
d Zd	 Zd
 Zd Z ej                   eej$                  d      d      ej(                  j+                  d      ej(                  j,                  d                      Zy)ImportSideEffectTestsz(Test side-effects from importing 'site'.c                 4    t         j                  dd | _        y)zMake a copy of sys.pathN)r   r   r$   r.   s    r   r0   zImportSideEffectTests.setUp  s    r   c                 >    | j                   t        j                  dd yr2   )r$   r   r   r.   s    r   r5   zImportSideEffectTests.tearDown  s    mmr   c                     dt         j                  d   _        t        j                          | j                  t         j                  d   j                         y)zTest for __cached__ is None.

        Regarding to PEP 3147, __cached__ can be None.

        See also: https://bugs.python.org/issue30167
        Ntest)r   rM   
__cached__r   	abs_pathsassertIsNoner.   s    r   test_abs_paths_cached_Nonez0ImportSideEffectTests.test_abs_paths_cached_None  s<     *.F&#++f-889r   c                     t        j                          t               }t        j                  D ]%  }| j                  ||       |j                  |       ' y r   )r   removeduppathsr^   r   r   r   add)r/   
seen_pathsr   s      r   test_no_duplicate_pathsz-ImportSideEffectTests.test_no_duplicate_paths  sF     	U
HH 	!DT:.NN4 	!r   ztest not implementedc                      y r   r   r.   s    r   test_add_build_dirz(ImportSideEffectTests.test_add_build_dir  s    
 	r   c                     | j                  t        t        d             | j                  t        t        d             y )Nquitexitr   r   builtinsr.   s    r   test_setting_quitz'ImportSideEffectTests.test_setting_quit  s(    &12&12r   c                     | j                  t        t        d             | j                  t        t        d             | j                  t        t        d             y )N	copyrightcreditslicenser  r.   s    r   test_setting_copyrightz,ImportSideEffectTests.test_setting_copyright  s;    +67)45)45r   c                 B    | j                  t        t        d             y )Nhelpr  r.   s    r   test_setting_helpz'ImportSideEffectTests.test_setting_help  s    &12r   c                 t    dt         j                  vr	 dd l}| j                  d       y y # t        $ r Y y w xY w)Nsitecustomizer   z(sitecustomize not imported automatically)r   rM   r'  failImportError)r/   r'  s     r   test_sitecustomize_executedz1ImportSideEffectTests.test_sitecustomize_executed  s?    #++-F$ 		DE .  s   + 	77HTTPSHandlerz$need SSL support to download licensenetworkc                 R   t         j                  j                         d   }t        j                  j                  |d      }| j                  t        j                  j                         	 t        j                  |      5  t        j                  j                  |      5 }|j                         }d d d        d d d        | j                  dd|z          y # 1 sw Y   )xY w# 1 sw Y   -xY w# t        j                  j                  $ r}|j                  }Y d }~^d }~ww xY w)NrD   HEAD)method   zCan't find )msg)r!  _Printer__dataspliturllibrequestRequestrl   
urlcleanupr   transient_interneturlopengetcodeerror	HTTPErrorcoder;   )r/   urlreqdatar=  es         r   test_license_exists_at_urlz0ImportSideEffectTests.test_license_exists_at_url  s     $$**,Q/nn$$S$8112	11#6 *^^++C0 *D<<>D**
 	s(;<	* ** * ||%% 	66D	sH   -C3  C'"C3C';C3 C$	 C''C0,C3 3D&D!!D&N)r   r   r   r   r0   r5   r  r  r   skipr  r  r"  r%  r*  r   r   r4  r5  r  r   requires_resourcesystem_must_validate_certrB  r   r   r   r  r    s    2$$	:! X]])* +3
63F X@?A	\\##I.	\\++= , /A=r   r  c                       e Zd Z ej                         d        Z ej                         d        Z ej                         d        Z ej                         d        Zy)StartupImportTestsc           	      X   t        j                  t        j                  dddddgt         j                  dd      }|j                         d	   }| j                  |j                  d	t        |             t        j                  |      }|D ]k  }t        j                  t        j                  j                  t        j                  |      d
            }|sL| j!                  dt#        |       d|        m t        j                  t        j                  ddddddgt         j                  t         j                  dd      }|j                         \  }}| j                  |j                  d	||f       t        j                  |      }| j%                  d|       h d}| j'                  |j)                  |      |       | j+                  d||       | j+                  d||       h dj-                  t        j.                        }	| j'                  |j)                  |	      |       y )N-Xutf8-Ir   z!import sys; print(repr(sys.path))rd   surrogateescape)stdoutrf   errorsr   z*.pthzfound z .pth files in: z-vz#import sys; print(set(sys.modules)))rM  r   rf   rN  r   >   
re._parserre._compilerre._constantsry   _srelocalecopyreg>
   heapqtypeskeywordreprlibweakrefoperator	functools	itertoolscollections_collections)r   Popenr   r   PIPEcommunicater;   
returncodereprastliteral_evalglobr   r   r9   rz   skipTestr   rG   rO   intersectionr   
differencebuiltin_module_names)
r/   popenrM  isolated_pathsr   	pth_filesr   rM   re_modscollection_modss
             r   test_startup_importsz'StartupImportTests.test_startup_imports  s      #..$"&(K"M(2*1(9	;
 ""$Q'))1d6l;))&1
 # 	OD		"'',,t{{4/@'"JKIs9~&66FtfMN	O   #..$d"&(M"O(2(2*1(9; **,))1vv.>?""6*fg& P--g6? 	7F3 	GV4 'Js'?'?@ 	 	--o>Gr   c                     t        j                  t        j                  ddg      j	                         }| j                  |d       y )Nr   9import sys; sys.exit(hasattr(sys, "__interactivehook__"))z''__interactivehook__' not added by siter   r_  r   r   waitr   r/   rs     r   test_startup_interactivehookz/StartupImportTests.test_startup_interactivehookE  s=    cnndGI JJN$& 	
DEr   c                     t        j                  t        j                  dddg      j	                         }| j                  |d       y )NrK  r   rr  z,'__interactivehook__' added in isolated mode)r   r_  r   r   rt  rO   ru  s     r   %test_startup_interactivehook_isolatedz8StartupImportTests.test_startup_interactivehook_isolatedK  sC     cnndDGI JJN$& 	
JKr   c                     t        j                  t        j                  dddg      j	                         }| j                  |d       y )NrK  r   zYimport site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))z6'__interactivehook__' not added by enablerlcompleter()rs  ru  s     r   .test_startup_interactivehook_isolated_explicitzAStartupImportTests.test_startup_interactivehook_isolated_explicitR  sC     cnndDgi jjnjnjp 	
STr   N)	r   r   r   r   r   rp  rw  ry  r{  r   r   r   rG  rG    s     W  "0H #0Hd !W  "F #F
 !W  "L #L !W  "U #Ur   rG  c                   
   e Zd Zej                  dk(  rddZnddZd ZdedefdZ	 e
j                         d        Z e
j                         d	        Z e
j                         d
        Z e
j                         d        Zy)_pthFileTestsr   c           
         dd l }t        j                         }| j                  t        j
                  |       t        j                  j                  |t        j                  j                  t        j                        d         }|j                  t        j                        }t        j                  j                  |t        j                  j                  |      d         }t        j                  t        j                  |       t        j                  ||       t!        j                   t        j                  j                  t        j                  j                  |      d   d            D ]V  }t        j                  |t        j                  j                  |t        j                  j                  |      d                X |r&t        j                  j#                  |      d   dz   }	n%t        j                  j#                  |      d   dz   }	t%        |	dd      5 }
|D ]  }t'        ||
        	 d d d        |S # 1 sw Y   |S xY w)	Nr   rD   zvcruntime*.dll._pthrc   rJ  re   r   )_winapitempfilemkdtemprl   r   rmtreer   r   r9   r3  r   r   GetModuleFileName	dllhandleshutilr
   rf  splitextrk   r   )r/   linesexe_pthr  temp_direxe_filedll_src_filedll_filefn	_pth_fileflines               r   _create_underpth_exez"_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h/iiRWW]]<-H-KM] ^_ NBXrww}}R7H7K LMNGG,,X6q9GC	GG,,X6q9GC	iv6 (!! (D$Q'(( O( Os   'IIc                    |st        j                  d      t        j                         }| j	                  t
        j                  |       t        j                  j                  |t        j                  j                  t        j                        d         }t        j                  t        j                  |       |dz   }t        |d      5 }|D ]  }t        ||        	 d d d        |S # 1 sw Y   |S xY w)Nz1library ._pth file not supported on this platformrD   r  rc   r   )r   r   r  r  rl   r   r  r   r   r9   r3  r   r   symlinkrk   r   )r/   r  r  r  r  r  r  r  s           r   r  z"_pthFileTests._create_underpth_exep  s    ''([\\'')HOOI,,h7ww||HbggmmCNN.KA.NOHJJs~~x0 7*Ii% (! (D$Q'(( O( Os   C//C9c                     g }|D ][  }|r|d   dk(  rt         j                  j                  t         j                  j                  ||            }|j	                  |       ] |S )Nr   #)r   r   r<   r9   append)r/   
sys_prefixr  r$   r  abs_paths         r   "_calc_sys_path_for_underpth_nositez0_pthFileTests._calc_sys_path_for_underpth_nosite}  sZ     	&D47c>wwrww||J'EFHOOH%		&
 r   libpathimport_sitec                (   dg}t        j                  d            }t        dd|z        }|dk  r| j                  d|dd       |j	                  fd	t        |      D               |j	                  d
dg       |r|j                  d       |S )Nfake-path-namerd   r0  i0u  r   z Python stdlib path is too long (,z bytes)c              3   "   K   | ]  }  y wr   r   ).0_r  s     r   	<genexpr>z/_pthFileTests._get_pth_lines.<locals>.<genexpr>  s     =Q=s   r   z	# commentzimport site)r   encodeminrg  extendranger  )r/   r  r  	pth_linesencoded_libpath_lengthrepetitionss    `    r   _get_pth_linesz_pthFileTests._get_pth_lines  s    %&	 "%W^^G%<!=#u(>>?!MM23I!2LGTV=%*<=="k*+]+r   c                 v   ddgt         j                  dd}| j                  |      }| j                  t        j                  j                  |      |      }t        j                  |ddddgd	d
      }|j                         j                  d      }| j                  |d       | j                  ||d       y )Nz#.z# ..r`   z..rI  rJ  r   Cimport sys; print("\n".join(sys.path) if sys.flags.no_site else "")rd   rL  )rf   rN  r   sys.flags.no_site was Falsesys.path is incorrect)r   r   r  r  r   dirnamer   check_outputrstripr3  r   r;   )r/   r  r  r$   outputactual_sys_paths         r   test_underpth_basicz!_pthFileTests.test_underpth_basic  s    68CHH8c848	,,Y7::GGOOH% (((D&$R*
$57 !--///5)FG#	
r   c                    t         j                  j                  }t        j                  j                  t        j                        }| j                  |d      }| j                  |      }| j                  t        j                  j                  |      |      }t        j                  j                         }d|d<   dj                  |t        j                  t        j                  d            |d<   t!        j"                  |ddg|d	d
      }|j%                         j'                  d      }| j)                  |d       | j+                  ||d       y )NFr  from-env
PYTHONPATHz{}{}{}PATHr   r  rd   rL  )r   rf   rN  r   r  r  )r  r   
STDLIB_DIRr   r   r  r   r   r  r  r  r   r
   formatpathsepgetenvr   r  r  r3  r   r;   )	r/   r  
exe_prefixr  r  r$   r   r  r  s	            r   test_underpth_nosite_filez'_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                    t         j                  j                  }t        j                  j                  t        j                        }| j                  | j                  |d            }t        j                  j                  |      }t        j                  j                         }d|d<   dj                  |t        j                  d            |d<   t        j                  |ddt        j                  j!                  |d	      d
|d
t        j                  j!                  |d      dg|      }| j#                  |d       y )NTr  r  r  {};{}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   r9   r   r/   r  r  r  r  r   r   s          r   test_underpth_filez _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                    t         j                  j                  }t        j                  j                  t        j                        }| j                  | j                  |d      d      }t        j                  j                  |      }t        j                  j                         }d|d<   dj                  |t        j                  d            |d<   t        j                  |d	d
t        j                  j!                  |d      d|dt        j                  j!                  |d      dg|      }| j#                  |d       y )NTr  F)r  r  r  r  r  r   r  r  r  r  r   r  r  r  s          r   test_underpth_dll_filez$_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   N)T)r   r   r   r   r   r  r  r   boolr  r   r   r  r  r  r  r   r   r   r}  r}  Y  s    
||w	(	c 4   !W  "
 #
$ !W  "
 #
. !W  "5 #5& !W  "5 #5r   r}  __main__).r   r   test.supportr  r   r   r   r   test.support.os_helperr   r   rd  r  rf  r   r   ry   r  r   r   r   r*   r  urllib.errorr4  urllib.requestr	   r
   flagsno_siter   r   r   r   r   r   r    TestCaser"   r   rX   r  rG  r}  r   mainr   r   r   <module>r     s      " & ( > 
   	 	 	    
      
 99
(

8
99  t+=D=8,, D=N
5(f 5(nP=H-- P=fGU** GURN5H%% N5b zHMMO r   