
    7bh                        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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mZ d dlmZ d d	lmZ 	 d dlZ eej0                        Zd
 Zd Zd Z G d dej:                        Z G d dej>                  ej:                        Z  G d dej:                        Z!e"dk(  r ejF                          yy# e$ r dZY w xY w)    N)partial)realpathabspathdirnamebasenameALLOW_MISSING)support)test_genericpath)import_helper)cpython_only	os_helper)FakePath)mockc                 X    	 dt         v }d}|  t        j                  |      |       g|   S )N\z'ABSTFN is not a posix path - tests fail)ABSTFNunittestskip)testfound_backslashmsgs      =/opt/python-3.12.12/usr/lib/python3.12/test/test_posixpath.py!skip_if_ABSTFN_contains_backslashr      s8    
 fnO
3C$(--$T*+O<<    c                 N    	 t        j                  |        y # t        $ r Y y w xY wN)osrmdirOSError)r   s    r   
safe_rmdirr    $   s%    
 s    	$$c                       	  fd}|S )Nc                       fd}|S )Nc                 |    D ]*  }| j                  |      5   | g||i | d d d        , y # 1 sw Y   7xY wr   )subTest)selfargskwargs	parameterfunc
parameterss       r   _parameterizedzE_parameterize.<locals>._parametrize_decorator.<locals>._parameterized6   s?    '	\\),::i:6: -, (,,s   2;	 )r)   r+   r*   s   ` r   _parametrize_decoratorz-_parameterize.<locals>._parametrize_decorator5   s    	; r   r,   )r*   r-   s   ` r   _parameterizer.   *   s    	 "!r   c            	          e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zej"                  d        Z ej(                  edu d      d        Z ej(                  edu d      d        Zd Z ej(                  ej4                  dk(  d      ed               Zd Zd Z ej(                  ej4                  dk(  d      d        Z ej(                  ej4                  dk(  d      d        Z g dZ!d Z"e# e$i dd ide%i      d!               Z&e# e$i dd ide%i      d"               Z'ej"                  e# e$i de%i      d#                      Z(ej"                  e#d$               Z)d% Z*ej"                  e# e$i de%i      d&                      Z+ej"                  e# e$i de%i      d'                      Z,ej"                  e#d(               Z-ej"                  e# e$dd ide%i      d)                      Z.ej"                  e# e$i dd ide%i      d*                      Z/ej"                  e# e$i dd ide%i      d+                      Z0ej"                  e# e$i de%i      d,                      Z1ej"                  e# e$i dd ide%i      d-                      Z2ej"                  e# e$i dd ide%i      d.                      Z3ej"                  e# ej(                  e4jj                  e4jl                  vd/       ej(                  ej4                  d0k7  d1       e$dd ide%i      d2                                    Z7e#ej"                  d3               Z8d4 Z9d5 Z:d6 Z;y)7PosixPathTestc                 $    | j                          y r   )tearDownr%   s    r   setUpzPosixPathTest.setUp@   s    r   c                     dD ]D  }t        j                  t         j                  |z          t        t         j                  |z          F y )N) 12)r   unlinkTESTFNr    )r%   suffixs     r   r2   zPosixPathTest.tearDownC   s8    $FY--67y''&01 %r   c                    | j                  t        j                  dddd      d       | j                  t        j                  ddd      d       | j                  t        j                  ddd	      d
       | j                  t        j                  dddd      d       | j                  t        j                  ddd      d       | j                  t        j                  ddd      d       y )N/foobar/barbaz/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joinr3   s    r   	test_joinzPosixPathTest.test_joinH   s    vuE#	%u=~N@(	* 	&I$	&@(	*'7C)	+r   c                    | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d	      d
       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       y )N/foo/bar)r=   r>   /)rJ   r6   foo)r6   rK   ////foo)////rK   
//foo//bar)//foor>      /foo/bar)rB   rC      /)rQ   r      foo)r   rR      ////foo)   ////rR   
   //foo//bar)   //foorC   )rD   rE   splitr3   s    r   
