a
    äzeÅV  ã                   @   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 d dl	m
Z
 ddd„ZG dd	„ d	ƒZG d
d„ deejƒZG dd„ deƒZG dd„ dejƒZedkrªe ¡  dS )é    N)Úsupport)Úassert_python_ok)ÚFakePathó   fooc                 C   s:   t | ddƒ}| |¡ W d   ƒ n1 s,0    Y  d S )NÚxbr   )ÚopenÚwrite)ÚfilenameÚdataÚfp© r   ú+/usr/lib/python3.9/test/test_genericpath.pyÚcreate_file   s    r   c                   @   s¾   e Zd Zg d¢Zg Zdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z	e
 eedƒd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zejdd„ ƒZdd„ Zdd„ Zdd„ Zejd d!„ ƒZd"d#„ Zd$d%„ Zd&S )'ÚGenericTest)ÚcommonprefixÚgetsizeÚgetatimeÚgetctimeÚgetmtimeÚexistsÚisdirÚisfilec              	   C   sd   | j | j D ]R}|  t¡4 t| j|ƒƒ  |  d | jj|¡¡‚W d   ƒ q1 sT0    Y  qd S )Nz!{}.{}() did not raise a TypeError)	Úcommon_attributesÚ
attributesÚassertRaisesÚ	TypeErrorÚgetattrÚ
pathmoduleZfailÚformatÚ__name__)ÚselfÚattrr   r   r   Útest_no_argument   s    ÿzGenericTest.test_no_argumentc              	   C   sŽ  | j j}|  |g ƒd¡ |  |ddgƒd¡ |  |ddgƒd¡ |  |ddgƒd¡ |  |ddgƒd	¡ |  |d
dgƒd¡ |  |d
d
gƒd
¡ |  |ddgƒd¡ |  |ddgƒd¡ |  |ddgƒd¡ |  |ddgƒd¡ |  |ddgƒd¡ |  |ddgƒd¡ g d¢}|D ]t}|D ]h}|||gƒ}|  | |¡¡ |  | |¡¡ ||krt|ƒ}|  |||d … |||d … ¡ qqd S )NÚ z/home/swenson/spamz/home/swen/spamz
/home/swenz/home/swen/eggsz/home/swen/zhome:swenson:spamzhome:swen:spamz	home:swenz:home:swen:spamz:home:swen:eggsz:home:swen:s   /home/swenson/spams   /home/swen/spams
   /home/swens   /home/swen/eggss   /home/swen/s   home:swenson:spams   home:swen:spams	   home:swens   :home:swen:spams   :home:swen:eggss   :home:swen:)r#   ÚabcZXbcdZXbZXYZabcdZaXcZabdÚabZaXZabcXé   )r   r   ÚassertEqualÚ
assertTrueÚ
startswithÚlenZassertNotEqual)r    r   ZtestlistÚs1Ús2ÚpÚnr   r   r   Útest_commonprefix    s|    þ
þ
þ
þ
þ
þ
þ
þ
þ
þ
þ
þ
þ
zGenericTest.test_commonprefixc                 C   s^   t j}|  t j|¡ t|dƒ |  | j |¡d¡ t 	|¡ t|dƒ |  | j |¡d¡ d S )Ns   Helloé   s   Hello World!é   )
r   ÚTESTFNÚ
addCleanupÚunlinkr   r'   r   r   ÚosÚremove)r    r	   r   r   r   Útest_getsizec   s    


zGenericTest.test_getsizec                 C   s´   t j}|  t j|¡ t|dƒ t|ddƒ}| d¡ W d   ƒ n1 sJ0    Y  t|ddƒ}| ¡ }W d   ƒ n1 s~0    Y  |  |d¡ |  	| j
 |¡| j
 |¡¡ d S )Nr   r%   r   ó   barÚrbs   foobar)r   r2   r3   r4   r   r   r   Úreadr'   ZassertLessEqualr   r   r   )r    r	   Úfr
   r   r   r   Útest_filetimen   s    
