
    0hh-                       S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJrJr  S SKJrJr  S SKJr  S SK	Jr  S SKJr   S SKr \R.                    S	r S SKrS	rS rS rS rS r " S S\R@                  5      r! " S S\!5      r" " S S\RF                  \R@                  5      r$ " S S\!5      r%\&S:X  a  \RN                  " 5         gg! \ a    Sr Nf = f! \ a    S
r Nf = f! \ a    S
r Nf = f)    N)ALLOW_MISSING)support)cpython_only	os_helper)
TestFailedis_emscripten)FakePath)test_genericpath)TemporaryFileTFc                    [         R                  " SSS9R                  n[         R                  [         R                  [         R                  /Ul        [         R                  Ul        U" U S S5      nU(       d-  [        SR                  [         R                  " 5       5      5      e[         R                  " U5      nU" XU5      nUS U $ )Nkernel32T)use_last_errorr   z&failed to get short path name 0x{:08X})ctypesWinDLLGetShortPathNameW	c_wchar_pc_uint32argtypesrestypeOSErrorformatget_last_errorcreate_unicode_buffer)pathGSPN
result_lenresults       9/opt/python-3.13.8/usr/lib/python3.13/test/test_ntpath.py_getshortpathnamer   &   s    }}Z=OO))6+;+;V__M$a(
B!6&"7"7"9:< <--j9$
3
kz""    c                     [        U [        [        [        R                  45      (       a*  [
        R                  " [        R                  " U 5      5      $ [        U S5      (       a  [        S U  5       5      $ U $ )N__iter__c              3   v   #    U  H/  n[         R                  " [        R                  " U5      5      v   M1     g 7fN)ntpathnormcaseosfsdecode).0ps     r   	<genexpr>_norm.<locals>.<genexpr>6   s$     CdV__R[[^44ds   79)

isinstancebytesstrr'   PathLiker%   r&   r(   hasattrtuple)r   s    r   _normr3   2   sU    $R[[122r{{4011	z	"	"CdCCCKr    c           	      z   U R                  SS5      n [        U 5      nX:w  aI  [        U5      [        U5      :w  a1  [        [	        U 5      < S[	        U5      < S[	        U5      < 35      eU R                  SS5      n U R                  SS5      n U R                  S	S
5      n U R                  SS5      n U R                  SS5      n U R                  SS5      n [
        R                  " U 5      R                  S5      n U R                  SS5      R                  S5      n [        R                  " 5          [        R                  " S[        5        [        U 5      nS S S 5        [        U5      [        U5      :w  a1  [        [	        U 5      < S[	        U5      < S[        U5      < 35      eg ! , (       d  f       NX= f)N\\\z should return: z but returned: z('z(b'z("z(b"z['z[b'z["z[b"z, 'z, b'z, "z, b"latin1asciibackslashreplaceignore)replaceevalr3   r   r/   r'   fsencodedecodeencodewarningscatch_warningssimplefilterDeprecationWarningrepr)fn
wantResult	gotResults      r   testerrH   :   s_   	D&	!BRI5#4i8H#HBZ#i.: ; 	; 
D%	 B	D%	 B	D%	 B	D%	 B	E6	"B	E6	"B	R			)B	7.	/	6	6w	?B		 	 	"h(:;H	 
# ZE),,BZ$y/; < 	< - 
#	"s   3'F,,
F:c                  .    [         R                  " SU SS9$ )NkwargsT)_do_cleanups)r   subTests)
parameterss    r   _parameterizerN   R   s    HjtDDr    c                        \ rS rSrS rS rSrg)NtpathTestCaseV   c                 b    X:X  d  [        U5      [        U5      :X  a  g U R                  X5        g r$   )r3   assertEqual)selfpath1path2s      r   assertPathEqualNtpathTestCase.assertPathEqualW   s'    >U5\U5\9&r    c                 L    U R                  [        U5      [        U5      5        g r$   )assertInr3   )rT   r   pathsets      r   assertPathInNtpathTestCase.assertPathIn\   s    eDk5>2r     N)__name__
__module____qualname____firstlineno__rW   r\   __static_attributes__r^   r    r   rP   rP   V   s    '
3r    rP   c                   0   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS r\R2                  \R6                  " \S5      \" 0 SS0S\05      S 5       5       5       r\R2                  \R6                  " \S5      S 5       5       r \R6                  " \S5      S 5       r!\R6                  " \S5      \" 0 SS0S\05      S 5       5       r"\R2                  \R6                  " \S5      \" 0 SS0S\05      S 5       5       5       r#\R2                  \R6                  " \S5      S 5       5       r$\R2                  \R6                  " \S5      S 5       5       r%\R2                  \R6                  " \S5      S  5       5       r&\R2                  \R6                  " \S5      S! 5       5       r'\R2                  \R6                  " \S5      \" 0 SS0S\05      S" 5       5       5       r(\R6                  " \S5      S# 5       r)\R6                  " \S5      \R6                  " \*S$5      S% 5       5       r+\R6                  " \S5      S& 5       r,S' r-\R6                  " \R\                  S(5      S) 5       r/S* r0\R6                  " \1S+5      S, 5       r2S- r3S. r4S/ r5\Rl                  " \7S05      S1 5       r8S2 r9S3 r:S4 r;S5 r<\R6                  " \1S65      S7 5       r=\Rl                  " \>R~                  S8:g  S95      S: 5       r@S; rA\Rl                  " \>R~                  S8:g  S<5      S= 5       rB\R6                  " \C" \DS>5      S?5      S@ 5       rE\Rl                  " \>R~                  S8:g  SA5      SB 5       rF\Rl                  " \>R~                  S8:g  SA5      SC 5       rG\Rl                  " \>R~                  S8:g  SD5      \HSE 5       5       rI\Rl                  " \DR                  SF:g  SG5      SH 5       rK\Rl                  " \DR                  SF:H  SI5      SJ 5       rLSKrMgL)M
TestNtpath`   c                     [        SS5        [        SS5        [        SS5        [        SS5        [        S	S
5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        g )Nzntpath.splitext("foo.ext"))foo.extzntpath.splitext("/foo/foo.ext"))z/foo/foori   zntpath.splitext(".ext"))ri    zntpath.splitext("\foo.ext\foo"))z\foo.ext\foorj   zntpath.splitext("foo.ext\"))zfoo.ext\rj   zntpath.splitext("")rj   rj   zntpath.splitext("foo.bar.ext"))zfoo.barri   z!ntpath.splitext("xx/foo.bar.ext"))z
xx/foo.barri   z!ntpath.splitext("xx\foo.bar.ext"))z
xx\foo.barri   zntpath.splitext("c:a/b\c.d"))zc:a/b\cz.drH   rT   s    r   test_splitextTestNtpath.test_splitexta   sw    +_=02FG(,724JK-/@A$h//1DE24JK35LM.0BCr    c                    [        SS5        [        SS5        [        SS5        [        SS5        [        S	S
5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS 5        [        S!S"5        [        S#S$5        g )%Nzntpath.splitdrive('')rk   zntpath.splitdrive('foo'))rj   rh   zntpath.splitdrive('foo\bar'))rj   foo\barzntpath.splitdrive('foo/bar'))rj   foo/barzntpath.splitdrive('\'))rj   r5   zntpath.splitdrive('/'))rj   /zntpath.splitdrive('\foo\bar'))rj   \foo\barzntpath.splitdrive('/foo/bar'))rj   /foo/barzntpath.splitdrive("c:foo\bar"))c:rq   zntpath.splitdrive("c:foo/bar"))rv   rr   zntpath.splitdrive("c:\foo\bar"))rv   rt   zntpath.splitdrive("c:/foo/bar"))rv   ru   zntpath.splitdrive('\\'))r6   rj   zntpath.splitdrive('//'))//rj   z/ntpath.splitdrive("\\conky\mountpoint\foo\bar"))\\conky\mountpointrt   z/ntpath.splitdrive("//conky/mountpoint/foo/bar"))//conky/mountpointru   z-ntpath.splitdrive("\\?\UNC\server\share\dir"))\\?\UNC\server\sharez\dirz-ntpath.splitdrive("//?/UNC/server/share/dir"))//?/UNC/server/sharez/dirrl   rm   s    r   test_splitdriveTestNtpath.test_splitdrivem   s    &1);7.0@A-?(*5'302DE.0@A02DE/1BC24HI02DE*L9(*5E6	8@1	3D5	7>/	1r    c                    [         R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        [        R                  S:X  aF  U R                  [        US5        U R                  [        US	5        U R                  [        US
5        g U R                  U" S5      S5        g )N\\ser ver\sha re\di r)\\ser ver\sha rez\di r   \\ser ver\sha re\di r)   \\ser ver\sha res   \di r   \\\\)	   \\\u   \win32   \\\share\dir   \\server\\dir   \\server\share\   \\\\)   \\\s   \)r%   
splitdriverS   sysplatformassertRaisesUnicodeDecodeError)rT   r   s     r   test_splitdrive_invalid_paths(TestNtpath.test_splitdrive_invalid_paths   s    &&
$HIC	E$IJE	G$@A;	=<<7"0*>UV0*>VW0*>XYZ(?@;=r    c                    [        SS5        [        SS5        [        SS5        [        SS5        [        S	S
5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS 5        [        S!S"5        [        S#S$5        [        S%S&5        [        S'S(5        [        S)S*5        [        S+S,5        [        S-S.5        [        S/S05        [        S1S25        [        S3S45        U R                  [        R                  " S55      S65        [        S7S85        [        S9S:5        [        S;S<5        [        S=S>5        [        S?S@5        [        SASB5        [        SCSD5        [        SESF5        [        SGSH5        [        SISJ5        [        SKSL5        [        SMSN5        [        SOSP5        [        SQSR5        [        SSST5        [        SUSV5        [        SWSX5        [        SYSZ5        [        S[S\5        [        S]S^5        [        S_S`5        [        SaSb5        [        ScSd5        [        SeSf5        [        SgSh5        [        SiSj5        [        SkSl5        [        SmSn5        [        SoS(5        [        SpSq5        [        SrSs5        [        StSu5        [        SvSw5        [        SxSy5        [        SzS{5        g )|Nzntpath.splitroot(''))rj   rj   rj   zntpath.splitroot('foo'))rj   rj   rh   zntpath.splitroot('foo\bar'))rj   rj   rq   zntpath.splitroot('foo/bar'))rj   rj   rr   zntpath.splitroot('\'))rj   r5   rj   zntpath.splitroot('/'))rj   rs   rj   zntpath.splitroot('\foo\bar'))rj   r5   rq   zntpath.splitroot('/foo/bar'))rj   rs   rr   zntpath.splitroot("c:foo\bar"))rv   rj   rq   zntpath.splitroot("c:foo/bar"))rv   rj   rr   zntpath.splitroot("c:\foo\bar"))rv   r5   rq   zntpath.splitroot("c:/foo/bar"))rv   rs   rr   zntpath.splitroot('c:\\a'))rv   r5   \azntpath.splitroot('c:\\\a/b'))rv   r5   z\\a/bzntpath.splitroot('c:/\'))rv   rs   r5   zntpath.splitroot('c:\/'))rv   r5   rs   zntpath.splitroot('/\a/b\/\'))z/\a/br5   z/\zntpath.splitroot('\/a\b/\/'))z\/a\brs   z\/zntpath.splitroot('\\'))r6   rj   rj   zntpath.splitroot('//'))rw   rj   rj   z.ntpath.splitroot("\\conky\mountpoint\foo\bar"))rx   r5   rq   z.ntpath.splitroot("//conky/mountpoint/foo/bar"))ry   rs   rr   z/ntpath.splitroot("\\\conky\mountpoint\foo\bar"))z\\\conkyr5   mountpoint\foo\barz/ntpath.splitroot("///conky/mountpoint/foo/bar"))z///conkyrs   mountpoint/foo/barz/ntpath.splitroot("\\conky\\mountpoint\foo\bar"))z\\conky\r5   r   z/ntpath.splitroot("//conky//mountpoint/foo/bar"))z//conky/rs   r   u   //conky/MOUNTPOİNT/foo/bar)u   //conky/MOUNTPOİNTrs   rr   zntpath.splitroot("//?/c:"))//?/c:rj   rj   zntpath.splitroot("//./c:"))z//./c:rj   rj   zntpath.splitroot("//?/c:/"))r   rs   rj   zntpath.splitroot("//?/c:/dir"))r   rs   dirzntpath.splitroot("//?/UNC"))z//?/UNCrj   rj   zntpath.splitroot("//?/UNC/"))z//?/UNC/rj   rj   z#ntpath.splitroot("//?/UNC/server/"))z//?/UNC/server/rj   rj   z(ntpath.splitroot("//?/UNC/server/share"))r{   rj   rj   z,ntpath.splitroot("//?/UNC/server/share/dir"))r{   rs   r   zIntpath.splitroot("//?/VOLUME{00000000-0000-0000-0000-000000000000}/spam"))z0//?/VOLUME{00000000-0000-0000-0000-000000000000}rs   spamz&ntpath.splitroot("//?/BootPartition/"))z//?/BootPartitionrs   rj   z&ntpath.splitroot("//./BootPartition/"))z//./BootPartitionrs   rj   z&ntpath.splitroot("//./PhysicalDrive0"))z//./PhysicalDrive0rj   rj   zntpath.splitroot("//./nul"))z//./nulrj   rj   zntpath.splitroot("\\?\c:"))\\?\c:rj   rj   zntpath.splitroot("\\.\c:"))z\\.\c:rj   rj   zntpath.splitroot("\\?\c:\"))r   r5   rj   zntpath.splitroot("\\?\c:\dir"))r   r5   r   zntpath.splitroot("\\?\UNC"))z\\?\UNCrj   rj   zntpath.splitroot("\\?\UNC\"))z\\?\UNC\rj   rj   z#ntpath.splitroot("\\?\UNC\server\"))z\\?\UNC\server\rj   rj   z(ntpath.splitroot("\\?\UNC\server\share"))rz   rj   rj   z,ntpath.splitroot("\\?\UNC\server\share\dir"))rz   r5   r   zIntpath.splitroot("\\?\VOLUME{00000000-0000-0000-0000-000000000000}\spam"))z0\\?\VOLUME{00000000-0000-0000-0000-000000000000}r5   r   z&ntpath.splitroot("\\?\BootPartition\"))z\\?\BootPartitionr5   rj   z&ntpath.splitroot("\\.\BootPartition\"))z\\.\BootPartitionr5   rj   z&ntpath.splitroot("\\.\PhysicalDrive0"))z\\.\PhysicalDrive0rj   rj   zntpath.splitroot("\\.\nul"))\\.\nulrj   rj   zntpath.splitroot("//")zntpath.splitroot("///"))z///rj   rj   zntpath.splitroot("///y"))z///yrj   rj   zntpath.splitroot("//x"))z//xrj   rj   zntpath.splitroot("//x/"))z//x/rj   rj   zntpath.splitroot(" :/foo"))z :rs   rh   zntpath.splitroot("/:/foo"))rj   rs   z:/foo)rH   rS   r%   	splitrootrm   s    r   test_splitrootTestNtpath.test_splitroot   s   %|4(/:-/CD,.AB'8&6/1GH-/CD/1GH.0EF13KL/1GH 	,.AB02IJ 	*,=>*,=>02IJ02IJ 	)+;<'8D:	<?5	7F9	;@3	5F<	>@6	8 	))*GH@	B 	+-?@+-?@,.AB/1GH,.AB-/CD46QR9;[\=?cdZP	R79WX79WX79WX,.AB.0EF.0EF02IJ35OP/1GH13KL9;[\>4	6C9	;^T	V;=_`;=_`:<]^/1GH 	'8(/:)+;<(/:)+;< 	+-?@+-?@r    c                    [         R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        [        R                  S:X  aF  U R                  [        US5        U R                  [        US	5        U R                  [        US
5        g U R                  U" S5      S5        g )Nr   )r   r5   zdi rr   )r      \s   di rr   )r   r5   u   r   r   r   r   r   )r   r      )r%   r   rS   r   r   r   r   )rT   r   s     r   test_splitroot_invalid_paths'TestNtpath.test_splitroot_invalid_paths   s    $$	#GHG	I#HIJ	L#?@?	A<<7"0)=TU0)=UV0)=WXY'>?@Br    c                     [        SS5        [        SS5        [        SS5        [        SS5        [        S	S
5        [        SS5        g )Nzntpath.split("c:\foo\bar"))c:\foobarz*ntpath.split("\\conky\mountpoint\foo\bar"))z\\conky\mountpoint\foor   zntpath.split("c:\"))c:\rj   z#ntpath.split("\\conky\mountpoint\"))z\\conky\mountpoint\rj   zntpath.split("c:/"))c:/rj   z#ntpath.split("//conky/mountpoint/"))z//conky/mountpoint/rj   rl   rm   s    r   
test_splitTestNtpath.test_split   sP    -/AB@4	6 	%|48.	0 	$k246QRr    c                 j   [         R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        [        R                  S:X  a/  U R                  [        US5        U R                  [        US	5        g U R                  U" S
5      S5        g )Nzc:\fo o\ba r)c:\fo ozba rs   c:\fo o\ba r)   c:\fo os   ba ru
   c:\\)   c:\u   r   s   c:\\bars   c:\foo\s   c:\\)   c:\   )r%   splitrS   r   r   r   r   )rT   r   s     r   test_split_invalid_paths#TestNtpath.test_split_invalid_paths  s    563	5675	7341	3<<7"0%9IJ0%9IJU#4535r    c                 $   [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        S	S5        [        S
S5        [        SS5        [        SS5        [        SS5        [        SS5        g )Nzntpath.isabs("foo\bar")r   zntpath.isabs("foo/bar")zntpath.isabs("c:\")   zntpath.isabs("c:\foo\bar")zntpath.isabs("c:/foo/bar")z#ntpath.isabs("\\conky\mountpoint\")zntpath.isabs("\foo\bar")zntpath.isabs("/foo/bar")zntpath.isabs("c:foo\bar")zntpath.isabs("c:foo/bar")z"ntpath.isabs("\\conky\mountpoint")zntpath.isabs("\\.\C:")rl   rm   s    r   
test_isabsTestNtpath.test_isabs  s    )1-(!,%q)-q1+Q/8!< 	+Q/)1-+Q/*A. 	6:*A.r    c                 L    [        SS5        [        SS5        [        SS5        g )Nz>ntpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])z
/home/swenz;ntpath.commonprefix(["\home\swen\spam", "\home\swen\eggs"])z\home\swen\z;ntpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])z/home/swen/spamrl   rm   s    r   test_commonprefixTestNtpath.test_commonprefix,  s,    O	R	!L 	"r    c           	      j   [        SS5        [        SS5        [        SS5        [        SS5        [        SS	5        [        S
S5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        S S5        [        S!S5        [        S"S5        [        S#S$5        [        S%S&5        [        S'S(5        [        S)S*5        [        S+S,5        [        S-S.5        [        S/S05        [        S1S25        [        S3S45        [        S5S65        [        S7S85        [        S9S:5        [        S;S<5        [        S=S>5        [        S?S>5        [        S@S25        [        SAS25        [        SBS25        [        SCS25        [        SDS:5        [        SES:5        [        SFS:5        [        SGSH5        [        SISJ5        [        SKSL5        [        SMSN5        SO H!  nSP H  n[        SQU< SRU< SS3U5        M     M#     [        STSU5        [        SVSU5        [        SWSU5        [        SXSY5        [        SZS[5        [        S\S]5        [        S^S_5        [        S`Sa5        [        SbSc5        [        SdSU5        [        SeSf5        [        SgSh5        [        SiSj5        [        SkSl5        [        SmSh5        [        SnSo5        [        SpSq5        [        SrSs5        g )tNzntpath.join("")rj   zntpath.join("", "", "")zntpath.join("a")azntpath.join("/a")z/azntpath.join("\a")r   zntpath.join("a:")za:zntpath.join("a:", "\b")za:\bzntpath.join("a", "\b")z\bzntpath.join("a", "b", "c")za\b\czntpath.join("a\", "b", "c")zntpath.join("a", "b\", "c")zntpath.join("a", "b", "c\")za\b\c\zntpath.join("a", "b", "\c")z\czntpath.join("d:\", "\pleep")zd:\pleepzntpath.join("d:\", "a", "b")zd:\a\bzntpath.join('', 'a')z ntpath.join('', '', '', '', 'a')zntpath.join('a', '')za\z ntpath.join('a', '', '', '', '')zntpath.join('a\', '')z!ntpath.join('a\', '', '', '', '')zntpath.join('a/', '')za/zntpath.join('a/b', 'x/y')za/b\x/yzntpath.join('/a/b', 'x/y')z/a/b\x/yzntpath.join('/a/b/', 'x/y')z/a/b/x/yzntpath.join('c:', 'x/y')zc:x/yzntpath.join('c:a/b', 'x/y')z	c:a/b\x/yzntpath.join('c:a/b/', 'x/y')z	c:a/b/x/yzntpath.join('c:/', 'x/y')zc:/x/yzntpath.join('c:/a/b', 'x/y')z
c:/a/b\x/yzntpath.join('c:/a/b/', 'x/y')z
c:/a/b/x/yz&ntpath.join('//computer/share', 'x/y')z//computer/share\x/yz'ntpath.join('//computer/share/', 'x/y')z//computer/share/x/yz*ntpath.join('//computer/share/a/b', 'x/y')z//computer/share/a/b\x/yzntpath.join('a/b', '/x/y')z/x/yzntpath.join('/a/b', '/x/y')zntpath.join('c:', '/x/y')zntpath.join('c:a/b', '/x/y')zntpath.join('c:/', '/x/y')zntpath.join('c:/a/b', '/x/y')z'ntpath.join('//computer/share', '/x/y')z(ntpath.join('//computer/share/', '/x/y')z)ntpath.join('//computer/share/a', '/x/y')zntpath.join('c:', 'C:x/y')zC:x/yzntpath.join('c:a/b', 'C:x/y')z	C:a/b\x/yzntpath.join('c:/', 'C:x/y')zC:/x/yzntpath.join('c:/a/b', 'C:x/y')z
C:/a/b\x/y)
rj   za/bz/a/brv   zc:a/br   zc:/a/bz//computer/sharez//computer/share/z//computer/share/a/b)zd:zd:x/yzd:/zd:/x/yz//machine/commonz//machine/common/z//machine/common/x/yzntpath.join(z, )z*ntpath.join('\\computer\share\', 'a', 'b')z\\computer\share\a\bz)ntpath.join('\\computer\share', 'a', 'b')z&ntpath.join('\\computer\share', 'a\b')z*ntpath.join('//computer/share/', 'a', 'b')z//computer/share/a\bz)ntpath.join('//computer/share', 'a', 'b')z//computer/share\a\bz&ntpath.join('//computer/share', 'a/b')z//computer/share\a/bzntpath.join('\\', 'computer')z
\\computerz#ntpath.join('\\computer\', 'share')z\\computer\sharez%ntpath.join('\\computer\share\', 'a')z\\computer\share\az'ntpath.join('\\computer\share\a\', 'b')zntpath.join('a', 'Z:b', 'c')zZ:b\czntpath.join('a', 'Z:\b', 'c')zZ:\b\czntpath.join('a', '\\b\c', 'd')z\\b\c\dzntpath.join('a', '\b', 'c')z\b\czntpath.join('Z:/a', '/b', 'c')z"ntpath.join('//?/Z:/a', '/b', 'c')z
\\?\Z:\b\czntpath.join('D:a', './c:b')z	D:a\.\c:bzntpath.join('D:/a', './c:b')z
D:\a\.\c:brl   )rT   xys      r   	test_joinTestNtpath.test_join4  s
    "%("-!3'"D)#U+"D))73(%0+Y7-y9-y9-{;-u5/=.
;%s+137%u-159'/3U;&-*J7+[9,j9)73,l;-{;*H5-}=.=79PQ8:PQ;=XY+V4,f5*H5-x8+X6.98:PQ9;QR:<RS+W5.=,h7/?SAW15q9WS 	?A\]=?Z[;=XY;=TU:<TU79PQ0.A79NO:<TU=?Z[-x8/<2MB-x8/<36GH,m<-?r    c                    [         R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        [        R                  S	:X  a  S
OSnU R                  U" S5      U5        [        R                  S	:X  d  [        R
                  " 5       S:X  ai  U R                  U" SR                  5       5      SR                  5       5        U R                  U" SR                  5       5      UR                  5       5        g g )Nrj   r    ABCabc   ABCs   abcu   ÄŁΨu   äłψr   u   ωΩu   ωωu   ΩΩzutf-8)r%   r&   rS   r   r   getfilesystemencodingr?   )rT   r&   expecteds      r   test_normcaseTestNtpath.test_normcase  s   ??"r*#,%%0&)62"457IJ%(\\W%<>..18<<<7"c&?&?&AW&LX&8&?&?&AB/668:Xn&;&;&=>%__.0 'Mr    c                 Z   [         R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        [        R                  S:X  a?  S[        [        SS5      5      -   nU R                  U" U5      UR                  5       5        g g )Nzabc defs   abc def   r   r         )r%   r&   rS   r   r   r.   rangelower)rT   r&   r   s      r   test_normcase_invalid_paths&TestNtpath.test_normcase_invalid_paths  s    ??,/>-0-@(+X6<<7"E%S/22DXd^TZZ\: #r    c                    [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        S	S
5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        S S!5        [        S"S#5        [        S$S%5        [        S&S'5        [        S(S)5        [        S*S+5        [        S,S-5        [        S.S/5        [        S0S15        [        S2S35        [        S4S55        [        S6S75        [        S8S95        [        S:S;5        [        S<S;5        [        S=S;5        [        S>S;5        [        S?S@5        [        SASB5        [        SCSD5        [        SESF5        [        SGSH5        g )INz$ntpath.normpath('A//////././//.//B')zA\Bzntpath.normpath('A/./B')zntpath.normpath('A/foo/../B')zntpath.normpath('C:A//B')zC:A\Bzntpath.normpath('D:A/./B')zD:A\Bzntpath.normpath('e:A/foo/../B')ze:A\Bzntpath.normpath('C:///A//B')zC:\A\Bzntpath.normpath('D:///A/./B')zD:\A\Bz"ntpath.normpath('e:///A/foo/../B')ze:\A\Bzntpath.normpath('..')..zntpath.normpath('.').zntpath.normpath('c:.')rv   zntpath.normpath('')zntpath.normpath('/')r5   zntpath.normpath('c:/')r   zntpath.normpath('/../.././..')zntpath.normpath('c:/../../..')zntpath.normpath('/./a/b')\a\bzntpath.normpath('c:/./a/b')zc:\a\bzntpath.normpath('../.././..')..\..\..zntpath.normpath('K:../.././..')z
K:..\..\..zntpath.normpath('./a/b')a\bzntpath.normpath('c:./a/b')zc:a\bzntpath.normpath('C:////a/b')zC:\a\bz'ntpath.normpath('//machine/share//a/b')z\\machine\share\a\bzntpath.normpath('\\.\NUL')\\.\NULzntpath.normpath('\\?\D:/XY\Z')z\\?\D:/XY\Zz1ntpath.normpath('handbook/../../Tests/image.png')z..\Tests\image.pngz4ntpath.normpath('handbook/../../../Tests/image.png')z..\..\Tests\image.pngz.ntpath.normpath('handbook///../a/.././../b/c')z..\b\cz/ntpath.normpath('handbook/a/../..///../../b/c')z	..\..\b\cz$ntpath.normpath('//server/share/..')\\server\share\z%ntpath.normpath('//server/share/../')z'ntpath.normpath('//server/share/../..')z(ntpath.normpath('//server/share/../../')zntpath.normpath('\\foo\\')z\\foo\\zntpath.normpath('\\foo\')z\\foo\zntpath.normpath('\\foo')z\\foozntpath.normpath('\\')r6   z*ntpath.normpath('//?/UNC/server/share/..')z\\?\UNC\server\share\rl   rm   s    r   test_normpathTestNtpath.test_normpath  s   5v>)62.7*H5+X60(;-y9.	:3Y?&.%t,'.$d+%t,'0/6/8*G4,i8.<0-@)62+X6-y98:PQ.
;3^DBDYZEG_`?K@,O5;PQ6;PQ8;PQ9;PQ 	/?-{;+Y7(&1;=Z[r    c                 *   [         R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S	5        [        R                  S
:X  a/  U R                  [        US5        U R                  [        US5        g U R                  U" S5      S5        U R                  U" S5      S5        g )Nzfo os   fo ozfo o\..\barr   s   fo o\..\bars   barr   u
   \..\foorh   r      s   \..\foos   foo)r%   normpathrS   r   r   r   r   )rT   r   s     r   test_normpath_invalid_paths&TestNtpath.test_normpath_invalid_paths  s    ??),i8*-z:"45u="56?(+X6"34e<<<7"0(GD0(<LMXg.8X&67@r    c                     [         R                  " [        R                  " 5       5      n[	        SU5        [	        SU5        [	        SU5        [	        SU5        [	        SU5        g )Nzntpath.realpath('.')zntpath.realpath('./.')z&ntpath.realpath('/'.join(['.'] * 100))zntpath.realpath('.\.')z&ntpath.realpath('\'.join(['.'] * 100))r%   r   r'   getcwdrH   rT   r   s     r   test_realpath_curdirTestNtpath.test_realpath_curdir  sM    ??299;/%x0'27B((38(Cr    c                     [         R                  " [        R                  " 5       5      n[	        SU5        [	        SU5        [	        SU5        [	        SU5        [	        SU5        g )Nz!ntpath.realpath('.', strict=True)z#ntpath.realpath('./.', strict=True)z3ntpath.realpath('/'.join(['.'] * 100), strict=True)z#ntpath.realpath('.\.', strict=True)z3ntpath.realpath('\'.join(['.'] * 100), strict=True)r   r   s     r   test_realpath_curdir_strict&TestNtpath.test_realpath_curdir_strict  sM    ??299;/2H=4h?DhO5x@ExPr    c                     [         R                  " [        R                  " 5       5      n[	        SU5        [	        SU5        [	        SU5        [	        SU5        [	        SU5        g )Nz*ntpath.realpath('.', strict=ALLOW_MISSING)z,ntpath.realpath('./.', strict=ALLOW_MISSING)z<ntpath.realpath('/'.join(['.'] * 100), strict=ALLOW_MISSING)z,ntpath.realpath('.\.', strict=ALLOW_MISSING)z<ntpath.realpath('\'.join(['.'] * 100), strict=ALLOW_MISSING)r   r   s     r   test_realpath_curdir_missing_ok*TestNtpath.test_realpath_curdir_missing_ok  s\    ??299;/;	=	M	>	N	r    c                    [         R                  " [        R                  " 5       5      n[	        S[         R
                  " U5      5        [	        S[         R
                  " [         R
                  " U5      5      5        [	        S[         R                  " U5      S   S-   5        [	        S[         R
                  " [         R
                  " U5      5      5        [	        S[         R                  " U5      S   S-   5        g )Nzntpath.realpath('..')zntpath.realpath('../..')z&ntpath.realpath('/'.join(['..'] * 50))r   r5   zntpath.realpath('..\..')z&ntpath.realpath('\'.join(['..'] * 50))r%   r   r'   r   rH   dirnamer   r   s     r   test_realpath_pardirTestNtpath.test_realpath_pardir  s    ??299;/&x(@A)~~fnnX67	97  *1-4	6*~~fnnX67	98  *1-4	6r    c                    [         R                  " [        R                  " 5       5      n[	        S[         R
                  " U5      5        [	        S[         R
                  " [         R
                  " U5      5      5        [	        S[         R                  " U5      S   S-   5        [	        S[         R
                  " [         R
                  " U5      5      5        [	        S[         R                  " U5      S   S-   5        g )Nz"ntpath.realpath('..', strict=True)z%ntpath.realpath('../..', strict=True)z3ntpath.realpath('/'.join(['..'] * 50), strict=True)r   r5   z%ntpath.realpath('..\..', strict=True)z3ntpath.realpath('\'.join(['..'] * 50), strict=True)r   r   s     r   test_realpath_pardir_strict&TestNtpath.test_realpath_pardir_strict  s    ??299;/3V^^H5MN6~~fnnX67	9D  *1-4	67~~fnnX67	9E  *1-4	6r    c                    [         R                  " [        R                  " 5       5      n[	        S[         R
                  " U5      5        [	        S[         R
                  " [         R
                  " U5      5      5        [	        S[         R                  " U5      S   S-   5        [	        S[         R
                  " [         R
                  " U5      5      5        [	        S[         R                  " U5      S   S-   5        g )Nz+ntpath.realpath('..', strict=ALLOW_MISSING)z.ntpath.realpath('../..', strict=ALLOW_MISSING)z<ntpath.realpath('/'.join(['..'] * 50), strict=ALLOW_MISSING)r   r5   z.ntpath.realpath('..\..', strict=ALLOW_MISSING)z<ntpath.realpath('\'.join(['..'] * 50), strict=ALLOW_MISSING)r   r   s     r   test_realpath_pardir_missing_ok*TestNtpath.test_realpath_pardir_missing_ok  s    ??299;/<~~h'	)?~~fnnX67	9M  *1-4	6@~~fnnX67	9N  *1-4	6r    zneed _getfinalpathnamestrictTc                 x   [         R                  " [        R                  5      n[	        US5      R                  5         U R                  [        R                  U5        U R                  [        R                  US-   5        [        R                  " X"S-   5        U R                  [         R                  " US-   40 UD6U5        U R                  [         R                  " [        R                  " US-   5      40 UD6[        R                  " U5      5        [        R                   Vs1 s H  o3 S3iM	     sn[        [        R                   " 5       5      -
  nUR#                  5       R%                  5       nU R'                  [         R                  " USS9U5        U(       aG  U R)                  [*        5         [         R                  " [        R                  S-   40 UD6  S S S 5        g U R'                  US-   [         R                  " [        R                  S-   40 UD65        g s  snf ! , (       d  f       g = f)Nwb1z:\Fr   z spam)r%   abspathr   TESTFNopenclose
addCleanupunlinkr'   symlinkrW   realpathr=   stringascii_uppercaseset
listdrivespopr?   rS   r   r   )rT   rJ   ABSTFNcdrivesds         r   test_realpath_basicTestNtpath.test_realpath_basic  s    	 0 01VT  "	((&1	((&3,7


6C<(V__Vc\DVDfMV__R[[#-FQ&QV,	.
 &,%;%;<%;Cs)%;<s2==??SSJJL!591= ""7+	 0 08 ; *"(* ,+ Vh. &	0@0@80K Vv VX = ,+s   )H&8)H++
H9c                 V   [         R                  " [        R                  5      n[        R
                  " US-   U5        U R                  [        R                  U5        U R                  [        [         R                  USS9  U R                  [        [         R                  US-   SS9  g )Nr   Tr   2)r%   r   r   r   r'   r  r   r  r   FileNotFoundErrorr  rT   r	  s     r   test_realpath_strictTestNtpath.test_realpath_strict;  s{    
 	 0 01


6C<(	((&1+V__fTR+V__fslSWXr    c                 L   [         R                  n[         R                  " [        R                  5      n[
        R                  " U5      nUS-   nU R                  U" USS9U5        U R                  [        XSS9  U R                  [        X[        S9  US-   nU R                  U" USS9U5        U R                  [        XSS9  U R                  [        X[        S9  US-   nU R                  U" USS9U5        U R                  [        XSS9  U R                  [        X[        S9  US-   nU R                  U" USS9U5        U R                  [        XSS9  U R                  [        X[        S9  US-   nU R                  U" USS9[
        R                  " 5       5        U R                  U" USS9[
        R                  " 5       5        U R                  U" U[        S9[
        R                  " 5       5        US	-   nU R                  U" USS9[
        R                  " 5       5        U R                  U" USS9[
        R                  " 5       5        U R                  U" U[        S9[
        R                  " 5       5        US
-   nU R                  U" USS9US-   5        U R                  [        XSS9  U R                  U" U[        S9US-   5        US-   nU R                  U" USS9US-   5        U R                  [        XSS9  U R                  U" U[        S9US-   5        g )N Fr   T    z\nonexistent\x s   \nonexistent\x z \..s    \..z\nonexistent\x \..z\nonexistents   \nonexistent\x \..s   \nonexistent)r%   r  r   r   r   r'   r=   rS   r   r   r   r   getcwdb)rT   r  r	  ABSTFNbr   s        r   test_realpath_invalid_paths&TestNtpath.test_realpath_invalid_pathsF  s   ??	 0 01++f%$u5t<'8$?'8-H $u5t<'8$?'8-H..$u5t<'8$?'8-H00$u5t<'8$?'8-H
"$u5ryy{C$t4biikB$}=ryy{K$$u5rzz|D$t4bjjlC$}=rzz|L22$u5v7OP'8$?$}=v?WX44$u5wAQ7QR'8$?$}=wIY?YZr    c                 @   [         R                  n[         R                  " [        R                  5      n[
        R                  " U5      nUS-   nU R                  " [        X%40 UD6  U R                  " [        X%40 UD6  US-   nU R                  " [        X%40 UD6  U R                  " [        X%40 UD6  US-   nU R                  " [        X%40 UD6  U R                  " [        X%40 UD6  US-   nU R                  " [        X%40 UD6  U R                  " [        X%40 UD6  g )Nr   s   \nonexistent\s   \..s   \nonexistent\\..)	r%   r  r   r   r   r'   r=   r   r   )rT   rJ   r  r	  r  r   s         r   #test_realpath_invalid_unicode_paths.TestNtpath.test_realpath_invalid_unicode_pathsn  s	    ??	 0 01++f% ,hGG,hGG//,hGG,hGG$,hGG,hGG33,hGG,hGGr    c                    [         R                  " [        R                  5      n[	        US5      R                  5         U R                  [        R                  U5        U R                  [        R                  US-   5        [        R                  " U[         R                  " US-   5      5        U R                  [         R                  " US-   40 UD6U5        g )Nr   r   )r%   r   r   r   r   r   r   r  r'   r  relpathrW   r  )rT   rJ   r	  s      r   test_realpath_relative!TestNtpath.test_realpath_relative  s     	 0 01VT  "	((&1	((&3,7


66>>&3,78V__Vc\DVDfMr    c                 	   [         R                  " [        R                  5      n[        R
                  " U5        U R                  [        R                  U5        [        R                  " U5         [        R
                  " S5        [        R                  " S5        [        R                  " SS5        [        R                  " SS5        [        R                  " S5        [        R                  " SS5        [        R                  " SS5        [        R                  " S	S
5        [        R                  " SS5        [        R                  " SS5        [        R                  " US-   S5        [        R                  " SS5        U R                  [         R                  " S5      US-   5        U R                  [         R                  " S5      US-   5        U R                  [         R                  " S
5      US-   5        U R                  [         R                  " S5      US-   5        U R                  [         R                  " S5      US-   5        U R                  [         R                  " S5      US-   5        U R                  [         R                  " S5      US-   5        U R                  [         R                  " S5      US-   5        U R                  [         R                  " S5      [        R                  " US-   5      5        U R                  [         R                  " S5      [        R                  " US-   5      5        U R                  [         R                  " S5      [        R                  " US-   5      5        U R                  [         R                  " S5      [        R                  " US-   5      5        U R                  [         R                  " S5      [        R                  " US-   5      5        U R                  [         R                  " S 5      [        R                  " US-   5      5        U R                  [         R                  " S!5      [        R                  " US-   5      5        U R                  [         R                  " S"5      [        R                  " US-   5      5        S S S 5        g ! , (       d  f       g = f)#Nsubdirr   	recursiver   parentrT   missingbrokenz
broken\barbroken1zself\self\brokenbroken2z"subdir\parent\subdir\parent\brokenbroken3z\brokenbroken4zrecursive\..\brokenbroken5z\missingz
broken\fooz\missing\fooz\broken\barzbroken1\bazz\broken\bar\bazz\self\self\missingz$\subdir\parent\subdir\parent\missings   brokens
   broken\foos   broken1s   broken1\bazs   broken2s   broken3s   broken4s   broken5)r%   r   r   r   r'   mkdirr   rmtree
change_cwdchdirr  rW   r  r=   r  s     r   test_realpath_broken_symlinks(TestNtpath.test_realpath_broken_symlinks  sh    	 0 01
	((&1!!&)HHXHHXJJsK(JJtX&HHTNJJsF#JJy(+JJ}i0JJ*I6JJ<iHJJv
*I6JJ-y9  !:!'+!57  !?!'/!9;   !<!'.!8:  !@!'*<!<>  !;!'*?!?A  !;!'*Q!QS  !;!'+!57  !;!'+!57   !;!#Vk-A!BD  !@!#Vo-E!FH  !=!#Vn-D!EG  !A!#V6H-H!IK  !<!#V6K-K!LN  !=!#V6]-]!^`  !<!#Vk-A!BD  !<!#Vk-A!BD_ *))s   1QR??
Sc                 ~   [         R                  " [        R                  5      nU R	                  [        R
                  U5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        [        R                  " X5        U R                  [         R                  " U5      U5        [        R                  " US-   US-   5        [        R                  " US-   US-   5        US-   US-   4nU R                  [         R                  " US-   5      U5        U R                  [         R                  " US-   5      U5        U R                  [         R                  " US-   5      S U 5       5        U R                  [         R                  " US-   5      [         R                  " U5      5        U R                  [         R                  " US	-   5      [         R                  " U5      S
-   5        [        R                  " US-   US-   5        U R                  [         R                  " US-   [         R                  " U5      -   S-   5      US-   5        U R                  [         R                  " US-   [         R                  " U5      -   S-   5      U5        [        R                  " [         R                  " U5      S-   US-   5        U R                  [         R                  " US-   5      US-   5        [        R                  " S[         R                  " [         R                  " U5      5      -   S-   [         R                  " U5      -   S-   US-   5        U R                  [         R                  " US-   5      US-   5        U R                  [         R                  " [         R                  " U5      5      U5        g )Nr   r  r   r
  r   1\xc              3   P   #    U  H  n[         R                  " US 5      v   M     g7f)r   N)r%   join)r)   rs     r   r+   9TestNtpath.test_realpath_symlink_loops.<locals>.<genexpr>  s     A16;;q#..s   $&1\..1\..\x\xr   1\..\r   ..\r5   )r%   r   r   r   r   r  r'   r  rW   r  r\   r   basename)rT   r	  r   s      r   test_realpath_symlink_loops&TestNtpath.test_realpath_symlink_loops  s0    	 0 01	((&1	((&3,7	((&3,7	((&3,7	((&3,7	((&3,7


6"V__V4f=


6C<#.


6C<#.SL&3,/&//&3,7B&//&3,7B&//&6/:AA	CV__Vg-=>#^^F3	5V__Vj-@A#^^F3e;	=


6C<#.V__Vi-?/5v/F.GIL.M N#c\	+ 	&//&9*<,2OOF,C+DFI+J K"	$ 	

6??6*V3Vc\BV__Vc\:FSLI


6FOOFNN6,BCC"OOF3469:;AC<	IV__Vc\:FSLI 	V__V__V-DEvNr    c                    [         R                  " [        R                  5      nU R	                  [        R
                  U5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        [        R                  " X5        U R                  [        [         R                  USS9  [        R                  " US-   US-   5        [        R                  " US-   US-   5        U R                  [        [         R                  US-   SS9  U R                  [        [         R                  US-   SS9  U R                  [        [         R                  US-   SS9  U R                  [         R                  " US	-   SS9[         R                  " U5      5        U R                  [        [         R                  US
-   SS9  [        R                  " US-   US-   5        U R                  [        [         R                  US-   [         R                  " U5      -   S-   SS9  U R                  [        [         R                  US-   [         R                  " U5      -   S-   SS9  [        R                  " [         R                  " U5      S-   US-   5        U R                  [        [         R                  US-   SS9  [        R                  " S[         R                  " [         R                  " U5      5      -   S-   [         R                  " U5      -   S-   US-   5        U R                  [        [         R                  US-   SS9  U R                  [        [         R                  [         R                  " U5      SS9  g )Nr   r  r   r
  r   Tr   r5  r:  r;  r   r=  r   r>  r5   )r%   r   r   r   r   r  r'   r  r   r   r  rW   r   r?  r  s     r   "test_realpath_symlink_loops_strict-TestNtpath.test_realpath_symlink_loops_strict  s    	 0 01	((&1	((&3,7	((&3,7	((&3,7	((&3,7	((&3,7


6"'6??F4H


6C<#.


6C<#.'6??FSLN'6??FSLN'6??FVODQ 	V__Vg-=dK#^^F3	5'6??FZ4GPTU


6C<#.'6??FY4F/5v/F5GIL5M48 	 	: 	'6?? 9,vv/FFL!% 	 	' 	

6??6*V3Vc\B'6??FSLN


6FOOFNN6,BCC"OOF3469:;AC<	I'6??FSLN 	'6??FOOF4K!% 	 	'r    c                    [         R                  " [        R                  5      nU R	                  [        R
                  U5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        [        R                  " X5        U R                  [        [         R                  U[        S9  [        R                  " US-   US-   5        [        R                  " US-   US-   5        U R                  [        [         R                  US-   [        S9  U R                  [        [         R                  US-   [        S9  U R                  [        [         R                  US-   [        S9  U R                  [         R                  " US	-   5      [         R                  " U5      5        U R                  [         R                  " US
-   5      [         R                  " U5      S-   5        [        R                  " US-   US-   5        U R                  [         R                  " US-   [         R                  " U5      -   S-   5      US-   5        U R                  [        [         R                  US-   [         R                  " U5      -   S-   [        S9  [        R                  " [         R                  " U5      S-   US-   5        U R                  [        [         R                  US-   [        S9  [        R                  " S[         R                  " [         R                  " U5      5      -   S-   [         R                  " U5      -   S-   US-   5        U R                  [        [         R                  US-   [        S9  U R                  [        [         R                  [         R                  " U5      [        S9  g )Nr   r  r   r
  r   r   r   r5  r:  r;  r<  r=  r   r>  r5   )r%   r   r   r   r   r  r'   r  r   r   r  r   rW   r   r?  r  s     r   !test_realpath_symlink_loops_raise,TestNtpath.test_realpath_symlink_loops_raise!  sR    	 0 01	((&1	((&3,7	((&3,7	((&3,7	((&3,7	((&3,7	((&3,7


6"'6??F=Q


6C<#.


6C<#.'6??FSL#0 	 	2'6??FSL#0 	 	2'6??FVO#0 	 	2
 	V__Vg-=>#^^F3	5V__Vj-@A#^^F3e;	= 	

6C<#.V__Vi-?/5v/F.GIL.M N#c\	+ 	V__Y!883>  	 	"
 	

6??6*V3Vc\B'6??FSL#0 	 	2 	

6FOOFNN6,BCC013678>	F'6??FSL#0 	 	2 	'6??FOOF4K#0 	 	2r    c                    [         R                  " [        R                  5      nU R	                  [        R
                  US-   5        U R	                  [        R
                  SU-   S-   5        U R	                  [        R
                  US-   5        U R	                  [        R
                  US-   5        [        US-   S5       nUR                  S5        S S S 5        [        R                  " US-   US-   5        [        SU-   S-   S5       nUR                  S5        S S S 5        [        R                  " SU-   S-   US-   5        U R                  [         R                  " US-   40 UD6US-   5        U R                  [         R                  " US-   40 UD6SU-   S-   5        [        [         R                  " US-   5      S	5       nU R                  UR                  5       S5        S S S 5        [        [         R                  " US-   5      S	5       nU R                  UR                  5       S5        S S S 5        U R                  [         R                  " SU-   S-   40 UD6SU-   S-   5        U R                  [         R                  " SU-   S-   40 UD6SU-   S-   5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)
N3z\\?\z3.3linkz3.linkr      0   1rb)r%   r   r   r   r   r  r   writer'   r  rW   r  rS   read)rT   rJ   r	  fs       r   test_realpath_symlink_prefix'TestNtpath.test_realpath_symlink_prefixW  sN    	 0 01	((&3,7	(()f*<t*CD	((&7*:;	((&8*;<&3,%GGDM &


6C<'!12)f$t+T2aGGDM 3


9v%,fx.?@V__Vg-=HH#c\	+V__Vh->I&I&/$6	8 &//&7"23T:aQVVXt, ;&//&8"34d;qQVVXt, < 	V__Y-?'-ITVT&/#5	7V__Y-?(-JUfU&/$6	8- &% 32 ;:;;s0   J"J4!K!K"
J14
K
K
K%c                 d    [        SS5        [        SS5        [        SS5        [        SS5        g )Nzntpath.realpath('NUL')r   z$ntpath.realpath('NUL', strict=False)z#ntpath.realpath('NUL', strict=True)z,ntpath.realpath('NUL', strict=ALLOW_MISSING)rl   rm   s    r   test_realpath_nulTestNtpath.test_realpath_nulz  s.    '45zB4jA=zJr    zneed _getshortpathnamec                 <   [         R                  " [        R                  5      n[        R                  " U5        [        R
                  " U5        [        R                  " U5        U R                  [        R
                  U5        [         R                  " US5      n[        R                  " U5        [        U5      n[         R                  " US5      n[         R                  " US5      n[        US5       nUR                  S5        S S S 5        U R                  U[         R                  " U5      5        0 SS0S[        04 H  nU R                   " S0 UD6   [        R"                  " U5         U R                  U[         R                  " S0 UD65        S S S 5        [        R"                  " UR%                  5       5         U R                  U[         R                  " S0 UD65        S S S 5        [        R"                  " U5         U R                  U[         R                  " S0 UD65        S S S 5        S S S 5        M     g ! , (       d  f       GNB= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NO= f! , (       d  f       GMU  = f)	NMyVeryLongDirectoryNamefile.txtr      contentr   Tr^   )rX  )r%   r   r   r   r  r/  r'   r.  r   r7  r   r   rN  rW   r  r   subTestr0  r   )rT   r	  test_dir_longtest_dir_shorttest_file_longtest_file_shortrP  rJ   s           r   test_realpath_cwdTestNtpath.test_realpath_cwd  s    	 0 01  
	((&1F,EF
*=9]J? ++njA.$'1GGJ ( 	^V___-MN8T*X},EEF''))-8((&=f=? 9 ))-*=*=*?@((&=f=? A )).9((&=f=? : (' F (' 98 A@ :9 ('s`   9IJ2'I,J'I),J
'I:1J
I
I&"J)
I73J:
JJ
J	c                    [         R                  " [        R                  5      n[        R                  " U5        [        R
                  " U5        [        R                  " U5        U R                  [        R
                  U5        [         R                  " US5      n[         R                  " US5      n[        US5       nUR                  S5        S S S 5        [        R                  " SSSUS/[        R                  S9nUR                  (       a  [         R"                  " S	5      e U R%                  U[         R                  " U5      5        [        R                  " SUSS/[        R                  S9nUR                  (       a  [         R"                  " S5      eU R%                  U[         R                  " U5      5        g ! , (       d  f       N= f! [&         a    [         R"                  " S
5      ef = f)NzLongFileName123.txtzLONGFI~1.TXTr   rY  z
fsutil.exefilesetShortName)creationflagszfailed to set short namez8the filesystem seems to lack support for short filenamesz
icacls.exez/denyz*S-1-5-32-545:(S)z&failed to deny access to the test file)r%   r  r   r   r  r/  r'   r.  r   r7  r   rN  
subprocessrunDETACHED_PROCESS
returncodeunittestSkipTestrW   AssertionError)rT   r	  	test_filer^  rP  r*   s         r   test_realpath_permission#TestNtpath.test_realpath_permission  sz    !1!12  
	((&1KK(=>	 ++fn=)T"aGGJ #
 NN6>9nM$55
 <<##$>??	`  FOOO,LM NN9g/BC$55

 <<##$LMMY(HI; #"   	`##$^__	`s   G+&G 
G!G8c                 h   [         R                  " 5        nUR                  5         SUS'   SUS'   SUS'   [        SS5        [        SS	5        [        S
S5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS	5        [        SS5        [        SS5        [        SS5        [        S S!5        [        S"S#5        [        S$S%5        [        S&S'5        S S S 5        g ! , (       d  f       g = f)(Nr   rh   baz1z{foobaz2z{foo}zntpath.expandvars("foo")zntpath.expandvars("$foo bar")zbar barzntpath.expandvars("${foo}bar")barbarzntpath.expandvars("$[foo]bar")z	$[foo]barzntpath.expandvars("$bar bar")z$bar barzntpath.expandvars("$?bar")z$?barzntpath.expandvars("$foo}bar")zbar}barzntpath.expandvars("${foo")z${foozntpath.expandvars("${{foo}}")zbaz1}zntpath.expandvars("$foo$foo")zntpath.expandvars("$bar$bar")z$bar$barzntpath.expandvars("%foo% bar")zntpath.expandvars("%foo%bar")zntpath.expandvars("%foo%%foo%")z$ntpath.expandvars("%%foo%%foo%foo%")z%foo%foobarzntpath.expandvars("%?bar%")z%?bar%zntpath.expandvars("%foo%%bar")zbar%barz ntpath.expandvars("'%foo%'%bar")z'%foo%'%barzntpath.expandvars("bar'%foo%")z	bar'%foo%)r   EnvironmentVarGuardclearrH   rT   envs     r   test_expandvarsTestNtpath.test_expandvars  s   **,IIKCJ CK!CL-u52I>3X>3[A2J?/92I>/92G<2H=2J?3Y?2H=4h?9=I0(;3Y?7I4lC/ -,,s   DD##
D1zneed os_helper.FS_NONASCIIc                    S n[         R                  " 5        nUR                  5         [         R                  nX2S'   SU-   X#'   U" SSU-  5        U" SU-  SU-  5        U" SSU-  5        U" S	U-  S
U-  5        U" SSU-  5        U" SU-  SU-  5        U" SSU-  5        U" SR	                  U5      SU-  5        U" SSU-  5        U" SR	                  U5      S
U-  5        S S S 5        g ! , (       d  f       g = f)Nc                 "    [        SU -  U5        g )Nzntpath.expandvars(%r)rl   )valuer   s     r   check2TestNtpath.test_expandvars_nonascii.<locals>.check  s    *U2H=r    r   hamz	$spam barz%s barz$%s barz
${spam}barz%sbarz${%s}barzham%sbarz	$spam}barz%s}barz$%s}barz
%spam% barz%{}% barz	ham%s barz	%spam%barz%{}%bar)r   rs  rt  FS_NONASCIIr   )rT   r|  rv  nonasciis       r   test_expandvars_nonascii#TestNtpath.test_expandvars_nonascii  s   	>**,IIK ,,H"K!H,CM+x(23)h&	H(<=,( 23*x'h)>?+x(23)h&	H(<=,8 34*##H-{X/EF+w12)""8,j8.CD -,,s   CC--
C;c                    [        SS5        [        R                  " 5        nUR                  5         [        SS5        SUS'   SUS'   S	US
'   [        SS5        [        SS5        US	 [        SS5        [        SS5        UR                  5         SUS'   S	US
'   [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        UR                  5         SUS'   SUS'   S	US
'   [        SS5        [        SS5        UR                  5         SUS'   SUS
'   [        SS5        [        SS5        S S S 5        g ! , (       d  f       g = f)Nzntpath.expanduser("test")testzntpath.expanduser("~test")z~testC:\	HOMEDRIVEz
Users\ericHOMEPATHericUSERNAMEzC:\Users\testzntpath.expanduser("~")zC:\Users\ericz
Users\testUSERPROFILEz"ntpath.expanduser("~test\foo\bar")zC:\Users\test\foo\barz"ntpath.expanduser("~test/foo/bar")zC:\Users\test/foo/barzntpath.expanduser("~\foo\bar")zC:\Users\eric\foo\barzntpath.expanduser("~/foo/bar")zC:\Users\eric/foo/barzF:\HOMEidle)rH   r   rs  rt  ru  s     r   test_expanduserTestNtpath.test_expanduser  sn   *F3**,IIK/9%C+C
O$C
O/1BC+->?K /?+];IIK!2C$C
O/1BC+->?9.07,.5.03,. IIK CK!2C$C
O/1BC+->? IIK!2C$C
O/9+->?U -,,s   D*E
E#zabspath requires 'nt' modulec                    [        SS5        [        SS5        [        SS5        [        SS5        [        S	S5        [        S
S5        [        SS5        [        SS5        [        SS5        U R                  [        R                  " [        R                  " S5      5      5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        S S!5        [        S"S!5        [        S#S!5        [        S$S!5        [        S%S!5        [        S&S'5        [        S(S)5        [        S*S)5        [        S+S)5        [        S,S)5        [        S-S)5        [        S.S5        [        S/S5        [        S0S5        [        S1S5        [        S2S5        [
        R                  " [
        R                  5       n[        S3U5        [        S4US5-   5        [        S6US7-   5        [        R                  " U5      u  p#[        S8US9-   5        S S S 5        g ! , (       d  f       g = f):Nzntpath.abspath("C:\")r  z-ntpath.abspath("\\?\C:////spam////eggs. . .")z\\?\C:\spam\eggsz-ntpath.abspath("\\.\C:////spam////eggs. . .")z\\.\C:\spam\eggsz#ntpath.abspath("//spam//eggs. . .")z\\spam\eggsz#ntpath.abspath("\\spam\\eggs. . .")zntpath.abspath("C:/spam. . .")zC:\spamzntpath.abspath("C:\spam. . .")zntpath.abspath("C:/nul")r   zntpath.abspath("C:\nul")zC:spamzntpath.abspath("//..")r6   zntpath.abspath("//../")z\\..\zntpath.abspath("//../..")zntpath.abspath("//../../")z\\..\..\zntpath.abspath("//../../../")zntpath.abspath("//../../../..")z ntpath.abspath("//../../../../")zntpath.abspath("//server")z\\serverzntpath.abspath("//server/")z	\\server\zntpath.abspath("//server/..")zntpath.abspath("//server/../")z\\server\..\z ntpath.abspath("//server/../..")z!ntpath.abspath("//server/../../")z#ntpath.abspath("//server/../../..")z$ntpath.abspath("//server/../../../")z ntpath.abspath("//server/share")z\\server\sharez!ntpath.abspath("//server/share/")r   z#ntpath.abspath("//server/share/..")z$ntpath.abspath("//server/share/../")z&ntpath.abspath("//server/share/../..")z'ntpath.abspath("//server/share/../../")zntpath.abspath("C:\nul. . .")zntpath.abspath("//... . .")zntpath.abspath("//.. . . .")zntpath.abspath("//../... . .")zntpath.abspath("//../.. . . .")zntpath.abspath("")zntpath.abspath(" ")z\ zntpath.abspath("?")z\?zntpath.abspath("/abc/")z\abc)	rH   
assertTruer%   isabsr   r   temp_cwdr   r   )rT   cwd_dirdrive_s       r   test_abspathTestNtpath.test_abspath2  s   '0ACZ[ACZ[4:JK8:JK/*=0*=)L9*L9V^^H%=>?'6:(:>*:>+>B.>B0>B1>B+|D,~F.~F/7IJ17IJ27IJ47IJ57IJ1:MN2:OP4:OP5:OP7:OP8:OP/>,v6-v6/*=0*=	 0 01W'1('E/:('E/:((1HE,ego> 211s   AI
I+c                 ~   [         R                  n[        R                  S:X  a  U R	                  U" S5      [         R
                  " U" S5      S5      5        U R	                  U" S5      [         R
                  " U" S5      S5      5        U R	                  U" S5      S	5        U R	                  U" S
5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        U R	                  U" S5      S5        [        R                  S:X  a/  U R                  [        US5        U R                  [        US5        g U R	                  U" S5      S5        U R	                  U" S5      S5        g )Nr   zC: zC:r  s   C: s   C:r  z :spamz :\spams    :spams    :\spamr   r   zc:\fo o\..\barzc:\bars   c:\fo o\..\bars   c:\barr   u   c:\\..\foor   r   s   c:\\..\foos   c:\foo)r%   r   r   r   rS   r7  r   r   )rT   r   s     r   test_abspath_invalid_paths%TestNtpath.test_abspath_invalid_paths_  sh   ..<<7"WX.GDM60RSWY/WU^W1UVW[1=AW\2NC/?0.A!78)D!89:F.=!67C<<7"0';G0';OPW[1;?W%9:JGr    c                    [        SS5        [        SS5        [        SS5        [        SS5        [        R                  " [        R                  5       n[        R
                  " U5      n[        SS	U-   S
-   5        [        SS	U-   S-   5        S S S 5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        SS5        [        S S5        [        S!S5        [        S"S5        [        S#S5        g ! , (       d  f       N= f)$Nzntpath.relpath("a")r   z#ntpath.relpath(ntpath.abspath("a"))zntpath.relpath("a/b")r   zntpath.relpath("../a/b")z..\a\bzntpath.relpath("a", "../b")r>  r   zntpath.relpath("a/b", "../c")r   zntpath.relpath("a", "b/c")z..\..\az*ntpath.relpath("c:/foo/bar/bat", "c:/x/y")z..\..\foo\bar\batz@ntpath.relpath("//conky/mountpoint/a", "//conky/mountpoint/b/c")zntpath.relpath("a", "a")r   z(ntpath.relpath("/foo/bar/bat", "/x/y/z")z..\..\..\foo\bar\batz*ntpath.relpath("/foo/bar/bat", "/foo/bar")batz#ntpath.relpath("/foo/bar/bat", "/")zfoo\bar\batz#ntpath.relpath("/", "/foo/bar/bat")r   z$ntpath.relpath("/foo/bar/bat", "/x")z..\foo\bar\batz$ntpath.relpath("/x", "/foo/bar/bat")z
..\..\..\xzntpath.relpath("/", "/")zntpath.relpath("/a", "/a")zntpath.relpath("/a/b", "/a/b")z"ntpath.relpath("c:/foo", "C:/FOO"))rH   r   r  r   r%   r?  )rT   r  
currentdirs      r   test_relpathTestNtpath.test_relpaths  s*   $c*4c:&/):6	 0 01W1J0&2CE2IJ2F:4Eh4NO 2 	+[9;=TUQS^_)3/9;VW;UC4oF4lC57JK5G)3/+S1/53S9# 21s   ;E
Ec                   ^  S nU 4S jnT R                  [        [        R                  S 5        T R                  [        [        R                  / 5        T R                  [        [        R                  [        / 5      5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S	5        U" S/S5        U" SS/S5        U" S
S/S5        U" S
S
/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" SS/S5        U" S/S5        U" SS/S5        U" SS/S5        U" SS /S!5        U" S"S#/S!5        U" S$S%/S!5        U" / S&QS5        U" / S'QS!5        U" S(S)/S*5        U" S/S5        U" SS+/S5        U" SS,/S	5        T R                  [        [        R                  S-S/5        T R                  [        [        R                  S-S./5        T R                  [        [        R                  S/S/5        T R                  [        [        R                  SS0/5        T R                  [        [        R                  SS1/5        T R                  [        [        R                  SS0/5        g )2Nc                 B    [        SU -  R                  SS5      U5        g )Nzntpath.commonpath(%r)r6   r5   )rH   r;   )pathsr   s     r   r|  )TestNtpath.test_commonpath.<locals>.check  s"    +e3<<VTJr    c                   > TR                  [        U[        R                  U 5        TR                  [        U[        R                  U S S S2   5        TR                  [        U[        R                  U  Vs/ s H  n[        R
                  " U5      PM     sn5        TR                  [        U[        R                  U S S S2    Vs/ s H  n[        R
                  " U5      PM     sn5        g s  snf s  snf )N)assertRaisesRegex
ValueErrorr%   
commonpathr'   r=   )r  r   r*   rT   s      r   check_error/TestNtpath.test_commonpath.<locals>.check_error  s    "":x9J9JER"":x9J9JERVTVRVKX"":x9J9J<A#BEqBKKNE#BD"":x9J9J<A$B$K#HKqBKKNK#HJ $C#Hs   8 C1	 C6zC:\FoozC:Fooz%Can't mix absolute and relative pathsz\FoozPaths don't have the same driveFooz%Can't mix rooted and not-rooted pathszC:\Foo\zC:\\FoozC:\Foo\\zC:\.\FoozC:\Foo\.r  zC:\bazzC:\Barz
C:\Foo\Bazz
C:\Foo\BarzC:\BazzC:\Bar\z
C:/Foo/Bazz
c:/foo/bazz
c:/foo/barr   zD:\FoozD:Foor   alotrj   and\jamand\spamandzand\\jamz
and\spam\\z	and\.\jamz
.\and\spam)r  r  r  )r  r  r  z	C:and\jamz
C:and\spamzC:andz	spam\alotz
\spam\alots   C:\FoozFoo\Bazs   Foos
   C:\Foo\Bazs   Foo\Baz)r   	TypeErrorr%   r  r  iter)rT   r|  r  s   `  r   test_commonpathTestNtpath.test_commonpath  s$   		J 	)V%6%6=*f&7&7<*f&7&7bB 	Y(*QRY(*KLY&(IJWg&(IJWe$&GHWe$&MNyk9%y)$i0{I&	2{K()4{M*I6|\*I6vy!6*y)$f-y.)95~~.	:y)$f-{I&/~|,i8~|,i8|^,i8 	Y	*,MNY(*KLWg&(IJvhvv'vv#z;'/|_-u5}n-u5/4.6|]+W5rdBr< "% 	R(*QR)V%6%6^8TU)V%6%6Z8PQ)V%6%68PQ)V%6%6O8TU)V%6%6K8PQ)V%6%68PQr    z&Emscripten cannot fstat unnamed files.c           	      P   [        5        n[        5        nU R                  [        R                  " UR	                  5       UR	                  5       5      5        U R                  [        R                  " UR	                  5       UR	                  5       5      5        [        R                  S:X  a5  U R                  [        5         [        R                  " SS5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Nr   r  )
r   r  r%   sameopenfilefilenoassertFalser   r   r   r   )rT   tf1tf2s      r   test_sameopenfileTestNtpath.test_sameopenfile  s    _]_OOF//

cjjlKLV00szz|LM||w&&&w/ ''B/ 0 &5__ 0/ &5___s;   DB.DC5D$D5
D?D
D	D
D%c                    U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S	5      5        U R                  [        R                  " S
5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        [        R                  " 5        nU R                  [        R                  " U5      5        S S S 5        [        R                  S:X  GaH  [        R                  " S5      n[        R                  " U5      u  p4[        R                  " U5         U R                  [        R                  " UR                  5       5      5        U R                  [        R                  " UR                  5       5      5        S S S 5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        g g ! , (       d  f       GNm= f! , (       d  f       N= f)Nr   r  r   zC:/z\\.\c:\z\\.\C:\s   c:\s   C:\s   c:/s   C:/s   \\.\c:\s   \\.\C:\r   
SystemRootz\\localhost\c$z\\localhost\c$\s   \\localhost\c$s   \\localhost\c$\)r  r%   ismountr   temp_dirr  r   r   r'   getenvr   r0  r   upper)rT   r  test_cwdr  r   s        r   test_ismountTestNtpath.test_ismount  s   v./v./u-.u-.}56}56w/0w/0v./v./~67~67!QV^^A./ " <<7" yy.H ++H5KE%%h/  !>?  !>? 0 OOFNN+>?@OOFNN+@ABOOFNN+?@AOOFNN+ABC! # "! 0/s   &MA'M0
M-0
M>c                    [         R                  nU R                  U" S5      5        [        R                  S:X  aF  U R                  [        US5        U R                  [        US5        U R                  [        US5        g U R                  U" S5      5        U R                  U" S5      5        U R                  U" S5      5        g )Nr   r   zc:\ s   c:\ r   )r%   r  r  r   r   r   r  r   )rT   r  s     r   test_ismount_invalid_paths%TestNtpath.test_ismount_invalid_paths  s    .../<<7"j':>j';?0';GWZ01W[12W[12r    c                 r   U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S	5      5        U R                  [        R                  " S
5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S 5      5        U R                  [        R                  " S!5      5        U R                  [        R                  " S"5      5        U R                  [        R                  " S#5      5        U R                  [        R                  " S$5      5        U R                  [        R                  " S%5      5        U R                  [        R                  " S&5      5        U R                  [        R                  " S'5      5        U R                  [        R                  " S(5      5        U R                  [        R                  " S)5      5        U R                  [        R                  " S*5      5        U R                  [        R                  " S+5      5        g ),Nrj   r   r   rs   ru   zfoo.zfoo zoozfoo*barzfoo?barzfoo"barzfoo<barzfoo>barzfoo:barzfoo|barnulauxprnconzconin$zconout$COM1LPT9u   com¹u   com²u   lpt³zNUL.txtzPRN  z	AUX  .txtzCOM1:barzLPT9   :barzbar.com9zbar.lpt9zc:/bar/baz/NULzc:/NUL/bar/bazz//./NULr       .s   ..   /s   /foo/bars   foo.s   nul)r  r%   
isreservedr  rm   s    r   test_isreservedTestNtpath.test_isreserved  s   **2./**3/0**401**3/0**:67))&12))&12))&12)))45)))45)))45)))45)))45)))45)))45))%01))%01))%01))%01))(34)))45))&12))&12)))45)))45)))45 	)))45))'23))+67))*56))-89 	**:67**:67))*:;<))*:;<**956**3/0**401**512**401**;78))'23))&12r    c                 `    U R                  UR                  5       UR                  5       5        g r$   )rS   r   )rT   s1s2s      r   assertEqualCITestNtpath.assertEqualCIF  s    RXXZ0r    zOS helpers require 'nt' modulec                    [         R                  " [        R                  5      nU[        R
                  " U5      4 H\  n[         R                  " U5      n[        R                  " U5      S   n[        R                  " U5      S   nU R                  XE5        M^     [         R                  " [        R                  5      u  pgU R                  US5        U R                  US5        [         R                  " [        R                  R                  5       5      u  pU R                  X5        U R                  U	S5        [        R                  [        R                  4 H  n[         R                  " U5      n
U R!                  U
["        5        U R                  [%        U
5      S5        [         R                  " UR                  5       5      nU R!                  U[&        5        U R                  [%        U5      S5        M     g )Nr   )nt_getfinalpathnamer   
executabler'   r=   _getvolumepathnamer%   r   r  _getdiskusageexec_prefixassertGreaterr?   rS   prefixassertIsInstancer/   lenr.   )rT   r  r   volume_path
path_drivevolume_path_drivecapfreeb_capb_free
final_pathb_final_paths               r   test_nt_helpersTestNtpath.test_nt_helpersJ  st   
 ))#..9
J 77D//5K**403J & 1 1+ >q Az=	 8 $$S__5	3"4#(()?)?)AB$61%ZZ0D--d3J!!*c2s:2//>L!!,6s<0!4 1r    r   z/Can only test junctions with creation on win32.c                 l   [         R                  " 5        n[         R                  " U5         [        R                  " S5        SS Kn UR                  SS5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      [        R                  " S5      5        S S S 5        S S S 5        g ! [         a    [        R                  " S5      ef = f! , (       d  f       N;= f! , (       d  f       g = f)Ntmpdirr   testjuncz!creating the test junction failed)r   r  r0  r'   r.  _winapiCreateJunctionr   ri  rj  r  r%   
isjunctionr  rW   r  )rT   r  r  s      r   test_isjunctionTestNtpath.test_isjunctionh  s    !Q%%a("Q**8Z@  1 1* =>  !2!28!<=$$V__Z%@&//RZB[\ ) "!  Q"++,OPPQ )( "!s;   D%D	C0BDD%0!DD
D"	D%%
D3c                     [         R                  nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        g )Nu   /tmpabcdsFs
   /tmpabcdsz
/tmp abcdss
   /tmp abcds)r%   isfileassertIs)rT   r  s     r   test_isfile_invalid_paths$TestNtpath.test_isfile_invalid_pathsx  sZ    f./7f-.6f_-u5f-.6r    z#drive letters are a windows conceptc                    [         R                  R                  S5      nUb  [        U5      S:w  d	  US   S:w  a  [        R
                  " S5      eU R                  [         R                  R                  SU-   5      5        g )NSystemDrive   r   :z'SystemDrive is not defined or malformedz\\.\)	r'   environgetr  ri  rj  r  r   r  )rT   r  s     r   test_isfile_driveletter"TestNtpath.test_isfile_driveletter  s_    

}-=CJ!OuQx3##$MNN	E(9:;r    pipezneed os.pipe()c                 8   [         R                  " 5       u  p U R                  [        R                  " U5      5        [         R
                  " U5        [         R
                  " U5        g ! [         R
                  " U5        [         R
                  " U5        f = fr$   )r'   r  r  r%   r  r   )rT   prpws      r   test_isfile_anonymous_pipe%TestNtpath.test_isfile_anonymous_pipe  s[    	V]]2./HHRLHHRL HHRLHHRLs   %A+ +.Bzwindows onlyc           
         SS K nS[        R                  " 5        3nUR                  UUR                  SSSSSS5      n U R                  [        R                  " U5      5        UR                  U5        g ! UR                  U5        f = f)Nr   z//./PIPE/python_isfile_test_r   )	r  r'   getpidCreateNamedPipePIPE_ACCESS_INBOUNDr  r%   r  CloseHandle)rT   r  
named_pipehs       r   test_isfile_named_pipe!TestNtpath.test_isfile_named_pipe  sx    3BIIK=A
##J$+$?$?$%q!Q16	#V]]:67"G"s    %A7 7B
c                 t   U R                  [        R                  R                  S5      5        U R                  [        R                  R	                  S5      5        U R                  [        R                  R                  S5      5        U R                  [        R                  R                  S5      5        g )Nz\\.\CON)r  r'   r   r  isdirislinkr  existsrm   s    r   test_con_deviceTestNtpath.test_con_device  sl    
34z23
34z23r    zFast paths are only for win32c                 d   U R                  [        R                  R                  [        R
                  L 5        U R                  [        R                  " [        R                  R                  5      5        U R                  [        R                  R                  [        R                  L 5        U R                  [        R                  " [        R                  R                  5      5        U R                  [        R                  R                  [        R                  L 5        U R                  [        R                  " [        R                  R                  5      5        U R                  [        R                  R                  [        R                  L 5        U R                  [        R                  " [        R                  R                  5      5        U R                  [        R                  R                  [        R                   L 5        U R                  [        R                  " [        R                  R                  5      5        U R                  [        R                  R"                  [        R$                  L 5        U R                  [        R                  " [        R                  R"                  5      5        U R                  [        R                  R&                  [        R(                  L 5        U R                  [        R                  " [        R                  R&                  5      5        U R                  [        R                  R*                  [        R,                  L 5        U R                  [        R                  " [        R                  R*                  5      5        g r$   )r  r'   r   r   r  _path_splitroot_exr  inspect
isfunctionr   _path_normpathr  _path_isdirr  _path_isfiler  _path_islinkr  _path_isjunctionr  _path_existslexists_path_lexistsrm   s    r   test_fast_paths_in_use!TestNtpath.test_fast_paths_in_use  s    	))R-B-BBC++BGG,=,=>?((B,=,==>++BGG,<,<=>78++BGGMM:;"//9:++BGGNN;<"//9:++BGGNN;<**b.A.AAB++BGG,>,>?@"//9:++BGGNN;<2+;+;;<++BGGOO<=r    r  zDev Drives only exist on Win32c                 P   U R                  [        R                  " [        R                  5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " [
        R                  " 5       S   5      S5        U R                  [        R                  " S5      5        U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = f)N)TFr   r  r   z2\\?\Volume{00000000-0000-0000-0000-000000000000}\\)rZ   r%   
isdevdriver   r   r'   listvolumesr  r   r   r  _path_isdevdriverm   s    r   test_isdevdriveTestNtpath.test_isdevdrive  s     	f''	(8(89=If'',m<f''-}=f''(8(;<mL**+`abw' UV (''s   7D
D%z'isdevdrive fallback only used off Win32c                 j    U R                  [        R                  " [        R                  5      5        g r$   )r  r%   r(  r   r   rm   s    r   test_isdevdrive_fallback#TestNtpath.test_isdevdrive_fallback  s#     	**9+;+;<=r    r^   N)Nr_   r`   ra   rb   rn   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   skip_unless_symlinkri  
skipUnlessHAVE_GETFINALPATHNAMErN   r   r  r  r  r  r!  r2  r@  rC  rF  rQ  rT  HAVE_GETSHORTPATHNAMEr_  rm  rw  r  r  r  r  r  r  r  r  skipIfr   r  r  r  r  r  r  r   r   r  r  r  r1   r'   r  r  r  r   r%  namer+  r.  rc   r^   r    r   re   re   `   s}   
D10= XAtB 
S5/$"O@b0;.\`ADQ
6
66 "".0HI2$'(M)BCX D J #X4 "".0HIY J #Y .0HI%[ J%[N .0HI2$'(M)BCH D JH" "".0HI2$'(M)BCN D J #N "".0HI5D J #5Dn "".0HI+O J #+OZ "".0HI(' J #('T "".0HI22 J #22h "".0HI2$'(M)BC8 D J #8@ .0HIK JK .0HI.0HI!? J J!?F .0HI*J J*JXD4 ..0LME NE&-@b ;<*? =*?XH(:0CRJ __]$LM0 N0"DH
363p1 =>5 ?5: __S\\W,._`] a]7 __S\\W,.ST< U< V,.>? @ __S\\W,n=	# >	# __S\\W,n=4 >4 __S\\W,.MN>  O>* __RWW_&FGW HW __RWW_&OP> Q>r    re   c                       \ rS rSr\rS/rSrg)NtCommonTesti  r   r^   N)r_   r`   ra   rb   r%   
pathmodule
attributesrc   r^   r    r   r7  r7    s    JJr    r7  c                       \ rS rSr\rS rS rS rS r	S r
S rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)PathLikeTestsi  c                 B   [         R                  U l        [        [         R                  5      U l        U R                  [         R                  U R                  5        [        U R                  SS5       nUR                  S5        S S S 5        g ! , (       d  f       g = f)Nxbr   s   test_ntpath.PathLikeTests)	r   r   	file_namer	   	file_pathr   r  r   rN  )rT   rb  s     r   setUpPathLikeTests.setUp  sd    "))!)"2"23	(($..9$..$*dJJ34 +**s   5B
Bc                 h    U R                  U" U R                  5      U" U R                  5      5        g r$   )rW   r?  r>  )rT   funcs     r   _check_functionPathLikeTests._check_function  s$    T$..143GHr    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r&   rm   s    r   test_path_normcase PathLikeTests.test_path_normcase      TYY//0r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r  rm   s    r   test_path_isabsPathLikeTests.test_path_isabs      TYY__-r    c                     U R                  U R                  R                  S[        S5      S5      U R                  R                  SSS5      5        g )Nr   br
  )rS   r   r7  r	   rm   s    r   test_path_joinPathLikeTests.test_path_join  s;    Xc]C@S#6	8r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r   rm   s    r   test_path_splitPathLikeTests.test_path_split  rM  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   splitextrm   s    r   test_path_splitext PathLikeTests.test_path_splitext  rI  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r   rm   s    r   test_path_splitdrive"PathLikeTests.test_path_splitdrive      TYY112r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r   rm   s    r   test_path_splitroot!PathLikeTests.test_path_splitroot  s    TYY001r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r?  rm   s    r   test_path_basename PathLikeTests.test_path_basename  rI  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r   rm   s    r   test_path_dirnamePathLikeTests.test_path_dirname      TYY../r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r  rm   s    r   test_path_islinkPathLikeTests.test_path_islink  s    TYY--.r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r#  rm   s    r   test_path_lexistsPathLikeTests.test_path_lexists   rf  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r  rm   s    r   test_path_ismountPathLikeTests.test_path_ismount  rf  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   
expanduserrm   s    r   test_path_expanduser"PathLikeTests.test_path_expanduser  r\  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   
expandvarsrm   s    r   test_path_expandvars"PathLikeTests.test_path_expandvars	  r\  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r   rm   s    r   test_path_normpath PathLikeTests.test_path_normpath  rI  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r   rm   s    r   test_path_abspathPathLikeTests.test_path_abspath  rf  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r  rm   s    r   test_path_realpath PathLikeTests.test_path_realpath  rI  r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r   rm   s    r   test_path_relpathPathLikeTests.test_path_relpath  rf  r    c                     U R                   R                  U R                  U R                  /5      nU R	                  XR                  5        g r$   )r   r  r?  r>  rW   )rT   common_paths     r   test_path_commonpath"PathLikeTests.test_path_commonpath  s5    ii**DNNDNN+KL[..9r    c                 N    U R                  U R                  R                  5        g r$   )rD  r   r  rm   s    r   test_path_isdirPathLikeTests.test_path_isdir  rM  r    )r>  r?  N)r_   r`   ra   rb   r%   r   r@  rD  rG  rK  rP  rS  rW  rZ  r^  ra  rd  rh  rk  rn  rr  rv  ry  r|  r  r  r  r  rc   r^   r    r   r;  r;    sv    D5I1.8.13210/00331010:.r    r;  __main__)(r  r%   r'   r  re  r   ri  r@   r   r  r   test.supportr   r   r   r   test.support.os_helperr	   r
   tempfiler   r  ImportErrorr  r2  AttributeErrorr   r3  r   r3   rH   rN   TestCaserP   re   
CommonTestr7  r;  r_   mainr^   r    r   <module>r     s     	   
      0 2 + ! "!
 !# !
#<0E3X&& 3k> k>\+#..0A0A 
J.N J.Z zMMO Y0   
B  "!"  "!"s6   C C( $C6 C%$C%(C32C36D D