test_splitzPosixPathTest.test_splitV   s    4oF-y9/=3_E68HI57HI.<0-@46GH79KLr   c                 x   | j                  t        j                  |      ||f       | j                  t        j                  d|z         d|z   |f       | j                  t        j                  d|z         d|z   |f       | j                  t        j                  d|z         d|z   |f       | j                  t        j                  d|z         d|z   |f       | j                  t        j                  |dz         ||z   dz   df       t        |d      }t        |d      }t        |d      }| j                  t        j                  |      ||f       | j                  t        j                  d|z         d|z   |f       | j                  t        j                  d|z         d|z   |f       | j                  t        j                  d	|z         d	|z   |f       | j                  t        j                  d
|z         d
|z   |f       | j                  t        j                  |dz         ||z   dz   df       y )NrJ   zabc/zabc.def/z	/abc.def/r6   ASCIIrQ   s   abc/s   abc.def/s	   /abc.def/r   )rD   rE   splitextbytes)r%   pathfilenameexts       r   splitextTestzPosixPathTest.splitextTestc   s%   ++D1Hc?C++C$J7#.#9NO++FTM: 8+S1	3++J,=>$x/5	7++K$,>?%0#6	8++D3J7"S.3.3	5 T7#7+C!++D1Hc?C++D4K8/3/	1++GdN;!H,c2	4++K$,>?%0#6	8++L4,?@&137	9++D4K8"S.4/5	7r   c                    | j                  ddd       | j                  ddd       | j                  ddd       | j                  dd	d
       | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd       y )Nzfoo.barrK   z.barzfoo.boo.barzfoo.boozfoo.boo.biff.barzfoo.boo.biffz.csh.rcz.cshz.rcnodotsr6   z.cshrcz...manydotsz...manydots.extz.ext...z........)r`   r3   s    r   test_splitextzPosixPathTest.test_splitext   s    )UF3-F;,nfE)VU3(Hb1(Hb1-;+]FC#sB'$b)*j"5"b"%r   c                    t         j                  }| j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d	      d
       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d        | j                   |d!      d"       | j                   |d#      d$       y )%Nr6   )r6   r6   r6   a)r6   r6   rg   a/b)r6   r6   rh   a/b/)r6   r6   ri   /a)r6   rJ   rg   /a/b)r6   rJ   rh   z/a/b/)r6   rJ   ri   //a)r6   //rg   z///a)r6   rJ   rl   z///a/b)r6   rJ   z//a/bc:/a/b)r6   r6   rn   \/a/b)r6   r6   ro   \a\b)r6   r6   rp   r   )r   r   r      a)r   r   rq      /a)r   rQ   rq      //a)r   s   //rq   s   ///a)r   rQ   rs   )rE   	splitrootrD   r%   fs     r   test_splitrootzPosixPathTest.test_splitroot   s   2-3/5?36$454.16$457%67 	5?36$458&898&898&898&89314"235#456$677%89r   c                    | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d	      d       | j                  t        j                  d
      d       | j                  t        j                  d      d       | j                  t        j                  d      d       y )Nr6   FrJ   Tr=   rI   zfoo/barr   rQ   rB   rP   s   foo/bar)assertIsrE   isabsr3   s    r   
test_isabszPosixPathTest.test_isabs   s    ioob)51iooc*D1ioof-t4iooj148iooi0%8iooc*E2iood+T2ioog.5iook2D9iooj159r   c                    | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d	       | j                  t        j                  d
      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d	       y )NrI   r>   rJ   r6   rK   rL   rN   rP   rC   rQ   r   rR   rS   rU   )rD   rE   r   r3   s    r   test_basenamezPosixPathTest.test_basename   s   ++J7?++C0"5++E2E:++I6>++L95A++K8&A++D137++F3V<++J7@++M:FCr   c                    | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d	       | j                  t        j                  d
      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       y )NrI   r=   rJ   rK   r6   rL   rM   rN   rO   rP   rB   rQ   rR   r   rS   rT   rU   rV   )rD   rE   r   r3   s    r   test_dirnamezPosixPathTest.test_dirname   s   **:6?**3/5**5126**95v>**<8'B**;7A**40$7**62C8**:6@**=98Dr   c                 b   | j                  t        j                  t        j                  dz         d       | j                  t        j
                  t        j                  dz         d       t        t        j                  dz   d      5 }|j                  d       d d d        | j                  t        j                  t        j                  dz         d       t        j                         r6t        j                  t        j                  dz   t        j                  dz          | j                  t        j                  t        j                  dz         d       t        j                  t        j                  dz          | j                  t        j                  t        j                  dz         d       | j                  t        j                  t        j                  dz         d       | j                  t        j
                  t        j                  dz         d       | j                  t        j                  t        j                  dz         d       | j                  t        j                  t        j                  t        j                        dz         d       | j                  t        j                  t        j                  d	z         d       | j                  t        j                  t        j                  t        j                        d
z         d       y # 1 sw Y   xY w)Nr7   Fr8   wbrR   Tu           )ry   rE   islinkr   r:   lexistsopenwritecan_symlinkr   symlinkremoveexistsfsencoderu   s     r   test_islinkzPosixPathTest.test_islink   s   i&&y'7'7#'=>Fi''	(8(83(>?G)""S($/1GGFO 0i&&y'7'7#'=>F  "JJy''#-y/?/?#/EFMM)**9+;+;c+ABDIIIi&&,-MM)**9+;+;c+ABDIMM)**9+;+;c+ABEJMM)++I,<,<s,BCTJi&&y'7'7('BCUKi&&r{{93C3C'Dw'NOQVWi&&y'7'7&'@A5Ii&&r{{93C3C'Dw'NOQVW 0/s   
L$$L.c                 P   | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  t        d            d       | j                  t        j                  t        d            d       y )NrJ   TrQ   )ry   rE   ismountr   r3   s    r   test_ismountzPosixPathTest.test_ismount   sn    i'',d3i''-t4i''6=i''7>r   c                 J   | j                  t        j                  t              d       	 t	        j
                  t               | j                  t        j                  t              d       t        t               | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       y # t        t               w xY w)NF   /   //    / )ry   rE   r   r   r   mkdirr    r3   s    r   test_ismount_non_existentz'PosixPathTest.test_ismount_non_existent   s    i''/7	HHVMM)++F3U;vi''	2E:i''159i''0%8i''159 vs   AD D"c                     	 t        j                  dt               | j                  t	        j
                  t              d       t        j                  t               y # t        j                  t               w xY w)NrJ   F)r   r   r   ry   rE   r   r9   r3   s    r   test_ismount_symlinksz#PosixPathTest.test_ismount_symlinks   sG    	JJsF#MM)++F3U;IIfBIIfs   AA A:NzTest requires posix modulec                     t         j                  }d }	 |t         _        | j                  t        j                  t
              d       |t         _        y # |t         _        w xY w)Nc                 b    d}d}| t         k(  rd}d}t        j                  d||dddddddf
      S )Nr      )r   posixstat_resultr]   st_inost_devs      r   
fake_lstatz?PosixPathTest.test_ismount_different_device.<locals>.fake_lstat  sC    FFv~$$aAq!Q1%MNNr   Tr   lstatry   rE   r   r   r%   
save_lstatr   s      r   test_ismount_different_devicez+PosixPathTest.test_ismount_different_device   sG     XX
	O	"!BHMM)++F3T:!BHzBH   4A A"c                     t         j                  }d }	 |t         _        | j                  t        j                  t
              d       |t         _        y # |t         _        w xY w)Nc                     d}d}| j                  t              r| t        k7  rt        d      | t        k(  rd}d}t        j                  d||dddddddf
      S )Nr   z!Fake [Errno 13] Permission deniedr   )
startswithr   r   r   r   r   s      r   r   zEPosixPathTest.test_ismount_directory_not_readable.<locals>.fake_lstat  sc    FFv&46> ABBv~$$aAq!Q1%MNNr   Tr   r   s      r   #test_ismount_directory_not_readablez1PosixPathTest.test_ismount_directory_not_readable  sG     XX

	O	"!BHMM)++F3T:!BHzBHr   c                 T    | j                  t        j                  t                     y r   )assertFalserE   
isjunctionr   r3   s    r   test_isjunctionzPosixPathTest.test_isjunction(  s    --f56r   win32zFast paths are not for win32c                     | j                  t        j                  j                  t        j
                  u        | j                  t        j                  t        j                  j                               y r   )	
assertTruer   r]   normpathr   _path_normpathr   inspect
isfunctionr3   s    r   test_fast_paths_in_usez$PosixPathTest.test_fast_paths_in_use+  sH    
 	((E,@,@@A++BGG,<,<=>r   c                     | j                  t        j                  d      d       | j                  t        j                  d      d       y )NrK   rR   )rD   rE   
expanduserr3   s    r   test_expanduserzPosixPathTest.test_expanduser3  s8    --e4e<--f5v>r   c                 D   t        j                         5 }d|d<   | j                  t        j                  d      d       d|d<   | j                  t        j                  d      d       dD ]  }| j                  |      5  ||d<   | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d	      d
       d d d         	 d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz/home/victorHOME~z/home/victor/)rJ   r6   rm   ///)homerJ   ~/z~/foor=   )r   EnvironmentVarGuardrD   rE   r   r$   )r%   envr   s      r   test_expanduser_home_envvarz)PosixPathTest.test_expanduser_home_envvar7  s    **,(CKY11#6G *CKY11#6G,\\t\,"&CK$$Y%9%9#%>D$$Y%9%9$%?E$$Y%9%9'%BFK	 -, - -, -, -,s%   A,DA5D
6
D
DDDvxworkszno home directory on VxWorksc           	         t        j                  d      }| j                  t        j                  d      t
               | j                  t        j                  d      t               t        j                  d      dk7  rv| j                  t        j                  d      dz   t        j                  d             | j                  t        j                  d      dz   t        j                  d             | j                  t        j                  d      t
               | j                  t        j                  d	      t
               | j                  t        j                  d
      t               | j                  t        j                  d      t               t        j                         5 }|d= |j                  t        j                               j                  }|j                  d      xs d}| j                  t        j                  d      |       t        j                   j#                  |dt$              5  t        j                   j#                  |dt$              5  dD ]'  }| j                  t        j                  |      |       ) 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Npwdr   s   ~/r   rJ      ~rQ   z~root/z~foo/s   ~root/s   ~foo/r   getpwuid)side_effectgetpwnam)r   z~/.localz
~vstinner/)r   import_moduleassertIsInstancerE   r   strr\   rD   r   r   r   r   getuidpw_dirrstripr   patchobjectKeyError)r%   r   r   r   r]   s        r   test_expanduser_pwdz!PosixPathTest.test_expanduser_pwdG  s    ))%0i2248#>i22595A $+$$S)C/$$T* $$T*T1$$U+ 	i228<cBi227;SAi229=uEi228<eD**,F<<		,33D;;s#*sDY11#6= ""3
"I""3
"I;D$$Y%9%9$%?F < J J -, JI JI -,s=   .BK?'J9&-J-J9K-J62J99K	>KKc           
         t        j                  d      }|j                         D ]  }|j                  }|j	                  |      }|j
                  }|j                  d      xs d}| j                  ||      5  | j                  t        j                  d|z         |       | j                  t        j                  t        j                  d|z               t        j                  |             d d d         y # 1 sw Y   xY w)Nr   rJ   )	all_entryentryr   )r   r   getpwallpw_namer   r   r   r$   rD   rE   r   r   r   )r%   r   r   namer   r   s         r   test_expanduser_pwd2z"PosixPathTest.test_expanduser_pwd2p  s     ))%0I$$D LL&E<<D;;s#*sD	?  !5!5cDj!A4H  !5!5bkk#*6M!N!#T!24 @? ( @?s   :A7C<<D	)0)r6   rc   )rJ   rJ   )z/.rJ   )z/./rJ   )z/.//.rJ   )r=   r=   )rI   rI   )rm   rm   )r   rJ   )z///foo/.//bar//rI   )z///foo/.//bar//.//..//.//baz///z/foo/baz)z///..//./foo/.//barrI   )rc   rc   )z.//.rc   )rd   rd   )../rd   )../foor   )	../../foor   )z../foo/../barz../bar)z../../foo/../bar/./baz/boom/..../../bar/bazz/..rJ   r   )z/../rJ   )z/..//rJ   )z//.rm   )z//..rm   )//...r   )z//../foorO   )z//../../foorO   )/../foor=   )z
/../../foor=   )z/../foo/../rJ   )z/../foo/../barr?   )z/../../foo/../bar/./baz/boom/..rA   )z/../../foo/../bar/./baz/boom/.z/bar/baz/boom)zfoo/../bar/bazzbar/baz)zfoo/../../bar/bazz
../bar/baz)zfoo/../../../bar/bazr   )zfoo///../bar/.././../baz/boomz../baz/boom)zfoo/bar/../..///../../baz/boomz../../baz/boom)/foo/..rJ   )z
/foo/../..rJ   )z//foo/..rm   )z//foo/../..rm   )z	///foo/..rJ   )z///foo/../..rJ   )z
////foo/..rJ   )z/////foo/..rJ   c                    | j                   D ]  \  }}| j                  |      5  t        j                  |      }| j	                  ||       d d d        |j                  d      }|j                  d      }| j                  |t              5  t        j                  |      }| j	                  ||       d d d         y # 1 sw Y   uxY w# 1 sw Y   xY w)Nzutf-8)type)NORMPATH_CASESr$   rE   r   rD   encoder\   )r%   r]   expectedresults       r   test_normpathzPosixPathTest.test_normpath  s    "11ND(d#"++D1  2 $ ;;w'Dw/Hd/"++D1  2 0/ 2## 0/s   (C (C C		C	strictTc                 p   | j                  t        di |t        j                                | j                  t        di |t        j                                | j                  t        dj	                  dgdz        fi |t        j                                | j                  t        di |t        j
                                | j                  t        d	i |t        j
                                | j                  t        dj	                  dgdz        fi |t        j
                                y )
Nrc   rJ   d      .rQ   )rc   )z./.)r   )s   ./.)rD   r   r   getcwdrF   getcwdbr%   r'   s     r   test_realpath_curdirz"PosixPathTest.test_realpath_curdir  s     	00"))+>262BIIK@#((C53;"7B6BBIIKP1&12::<@3F3RZZ\B$))TFSL"9DVDbjjlSr   c           	         | j                  t        di |t        t        j                                      | j                  t        di |t        t        t        j                                            | j                  t        dj                  dgdz        fi |d       | j                  t        di |t        t        j                                      | j                  t        d	i |t        t        t        j                                            | j                  t        dj                  dgdz        fi |d       y )
Nrd   rJ   r      ..rQ   )rd   )z../..)r   )s   ../..)rD   r   r   r   r   rF   r   r   s     r   test_realpath_pardirz"PosixPathTest.test_realpath_pardir  s     	1&17299;3GH4V4ggbiik>R6ST#((D6C<"8CFCSI262GBJJL4IJ5f5wwrzz|?T7UV$))UGcM":EfEtLr   c                    	 t        j                  t        dz   t               | j                  t	        t        fi |t        dz          t        j                  t               y # t        j                  t               w xY wNr7   )r   r   r   rD   r   r   r9   r   s     r   test_realpath_basicz!PosixPathTest.test_realpath_basic  sT    
	%JJvcz6*Xf77DV$IV$s   AA$ $A?c                 @   	 t        j                  t        dz   t               | j                  t        t
        t        d       | j                  t        t
        t        dz   d       t        j                  t               y # t        j                  t               w xY w)Nr7   Tr   r8   )r   r   r   assertRaisesFileNotFoundErrorr   r   r9   r3   s    r   test_realpath_strictz"PosixPathTest.test_realpath_strict  sk    
	%JJvcz6*/6$O/6C<PTUV$IV$s   A&B Bc                    d}| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d}| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d}| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d}| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d}| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d	}| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d
}| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d}| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d}t
        j                  dk(  r\| j                  t        |d      |       | j                  t        t        |d       | j                  t        |t              |       n[| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d}t
        j                  dk(  r?| j                  t        |d      |       | j                  t        |t              |       n>| j                  t        t        |d       | j                  t        t        |t               | j                  t        t        |d       d}t
        j                  dk(  r\| j                  t        |d      d       | j                  t        t        |d       | j                  t        |t              d       n[| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               d}t
        j                  dk(  r?| j                  t        |d      d       | j                  t        |t              d       n>| j                  t        t        |d       | j                  t        t        |t               | j                  t        t        |d       d}t
        j                  dk(  r\| j                  t        t        |d       | j                  t        t        |d       | j                  t        t        |t               n| j                  t        |d      |       t        j                  r?| j                  t        t        |d       | j                  t        t        |t               n>| j                  t        t        |d       | j                  t        |t              |       d}t
        j                  dk(  r?| j                  t        t        |d       | j                  t        t        |t               n| j                  t        |d      |       t        j                  r?| j                  t        t        |d       | j                  t        t        |t               y | j                  t        t        |d       y )Nr   Fr   Tr   z/nonexistent/x s   /nonexistent/x z/ /..s   / /..z/nonexistent/x /..s   /nonexistent/x /..r   r   u   /nonexistent/u   //..rJ   u   /nonexistent//..z/nonexistentr   s   /nonexistent/)r   
ValueErrorr   r   r   sysplatformrD   UnicodeEncodeErrorUnicodeDecodeErrorr	   is_wasir   )r%   r]   s     r   test_realpath_invalid_pathsz)PosixPathTest.test_realpath_invalid_paths  s   *hUC*hTB*h]K*hUC*hTB*h]K#*hUC+XtDI*h]K$*hUC+XtDI*h]K*hUC*hTB*h]K*hUC*hTB*h]K&*hUC+XtDI*h]K'*hUC+XtDI*h]K<<7"Xd594@/4MXd=A4H0(DO0(DN0(DW$<<7"Xd594@Xd=A4H0(DO0(DW+XtDI<<7"Xd593?/4MXd=A3G0(DO0(DN0(DW'<<7"Xd59>JXd=A>R0(DO0(DW+XtDI<<7"0(DO0(DN0(DWXd594@!!'8T$!G!!'8T-!P!!"3XtD!Q  $}!EtL#<<7"0(DO0(DWXd594@??gxdCgxmL/4Mr   c                 *   	 t        j                  t        j                  t        dz         t               | j                  t        t        fi |t        dz          t        j                  t               y # t        j                  t               w xY wr   )	r   r   rE   relpathr   rD   r   r   r9   r   s     r   test_realpath_relativez$PosixPathTest.test_realpath_relativeM  s_    	%JJy((4f=Xf77DV$IV$s   AA7 7Bc                 n   	 t        j                  t        j                  dz   t        j                         | j	                  t        dt        j                  z   fi |t        dz          t        j                  t        j                         y # t        j                  t        j                         w xY w)Nr7   znonexistent/../)r   r   r   r:   rD   r   r   r9   r   s     r   test_realpath_missing_pardirz*PosixPathTest.test_realpath_missing_pardirW  s    	/JJy''#-y/?/?@*Y-=-==HH&SV,X Y--.IY--.s   A)B %B4c                 	   	 t        j                  t        t               | j                  t	        t              t               t        j                  t        dz   t        dz          t        j                  t        dz   t        dz          | j                  t	        t        dz         t        dz          | j                  t	        t        dz         t        dz          | j                  t	        t        dz         t        dz          | j                  t	        t        dz         t        t                     | j                  t	        t        dz         t        t              dz          t        j                  t        dz   t        dz          | j                  t	        t        d	z   t        t              z   dz         t        dz          | j                  t	        t        d	z   t        t              z   dz         t        dz          t        j                  t        t              d
z   t        dz          | j                  t	        t        dz         t        d
z          t        j                  dt        t        t                    z   dz   t        t              z   dz   t        dz          | j                  t	        t        dz         t        dz          t        j                  t        t                    5  | j                  t	        t        t                    t               d d d        t        j                  t               t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          y # 1 sw Y   xY w# t        j                  t               t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          w xY w)Nr7   r8   1/x1/..1/../x/xxy1/../rh   rg   r   rJ   c)
r   r   r   rD   r   r   r   r   
change_cwdr9   r3   s    r   test_realpath_symlink_loopsz)PosixPathTest.test_realpath_symlink_loopsb  s   
"	)JJvv&Xf-v6JJvcz6#:.JJvcz6#:.XfSj16#:>XfSj16#:>XfUl3VE\BXfVm4gfoFXfXo6$8NOJJvcz6#:.XfWnx7G&G#&MN#c\+XfWnx7G&G#&MN#c\+ JJx'%/<XfSj16%<@JJux883>'(*-./5cz;XfSj16#:> %%gfo6  (6*:!;VD 7 V$VCZ(VCZ(VCZ(VCZ(VCZ( 76 V$VCZ(VCZ(VCZ(VCZ(VCZ(s%   K.O 0-OO OO B'Q>c                    	 t        j                  t        t                | j                  t        t
        t        fi | t        j                  t        dz   t        dz          t        j                  t        dz   t        dz           | j                  t        t
        t        dz   fi |  | j                  t        t
        t        dz   fi |  | j                  t        t
        t        dz   fi |  | j                  t        t
        t        dz   fi |  | j                  t        t
        t        dz   fi | t        j                  t        dz   t        dz           | j                  t        t
        t        dz   t        t              z   dz   fi |  | j                  t        t
        t        dz   t        t              z   dz   fi | t        j                  t        t              d	z   t        d
z           | j                  t        t
        t        d
z   fi | t        j                  dt        t        t                    z   dz   t        t              z   dz   t        dz           | j                  t        t
        t        dz   fi | t        j                  t        t                    5   | j                  t        t
        t        t              fi | d d d        t        j                  t               t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          t        j                  t        d
z          y # 1 sw Y   xY w# t        j                  t               t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          t        j                  t        dz          t        j                  t        d
z          w xY w)Nr7   r8   r  r  r  r  r  r  rh   rg   r   rJ   r  )r   r   r   r   r   r   r   r   r   r  r9   r   s     r   "test_realpath_symlink_loops_strictz0PosixPathTest.test_realpath_symlink_loops_strict  s   "	)JJvv&DgxB6BJJvcz6#:.JJvcz6#:.DgxFvFDgxFvFDgxHHDgxI&IDgxKFKJJvcz6#:.Dgx$Wnx/??#EQIOQDgx$Wnx/??#EQIOQ JJx'%/<DgxFvFJJux883>'(*-./5cz;DgxFvF %%gfo6!!!'8Xf5EPP 7 V$VCZ(VCZ(VCZ(VCZ(VCZ( 76 V$VCZ(VCZ(VCZ(VCZ(VCZ(s%   J0N 2+NN NN B'P>c                 @   	 t        j                  t               t        j                  dt	        t              z   t        dz          t        j                  dt        dz          | j                  t        t        dz   fi |t               t        j                  t        dz          t        j                  t        dz          t        t               y # t        j                  t        dz          t        j                  t        dz          t        t               w xY w)Nr   z/selfzself/self/selfz/link)
r   r   r   r   r   rD   r   r   r9   r    r   s     r   (test_realpath_repeated_indirect_symlinksz6PosixPathTest.test_realpath_repeated_indirect_symlinks  s    
	HHVJJux//'1ABJJ'')9:Xfw&6A&A6JVg-.Vg-.v Vg-.Vg-.vs   B
C A	Dc                 
   d}	 t        j                  t               t        |      D ];  }t        j                  dj                  d|z  gdz        t        d|dz   z  z          = t        j                  dt        dz          | j                  t        t        d|z  z   fi |t               t        j                  t              5  | j                  t        d|z        t               d d d        t        |dz         D ]!  }t        j                  t        d|z  z          # t        t               y # 1 sw Y   KxY w# t        |dz         D ]!  }t        j                  t        d|z  z          # t        t               w xY w)N
   rJ   z%dz/%dr   rc   z/0)r   r   r   ranger   rF   rD   r   r   r  r9   r    )r%   r'   depthis       r   test_realpath_deep_recursionz*PosixPathTest.test_realpath_deep_recursion  s+    	HHV5\

388TAXJO4fuA6NO "JJsFTM*Xfuu}&<GGP %%f-  $,!7@ . 519%  %!)!34 &v .- 519%  %!)!34 &vs%   CD? #D3)D? 3D<8D? ?AFc                 \   	 t        j                  t               t        j                  t        dz          t        j                  t        dz   t        dz          t	        j
                  t        dz         5  | j                  t        di |t        dz          d d d        t	        j                  t        dz          t        t        dz          t        t               y # 1 sw Y   GxY w# t	        j                  t        dz          t        t        dz          t        t               w xY w)Nz/y/kz/y/a)rg   )
r   r   r   r   r   r  rD   r   r9   r    r   s     r   test_realpath_resolve_parentsz+PosixPathTest.test_realpath_resolve_parents  s    	HHVHHVd]#JJv}ftm4%%ftm4  !8!8$*VO5 5 Vd]+v}%v 54 Vd]+v}%vs$   A5C, 7#C C,  C)%C, ,?D+c                 ^   	 t        j                  t               t        j                  t        dz          t        j                  t        dz          t        j                  t        dz   t        dz          | j	                  t        t        dz   fi |t        dz          t        j                  t        t                    5  | j	                  t        t        t              dz   fi |t        dz          d d d        t        j                  t        dz          t        t        dz          t        t        dz          t        t               y # 1 sw Y   YxY w# t        j                  t        dz          t        t        dz          t        t        dz          t        t               w xY w)Nr#  z/k/yz/link-yz
/link-y/..)r   r   r   r   rD   r   r   r  r   r   r9   r    r   s     r   (test_realpath_resolve_before_normalizingz6PosixPathTest.test_realpath_resolve_before_normalizing  s&   	HHVHHVd]#HHVf_%JJv(:; Xf|&;FvFQUV%%gfo6  (6*:\*I!TV!T!'$0 7 Vi/0v'v}%v 76 Vi/0v'v}%vs%   CE 4E7E EE AF,c                    	 t        j                  t               t        j                  t        dz          t        j                  t        t        dz          t	        j
                  t        t                    5  t        t              }| j                  t        |dz   fi |t               | j                  t        |dz   fi |t        dz          d d d        t	        j                  t        dz          t        t        dz          t        t               y # 1 sw Y   GxY w# t	        j                  t        dz          t        t        dz          t        t               w xY w)Nr#  linkzlink/k)r   r   r   r   r   r  r   r   rD   r   r9   r    )r%   r'   bases      r   test_realpath_resolve_firstz)PosixPathTest.test_realpath_resolve_first
  s    	HHVHHVd]#JJvv/%%gfo6'  $-!B6!BFK  $/!DV!DftmT 7
 Vf_-v}%v 76
 Vf_-v}%vs%   A8D% :ADD% D"D% %?E$zCan't set symlink permissionsdarwinz1only macOS requires read permission to readlink()c                 B   	 t        j                  t        dz   t               t        j                  t        dd       | j	                  t
              5  t        t        fi | d d d        | j	                  t
              5  t        t        dz   fi |f d d d        | j	                  t
              5  t        t        dz   fi | d d d        | j	                  t
              5  t        t        dz   fi | d d d        t        j                  t        dd       t        j                  t               y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   cxY w# t        j                  t        dd       t        j                  t               w xY w)	Nr7   r   F)follow_symlinksr=   r   r     )r   r   r   chmodr   PermissionErrorr   r9   r   s     r   'test_realpath_unreadable_symlink_strictz5PosixPathTest.test_realpath_unreadable_symlink_strict  s   	JJvcz6*HHVUE:""?3*6* 4""?3&3F34 4""?3)+6v6 4""?3)+6v6 4 HHVUE:IIf 43333333 HHVUE:IIfsl   AE' D7%E' EE' 4EE' %E9E' 7E <E' EE' EE' E$ E' '7Fc                    	 t        j                  t               t        j                  t        dz          t        j                  t        d       | j	                  t        t        d      t               | j	                  t        t        d      t               | j	                  t        t        t              t               	 t        j                  t               | j                  d       | j	                  t        t        dz   d      t        dz          | j                  t        t
        t        dz   d       | j                  t        t
        t        dz   t               | j	                  t        t        dz   d      t        dz          | j                  t        t
        t        dz   d       | j                  t        t
        t        dz   t               t        j                  t        d       t        t        dz          t        t               y # t        $ r Y 6w xY w# t        j                  t        d       t        t        dz          t        t               w xY w)	Nr#  r   Fr   TzCannot block permissionsz/missingr.  )r   r   r   r/  rD   r   r   statskipTestr0  r   r    r3   s    r   "test_realpath_unreadable_directoryz0PosixPathTest.test_realpath_unreadable_directory3  s   	HHVHHVd]#HHVU#XfU;VDXfT:FCXf]CVL: 89XftmEB#d],ox$%)  +ox$%2  4 Xfz&9%H#j02ox*9L%)  +ox*9L%2  4 HHVU#v}%v+ # & HHVU#v}%vs1   CH) H C?H) 	H&"H) %H&&H) )=I&c                 j   t         j                  d c}t         _        	 t         j                  j                  t        j                               d   }| j	                  t
        t        j                  d       | j                  t        j                  d      d       | j                  t        j                  t        j                  d            d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  dd      d|z   d	z          | j                  t        j                  dd
      d|z   dz          | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  d	d	      d       | j                  t        j                  dd      d       |t         _        y # |t         _        w xY w)Nc                       y)Nz/home/user/barr,   r,   r   r   <lambda>z,PosixPathTest.test_relpath.<locals>.<lambda>X  s    7Hr   r6   rg   rh   z../a/bz../br   rj   z../crk   zb/cz../../arc   z/foo/bar/batz/x/y/zz../../../foo/bar/batrI   batrJ   zfoo/bar/batz../../..r  z../foo/bar/batz
../../../x)
r   r   r]   rW   r   r  rE   r	  rD   r   )r%   real_getcwdcurdirs      r   test_relpathzPosixPathTest.test_relpathW  se   $&II/H bi	$WW]]299;/3Fj)*;*;R@Y..s3S9Y..y/@/@/EFLY..u5u=Y..x8(CY..sF;U6\$=NOY..uf="6\&02Y..sE:IFY..sC8#>Y..~xHJ`aY..~zJERY..~sC]SY..sNCZPY..~tDFVWY..t^DlSY..sC8#>Y..tT:C@Y..vv>D#BIBIs   K:L% %L2c                    t         j                  d c}t         _        	 t         j                  j                  t        j                               d   }| j	                  t
        t        j                  d       | j                  t        j                  d      d       | j                  t        j                  t        j                  d            d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  dd      d|z   d	z          | j                  t        j                  dd
      d|z   dz          | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  dd      d       | j                  t        j                  d	d	      d       | j                  t        j                  dd      d       | j	                  t        t        j                  dd       | j	                  t        t        j                  dd       |t         _        y # |t         _        w xY w)Nc                       y)Ns   /home/user/barr,   r,   r   r   r8  z2PosixPathTest.test_relpath_bytes.<locals>.<lambda>r  s    :Lr   r9  r   rq   s   a/bs   ../a/bs   ../bs   ../rr   s   ../cs   /a/bs   b/cs   ../../ar   s   /foo/bar/bats   /x/y/zs   ../../../foo/bar/batrP   s   batrQ   s   foo/bar/bats   ../../..s   /xs   ../foo/bar/bats
   ../../../xs   bytesr   )r   r   r]   rW   r   r  rE   r	  rD   r   	TypeError)r%   real_getcwdbr<  s      r   test_relpath_bytesz PosixPathTest.test_relpath_bytesq  s   &(jj2L"rz	&WW]]2::<04Fj)*;*;SAY..t4d;Y..y/@/@/FGNY..v6?Y..y99EY..tW=#F]502Y..vw?#F]724Y..tV<jIY..tT:DAY..	JLcdY..LfUY..E~VY..t_E{SY..FHYZY..uoFVY..tT:DAY..ue<dCY..w@$Gi):):HeLi):):E8L%BJBJs   MM1 1M>c                 p     fd} fd} j                  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        j                  t        t        j                  d dg        j                  t        t        j                  d d!g        j                  t        t        j                  d"dg        j                  t        t        j                  dd#g        j                  t        t        j                  dd$g        j                  t        t        j                  d%d#g       y )&Nc           
         j                  t        j                  |       |       j                  t        j                  | D cg c]  }t        j                  |       c}      t        j                  |             y c c}w r   )rD   rE   
