a
     Rîh¥  ã                   @   s  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
 d dlmZ d dlmZmZ d dlmZ d dlmZ zd dlZW n eyž   dZY n0 eejƒZdd	„ Zd
d„ Zdd„ ZG dd„ dejƒZG dd„ dejejƒZG dd„ dejƒZedkre ¡  dS )é    N)Úpartial)ÚrealpathÚabspathÚdirnameÚbasenameÚALLOW_MISSING)Úsupport)r   Útest_genericpath)ÚFakePath)Úmockc                 C   s"   dt v }d}| t |¡| ƒg| S )z­
    On Windows, posixpath.abspath still returns paths with backslashes
    instead of posix forward slashes. If this is the case, several tests
    fail, so skip them.
    ú\z'ABSTFN is not a posix path - tests fail)ÚABSTFNÚunittestÚskip)ÚtestZfound_backslashÚmsg© r   ú;/opt/python-3.9.24/usr/lib/python3.9/test/test_posixpath.pyÚ!skip_if_ABSTFN_contains_backslash   s    r   c                 C   s&   zt  | ¡ W n ty    Y n0 d S ©N)ÚosÚrmdirÚOSError)r   r   r   r   Ú
safe_rmdir!   s    r   c                     s   ‡ fdd„}|S )a{  Simplistic decorator to parametrize a test

    Runs the decorated test multiple times in subTest, with a value from
    'parameters' passed as an extra positional argument.
    Does *not* call doCleanups() after each run.

    Not for general use. Intended to avoid indenting for easier backports.

    See https://discuss.python.org/t/91827 for discussing generalizations.
    c                    s   ‡ ‡fdd„}|S )Nc              	      sR   ˆD ]H}|   |¡* ˆ | g|¢|‘R i |¤Ž W d   ƒ q1 sB0    Y  qd S r   )ÚsubTest)ÚselfÚargsÚkwargsZ	parameter)ÚfuncÚ