(&

þzGenericTest.test_filetimec                 C   sn  t j}t |¡}|  t j|¡ |  | j |¡d¡ |  | j |¡d¡ t	|ƒ |  | j |¡d¡ |  | j |¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ | jt
urj|  | j |¡d¡ |  | j |¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ d S )NFTõ   í¿¿ó   ÿú ó    )r   r2   r5   Úfsencoder3   r4   ÚassertIsr   r   r   ÚgenericpathÚlexists©r    r	   Z	bfilenamer   r   r   Útest_exists€   s&    
zGenericTest.test_existsÚpipezrequires os.pipe()c              	   C   sd   t  ¡ \}}z*|  | j |¡¡ W t  |¡ t  |¡ nt  |¡ t  |¡ 0 |  | j |¡¡ d S ©N)r5   rG   r(   r   r   ÚcloseÚassertFalse)r    ÚrÚwr   r   r   Útest_exists_fd›   s    
ÿ
zGenericTest.test_exists_fdc              	   C   s6  t j}t |¡}|  | j |¡d¡ |  | j |¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ z>t|ƒ |  | j |¡d¡ |  | j |¡d¡ W t  |¡ nt  |¡ 0 z@t 	|¡ |  | j |¡d¡ |  | j |¡d¡ W t  
|¡ nt  
|¡ 0 d S ©NFr=   r>   r?   r@   T)r   r2   r5   rA   rB   r   r   r   r4   ÚmkdirÚrmdirrE   r   r   r   Ú
test_isdir¥   s$    

zGenericTest.test_isdirc              	   C   s6  t j}t |¡}|  | j |¡d¡ |  | j |¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ |  | j |d ¡d¡ z>t|ƒ |  | j |¡d¡ |  | j |¡d¡ W t  |¡ nt  |¡ 0 z@t 	|¡ |  | j |¡d¡ |  | j |¡d¡ W t  
|¡ nt  
|¡ 0 d S rN   )r   r2   r5   rA   rB   r   r   r   r4   rO   rP   rE   r   r   r   Útest_isfile¾   s$    

zGenericTest.test_isfilec                 C   sx   t j}t jd }|  t j|¡ |  t j|¡ t|ƒ |  | j ||¡¡ t|ƒ |  | j ||¡¡ |  	t
| jj¡ d S ©NÚ2)r   r2   r3   r4   r   r(   r   ÚsamefilerJ   r   r   )r    Zfile1Zfile2r   r   r   Útest_samefile×   s    
zGenericTest.test_samefilec                 C   s|   t j}t jd }|  t j|¡ |  t j|¡ t|ƒ |||ƒ |  | j ||¡¡ t 	|¡ t|ƒ |  
| j ||¡¡ d S rS   )r   r2   r3   r4   r   r(   r   rU   r5   r6   rJ   ©r    ÚfuncÚtest_fn1Útest_fn2r   r   r   Ú_test_samefile_on_link_funcå   s    


z'GenericTest._test_samefile_on_link_funcc                 C   s   |   tj¡ d S rH   )r[   r5   Úsymlink©r    r   r   r   Útest_samefile_on_symlinkô   s    z$GenericTest.test_samefile_on_symlinkc              
   C   sH   z|   tj¡ W n2 tyB } z|  d| ¡ W Y d }~n
d }~0 0 d S ©Nzos.link(): %s)r[   r5   ÚlinkÚPermissionErrorÚskipTest©r    Úer   r   r   Útest_samefile_on_linkø   s    z!GenericTest.test_samefile_on_linkc                 C   s’   t j}t jd }|  t j|¡ |  t j|¡ t|ƒ t |¡}|  | j 	|t |¡¡¡ t|ƒ t |¡}|  
| j 	||¡¡ |  t| jj	¡ d S rS   )r   r2   r3   r4   r   r5   Ústatr(   r   ÚsamestatrJ   r   r   )r    rY   rZ   Zstat1Zstat2r   r   r   Útest_samestatþ   s    


zGenericTest.test_samestatc                 C   s˜   t jd }t jd }|  t j|¡ |  t j|¡ t|ƒ |||ƒ |  | j t 	|¡t 	|¡¡¡ t 
|¡ t|ƒ |  | j t 	|¡t 	|¡¡¡ d S )NÚ1rT   )r   r2   r3   r4   r   r(   r   rg   r5   rf   r6   rJ   rW   r   r   r   Ú_test_samestat_on_link_func  s    


ÿ
ÿz'GenericTest._test_samestat_on_link_funcc                 C   s   |   tj¡ d S rH   )rj   r5   r\   r]   r   r   r   Útest_samestat_on_symlink  s    z$GenericTest.test_samestat_on_symlinkc              
   C   sH   z|   tj¡ W n2 tyB } z|  d| ¡ W Y d }~n
