+
    Bi>-                       ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
HtHt ^ RI
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt  ^ RIt ]P,                   R	t ^ RItR	tR tR tR tR t ! R R]P>                  4      t  ! R R] 4      t! ! R R]PD                  ]P>                  4      t# ! R R] 4      t$]%R8X  d   ]PL                  ! 4        R# R#   ] d    Rt Li ; i  ] d    R
t Li ; i  ] d    R
t Li ; i)    N)support)cpython_only	os_helper)
TestFailed)ALLOW_MISSING)FakePath)test_genericpath)TemporaryFileTFc                    \         P                  ! R RR7      P                  p\         P                  \         P                  \         P                  .Vn        \         P                  Vn        V! V R^ 4      pV'       g.   \        RP                  \         P                  ! 4       4      4      h\         P                  ! V4      pV! WV4      pVRV # )kernel32T)use_last_errorNz&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   &   '/usr/lib/python3.14/test/test_ntpath.py_getshortpathnamer   &   s    }}Z=OO))6+;+;V__M$a(
B!6&"7"7"9:< <--j9$
3
kz""    c                 ,   \        V \        \        \        P                  34      '       d+   \
        P                  ! \        P                  ! V 4      4      # \        V R 4      '       d-   \        ;QJ d    . R V  4       F  NK  	  5# ! R V  4       4      # V # )__iter__c              3   v   "   T F/  p\         P                  ! \        P                  ! V4      4      x  K1  	  R # 5i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   _normr2   2   sf    $R[[122r{{4011	z	"	"uCdCuCuCdCCCKr   c           	         V P                  R R4      p \        V 4      pW8w  dK   \        V4      \        V4      8w  d2   \        \	        V 4      : R\	        V4      : R\	        V4      : 24      hV P                  RR4      p V P                  RR4      p V P                  RR	4      p V P                  R
R4      p V P                  RR4      p V P                  RR4      p \
        P                  ! V 4      P                  R4      p V P                  RR4      P                  R4      p \        P                  ! 4       ;_uu_ 4        \        P                  ! R\        4       \        V 4      pRRR4       \        V4      \        V4      8w  d2   \        \	        V 4      : R\	        V4      : R\        V4      : 24      hR#   + '       g   i     L\; i)\\\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ignoreN)replaceevalr2   r   r.   r&   fsencodedecodeencodewarningscatch_warningssimplefilterDeprecationWarningrepr)fn
wantResult	gotResults   && r   testerrG   :   sb   	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   ='F88G	c                  4    \         P                  ! R V RR7      # )kwargsT)_do_cleanups)r   subTests)
parameterss   *r   _parameterizerM   R   s    HjtDDr   c                   ,   a  ] tR t^Vt o R tR tRtV tR# )NtpathTestCasec                j    W8X  g   \        V4      \        V4      8X  d   R # V P                  W4       R # r#   )r2   assertEqual)selfpath1path2s   &&&r   assertPathEqualNtpathTestCase.assertPathEqualW   s'    >U5\U5\9&r   c                N    V P                  \        V4      \        V4      4       R # r#   )assertInr2   )rR   r   pathsets   &&&r   assertPathInNtpathTestCase.assertPathIn\   s    eDk5>2r    N)__name__
__module____qualname____firstlineno__rU   rZ   __static_attributes____classdictcell____classdict__s   @r   rO   rO   V   s     '
3 3r   rO   c                     a  ] tR t^`t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR t]P2                  ]P6                  ! ]R4      ]! / RR/R]/4      R 4       4       4       t]P2                  ]P6                  ! ]R4      R 4       4       t ]P6                  ! ]R4      R 4       t!]P6                  ! ]R4      ]! / RR/R]/4      R 4       4       t"]P2                  ]P6                  ! ]R4      ]! / RR/R]/4      R 4       4       4       t#]P2                  ]P6                  ! ]R4      R 4       4       t$]P2                  ]P6                  ! ]R4      R 4       4       t%]P2                  ]P6                  ! ]R4      R 4       4       t&]P2                  ]P6                  ! ]R4      R  4       4       t']P2                  ]P6                  ! ]R4      ]! / RR/R]/4      R! 4       4       4       t(]P6                  ! ]R4      R" 4       t)]P6                  ! ]R4      ]P6                  ! ]*R#4      R$ 4       4       t+]P6                  ! ]R4      R% 4       t,R& t-]P6                  ! ]P\                  R'4      R( 4       t/R) t0]P6                  ! ]1R*4      R+ 4       t2R, t3R- t4R. t5R/ t6R0 t7R1 t8R2 t9R3 t:]P6                  ! ]1R44      R5 4       t;]Px                  ! ]=P|                  R68g  R74      R8 4       t?R9 t@]Px                  ! ]=P|                  R68g  R:4      R; 4       tA]P6                  ! ]B! ]CR<4      R=4      R> 4       tD]Px                  ! ]=P|                  R68g  R?4      R@ 4       tE]Px                  ! ]=P|                  R68g  R?4      RA 4       tF]Px                  ! ]=P|                  R68g  RB4      ]GRC 4       4       tH]Px                  ! ]CP                  RD8g  RE4      RF 4       tJ]Px                  ! ]CP                  RD8H  RG4      RH 4       tKRItLV tMRJ# )K
TestNtpathc                    \        R R4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        R	R4       R
# )zntpath.splitext("foo.ext")zntpath.splitext("/foo/foo.ext")zntpath.splitext(".ext")zntpath.splitext("\foo.ext\foo")zntpath.splitext("foo.ext\")zntpath.splitext("")zntpath.splitext("foo.bar.ext")z!ntpath.splitext("xx/foo.bar.ext")z!ntpath.splitext("xx\foo.bar.ext")zntpath.splitext("c:a/b\c.d")N)foo.ext)z/foo/foori   )ri    )z\foo.ext\foorj   )zfoo.ext\rj   rj   rj   )zfoo.barri   )z
xx/foo.barri   )z
xx\foo.barri   )zc:a/b\cz.drG   rR   s   &r   test_splitextTestNtpath.test_splitexta   sw    +_=02FG(,724JK-/@A$h//1DE24JK35LM.0BCr   c                   \        R R4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        R	R4       \        R
R4       \        RR4       \        RR4       \        RR 4       \        RR!4       \        RR"4       \        RR#4       \        RR$4       R# )%zntpath.splitdrive('')zntpath.splitdrive('foo')zntpath.splitdrive('foo\bar')zntpath.splitdrive('foo/bar')zntpath.splitdrive('\')zntpath.splitdrive('/')zntpath.splitdrive('\foo\bar')zntpath.splitdrive('/foo/bar')zntpath.splitdrive("c:foo\bar")zntpath.splitdrive("c:foo/bar")zntpath.splitdrive("c:\foo\bar")zntpath.splitdrive("c:/foo/bar")zntpath.splitdrive('\\')zntpath.splitdrive('//')z/ntpath.splitdrive("\\conky\mountpoint\foo\bar")z/ntpath.splitdrive("//conky/mountpoint/foo/bar")z-ntpath.splitdrive("\\?\UNC\server\share\dir")z-ntpath.splitdrive("//?/UNC/server/share/dir")Nrk   )rj   rh   )rj   foo\bar)rj   foo/bar)rj   r4   )rj   /)rj   \foo\bar)rj   /foo/bar)c:rq   )rv   rr   )rv   rt   )rv   ru   )r5   rj   )//rj   )\\conky\mountpointrt   )//conky/mountpointru   )\\?\UNC\server\sharez\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                   \         P                  pV P                  V! R 4      R	4       V P                  V! R4      R
4       V P                  V! R4      R4       \        P                  R8X  dH   V P                  \        VR4       V P                  \        VR4       V P                  \        VR4       R# V P                  V! R4      R4       R# )\\ser ver\sha re\di r   \\ser ver\sha re\di r   \\\\win32   \\\share\dir   \\server\\dir   \\server\share\   \\\\N)\\ser ver\sha rez\di r)   \\ser ver\sha res   \di r)	   \\\u   \)   \\\s   \)r$   
splitdriverQ   sysplatformassertRaisesUnicodeDecodeError)rR   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                
   \        R R?4       \        RR@4       \        RRA4       \        RRB4       \        RRC4       \        RRD4       \        RRE4       \        RRF4       \        RRG4       \        R	RH4       \        R
RI4       \        RRJ4       \        RRK4       \        RRL4       \        RRM4       \        RRN4       \        RRO4       \        RRP4       \        RRQ4       \        RRR4       \        RRS4       \        RRT4       \        RRU4       \        RRV4       \        RRW4       \        RRX4       V P                  \        P                  ! R4      RY4       \        RRZ4       \        RR[4       \        RR\4       \        RR]4       \        RR^4       \        R R_4       \        R!R`4       \        R"Ra4       \        R#Rb4       \        R$Rc4       \        R%Rd4       \        R&Re4       \        R'Rf4       \        R(Rg4       \        R)Rh4       \        R*Ri4       \        R+Rj4       \        R,Rk4       \        R-Rl4       \        R.Rm4       \        R/Rn4       \        R0Ro4       \        R1Rp4       \        R2Rq4       \        R3Rr4       \        R4Rs4       \        R5Rt4       \        R6Ru4       \        R7RR4       \        R8Rv4       \        R9Rw4       \        R:Rx4       \        R;Ry4       \        R<Rz4       \        R=R{4       R># )|zntpath.splitroot('')zntpath.splitroot('foo')zntpath.splitroot('foo\bar')zntpath.splitroot('foo/bar')zntpath.splitroot('\')zntpath.splitroot('/')zntpath.splitroot('\foo\bar')zntpath.splitroot('/foo/bar')zntpath.splitroot("c:foo\bar")zntpath.splitroot("c:foo/bar")zntpath.splitroot("c:\foo\bar")zntpath.splitroot("c:/foo/bar")zntpath.splitroot('c:\\a')zntpath.splitroot('c:\\\a/b')zntpath.splitroot('c:/\')zntpath.splitroot('c:\/')zntpath.splitroot('/\a/b\/\')zntpath.splitroot('\/a\b/\/')zntpath.splitroot('\\')zntpath.splitroot('//')z.ntpath.splitroot("\\conky\mountpoint\foo\bar")z.ntpath.splitroot("//conky/mountpoint/foo/bar")z/ntpath.splitroot("\\\conky\mountpoint\foo\bar")z/ntpath.splitroot("///conky/mountpoint/foo/bar")z/ntpath.splitroot("\\conky\\mountpoint\foo\bar")z/ntpath.splitroot("//conky//mountpoint/foo/bar")u   //conky/MOUNTPOİNT/foo/barzntpath.splitroot("//?/c:")zntpath.splitroot("//./c:")zntpath.splitroot("//?/c:/")zntpath.splitroot("//?/c:/dir")zntpath.splitroot("//?/UNC")zntpath.splitroot("//?/UNC/")z#ntpath.splitroot("//?/UNC/server/")z(ntpath.splitroot("//?/UNC/server/share")z,ntpath.splitroot("//?/UNC/server/share/dir")zIntpath.splitroot("//?/VOLUME{00000000-0000-0000-0000-000000000000}/spam")z&ntpath.splitroot("//?/BootPartition/")z&ntpath.splitroot("//./BootPartition/")z&ntpath.splitroot("//./PhysicalDrive0")zntpath.splitroot("//./nul")zntpath.splitroot("\\?\c:")zntpath.splitroot("\\.\c:")zntpath.splitroot("\\?\c:\")zntpath.splitroot("\\?\c:\dir")zntpath.splitroot("\\?\UNC")zntpath.splitroot("\\?\UNC\")z#ntpath.splitroot("\\?\UNC\server\")z(ntpath.splitroot("\\?\UNC\server\share")z,ntpath.splitroot("\\?\UNC\server\share\dir")zIntpath.splitroot("\\?\VOLUME{00000000-0000-0000-0000-000000000000}\spam")z&ntpath.splitroot("\\?\BootPartition\")z&ntpath.splitroot("\\.\BootPartition\")z&ntpath.splitroot("\\.\PhysicalDrive0")zntpath.splitroot("\\.\nul")zntpath.splitroot("//")zntpath.splitroot("///")zntpath.splitroot("///y")zntpath.splitroot("//x")zntpath.splitroot("//x/")zntpath.splitroot(" :/foo")zntpath.splitroot("/:/foo")N)rj   rj   rj   )rj   rj   rh   )rj   rj   rq   )rj   rj   rr   )rj   r4   rj   )rj   rs   rj   )rj   r4   rq   )rj   rs   rr   )rv   rj   rq   )rv   rj   rr   )rv   r4   rq   )rv   rs   rr   )rv   r4   \a)rv   r4   z\\a/b)rv   rs   r4   )rv   r4   rs   )z/\a/br4   z/\)z\/a\brs   z\/)r5   rj   rj   )rw   rj   rj   )rx   r4   rq   )ry   rs   rr   )z\\\conkyr4   mountpoint\foo\bar)z///conkyrs   mountpoint/foo/bar)z\\conky\r4   r   )z//conky/rs   r   )u   //conky/MOUNTPOİNTrs   rr   )//?/c:rj   rj   )z//./c:rj   rj   )r   rs   rj   )r   rs   dir)z//?/UNCrj   rj   )z//?/UNC/rj   rj   )z//?/UNC/server/rj   rj   )r{   rj   rj   )r{   rs   r   )z0//?/VOLUME{00000000-0000-0000-0000-000000000000}rs   spam)z//?/BootPartitionrs   rj   )z//./BootPartitionrs   rj   )z//./PhysicalDrive0rj   rj   )z//./nulrj   rj   )\\?\c:rj   rj   )z\\.\c:rj   rj   )r   r4   rj   )r   r4   r   )z\\?\UNCrj   rj   )z\\?\UNC\rj   rj   )z\\?\UNC\server\rj   rj   )rz   rj   rj   )rz   r4   r   )z0\\?\VOLUME{00000000-0000-0000-0000-000000000000}r4   r   )z\\?\BootPartitionr4   rj   )z\\.\BootPartitionr4   rj   )z\\.\PhysicalDrive0rj   rj   )\\.\nulrj   rj   )z///rj   rj   )z///yrj   rj   )z//xrj   rj   )z//x/rj   rj   )z :rs   rh   )rj   rs   z:/foo)rG   rQ   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                   \         P                  pV P                  V! R 4      R	4       V P                  V! R4      R
4       V P                  V! R4      R4       \        P                  R8X  dH   V P                  \        VR4       V P                  \        VR4       V P                  \        VR4       R# V P                  V! R4      R4       R# )r   r   r   r   r   r   r   r   N)r   r4   zdi r)r      \s   di r)r   r4   u   )r   r      )r$   r   rQ   r   r   r   r   )rR   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                    \        R R4       \        RR4       \        RR	4       \        RR
4       \        RR4       \        RR4       R# )zntpath.split("c:\foo\bar")z*ntpath.split("\\conky\mountpoint\foo\bar")zntpath.split("c:\")z#ntpath.split("\\conky\mountpoint\")zntpath.split("c:/")z#ntpath.split("//conky/mountpoint/")N)c:\foobar)z\\conky\mountpoint\foor   )c:\rj   )z\\conky\mountpoint\rj   )c:/rj   )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                p   \         P                  pV P                  V! R 4      R4       V P                  V! R4      R	4       V P                  V! R4      R
4       \        P                  R8X  d1   V P                  \        VR4       V P                  \        VR4       R# V P                  V! R4      R4       R# )zc:\fo o\ba rs   c:\fo o\ba ru
   c:\\r   s   c:\\bars   c:\foo\s   c:\\N)c:\fo ozba r)   c:\fo os   ba r)   c:\u   )   c:\   )r$   splitrQ   r   r   r   r   )rR   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                &   \        R ^ 4       \        R^ 4       \        R^4       \        R^4       \        R^4       \        R^4       \        R^ 4       \        R^ 4       \        R^ 4       \        R	^ 4       \        R
