a
    äzeD  ã                   @   sØ   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mZm	Z	m
Z
mZmZmZmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZmZ d dlZG dd„ de jƒZG dd„ de jƒZed	krÔe   ¡  dS )
é    N)Úcopy)Úimport_moduleÚTESTFNÚunlinkÚcheck_warningsÚcaptured_stdoutÚskip_unless_symlinkÚ
change_cwdÚPythonSymlink)Ú	get_pathsÚget_platformÚget_config_varsÚget_pathÚget_path_namesÚ_INSTALL_SCHEMESÚ_get_default_schemeÚ_expand_varsÚget_scheme_namesÚget_config_varÚ_mainc                       st  e Zd Z‡ fdd„Z‡ fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdd„ Zdd„ Ze ejdkd ¡d!d"„ ƒZe ejd#kd$¡d%d&„ ƒZd'd(„ Zd)d*„ Ze e d+¡d,u d-¡d.d/„ ƒZe e d+¡d,u d-¡d0d1„ ƒZe e d+¡d,u d-¡d2d3„ ƒZ e ejd4koDe!ej"d5ƒd6¡d7d8„ ƒZ#e ejd#kd9¡d:d;„ ƒZ$‡  Z%S )<ÚTestSysConfigc                    sì   t t| ƒ ¡  tjd d … | _ttdƒr<tj| _t ¡ | _	nd | _|  
d¡ | jt_tj| _tj| _tj| _tj| _tjj| _tjj| _tjj| _tjttjƒf| _g | _g | _dD ]2}|tjv rÚ| j |tj| f¡ q´| j |¡ q´d S )NÚuname)Ú r   r   r   r   )ÚMACOSX_DEPLOYMENT_TARGETÚPATH)Úsuperr   ÚsetUpÚsysÚpathÚsys_pathÚhasattrÚosr   Ú_unameÚ
_set_unameÚ
_get_unameÚnameÚplatformÚversionÚsepÚjoinÚisabsÚ
splitdriveÚ	sysconfigÚ_CONFIG_VARSr   Ú_config_varsÚ_added_envvarsÚ_changed_envvarsÚenvironÚappend)ÚselfÚvar©Ú	__class__© ú)/usr/lib/python3.9/test/test_sysconfig.pyr      s,    





