B
    18™\qB  ã               @   s   d dl 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	m
Z
 G dd„ de jƒZG dd„ de jƒZedkrŒe  ¡  dS )	é    )ÚmockN)Úsupportc               @   s  e Zd Zdd„ Zej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dd„ Zdd„ Ze ej d¡d¡dd „ ƒZd!d"„ Zd#d$„ Zd%d&„ Ze ejd'kd(¡d)d*„ ƒZd+d,„ Zd-d.„ Zejd/d0„ ƒZ d1d2„ Z!d3d4„ Z"d5d6„ Z#d7S )8ÚPlatformTestc             C   s   t  ¡ }d S )N)ÚplatformÚarchitecture)ÚselfÚres© r	   úV/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_platform.pyÚtest_architecture   s    zPlatformTest.test_architecturec          	      sÒ   d }t jdkrndd„ tjD ƒ}d tj t j¡| dd¡¡|d< tj t j¡|d< t	 
d¡rntj tj¡|d	< d‡ fd
d„	}tj t j¡}tj tj¡}t ||¡ zˆ  ||ƒ|||d¡ W d t |¡ X d S )NÚwin32c             S   s   i | ]}t j| | ¡ “qS r	   )ÚosÚenvironÚupper)Ú.0Úkr	   r	   r
   ú
<dictcomp>   s    z>PlatformTest.test_architecture_via_symlink.<locals>.<dictcomp>z{};{}ÚPATHÚ Z
PYTHONHOMETÚ
PYTHONPATHc                sj   | ddg}t j|t jt j|d}| ¡ }|jrftt|d ƒƒ tt|d ƒtjd ˆ  	d 
|j¡¡ |S )Nz-cz/import platform; print(platform.architecture()))ÚstdoutÚstderrÚenvr   é   )Úfilez'unexpected return code: {0} (0x{0:08X}))Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
returncodeÚprintÚreprÚsysr   ÚfailÚformat)Úpythonr   ÚcmdÚpÚr)r   r	   r
   Úget   s    

z7PlatformTest.test_architecture_via_symlink.<locals>.get)r   )N)r"   r   r   r   r$   ÚpathÚdirnameÚ
executabler)   Ú	sysconfigÚis_python_buildÚ__file__ÚrealpathÚabspathr   ÚTESTFNÚsymlinkÚassertEqualÚremove)r   r   r)   ÚrealÚlinkr	   )r   r
   Útest_architecture_via_symlink   s    

z*PlatformTest.test_architecture_via_symlinkc             C   s,   x&dD ]}xdD ]}t   ||¡}qW qW d S )N)FT)r   )r   ÚaliasedÚterser   r	   r	   r
   Útest_platform3   s    

zPlatformTest.test_platformc             C   s   t  ¡ }d S )N)r   Úsystem)r   r   r	   r	   r
   Útest_system8   s    zPlatformTest.test_systemc             C   s   t  ¡ }d S )N)r   Únode)r   r   r	   r	   r
   Ú	test_node;   s    zPlatformTest.test_nodec             C   s   t  ¡ }d S )N)r   Úrelease)r   r   r	   r	   r
   Útest_release>   s    zPlatformTest.test_releasec             C   s   t  ¡ }d S )N)r   Úversion)r   r   r	   r	   r
   Útest_versionA   s    zPlatformTest.test_versionc             C   s   t  ¡ }d S )N)r   Úmachine)r   r   r	   r	   r
   Útest_machineD   s    zPlatformTest.test_machinec             C   s   t  ¡ }d S )N)r   Ú	processor)r   r   r	   r	   r
   Útest_processorG   s    zPlatformTest.test_processorc             C   s   t j| _t j| _t j| _d S )N)r"   rB   Úsave_versionÚ_gitÚsave_gitr   Úsave_platform)r   r	   r	   r
   ÚsetUpJ   s    zPlatformTest.setUpc             C   s   | j t_| jt_| jt_d S )N)rH   r"   rB   rJ   rI   rK   r   )r   r	   r	   r
   ÚtearDownO   s    zPlatformTest.tearDownc             C   s:  xBdD ]:\}}t  |¡\}}}}}}}	|  ||dd|||	f|¡ qW dd| jfddddd	d