^4       \        R^4       R# )zntpath.isabs("foo\bar")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:")Nrl   rm   s   &r   
test_isabsTestNtpath.test_isabs  s    )1-(!,%q)-q1+Q/8!< 	+Q/)1-+Q/*A. 	6:*A.r   c                N    \        R R4       \        RR4       \        RR4       R# )z>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/spamNrl   rm   s   &r   test_commonprefixTestNtpath.test_commonprefix,  s,    O	R	!L 	"r   c           	     l   \        R R4       \        RR4       \        RR4       \        RR4       \        RR4       \        R	R
4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        R R4       \        R!R4       \        R"R#4       \        R$R%4       \        R&R'4       \        R(R)4       \        R*R+4       \        R,R-4       \        R.R/4       \        R0R14       \        R2R34       \        R4R54       \        R6R74       \        R8R94       \        R:R;4       \        R<R=4       \        R>R=4       \        R?R14       \        R@R14       \        RAR14       \        RBR14       \        RCR94       \        RDR94       \        RER94       \        RFRG4       \        RHRI4       \        RJRK4       \        RLRM4       Rr F!  pRs F  p\        RNV: ROV: RP2V4       K  	  K#  	  \        RQRR4       \        RSRR4       \        RTRR4       \        RURV4       \        RWRX4       \        RYRZ4       \        R[R\4       \        R]R^4       \        R_R`4       \        RaRR4       \        RbRc4       \        RdRe4       \        RfRg4       \        RhRi4       \        RjRe4       \        RkRl4       \        RmRn4       \        RoRp4       Rq# )tz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/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:bN)
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/yrl   )rR   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                   \         P                  pV P                  V! R 4      R 4       V P                  V! R4      R4       V P                  V! R4      R4       V P                  V! R4      R4       V P                  V! R4      R4       \        P                  R8X  d   R	MR
pV P                  V! R4      V4       \        P                  R8X  g   \        P
                  ! 4       R8X  dk   V P                  V! RP                  4       4      RP                  4       4       V P                  V! RP                  4       4      VP                  4       4       R# R# )rj   r   ABCabc   ABCs   abcu   ÄŁΨu   äłψr   u   ωΩu   ωωu   ΩΩzutf-8N)r$   r%   rQ   r   r   getfilesystemencodingr>   )rR   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                h   \         P                  pV P                  V! R 4      R 4       V P                  V! R4      R4       V P                  V! R4      R4       \        P                  R8X  dE   R\        \        ^R4      4      ,           pV P                  V! V4      VP                  4       4       R# R# )zabc defs   abc def   r   r      N)r$   r%   rQ   r   r   r-   rangelower)rR   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                   \        R R4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR	4       \        R
R4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR 4       \        R!R"4       \        R#R$4       \        R%R&4       \        R'R(4       \        R)R*4       \        R+R,4       \        R-R.4       \        R/R04       \        R1R24       \        R3R44       \        R5R64       \        R7R84       \        R9R:4       \        R;R:4       \        R<R:4       \        R=R:4       \        R>R?4       \        R@RA4       \        RBRC4       \        RDRE4       \        RFRG4       RH# )Iz$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('/')r4   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('\\')r5   z*ntpath.normpath('//?/UNC/server/share/..')z\\?\UNC\server\share\Nrl   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                0   \         P                  pV P                  V! R 4      R 4       V P                  V! R4      R4       V P                  V! R4      R4       V P                  V! R4      R4       V P                  V! R4      R4       V P                  V! R4      R4       \        P                  R	8X  d1   V P                  \        VR
4       V P                  \        VR4       R# V P                  V! R
4      R
4       V P                  V! R4      R4       R# )zfo os   fo ozfo o\..\barr   s   fo o\..\bars   barr   u
   \..\foorh   r      s   \..\foos   fooN)r$   normpathrQ   r   r   r   r   )rR   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                    \         P                  ! \        P                  ! 4       4      p\	        R V4       \	        RV4       \	        RV4       \	        RV4       \	        RV4       R# )zntpath.realpath('.')zntpath.realpath('./.')z&ntpath.realpath('/'.join(['.'] * 100))zntpath.realpath('.\.')z&ntpath.realpath('\'.join(['.'] * 100))Nr$   r   r&   getcwdrG   rR   r   s   & r   test_realpath_curdirTestNtpath.test_realpath_curdir  sM    ??299;/%x0'27B((38(Cr   c                    \         P                  ! \        P                  ! 4       4      p\	        R V4       \	        RV4       \	        RV4       \	        RV4       \	        RV4       R# )z!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)Nr   r   s   & r   test_realpath_curdir_strict&TestNtpath.test_realpath_curdir_strict  sM    ??299;/2H=4h?DhO5x@ExPr   c                    \         P                  ! \        P                  ! 4       4      p\	        R V4       \	        RV4       \	        RV4       \	        RV4       \	        RV4       R# )z*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)Nr   r   s   & r   test_realpath_curdir_missing_ok*TestNtpath.test_realpath_curdir_missing_ok  s\    ??299;/;	=	M	>	N	r   c                    \         P                  ! \        P                  ! 4       4      p\	        R \         P
                  ! V4      4       \	        R\         P
                  ! \         P
                  ! V4      4      4       \	        R\         P                  ! V4      ^ ,          R,           4       \	        R\         P
                  ! \         P
                  ! V4      4      4       \	        R\         P                  ! V4      ^ ,          R,           4       R# )zntpath.realpath('..')zntpath.realpath('../..')z&ntpath.realpath('/'.join(['..'] * 50))r4   zntpath.realpath('..\..')z&ntpath.realpath('\'.join(['..'] * 50))Nr$   r   r&   r   rG   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                    \         P                  ! \        P                  ! 4       4      p\	        R \         P
                  ! V4      4       \	        R\         P
                  ! \         P
                  ! V4      4      4       \	        R\         P                  ! V4      ^ ,          R,           4       \	        R\         P
                  ! \         P
                  ! V4      4      4       \	        R\         P                  ! V4      ^ ,          R,           4       R# )z"ntpath.realpath('..', strict=True)z%ntpath.realpath('../..', strict=True)z3ntpath.realpath('/'.join(['..'] * 50), strict=True)r4   z%ntpath.realpath('..\..', strict=True)z3ntpath.realpath('\'.join(['..'] * 50), strict=True)Nr   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                    \         P                  ! \        P                  ! 4       4      p\	        R \         P
                  ! V4      4       \	        R\         P
                  ! \         P
                  ! V4      4      4       \	        R\         P                  ! V4      ^ ,          R,           4       \	        R\         P
                  ! \         P
                  ! V4      4      4       \	        R\         P                  ! V4      ^ ,          R,           4       R# )z+ntpath.realpath('..', strict=ALLOW_MISSING)z.ntpath.realpath('../..', strict=ALLOW_MISSING)z<ntpath.realpath('/'.join(['..'] * 50), strict=ALLOW_MISSING)r4   z.ntpath.realpath('..\..', strict=ALLOW_MISSING)z<ntpath.realpath('\'.join(['..'] * 50), strict=ALLOW_MISSING)Nr   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                   \         P                  ! \        P                  4      p\	        VR 4      P                  4        V P                  \        P                  V4       V P                  \        P                  VR,           4       \        P                  ! W"R,           4       V P                  \         P                  ! VR,           3/ VB V4       V P                  \         P                  ! \        P                  ! VR,           4      3/ VB \        P                  ! V4      4       \        P                   Uu0 uF  q3 R2kK	  	  up\        \        P                   ! 4       4      ,
          pVP#                  4       P%                  4       pV P'                  \         P                  ! VRR7      V4       V'       dU   V P)                  \*        4      ;_uu_ 4        \         P                  ! \        P                  R,           3/ VB  RRR4       R# V P'                  VR,           \         P                  ! \        P                  R,           3/ VB 4       R# u upi   + '       g   i     R# ; i)wb1z:\Fr   z spamN)r$   abspathr   TESTFNopenclose
addCleanupunlinkr&   symlinkrU   realpathr<   stringascii_uppercaseset
listdrivespopr>   rQ   r   r   )rR   rI   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   9I-II)	c                t   \         P                  ! \        P                  4      p\        P
                  ! VR ,           V4       V P                  \        P                  V4       V P                  \        \         P                  VRR7       V P                  \        \         P                  VR,           RR7       R# )r   Tr   2N)r$   r   r   r   r&   r   r   r   r   FileNotFoundErrorr  rR   r  s   & r   test_realpath_strictTestNtpath.test_realpath_strict;  s{    
 	 0 01


6C<(	((&1+V__fTR+V__fslSWXr   c                >   \         P                  p\         P                  ! \        P                  4      p\
        P                  ! V4      pVR ,           pV P                  V! VRR7      V4       V P                  \        WRR7       V P                  \        W\        R7       VR,           pV P                  V! VRR7      V4       V P                  \        WRR7       V P                  \        W\        R7       VR,           pV P                  V! VRR7      V4       V P                  \        WRR7       V P                  \        W\        R7       VR,           pV P                  V! VRR7      V4       V P                  \        WRR7       V P                  \        W\        R7       VR,           pV P                  V! VRR7      \
        P                  ! 4       4       V P                  V! VRR7      \
        P                  ! 4       4       V P                  V! V\        R7      \
        P                  ! 4       4       VR,           pV P                  V! VRR7      \
        P                  ! 4       4       V P                  V! VRR7      \
        P                  ! 4       4       V P                  V! V\        R7      \
        P                  ! 4       4       VR	,           pV P                  V! VRR7      VR
,           4       V P                  \        WRR7       V P                  V! V\        R7      VR
,           4       VR,           pV P                  V! VRR7      VR,           4       V P                  \        WRR7       V P                  V! V\        R7      VR,           4       R# ) Fr   T    z\nonexistent\x s   \nonexistent\x z \..s    \..z\nonexistent\x \..z\nonexistents   \nonexistent\x \..s   \nonexistentN)r$   r  r   r   r   r&   r<   rQ   r   r   r   r   getcwdb)rR   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                b   \         P                  p\         P                  ! \        P                  4      p\
        P                  ! V4      pVR ,           pV P                  ! \        W%3/ VB  V P                  ! \        W%3/ VB  VR,           pV P                  ! \        W%3/ VB  V P                  ! \        W%3/ VB  VR,           pV P                  ! \        W%3/ VB  V P                  ! \        W%3/ VB  VR,           pV P                  ! \        W%3/ VB  V P                  ! \        W%3/ VB  R# )r   s   \nonexistent\s   \..s   \nonexistent\\..N)	r$   r  r   r   r   r&   r<   r   r   )rR   rI   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                   \         P                  ! \        P                  4      p\	        VR 4      P                  4        V P                  \        P                  V4       V P                  \        P                  VR,           4       \        P                  ! V\         P                  ! VR,           4      4       V P                  \         P                  ! VR,           3/ VB V4       R# )r   r   N)r$   r   r   r   r   r   r   r   r&   r   relpathrU   r  )rR   rI   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           	     @
   \         P                  ! \        P                  4      p\        P
                  ! V4       V P                  \        P                  V4       \        P                  ! V4      ;_uu_ 4        \        P
                  ! R 4       \        P                  ! R 4       \        P                  ! RR4       \        P                  ! RR4       \        P                  ! R4       \        P                  ! RR4       \        P                  ! RR4       \        P                  ! RR	4       \        P                  ! R
R4       \        P                  ! RR4       \        P                  ! VR,           R4       \        P                  ! RR4       V P                  \         P                  ! R4      VR,           4       V P                  \         P                  ! R4      VR,           4       V P                  \         P                  ! R	4      VR,           4       V P                  \         P                  ! R4      VR,           4       V P                  \         P                  ! R4      VR,           4       V P                  \         P                  ! R4      VR,           4       V P                  \         P                  ! R4      VR,           4       V P                  \         P                  ! R4      VR,           4       V P                  \         P                  ! R4      \        P                  ! VR,           4      4       V P                  \         P                  ! R4      \        P                  ! VR,           4      4       V P                  \         P                  ! R4      \        P                  ! VR,           4      4       V P                  \         P                  ! R4      \        P                  ! VR,           4      4       V P                  \         P                  ! R4      \        P                  ! VR,           4      4       V P                  \         P                  ! R4      \        P                  ! VR,           4      4       V P                  \         P                  ! R 4      \        P                  ! VR,           4      4       V P                  \         P                  ! R!4      \        P                  ! VR,           4      4       R"R"R"4       R"#   + '       g   i     R"# ; i)#subdirr   	recursiver   parentrR   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   broken5N)r$   r   r   r   r&   mkdirr   rmtree
change_cwdchdirr   rU   r  r<   r  s   & r   test_realpath_broken_symlinks(TestNtpath.test_realpath_broken_symlinks  sn    	 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   9R	TT	c                	   \         P                  ! \        P                  4      pV P	                  \        P
                  V4       V P	                  \        P
                  VR ,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       \        P                  ! W4       V P                  \         P                  ! V4      V4       \        P                  ! VR ,           VR,           4       \        P                  ! VR,           VR ,           4       VR ,           VR,           3pV P                  \         P                  ! VR ,           4      V4       V P                  \         P                  ! VR,           4      V4       V P                  \         P                  ! VR,           4      R V 4       4       V P                  \         P                  ! VR,           4      \         P                  ! V4      4       V P                  \         P                  ! VR,           4      \         P                  ! V4      R	,           4       \        P                  ! VR
,           VR,           4       V P                  \         P                  ! VR,           \         P                  ! V4      ,           R,           4      VR
,           4       V P                  \         P                  ! VR,           \         P                  ! V4      ,           R ,           4      V4       \        P                  ! \         P                  ! V4      R,           VR,           4       V P                  \         P                  ! VR,           4      VR,           4       \        P                  ! R\         P                  ! \         P                  ! V4      4      ,           R,           \         P                  ! V4      ,           R,           VR,           4       V P                  \         P                  ! VR,           4      VR,           4       V P                  \         P                  ! \         P                  ! V4      4      V4       R# )r   r  r   r  r   1\xc              3   P   "   T F  p\         P                  ! VR 4      x  K  	  R# 5i)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   ..\r4   N)r$   r   r   r   r   r   r&   r   rU   r  rZ   r   basename)rR   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                .	   \         P                  ! \        P                  4      pV P	                  \        P
                  V4       V P	                  \        P
                  VR ,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       \        P                  ! W4       V P                  \        \         P                  VRR7       \        P                  ! VR ,           VR,           4       \        P                  ! VR,           VR ,           4       V P                  \        \         P                  VR ,           RR7       V P                  \        \         P                  VR,           RR7       V P                  \        \         P                  VR,           RR7       V P                  \         P                  ! VR,           RR7      \         P                  ! V4      4       V P                  \        \         P                  VR	,           RR7       \        P                  ! VR
,           VR,           4       V P                  \        \         P                  VR,           \         P                  ! V4      ,           R,           RR7       V P                  \        \         P                  VR,           \         P                  ! V4      ,           R ,           RR7       \        P                  ! \         P                  ! V4      R,           VR,           4       V P                  \        \         P                  VR,           RR7       \        P                  ! R\         P                  ! \         P                  ! V4      4      ,           R,           \         P                  ! V4      ,           R,           VR,           4       V P                  \        \         P                  VR,           RR7       V P                  \        \         P                  \         P                  ! V4      RR7       R# )r   r  r   r  r   Tr   r3  r8  r9  r   r;  r   r<  r4   N)r$   r   r   r   r   r   r&   r   r   r   r  rU   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                	   \         P                  ! \        P                  4      pV P	                  \        P
                  V4       V P	                  \        P
                  VR ,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       \        P                  ! W4       V P                  \        \         P                  V\        R7       \        P                  ! VR ,           VR,           4       \        P                  ! VR,           VR ,           4       V P                  \        \         P                  VR ,           \        R7       V P                  \        \         P                  VR,           \        R7       V P                  \        \         P                  VR,           \        R7       V P                  \         P                  ! VR,           4      \         P                  ! V4      4       V P                  \         P                  ! VR	,           4      \         P                  ! V4      R
,           4       \        P                  ! VR,           VR,           4       V P                  \         P                  ! VR,           \         P                  ! V4      ,           R,           4      VR,           4       V P                  \        \         P                  VR,           \         P                  ! V4      ,           R ,           \        R7       \        P                  ! \         P                  ! V4      R,           VR,           4       V P                  \        \         P                  VR,           \        R7       \        P                  ! R\         P                  ! \         P                  ! V4      4      ,           R,           \         P                  ! V4      ,           R,           VR,           4       V P                  \        \         P                  VR,           \        R7       V P                  \        \         P                  \         P                  ! V4      \        R7       R# )r   r  r   r  r   r   r   r3  r8  r9  r:  r;  r   r<  r4   N)r$   r   r   r   r   r   r&   r   r   r   r  r   rU   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                   \         P                  ! \        P                  4      pV P	                  \        P
                  VR ,           4       V P	                  \        P
                  RV,           R,           4       V P	                  \        P
                  VR,           4       V P	                  \        P
                  VR,           4       \        VR ,           R4      ;_uu_ 4       pVP                  R4       RRR4       \        P                  ! VR ,           VR,           4       \        RV,           R,           R4      ;_uu_ 4       pVP                  R4       RRR4       \        P                  ! RV,           R,           VR,           4       V P                  \         P                  ! VR,           3/ VB VR ,           4       V P                  \         P                  ! VR,           3/ VB RV,           R,           4       \        \         P                  ! VR,           4      R	4      ;_uu_ 4       pV P                  VP                  4       R4       RRR4       \        \         P                  ! VR,           4      R	4      ;_uu_ 4       pV P                  VP                  4       R4       RRR4       V P                  \         P                  ! RV,           R,           3/ VB RV,           R ,           4       V P                  \         P                  ! RV,           R,           3/ VB RV,           R,           4       R#   + '       g   i     ELG; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     L; i)
3z\\?\z3.3linkz3.linkr      0N   1rb)r$   r   r   r   r   r   r   writer&   r   rU   r  rQ   read)rR   rI   r  fs   &&  r   test_realpath_symlink_prefix'TestNtpath.test_realpath_symlink_prefixW  sc    	 0 01	((&3,7	(()f*<t*CD	((&7*:;	((&8*;<&3,%%GGDM &


6C<'!12)f$t+T2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2 ;::;;s0   #L3M*!M!M/3M	M	M,	/M?	c                f    \        R R4       \        RR4       \        RR4       \        RR4       R# )zntpath.realpath('NUL')r   z$ntpath.realpath('NUL', strict=False)z#ntpath.realpath('NUL', strict=True)z,ntpath.realpath('NUL', strict=ALLOW_MISSING)Nrl   rm   s   &r   test_realpath_nulTestNtpath.test_realpath_nulz  s.    '45zB4jA=zJr   zneed _getshortpathnamec                   \         P                  ! \        P                  4      p\        P                  ! V4       \        P
                  ! V4       \        P                  ! V4       V P                  \        P
                  V4       \         P                  ! VR 4      p\        P                  ! V4       \        V4      p\         P                  ! VR4      p\         P                  ! VR4      p\        VR4      ;_uu_ 4       pVP                  R4       RRR4       V P                  V\         P                  ! V4      4       / RR/R\        /3 EF  pV P                   ! R/ VB ;_uu_ 4        \        P"                  ! V4      ;_uu_ 4        V P                  V\         P                  ! R/ VB 4       RRR4       \        P"                  ! VP%                  4       4      ;_uu_ 4        V P                  V\         P                  ! R/ VB 4       RRR4       \        P"                  ! V4      ;_uu_ 4        V P                  V\         P                  ! R/ VB 4       RRR4       RRR4       EK  	  R#   + '       g   i     ELg; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     LY; i  + '       g   i     EK  ; i)	MyVeryLongDirectoryNamefile.txtr      contentNr   Tr\   )rV  )r$   r   r   r   r   r-  r&   r,  r   r5  r   r   rL  rU   r  r   subTestr.  r   )rR   r  test_dir_longtest_dir_shorttest_file_longtest_file_shortrN  rI   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8((&=f=? 9 ))-*=*=*?@@((&=f=? A )).99((&=f=? : (' F ('' 98 A@ :9 (''s`   I1,J>'J24J>&'J&J>3'J+J>1J	JJ>J(#J>+J;6J>>Kc                    \         P                  ! \        P                  4      p\        P                  ! V4       \        P
                  ! V4       \        P                  ! V4       V P                  \        P
                  V4       \         P                  ! VR 4      p\         P                  ! VR4      p\        VR4      ;_uu_ 4       pVP                  R4       RRR4       \        P                  ! RRRVR.\        P                  R7      pVP                  '       d   \         P"                  ! R	4      h V P%                  V\         P                  ! V4      4       \        P                  ! RTRR.\        P                  R7      pTP                  '       d   \         P"                  ! R4      hT P%                  T\         P                  ! T4      4       R#   + '       g   i     EL; i  \&         d    \         P"                  ! R
4      hi ; i)zLongFileName123.txtzLONGFI~1.TXTr   rW  Nz
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   r5  r   rL  
subprocessrunDETACHED_PROCESS
returncodeunittestSkipTestrU   AssertionError)rR   r  	test_filer\  rN  r)   s   &     r   test_realpath_permission#TestNtpath.test_realpath_permission  s    !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7&G+ G(	+"Hc                   \         P                  ! 4       ;_uu_ 4       pVP                  4        R VR&   RVR&   RVR&   \        RR4       \        RR4       \        R	R
4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR
4       \        RR4       \        RR4       \        RR
4       \        RR
4       \        RR4       \        RR 4       \        R!R"4       \        R#R$4       \        R%R&4       R'R'R'4       R'#   + '       g   i     R'# ; i)(r   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%N)r   EnvironmentVarGuardclearrG   rR   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,,D=	zneed os_helper.FS_NONASCIIc                   R  p\         P                  ! 4       ;_uu_ 4       pVP                  4        \         P                  pW2R&   RV,           W#&   V! RRV,          4       V! RV,          RV,          4       V! RRV,          4       V! RV,          R	V,          4       V! R
RV,          4       V! RV,          RV,          4       V! RRV,          4       V! RP	                  V4      RV,          4       V! RRV,          4       V! RP	                  V4      R	V,          4       RRR4       R#   + '       g   i     R# ; i)c                 ,    \        R V ,          V4       R# )zntpath.expandvars(%r)Nrl   )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%{}%barN)r   rq  rr  FS_NONASCIIr   )rR   rz  rt  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   DD..D?	c                   \        R R4       \        P                  ! 4       ;_uu_ 4       pVP                  4        \        RR4       RVR&   RVR&   RVR	&   \        RR
4       \        RR4       VR \        RR4       \        RR4       VP                  4        RVR&   RVR	&   \        RR
4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       VP                  4        RVR&   RVR&   RVR	&   \        RR
4       \        RR4       VP                  4        RVR&   RVR	&   \        RR4       \        RR4       RRR4       R#   + '       g   i     R# ; i)z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idleN)rG   r   rq  rr  rs  s   & r   test_expanduserTestNtpath.test_expanduser  st   *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                   \        R R4       \        RR4       \        RR4       \        RR4       \        RR4       \        R	R
4       \        RR
4       \        RR4       \        RR4       V P                  \        P                  ! \        P                  ! R4      4      4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR 4       \        R!R 4       \        R"R 4       \        R#R 4       \        R$R 4       \        R%R&4       \        R'R(4       \        R)R(4       \        R*R(4       \        R+R(4       \        R,R(4       \        R-R4       \        R.R4       \        R/R4       \        R0R4       \        R1R4       \
        P                  ! \
        P                  4      ;_uu_ 4       p\        R2V4       \        R3VR4,           4       \        R5VR6,           4       \        P                  ! V4      w  r#\        R7VR8,           4       R9R9R94       R9#   + '       g   i     R9# ; i):z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("//..")r5   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\abcN)	rG   
assertTruer$   isabsr   r   temp_cwdr   r   )rR   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11W'1('E/:('E/:((1HE,ego> 2111s   
AI22J	c                   \         P                  p\        P                  R 8X  d   V P	                  V! R4      \         P
                  ! V! R4      R4      4       V P	                  V! R4      \         P
                  ! V! R4      R4      4       V P	                  V! R4      R4       V P	                  V! R	4      R
4       V P	                  V! R4      R4       V P	                  V! R4      R4       V P	                  V! R4      R4       V P	                  V! R4      R4       V P	                  V! R4      R4       V P	                  V! R4      R4       \        P                  R 8X  d1   V P                  \        VR4       V P                  \        VR4       R# V P	                  V! R4      R4       V P	                  V! R4      R4       R# )r   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:\fooN)r$   r   r   r   rQ   r5  r   r   )rR   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                   \        R R4       \        RR4       \        RR4       \        RR4       \        P                  ! \        P                  4      ;_uu_ 4       p\        P
                  ! V4      p\        RRV,           R	,           4       \        R
RV,           R,           4       RRR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        RR4       \        R R4       \        R!R4       \        R"R4       \        R#R4       R#   + '       g   i     L; i)$z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   Nz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"))rG   r   r  r   r$   r=  )rR   r  
currentdirs   &  r   test_relpathTestNtpath.test_relpaths  s-   $c*4c:&/):6	 0 01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   AEE*	c                  a  R  pV 3R lpS P                  \        \        P                  R4       S P                  \        \        P                  . 4       S P                  \        \        P                  \        . 4      4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R	4       V! R.R4       V! RR.R4       V! R
R.R4       V! R
R
.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! RR.R4       V! R.R4       V! RR.R4       V! RR.R4       V! RR .R!4       V! R"R#.R!4       V! R$R%.R!4       V! . R0OR4       V! . R1OR!4       V! R&R'.R(4       V! R.R4       V! RR).R4       V! RR*.R	4       S P                  \        \        P                  R+R.4       S P                  \        \        P                  R+R,.4       S P                  \        \        P                  R-R.4       S P                  \        \        P                  RR..4       S P                  \        \        P                  RR/.4       S P                  \        \        P                  RR..4       R# )2c                 L    \        R V ,          P                  RR4      V4       R# )zntpath.commonpath(%r)r5   r4   N)rG   r:   )pathsr   s   &&r   rz  )TestNtpath.test_commonpath.<locals>.check  s"    +e3<<VTJr   c                   < SP                  \        V\        P                  V 4       SP                  \        V\        P                  V R R R1,          4       SP                  \        T\        P                  V  Uu. uF  p\        P
                  ! V4      NK  	  up4       SP                  \        T\        P                  V R R R1,           Uu. uF  p\        P
                  ! V4      NK  	  up4       R # u upi u upi )N)assertRaisesRegex
ValueErrorr$   
commonpathr&   r<   )r  r   r)   rR   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   <C8C=Nz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\spamz	C:and\jamz
C:and\spamzC:andz	spam\alotz
\spam\alots   C:\FoozFoo\Bazs   Foos
   C:\Foo\Bazs   Foo\Baz)r  r  r  )r  r  r  )r   	TypeErrorr$   r  r  iter)rR   rz  r  s   f  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   c                   \        4       ;_uu_ 4       p\        4       ;_uu_ 4       pV P                  \        P                  ! VP	                  4       VP	                  4       4      4       V P                  \        P                  ! VP	                  4       VP	                  4       4      4       \        P                  R 8X  d>   V P                  \        4      ;_uu_ 4        \        P                  ! RR4       RRR4       RRR4       RRR4       R#   + '       g   i     L"; i  + '       g   i     L-; i  + '       g   i     R# ; i)r   Nr  )
r
   r  r$   sameopenfilefilenoassertFalser   r   r   r   )rR   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;   D5B7D"	D5D"	=D5DD"	"D2-D55E	c                0   V P                  \        P                  ! R 4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R	4      4       V P                  \        P                  ! R
4      4       V P                  \        P                  ! R4      4       \        P                  ! 4       ;_uu_ 4       pV P                  \        P                  ! V4      4       RRR4       \        P                  R8X  EdR   \        P                  ! R4      p\        P                  ! V4      w  r4\        P                  ! V4      ;_uu_ 4        V P                  \        P                  ! VP                  4       4      4       V P                  \        P                  ! VP                  4       4      4       RRR4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       R# R#   + '       g   i     ELz; i  + '       g   i     L; i)r   r  r   zC:/z\\.\c:\z\\.\C:\s   c:\s   C:\s   c:/s   C:/s   \\.\c:\s   \\.\C:\Nr   
SystemRootz\\localhost\c$z\\localhost\c$\s   \\localhost\c$s   \\localhost\c$\)r  r$   ismountr   temp_dirr  r   r   r&   getenvr   r.  r   upper)rR   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   &M1*A'N1N	N	c                   \         P                  pV P                  V! R 4      4       \        P                  R8X  dH   V P                  \        VR4       V P                  \        VR4       V P                  \        VR4       R# V P                  V! R4      4       V P                  V! R4      4       V P                  V! R4      4       R# )r   r   zc:\ s   c:\ r   N)r$   r  r  r   r   r   r  r   )rR   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                t   V P                  \        P                  ! R 4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R	4      4       V P                  \        P                  ! R
4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R4      4       V P                  \        P                  ! R 4      4       V P                  \        P                  ! R!4      4       V P                  \        P                  ! R"4      4       V P                  \        P                  ! R#4      4       V P                  \        P                  ! R$4      4       V P                  \        P                  ! R%4      4       V P                  \        P                  ! R&4      4       V P                  \        P                  ! R'4      4       V P                  \        P                  ! R(4      4       V P                  \        P                  ! R)4      4       V P                  \        P                  ! R*4      4       R+# ),rj   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   nulN)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                b    V P                  VP                  4       VP                  4       4       R # r#   )rQ   r   )rR   s1s2s   &&&r   assertEqualCITestNtpath.assertEqualCIE  s    RXXZ0r   zOS helpers require 'nt' modulec                   \         P                  ! \        P                  4      pV\        P
                  ! V4      3 Fd  p\         P                  ! V4      p\        P                  ! V4      ^ ,          p\        P                  ! V4      ^ ,          pV P                  WE4       Kf  	  \         P                  ! \        P                  4      w  rgV P                  V^ 4       V P                  V^ 4       \         P                  ! \        P                  P                  4       4      w  rV P                  W4       V P                  V	^ 4       \        P                  \        P                  3 F  p\         P                  ! V4      p
V P!                  V
\"        4       V P                  \%        V
4      ^ 4       \         P                  ! VP                  4       4      pV P!                  V\&        4       V P                  \%        V4      ^ 4       K  	  R# )r   N)nt_getfinalpathnamer   
executabler&   r<   _getvolumepathnamer$   r   r  _getdiskusageexec_prefixassertGreaterr>   rQ   prefixassertIsInstancer.   lenr-   )rR   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_helpersI  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           
        \         P                  ! 4       ;_uu_ 4       p\         P                  ! V4      ;_uu_ 4        \        P                  ! R 4       ^ RIp VP                  R R4       T P                  \        P                  ! R4      4       T P                  \        P                  ! R 4      4       T P                  \        P                  ! R4      \        P                  ! R 4      4       RRR4       RRR4       R#   \         d    \        P                  ! R4      hi ; i  + '       g   i     L?; i  + '       g   i     R# ; i)tmpdirNtestjuncz!creating the test junction failed)r   r  r.  r&   r,  _winapiCreateJunctionr   rg  rh  r  r$   
isjunctionr  rU   r  )rR   r
  r  s   &  r   test_isjunctionTestNtpath.test_isjunctiong  s    !!Q%%a(("Q**8Z@  1 1* =>  !2!28!<=$$V__Z%@&//RZB[\ ) "!  Q"++,OPPQ )( "!!s;   D9D&	D+BD&	/D9"D##D&	&D61D99E
	c                    \         P                  pV P                  V! R 4      R4       V P                  V! R4      R4       V P                  V! R4      R4       V P                  V! R4      R4       R# )u   /tmpabcdsFs
   /tmpabcdsz
/tmp abcdss
   /tmp abcdsN)r$   isfileassertIs)rR   r  s   & r   test_isfile_invalid_paths$TestNtpath.test_isfile_invalid_pathsw  sZ    f./7f-.6f_-u5f-.6r   z#drive letters are a windows conceptc                   \         P                  P                  R 4      pVe   \        V4      ^8w  g   V^,          R8w  d   \        P
                  ! R4      hV P                  \         P                  P                  RV,           4      4       R# )SystemDriveN:z'SystemDrive is not defined or malformedz\\.\)	r&   environgetr  rg  rh  r  r   r  )rR   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                :   \         P                  ! 4       w  r V P                  \        P                  ! V4      4       \         P
                  ! V4       \         P
                  ! V4       R #   \         P
                  ! T4       \         P
                  ! T4       i ; ir#   )r&   r  r  r$   r  r   )rR   prpws   &  r   test_isfile_anonymous_pipe%TestNtpath.test_isfile_anonymous_pipe  s[    	V]]2./HHRLHHRL HHRLHHRLs   %A, ,.Bzwindows onlyc           
        ^ RI pR\        P                  ! 4        2pVP                  VVP                  ^ ^^ ^ ^ ^ 4      p V P                  \        P                  ! V4      4       VP                  V4       R#   TP                  T4       i ; i)r   Nz//./PIPE/python_isfile_test_)	r  r&   getpidCreateNamedPipePIPE_ACCESS_INBOUNDr  r$   r  CloseHandle)rR   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    %A8 8Bc                v   V P                  \        P                  P                  R 4      4       V P                  \        P                  P	                  R 4      4       V P                  \        P                  P                  R 4      4       V P                  \        P                  P                  R 4      4       R# )z\\.\CONN)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                f   V P                  \        P                  P                  \        P
                  J 4       V P                  \        P                  ! \        P                  P                  4      4       V P                  \        P                  P                  \        P                  J 4       V P                  \        P                  ! \        P                  P                  4      4       V P                  \        P                  P                  \        P                  J 4       V P                  \        P                  ! \        P                  P                  4      4       V P                  \        P                  P                  \        P                  J 4       V P                  \        P                  ! \        P                  P                  4      4       V P                  \        P                  P                  \        P                   J 4       V P                  \        P                  ! \        P                  P                  4      4       V P                  \        P                  P"                  \        P$                  J 4       V P                  \        P                  ! \        P                  P"                  4      4       V P                  \        P                  P&                  \        P(                  J 4       V P                  \        P                  ! \        P                  P&                  4      4       V P                  \        P                  P*                  \        P,                  J 4       V P                  \        P                  ! \        P                  P*                  4      4       R # 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   V P                  \        P                  ! \        P                  4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! \
        P                  ! 4       ^ ,          4      R4       V P                  \        P                  ! R4      4       V P                  \        4      ;_uu_ 4        \        P                  ! R4       RRR4       R#   + '       g   i     R# ; i)Tr   r  z2\\?\Volume{00000000-0000-0000-0000-000000000000}\\N)TF)rX   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   D$$D5	z'isdevdrive fallback only used off Win32c                l    V P                  \        P                  ! \        P                  4      4       R # r#   )r  r$   r%  r   r   rm   s   &r   test_isdevdrive_fallback#TestNtpath.test_isdevdrive_fallback  s#     	**9+;+;<=r   r\   N)Nr]   r^   r_   r`   rn   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   skip_unless_symlinkrg  
skipUnlessHAVE_GETFINALPATHNAMErM   r   r  r  r  r  r  r0  r>  rA  rD  rO  rR  HAVE_GETSHORTPATHNAMEr]  rk  ru  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  skipIfr   r   r  r  r  r0   r&   r  r  r  r   r"  namer(  r+  ra   rb   rc   s   @r   rf   rf   `   sd    
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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   rf   c                        ] tR tRt]tR.tRtR# )NtCommonTesti  r  r\   N)r]   r^   r_   r`   r$   
pathmodule
attributesra   r\   r   r   r4  r4    s    JJr   r4  c                      a  ] tR tRt o ]tR tR tR tR t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )PathLikeTestsi  c                Z   \         P                  V n        \        \         P                  4      V n        V P                  \         P                  V P                  4       \        V P                  R ^ 4      ;_uu_ 4       pVP                  R4       RRR4       R#   + '       g   i     R# ; i)xbs   test_ntpath.PathLikeTestsN)	r   r   	file_namer   	file_pathr   r   r   rL  )rR   r`  s   & r   setUpPathLikeTests.setUp  sj    "))!)"2"23	(($..9$..$**dJJ34 +***s   =BB*	c                j    V P                  V! V P                  4      V! V P                  4      4       R # r#   )rU   r<  r;  )rR   funcs   &&r   _check_functionPathLikeTests._check_function  s$    T$..143GHr   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r%   rm   s   &r   test_path_normcase PathLikeTests.test_path_normcase      TYY//0r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r  rm   s   &r   test_path_isabsPathLikeTests.test_path_isabs      TYY__-r   c                    V P                  V P                  P                  R \        R4      R4      V P                  P                  R RR4      4       R# )r   br  N)rQ   r   r5  r   rm   s   &r   test_path_joinPathLikeTests.test_path_join  s;    Xc]C@S#6	8r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r   rm   s   &r   test_path_splitPathLikeTests.test_path_split  rJ  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   splitextrm   s   &r   test_path_splitext PathLikeTests.test_path_splitext  rF  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r   rm   s   &r   test_path_splitdrive"PathLikeTests.test_path_splitdrive      TYY112r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r   rm   s   &r   test_path_splitroot!PathLikeTests.test_path_splitroot  s    TYY001r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r=  rm   s   &r   test_path_basename PathLikeTests.test_path_basename  rF  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r   rm   s   &r   test_path_dirnamePathLikeTests.test_path_dirname      TYY../r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r  rm   s   &r   test_path_islinkPathLikeTests.test_path_islink  s    TYY--.r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r   rm   s   &r   test_path_lexistsPathLikeTests.test_path_lexists  rc  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r  rm   s   &r   test_path_ismountPathLikeTests.test_path_ismount  rc  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   
expanduserrm   s   &r   test_path_expanduser"PathLikeTests.test_path_expanduser  rY  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   
expandvarsrm   s   &r   test_path_expandvars"PathLikeTests.test_path_expandvars  rY  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r   rm   s   &r   test_path_normpath PathLikeTests.test_path_normpath  rF  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r   rm   s   &r   test_path_abspathPathLikeTests.test_path_abspath  rc  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r  rm   s   &r   test_path_realpath PathLikeTests.test_path_realpath  rF  r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r  rm   s   &r   test_path_relpathPathLikeTests.test_path_relpath  rc  r   c                    V P                   P                  V P                  V P                  .4      pV P	                  WP                  4       R # r#   )r   r  r<  r;  rU   )rR   common_paths   & r   test_path_commonpath"PathLikeTests.test_path_commonpath  s5    ii**DNNDNN+KL[..9r   c                P    V P                  V P                  P                  4       R # r#   )rA  r   r  rm   s   &r   test_path_isdirPathLikeTests.test_path_isdir  rJ  r   )r;  r<  N)r]   r^   r_   r`   r$   r   r=  rA  rD  rH  rM  rP  rT  rW  r[  r^  ra  re  rh  rk  ro  rs  rv  ry  r|  r  r  r  ra   rb   rc   s   @r   r8  r8    s~     D5I1.8.13210/00331010:. .r   r8  __main__)'r  r$   r&   r  rc  r   rg  r?   r  r   test.supportr   r   r   r   test.support.os_helperr   r	   tempfiler
   r  ImportErrorr  r/  AttributeErrorr   r0  r   r2   rG   rM   TestCaserO   rf   
CommonTestr4  r8  r]   mainr\   r   r   <module>r     s     	   
    0 #   + ! "!
 !# !
#<0E3X&& 3j> j>Z+#..0A0A 
J.N J.Z zMMO W0   
B  "!"  "!"s6   C C* "C9 	C'&C'*	C65C69	DD