o
    HXî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 d dlmZ d dlmZ d dlmZ d d	lmZ zd dlZW n eyY   dZY nw 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 dS )é    N)Úpartial)ÚrealpathÚabspathÚdirnameÚbasenameÚALLOW_MISSING)Úsupport)Útest_genericpath)Úimport_helper)Ú	os_helper)ÚFakePath)Úmockc                 C   s$   	 dt v }d}| t |¡| ƒg| S )Nú\z'ABSTFN is not a posix path - tests fail)ÚABSTFNÚunittestÚskip)ÚtestZfound_backslashÚmsg© r   ú=/opt/python-3.10.19/usr/lib/python3.10/test/test_posixpath.pyÚ!skip_if_ABSTFN_contains_backslash   s   r   c                 C   s&   zt  | ¡ W d S  ty   Y d S w ©N)ÚosÚrmdirÚOSError)r   r   r   r   Ú
safe_rmdir#   s
   ÿr   c                     s   	 ‡ fdd„}|S )Nc                    s   ‡ ‡fdd„}|S )Nc              	      sR   ˆD ]$}|   |¡ ˆ | g|¢|‘R i |¤Ž W d   ƒ n1 s!w   Y  qd S r   )ÚsubTest)ÚselfÚargsÚkwargsZ	parameter)ÚfuncÚ
parametersr   r   Ú_parameterized5   s   ÿ€ÿzE_parameterize.<locals>._parametrize_decorator.<locals>._parameterizedr   )r    r"   ©r!   )r    r   Ú_parametrize_decorator4   s   z-_parameterize.<locals>._parametrize_decoratorr   )r!   r$   r   r#   r   Ú_parameterize)   s   
r%   c                   @   sz  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e ejd&kd'¡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ƒd0d1„ ƒƒZ"e e#e$d2ƒd3¡eei d,e iƒd4d5„ ƒƒƒZ%e e#e$d2ƒd3¡ed6d7„ ƒƒZ&d8d9„ Z'e e#e$d2ƒd3¡eei d,e iƒd:d;„ ƒƒƒZ(e e#e$d2ƒd3¡eei d,e iƒd<d=„ ƒƒƒZ)ej*ed>d?„ ƒƒZ+e e#e$d2ƒd3¡eed,d-id,e iƒd@dA„ ƒƒƒZ,e e#e$d2ƒd3¡eei d,d-id,e iƒdBdC„ ƒƒƒZ-e e#e$d2ƒd3¡eei d,d-id,e iƒdDdE„ ƒƒƒZ.e e#e$d2ƒd3¡eei d,e iƒdFdG„ ƒƒƒZ/e e#e$d2ƒd3¡eei d,d-id,e iƒdHdI„ ƒƒƒZ0e e#e$d2ƒd3¡eei d,d-id,e iƒdJdK„ ƒƒƒZ1ej*ee e$j2e$j3vdL¡e ejdMkdN¡ed,d-id,e iƒdOdP„ ƒƒƒƒƒZ4eej*dQdR„ ƒƒZ5dSdT„ Z6dUdV„ Z7dWdX„ Z8dS )YÚ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'   B   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_joinG   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)r0   r1   ú/)r9   r*   Úfoo)r*   r:   ú////foo)ú////r:   ú
//foo//bar)ú//foor1   ó   /foo/bar)r2   r3   ó   /)r@   ó    ó   foo)rA   rB   ó   ////foo)ó   ////rB   ó
   //foo//bar)ó   //foor3   )r4   r5   Úsplitr(   r   r   r   Ú
