a
    òñ"hÝj  ã                   @   sr  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mZ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mZ ddlmZ ejjrÖe d¡‚ddlZdad	d
„ Zdd„ Z G dd„ dej!ƒZ"G dd„ de#ƒZ$G dd„ dej!ƒZ%G dd„ dej!ƒZ&e 'ej(dkd¡G dd„ dej!ƒƒZ)e*dkrne +¡  dS )zTests for 'site'.

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

é    N)Úsupport)Úsocket_helper)Úcaptured_stderrÚTESTFNÚEnvironmentVarGuardÚ
change_cwd)Úmock)ÚcopyzPython was invoked with -Sc               
   C   s|   t jd d … atjrxtj tj¡sxzt tj¡ t 	tj¡ W n8 t
yv }  z t dtj| f ¡‚W Y d } ~ n
d } ~ 0 0 d S )Nz-unable to create user site directory (%r): %s)ÚsysÚpathÚOLD_SYS_PATHÚsiteÚENABLE_USER_SITEÚosÚisdirÚ	USER_SITEÚmakedirsÚ
addsitedirÚPermissionErrorÚunittestÚSkipTest)Úexc© r   ú6/opt/python-3.9.21/usr/lib/python3.9/test/test_site.pyÚsetUpModule)   s    ÿr   c                   C   s   t tjd d …< d S ©N)r   r
   r   r   r   r   r   ÚtearDownModule8   s    r   c                   @   sð   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	de
fdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze eedƒd¡dd„ ƒZe ejdkd ¡d!d"„ ƒZd#d$„ Zd%d&„ Ze ejd'¡d(d)„ ƒZd*d+„ Zd,d-„ Zd.d/„ Z d0d1„ Z!d2S )3ÚHelperFunctionsTestsz Tests for helper functions.
    c                 C   s@   t jdd… | _tj| _tj| _tj| _	t
j| _tt
jƒ| _dS )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©Úselfr   r   r   ÚsetUp@   s    zHelperFunctionsTests.setUpc                 C   sV   | j tjdd…< | jt_| jt_| jt_	| j
t_tjdurRtj ¡  tj | j¡ dS ©zRestore sys.pathN)r   r
   r   r    r   r   r!   r   r#   r"   r&   r$   r%   ÚclearÚupdater'   r(   r   r   r   ÚtearDownI   s    

zHelperFunctionsTests.tearDownc                 C   sh   d}t jj|Ž }tj|Ž \}}|  t j |¡|¡ |t j |¡krP|  ||¡ n|  t j |¡|¡ d S )N)Z	BeginningZEnd)r   r   Újoinr   ÚmakepathÚassertEqualÚabspathÚnormcase)r)   Ú
path_partsZoriginal_dirZabs_dirZnorm_dirr   r   r   Útest_makepathU   s    z"HelperFunctionsTests.test_makepathc                 C   s8   t  ¡ }dd„ tjD ƒD ]}|  ||d||f ¡ qd S )Nc                 S   s*   g | ]"}|rt j |¡rt |¡d  ‘qS )é   )r   r   Úexistsr   r0   )Ú.0r   r   r   r   Ú
<listcomp>d   s   ÿz;HelperFunctionsTests.test_init_pathinfo.<locals>.<listcomp>zB%s from sys.path not found in set returned by _init_pathinfo(): %s)r   Ú_init_pathinfor
   r   ÚassertIn)r)   Zdir_setÚentryr   r   r   Útest_init_pathinfob   s    ÿÿz'HelperFunctionsTests.test_init_pathinfoc                 C   sJ   |   |jtjd|j ¡ |   t |j¡d tj¡ |  t	j 
|j¡¡ dS )z>Contain common code for testing results of reading a .pth filez%s not in sys.modulesr   N)r;   Úimportedr
   Úmodulesr   r0   Úgood_dir_pathr   ÚassertFalser   r7   Úbad_dir_path©r)   Úpth_filer   r   r   Úpth_file_testsj   s
    ÿz#HelperFunctionsTests.pth_file_testsc                 C   sT   t ƒ }|jdd z2| ¡  t |j|jtƒ ¡ |  |¡ W | ¡  n