parametersr   r   Ú_parameterized3   s    zE_parameterize.<locals>._parametrize_decorator.<locals>._parameterizedr   )r   r    ©r   )r   r   Ú_parametrize_decorator2   s    z-_parameterize.<locals>._parametrize_decoratorr   )r   r"   r   r!   r   Ú_parameterize'   s    r#   c                   @   sh  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d„ Zdd„ Ze e ¡ d¡dd„ ƒZe edu d¡dd„ ƒZe edu d¡d d!„ ƒZd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zeei d*d+id*eiƒd,d-„ ƒƒZeei d*d+id*eiƒd.d/„ ƒƒZ e e!e"d0ƒd1¡eei d*eiƒd2d3„ ƒƒƒZ#e e!e"d0ƒd1¡ed4d5„ ƒƒZ$d6d7„ Z%e e!e"d0ƒd1¡eei d*eiƒd8d9„ ƒƒƒZ&e e!e"d0ƒd1¡eei d*eiƒd:d;„ ƒƒƒZ'ej(ed<d=„ ƒƒZ)e e!e"d0ƒd1¡eed*d+id*eiƒd>d?„ ƒƒƒZ*e e!e"d0ƒd1¡eei d*d+id*eiƒd@dA„ ƒƒƒZ+e e!e"d0ƒd1¡eei d*d+id*eiƒdBdC„ ƒƒƒZ,e e!e"d0ƒd1¡eei d*eiƒdDdE„ ƒƒƒZ-e e!e"d0ƒd1¡eei d*d+id*eiƒdFdG„ ƒƒƒZ.e e!e"d0ƒd1¡eei d*d+id*eiƒdHdI„ ƒƒƒZ/ej(ee e"j0e"j1vdJ¡e e2j3dKkdL¡ed*d+id*eiƒdMdN„ ƒƒƒƒƒZ4eej(dOdP„ ƒƒZ5dQdR„ Z6dSdT„ Z7dUdV„ Z8dS )WÚPosixPathTestc                 C   s   |   ¡  d S r   )ÚtearDown©r   r   r   r   ÚsetUp=   s    zPosixPathTest.setUpc                 C   s,   dD ]"}t  t j| ¡ tt j| ƒ qd S )N)Ú Ú1Ú2)r   ÚunlinkÚTESTFNr   )r   Úsuffixr   r   r   r%   @   s    zPosixPathTest.tearDownc                 C   sŒ   |   t dddd¡d¡ |   t ddd¡d¡ |   t ddd	¡d
¡ |   t dddd¡d¡ |   t ddd¡d¡ |   t ddd¡d¡ d S )Nú/fooÚbarz/barZbazz/bar/bazz/foo/bar/bazz/foo/zbar/zbaz/z/foo/bar/baz/ó   /fooó   bars   /bars   bazs   /bar/bazs   /foo/bar/bazs   /foo/s   bar/s   baz/s   /foo/bar/baz/)ÚassertEqualÚ	posixpathÚjoinr&   r   r   r   Ú	test_joinE   s     ÿÿÿÿÿzPosixPathTest.test_joinc                 C   s¸   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d	¡d
¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )Nú/foo/bar)r.   r/   ú/)r7   r(   Úfoo)r(   r8   ú////foo)ú////r8   ú
//foo//bar)ú//foor/   ó   /foo/bar)r0   r1   ó   /)r>   ó    ó   foo)r?   r@   ó   ////foo)ó   ////r@   ó
   //foo//bar)ó   //foor1   )r2   r3   Úsplitr&   r   r   r   Ú
test_splitS   s    zPosixPathTest.test_splitc                 C   s‚  |   t |¡||f¡ |   t d| ¡d| |f¡ |   t d| ¡d| |f¡ |   t d| ¡d| |f¡ |   t d| ¡d| |f¡ |   t |d ¡|| d df¡ t|dƒ}t|dƒ}t|dƒ}|   t |¡||f¡ |   t d| ¡d| |f¡ |   t d| ¡d| |f¡ |   t d	| ¡d	| |f¡ |   t d
| ¡d
| |f¡ |   t |d ¡|| d df¡ d S )Nr7   zabc/zabc.def/z	/abc.def/r(   ÚASCIIr>   s   abc/s   abc.def/s	   /abc.def/r?   )r2   r3   ÚsplitextÚbytes)r   ÚpathÚfilenameÚextr   r   r   ÚsplitextTest`   sB    
ÿ
ÿ
ÿÿ



ÿ
ÿ
ÿ
ÿÿzPosixPathTest.splitextTestc                 C   s¬   |   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 )Nzfoo.barr8   z.barzfoo.boo.barzfoo.boozfoo.boo.biff.barzfoo.boo.biffz.csh.rcz.cshz.rcZnodotsr(   z.cshrcz...manydotsz...manydots.extz.extÚ.ú..z........)rM   r&   r   r   r   Útest_splitext|   s    zPosixPathTest.test_splitextc                 C   s¸   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d	¡d¡ |   t d
¡d¡ |   t d¡d¡ |   t d¡d¡ d S )Nr(   Fr7   Tr.   r6   zfoo/barr?   r>   r0   r=   s   foo/bar)ÚassertIsr3   Úisabsr&   r   r   r   Ú
test_isabsŠ   s    zPosixPathTest.test_isabsc                 C   s¸   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d	¡ |   t d
¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d	¡ d S )Nr6   r/   r7   r(   r8   r9   r;   r=   r1   r>   r?   r@   rA   rC   )r2   r3   r   r&   r   r   r   Útest_basename—   s    zPosixPathTest.test_basenamec                 C   s¸   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d	¡ |   t d
¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )Nr6   r.   r7   r8   r(   r9   r:   r;   r<   r=   r0   r>   r@   r?   rA   rB   rC   rD   )r2   r3   r   r&   r   r   r   Útest_dirname¤   s    zPosixPathTest.test_dirnamec                 C   s„  |   t tjd ¡d¡ |   t tjd ¡d¡ ttjd dƒ}| d¡ W d   ƒ n1 s`0    Y  |   t tjd ¡d¡ t ¡ rt	 
tjd tjd ¡ |   t tjd ¡d¡ t	 tjd ¡ |   t tjd ¡d¡ |   t tjd ¡d¡ |   t tjd ¡d¡ |   t tjd ¡d¡ |   t t	 tj¡d ¡d¡ |   t tjd	 ¡d¡ |   t t	 tj¡d
 ¡d¡ d S )Nr)   Fr*   Úwbr@   Tu   í¿¿ó   ÿú ó    )rQ   r3   Úislinkr   r,   ÚlexistsÚopenÚwriteÚcan_symlinkr   ÚsymlinkÚremoveÚexistsÚfsencode)r   Úfr   r   r   Útest_islink±   s     (
zPosixPathTest.test_islinkc                 C   s(   |   t d¡d¡ |   t d¡d¡ d S )Nr7   Tr>   )rQ   r3   Úismountr&   r   r   r   Útest_ismountÆ   s    zPosixPathTest.test_ismountc                 C   s’   |   t t¡d¡ z(t t¡ |   t t¡d¡ W ttƒ n
ttƒ 0 |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )NFõ   /í¿¿ó   /ÿú/ ó   / )rQ   r3   re   r   r   Úmkdirr   r&   r   r   r   Útest_ismount_non_existentÊ   s    
z'PosixPathTest.test_ismount_non_existentzTest requires symlink supportc              	   C   s>   z,t  dt¡ |  t t¡d¡ W t  t¡ nt  t¡ 0 d S )Nr7   F)r   r_   r   rQ   r3   re   r+   r&   r   r   r   Útest_ismount_symlinksØ   s    z#PosixPathTest.test_ismount_symlinksNzTest requires posix modulec                 C   s>   t j}dd„ }z"|t _|  t t¡d¡ W |t _n|t _0 d S )Nc                 S   s6   d}d}| t krd}d}t d||dddddddf
¡S )Nr   é   )r   ÚposixÚstat_result©rJ   Úst_inoÚst_devr   r   r   Ú
fake_lstatç   s    z?PosixPathTest.test_ismount_different_device.<locals>.fake_lstatT©r   ÚlstatrQ   r3   re   r   ©r   Z
save_lstatrt   r   r   r   Útest_ismount_different_deviceâ   s    z+PosixPathTest.test_ismount_different_devicec                 C   s>   t j}dd„ }z"|t _|  t t¡d¡ W |t _n|t _0 d S )Nc                 S   sP   d}d}|   t¡r"| tkr"tdƒ‚| tkr2d}d}t d||dddddddf
¡S )Nr   z!Fake [Errno 13] Permission deniedrn   )Ú
startswithr   r   ro   rp   rq   r   r   r   rt   ù   s    zEPosixPathTest.test_ismount_directory_not_readable.<locals>.fake_lstatTru   rw   r   r   r   Ú#test_ismount_directory_not_readableô   s    z1PosixPathTest.test_ismount_directory_not_readablec                 C   s(   |   t d¡d¡ |   t d¡d¡ d S )Nr8   r@   )r2   r3   Ú
expanduserr&   r   r   r   Útest_expanduser
  s    zPosixPathTest.test_expanduserc              
   C   sÔ   t  ¡ ¸}d|d< |  t d¡d¡ d|d< |  t d¡d¡ dD ]n}| j|dN ||d< |  t d¡d¡ |  t d¡d¡ |  t d	¡d