test_splitU   ó   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 )Nr9   zabc/zabc.def/z	/abc.def/r*   ÚASCIIr@   s   abc/s   abc.def/s	   /abc.def/rA   )r4   r5   ÚsplitextÚbytes)r   ÚpathÚfilenameÚextr   r   r   ÚsplitextTestb   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.barr:   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........)rP   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*   Fr9   Tr0   r8   zfoo/barrA   r@   r2   r?   s   foo/bar)ÚassertIsr5   Úisabsr(   r   r   r   Ú
test_isabsŒ   rI   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 )Nr8   r1   r9   r*   r:   r;   r=   r?   r3   r@   rA   rB   rC   rE   )r4   r5   r   r(   r   r   r   Útest_basename™   rI   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 )Nr8   r0   r9   r:   r*   r;   r<   r=   r>   r?   r2   r@   rB   rA   rC   rD   rE   rF   )r4   r5   r   r(   r   r   r   Útest_dirname¦   rI   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 s0w   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,   ÚwbrB   Tu   í¿¿ó   ÿú ó    )rT   r5   Úislinkr   r.   ÚlexistsÚopenÚwriteÚcan_symlinkr   ÚsymlinkÚremoveÚexistsÚfsencode)r   Úfr   r   r   Útest_islink³   s"   ÿ"zPosixPathTest.test_islinkc                 C   sT   |   t d¡d¡ |   t d¡d¡ |   t tdƒ¡d¡ |   t tdƒ¡d¡ d S )Nr9   Tr@   )rT   r5   Úismountr   r(   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ƒ w |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )NFõ   /í¿¿ó   /ÿú/ ó   / )rT   r5   rh   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¡ d S t  t¡ w )Nr9   F)r   rb   r   rT   r5   rh   r-   r(   r   r   r   Útest_ismount_symlinksÜ   s   z#PosixPathTest.test_ismount_symlinksNzTest requires posix modulec                 C   ó<   t j}dd„ }z|t _|  t t¡d¡ W |t _d S |t _w )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©rM   Úst_inoÚst_devr   r   r   Ú
fake_lstatë   s   z?PosixPathTest.test_ismount_different_device.<locals>.fake_lstatT©r   ÚlstatrT   r5   rh   r   ©r   Z
save_lstatrx   r   r   r   Útest_ismount_different_deviceæ   s   z+PosixPathTest.test_ismount_different_devicec                 C   rq   )Nc                 S   sP   d}d}|   t¡r| tkrtdƒ‚| tkrd}d}t d||dddddddf
¡S )Nr   z!Fake [Errno 13] Permission deniedrr   )Ú
startswithr   r   rs   rt   ru   r   r   r   rx   ý   s   zEPosixPathTest.test_ismount_directory_not_readable.<locals>.fake_lstatTry   r{   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 )Nr:   rB   )r4   r5   Ú
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 ]7}| j|d' ||d< |  t d¡d¡ |  t d¡d¡ |  t d	¡d
¡ W d   ƒ n1 sSw   Y  q!W d   ƒ d S 1 sdw   Y  d S )Nz/home/victorÚHOMEú~z/home/victor/)r9   r*   ú//ú///)Úhomer9   ú~/z~/foor0   )r   ÚEnvironmentVarGuardr4   r5   r   r   )r   Úenvr…   r   r   r   Útest_expanduser_home_envvar  s   
ü€ÿ"øz)PosixPathTest.test_expanduser_home_envvarÚvxworkszno home directory on VxWorksc              
   C   s°  t  d¡}|  t d¡t¡ |  t d¡t¡ t d¡dkr:|  t d¡d t d¡¡ |  t d¡d t d¡¡ |  t d¡t¡ |  t d	¡t¡ |  t d
¡t¡ |  t d¡t¡ t 	¡ l}|d= | 
t ¡ ¡j}| d¡ptd}|  t d¡|¡ tjj|dtd/ tjj|dtd dD ]}|  t |¡|¡ q”W d   ƒ n1 sªw   Y  W d   ƒ n1 s¹w   Y  W d   ƒ d S W d   ƒ d S 1 sÑw   Y  d S )NÚpwdr†   s   ~/r‚   r9   ó   ~r@   z~root/z~foo/s   ~root/s   ~foo/r   Úgetpwuid)Zside_effectÚgetpwnam)r‚   z~/.localz
~vstinner/)r
   Úimport_moduleZassertIsInstancer5   r   ÚstrrL   r4   r   r‡   r   r   ÚgetuidÚpw_dirÚrstripr   ZpatchÚobjectÚKeyError)r   r‹   rˆ   r…   rM   r   r   r   Útest_expanduser_pwd"  sB   