| ¡  0 d S ©NT©Úprep)	ÚPthFileÚcleanupÚcreater   Ú
addpackageÚbase_dirÚfilenameÚsetrE   rC   r   r   r   Útest_addpackageq   s    z$HelperFunctionsTests.test_addpackageÚ.c                    st   t j |¡}|d }t j ||¡‰ tˆ ddd,}|  ‡ fdd„¡ | |¡ W d   ƒ n1 sb0    Y  ||fS )Nú.pthÚwúutf-8)Úencodingc                      s
   t  ˆ ¡S r   )r   Úremover   ©Úpth_fnr   r   Ú<lambda>†   ó    z/HelperFunctionsTests.make_pth.<locals>.<lambda>)r   r   r2   r/   ÚopenÚ
addCleanupÚwrite)r)   ÚcontentsÚpth_dirZpth_nameZpth_basenamerD   r   rW   r   Úmake_pth€   s    (zHelperFunctionsTests.make_pthc              	   C   s¨   |   d¡\}}tƒ  }t ||tƒ ¡ W d   ƒ n1 s:0    Y  |  | ¡ d¡ |  | ¡ t t	j
 ||¡¡¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ d S )Nzimport bad-syntax
zline 1Ú	Tracebackzimport bad-syntaxÚSyntaxError©r`   r   r   rL   rO   ZassertRegexÚgetvalueÚreÚescaper   r   r/   ©r)   r_   rX   Úerr_outr   r   r   Ú!test_addpackage_import_bad_syntaxŠ   s    .
ÿz6HelperFunctionsTests.test_addpackage_import_bad_syntaxc              	   C   s˜   |   d¡\}}tƒ  }t ||tƒ ¡ W d   ƒ n1 s:0    Y  |  | ¡ d¡ |  | ¡ t t	j
 ||¡¡¡ |  | ¡ d¡ |  | ¡ d¡ d S )Nzrandompath
import nosuchmodule
zline 2ra   ÚModuleNotFoundErrorrc   rg   r   r   r   Útest_addpackage_import_bad_exec™   s    .
ÿz4HelperFunctionsTests.test_addpackage_import_bad_execc                 C   s†   |   d¡\}}tƒ &}|  t ||tƒ ¡¡ W d   ƒ n1 s@0    Y  d | _|  | ¡ d¡ t	j
D ]}t|tƒrf|  d|¡ qfd S )Nzabc def
Ú zabc def)r`   r   rA   r   rL   rO   ZmaxDiffr1   rd   r
   r   Ú
isinstanceÚstrÚassertNotIn)r)   r_   rX   rh   r   r   r   r   Ú#test_addpackage_import_bad_pth_file¥   s    4

z8HelperFunctionsTests.test_addpackage_import_bad_pth_filec                 C   sP   t ƒ }|jdd z.| ¡  t |jtƒ ¡ |  |¡ W | ¡  n
| ¡  0 d S rF   )rI   rJ   rK   r   r   rM   rO   rE   rC   r   r   r   Útest_addsitedir°   s    z$HelperFunctionsTests.test_addsitedirc                 C   sr   t dƒ}|jdd zN| ¡  t |jtƒ ¡ |  t |j	¡d t
j¡ |  |jt
j¡ W | ¡  n
| ¡  0 d S )Nz.dotfileTrG   r   )rI   rJ   rK   r   r   rM   rO   ro   r0   r@   r
   r   r;   rC   r   r   r   Útest_addsitedir_dotfile½   s    z,HelperFunctionsTests.test_addsitedir_dotfileÚchflagsztest needs os.chflags()c                 C   s’   t ƒ }|jdd zp| ¡  t |j¡}t |j|jtjB ¡ t	 
