o
    HXhO                     @   s   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	 d dl
mZ dZdZdZG dd	 d	ejZed
krGe  dS dS )    N)mock)support)	os_helpera  NAME=Fedora
VERSION="32 (Thirty Two)"
ID=fedora
VERSION_ID=32
VERSION_CODENAME=""
PLATFORM_ID="platform:f32"
PRETTY_NAME="Fedora 32 (Thirty Two)"
ANSI_COLOR="0;34"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:32"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f32/system-administrators-guide/"
SUPPORT_URL="https://fedoraproject.org/wiki/Communicating_and_getting_help"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=32
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=32
PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
a~  NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
a  
# test data
ID_LIKE="egg spam viking"
EMPTY=
# comments and empty lines are ignored

SINGLE_QUOTE='single'
EMPTY_SINGLE=''
DOUBLE_QUOTE="double"
EMPTY_DOUBLE=""
QUOTES="double\'s"
SPECIALS="\$\`\\\'\""
# invalid lines
=invalid
=
INVALID
IN-VALID=value
IN VALID=value
c                   @   sX  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d)d* Zd+d, Zeejd-v d.d/d0 Ze ej!d1d2d3d4 Z"d5d6 Z#d7d8 Z$d9d: Z%e ejd;kd<d=d> Z&d?d@ Z'e(j)dAdB Z*dCdD Z+dEdF Z,dGdH Z-dIS )JPlatformTestc                 C   s$   t j  t j  d t _d t _d S N)platformZ_platform_cacheclearZ_sys_version_cache_uname_cacheZ_os_release_cacheself r   </opt/python-3.10.19/usr/lib/python3.10/test/test_platform.pyclear_cachesH   s   


zPlatformTest.clear_cachesc                 C      t  }d S r   )r   architecturer   resr   r   r   test_architectureN      zPlatformTest.test_architecturec                 C   sJ   t  }d}| |j| |j|  W d    d S 1 sw   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_symlinkQ   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_platformW   s
   zPlatformTest.test_platformc                 C   r   r   )r   systemr   r   r   r   test_system\   r   zPlatformTest.test_systemc                 C   r   r   )r   noder   r   r   r   	test_node_   r   zPlatformTest.test_nodec                 C   r   r   )r   releaser   r   r   r   test_releaseb   r   zPlatformTest.test_releasec                 C   r   r   )r   versionr   r   r   r   test_versione   r   zPlatformTest.test_versionc                 C   r   r   )r   machiner   r   r   r   test_machineh   r   zPlatformTest.test_machinec                 C   r   r   )r   	processorr   r   r   r   test_processork   r   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   setUpn      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   tearDowns   r-   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 rPttdrOt`n|t_|d urZ|t_ | t 	 |d  | t 
 |d  | t  |d  | t  |d  | t  |d  | t  |d  q:d 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 r1   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.60816r1   r1   r1   r1   .NET 2.0.50727.42)z4IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42)r3   z1.0.0r1   r1   r1   r1   r4   )z"2.4.3 (truncation, date, t) 
[GCC])r/   r0   r1   r1   
truncationzdate tGCC)z!2.4.3 (truncation, date, ) 
[GCC]r/   r0   r1   r1   r5   dater6   )z 2.4.3 (truncation, date,) 
[GCC]r7   )z2.4.3 (truncation, date) 
[GCC]r7   )z2.4.3 (truncation, d) 
[GCC])r/   r0   r1   r1   r5   dr6   )z2.4.3 (truncation, ) 
[GCC]r/   r0   r1   r1   r5   r1   r6   )z2.4.3 (truncation,) 
[GCC]r:   )z2.4.3 (truncation) 
[GCC]r:   r1   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.1r;   r<   )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)r3   z2.0.0r1   r1   r1   r1   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>   )r3   r=   r1   r1   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>   )r3   z2.7.4r1   r1   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.0rA   rB   )z
trunk:6107Mar 26 2009rC   z12.5.2 (63378, Mar 26 2009, 18:03:29)
[PyPy 1.0.0])PyPyrA   63378)rE   z2.5.2rA   rF   )rF   rD   r1   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_versionx   sP   $
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   irG   rH   rI   rJ   rK      )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   r[   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   r[   _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   r[   r   copydeepcopy)r   r[   r   r   r   test_uname_copy   s   zPlatformTest.test_uname_copyc              	   C   sn   t  }ttjd D ])}| j|d t||}t|}| || W d    n1 s/w   Y  qd S )NrG   )protocol)	r   r[   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 )NrK   )r   r[   r`   r   ra   r   r   r   test_uname_slices	  s    zPlatformTest.test_uname_slicesc                 C   s   |  dt j d S )Nr%   )assertInr   r[   _fieldsr
   r   r   r   test_uname_fields  s   zPlatformTest.test_uname_fieldsc                 C   s,   t   }| t|d | d| d S )NrZ   r%   )r   r[   _asdictr   r^   rs   r   r   r   r   test_uname_asdict  s   zPlatformTest.test_uname_asdict)win32ZOpenVMSzuname -p not usedc              	   C   sZ   	 zt jddgdd }t|}W n tt jfy!   d}Y nw | t j	| d S )Nr[   z-pTtextr1   )