þþ
ÿÿþ€ ó"ó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*   rQ   r9   rƒ   r„   z///foo/.//bar//r8   z///foo/.//bar//.//..//.//bazz/foo/bazz///..//./foo/.//barrA   ó   .r@   s   //s   ///s   ///foo/.//bar//r?   s   ///foo/.//bar//.//..//.//bazs   /foo/bazs   ///..//./foo/.//bar)r4   r5   Únormpathr(   r   r   r   Útest_normpathK  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 )NrQ   ú./.r9   éd   r—   ó   ./.r@   )rQ   )r›   )r—   )r   )r4   r   r   Úgetcwdr6   Úgetcwdb©r   r   r   r   r   Útest_realpath_curdir_  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 )NrR   ú../..r9   rœ   ó   ..ó   ../..r@   )rR   )r¢   )r£   )r¤   )r4   r   r   r   rž   r6   rŸ   r    r   r   r   Útest_realpath_pardirj  s   "$"(z"PosixPathTest.test_realpath_pardirrb   zMissing symlink implementationc              	   C   sJ   zt  td t¡ |  ttfi |¤Žtd ¡ W t t¡ d S t t¡ w ©Nr+   )r   rb   r   r4   r   r   r-   r    r   r   r   Útest_realpath_basicu  s   z!PosixPathTest.test_realpath_basicc              	   C   sV   z$t  td t¡ | jtttdd | jtttd dd W t t¡ d S t t¡ w )Nr+   T©rš   r,   )r   rb   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|¡ n| j tt|dd | j tt|dd | j tt|td d}tjdkrF|  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¡ n| 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r6| j t	t|dd | j t	t|td n
|  t|dd|¡ | j tt|dd d S )Nrl   Fr¨   Trm   z/nonexistent/x s   /nonexistent/x z/ /..s   / /..z/nonexistent/x /..s   /nonexistent/x /..rj   Úwin32u   /nonexistent/í¿¿u   /í¿¿/..r9   u   /nonexistent/í¿¿/..z/nonexistentrk   s   /nonexistent/ÿ)
r©   Ú
ValueErrorr   r   rª   ÚsysÚplatformr4   ÚUnicodeEncodeErrorÚUnicodeDecodeError)r   rM   r   r   r   Útest_realpath_invalid_pathsŽ  s˜   z)PosixPathTest.test_realpath_invalid_pathsc              	   C   sP   z!t  t td ¡t¡ |  ttfi |¤Žtd ¡ W t t¡ d S t t¡ w r¦   )	r   rb   r5   Úrelpathr   r4   r   r   r-   r    r   r   r   Útest_realpath_relativeå  s   z$PosixPathTest.test_realpath_relativec              	   C   sX   z$t  tjd tj¡ |  tdtj fi |¤Žtd ¡ W t tj¡ d S t tj¡ w )Nr+   znonexistent/../)r   rb   r   r.   r4   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   ƒ n31 sæw   Y  W t 	t¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ d S W t 	t¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ d S t 	t¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ t 	td ¡ w )Nr+   r,   ú1/xú1/..ú1/../xú/xÚxÚyú1/../úa/bÚaú../r9   Úc)
r   rb   r   r4   r   r   r   r   Ú
change_cwdr-   r(   r   r   r   Útest_realpath_symlink_loopsü  sb   ÿÿÿÿÿÿ
ø

ûz)PosixPathTest.test_realpath_symlink_loopsc              
   C   sî  zLt  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   ƒ n31 sów   Y  W t 
t¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td
 ¡ d S W t 
t¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td
 ¡ d S t 
t¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td ¡ t 
td
 ¡ w )Nr+   r,   r¶   r·   r¸   rº   r»   r¼   r½   r¾   r¿   r9   rÀ   )r   rb   r   r©   r   r   r   r   r   rÁ   r-   r    r   r   r   Ú"test_realpath_symlink_loops_strict%  sj   ÿÿÿÿÿÿÿÿ
ø

ûz0PosixPathTest.test_realpath_symlink_loops_strictc              
   C   s    z<t  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ƒ d S t td ¡ t td ¡ t	tƒ w )Nr¿   z/selfzself/self/selfz/link)