|jtƒ ¡ |  t	 |j¡d tj¡ |  |jtj¡ W | ¡  n
| ¡  0 d S )NTrG   r   )rI   rJ   rK   r   ÚstatÚ	file_pathrs   Úst_flagsÚ	UF_HIDDENr   r   rM   rO   ro   r0   r@   r
   r   r;   )r)   rD   Ústr   r   r   Útest_addsitedir_hidden_flagsÈ   s    z1HelperFunctionsTests.test_addsitedir_hidden_flagsÚwin32ztest needs Windowsc                 C   s‚   t ƒ }|jdd z`| ¡  t dd|jg¡ t |jt	ƒ ¡ |  
t |j¡d tj¡ |  |jtj¡ W | ¡  n
| ¡  0 d S )NTrG   Zattribz+Hr   )rI   rJ   rK   Ú
subprocessÚ
check_callru   r   r   rM   rO   ro   r0   r@   r
   r   r;   rC   r   r   r   Ú%test_addsitedir_hidden_file_attributeÖ   s    z:HelperFunctionsTests.test_addsitedir_hidden_file_attributec                 C   s   |   t ¡ t ¡ ¡ d S r   )r1   r   Ú_getuserbaser$   r(   r   r   r   Útest__getuserbaseå   s    z&HelperFunctionsTests.test__getuserbasec                 C   sB   t jdkrt jrd}n
tjd }|  t t ¡ ¡t	 
d|¡¡ d S )NÚdarwinZosx_framework_userÚ_userZpurelib)r
   ÚplatformÚ
_frameworkr   Únamer1   r   Ú	_get_pathr~   r$   Zget_path)r)   Úschemer   r   r   Útest_get_pathè   s    

ÿz"HelperFunctionsTests.test_get_pathz<requires access to PEP 370 user-site (site.ENABLE_USER_SITE)c                 C   s(  t j}|  |tj¡ tj ¡ }tj	tj
dd| g|d}|  |d¡ tj ¡ }tj	tj
ddd| g|d}|t  ¡ d krˆ|  |d¡ n|  |dd¡ tj ¡ }d|d	< tj	tj
dd| g|d}|t  ¡ d krà|  |d¡ n|  |dd
¡ tj ¡ }d|d< tj	tj
ddg|d}|  |dd¡ d S )Nú-cz$import sys; sys.exit(%r in sys.path)©Úenvr6   z-sr   z%User site still added to path with -sÚ1Z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   r   Úenvironr	   r{   ÚcallÚ
executabler1   Úgetsitepackages)r)   ZusersiterŠ   Úrcr   r   r   Útest_s_optionð   sP    

ÿþ
ÿþ

ÿþÿ

ÿþÿz"HelperFunctionsTests.test_s_optionc                 C   s|   d t _t  ¡ }|  t j|¡ d t _dd l}d |_tƒ 2}d|d< |  t  ¡  d¡t  ¡ ¡ W d   ƒ n1 sn0    Y  d S )Nr   ÚxoxorŒ   )	r   r   Úgetuserbaser1   r$   r%   r   Ú
assertTrueÚ
startswith)r)   Ú	user_baser$   r   r   r   r   Útest_getuserbase  s    ÿz%HelperFunctionsTests.test_getuserbasec                 C   sL   d t _d t _t  ¡ }|  t j|¡ |  | t j¡|¡ |  t jt  ¡ ¡ d S r   )r   r   r   Úgetusersitepackagesr1   r•   r–   r”   )r)   Ú	user_siter   r   r   Útest_getusersitepackages*  s    z-HelperFunctionsTests.test_getusersitepackagesc                 C   sî   dgt _t  ¡ }tjdkrªtjdkrh|  t|ƒd¡ tj	 
dtjdtjd d…  d¡}|  |d |¡ n|  t|ƒd¡ tj	 
dddtjd d…  d¡}|  |d	 |¡ n@|  t|ƒd¡ |  |d d¡ tj	 
ddd¡}|  |d |¡ d S )
Nr“   ú/Úlibé   zpython%d.%dzsite-packagesr   r6   éÿÿÿÿ)r   r"   r   r   Úsepr
   Ú
platlibdirr1   Úlenr   r/   Úversion_info)r)   ÚdirsZwantedr   r   r   Útest_getsitepackages4  s(    

þ
þz)HelperFunctionsTests.test_getsitepackagesc              
   C   sh  d t _d t _tƒ †}t ddd„ ¡V |d= |d= t  ¡ }|  | dt	j
 ¡|¡ t  ¡ }|  | |¡|¡ W d   ƒ n1 s€0    Y  W d   ƒ n1 sž0    Y  tjddd	œ}tj t d
¡l}t t dd¡< tƒ }t  |¡ | |¡ | ¡  |  |¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s:0    Y  W d   ƒ n1 sZ0    Y  d S )Nzos.path.expanduserc                 S   s   | S r   r   )r   r   r   r   rY   T  rZ   z=HelperFunctionsTests.test_no_home_directory.<locals>.<lambda>rŒ   ÚAPPDATAú~zos.path.isdirF)Zreturn_valuer   r   T)r   r   r   r   r   Zpatchr”   r•   r–   r   r    r™   Úobjectr   Z	swap_attrrO   ÚaddusersitepackagesZassert_called_once_withZassert_not_calledrA   )r)   r   r—   rš   Z
mock_isdirZmock_addsitedirÚknown_pathsr   r   r   Útest_no_home_directoryL  s0    ÿÿNÿþ

z+HelperFunctionsTests.test_no_home_directoryN)"Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   r.   r5   r=   rE   rP   r   r`   ri   rk   rp   rq   rr   r   Ú
skipUnlessÚhasattrr   ry   r
   r‚   r}   r   r‡   r   r   r’   r˜   r›   r¥   r«   r   r   r   r   r   <   s2   	