zTestSysConfig.setUpc                    sÜ   | j tjd d …< |  ¡  | jd ur,| jt_nt`| jt_| jt_| jt_| j	t_	| j
tj_
| jtj_| jtj_| jd t_tj ¡  tj | jd ¡ | jD ]\}}|tj|< qœ| jD ]}tj |d ¡ q¶tt| ƒ ¡  d S )Nr   é   )r   r   r   Ú_cleanup_testfnr   r!   r%   r&   r'   r(   r)   r*   r+   r.   r,   r-   ÚclearÚupdater0   r1   r/   Úpopr   r   ÚtearDown)r3   r4   Úvaluer5   r7   r8   r>   1   s(    






zTestSysConfig.tearDownc                 C   s   t  |¡| _d S ©N)r!   Úuname_resultr"   )r3   r   r7   r7   r8   r#   I   s    zTestSysConfig._set_unamec                 C   s   | j S r@   )r"   ©r3   r7   r7   r8   r$   L   s    zTestSysConfig._get_unamec                 C   s6   t }tj |¡rt |¡ ntj |¡r2t |¡ d S r@   )r   r!   r   ÚisfileÚremoveÚisdirÚshutilÚrmtree)r3   r   r7   r7   r8   r:   O   s
    zTestSysConfig._cleanup_testfnc                 C   s   |   tƒ tj¡ d S r@   )ÚassertEqualr   r,   Z_SCHEME_KEYSrB   r7   r7   r8   Útest_get_path_namesV   s    z!TestSysConfig.test_get_path_namesc                 C   s>   t ƒ }tƒ }t|d ƒ}t| ¡ ƒ}t| ¡ ƒ}|  ||¡ d S r@   )r   r   r   ÚsortedÚitemsrH   )r3   ÚschemeZdefault_schemeÚwantedr7   r7   r8   Útest_get_pathsY   s    
zTestSysConfig.test_get_pathsc                 C   s&   t D ]}t | D ]}t||ƒ}qqd S r@   )r   r   )r3   rL   r%   Úresr7   r7   r8   Útest_get_patha   s    zTestSysConfig.test_get_pathc                 C   s    t ƒ }|  |t¡ |  |¡ d S r@   )r   ZassertIsInstanceÚdictÚ
assertTrue)r3   Zcvarsr7   r7   r8   Útest_get_config_varsg   s    z"TestSysConfig.test_get_config_varsc                 C   sN  dt _dt_dt_|  tƒ d¡ dt _dt_dt_|  tƒ d¡ dt _dt_dt_|  d	¡ t 	t
ƒ ¡ d
t
ƒ d< dt
ƒ d< tj}z2dt_|  tƒ d¡ dt_|  tƒ d¡ W |t_n|t_0 |  d¡ t 	t
ƒ ¡ d
t
ƒ d< dt
ƒ d< tj}z2dt_|  tƒ d¡ dt_|  tƒ d¡ W |t_n|t_0 t 	t
ƒ ¡ dt
ƒ d< dt
ƒ d< |  tƒ d¡ t 	t
ƒ ¡ dt
ƒ d< |  tƒ d¡ t 	t
ƒ ¡ dt
ƒ d< |  tƒ d¡ t 	t
ƒ ¡ dt
ƒ d< |  tƒ d¡ t 	t
ƒ ¡ dt
ƒ d< |  tƒ d¡ d D ]2}t 	t
ƒ ¡ d!| t
ƒ d< |  tƒ d"| ¡ qìdt _d#t_d$t_|  d%¡ |  tƒ d&¡ d S )'NÚntz>2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)]Úwin32z>2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Amd64)]z	win-amd64ÚposixzU2.5 (r25:51918, Sep 19 2006, 08:49:13) 
[GCC 4.0.1 (Apple Computer, Inc. build 5341)]Údarwin)ÚDarwinÚmacziadeú8.11.1ú]Darwin Kernel Version 8.11.1: Wed Oct 10 18:23:28 PDT 2007; root:xnu-792.25.20~1/RELEASE_I386ZPowerPCz10.3r   zF-fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypesZCFLAGSiÿÿÿzmacosx-10.3-ppcl   ÿÿÿÿ zmacosx-10.3-ppc64)rX   rY   rZ   r[   Úi386zmacosx-10.3-i386zmacosx-10.3-x86_64z10.4zy-arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-fatz|-arch x86_64 -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-intelz†-arch x86_64 -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-fat3z’-arch ppc64 -arch x86_64 -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-universalz}-arch x86_64 -arch ppc64 -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-fat64)Zppcr\   Zx86_64Zppc64zm-arch %s -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -O3zmacosx-10.4-%szV2.3.5 (#1, Jul  4 2007, 17:28:59) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)]Zlinux2)ZLinuxZaglaez2.6.21.1dedibox-r7z #1 Mon Apr 30 17:25:38 CEST 2007Zi686z
linux-i686)r!   r%   r   r'   r&   rH   r   r#   Ú_osx_supportZ_remove_original_valuesr   Úmaxsize)r3   ZmaxintZarchr7   r7   r8   Útest_get_platforml   sx    











ý

zTestSysConfig.test_get_platformc                 C   s    t  ¡ }|  tj |¡|¡ d S r@   )r,   Zget_config_h_filenamerR   r!   r   rC   )r3   Zconfig_hr7   r7   r8   Útest_get_config_h_filenameâ   s    z(TestSysConfig.test_get_config_h_filenamec                 C   s   d}|   tƒ |¡ d S )N)rT   Znt_userZosx_framework_userZ
posix_homeÚposix_prefixÚ
posix_user)rH   r   )r3   rM   r7   r7   r8   Útest_get_scheme_namesæ   s    z#TestSysConfig.test_get_scheme_namesc                 C   sF   t ƒ ,}d}|  |j|Ž |j|Ž ¡ W d   ƒ n1 s80    Y  d S )N)ú-cú1import sysconfig; print(sysconfig.get_platform()))r
   rH   Z	call_realZ	call_link)r3   ÚpyÚcmdr7   r7   r8   Útest_symlinkë   s    zTestSysConfig.test_symlinkc              	   C   s¦   t dƒ}t dƒ}tjtjk}dD ]€}t|dƒ}|rT| tjtj¡}| tjtj¡}n,tjtjkr€| tjtj¡}| tjtj¡}t|dƒ}|  || ||d¡¡ q d S )NÚbaseÚuserbase)ZstdlibZ
platstdlibZpurelibZplatlibra   rb   r9   )	r   r   Úbase_prefixÚbase_exec_prefixr   ÚreplaceÚexec_prefixÚprefixrH   )r3   ri   ÚuserZadaptr%   Zglobal_pathZ	user_pathr7   r7   r8   Útest_user_similarñ   s    

zTestSysConfig.test_user_similarc                 C   sL   t ƒ }tƒ  W d   ƒ n1 s"0    Y  |  t| ¡  d¡ƒdk¡ d S )NÚ
r   )r   r   rR   ÚlenÚgetvalueÚsplit)r3   Úoutputr7   r7   r8   Ú	test_main  s    $zTestSysConfig.test_mainrU   zDoes not apply to Windowsc                 C   s$   t  d¡}t  d¡}|  ||¡ d S )NZLDFLAGSZLDSHARED)r,   r   ZassertIn)r3   ZldflagsZldsharedr7   r7   r8   Útest_ldshared_value  s    

z!TestSysConfig.test_ldshared_valuerW   ztest only relevant on MacOSXc                 C   sæ   t  ¡ }tj ¡ }d|v r |d= tjtjddgtj	tj
|d}| ¡ d  ¡ }| d¡}| ¡ }|  |d¡ |  ||¡ tj ¡ }d|d< tjtjddgtj	tj
|d}| ¡ d  ¡ }| d¡}| ¡ }|  |d¡ |  ||¡ d S )Nr   rd   re   )ÚstdoutÚstderrÚenvr   zutf-8z10.1)r,   r   r!   r1   r   Ú
subprocessÚPopenr   Ú
executableÚPIPEÚDEVNULLÚcommunicateÚstripÚdecodeÚwaitrH   )r3   Zmy_platformr{   ÚpZtest_platformÚstatusr7   r7   r8   Útest_platform_in_subprocess  s@    
þú

þú
z)TestSysConfig.test_platform_in_subprocessc                 C   s¤   t  d¡}|  tj |¡|¡ |  tj |¡|¡ t jrntj |dd¡}|  tj 	|¡|¡ |  t  
|¡¡ n2tjdkr tj t  ¡ ¡}tj |¡}|  ||¡ d S )NÚsrcdirZIncludezPython.hrV   )r,   r   rR   r!   r   r*   rE   Z_PYTHON_BUILDr)   ÚexistsZ_is_python_source_dirr%   ÚdirnameÚget_makefile_filenameÚrealpathrH   )r3   rˆ   ZPython_hZmakefile_dirr7   r7   r8   Útest_srcdir?  s    

zTestSysConfig.test_srcdirc                 C   sN   t  d¡}ttjƒ t  d¡}W d   ƒ n1 s40    Y  |  ||¡ d S )Nrˆ   )r,   r   r	   r!   ÚpardirrH   )r3   rˆ   Zsrcdir2r7   r7   r8   Útest_srcdir_independent_of_cwdR  s    
(z,TestSysConfig.test_srcdir_independent_of_cwdÚ
EXT_SUFFIXNz!EXT_SUFFIX required for this testc                 C   s   |   ttjd¡ d S )NÚSO)ZassertWarnsÚDeprecationWarningr,   r   rB   r7   r7   r8   Útest_SO_deprecationZ  s    ÿz!TestSysConfig.test_SO_deprecationc                 C   sH   t dtfƒ( |  t d¡t d¡¡ W d   ƒ n1 s:0    Y  d S )Nr   r‘   r   )r   r’   rH   r,   r   rB   r7   r7   r8   Útest_SO_value`  s    ÿzTestSysConfig.test_SO_valuec                 C   sN   dd l }t ¡ }|  |d ¡ |  |d |d ¡ |  |d | ¡ d ¡ d S )Nr   r‘   r   )Ú_impr,   r   ZassertIsNotNonerH   Úextension_suffixes)r3   r•   Úvarsr7   r7   r8   Útest_EXT_SUFFIX_in_varsg  s
    z%TestSysConfig.test_EXT_SUFFIX_in_varsÚlinuxÚ