¡ W d   ƒ qB1 s¦0    Y  qBW d   ƒ n1 sÆ0    Y  d S )Nz/home/victorÚHOMEú~z/home/victor/)r7   r(   ú//ú///)Úhomer7   ú~/z~/foor.   )r   ÚEnvironmentVarGuardr2   r3   r{   r   )r   Úenvr   r   r   r   Útest_expanduser_home_envvar  s    
z)PosixPathTest.test_expanduser_home_envvarc              
   C   s¦  t  d¡}|  t d¡t¡ |  t d¡t¡ t d¡dkrt|  t d¡d t d¡¡ |  t d¡d t d¡¡ |  t d¡t¡ |  t d	¡t¡ |  t d
¡t¡ |  t d¡t¡ t  ¡ Ì}|d= | 	t
 ¡ ¡j}| d¡pèd}|  t d¡|¡ tjj|dtdb tjj|dtd. dD ]}|  t |¡|¡ q(W d   ƒ n1 sX0    Y  W d   ƒ n1 sx0    Y  W d   ƒ n1 s˜0    Y  d S )NÚpwdr‚   s   ~/r~   r7   ó   ~r>   z~root/z~foo/s   ~root/s   ~foo/r}   Úgetpwuid)Zside_effectÚgetpwnam)r~   z~/.localz