'
r   c                   @   s4   e Zd ZdZedddfdd„Zdd„ Zdd
d„ZdS )rI   z/Helper class for handling testing of .pth filesÚtimeZ__testdir__Z__badc                 C   sj   |d | _ tj d¡| _tj | j| j ¡| _|| _|| _|| _	tj | j| j¡| _
tj | j| j	¡| _dS )zInitialize instance variablesrR   rl   N)rN   r   r   r2   rM   r/   ru   r>   Úgood_dirnameÚbad_dirnamer@   rB   )r)   Úfilename_baser>   r³   r´   r   r   r   Ú__init__q  s    
zPthFile.__init__c                 C   sz   t | jdƒ}zRtd|d td|d td| j |d t| j|d t| j|d W | ¡  n
| ¡  0 t | j	¡ dS )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.

        rS   z#import @bad module name©ÚfileÚ
z	import %sN)
r[   ru   Úprintr>   r³   r´   Úcloser   Úmkdirr@   )r)   ÚFILEr   r   r   rK   }  s    zPthFile.createFc                 C   sŒ   t j | j¡rt  | j¡ |r@tj | j¡| _	| j	rTtj| j= n| j	rT| j	tj| j< t j | j
¡rnt  | j
¡ t j | j¡rˆt  | j¡ dS )z°Make 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   r7   ru   rV   r
   r?   Úgetr>   Zimported_moduler@   ÚrmdirrB   )r)   rH   r   r   r   rJ   “  s    zPthFile.cleanupN)F)r¬   r­   r®   r¯   r   r¶   rK   rJ   r   r   r   r   rI   n  s   ÿ
rI   c                   @   sš   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Ze 	d
¡dd„ ƒZ
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej d¡ejje eejdƒd¡dd„ ƒƒƒZdS )ÚImportSideEffectTestsz(Test side-effects from importing 'site'.c                 C   s   t jdd… | _dS )zMake a copy of sys.pathN)r
   r   r   r(   r   r   r   r*   ¨  s    zImportSideEffectTests.setUpc                 C   s   | j tjdd…< dS r+   )r   r
   r   r(   r   r   r   r.   ¬  s    zImportSideEffectTests.tearDownc                 C   s*   dt jd _t ¡  |  t jd j¡ dS )z“Test for __cached__ is None.

        Regarding to PEP 3147, __cached__ can be None.

        See also: https://bugs.python.org/issue30167
        NÚtest)r
   r?   Ú