commonpathr   r   )pathsr   pr%   s      r   checkz,PosixPathTest.test_commonpath.<locals>.check  s_    Y11%8(CY1152Q5a2;;q>52QR[[242Qs   Bc           
          j                  | t        j                  |       j                  | t        j                  |D cg c]  }t        j                  |       c}       y c c}w r   )r   rE   rE  r   r   )excrF  rG  r%   s      r   check_errorz2PosixPathTest.test_commonpath.<locals>.check_error  sP    c9#7#7?c9#7#77<=u!r{{1~u=?=s   A&z/usrusrz
/usr/localz/usr/local/z/usr//localz//usr/localz/usr/./localz/./usr/localrJ   z/devz	/usr/lib/z/usr/lib/python3z/usr/libz/usr/lib64/z
/usr/lib64spamalotr6   and/jamand/spamandzand//jamz
and/spam//z	and/./jamz
./and/spam)rO  rP  rN  )rO  rP  rQ  z	spam/alotz
/spam/alots	   /usr/lib/zusr/lib/python3s   usr/lib/s   /usr/lib/python3s   usr/lib/python3zusr/lib/)r   r  rE   rE  r@  )r%   rH  rK  s   `  r   test_commonpathzPosixPathTest.test_commonpath  sP   	4	?
 	*i&:&:B?J0J0|nl+|\*L9}l+\:}m,l;}m,l;~~.=sFmS!vv${./<{M*F3z<(&1{L)62vhvv'vv#y*%u-z<(%0{L)51-r2,e4rdBr;$J\ 23)Y%9%9');<	>)Y%9%9'):;	=)Y%9%9&(:;	=)Y%9%9&(;<	>)Y%9%9&(:;	=)Y%9%9%':;	=r   )<__name__
__module____qualname__r4   r2   rG   rX   r`   re   rw   r{   r}   r   r   r   r   r   skip_unless_symlinkr   r   skipIfr   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!  r$  r&  r*  r   r/  supports_follow_symlinksr1  r5  r=  rB  rR  r,   r   r   r0   r0   >   s   2
+M78&:4:DEX*?: "" # X__Ud]$@A" B"" X__Ud]$@A" B"*7 X__S\\W,.LM?  N??L  X__S\\Y.35%G5%GN X__S\\Y.35454 1Nf
3 '2$'(M)BCT D 'T '2$'(M)BCM D 'M ""&2-01% 2 ' #% ""&% ' #%]N~ ""&2-01% 2 ' #% ""&2-01/ 2 ' #/ ""&%) ' #%)N ""&Hd#h%>?%) @ ' #%)N ""&2$'(M)BC
 D ' #
 ""&2$'(M)BC D ' #" ""&2-01 2 ' #$ ""&2$'(M)BC D ' #4 ""&2$'(M)BC D ' #" ""&X__RXXR%@%@@BabX__S\\X-/bcHd#h%>? @ d c ' #
  '""  # ' D$4&<4=r   r0   c                       e Zd ZeZg dZy)PosixCommonTest)r	  samefilesameopenfilesamestatN)rS  rT  rU  rE   