~vstinner/)r   Úimport_moduleZassertIsInstancer3   r{   ÚstrrI   r2   rƒ   rˆ   r   ÚgetuidÚpw_dirÚrstripr   ZpatchÚobjectÚKeyError)r   r†   r„   r   rJ   r   r   r   Útest_expanduser_pwd  s4    
þþ
ÿz!PosixPathTest.test_expanduser_pwdc                 C   s   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d	¡ |   t d
¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )Nr(   rN   r7   r   r€   z///foo/.//bar//r6   z///foo/.//bar//.//..//.//bazz/foo/bazz///..//./foo/.//barr?   ó   .r>   s   //s   ///s   ///foo/.//bar//r=   s   ///foo/.//bar//.//..//.//bazs   /foo/bazs   ///..//./foo/.//bar)r2   r3   Únormpathr&   r   r   r   Útest_normpathE  s(    ÿÿÿzPosixPathTest.test_normpathÚstrictTc                 C   s¼   |   tdi |¤Žt ¡ ¡ |   td	i |¤Žt ¡ ¡ |   td dgd ¡fi |¤Žt ¡ ¡ |   td
i |¤Žt ¡ ¡ |   tdi |¤Žt ¡ ¡ |   td dgd ¡fi |¤Žt ¡ ¡ d S )NrN   ú./.r7   éd   r’   ó   ./.r>   )rN   )r–   )r’   )r˜   )r2   r   r   Úgetcwdr4   Úgetcwdb©r   r   r   r   r   Útest_realpath_curdirY  s    (z"PosixPathTest.test_realpath_curdirc                 C   sÌ   |   tdi |¤Žtt ¡ ƒ¡ |   td	i |¤Žttt ¡ ƒƒ¡ |   td dgd ¡fi |¤Žd¡ |   td
i |¤Žtt ¡ ƒ¡ |   tdi |¤Žttt ¡ ƒƒ¡ |   td dgd ¡fi |¤Žd¡ d S )NrO   ú../..r7   r—   ó   ..ó   ../..r>   )rO   )r   )rž   )rŸ   )r2   r   r   r   r™   r4   rš   r›   r   r   r   Útest_realpath_pardird  s    "$"z"PosixPathTest.test_realpath_pardirr_   zMissing symlink implementationc              	   C   sL   z:t  td t¡ |  ttfi |¤Žtd ¡ W t t¡ nt t¡ 0 d S ©Nr)   )r   r_   r   r2   r   r   r+   r›   r   r   r   Útest_realpath_basico  s    z!PosixPathTest.test_realpath_basicc              	   C   sX   zFt  td t¡ | jtttdd | jtttd dd W t t¡ nt t¡ 0 d S )Nr)   T©r•   r*   )r   r_   r   ÚassertRaisesÚFileNotFoundErrorr   r   r+   r&   r   r   r   Útest_realpath_strict{  s
    z"PosixPathTest.test_realpath_strictc                 C   s–  d}| j tt|dd | j tt|dd | j tt|td d}| j tt|dd | j tt|dd | j tt|td d}| j tt|dd | j tt|dd | j tt|td d}| j tt|dd | j tt|dd | j tt|td d}| j tt|dd | j tt|dd | j tt|td d	}| j tt|dd | j tt|dd | j tt|td d
}| j tt|dd | j tt|dd | j tt|td d}| j tt|dd | j tt|dd | j tt|td d}tjdkr|  t|dd|¡ | j tt|dd |  t|td|¡ n6| j tt|dd | j tt|dd | j tt|td d}tjdkrŒ|  t|dd|¡ |  t|td|¡ n$| j tt|dd | j tt|td | j tt|dd d}tjdkr|  t|ddd¡ | j tt|dd |  t|tdd¡ n6| j tt|dd | j tt|dd | j tt|td d}tjdkr~|  t|ddd¡ |  t|tdd¡ n$| j tt|dd | j tt|td | j tt|dd d}tjdkrü| j t	t|dd | j t	t|dd | j t	t|td n:|  t|dd|¡ | j tt|dd |  t|td|¡ d}tjdkrl| j t	t|dd | j t	t|td n|  t|dd|¡ | j tt|dd d S )Nri   Fr£   Trj   z/nonexistent/x s   /nonexistent/x z/ /..s   / /..z/nonexistent/x /..s   /nonexistent/x /..rg   Úwin32u   /nonexistent/í¿¿u   /í¿¿/..r7   u   /nonexistent/í¿¿/..z/nonexistentrh   s   /nonexistent/ÿ)
r¤   Ú
ValueErrorr   r   r¥   ÚsysÚplatformr2   ÚUnicodeEncodeErrorÚUnicodeDecodeError)r   rJ   r   r   r   Útest_realpath_invalid_pathsˆ  s˜    z)PosixPathTest.test_realpath_invalid_pathsc              	   C   sR   z@t  t td ¡t¡ |  ttfi |¤Žtd ¡ W t t¡ nt t¡ 0 d S r¡   )	r   r_   r3   Úrelpathr   r2   r   r   r+   r›   r   r   r   Útest_realpath_relativeß  s    z$PosixPathTest.test_realpath_relativec              	   C   sZ   zFt  tjd tj¡ |  tdtj fi |¤Žtd ¡ W t tj¡ nt tj¡ 0 d S )Nr)   znonexistent/../)r   r_   r   r,   r2   r   r   r+   r›   r   r   r   Útest_realpath_missing_pardirê  s    ÿz*PosixPathTest.test_realpath_missing_pardirc              
   C   s‚  z(t  tt¡ |  ttƒt¡ t  td td ¡ t  td td ¡ |  ttd ƒtd ¡ |  ttd ƒtd ¡ |  ttd ƒtd ¡ |  ttd ƒttƒ¡ |  ttd ƒttƒd ¡ t  td td ¡ |  ttd	 ttƒ d ƒtd ¡ |  ttd	 ttƒ d ƒtd ¡ t  ttƒd
 td ¡ |  ttd ƒtd
 ¡ t  dtttƒƒ d ttƒ d td ¡ |  ttd ƒtd ¡ t ttƒ¡$ |  tttƒƒt¡ W d   ƒ n1 sÎ0    Y  W t 	t¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ nRt 	t¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ 0 d S )Nr)   r*   ú1/xú1/..ú1/../xú/xÚxÚyú1/../úa/bÚaú../r7   Úc)