r   rn   r   rb   r   r4   r   r   r-   r   r    r   r   r   Ú(test_realpath_repeated_indirect_symlinksP  s   
þ
z6PosixPathTest.test_realpath_repeated_indirect_symlinksc                 C   s  d}zpt  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 sUw   Y  W t|d ƒD ]}t 
td|  ¡ qattƒ d S t|d ƒD ]}t 
td|  ¡ qyttƒ w )Né
   r9   z%dz/%drr   rQ   z/0)r   rn   r   Úrangerb   r6   r4   r   r   rÁ   r-   r   )r   r   ÚdepthÚir   r   r   Útest_realpath_deep_recursion`  s"   
* ÿ€þ
z*PosixPathTest.test_realpath_deep_recursionc              
   C   sê   zbt  t¡ t  td ¡ t  td td ¡ t td ¡ |  tdi |¤Žtd ¡ W d   ƒ n1 s6w   Y  W t td ¡ t	td ƒ t	tƒ d S W t td ¡ t	td ƒ t	tƒ d S t td ¡ t	td ƒ t	tƒ w )Nz/yú/kr¾   z/y/a)r¾   )
r   rn   r   rb   r   rÁ   r4   r   r-   r   r    r   r   r   Útest_realpath_resolve_parentsu  s&   	
ÿÿúþ
z+PosixPathTest.test_realpath_resolve_parentsc              
   C   sF  zŠt  t¡ t  td ¡ t  td ¡ t  td td ¡ |  ttd fi |¤Žtd ¡ t ttƒ¡ |  tt	tƒd fi |¤Žtd ¡ W d   ƒ n"1 sRw   Y  W t 
td ¡ ttd ƒ ttd ƒ ttƒ d S W t 
td ¡ ttd ƒ ttd ƒ ttƒ d S t 
td ¡ ttd ƒ ttd ƒ ttƒ w )NrÊ   z/k/yz/link-yz
/link-y/..)r   rn   r   rb   r4   r   r   rÁ   r   r   r-   r   r    r   r   r   Ú(test_realpath_resolve_before_normalizing‹  s0   
 ÿÿùý
z6PosixPathTest.test_realpath_resolve_before_normalizingc              
   C   s  zut  t¡ t  td ¡ t  ttd ¡ t ttƒ¡* ttƒ}|  t	|d fi |¤Žt¡ |  t	|d fi |¤Žtd ¡ W d   ƒ n1 sIw   Y  W t 
td ¡ ttd ƒ ttƒ d S W t 
td ¡ ttd ƒ ttƒ d S t 
td ¡ ttd ƒ ttƒ w )NrÊ   Úlinkzlink/k)r   rn   r   rb   r   rÁ   r   r   r4   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   st  z«t  td t¡ t jtddd |  t¡ ttfi |¤Ž W d   ƒ n1 s)w   Y  |  t¡ ttd fi |¤Žf W d   ƒ n1 sIw   Y  |  t¡ ttd fi |¤Ž W d   ƒ n1 shw   Y  |  t¡ ttd fi |¤Ž W d   ƒ n1 s‡w   Y  W t jtddd t  t¡ d S W t jtddd t  t¡ d S t jtddd t  t¡ w )	Nr+   r   F)Úfollow_symlinksr0   z/../fooz/foo/..éí  )r   rb   r   Úchmodr©   ÚPermissionErrorr   r-   r    r   r   r   Ú'test_realpath_unreadable_symlink_strict¾  s,   ÿÿÿÿüÿz5PosixPathTest.test_realpath_unreadable_symlink_strictc              
   C   sf  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yA   Y nw |  	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ƒ d S t  td¡ ttd ƒ ttƒ w )	NrÊ   r   Fr¨   TzCannot block permissionsz/missingrÒ   )r   rn   r   rÓ   r4   r   r   ÚstatrÔ   ZskipTestr©   r   r(   r   r   r   Ú"test_realpath_unreadable_directoryÓ  sJ   
ÿ
ÿÿÿÿÿÿþ
z0PosixPathTest.test_realpath_unreadable_directoryc                 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¡ W |t _d S |t _w )Nc                   S   ó   dS )Nz/home/user/barr   r   r   r   r   Ú<lambda>ø  ó    z,PosixPathTest.test_relpath.<locals>.<lambda>éÿÿÿÿr*   r¾   r½   z../a/bz../br¿   z/az../cz/a/bzb/cz../../arQ   z/foo/bar/batz/x/y/zz../../../foo/bar/batr8   Zbatr9   zfoo/bar/batz../../..r¹   z../foo/bar/batz
../../../x)
r   rž   rM   rG   r©   r­   r5   r³   r4   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 _d S |t _w )Nc                   S   rØ   )Ns   /home/user/barr   r   r   r   r   rÙ     rÚ   z2PosixPathTest.test_relpath_bytes.<locals>.<lambda>rÛ   rA   ó   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Ÿ   rM   rG   r©   r­   r5   r³   r4   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   ó   g | ]}t  |¡‘qS r   ©r   re   ©Ú.0Úpr   r   r   Ú
<listcomp>2  ó    z@PosixPathTest.test_commonpath.<locals>.check.<locals>.<listcomp>)r4   r5   Ú
commonpathr   re   )ÚpathsZexpectedr(   r   r   Úcheck0  s   ÿz,PosixPathTest.test_commonpath.<locals>.checkc                    s.   ˆ   | tj|¡ ˆ   | tjdd„ |D ƒ¡ d S )Nc                 S   rá   r   râ   rã   r   r   r   ræ   7  rç   zFPosixPathTest.test_commonpath.<locals>.check_error.<locals>.<listcomp>)r©   r5   rè   )Úexcré   r(   r   r   Úcheck_error4  s   
ÿz2PosixPathTest.test_commonpath.<locals>.check_errorz/usrZusrz
/usr/localz/usr/local/z/usr//localz//usr/localz/usr/./localz/./usr/localr9   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­   r5   rè   rß   )r   rê   rì   r   r(   r   Útest_commonpath/  s\   
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzPosixPathTest.test_commonpath)9Ú__name__Ú
__module__Ú__qualname__r)   r'   r7   rH   rP   rS   rV   rW   rX   rg   ri   ro   r   Z
skipUnlessr   ra   rp   ZskipIfrs   r|   r~   r€   r‰   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&   =   sÚ    
ÿ


ÿ
'		ÿÿ
Wÿÿ'ÿ'ÿÿÿÿÿ"r&   c                   @   s   e Zd ZeZg d¢ZdS )ÚPosixCommonTest)r³   ÚsamefileÚsameopenfileÚsamestatN)rò   ró   rô   r5   Z
pathmoduleZ
attributesr   r   r   r   r÷   f  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   sb   t j| _tt jƒ| _|  t j| j¡ t| jddƒ}| d¡ W d   ƒ d S 1 s*w   Y  d S )NÚxbr   s   test_posixpath.PathLikeTests)	r   r.   Ú	file_namer   Ú	file_pathZ
addCleanupr-   r_   r`   )r   Úfiler   r   r   r)   o  s   "ÿzPathLikeTests.setUpc                 C   s   |   || jƒ|| jƒ¡ d S r   )r4   rþ   rý   )r   r    r   r   r   ÚassertPathEqualv  s   zPathLikeTests.assertPathEqualc                 C   ó   |   | jj¡ d S r   )r   rM   Únormcaser(   r   r   r   Útest_path_normcasey  ó   z PathLikeTests.test_path_normcasec                 C   r  r   )r   rM   rU   r(   r   r   r   Útest_path_isabs|  r  zPathLikeTests.test_path_isabsc                 C   s,   |   | j dtdƒd¡| j ddd¡¡ d S )Nr¾   ÚbrÀ   )r4   rM   r6   r   r(   r   r   r   Útest_path_join  s   ÿzPathLikeTests.test_path_joinc                 C   r  r   )r   rM   rG   r(   r   r   r   Útest_path_splitƒ  r  zPathLikeTests.test_path_splitc                 C   r  r   )r   rM   rK   r(   r   r   r   Útest_path_splitext†  r  z PathLikeTests.test_path_splitextc                 C   r  r   )r   rM   Ú
splitdriver(   r   r   r   Útest_path_splitdrive‰  r  z"PathLikeTests.test_path_splitdrivec                 C   r  r   )r   rM   r   r(   r   r   r   Útest_path_basenameŒ  r  z PathLikeTests.test_path_basenamec                 C   r  r   )r   rM   r   r(   r   r   r   Útest_path_dirname  r  zPathLikeTests.test_path_dirnamec                 C   r  r   )r   rM   r]   r(   r   r   r   Útest_path_islink’  r  zPathLikeTests.test_path_islinkc                 C   r  r   )r   rM   r^   r(   r   r   r   Útest_path_lexists•  r  zPathLikeTests.test_path_lexistsc                 C   r  r   )r   rM   rh   r(   r   r   r   Útest_path_ismount˜  r  zPathLikeTests.test_path_ismountc                 C   r  r   )r   rM   r   r(   r   r   r   Útest_path_expanduser›  r  z"PathLikeTests.test_path_expanduserc                 C   r  r   )r   rM   Ú
expandvarsr(   r   r   r   Útest_path_expandvarsž  r  z"PathLikeTests.test_path_expandvarsc                 C   r  r   )r   rM   r˜   r(   r   r   r   Útest_path_normpath¡  r  z PathLikeTests.test_path_normpathc                 C   r  r   )r   rM   r   r(   r   r   r   Útest_path_abspath¤  r  zPathLikeTests.test_path_abspathrš   Tc                 C   s,   |   | jj¡ |   t| jjfi |¤Ž¡ d S r   )r   rM   r   r   r    r   r   r   Útest_path_realpath§  s   z PathLikeTests.test_path_realpathc                 C   r  r   )r   rM   r³   r(   r   r   r   Útest_path_relpath­  r  zPathLikeTests.test_path_relpathc                 C   s&   | j  | j| jg¡}|  || j¡ d S r   )rM   rè   rþ   rý   r4   )r   Zcommon_pathr   r   r   Útest_path_commonpath°  s   z"PathLikeTests.test_path_commonpathN)rò   ró   rô   r5   rM   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û   k  s.    
rû   Ú__main__)"r   r5   r®   r   Ú	functoolsr   r   r   r   r   r   r   r   r	   Ztest.supportr
   r   Ztest.support.os_helperr   r   rs   ÚImportErrorr.   r   r   r   r%   ZTestCaser&   Z
CommonTestr÷   rû   rò   Úmainr   r   r   r   Ú<module>   sB    ÿ

      /Jÿ