__cached__r   Ú	abs_pathsZassertIsNoner(   r   r   r   Útest_abs_paths_cached_None°  s    z0ImportSideEffectTests.test_abs_paths_cached_Nonec                 C   s4   t  ¡  tƒ }tjD ]}|  ||¡ | |¡ qd S r   )r   ÚremoveduppathsrO   r
   r   ro   Úadd)r)   Z
seen_pathsr   r   r   r   Útest_no_duplicate_paths»  s
    
z-ImportSideEffectTests.test_no_duplicate_pathsztest not implementedc                 C   s   d S r   r   r(   r   r   r   Útest_add_build_dirÄ  s    z(ImportSideEffectTests.test_add_build_dirc                 C   s$   |   ttdƒ¡ |   ttdƒ¡ d S )NÚquitÚexit©r•   r±   Úbuiltinsr(   r   r   r   Útest_setting_quitË  s    z'ImportSideEffectTests.test_setting_quitc                 C   s4   |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ d S )NÚ	copyrightÚcreditsÚlicenserË   r(   r   r   r   Útest_setting_copyrightÐ  s    z,ImportSideEffectTests.test_setting_copyrightc                 C   s   |   ttdƒ¡ d S )NÚhelprË   r(   r   r   r   Útest_setting_helpÖ  s    z'ImportSideEffectTests.test_setting_helpc                 C   sP   t jdkrLdd l}| ¡ d  d¡rLtjj ¡ D ]}|dkr0 qLq0|  d¡ d S )Nrz   r   r6   ZcpÚmbcszdid not alias mbcs)	r
   r‚   ÚlocaleÚgetdefaultlocaler–   Ú	encodingsÚaliasesÚvaluesÚfail)r)   rÕ   Úvaluer   r   r   Útest_aliasing_mbcsÚ  s    
z(ImportSideEffectTests.test_aliasing_mbcsc                 C   s8   dt jvr4zdd l}W n ty(   Y n0 |  d¡ d S )NÚsitecustomizer   z(sitecustomize not imported automatically)r
   r?   rÝ   ÚImportErrorrÚ   )r)   rÝ   r   r   r   Útest_sitecustomize_executedä  s    
z1ImportSideEffectTests.test_sitecustomize_executedÚnetworkZHTTPSHandlerz$need SSL support to download licensec              
   C   sÖ   t j ¡ d }tjj|dd}|  tjj¡ zbt 	|¡D tj 
|¡}| ¡ }W d   ƒ n1 sd0    Y  W d   ƒ n1 s‚0    Y  W n. tjjy¼ } z|j}W Y d }~n
d }~0 0 | j|dd| d d S )Nr6   ZHEAD)ÚmethodéÈ   zCan't find )Úmsg)rÐ   Ú_Printer__dataÚsplitÚurllibÚrequestZRequestr\   Ú
urlcleanupr   Ztransient_internetÚurlopenZgetcodeÚerrorÚ	HTTPErrorÚcoder1   )r)   ÚurlZreqÚdatarì   Úer   r   r   Útest_license_exists_at_urlî  s    Hz0ImportSideEffectTests.test_license_exists_at_urlN)r¬   r­   r®   r¯   r*   r.   rÄ   rÇ   r   ÚskiprÈ   rÍ   rÑ   rÓ   rÜ   rß   rÁ   r   Zrequires_resourceZsystem_must_validate_certr°   r±   ræ   rç   rð   r   r   r   r   rÀ   ¥  s$   	



