a
    ze0B                     @   sv   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	 G dd dej
Zedkrre  dS )    N)mock)supportc                   @   s8  e Zd Zd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dd  Zd!d" Zd#d$ Zd%d& Zd'd( Zeejd)v d*d+d, Zeejd-d.d/d0 Z d1d2 Z!d3d4 Z"d5d6 Z#eejd7kd8d9d: Z$d;d< Z%ej&d=d> Z'd?d@ Z(dAS )BPlatformTestc                 C   s   t j  t j  d t _d S N)platformZ_platform_cacheclearZ_sys_version_cache_uname_cacheself r   (/usr/lib/python3.9/test/test_platform.pyclear_caches   s    

zPlatformTest.clear_cachesc                 C   s   t  }d S r   )r   architecturer
   resr   r   r   test_architecture   s    zPlatformTest.test_architecturec                 C   sH   t  ,}d}| |j| |j|  W d    n1 s:0    Y  d S )N)z-cz/import platform; print(platform.architecture()))r   ZPythonSymlinkassertEqualZ	call_realZ	call_link)r
   pycmdr   r   r   test_architecture_via_symlink   s    
z*PlatformTest.test_architecture_via_symlinkc                 C   s$   dD ]}dD ]}t  ||}qqd S )N)FT)r   )r
   Zaliasedterser   r   r   r   test_platform   s    zPlatformTest.test_platformc                 C   s   t  }d S r   )r   systemr   r   r   r   test_system!   s    zPlatformTest.test_systemc                 C   s   t  }d S r   )r   noder   r   r   r   	test_node$   s    zPlatformTest.test_nodec                 C   s   t  }d S r   )r   releaser   r   r   r   test_release'   s    zPlatformTest.test_releasec                 C   s   t  }d S r   )r   versionr   r   r   r   test_version*   s    zPlatformTest.test_versionc                 C   s   t  }d S r   )r   machiner   r   r   r   test_machine-   s    zPlatformTest.test_machinec                 C   s   t  }d S r   )r   	processorr   r   r   r   test_processor0   s    zPlatformTest.test_processorc                 C   s   t j| _t j| _t j| _d S r   )sysr   save_version_gitsave_gitr   save_platformr	   r   r   r   setUp3   s    zPlatformTest.setUpc                 C   s   | j t_| jt_| jt_d S r   )r%   r$   r   r'   r&   r(   r   r	   r   r   r   tearDown8   s    zPlatformTest.tearDownc                 C   s2  dD ]:\}}t |\}}}}}}}	| ||dd|||	f| qdd| jfddddd	d