_multiarchzmultiarch-specific testc                 C   s˜   t dƒ}dd l}dd l}| ¡ }t d¡}| d|¡rF|  d|v |¡ | d|¡r”| | 	¡ ¡dkr‚|  | 
d¡pz| 
d	¡|¡ n|  | 
d
¡|¡ d S )NÚctypesr   r   z)(aarch64|arm|mips|ppc|powerpc|s390|sparc)r™   z(i[3-6]86|x86_64)$é   zi386-linux-gnu.sozx86_64-linux-gnux32.sozx86_64-linux-gnu.so)r   r&   ÚreÚmachiner,   r   ÚmatchrR   ZsizeofZc_char_pÚendswith)r3   r›   r&   r   rž   Úsuffixr7   r7   r8   Útest_triplet_in_ext_suffixp  s    
þz(TestSysConfig.test_triplet_in_ext_suffixzOS X-specific testc                 C   s    t  d¡}|  | d¡|¡ d S )Nr   z
-darwin.so)r,   r   rR   r    )r3   r¡   r7   r7   r8   Útest_osx_ext_suffix‚  s    
z!TestSysConfig.test_osx_ext_suffix)&Ú__name__Ú
__module__Ú__qualname__r   r>   r#   r$   r:   rI   rN   rP   rS   r_   r`   rc   r   rh   rq   rw   ÚunittestÚskipIfr   r&   rx   Z
skipUnlessr‡   r   r   r,   r   r“   r”   r˜   r    Úimplementationr¢   r£   Ú__classcell__r7   r7   r5   r8   r      sR   v