ÿrÀ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚStartupImportTestsc           
      C   s8  t jtjdddgt jdd}| ¡ d }|  |jdt|ƒ¡ t	|ƒ}|D ]<}t
 
tj t
 |¡d¡¡}|rH|  dt|ƒ› d	|› ¡ qHt jtjdd
ddgt jt jdd}| ¡ \}}|  |jd||f¡ t	|ƒ}|  d|¡ h d£}|  | |¡|¡ |  d||¡ |  d||¡ h d£ tj¡}	|  | |	¡|¡ d S )Nú-Irˆ   z!import sys; print(repr(sys.path))rT   )ÚstdoutrU   r   z*.pthzfound z .pth files in: z-vz#import sys; print(set(sys.modules)))rô   ÚstderrrU   r   >   re   Ú	sre_parseÚsre_compileÚ_sreÚsre_constantsrÕ   Úcopyreg>
   Ú	functoolsÚtypesÚcollectionsÚ_collectionsÚweakrefÚheapqÚreprlibÚkeywordÚ	itertoolsÚoperator)r{   ÚPopenr
   r   ÚPIPEÚcommunicater1   Ú
returncodeÚreprÚevalÚglobr   r   r/   rf   ZskipTestr¢   r;   rA   Úintersectionro   Ú
differenceÚbuiltin_module_names)
r)   Úpopenrô   Zisolated_pathsr   Z	pth_filesrõ   r?   Zre_modsZcollection_modsr   r   r   Útest_startup_imports  s@    ÿýÿüýz'StartupImportTests.test_startup_importsc                 C   s&   t  tjddg¡ ¡ }|  |d¡ d S )Nrˆ   ú9import sys; sys.exit(hasattr(sys, "__interactivehook__"))z''__interactivehook__' not added by site©r{   r  r
   r   Úwaitr•   ©r)   Úrr   r   r   Útest_startup_interactivehook4  s    
ÿ
z/StartupImportTests.test_startup_interactivehookc                 C   s(   t  tjdddg¡ ¡ }|  |d¡ d S )Nró   rˆ   r  z,'__interactivehook__' added in isolated mode)r{   r  r
   r   r  rA   r  r   r   r   Ú%test_startup_interactivehook_isolated9  s    ÿ
z8StartupImportTests.test_startup_interactivehook_isolatedc                 C   s(   t  tjdddg¡ ¡ }|  |d¡ d S )Nró   rˆ   zYimport site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))z6'__interactivehook__' not added by enablerlcompleter()r  r  r   r   r   Ú.test_startup_interactivehook_isolated_explicit?  s    ÿ
zAStartupImportTests.test_startup_interactivehook_isolated_explicitN)r¬   r­   r®   r  r  r  r  r   r   r   r   rò     s   0rò   rz   zonly supported on Windowsc                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú_pthFileTestsTc                 C   sî   dd l }t ¡ }|  tjj|¡ tj 	|tj 
tj¡d ¡}| tj¡}tj 	|tj 
|¡d ¡}t tj|¡ t ||¡ |r–tj |¡d d }ntj |¡d d }t|dƒ&}	|D ]}
t|
|	d qºW d   ƒ n1 sà0    Y  |S )Nr   r6   z._pthrS   r·   )Ú_winapiÚtempfileÚmkdtempr\   rÁ   r   Úrmtreer   r   r/   rå   r
   r   ZGetModuleFileNameZ	dllhandleÚshutilr	   Úsplitextr[   rº   )r)   ÚlinesÚexe_pthr  Ztemp_dirÚexe_fileZdll_src_fileZdll_fileZ	_pth_fileÚfÚliner   r   r   Ú_create_underpth_exeI  s    ,z"_pthFileTests._create_underpth_exec                 C   sD   g }|D ]6}|r|d dkrqt j t j ||¡¡}| |¡ q|S )Nr   ú#)r   r   r2   r/   Úappend)r)   Ú