r   r_   r   r2   r   r   r   r   Ú
change_cwdr+   r&   r   r   r   Útest_realpath_symlink_loopsö  sR    ÿÿÿÿÿ6
û
z)PosixPathTest.test_realpath_symlink_loopsc              
   C   sœ  zBt  tt¡ | jtttfi |¤Ž t  td td ¡ t  td td ¡ | jtttd fi |¤Ž | jtttd fi |¤Ž | jtttd fi |¤Ž | jtttd fi |¤Ž | jtttd fi |¤Ž t  td td ¡ | jtttd ttƒ d fi |¤Ž | jtttd ttƒ d fi |¤Ž t  ttƒd	 td
 ¡ | jtttd
 fi |¤Ž t  dtttƒƒ d ttƒ d td ¡ | jtttd fi |¤Ž t 	ttƒ¡* | jttttƒfi |¤Ž W d   ƒ n1 sè0    Y  W t 
t¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td
 ¡ nRt 
t¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td
 ¡ 0 d S )Nr)   r*   r±   r²   r³   rµ   r¶   r·   r¸   r¹   rº   r7   r»   )r   r_   r   r¤   r   r   r   r   r   r¼   r+   r›   r   r   r   Ú"test_realpath_symlink_loops_strict  sZ    ÿÿÿÿÿÿÿ<
û
z0PosixPathTest.test_realpath_symlink_loops_strictc              
   C   s¢   zvt  t¡ t  dttƒ td ¡ t  dtd ¡ |  ttd fi |¤Žt¡ W t td ¡ t td ¡ t	tƒ n&t td ¡ t td ¡ t	tƒ 0 d S )Nrº   z/selfzself/self/selfz/link)
r   rk   r   r_   r   r2   r   r   r+   r   r›   r   r   r   Ú(test_realpath_repeated_indirect_symlinksJ  s    

þz6PosixPathTest.test_realpath_repeated_indirect_symlinksc                 C   s  d}zÞt  t¡ t|ƒD ],}t  d d| gd ¡td|d   ¡ qt  dtd ¡ |  ttd|  fi |¤Žt¡ t 	t¡$ |  td| ƒt¡ W d   ƒ n1 sª0    Y  W t|d ƒD ]}t 
td|  ¡ qÂttƒ n.t|d ƒD ]}t 
td|  ¡ qðttƒ 0 d S )Né
   r7   z%dz/%drn   rN   z/0)r   rk   r   Úranger_   r4   r2   r   r   r¼   r+   r   )r   r   ÚdepthÚir   r   r   Útest_realpath_deep_recursionZ  s    
* 4
þz*PosixPathTest.test_realpath_deep_recursionc              
   C   sÄ   zšt  t¡ t  td ¡ t  td td ¡ t td ¡* |  tdi |¤Žtd ¡ W d   ƒ n1 sl0    Y  W t td ¡ t	td ƒ t	tƒ n$t td ¡ t	td ƒ t	tƒ 0 d S )Nz/yú/kr¹   z/y/a)r¹   )
r   rk   r   r_   r   r¼   r2   r   r+   r   r›   r   r   r   Útest_realpath_resolve_parentso  s    	
ÿ$
þz+PosixPathTest.test_realpath_resolve_parentsc              
   C   s  zÞt  t¡ t  td ¡ t  td ¡ t  td td ¡ |  ttd fi |¤Žtd ¡ t ttƒ¡4 |  tt	tƒd fi |¤Žtd ¡ W d   ƒ n1 s¤0    Y  W t 