subprocesscheck_outputstripr   Z_unknown_as_blankOSErrorCalledProcessErrorr   r[   r%   )r   Zproc_resexpectr   r   r   test_uname_processor  s   z!PlatformTest.test_uname_processorwinzwindows only testc                 C   s   zUt  =}d|v r|d= d|d< d t_t \}}}}}}| |d d|d< d t_t \}}}}}}| |d W d    n1 sEw   Y  W d t_d S W d t_d S d t_w )NZPROCESSOR_ARCHITEW6432ZfooZPROCESSOR_ARCHITECTUREZbar)r   ZEnvironmentVarGuardr   r	   r[   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 d S )Njava)r   Zjava_verr'   r\   allr   r   r   r   test_java_ver9  s   
zPlatformTest.test_java_verc                 C   r   r   )r   Z	win32_verr   r   r   r   test_win32_ver>  r   zPlatformTest.test_win32_verc                 C   s   t  }t  jdkr~tjdgdd}| D ]}|dr(| 	 d } n	q| 
d| |d 	d	}|	d	}t|t| }|dkrQ|d
g|  |ddgkr]| || | |d d tjdkrt| |d d d S | |d d d S d S )NDarwinZsw_versTry   zProductVersion:rY   z failed to parse sw_vers output: r   .0Z10Z16rG   r1   r1   r1   littlerH   )i386x86_64Zarm64ZPowerPC)r   mac_verr[   r   r{   r|   
splitlines
startswithr}   splitZfailr^   extendr   r'   	byteorderrs   )r   r   rO   lineZreal_verZresult_listZexpect_listZlen_diffr   r   r   test_mac_verA  s*   


zPlatformTest.test_mac_verdarwinzOSX only testc                 C   s8   t  }|dkrt }t d d S tj|dd d S )Nr   )exitcode)osforkr   r   _exitr   Zwait_process)r   pidrR   r   r   r   test_mac_ver_with_forke  s
   z#PlatformTest.test_mac_ver_with_forkc           	   
   C   s  t jtjrt jtjd rtjd }ntjdkr,t jtjs,dd l}|d}ntj}t	| t
j}| t
j| tjddddA | t	 d d	D ].\}}t|d
}|d|  |  W d    n1 spw   Y  | tj	|d| qQW d    n1 sw   Y  d}t|d
}|d|d   |d W d    n1 sw   Y  | tj	||dd d S )Nz.exerx   r   z
os.confstrTzmock 1.0)Zcreatereturn_value)r   z1.0))s   __libc_init)libcr1   )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datarb   fpr   fr   r   r   test_libc_veru  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   r   Z
assertLess)r   Vr   r   r   test__comparable_version  s@   z%PlatformTest.test__comparable_versionc                 C   s   |  | j d}d}tjjtd|da tjjtd|d? dD ]4\}}}tjjtd|d |   | tjdd	| | t | W d    n1 sOw   Y  q W d    n1 s_w   Y  W d    d S W d    d S 1 sww   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64bitr1   r[   )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   rG   )r   )r   r   r   r   objectr   r   )r   r[   Zarchr   Zexpected_terserb   r   r   r   
test_macos  s"   

PzPlatformTest.test_macosc                 C   s   |  | j |   tdd tjD r2t }| d| | d| d|d< | dt  d S | t	 t  W d    d S 1 sGw   Y  d S )Nc                 s   s    | ]	}t j|V  qd S r   )r   r   isfile).0fnr   r   r   	<genexpr>  s    z;PlatformTest.test_freedesktop_os_release.<locals>.<genexpr>NAMEIDtestZCPYTHON_TEST)
r   r   r]   r   Z_os_release_candidatesZfreedesktop_os_releasers   assertNotInZassertRaisesr~   )r   rR   r   r   r   test_freedesktop_os_release  s   
"z(PlatformTest.test_freedesktop_os_releasec                 C   s   t t }| |d d | |d d | d| | |d d t t }| |d d | |d d	 | |d d
 | |d d t t }dddddddddddd}| || | t|d d d S )Nr   ZFedorar   ZfedoraID_LIKEZVERSION_CODENAMEr1   ZUbuntuZubuntuZdebianZfocallinuxZLinuxzegg spam vikingZdoubleZsinglezdouble'sz$`\'")r   r   ZPRETTY_NAMEr   ZEMPTYZDOUBLE_QUOTEZEMPTY_DOUBLEZSINGLE_QUOTEZEMPTY_SINGLEZQUOTESSPECIALSr   rK   )	r   Z_parse_os_releaseFEDORA_OS_RELEASEr   r   r   UBUNTU_OS_RELEASETEST_OS_RELEASEr^   )r   rR   rb   r   r   r   test_parse_os_release  s2   z"PlatformTest.test_parse_os_releaseN).__name__
__module____qualname__r   r   r   Zskip_unless_symlinkr   r   r   r   r    r"   r$   r&   r,   r.   rS   rT   r_   rc   rf   ri   rq   rr   ru   rw   unittestZskipIfr'   r   r   Z
skipUnlessr   r   r   r   r   r   r   r   Zcpython_onlyr   r   r   r   r   r   r   r   r   G   sN    
W

$
0
$r   __main__)r   rg   rl   r   r{   r'   r   r   r   r   Ztest.supportr   r   r   r   ZTestCaser   r   mainr   r   r   r   <module>   s(       R