pathmodule
attributesr,   r   r   rZ  rZ    s    JDJr   rZ  c                       e Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Z ei ddidei      d        Zd Zd Zy)PathLikeTestsc                 8   t         j                  | _        t        t         j                        | _        | j                  t         j                  | j                         t        | j                  dd      5 }|j                  d       d d d        y # 1 sw Y   y xY w)Nxbr   s   test_posixpath.PathLikeTests)	r   r:   	file_namer   	file_path
addCleanupr9   r   r   )r%   files     r   r4   zPathLikeTests.setUp  sd    "))!)"2"23	(($..9$..$*dJJ67 +**s   5BBc                 h    | j                   || j                         || j                               y r   )rD   re  rd  )r%   r)   s     r   assertPathEqualzPathLikeTests.assertPathEqual  s$    dnn-tDNN/CDr   c                 N    | j                  | j                  j                         y r   )ri  r]   normcaser3   s    r   test_path_normcasez PathLikeTests.test_path_normcase      TYY//0r   c                 N    | j                  | j                  j                         y r   )ri  r]   rz   r3   s    r   test_path_isabszPathLikeTests.test_path_isabs      TYY__-r   c                     | j                  | j                  j                  dt        d      d      | j                  j                  ddd             y )Nrg   br  )rD   r]   rF   r   r3   s    r   test_path_joinzPathLikeTests.test_path_join  s;    Xc]C@S#6	8r   c                 N    | j                  | j                  j                         y r   )ri  r]   rW   r3   s    r   test_path_splitzPathLikeTests.test_path_split  rp  r   c                 N    | j                  | j                  j                         y r   )ri  r]   r[   r3   s    r   test_path_splitextz PathLikeTests.test_path_splitext  rm  r   c                 N    | j                  | j                  j                         y r   )ri  r]   
splitdriver3   s    r   test_path_splitdrivez"PathLikeTests.test_path_splitdrive      TYY112r   c                 N    | j                  | j                  j                         y r   )ri  r]   rt   r3   s    r   test_path_splitrootz!PathLikeTests.test_path_splitroot  s    TYY001r   c                 N    | j                  | j                  j                         y r   )ri  r]   r   r3   s    r   test_path_basenamez PathLikeTests.test_path_basename  rm  r   c                 N    | j                  | j                  j                         y r   )ri  r]   r   r3   s    r   test_path_dirnamezPathLikeTests.test_path_dirname      TYY../r   c                 N    | j                  | j                  j                         y r   )ri  r]   r   r3   s    r   test_path_islinkzPathLikeTests.test_path_islink  s    TYY--.r   c                 N    | j                  | j                  j                         y r   )ri  r]   r   r3   s    r   test_path_lexistszPathLikeTests.test_path_lexists  r  r   c                 N    | j                  | j                  j                         y r   )ri  r]   r   r3   s    r   test_path_ismountzPathLikeTests.test_path_ismount  r  r   c                 N    | j                  | j                  j                         y r   )ri  r]   r   r3   s    r   test_path_expanduserz"PathLikeTests.test_path_expanduser  r{  r   c                 N    | j                  | j                  j                         y r   )ri  r]   
expandvarsr3   s    r   test_path_expandvarsz"PathLikeTests.test_path_expandvars  r{  r   c                 N    | j                  | j                  j                         y r   )ri  r]   r   r3   s    r   test_path_normpathz PathLikeTests.test_path_normpath  rm  r   c                 N    | j                  | j                  j                         y r   )ri  r]   r   r3   s    r   test_path_abspathzPathLikeTests.test_path_abspath  r  r   r   Tc                     | j                  | j                  j                         | j                  t        | j                  j                  fi |       y r   )ri  r]   r   r   r   s     r   test_path_realpathz PathLikeTests.test_path_realpath
  s<    TYY//0WTYY%7%7B6BCr   c                 N    | j                  | j                  j                         y r   )ri  r]   r	  r3   s    r   test_path_relpathzPathLikeTests.test_path_relpath  r  r   c                     | j                   j                  | j                  | j                  g      }| j	                  || j                         y r   )r]   rE  re  rd  rD   )r%   common_paths     r   test_path_commonpathz"PathLikeTests.test_path_commonpath  s7    ii**DNNDNN+KLdnn5r   N)rS  rT  rU  rE   r]   r4   ri  rl  ro  rs  ru  rw  rz  r}  r  r  r  r  r  r  r  r  r  r.   r   r  r  r  r,   r   r   ra  ra    s    D8E1.8.13210/003310 2$'(M)BCD DD
06r   ra  __main__)$r   r   rE   r  r   	functoolsr   r   r   r   r   r   r   r	   r
   test.supportr   r   r   test.support.os_helperr   r   r   ImportErrorr:   r   r   r    r.   TestCaser0   
CommonTestrZ  ra  rS  mainr,   r   r   <module>r     s     	  
   I I  ! & 0 +  
!!	"="(E=H%% E=PE&1183D3D E
J6H%% J6Z ZHMMO O   Es   C CC