td ¡ ttd ƒ ttd ƒ ttƒ n0t 
td ¡ ttd ƒ ttd ƒ ttƒ 0 d S )NrÅ   z/k/yz/link-yz
/link-y/..)r   rk   r   r_   r2   r   r   r¼   r   r   r+   r   r›   r   r   r   Ú(test_realpath_resolve_before_normalizing…  s$    
 ÿ$
ýz6PosixPathTest.test_realpath_resolve_before_normalizingc              
   C   sê   zÀt  t¡ t  td ¡ t  ttd ¡ t ttƒ¡T ttƒ}|  t	|d fi |¤Žt¡ |  t	|d fi |¤Žtd ¡ W d   ƒ n1 s’0    Y  W t 
td ¡ ttd ƒ ttƒ n$t 
td ¡ ttd ƒ ttƒ 0 d S )NrÅ   Úlinkzlink/k)r   rk   r   r_   r   r¼   r   r   r2   r   r+   r   )r   r   Úbaser   r   r   Útest_realpath_resolve_first£  s    
@
þz)PosixPathTest.test_realpath_resolve_firstzCan't set symlink permissionsÚdarwinz1only macOS requires read permission to readlink()c                 C   sZ  z6t  td t¡ t jtddd |  t¡  ttfi |¤Ž W d   ƒ n1 sT0    Y  |  t¡& ttd fi |¤Žf W d   ƒ n1 s”0    Y  |  t¡$ ttd fi |¤Ž W d   ƒ n1 sÒ0    Y  |  t¡$ ttd fi |¤Ž W d   ƒ n1 s0    Y  W t jtddd t  t¡ nt jtddd t  t¡ 0 d S )	Nr)   r   F)Úfollow_symlinksr.   z/../fooz/foo/..éí  )r   r_   r   Úchmodr¤   ÚPermissionErrorr   r+   r›   r   r   r   Ú'test_realpath_unreadable_symlink_strict¸  s    .426ÿz5PosixPathTest.test_realpath_unreadable_symlink_strictc              
   C   sj  z@t  t¡ t  td ¡ t  td¡ |  ttddt¡ |  ttddt¡ |  tttdt¡ zt  t¡ W n ty„   Y n0 |  	d¡ |  ttd ddtd ¡ | j
tttd dd | j
tttd td |  ttd ddtd ¡ | j
tttd dd | j
tttd td W t  td¡ ttd ƒ ttƒ n"t  td¡ ttd ƒ ttƒ 0 d S )	NrÅ   r   Fr£   TzCannot block permissionsz/missingrÍ   )r   rk   r   rÎ   r2   r   r   ÚstatrÏ   ZskipTestr¤   r   r&   r   r   r   Ú"test_realpath_unreadable_directoryÍ  sH    

ÿÿÿÿÿÿ
þz0PosixPathTest.test_realpath_unreadable_directoryc                 C   s²  t jdd„  }t _zt j t  ¡ ¡d }|  ttjd¡ |  t d¡d¡ |  t t 	d¡¡d¡ |  t d¡d¡ |  t d¡d¡ |  t dd¡d	| d
 ¡ |  t dd¡d	| d ¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t d
d
¡d¡ |  t dd¡d¡ W |t _n|t _0 d S )Nc                   S   s   dS )Nz/home/user/barr   r   r   r   r   Ú<lambda>ò  r?   z,PosixPathTest.test_relpath.<locals>.<lambda>éÿÿÿÿr(   r¹   r¸   z../a/bz../brº   z/az../cz/a/bzb/cz../../arN   z/foo/bar/batz/x/y/zz../../../foo/bar/batr6   Zbatr7   zfoo/bar/batz../../..r´   z../foo/bar/batz
../../../x)
r   r™   rJ   rE   r¤   r¨   r3   r®   r2   r   )r   Zreal_getcwdÚcurdirr   r   r   Útest_relpathñ  s0    
ÿzPosixPathTest.test_relpathc                 C   sÖ  t jdd„  }t _z´t j t  ¡ ¡d }|  ttjd¡ |  t d¡d¡ |  t t 	d¡¡d¡ |  t d¡d¡ |  t d¡d¡ |  t dd¡d	| d
 ¡ |  t dd¡d	| d ¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t dd¡d¡ |  t d