sys_prefixr   r   r$  Zabs_pathr   r   r   Ú"_calc_sys_path_for_underpth_nosite[  s    z0_pthFileTests._calc_sys_path_for_underpth_nositec                    sÐ   t j t j tj¡¡‰ t j tj¡}dg‡ fdd„tdƒD ƒ¢d‘d‘}|  |¡}|  	t j |¡|¡}t j
 ¡ }d|d< d	 |t  d
¡¡|d
< tj|ddg|dd}| ¡  d¡}|  |d¡ |  ||d¡ d S )Núfake-path-namec                    s   g | ]}ˆ ‘qS r   r   ©r8   Ú_©Zlibpathr   r   r9   i  rZ   z;_pthFileTests.test_underpth_nosite_file.<locals>.<listcomp>râ   rl   ú	# commentúfrom-envÚ
PYTHONPATHú{};{}ÚPATHrˆ   zCimport sys; print("\n".join(sys.path) if sys.flags.no_site else "")Úansi)rŠ   rU   r¹   zsys.flags.no_site was Falseúsys.path is incorrect)r   r   Údirnamer×   Ú__file__r
   r   Úranger%  r)  r   r	   ÚformatÚgetenvr{   Úcheck_outputÚrstriprå   r•   r1   )r)   Ú
exe_prefixZ	pth_linesr"  r   rŠ   ÚoutputZactual_sys_pathr   r-  r   Útest_underpth_nosite_filed  s<    ÿþýü

þ
ÿþýz'_pthFileTests.test_underpth_nosite_filec              
      sÈ   t j t j tj¡¡‰ t j tj¡}|  dg‡ fdd„tdƒD ƒ¢d‘d‘d‘¡}t j |¡}t j	 
¡ }d|d	< d
 |t  d¡¡|d< tj|ddt j |d¡ˆ t j |d¡f g|d}|  |d¡ d S )Nr*  c                    s   g | ]}ˆ ‘qS r   r   r+  r-  r   r   r9   …  rZ   z4_pthFileTests.test_underpth_file.<locals>.<listcomp>râ   rl   r.  úimport siter/  r0  r1  r2  rˆ   ú£import sys; sys.exit(not sys.flags.no_site and %r in sys.path and %r in sys.path and %r not in sys.path and all("\r" not in p and "\n" not in p for p in sys.path))r‰   r4  ©r   r   r5  r×   r6  r
   r   r%  r7  r   r	   r8  r9  r{   rŽ   r/   r•   ©r)   r<  r"  r(  rŠ   r‘   r   r-  r   Útest_underpth_file€  s8    ÿþýüû
ýþÿùz _pthFileTests.test_underpth_filec              
      sÌ   t j t j tj¡¡‰ t j tj¡}| jdg‡ fdd„tdƒD ƒ¢d‘d‘d‘dd	}t j |¡}t j	 
¡ }d
|d< d |t  d¡¡|d< tj|ddt j |d¡ˆ t j |d
¡f g|d}|  |d¡ d S )Nr*  c                    s   g | ]}ˆ ‘qS r   r   r+  r-  r   r   r9   ž  rZ   z8_pthFileTests.test_underpth_dll_file.<locals>.<listcomp>râ   rl   r.  r?  F)r!  r/  r0  r1  r2  rˆ   r@  r‰   r4  rA  rB  r   r-  r   Útest_underpth_dll_file™  s<    ÿþýüûú
ýþÿùz$_pthFileTests.test_underpth_dll_fileN)T)r¬   r­   r®   r%  r)  r>  rC  rD  r   r   r   r   r  F  s
   
	r  Ú__main__),r¯   r   Ztest.supportrÁ   r   r   r   r   r   r   rÌ   r×   r  r   re   r  rt   r{   r
   r$   r  Zurllib.errorræ   Zurllib.requestr   r	   ÚflagsÚno_siter   r   r   r   r   ZTestCaser   r¨   rI   rÀ   rò   r°   r‚   r  r¬   Úmainr   r   r   r   Ú<module>   sH   
  47]Dk