d }~0 0 d S r_   )rj   r5   r`   ra   rb   rc   r   r   r   Útest_samestat_on_link"  s    z!GenericTest.test_samestat_on_linkc              	   C   sœ   t j}|  t j|¡ t|ƒ t|ddƒ`}| ¡ }t|ddƒ,}| ¡ }|  | j 	||¡¡ W d   ƒ n1 sp0    Y  W d   ƒ n1 sŽ0    Y  d S )Nr9   r   )
r   r2   r3   r4   r   r   Úfilenor(   r   Úsameopenfile)r    r	   Úfp1Úfd1Úfp2Úfd2r   r   r   Útest_sameopenfile(  s    zGenericTest.test_sameopenfileN)r   Ú
__module__Ú__qualname__r   r   r"   r/   r7   r<   rF   ÚunittestÚ
skipUnlessÚhasattrr5   rM   rQ   rR   rV   r[   r   Zskip_unless_symlinkr^   re   rh   rj   rk   rl   rs   r   r   r   r   r      s,   C
	

r   c                   @   s   e Zd ZeZdd„ ZdS )ÚTestGenericTestc              
   C   sX  t jD ]J}|dkrqt| j|ƒ}| j|d |dv r\|dƒ |dƒ |dƒ |dƒ nÖ|  ttf¡ |dƒ W d   ƒ n1 sˆ0    Y  |  ttf¡ |dƒ W d   ƒ n1 s¾0    Y  |  	t
d¡ |dƒ W d   ƒ n1 sò0    Y  |  	t
d¡ |dƒ W d   ƒ n1 s(0    Y  W d   ƒ q1 sH0    Y  qd S )	Nr   )r!   )r   r   r   u   /tmpí¿¿abcdss
   /tmpÿabcdsz
/tmp abcdss
   /tmp abcdszembedded null)r   r   r   r   ZsubTestr   ÚOSErrorÚUnicodeEncodeErrorÚUnicodeDecodeErrorÚassertRaisesRegexÚ
ValueError)r    r!   rX   r   r   r   Útest_invalid_paths:  s$    
&&&z"TestGenericTest.test_invalid_pathsN)r   rt   ru   rC   r   r   r   r   r   r   ry   4  s   ry   c                   @   sˆ   e Zd Zejg d¢ Z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dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
CommonTest)ÚcurdirÚpardirÚextsepÚsepÚpathsepÚdefpathÚaltsepÚdevnullÚnormcaseÚ
splitdriveÚ
expandvarsÚnormpathÚabspathÚjoinÚsplitÚsplitextÚisabsÚbasenameÚdirnamerD   ÚislinkÚismountÚ
expanduserrŒ   Úrealpathc                 C   s|   | j j}dD ]}||ƒ}|  |||ƒ¡ q|  |dƒd¡ |  |dƒd¡ d dddg tdƒddhfD ]}|  t||¡ qdd S )N)z	FoO/./BaRs	   FoO/./BaRr#   ó    Tr   g      @Úo)r   r‰   r'   Ú	bytearrayr   r   )r    r‰   r-   Úpathr   r   r   Útest_normcase^  s    zCommonTest.test_normcasec                 C   sl   | j j}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |dƒd¡ |  |d	ƒd
¡ |  |dƒd¡ d S )Nú/foo/bar)r#   r   úfoo:bar)r#   rž   ú:foo:bar)r#   rŸ   ó   /foo/bar)r˜   r    ó   foo:bar)r˜   r¡   ó   :foo:bar)r˜   r¢   )r   rŠ   r'   )r    rŠ   r   r   r   Útest_splitdrivel  s    zCommonTest.test_splitdrivec                 C   s¸  | j j}t ¡ }| ¡  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#¡ W d   ƒ n1 sª0    Y  d S )$NZbarÚfooZbaz1z{fooZbaz2z{foo}z$foo barzbar barz	${foo}barZbarbarz	$[foo]barz$bar barz$?barz$foo}barzbar}barz${fooz${{foo}}zbaz1}z$foo$fooz$bar$barr   s   $foo bars   bar bars	   ${foo}bars   barbars	   $[foo]bars   $bar bars   $?bars   $foo}bars   bar}bars   ${foos   ${{foo}}s   baz1}s   $foo$foos   $bar$bar)r   r‹   r   ÚEnvironmentVarGuardÚclearr'   )r    r‹   Úenvr   r   r   Útest_expandvarsw  s8    zCommonTest.test_expandvarszneed support.FS_NONASCIIc                    sN  ˆj j‰ ‡ ‡fdd„}t ¡ }| ¡  tj}||d< d| ||< |||ƒ |dd| ƒ |dd| ƒ |d	| d
| ƒ |d| d| ƒ |dd| ƒ |t |¡t |¡ƒ |dt d| ¡ƒ |dt d| ¡ƒ |t d	| ¡t d
| ¡ƒ |t d| ¡t d| ¡ƒ |dt d| ¡ƒ W d   ƒ n1 s@0    Y  d S )Nc                    s   ˆ  ˆ | ƒ|¡ d S rH   )r'   )ÚvalueZexpected©r‹   r    r   r   Úcheck™  s    z2CommonTest.test_expandvars_nonascii.<locals>.checkZspamZhamz	$spam barz%s barz
${spam}barz%sbarz${%s}barzham%sbarz
$bar%s barz	$spam}barz%s}bars	   $spam bars
   ${spam}bars	   $spam}bar)r   r‹   r   r¥   r¦   ÚFS_NONASCIIr5   rA   )r    r«   r§   Znonasciir   rª   r   Útest_expandvars_nonascii–  s.    