d
¡d¡ |  t dd¡d¡ |  t
tjdd¡ |  t
tjdd¡ W |t _n|t _0 d S )Nc                   S   s   dS )Ns   /home/user/barr   r   r   r   r   rÓ     r?   z2PosixPathTest.test_relpath_bytes.<locals>.<lambda>rÔ   r?   ó   as   a/bs   ../a/bs   ../bs   ../s   /as   ../cs   /a/bs   b/cs   ../../ar’   s   /foo/bar/bats   /x/y/zs   ../../../foo/bar/batr=   s   batr>   s   foo/bar/bats   ../../..s   /xs   ../foo/bar/bats
   ../../../xs   bytesr‹   )r   rš   rJ   rE   r¤   r¨   r3   r®   r2   r   Ú	TypeError)r   Zreal_getcwdbrÕ   r   r   r   Útest_relpath_bytes  s8    
ÿ
ÿz PosixPathTest.test_relpath_bytesc                    sü  ‡ fdd„}‡ fdd„}ˆ   ttjg ¡ |tddgƒ |tddgƒ |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ƒ |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ƒ |g d¢dƒ |dgdƒ |dd gdƒ |tdd!gƒ ˆ   ttjd"dg¡ ˆ   ttjd"d#g¡ ˆ   ttjd$dg¡ ˆ   ttjdd%g¡ ˆ   ttjdd&g¡ ˆ   ttjd'd%g¡ d S )(Nc                    s8   ˆ   t | ¡|¡ ˆ   t dd„ | D ƒ¡t |¡¡ d S )Nc                 S   s   g | ]}t  |¡‘qS r   ©r   rb   ©Ú.0Úpr   r   r   Ú
<listcomp>,  r?   z@PosixPathTest.test_commonpath.<locals>.check.<locals>.<listcomp>)r2   r3   Ú
commonpathr   rb   )ÚpathsZexpectedr&   r   r   Úcheck*  s    ÿz,PosixPathTest.test_commonpath.<locals>.checkc                    s.   ˆ   | tj|¡ ˆ   | tjdd„ |D ƒ¡ d S )Nc                 S   s   g | ]}t  |¡‘qS r   rÚ   rÛ   r   r   r   rÞ   1  r?   zFPosixPathTest.test_commonpath.<locals>.check_error.<locals>.<listcomp>)r¤   r3   rß   )Úexcrà   r&   r   r   Úcheck_error.  s    
ÿz2PosixPathTest.test_commonpath.<locals>.check_errorz/usrZusrz
/usr/localz/usr/local/z/usr//localz//usr/localz/usr/./localz/./usr/localr7   z/devz	/usr/lib/z/usr/lib/python3z/usr/libz/usr/lib64/z
/usr/lib64ZspamÚalotr(   úand/jamúand/spamÚandzand//jamz
and/spam//z	and/./jamz
./and/spam)rå   ræ   rä   )rå   ræ   rç   z	spam/alotz
/spam/alots	   /usr/lib/zusr/lib/python3s   usr/lib/s   /usr/lib/python3s   usr/lib/python3zusr/lib/)r¤   r¨   r3   rß   rØ   )r   rá   rã   r   r&   r   Útest_commonpath)  s\    
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzPosixPathTest.test_commonpath)9Ú__name__Ú
__module__Ú__qualname__r'   r%   r5   rF   rM   rP   rS   rT   rU   rd   rf   rl   r   Z
skipUnlessr   r^   rm   ZskipIfro   rx   rz   r|   r…   r‘   r”   r   r#   r   rœ   r    Úhasattrr   r¢   r¦   r­   r¯   r°   Zskip_unless_symlinkr½   r¾   r¿   rÄ   rÆ   rÇ   rÊ   rÎ   Úsupports_follow_symlinksr©   rª   rÐ   rÒ   rÖ   rÙ   rè   r   r   r   r   r$   ;   sÒ   
ÿ


'		ÿÿ
Wÿÿ'ÿ'ÿÿÿÿÿ"r$   c                   @   s   e Zd ZeZg d¢ZdS )ÚPosixCommonTest)r®   ÚsamefileÚsameopenfileÚsamestatN)ré   rê   rë   r3   Z
pathmoduleZ
attributesr   r   r   r   rî   `  s   rî   c                   @   sÄ   e Zd Ze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i d#d$id#eiƒd%d&„ ƒZd'd(„ Zd)d*„ Zd+S ),ÚPathLikeTestsc                 C   s`   t j| _tt jƒ| _|  t j| j¡ t| jddƒ}| d¡ W d   ƒ n1 sR0    Y  d S )NÚxbr   s   test_posixpath.PathLikeTests)	r   r,   Ú	file_namer
   Ú	file_pathZ