ddddd| jfdi}
|
 D ]\\}}}}|t_|d u rttdrt`n|t_|d ur|t_ | t 	 |d  | t 
 |d  | t  |d  | t  |d  | t  |d  | t  |d  qtd S )N))zC2.4.3 (#1, Jun 21 2006, 13:54:21) 
[GCC 3.3.4 (pre 3.3.5 20040809)])CPython2.4.3 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-   .NET 2.0.50727.42)z4IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42)r/   z1.0.0r-   r-   r-   r-   r0   )z"2.4.3 (truncation, date, t) 
[GCC])r+   r,   r-   r-   
truncationzdate tGCC)z!2.4.3 (truncation, date, ) 
[GCC]r+   r,   r-   r-   r1   dater2   )z 2.4.3 (truncation, date,) 
[GCC]r3   )z2.4.3 (truncation, date) 
[GCC]r3   )z2.4.3 (truncation, d) 
[GCC])r+   r,   r-   r-   r1   dr2   )z2.4.3 (truncation, ) 
[GCC]r+   r,   r-   r-   r1   r-   r2   )z2.4.3 (truncation,) 
[GCC]r6   )z2.4.3 (truncation) 
[GCC]r6   r-   zX2.6.1 (r261:67515, Dec  6 2008, 15:26:00) 
[GCC 4.0.1 (Apple Computer, Inc. build 5370)])r+   	tags/r26167515)r+   2.6.1r7   r8   )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)r/   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)Nr:   )r/   r9   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))Nr:   )r/   z2.7.4r-   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6107java1.5.0_16)r<   z2.5.0r=   r>   )z
trunk:6107Mar 26 2009r?   z12.5.2 (63378, Mar 26 2009, 18:03:29)
[PyPy 1.0.0])PyPyr=   63378)rA   z2.5.2r=   rB   )rB   r@   r-   r&   r                  )r   Z_sys_versionr   r(   itemsr$   r   hasattrr&   Zpython_implementationZpython_versionZpython_branchZpython_revisionZpython_buildZpython_compiler)r
   inputoutputnamer   branchZrevisionZbuildnoZ	builddateZcompilerZsys_versionsZversion_tagZscmZsys_platforminfor   r   r   test_sys_version=   sL    $
zPlatformTest.test_sys_versionc                 C   s   t t  t  t  }d S r   )r   Zsystem_aliasr   r   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 |j | |d |j | |d	 |j	 | |d
 |j	 | |d |j
 | |d |j
 | t|d d S )Nr   irC   rD   rE   rF   rG      )r   uname
assertTrueanyr   r   r   r   r   r    r"   lenr   r   r   r   
test_uname   s    zPlatformTest.test_unamec                 C   s8   t  }|j|j|j|j|j|jf}| t	|| d S r   )
r   rW   r   r   r   r   r    r"   r   tupler
   r   expectedr   r   r   test_uname_cast_to_tuple   s
    z%PlatformTest.test_uname_cast_to_tuplec                 C   sv   t  }|jdddddd}| |jd | |jd | |jd | |jd | |jd | |j	|j	 d S )Nr   r   r   r   r    )r   r   r   r   r    )
r   rW   _replacer   r   r   r   r   r    r"   )r
   r   newr   r   r   test_uname_replace   s    zPlatformTest.test_uname_replacec                 C   s0   t  }| t|| | t|| d S r   )r   rW   r   copydeepcopy)r
   rW   r   r   r   test_uname_copy   s    zPlatformTest.test_uname_copyc              	   C   sn   t  }ttjd D ]R}| j|d2 t||}t|}| || W d    q1 s^0    Y  qd S )NrC   )protocol)	r   rW   rangepickleHIGHEST_PROTOCOLZsubTestdumpsloadsr   )r
   ZorigprotoZpickledZrestoredr   r   r   test_uname_pickle   s    
zPlatformTest.test_uname_picklec                 C   sD   t  }t|}| |d d  | | |d d |d d  d S )NrG   )r   rW   r\   r   r]   r   r   r   test_uname_slices   s    zPlatformTest.test_uname_slices)win32ZOpenVMSzuname -p not usedc              	   C   sX   z$t jddgdd }t|}W n tt jfy@   d}Y n0 | t j	| d S )NrW   z-pTtextr-   )

subprocesscheck_outputstripr   Z_unknown_as_blankOSErrorCalledProcessErrorr   rW   r"   )r
   Zproc_resexpectr   r   r   test_uname_processor   s    
z!PlatformTest.test_uname_processorwinzwindows only testc                 C   s   zt  z}d|v r|d= d|d< d t_t \}}}}}}| |d d|d< d t_t \}}}}}}| |d W d    n1 s0    Y  W d t_nd t_0 d S )NZPROCESSOR_ARCHITEW6432ZfooZPROCESSOR_ARCHITECTUREZbar)r   ZEnvironmentVarGuardr   r   rW   r   )r
   environr   r   r   r   r    r"   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   Zjava_verr$   rX   allr   r   r   r   test_java_ver   s    
zPlatformTest.test_java_verc                 C   s   t  }d S r   )r   Z	win32_verr   r   r   r   test_win32_ver   s    zPlatformTest.test_win32_verc                 C   s   t  }t  jdkrtjdgdd}| D ]"}|dr.| 	 d } qbq.| 
d| |d 	d	}|	d	}t|t| }|dkr|d
g|  |ddgkr| || | |d d tjdkr| |d d n| |d d d S )NDarwinZsw_versTrp   zProductVersion:rU   z failed to parse sw_vers output: r   .0Z10Z16rC   r-   r-   r-   littlerD   )i386x86_64Zarm64ZPowerPC)r   mac_verrW   r   rr   rs   
splitlines
startswithrt   splitZfailrZ   extendr   r$   	byteorderZassertIn)r
   r   rK   lineZreal_verZresult_listZexpect_listZlen_diffr   r   r   test_mac_ver   s&    


zPlatformTest.test_mac_verdarwinzOSX only testc                 C   s6   t  }|dkr$t }t d ntj|dd d S )Nr   )exitcode)osforkr   r   _exitr   Zwait_process)r
   pidrN   r   r   r   test_mac_ver_with_fork"  s
    z#PlatformTest.test_mac_ver_with_forkc           	   
   C   s  t jtjr,t jtjd r,tjd }n2tjdkrXt jtjsXdd l}|d}ntj}t	| t
j}| t
j| tjdddd | t	 d d	D ]\\}}t|d
&}|d|  |  W d    n1 s0    Y  | tj	|d| qW d    n1 s0    Y  d}t|d
,}|d|d   |d W d    n1 sb0    Y  | tj	||dd d S )Nz.exero   r   z
os.confstrTzmock 1.0)Zcreatereturn_value)r   z1.0))s   __libc_init)libcr-   )s	   GLIBC_2.9)glibcz2.9)s   libc.so.1.2.5)r   z1.2.5)s   libc_pthread.so.1.2.5)r   z1.2.5_pthread)    r;   wbs
   [xxx%sxxx])
executablei @     x
   s"   GLIBC_1.23.4 GLIBC_1.9 GLIBC_1.21 )	chunksize)r   z1.23.4)r   pathisdirr$   r   existsr   _winapiZGetModuleFileNameZlibc_verr   ZTESTFN
addCleanupunlinkr   patchr   openwriteflush)	r
   r   r   filenamedatar^   fpr   fr   r   r   test_libc_ver2  s6    
&&*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   r   Z
assertLess)r
   Vr   r   r   test__comparable_versionb  s@    z%PlatformTest.test__comparable_versionc                 C   s   |  | j d}d}tjjtd|d tjjtd|d~ dD ]h\}}}tjjtd|d< |   | tjdd	| | t | W d    q@1 s0    Y  q@W d    n1 s0    Y  W d    n1 s0    Y  d S )
N)r   hostnamez17.7.0z_Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RELEASE_X86_64r   r   )Z64bitr-   rW   )r   r   ))r   zDarwin-17.7.0zDarwin-17.7.0-x86_64-i386-64bit))z10.13.6r   r   zmacOS-10.13.6zmacOS-10.13.6-x86_64-i386-64bitr   rC   )r   )r   r   r   r   objectr   r   )r
   rW   Zarchr   Zexpected_terser^   r   r   r   
test_macos  s    

zPlatformTest.test_macosN))__name__
__module____qualname__r   r   r   Zskip_unless_symlinkr   r   r   r   r   r   r!   r#   r)   r*   rO   rP   r[   r_   rb   re   rm   rn   unittestZskipIfr$   r   rx   Z
skipUnlessr   r{   r~   r   r   r   r   Zcpython_onlyr   r   r   r   r   r   r      sD   
W

$
0
$r   __main__)r   rc   rh   r   rr   r$   r   r   testr   ZTestCaser   r   mainr   r   r   r   <module>   s      