ÿÿz#CommonTest.test_expandvars_nonasciic                 C   sÎ   |   d| j d¡¡ t ¡ 0 t dt¡ |   d| j d¡¡ W d   ƒ n1 sR0    Y  tjdkrjdnd}t ¡ D t dt¡ dd|ddfD ]}|  	| j |¡t
¡ q’W d   ƒ n1 sÀ0    Y  d S )	Nr¤   Úignorer   Úwin32r˜   s   fòòs   /foos   C:\)ÚassertInr   r   ÚwarningsÚcatch_warningsÚsimplefilterÚDeprecationWarningÚsysÚplatformÚassertIsInstanceÚbytes)r    Zundecodable_pathr›   r   r   r   Útest_abspath°  s    
2
zCommonTest.test_abspathc                 C   s`   |   d| j d¡¡ t ¡ 0 t dt¡ |   d| j d¡¡ W d   ƒ n1 sR0    Y  d S )Nr¤   r®   r   )r°   r   r—   r±   r²   r³   r´   r]   r   r   r   Útest_realpath¿  s    
zCommonTest.test_realpathc                 C   s"   dD ]}|   | j |¡t¡ qd S )N)r#   Ú.ú/ú\z///foo/.//bar//)r·   r   rŒ   Ústr)r    r›   r   r   r   Útest_normpath_issue5827Å  s    z"CommonTest.test_normpath_issue5827c              	   C   s”   | j j}dD ]}|  ||ƒt¡ qd}zt |¡ W n ttfyJ   Y nF0 t 	|¡* dD ]}|  ||ƒt¡ q\W d   ƒ n1 s†0    Y  d S )N)r#   Zfuuu   fÃ¹Ã¹z/fuuzU:\u   Ã§wÃ°)
r   r   r·   r¾   r5   rA   ÚAttributeErrorr{   r   Útemp_cwd)r    r   r›   Zunicwdr   r   r   Útest_abspath_issue3426Ê  s    z!CommonTest.test_abspath_issue3426c              	   C   sš   t jrtjdvrt j}nt jr&t j}n
|  d¡ t ¡ N t dt	¡ t  
|¡ |  ¡  W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )N)r¯   Údarwinzneed support.TESTFN_NONASCIIr®   )r   ZTESTFN_UNDECODABLErµ   r¶   ZTESTFN_NONASCIIrb   r±   r²   r³   r´   rÁ   r¹   )r    Únamer   r   r   Útest_nonascii_abspathÜ  s    û

z CommonTest.test_nonascii_abspathc              	   C   sÞ  t jdtfdd´ d}|  t|¡ | j dd¡ W d   ƒ n1 sJ0    Y  |  t|¡ | j dd¡ W d   ƒ n1 s„0    Y  |  td¡ | j dd¡ W d   ƒ n1 s¾0    Y  |  td¡ | j dd¡ W d   ƒ n1 sø0    Y  |  td¡ | j d¡ W d   ƒ n1 s20    Y  |  td	¡ | j g ¡ W d   ƒ n1 sl0    Y  |  td
¡& | j tdƒtdƒ¡ W d   ƒ n1 s°0    Y  W d   ƒ n1 sÐ0    Y  d S )Nr#   T©Úquietú.Can't mix strings and bytes in path componentsó   bytesr¾   Úinté*   Úlistrš   r   r8   )r   Úcheck_warningsÚBytesWarningr}   r   r   rŽ   rš   ©r    Úerrmsgr   r   r   Útest_join_errorsî  s     ,,,,,,zCommonTest.test_join_errorsc              	   C   sn  t jdttffdd@ d}|  t|¡ | j dd¡ W d   ƒ n1 sN0    Y  |  t|¡ | j dd¡ W d   ƒ n1 sˆ0    Y  |  td¡ | j dd¡ W d   ƒ n1 sÂ0    Y  |  td¡ | j dd¡ W d   ƒ n1 sü0    Y  |  td	¡& | j td
ƒtdƒ¡ W d   ƒ n1 s@0    Y  W d   ƒ n1 s`0    Y  d S )Nr#   TrÆ   rÈ   rÉ   r¾   rÊ   rË   rš   r   r8   )	r   rÍ   rÎ   r´   r}   r   r   Úrelpathrš   rÏ   r   r   r   Útest_relpath_errors  s    ÿ
,,,,zCommonTest.test_relpath_errorsc                 C   s   t ddd| jj ƒ d S )Nz-Sz-czimport )r   r   r   r]   r   r   r   Útest_import  s    zCommonTest.test_importN)r   rt   ru   r   r   rœ   r£   r¨   rv   rw   r   r¬   r­   r¹   rº   r¿   rÂ   rÅ   rÑ   rÓ   rÔ   r   r   r   r   r€   S  s   