*ÿ
ÿ
ÿ

þ
r   c                   @   s0   e Zd Ze ej d¡d¡dd„ ƒZdd„ Z	dS )ÚMakefileTestsÚwinzTest is not Windows compatiblec                 C   s    t  ¡ }|  tj |¡|¡ d S r@   )r,   r‹   rR   r!   r   rC   )r3   Úmakefiler7   r7   r8   Útest_get_makefile_filename‰  s    z(MakefileTests.test_get_makefile_filenamec              
   C   s¦   |   tt¡ ttdƒX}td|d td|d td|d td|d td|d td|d W d   ƒ n1 st0    Y  t t¡}|  |d	d
dddddœ¡ d S )NÚwzvar1=a$(VAR2))ÚfilezVAR2=b$(var3)zvar3=42zvar4=$/invalidzvar5=dollar$$5zAvar6=${var3}/lib/python3.5/config-$(VAR2)$(var5)-x86_64-linux-gnuZab42Zb42é*   z	$/invalidzdollar$5z442/lib/python3.5/config-b42dollar$5-x86_64-linux-gnu)Zvar1ZVAR2Zvar3Zvar4Zvar5Zvar6)Z
addCleanupr   r   ÚopenÚprintr,   Z_parse_makefilerH   )r3   r­   r—   r7   r7   r8   Útest_parse_makefile  s&    ÿ$
úz!MakefileTests.test_parse_makefileN)
r¤   r¥   r¦   r§   r¨   r   r&   Ú
startswithr®   r´   r7   r7   r7   r8   r«   ‡  s
   ÿ
r«   Ú__main__)!r§   r   r!   r|   rF   r   Ztest.supportr   r   r   r   r   r   r	   r
   r,   r   r   r   r   r   r   r   r   r   r   r   r]   ZTestCaser   r«   r¤   Úmainr7   r7   r7   r8   Ú<module>   s   (4  v