addCleanupr+   r\   r]   )r   Úfiler   r   r   r'   i  s
    zPathLikeTests.setUpc                 C   s   |   || jƒ|| jƒ¡ d S r   )r2   rõ   rô   )r   r   r   r   r   ÚassertPathEqualp  s    zPathLikeTests.assertPathEqualc                 C   s   |   | jj¡ d S r   )r÷   rJ   Únormcaser&   r   r   r   Útest_path_normcases  s    z PathLikeTests.test_path_normcasec                 C   s   |   | jj¡ d S r   )r÷   rJ   rR   r&   r   r   r   Útest_path_isabsv  s    zPathLikeTests.test_path_isabsc                 C   s,   |   | j dtdƒd¡| j ddd¡¡ d S )Nr¹   Úbr»   )r2   rJ   r4   r
   r&   r   r   r   Útest_path_joiny  s    ÿzPathLikeTests.test_path_joinc                 C   s   |   | jj¡ d S r   )r÷   rJ   rE   r&   r   r   r   Útest_path_split}  s    zPathLikeTests.test_path_splitc                 C   s   |   | jj¡ d S r   )r÷   rJ   rH   r&   r   r   r   Útest_path_splitext€  s    z PathLikeTests.test_path_splitextc                 C   s   |   | jj¡ d S r   )r÷   rJ   Ú
splitdriver&   r   r   r   Útest_path_splitdriveƒ  s    z"PathLikeTests.test_path_splitdrivec                 C   s   |   | jj¡ d S r   )r÷   rJ   r   r&   r   r   r   Útest_path_basename†  s    z PathLikeTests.test_path_basenamec                 C   s   |   | jj¡ d S r   )r÷   rJ   r   r&   r   r   r   Útest_path_dirname‰  s    zPathLikeTests.test_path_dirnamec                 C   s   |   | jj¡ d S r   )r÷   rJ   rZ   r&   r   r   r   Útest_path_islinkŒ  s    zPathLikeTests.test_path_islinkc                 C   s   |   | jj¡ d S r   )r÷   rJ   r[   r&   r   r   r   Útest_path_lexists  s    zPathLikeTests.test_path_lexistsc                 C   s   |   | jj¡ d S r   )r÷   rJ   re   r&   r   r   r   Útest_path_ismount’  s    zPathLikeTests.test_path_ismountc                 C   s   |   | jj¡ d S r   )r÷   rJ   r{   r&   r   r   r   Útest_path_expanduser•  s    z"PathLikeTests.test_path_expanduserc                 C   s   |   | jj¡ d S r   )r÷   rJ   Ú
expandvarsr&   r   r   r   Útest_path_expandvars˜  s    z"PathLikeTests.test_path_expandvarsc                 C   s   |   | jj¡ d S r   )r÷   rJ   r“   r&   r   r   r   Útest_path_normpath›  s    z PathLikeTests.test_path_normpathc                 C   s   |   | jj¡ d S r   )r÷   rJ   r   r&   r   r   r   Útest_path_abspathž  s    zPathLikeTests.test_path_abspathr•   Tc                 C   s,   |   | jj¡ |   t| jjfi |¤Ž¡ d S r   )r÷   rJ   r   r   r›   r   r   r   Útest_path_realpath¡  s    z PathLikeTests.test_path_realpathc                 C   s   |   | jj¡ d S r   )r÷   rJ   r®   r&   r   r   r   Útest_path_relpath§  s    zPathLikeTests.test_path_relpathc                 C   s&   | j  | j| jg¡}|  || j¡ d S r   )rJ   rß   rõ   rô   r2   )r   Zcommon_pathr   r   r   Útest_path_commonpathª  s    z"PathLikeTests.test_path_commonpathN)ré   rê   rë   r3   rJ   r'   r÷   rù   rú   rü   rý   rþ   r   r  r  r  r  r  r  r  r	  r
  r#   r   r  r  r  r   r   r   r   rò   e  s,   
rò   Ú__main__)r   r©   r3   r   Ú	functoolsr   r   r   r   r   r   r   r   r	   Ztest.supportr
   r   ro   ÚImportErrorr,   r   r   r   r#   ZTestCaser$   Z
CommonTestrî   rò   ré   Úmainr   r   r   r   Ú<module>   s8   


      +J