r€   c                   @   s\   e Z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S )ÚPathLikeTestsc                 C   s4   t j| _tt jƒ| _|  t j| j¡ t| jdƒ d S )Ns   test_genericpath.PathLikeTests)r   r2   Ú	file_namer   Ú	file_pathr3   r4   r   r]   r   r   r   ÚsetUp  s    zPathLikeTests.setUpc                 C   s   |   || jƒ|| jƒ¡ d S rH   )r'   r×   rÖ   )r    rX   r   r   r   ÚassertPathEqual  s    zPathLikeTests.assertPathEqualc                 C   s   |   tjj¡ d S rH   )rÙ   r5   r›   r   r]   r   r   r   Útest_path_exists!  s    zPathLikeTests.test_path_existsc                 C   s   |   tjj¡ d S rH   )rÙ   r5   r›   r   r]   r   r   r   Útest_path_isfile$  s    zPathLikeTests.test_path_isfilec                 C   s   |   tjj¡ d S rH   )rÙ   r5   r›   r   r]   r   r   r   Útest_path_isdir'  s    zPathLikeTests.test_path_isdirc                 C   s"   |   tj | j| jg¡| j¡ d S rH   )r'   r5   r›   r   r×   rÖ   r]   r   r   r   Útest_path_commonprefix*  s    ÿz$PathLikeTests.test_path_commonprefixc                 C   s   |   tjj¡ d S rH   )rÙ   r5   r›   r   r]   r   r   r   Útest_path_getsize.  s    zPathLikeTests.test_path_getsizec                 C   s   |   tjj¡ d S rH   )rÙ   r5   r›   r   r]   r   r   r   Útest_path_getmtime1  s    z PathLikeTests.test_path_getmtimec                 C   s   |   tjj¡ d S rH   )rÙ   r5   r›   r   r]   r   r   r   Útest_path_getctime4  s    z PathLikeTests.test_path_getctimec                 C   s   |   tj | j| j¡¡ d S rH   )r(   r5   r›   rU   r×   rÖ   r]   r   r   r   Útest_path_samefile7  s    z PathLikeTests.test_path_samefileN)r   rt   ru   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   r   r   r   r   rÕ     s   rÕ   Ú__main__)r   )rC   r5   rµ   rv   r±   Útestr   Ztest.support.script_helperr   Ztest.supportr   r   r   ZTestCasery   r€   rÕ   r   Úmainr   r   r   r   Ú<module>   s"   
  " D%