ddddd| jfdi}
xÄ|
 ¡ D ]¸\\}}}}|t_|d kr¦ttdƒr¬t`n|t_|d k	rº|t_ |  t  	¡ |d ¡ |  t  
¡ |d ¡ |  t  ¡ |d ¡ |  t  ¡ |d ¡ |  t  ¡ |d ¡ |  t  ¡ |d ¡ qzW d S )N))zC2.4.3 (#1, Jun 21 2006, 13:54:21) 
[GCC 3.3.4 (pre 3.3.5 20040809)])ÚCPythonz2.4.3r   r   Ú1zJun 21 2006 13:54:21zGCC 3.3.4 (pre 3.3.5 20040809))z)IronPython 1.0.60816 on .NET 2.0.50727.42)Ú
IronPythonz	1.0.60816r   r   r   r   z.NET 2.0.50727.42)z4IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42)rP   z1.0.0r   r   r   r   z.NET 2.0.50727.42)z"2.4.3 (truncation, date, t) 
[GCC])rN   z2.4.3r   r   Ú
truncationzdate tÚGCC)z!2.4.3 (truncation, date, ) 
[GCC])rN   z2.4.3r   r   rQ   ÚdaterR   )z 2.4.3 (truncation, date,) 
[GCC])rN   z2.4.3r   r   rQ   rS   rR   )z2.4.3 (truncation, date) 
[GCC])rN   z2.4.3r   r   rQ   rS   rR   )z2.4.3 (truncation, d) 
[GCC])rN   z2.4.3r   r   rQ   ÚdrR   )z2.4.3 (truncation, ) 
[GCC])rN   z2.4.3r   r   rQ   r   rR   )z2.4.3 (truncation,) 
[GCC])rN   z2.4.3r   r   rQ   r   rR   )z2.4.3 (truncation) 
[GCC])rN   z2.4.3r   r   rQ   r   rR   r   zX2.6.1 (r261:67515, Dec  6 2008, 15:26:00) 
[GCC 4.0.1 (Apple Computer, Inc. build 5370)])rN   z	tags/r261Ú67515)rN   z2.6.1z	tags/r261rU   )z
r261:67515zDec  6 2008 15:26:00z+GCC 4.0.1 (Apple Computer, Inc. build 5370))z/IronPython 2.0 (2.0.0.0) on .NET 2.0.50727.3053NÚcli)rP   z2.0.0r   r   )r   r   z.NET 2.0.50727.3053)z=2.6.1 (IronPython 2.6.1 (2.6.10920.0) on .NET 2.0.50727.1433)NrV   )rP   z2.6.1r   r   )r   r   z.NET 2.0.50727.1433)z@2.7.4 (IronPython 2.7.4 (2.7.0.40) on Mono 4.0.30319.1 (32-bit))NrV   )rP   z2.7.4r   r   )r   r   zMono 4.0.30319.1 (32-bit))z^2.5 (trunk:6107, Mar 26 2009, 13:02:18) 
[Java HotSpot(TM) Client VM ("Apple Computer, Inc.")])ÚJythonÚtrunkÚ6107zjava1.5.0_16)rW   z2.5.0rX   rY   )z
trunk:6107zMar 26 2009zjava1.5.0_16z12.5.2 (63378, Mar 26 2009, 18:03:29)
[PyPy 1.0.0])ÚPyPyrX   Ú63378)rZ   z2.5.2rX   r[   )r[   zMar 26 2009r   rI   r   r   é   é   é   é   )r   Ú_sys_versionr4   rK   Úitemsr"   rB   ÚhasattrrI   Úpython_implementationÚpython_versionÚpython_branchÚpython_revisionÚpython_buildÚpython_compiler)r   ÚinputÚoutputÚnamerB   ÚbranchÚrevisionÚbuildnoÚ	builddateÚcompilerZsys_versionsZversion_tagZscmZsys_platformÚinfor	   r	   r
   Útest_sys_versionT   sD    
zPlatformTest.test_sys_versionc             C   s   t  t  ¡ t  ¡ t  ¡ ¡}d S )N)r   Úsystem_aliasr<   r@   rB   )r   r   r	   r	   r
   Útest_system_alias«   s    zPlatformTest.test_system_aliasc             C   s†   t  ¡ }|  t|ƒ¡ |  |d |j¡ |  |d |j¡ |  |d |j¡ |  |d |j¡ |  |d |j	¡ |  |d |j
¡ d S )Nr   r   r\   r]   r^   r_   )r   ÚunameÚ
assertTrueÚanyr4   r<   r>   r@   rB   rD   rF   )r   r   r	   r	   r
   Ú
test_uname²   s    zPlatformTest.test_unameÚwinzwindows only testc          	   C   s   z‚t  ¡ p}d|kr|d= d|d< d t_t ¡ \}}}}}}|  |d¡ d|d< d t_t ¡ \}}}}}}|  |d¡ W d Q R X W d d t_X d S )NÚPROCESSOR_ARCHITEW6432ZfooÚPROCESSOR_ARCHITECTUREZbar)r   ÚEnvironmentVarGuardr   Ú_uname_cacheru   r4   )r   r   r<   r>   r@   rB   rD   rF   r	   r	   r
   Útest_uname_win32_ARCHITEW6432¼   s    
z*PlatformTest.test_uname_win32_ARCHITEW6432c             C   s$   t  ¡ }tj dkr |  t|ƒ¡ d S )NÚjava)r   Újava_verr"   rv   Úall)r   r   r	   r	   r
   Útest_java_verÑ   s    
zPlatformTest.test_java_verc             C   s   t  ¡ }d S )N)r   Ú	win32_ver)r   r   r	   r	   r
   Útest_win32_verÖ   s    zPlatformTest.test_win32_verc             C   sò   t  ¡ }t  ¡ jdkrît dd¡}d }x(|D ] }| d¡r,| ¡  ¡ d }P q,W | 	¡  |  
|d k¡ |d  d¡}| d¡}t|ƒt|ƒ }|dkr¦| dg| ¡ |  ||¡ |  |d	 d
¡ tjdkrÞ|  |d d¡ n|  |d d¡ d S )NZDarwinZsw_versr(   zProductVersion:éÿÿÿÿr   Ú.Ú0r   )r   r   r   Úlittler\   )Zi386Zx86_64ÚPowerPC)r   Úmac_verru   r<   r   ÚpopenÚ
startswithÚstripÚsplitÚcloseÚassertFalseÚlenÚextendr4   r"   Ú	byteorderÚassertIn)r   r   ÚfdZreal_verÚlnZresult_listZexpect_listZlen_diffr	   r	   r
   Útest_mac_verÙ   s(    



zPlatformTest.test_mac_verÚdarwinzOSX only testc             C   sP   t  ¡ }|dkr$t ¡ }t  d¡ n(t  |d¡\}}|  ||¡ |  |d¡ d S )Nr   )r   Úforkr   rŠ   Ú_exitÚwaitpidr4   )r   Úpidrq   ZcpidÚstsr	   r	   r
   Útest_mac_ver_with_forkú   s    z#PlatformTest.test_mac_ver_with_forkc          	   C   s.   t  ¡  t  ddt¡ t ¡ }W d Q R X d S )NÚignorez?dist\(\) and linux_distribution\(\) functions are deprecated .*)ÚwarningsÚcatch_warningsÚfilterwarningsÚDeprecationWarningr   Údist)r   r   r	   r	   r
   Ú	test_dist  s    
zPlatformTest.test_distc          	   C   s”   t j tj¡r,t j tjd ¡r,tjd }ntj}t |¡}|  t	j
t	j¡ tt	jdƒ}| dd ¡ | d¡ W d Q R X |  t t	j¡d¡ d S )Nz.exeÚwbó   xiö?  s"   GLIBC_1.23.4 GLIBC_1.9 GLIBC_1.21 )Úglibcz1.23.4)r   r*   Úisdirr"   r,   Úexistsr   Úlibc_verÚ
addCleanupr   Úunlinkr2   ÚopenÚwriter4   )r   r,   r   Úfr	   r	   r
   Útest_libc_ver  s    
zPlatformTest.test_libc_verc             C   s|  ddl m} |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|d	ƒ¡ |  |dƒ|d
ƒ¡ |  |d	ƒ|dƒ¡ |  |d
ƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |dƒ|dƒ¡ |  |d ƒ|d!ƒ¡ |  |d"ƒ|d#ƒ¡ |  |d"ƒ|d ƒ¡ |  |d!ƒ|d#ƒ¡ |  |d ƒ|d#ƒ¡ |  |d$ƒ|d%ƒ¡ |  |d&ƒ|d'ƒ¡ |  |d(ƒ|d)ƒ¡ d S )*Nr   )Ú_comparable_versionz1.2.3z1.2.10z1.2.3.4z1_2-3+4z1.2spamz1.2devz1.2alphaz1.2az1.2betaz1.2bz1.2cz1.2RCz1.2rcz1.2.0z1.2plz1.2pz1.5.1z1.5.2b2z3.10aZ161z8.02z3.4jz
1996.07.12z3.1.1.6z3.2.pl0Z2g6Z11gz0.9z2.2z1.2z1.2.1z1.1z1.2.2z0.4z0.4.0z1.13++z5.5.kwz0.960923z	2.2beta29)r   r²   r4   Ú
assertLess)r   ÚVr	   r	   r
   Útest__comparable_version&  s@    z%PlatformTest.test__comparable_versionc             C   s(   x"dD ]\}}|   t |¡|¡ qW d S )N)
)zSuSE Linux 9.3 (x86-64))zSuSE Linux z9.3zx86-64)zSUSE LINUX 10.1 (X86-64))zSUSE LINUX z10.1zX86-64)zSUSE LINUX 10.1 (i586))zSUSE LINUX z10.1Zi586)z Fedora Core release 5 (Bordeaux))zFedora CoreÚ5ZBordeaux)z"Red Hat Linux release 8.0 (Psyche))zRed Hat Linuxz8.0ZPsyche)z Red Hat Linux release 9 (Shrike))zRed Hat LinuxÚ9ZShrike)z+Red Hat Enterprise Linux release 4 (Nahant))zRed Hat Enterprise LinuxÚ4ZNahant)zCentOS release 4)ZCentOSr¸   N)zRocks release 4.2.1 (Cydonia))ZRocksz4.2.1ZCydonia)r   )r   r   r   )r4   r   Ú_parse_release_file)r   ri   rj   r	   r	   r
   Útest_parse_release_fileJ  s    z$PlatformTest.test_parse_release_filec       	   
   C   s  t jdk}|rd t j¡}nd t j¡}t ¡ H t dt¡ t |¡&}| 	¡  
¡ }| ¡  |  |d¡ W d Q R X W d Q R X d}|rŒd}nd}| t j¡}t ¡ n t dt¡ t |d	¡J}| |¡}| ¡ }|  |¡ tjd
krì|}n|d? }|  |t|ƒ¡ W d Q R X W d Q R X d S )Nr   z"{}" -c "print('Hello')"z'{}' -c 'print("Hello")'rŸ   ZHelloZplopz<"{}" -c "import sys; data=sys.stdin.read(); exit(len(data))"z<'{}' -c 'import sys; data=sys.stdin.read(); exit(len(data))'ÚwÚnté   )r"   r   r$   r,   r    r¡   Úsimplefilterr£   r‹   Úreadr   r   r4   r¯   ÚassertIsNotNoner   rk   r‘   )	r   Z	mswindowsÚcommandr   ZhelloÚdataÚstdinÚretr   r	   r	   r
   Ú
test_popen[  s2    

 



zPlatformTest.test_popenc             C   s¶   t  ¡ ¤}tj |d¡}t|ddd}| d¡ W d Q R X t d|¡B t	 
¡ " t	 ddt¡ t ¡ \}}}W d Q R X |  |d	¡ W d Q R X |  |d
¡ |  |d¡ W d Q R X d S )Nzfedora-releaser»   zutf-8)Úencodingu)   Fedora release 19 (SchrÃ¶dingerâ€™s Cat)
zplatform._UNIXCONFDIRrŸ   z?dist\(\) and linux_distribution\(\) functions are deprecated .*ZFedoraZ19u   SchrÃ¶dingerâ€™s Cat)ÚtempfileÚTemporaryDirectoryr   r*   Újoinr®   r¯   r   Úpatchr    r¡   r¢   r£   r   Úlinux_distributionr4   )r   ÚtempdirÚfilenamer°   ÚdistnamerB   Údistidr	   r	   r
   Ú test_linux_distribution_encoding{  s    

z-PlatformTest.test_linux_distribution_encodingN)$Ú__name__Ú
__module__Ú__qualname__r   r   Úskip_unless_symlinkr8   r;   r=   r?   rA   rC   rE   rG   rL   rM   rr   rt   rx   ÚunittestÚ
skipUnlessr"   r   rŒ   r~   r‚   r„   r—   rž   r¥   r±   Úcpython_onlyrµ   rº   rÅ   rÐ   r	   r	   r	   r
   r      s2   "W
!
$ r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚDeprecationTestc          	   C   s4   |   t¡}t ¡  W d Q R X |  t|jƒd¡ d S )NzFdist() and linux_distribution() functions are deprecated in Python 3.5)ÚassertWarnsr£   r   r¤   r4   ÚstrÚwarning)r   Úcmr	   r	   r
   Útest_dist_deprecation“  s    z%DeprecationTest.test_dist_deprecationc          	   C   s4   |   t¡}t ¡  W d Q R X |  t|jƒd¡ d S )NzFdist() and linux_distribution() functions are deprecated in Python 3.5)rÙ   r£   r   rË   r4   rÚ   rÛ   )r   rÜ   r	   r	   r
   Ú#test_linux_distribution_deprecationš  s    z3DeprecationTest.test_linux_distribution_deprecationN)rÑ   rÒ   rÓ   rÝ   rÞ   r	   r	   r	   r
   rØ   ‘  s   rØ   Ú__main__)rÕ   r   r   r   r   r"   r-   rÇ   r    Útestr   ÚTestCaser   rØ   rÑ   Úmainr	   r	   r	   r
   Ú<module>   s       