python (3.11.7)

(root)/
lib/
python3.11/
test/
__pycache__/
test_shutil.cpython-311.pyc

eddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlZddlZ	ddlZn
#e$rdZYnwxYwddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&ddl"m'Z'e%dzZ(e%dzZ)e%d	zZ*ej+,d
Z-ej+,dZ.ej+ddd
kZ/	ddl0Z0ddl1Z1dZ2n
#e$rdZ2YnwxYw	ddl3Z3n
#e$rdZ3YnwxYwej45de6dZ7dZ8dZ9d>dZ:dZ;d>dZ<dZ=dZ>e>Z?dZ@GddZAGddeAejBZCGdd eAejBZDGd!d"eAejBZEGd#d$eAejBZFGd%d&eAejBZGGd'd(eAejBZHGd)d*eHZIGd+d,eAejBZJGd-d.ejBZKGd/d0ejBZLGd1d2eMZNejOe?d3Gd4d5eNejBZPejOe-d6Gd7d8eNejBZQGd9d:ejBZRGd;d<ejBZSeTd=krejUdSdS)?N)make_archiveregister_archive_formatunregister_archive_formatget_archive_formatsErrorunpack_archiveregister_unpack_format
RegistryErrorunregister_unpack_formatget_unpack_formats
SameFileError_GiveupOnFastCopy)support)	os_helper)TESTFNFakePath)warnings_helper2_SRC_DSTdarwinsunosaixTFzos.chdirzshouldn't call os.chdir()side_effectcJtttddd)NEXDEVzInvalid cross-device link)OSErrorgetattrerrno)argskwargss  D/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/test/test_shutil.py_fake_renamer&:s
'%"--/J
K
KKcFtjfd}|S)Nc	tj}tt_|i||t_S#|t_wxYwN)osrenamer&)r#r$builtin_renamefuncs   r%wrapzmock_rename.<locals>.wrap?sD	'YN$BI4(((&BIIBI&&&&s	$4A)	functoolswraps)r.r/s` r%mock_renamer2>s8_T'''''Kr'ct|trtjj|}|rdnd}|rdnd}t|||5}||ddddS#1swxYwYdS)zWrite *content* to a file located at *path*.

    If *path* is a tuple instead of a string, os.path.join will be used to
    make a path.  If *binary* is true, the file will be opened in binary
    mode.
    wbwNutf-8encoding)
isinstancetupler+pathjoinopenwrite)r;contentbinarymoder8fps      r%
write_filerCIs$#w|T""44sD*tt7H	
dD8	,	,	,
sA**A.1A.chd}t|d}ddt|D}t|d5}|||D]}||	dddn#1swxYwYt
j||ksJdS)zBCreate a test file with an arbitrary size and random text content.c3TK||ksJ||kr|V||z}||k|r|VdSdSr*)totalsteps  r%chunkszwrite_test_file.<locals>.chunksYsZ}}}}dllJJJTMEdll	KKKKK		r'i r'cng|]2}tjtj3SrF)randomchoicestring
ascii_lettersencode).0is  r%
<listcomp>z#write_test_file.<locals>.<listcomp>bsA///mF$899@@BB///r'r4N)minr<ranger=r>r+r;getsize)r;sizerIbufsizechunkfcsizes       r%write_test_filer[Ws$ooGHH//$W~~///
0
0E	
dD		QVD'**		E
GGENNNN	7??4  D((((((s%BB	Bct|trtjj|}|rdnd}|rdnd}t|||5}|cdddS#1swxYwYdS)zReturn contents from a file located at *path*.

    If *path* is a tuple instead of a string, os.path.join will be used to
    make a path.  If *binary* is true, the file will be opened in binary
    mode.
    rbrNr6r7)r9r:r+r;r<r=read)r;r@rAr8rBs     r%	read_filer`is$#w|T""44sD*tt7H	
dD8	,	,	,wwyysA((A,/A,cg}ttj|D]}tj||}tj|retj|sF||dzt|D]}||dz|z|||S)N/)	sortedr+listdirr;r<isdirislinkappendrlistdir)r;resnamepns     r%rhrhws
Crz$''((GLLt$$
7==	BGNN1$5$5	JJtcz"""a[[
+
+

4#:>****
+
JJtJr'c6ttdsdSd}d}	tjdtjd5}|j}|ddddn#1swxYwYt|d5}tjdtjd5}|j}|}|}	tj	||dd	dddddd|tj||tj|d	Sd	S#t$rHYdddddd|tj||tj|dSdSwxYw#1swxYwY	dddn#1swxYwY|tj||tj|dSdS#|tj||tj|wwxYw)
NsendfileFr4dirdeletes
0123456789r]rT)
hasattrr+tempfileNamedTemporaryFilegetcwdrjr>r=filenornrunlinkr )srcnamedstnamerYsrcdstinfdoutfds       r%supports_file2file_sendfilers82z""uGG&

(29;;u
M
M
M	#QRfG
GGM"""	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#'4
 
 
	 C,Try{{5QQQ	
 UX(zz||

 KtQ222 	
 	
 	
 	
 	
 	
 
	 
	 
	 
	 
	 
	 W%%%W%%%%%!!! 	
 	
 	
 	
 	
 	
 
	 
	 
	 
	 
	 
	 W%%%W%%%%%!
	
 	
 	
 	
 	
 	
 	
 	
 	
 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 W%%%W%%%%%W%%%W%%%%s(G)A."G).A22G)5A26G)	)F.20F#E:F;F.G)
FFF.G)FFF	F.F	F."G).F22G)5F26G))/Hctrxtjdkrhtjdtjz}|ddd}t|ddkSdS)	Niz/usr/bin/dump -o %s
i T)AIXsysmaxsize
subprocess	getoutput
executablesplitint)hdrsmaxdatas  r%
_maxdataOKrsm
s{j((

!"7#."H
I
I

4  $**,,Q/72*,,tr'ceZdZddZdS)BaseTestNctj|tj}|t
j||S)zjCreate a temporary directory that will be cleaned up.

        Returns the path of the directory.
        )prefixrp)rtmkdtempr+rv
addCleanuprrmtree)selfrds   r%rzBaseTest.mkdtemps;

F	<<<	(!,,,r'r*)__name__
__module____qualname__rrFr'r%rrs(r'rc4eZdZdZejdZejdZej	e
ddZej	e
ddZdZ
ejejdd	d
kdejejdZd
ZdZdZej	ejddZejejddZdZejdZej	e
ddZdS)
TestRmTreecx|}tj|d}tj|ttj|ddtj|}||ttj
|dS)Nkillmesomefilefoo)rr+r;r<mkdirrCfsencodeassertIsInstancebytesshutilr)rtmpvictims   r%test_rmtree_works_on_bytesz%TestRmTree.test_rmtree_works_on_bytessllnnc8,,
27<<
33U;;;V$$fe,,,
fr'c|}tj|d}tj|tj|d}tj|||ttj	||
tj||
tj|gfd}tj	|||
td|ddtjj|
dd||dddtdS)Nrplinkc2|dSr*rgr#errorss r%onerrorz8TestRmTree.test_rmtree_fails_on_symlink.<locals>.onerrorMM$r'rrrrr)rr+r;r<rsymlinkassertRaisesr rr
assertTrueexistslexistsassertEquallenassertIsrfrrrdir_rrrs     @r%test_rmtree_fails_on_symlinkz'TestRmTree.test_rmtree_fails_on_symlinkshllnnw||C''
w||C((

4'6=$777t,,-----...	 	 	 	 	 
dG,,,,Va(((

fQilBGN3331t,,,fQil1ow77777r'c|}tj|d}tj|d}tj|d}|||fD]}tj|tj|d}t|dtj|d}tj||tj|d}tj||tj|d}	tj||	tj||	tj
||tj
||tj
|dS	Ndir1dir2dir3file1rlink1link2link3)rr+r;r<rrCrrrassertFalserr
rrrrrrrrrrs
          r%test_rmtree_works_on_symlinksz(TestRmTree.test_rmtree_works_on_symlinkssllnnw||C((w||D&))w||C((tT!		AHQKKKKS'**5%   T7++

4T7++

4T7++

5%   
d--...t,,---u--.....r'zonly relevant on Windowsc|}tj|d}tj|tj|d}tj|||tj	||
ttj
||tj||tj|gfd}tj
|||t%d|ddtjj|dd||dddtdS)Nrprc2|dSr*rrs r%rz:TestRmTree.test_rmtree_fails_on_junctions.<locals>.onerrorrr'rrrrr)rr+r;r<r_winapiCreateJunctionrrrxrr rrrrrrrrrfrrs     @r%test_rmtree_fails_on_junctionsz)TestRmTree.test_rmtree_fails_on_junctionssllnnw||C''
w||C((tT***	($///'6=$777t,,-----...	 	 	 	 	 
dG,,,,Va(((

fQilBGN3331t,,,fQil1ow77777r'c|}tj|d}tj|d}tj|d}|||fD]}tj|tj|d}t|dtj|d}t
j||tj|d}t
j||tj|d}	t
j||	tj	||
tj||tj||tj|dSr)
rr+r;r<rrCrrrrrrrrs
          r%test_rmtree_works_on_junctionsz)TestRmTree.test_rmtree_works_on_junctionssllnnw||C((w||D&))w||C((tT!		AHQKKKKS'**5%   T7++tU+++T7++tU+++T7++ue,,,
d--...t,,---u--.....r'c:tj|}|tt
j|tj|d|}t|dfdtj	
|d}|t5}tj|dddn#1swxYwY||j
j||tj	|tj|d|tj	|gfd}tj|||t#d|d	d	tj|d	d
||d	dd
t|d	dd
j||d
d	tj|d
d
||d
dd
t|d
dd
j|dS)NrpT
ignore_errorststfilec2|dSr*rrs r%rz.TestRmTree.test_rmtree_errors.<locals>.onerror,rr'rrrrr)rtmktemprrFileNotFoundErrorrrrCr+r;r<NotADirectoryErrorr	exceptionfilenamerrrrscandirrrmdir)rrtmpdircmrrs     @r%test_rmtree_errorszTestRmTree.test_rmtree_errorss?t||~~666+V]HEEE
hd3333FI&+++7<<	22


1
2
2	$bM(###	$	$	$	$	$	$	$	$	$	$	$	$	$	$	$.999x00111
hd3333x00111	 	 	 	 	 
h0000Va(((

fQilBJ///1x000fQil1o/ABBB1a18<<<

fQilBH---1x000fQil1o/ABBB1a18<<<<<sC&&C*-C*Ncygwinz2This test can't be run on Cygwin (issue #1071513).czd|_tjt|t
jttjtd|_	tjtd|_
tj|j	tj|j
tj
tj}tj
|j	j}tj
|j
j}tjtjz}tj|j	|tj|j
|tjt||tjt||tj|j	||tj|j
|tjt|j||jdddS)Nrabrrz1Expected call to onerror function did not happen.)
errorStater+rrrrrr;r<child_file_pathchild_dir_pathrcreate_empty_filestatst_modeS_IREADS_IEXECchmodcheck_args_to_onerrorr)rold_dir_modeold_child_file_modeold_child_dir_modenew_modes     r%
test_on_errorzTestRmTree.test_on_error:s


v...!w||FC88 gll6377#D$8999
$%%%wv. gd&:;;CWT%899A<,
%x000
$h///
"""&,777$"68KLLL$"57IJJJ
fd&@AAAA!L	N	N	N	N	Nr'c|jdkr|tjur|||jnl|tjur|||jnB||tj|	|t|jg|t|dt|xjdz
c_dS||tj||t|t|dtd|_dS)Nrrrrr)rr+rxrrrrrrdassertInrr
issubclassr )rr.argexcs    r%rz TestRmTree.check_args_to_onerrorYs"?Qry    d&:;;;;!!  d&9::::

dBJ///

cFD,?#@AAAOOJs1vw77888OOq OOOOT28,,,S&)))OOJs1vw77888DOOOr'c	tjfd}|t_tjtt	tdfdtjtt_dS#t_wxYw)NcL|tkrt|Sr*)rr )fnr#r$
orig_lstats   r%raiserzFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiserws#<<!))O%:b>>)r'r)r+lstatrrrCrr)rrrs  @r%+test_rmtree_does_not_choke_on_failing_lstatz6TestRmTree.test_rmtree_does_not_choke_on_failing_lstatts
	"J
*
*
*
*
*
BHHV...M&!!!!BHHHzBH!!!!sA&A77Bcbtjtjtjtjhtjko/tjtjvotjtjv}|r|	tj|	tjj
|}tj|d}tj|	tj}Gddt&fd}|t_|tj||t_dS#|t_wxYw|tj|tjj
dS)NrceZdZdS)HTestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)rrrrFr'r%Calledrsr'rcr*rF)r#r$rs  r%_raiserzITestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>._raisers Lr')r+r=rrxrsupports_dir_fdrdsupports_fdsupports_follow_symlinksrr_use_fd_functionsravoids_symlink_attacksrr;r<r_rmtree_safe_fd	Exceptionrr)rrtmp_dirrreal_rmtreerrs      @r%-test_rmtree_uses_safe_fd_version_if_availablez8TestRmTree.test_rmtree_uses_safe_fd_version_if_availablesn grw	28D/0DZ2>9D W(CC		COOF4555OOFM@AAAllnnGWc**AHQKKK
5$4-----Y---!!!!!)0&!!&&-;;;)4&&&&4444V5666V]ABBBBBs
<AEE)zdir_fd is not supportedc|}d}tj||}tj|tj}|tj|tj|tjtj|dttj|ddd|
tj|tj
|||tj|dS)Nrsubdirrrdir_fd)rr+r;r<r=O_RDONLYrcloserrCrrrrr)rrrfullnamers     r%test_rmtree_with_dir_fdz"TestRmTree.test_rmtree_with_dir_fds,,..7<<00"+..&)))

h1122227<<(J??GGGx00111
fV,,,,1122222r'zdir_fd is supportedc"|}|t5tj|ddddn#1swxYwY|tj|dS)Nrr)	rrNotImplementedErrorrrrr+r;r)rrs  r%#test_rmtree_with_dir_fd_unsupportedz.TestRmTree.test_rmtree_with_dir_fd_unsupporteds,,..


2
3
3	-	-M'!,,,,	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-w//00000sAAActj|\}}tj||ttj|tj	|dSNr)
rtmkstemprr+rrrrrremove)rhandler;s   r%test_rmtree_dont_delete_filez'TestRmTree.test_rmtree_dont_delete_files]'DLLNN;;;
,fmTBBB
	$r'ctjt	tjtd}tjtd}tj|tj|||ttj	|tj	|dtj	tddS#tj	tdwxYw)NcheeseshopTr)
r+rrr;r<rrr rrrr{r|s   r%test_rmtree_on_symlinkz!TestRmTree.test_rmtree_on_symlinks		6',,vx00C',,vv..CHSMMMJsC   gv}c:::M#T2222M&555555FM&55555sB/C''Dctjt	tjtd}tjtd}tj|ttj|ddtj|||	ttj|tj|dtjtddS#tjtdwxYw)Nr$r%spamr4Tr)
r+rrr;r<r=rrrrr rrr&s   r%test_rmtree_on_junctionz"TestRmTree.test_rmtree_on_junctions
		6',,vx00C',,vv..CHSMMMc6**D1177999"3,,,gv}c:::M#T2222M&555555FM&55555sC/D''E)rrrrrskip_unless_symlinkrrunittest
skipUnlessrrrrskipIfrplatformskip_if_dac_overrideskip_unless_working_chmodrrrrrrrrr"r'r*rFr'r%rrs"88#"8$"//#"/*X"<==88>=8&X"<==//>=/*===BX_S\"1"%1IKK#(NN)($#KKN6   6""" CCC0X13LMM33NM3X_V-/DEE11FE1"66#"6X"<==66>=666r'rceZdZdZdZejdZdZdZ	dZ
ej
ddZd	Zejeed
dejejejdkd
dZdZejdZejdZdZdZdS)TestCopyTreec	|}tj|d}|t
j||t
jtj|t|dfdtj	tj|dt|ddfdtj
|||tjtj|d|tj
tj|d|tjtj|ddt|df}||dt|ddf}||ddS)Ndestinationtest.txt123test_dir456)rr+r;r<rrrdirnamerCrcopytreerisfilerer`rrsrc_dirdst_diractuals    r%test_copytree_simplez!TestCopyTree.test_copytree_simples,,..',,t||~~}==
w///
rww'?'?@@@GZ(%000
gz22333GZ4e<<<)))rw||GZ'H'HIIJJJ

bgll7J&G&GHHIIIrw||GZ4>(@(@AA	B	B	BGZ011'''GZ<=='''''r'c	P|}|}|tj||tj|t	|dfdtjt
j|dtjt
j|dt	|ddfdt	|ddfdtj	||d|
t
jt
j|d|
t
jt
j|d|
t
jt
j|ddt|df}||dt|ddf}||d|t 5tj	||d	ddddS#1swxYwYdS)
Nznonexisting.txtr7existing_dirzexisting.txtzwill be replacedzhas been replacedT)
dirs_exist_okF)rrrrrCr+rr;r<r;rr<rer`rrFileExistsErrorr=s    r%test_copytree_dirs_exist_okz(TestCopyTree.test_copytree_dirs_exist_oks,,..,,..
w///
w///G./777
g~66777
g~66777G^^<>PQQQG^^<>QRRR====rw||G=N'O'OPPQQQ

bgll7N&K&KLLMMMrw||G^4B(D(DEE	F	F	FG%6788'''G^^DEE!4555



/
/	C	COGWEBBBB	C	C	C	C	C	C	C	C	C	C	C	C	C	C	C	C	C	Cs6JJ"Jc	|}tj|d}tj|d}tj|d}tj|tj|t|dfdtj|d}tj|d}tjtj|d|ttdr,tj|tj
tjzttd	r4ttd
rtj|tj
tj|}tj||d|tjtj|ddtjtj|dd}tjd
kr|dr
|dd}||tj|dtj|}	ttdr ||	j|jttd	r"||	j|jdSdS)Nr{r|subzfile.txtrrzsub/linklchmodlchflags	UF_NODUMPTsymlinksntz\\?\)rr+r;r<rrCrrsrIrS_IRWXUS_IRWXOrJrKrrr;rrfreadlinkrj
startswithrrst_flags)
rrr>r?sub_dirsrc_linkdst_linksrc_statr@dst_stats
          r%test_copytree_symlinksz#TestCopyTree.test_copytree_symlinkss,,..',,w..',,w..',,w..

GZ(%0007<<007<<44

27<<44			2x  	=Iht| ;<<<2z""	2wt['A'A	2K$.1118H%%48888rw||GUF'K'KLLMMMRW\\'5&AABB7d??v00;;?ABBZFgz!B!BCCC8H%%2x  	AX-x/?@@@2z""	CX.0ABBBBB	C	Cr'c
0tjj}tjj}|}	||d}t|dfdt|dfdtj||dt|ddfdtj||dt|ddfdtj||ddtj||dd	t|dddfdt|dd	d
fd	tjdd}tj	||||
|||d||||d||||dtj|n#tj|wxYw	tjdd
}tj	|||||||d||||dd	||||ddtj|n#tj|wxYw	d}tj	|||||||dd	d
||||ddtj|n#tj|wxYw	tj|tjtj
|dS#tj|tjtj
|wxYw)Nr5r6r7ztest.tmpr8r9	test_dir2rsubdir2ztest.pyz*.tmpignorezsubdir*crg}|D]}tj||}tj|r4|ddkr||utj|ddvr|||S)Nrrz.py)r+r;r<rerrgsplitext)r{namesrirjr;s     r%_filterz8TestCopyTree.test_copytree_with_exclude.<locals>._filterKsC %--!w||C66GMM$//- JJLL,88JJt,,,,W--d33B7EBBJJt,,,Jr')r+r;r<rrrCrrignore_patternsr;rrrr:)rr<rr>r?patternsrcs       r%test_copytree_with_excludez'TestCopyTree.test_copytree_with_exclude#sw|,,..:	4d4<<>>=99G,e444,e444HTT':..///Z8%@@@HTT';//000j95AAAHTT';99:::HTT';	::;;;h
CUKKKiCUKKK
'!1';GGBBBBttGZ'@'@ A ABBB  Wj(A(A!B!BCCC  Wk(B(B!C!CDDD
g&&&&
g&&&&
'!1'9EEBBBB  Wj(A(A!B!BCCC  Wk9(M(M!N!NOOO  Wk8(L(L!M!MNNN
g&&&&
g&&&&
'


AAAA  Wk9-6)8)8"9"9:::  Wk8(L(L!M!MNNN
g&&&&
g&&&&&M'"""M"'//'2233333
M'"""M"'//'223333sXD
OB$G<'O<HOB&K<OK''O+A-M-O-NOAPc
tjj}tjj}}||d}tj||tj||dtjtj|ddt
|dddfdgfd}|d}tj|||	|||ddd|d}tjtj|||	|||ddd|d}ttj
|d	}|tjtj|||	|||dddt#d
dS)Nsourcer8rr6r9cX||t|tt|tt
||D]}|tgSr*)rgrstrlistrrset)r{rbrjinvokationsrs   r%_ignorez?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignorerss###!!#s+++!!%...SZZSZZ999
1
1%%dC0000Ir'r5r^r	)r+r;r<rrrrCrr;rpathlibPathrkrrDirEntryrr)	rr<rrr>rnr?
src_dir_entryrms	`       @r%!test_copytree_arg_types_of_ignorez.TestCopyTree.test_copytree_arg_types_of_ignoredsqw|,,..$w))
g
gz**+++
gz8<<===GZ:>FFF						$t||~~}559999ttGZ$. 0 011	2	2	2$t||~~}55W--wwGGGGttGZ$. 0 011	2	2	2$t||~~}55RZ0011!4
mR[999
ww????ttGZ$. 0 011	2	2	2	
[))1-----r'c	|}tj|d}tj|tj|d}|tj|tj|dt|dfdtjtj|ddt|dfdtjtj|ddtj|	}|tj|tj|dt
j|||
tj|jtj|j|
tjtj|djtjtj|dj|
tjtj|djtjtj|djtj|tj|d
}|
tj|jtj|jdS)Nrhr5izpermissive.txtr7zrestrictive.txtr9irr)rr+r;r<rrrrrrCrtrr;rrrr)rrr>r?restrictive_subdirrestrictive_subdir_dsts      r%!test_copytree_retains_permissionsz.TestCopyTree.test_copytree_retains_permissionss,,..',,w11
',,w
66
w///
%   G-.666
g'788%@@@G./777
g'8995AAA%-':::	(*<===
#U+++)))))12773C3C3KLLLg7G!H!HIIQ'"',,w8H"I"IJJR	T	T	Tg7H!I!IJJR'"',,w8I"J"JKKS	U	U	U!#g.0gmm<N.O.OPQ.R"T"T!344<'"899A	C	C	C	C	Cr'zos.chmodc|}tj|d}|t
j||t
jtj|td|_	|
t
j5tj||ddddS#1swxYwYdS)Nr5zka-boom)
rr+r;r<rrrr:PermissionErrorrrrr;)r
mock_patchr>r?s    r%test_copytree_winerrorz#TestCopyTree.test_copytree_winerrors
,,..',,t||~~}==
w///
rww'?'?@@@!0!;!;



v|
,
,	.	.OGW---	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.sC::C>C>cfd}gtjttjddd5}|dddn#1swxYwYtj	|
tddS)	Ncnd|t|t|tjd|tjddSNr)rgrrjrr+r;r<)rrr|flagrr{s  r%custom_cpfunzETestCopyTree.test_copytree_custom_copy_function.<locals>.custom_cpfunsKK!!!S)))!!!S)))QS% 8 8999QS% 8 899999r'rrr5r6r7
copy_functionr)rrtrr=r+r;r<rrr;rr)rrrYr|rr{s`  @@@r%"test_copytree_custom_copy_functionz/TestCopyTree.test_copytree_custom_copy_functions	:	:	:	:	:	:	:	:llnno$,,..111
"',,sE**C'
B
B
B	a
GGIII															S====TA&&&&&s:BB"Bmkfiforequires os.mkfifo()vxworks%fifo requires special path on VxWorksctjt	tjtd}tj|tj|d}	tj|n/#t$r"}|d|zYd}~nd}~wwxYw	tj	tt|dnq#tj$r_}|j
d}|t|d|d\}}}|d|z|Yd}~nd}~wwxYwtjtd	tjtd	dS#tjtd	tjtd	wxYw)
Nrmypipeos.mkfifo(): %sz$shutil.Error should have been raisedrrz`%s` is a named pipeTr)r+rrr;r<rrzskipTestrr;TESTFN2failrr#rrr)rrpipeerr{r|	error_msgs        r%test_copytree_named_pipez%TestCopyTree.test_copytree_named_pipes
		7W\\&(33FHV7<<11D
5	$"
5
5
5

/!344444444
5
B000		@AAAA
<
K
K
K  Va000&,Qi#S)  !7$!>	JJJJJJJJ	
K
M&5555M'666666
M&5555M'66666saAF5B
	F

B6B1,F1B66F:C/F/E>AEFEF8Gc|}tj|d}t	|dfdtjtj|dt	|ddfdgfd}t
j||||tddS)	Nr5r6r7r8r9c6||fdSr*r)r{r|copieds  r%_copyz6TestCopyTree.test_copytree_special_func.<locals>._copysMM3*%%%%%r'rrr)
rr+r;r<rCrrr;rr)rr>r?rrs    @r%test_copytree_special_funcz'TestCopyTree.test_copytree_special_funcs,,..',,t||~~}==GZ(%000
gz22333GZ4e<<<	&	&	&	&	&	>>>>Va(((((r'c|}tj|d}t	|dtj|d}tj|||fD]h}tjdtj|dtj|tj|ditj|d}|ttj
||tj|d}tj
||d	
tj|D]2\}}}|d||
d|3tj|d}tj
||d	|
dtj|dS)
Nr6abcdir_a
IDONTEXISTbrokenvalidr5destination2T)ignore_dangling_symlinksdestination3rL)rr+r;r<rCrrrrrr;walkassertNotInrrd)	rr>
valid_filerrr?rootdirsfiless	         r%test_copytree_dangling_symlinksz,TestCopyTree.test_copytree_dangling_symlinkss,,..W\\':66
:u%%%Wg..
%	=	=AJ|RW\\!X%>%>???Jz27<<7#;#;<<<<',,t||~~}==%'7CCC',,t||~~~>>4HHHH!#!1!1	*	*D$Xu---MM'5))))',,t||~~~>>48888

j"*W"5"566666r'c	D|}tj|d}tjtj|dttj|ddd5	dddn#1swxYwYtjtj|dtj|ddtj||d	|	tj
tj|d|dtjtj|dtj|d
}tj||d	|
tj
tj|d|dtjtj|ddS)Nr5real_dirr6r4link_to_dirT)target_is_directoryFrLr)rr+r;r<rr=rrr;rrfrrdr)rr>r?s   r%test_copytree_symlink_dirz&TestCopyTree.test_copytree_symlink_dir
s,,..',,t||~~}==
gz22333
"',,w
J??
F
F																	

27<<447<<77'+	-	-	-	-	59999Wm(L(LMMNNN

j"*RW\\'=-Q-Q"R"RSSS',,t||~~~>>48888rw||G]'K'KLLMMM

j"*RW\\'=-Q-Q"R"RSSSSSs(B66B:=B:cV|}|dz}|tj|dtj|d}t|dtj||}|	dgt	j
|dS)NdestTr)rrrrr+r;r<rCr;rrd)rr>r?r{rvs     r%test_copytree_return_valuez'TestCopyTree.test_copytree_return_value!s,,..F"
w555gll7E**3
_Wg
.
.%"*R..11111r'c|}|tj|dtj|dd}tj|dd}t	j|tj|d}t|dtj	||}|
dgt	j|dS)NTrtpg
somevendorz1.0pol)rrrrr+r;r<makedirsrCr;rrd)rbase_dirr>r?r{rs      r%test_copytree_subdirectoryz'TestCopyTree.test_copytree_subdirectory+s<<>>
xtDDD',,xd33',,we<<
Ggll7E**3
_Wg
.
.%"*R..11111r'N)rrrrArFrr+rZrfrtrxr,mockpatchr|rr-rsr+r.rr/rrrrrrrFr'r%r3r3s(((&CCC2"CC#"C>?4?4?4B(.(.(.TCCC6]$$..%$.'''$XX..0FGG"X_S\Y.;==77==#"HG7.)))"77#"74"TT#"T&222
2
2
2
2
2r'r3cVeZdZejdZejee	ddejdZ
ejee	ddejdZejdZ
ejee	doeed	oeed
ddZejd
ZejejejdZdZdZejdZejee	dddZejdZejdZdZdZdZdZejdZejee	dddZejdZ ejee	d d!eje!j"d"kd#d$Z#d%Z$d&Z%eje&pe'pe(d'eje)d(d)Z*d*Z+d+S),TestCopyc|}tj|d}tj|d}tj|d}tj|d}t	|dt	|dtj||tj||tj|tjtj	ztj|tj
|tj|jtj|jtj|||tj|jtj|jtjdkrjtj|tj
tj|||tj|jtj|jtj|tj
tj|||tj|jtj|jtj|tj
tj|||tj|jtj|jdSdS)NrbarbazquuxrN)rr+r;r<rCrrrrPS_IRWXGrQassertNotEqualrrcopymoderrjrrr{r|rVrWs      r%test_copymode_follow_symlinksz&TestCopy.test_copymode_follow_symlinks;sN,,..gll7E**gll7E**7<<//7<<0033

3!!!

3!!!
dl4</000
dl###BGCLL0"'#,,2FGGGS!!!-rws||/CDDD
7d??HS$,'''OHc***RWS\\1273<<3GHHHHS$,'''OC***RWS\\1273<<3GHHHHS$,'''OHh///RWS\\1273<<3GHHHHH?r'rIzrequires os.lchmodc|}tj|d}tj|d}tj|d}tj|d}t	|dt	|dtj||tj||tj|tjtj	ztj|tjtj
|tjtj	ztj
|tjtj
||d|tj|jtj|j|tj|jtj|jtj
|tjtj
||d|tj|jtj|jtj
|tjtj
||d|tj|jtj|jdSNrrrrFfollow_symlinks)rr+r;r<rCrrrrPrrIrQrrrrrrrs      r% test_copymode_symlink_to_symlinkz)TestCopy.test_copymode_symlink_to_symlink[s5,,..gll7E**gll7E**7<<//7<<0033

3!!!

3!!!
dl4</000
dl###
	(DL5666
	(DL)))(EBBBB(++3(++3	5	5	5BGCLL0"'#,,2FGGG
	(DL)))#u====-rws||/CDDD
	(DL)))Xu====-rws||/CDDDDDr'z requires os.lchmod to be missingc|}tj|d}tj|d}tj|d}tj|d}t	|dt	|dtj||tj||t
j||ddSr)rr+r;r<rCrrrrs      r%*test_copymode_symlink_to_symlink_wo_lchmodz3TestCopy.test_copymode_symlink_to_symlink_wo_lchmodys,,..gll7E**gll7E**7<<//7<<0033

3!!!

3!!!(EBBBBBBr'cb|}tj|d}tj|d}tj|d}tj|d}t	|dtj|}tj||j|jdz
ft	|d|	tj|jtj|jtj
||tj
||ttdrtj|t
j
ttdr4tt
drtj|t
jtj|}ttdrIt#j||d	
|	|jtj|jt#j||d
tj|}tjtjvr:dD]7}	|t-||	t-||	d
z8ttdr ||j|jttdr0t|dr ||j|jt#j||d
|t5tj|jtj|jz
dkdS)NrrrquxgE@rIrJrKTrFst_atimest_mtimerrTg?)rr+r;r<rCrutimerrrrrsrIrQrJrKrrcopystatrr
assertLessEqualr!rrTrabs)
rrr{r|rVrWrX
src_link_stat
dst_link_statattrs
          r%test_copystat_symlinkszTestCopy.test_copystat_symlinkss,,..gll7E**gll7E**7<<//7<<//373<<
x((4/1	2	2	23BGCLL1273<<3HIII

3!!!

3!!!2x  	.Ih---2z""	2wt['A'A	2K$.111**
2x  	MOHhEEEE
 5rws||7KLLL(EBBBB**

8r222.
G
G$$W]D%A%A%,]D%A%AA%EGGGG2x  	K]2M4IJJJ2z""	Mw}j'I'I	M]3]5KLLL#u====BGCLL1BGCLL4IIJJ 	!	!	!	!	!r'chflags
EOPNOTSUPPENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcx|}tj|d}tj|d}t	|dt	|dd}tj}	tjtjfD],}||t_tj
||-|tjtjzt_|ttj
|||t_dS#|t_wxYw)Nrfile2xxxc8tddfd
}|S)NTrc_r*)r")r;flagsrerrexs   r%_chflags_raiserzlTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raisersr'r )rrrs` @r%make_chflags_raiserzSTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raisers@B@D







#"r')
rr+r;r<rCrr"rrrrrr )rrrrrold_chflagsrs       r%-test_copystat_handles_harmless_chflags_errorsz6TestCopy.test_copystat_handles_harmless_chflags_errorss
VW--VW--5%   5%   	#	#	#j	%'6
.
.0055
u----,,U-=
-MNNBJgvuEEE$BJJJBJ$$$$s
BD++D9c	
|}tj|d
t	
dtj|d}t	|dtj
|tj
ddtj
ddtj
||ttj

ttj
||tj
dtj|dtj|t	|dttjd		fd}	tj|t_tj
||dtj
|t_n#t_wxYwd	d

fd
}	tj
|t_
tj
|t_
n#t_
wxYwtj|d
tj|d
}t	

t	||tj
ddtj|ddtj|dtj|d}tj|d}t	||t	||tj
|tj|||tj|dd|tj|dddS)Nrruser.foo42zuser.bar43EPERMc.|dkr|||fi|dS)NrrF)fnamervalr$
orig_setxattros_errors    r%_raise_on_user_fooz3TestCopy.test_copyxattr.<locals>._raise_on_user_foos5z!!
eT399&99999r'Trc^|krttjd||S)NzOperation not supportedr)r r"r)rrorig_listxattrr{s  r%
_raise_on_srcz.TestCopy.test_copyxattr.<locals>._raise_on_srcs4||em-FGGG!>%IIIIr'the_originalthe_original_rozuser.the_valuesfiddlyi$the_copythe_copy_ro)rr+r;r<rCr
_copyxattrsetxattrrrc	listxattrgetxattrr r r"rrrr)rrr|rrsrcrodstrorrrr{s       @@@@r%test_copyxattrzTestCopy.test_copyxattrs,,..gll7E**3gll7E**3	#s###
CU+++
CU+++#s###S 1 122F2<;L;L4M4MNNNC,,C,,	.	.	.		#35;00	:	:	:	:	:	:
	(KM,BKc3'''MM*bl3&7&7888'BKK-BK''''48	J	J	J	J	J	J	J	J	*\N(BLc3''')BLL>BL))))gll7N33W&78835%   
C)9555
E+Y777
gll7J//Wm4435%   S!!!u%%%S*:;;YGGGU,<==yIIIIIs$AHH!-II)cp|}tj|d}tj|d}t	|dtj||tj|ddtj|dddtj|d}tj|d	}t	|dtj||tj||d|	tj
|ddd|ttj
|dtj||d|	tj
|dddS)
Nrrztrusted.foorrFrrr)
rr+r;r<rCrrrrrrrr )rrr{rVr|rWs      r%test_copyxattr_symlinksz TestCopy.test_copyxattr_symlinkssr,,..gll7E**7<<//3

3!!!
C...
HmUEJJJJgll7E**7<<//3

3!!!(HeDDDDX}eTTTV[\\\'2;]CCC(C????S-88%@@@@@r'cd}|}t||fdtj||}|}|||tj||}||fS)Nr6r)rrCr+r;r<)rmethodrrrtmpdir2rs       r%
_copy_filezTestCopy._copy_file+s{FE?E***VU++,,..ugWe,,u~r'c6|tj\}}|tj||t	j|j	t	j|j	dSr*)
rrcopyrr+r;rrrr)rrrs   r%	test_copyzTestCopy.test_copy5skv{33uu--.../1GHHHHHr'c|}tj|d}tj|d}tj|d}t	|dtj||t
tdr,tj|tj	tj
ztj||d|
tj||t!|t!|tj|tj||d|tj||tj|tj|t
tdrF|tj|jtj|jdSdS)NrrrrITrF)rr+r;r<rCrrsrIrrPrQrr
rrfrr`r rrRrr)rrr{r|rVs     r%test_copy_symlinkszTestCopy.test_copy_symlinks;s,,..gll7E**gll7E**7<<//3

3!!!2x  	=Iht| ;<<<Hc48888,,---33888
	#Hc59999s++,,,S))2;x+@+@AAA2x  	4RXh//7Xc]]2
4
4
4
4
4	4	4r'rzrequires os.utimech|tj\}}|tj|t	j|}t	j|}||j	|j	dD]7}|
t||t||dz8ttdrDt|dr6|t|dt|ddSdSdS)NrrrrT)
rrcopy2rr+r;rrrrrr!rs)rrr
file1_stat
file2_statrs      r%
test_copy2zTestCopy.test_copy2Ts3v|44uu--...WU^^
WU^^
+Z-?@@@*	@	@D  T!:!:!(T!:!:Q!>
@
@
@
@2y!!	>gj*&E&E	>WZ<<$Z<<
>
>
>
>
>	>	>	>	>r'c|}tj|d}tj|d}tj|d}t	|dtj||t
tdr,tj|tj	tj
zt
tdr4t
tdrtj|tjtj|}tj
|}tj||d|tj||t'|t'|tj|tj||d	|tj||tj|tj|tj
|}tjtjvr:d
D]7}|t5||t5||dz8t
tdr@||j|j||j|jt
tdr2t
|dr$||j|jdSdSdS)
NrrrrIrJrKTrFrrrT)rr+r;r<rCrrsrIrrPrQrJrKrrrrrfrr`r rrRrr
rr!rrrT)	rrr{r|rVrXrrYrs	         r%test_copy2_symlinkszTestCopy.test_copy2_symlinkses,,..gll7E**gll7E**7<<//3

3!!!2x  	=Iht| ;<<<2z""	2wt['A'A	2K$.11173<<**
XsD9999,,---33888
	#XsE::::s++,,,S))2;x+@+@AAA8C==
8r222.
B
B$$W]D%A%A%,Xt%<%<q%@BBBB2x  	D]2H4DEEE 0(2BCCC2z""	Hw}j'I'I	H]3X5FGGGGG	H	H	H	Hr'c|}tj|d}tj|d}t	|dtj|ddt
j|||tj	|dtj	|dtj
|dS)Nrrrr)rr+r;r<rCrrrrrr )rrr{r|s    r%test_copy2_xattrzTestCopy.test_copy2_xattrs,,..gll7E**gll7E**3
CU+++S#C,,C,,	.	.	.		#r'c(tjtjfD]}|}|}tj|d}t|d|||}||tj|d||tj|d}||tj|ddS)Nrr)	rr
rrr+r;r<rCr)rrr>r?r{rs      r%test_copy_return_valuezTestCopy.test_copy_return_values;-	?	?BllnnGllnnG',,w..CsE"""C!!BRgu!=!=>>>Cgu5566BRgu!=!=>>>>	?	?r'cD|tjdSr*)_test_copy_dirrr
rs r%
test_copy_dirzTestCopy.test_copy_dirsFK(((((r'cD|tjdSr*)rrrrs r%test_copy2_dirzTestCopy.test_copy2_dirsFL)))))r'c|}tj|d}|}tj|d}t	|dt
jdkrt}nt}|	|||||	|||||||dSNrdoes_not_exist/win32)
rr+r;r<rCrr/rzIsADirectoryErrorr)r	copy_funcr>src_filerr|rs       r%rzTestCopy._test_copy_dirs,,..7<<//||~~gll7$5668U###<7""!CC#C#y$888	
#y$444	(D!!!!!r'c|}tj|d}tj|d}tj|d}tj|d}t	|dtj||t
j||d|tj	||
tj|tj|t
j|||tj	|dS)Nr{r|rWrrFr)
rr+r;r<rCrrcopyfilerrfrrRr)rrr{r|rWrs      r%test_copyfile_symlinkszTestCopy.test_copyfile_symlinkss ,,..gll7E**gll7E**7<<44w||GV,,3

3h>>>>x00111T**BK,A,ABBBc""",,-----r'rzrequires os.linkcrtjttjtd}tjtd}	t|dd5}|ddddn#1swxYwY	tj||n/#t$r"}|	d|zYd}~nd}~wwxYw|
tjtj
||t|dd5}||ddddn#1swxYwYtj|tjtd	
dS#tjtd	
wxYw)Nr$r%r5r6r7cheddarz
os.link(): %sr^Tr)r+rrr;r<r=r>rrzrrrr
r'rr_r r)rr{r|rYrs     r%'test_dont_copy_file_onto_link_to_itselfz0TestCopy.test_dont_copy_file_onto_link_to_itselfs	gll68,,gll66**	6c3111
#Q	"""
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
3S!!!!"
3
3
3

o122222222
3f2FOS#NNNc3111
6Q  9555
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6IcNNNM&555555FM&55555s%F7B
FBF B!F%B;:F;
C'C"F"C''AF()EFE!!F$E!%FF6ctjttjtd}tjtd}	t|dd5}|ddddn#1swxYwYtjd||tj
tj||t|dd5}||
ddddn#1swxYwYtj|tjtd	dS#tjtd	wxYw)
Nr$r%r5r6r7r*r^Tr)r+rrr;r<r=r>rrrr
r'rr_r r)rr{r|rYs    r%*test_dont_copy_file_onto_symlink_to_itselfz3TestCopy.test_dont_copy_file_onto_symlink_to_itselfs	gll68,,gll66**	6c3111
#Q	"""
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#

Jx%%%f2FOS#NNNc3111
6Q  9555
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6IcNNNM&555555FM&55555sU%E(7B
E(BE( B!AE(7)D, E(,D00E(3D04E((Frrrrc	tjtn/#t$r"}|d|zYd}~nd}~wwxYw	|tjtjtt|tjtjtttjtdS#tjtwxYw)Nr)r+rrrzrrrSpecialFileErrorr'r__file__r )rrs  r%test_copyfile_named_pipez!TestCopy.test_copyfile_named_pipes	1If	1	1	1MM+a/00000000	1	f5 &
B
B
Bf5 &6
C
C
C
IfBIfs!
AAAA,CC.c|}|}tj|d}tj|d}t	|dtj||}|tj||	t|t|dS)Nrr)rr+r;r<rCrr'rrrr`)rr>r?dst_filer%rs      r%test_copyfile_return_valuez#TestCopy.test_copyfile_return_values,,..,,..7<<//7<<//8U###
_Xx
0
0r**+++8,,i.A.ABBBBBr'cp|}tj|d}t	|d|ttj|||ttj|||
t|ddSr)rr+r;r<rCrr
rr'rrr`)rr>r%s   r%test_copyfile_same_filez TestCopy.test_copyfile_same_files,,..7<<//8U###-(HMMM%(HEEE8,,e44444r'zMOn MACOS, Solaris and Windows the errors are not confusing (though different)zNot valid on AIX, see gh-92670c|}tj|d}tj|d}t	|d|ttj||dS)Nrr!)	rr+r;r<rCrrrr')rr>r%r|s    r%test_copyfile_nonexistent_dirz&TestCopy.test_copyfile_nonexistent_dirso,,..7<<//gll7$5668U###+V_hLLLLLr'c|}tj|d}|}tj|d}t	|dt
jdkrt}nt}|	|tj|||	|tj|||	|tj||dSr )rr+r;r<rCrr/rzr#rrr')rr>r%rr|rs      r%test_copyfile_copy_dirzTestCopy.test_copyfile_copy_dir's,,..7<<//||~~gll7$5668U###<7""!CC#C#v===#v'BBB#vg>>>>>r'N),rrrrr+rr,r-rsr+rr.rrr"rskip_unless_xattrrskip_unless_dac_overriderrrr
rrrrrrrr(r+r-rr/r1r4r6MACOSSOLARISrrr8r:rFr'r%rr7s"II#"I>XX..0DEE"EE#"FEE8X_WWR**,NOO"
C
C#"PO
C"&!&!#"&!PXY//3 553 	22DFF%%	FF%6 =J=J! =J~" 'AA('! #"A.III"44#"40XW--/BCC>>DC> " H H#" HD 

! 

?
?
?)))***"""$"..#". XV,,.@AA66BA6&"66#"6(XX..0FGGX_S\Y.;====HG	C	C	C
5
5
5X_U0g03BCCX_S:;;MM<;	CC
M?????r'rceZdZejdZdZd$dZejej	e
jdddZejdZ
ejej	e
jd	d
dZejej	e
jdd
dZdZejdZejej	eddZdZdZejdZdZdZejdZdZdZdZdZejdZejdZ ej!ej"e#o
e$dd Z%ejd!Z&d"Z'd#S)%TestArchivesc|d\}}|}tj|tj|}tjtj|d}tj	|5t5tj|}t|d|d}dddn#1swxYwYdddn#1swxYwY|
||dz|tj||t!j|t!j|d5}||gddddn#1swxYwYtj	|5t5t|d|d}dddn#1swxYwYdddn#1swxYwY|
||d	z|tj||t!j|t!j|d
5}||gdddddS#1swxYwYdS)Nrarchivegztar..tar.gzzr:gz)rDz./subz./sub2z./file1z./file2z./sub/file3tar.tarr^)
_create_filesrr+rr;r:r<basenamer
change_cwdno_chdirabspathrrrr<tarfile
is_tarfiler=assertCountEqualgetnames)	rroot_dirrrwork_dir
rel_base_name	base_nametarballtfs	         r%test_make_tarballzTestArchives.test_make_tarball>s"//33(,,..
7??7++RW%5%5g%>%>	JJ


!(
+
+	J	JX	J	J
66I"='8SIIG	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J	J
	
)i"7888w//000*733444
\'6
*
*	Ib!!"++--#H#H#H
I
I
I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I
!(
+
+	H	HX	H	H"=%3GGG	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H)f"4555w//000*733444
\'3
'
'	H2!!"++--#G#G#G
H
H
H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	Hs1D92C7+D7C;	;D>C;	?DDD +GGG6H4>HH4H!	!H4$H!	%H44H8;H8+K>>LLctj|5}|}|t	|cdddS#1swxYwYdSr*)rMr=rPsortr:)rr;rFrbs    r%_tarinfozTestArchives._tarinfobs
\$

	 3LLNNEJJLLL<<	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s7AA Adistc|}tj||}tj|dt|dfdt|dfdtjtj|dt|ddfdtjtj|d|rt|d	fd||fS)
NT)exist_okrrrrHfile3sub2outer)rr+r;r<rrCr)rrrQr[s    r%rHzTestArchives._create_fileshs<<>>w||Hh//
D4((((D'?E***D'?E***
dE**+++D%)5111
dF++,,,	3'*E222!!r'rFzNeed the tar command to runc|\}}tj|d}t
5t
|d||}dddn#1swxYwY|||dz|tj	|tj|d}ddd|g}tj||tj|tj	|||
||
|t
5t
|d||}dddn#1swxYwY|||dz|tj	|t
5t
|d||d	
}dddn#1swxYwY|||dz|tj	|dS)NrBrCrEzarchive2.tarrFz-cfcwdstdoutrGTdry_run)rHr+r;r<rrKrrrr<r
check_callDEVNULLrZ)rrQrrTrUtarball2tar_cmds       r%test_tarfile_vs_tarz TestArchives.test_tarfile_vs_tarvs"//11(GLL;;	
	K	K"9gxJJG	K	K	K	K	K	K	K	K	K	K	K	K	K	K	K	
)i"7888w//0007<<.99%:g8%/%7	9	9	9	9	
x00111w//x1H1HIII	I	I"9eXxHHG	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I)f"4555w//000	1	1"9eXx+/111G	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	
)f"4555w//00000s6A00A47A4F!!F%(F%>HH#&H#cL|\}}|}tj|tj|}tjtj|d}tj	|5t5tj|}t|d|}dddn#1swxYwYdddn#1swxYwY|
||dz|tj||t!j|t!j|5}||gddddn#1swxYwYtj	|5t5tj|}t|d||}dddn#1swxYwYdddn#1swxYwY|
||dz|tj||t!j|t!j|5}||gdddddS#1swxYwYdS)NrBzip.zip)dist/	dist/sub/
dist/sub2/
dist/file1
dist/file2dist/sub/file3r`)rorprqrrrsrt)rHrr+rr;r:r<rIrrJrKrLrrrr<zipfile
is_zipfileZipFilerOnamelist)	rrQrrrRrSrTrizfs	         r%test_make_zipfilezTestArchives.test_make_zipfiles_"//11(,,..
7??7++RW%5%5g%>%>	JJ


!(
+
+	?	?X	?	?
66I}eX>>C	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	?	
i&0111s++,,,*3//000
_S
!
!	R!!"++--


															
!(
+
+	I	IX	I	I
66I}eXxHHC	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	
i&0111s++,,,*3//000
_S
!
!	DR!!"++--CCC
D
D
D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	Ds0D81C5)D5C9	9D<C9	=DDD+GGG3I;2H9-I9H=	=IH=	III!+LL LrmzNeed the zip command to runc|\}}tj|d}t
5t
|d||}dddn#1swxYwY|||dz|tj	|tj|d}dddd|g}tj||tj|tj	|tj|5}|}dddn#1swxYwYtj|5}|}	dddn#1swxYwY|t!|t!|	dS)NrBrmrnzarchive2.zipz-qz-rrb)rHr+r;r<rrKrrrr<rrgrhrurwrxrc)
rrQrrTrBarchive2zip_cmdryrbnames2s
          r%test_zipfile_vs_zipz TestArchives.test_zipfile_vs_zipsf"//11(GLL;;	
	I	I"9eXxHHG	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	
)f"4555w//0007<<.99$nh?g8%/%7	9	9	9	9	
x00111
_W
%
%	"KKMME	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"
_X
&
&	#"[[]]F	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#v77777s6A00A47A4E55E9<E9F55F9<F9unzipzNeed the unzip command to runc.|\}}tj|d}t
5t
|d||}dddn#1swxYwY|||dz|tj	|dd|g}tj|5	tj
|tjn{#tj$ri}|jd}d	|vr|d
d}||||Yd}~nd}~wwxYwddddS#1swxYwYdS)NrBrmrnrz-t)stderrreplace)rzunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})rHr+r;r<rrKrrrr<rrJrcheck_outputSTDOUTCalledProcessErroroutputdecoderrformat)	rrQrrTrBr}rdetailsmsgs	         r%test_unzip_zipfilezTestArchives.test_unzip_zipfiles#"//11(GLL;;	
	I	I"9eXxHHG	I	I	I	I	I	I	I	I	I	I	I	I	I	I	I	
)f"4555w//000D'*

!(
+
+	4	4
4'
8IJJJJJ0
4
4
4*++9+==+w66MM"<===2		#**S'2233333333
4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4sOA00A47A4F
! DF
E:AE50F
5E::F

FFc|}tj|d}|t
t|ddS)NrBr)rr+r;r<r
ValueErrorr)rrrTs   r%test_make_archivezTestArchives.test_make_archivesDGLL33	*lIuEEEEEr'cJtr5tjdd}tjdd}ndx}}|\}}tj|	d}t|d||||}|tj|t|d||}|tj|t|d||||}|tj|t|d||dd}|tj|dS)	NrrrBrmownergrouprF	kjhkjhkjgoihohoh)
UID_GID_SUPPORTgrpgetgrgidpwdgetpwuidrHr+r;r<rrrr<)rrrrQrrTris       r%test_make_archive_owner_groupz*TestArchives.test_make_archive_owner_groupsk	#LOOA&ELOOA&EE""EE!//11(GLL;;	9eXxu!&(((s++,,,9eXx@@s++,,,9eXx!&e555s++,,,9eXx!,I???s++,,,,,r'Requires grp and pwd supportc
D|\}}tj|d}tjdd}tjdd}tj
|5t5t|d|d||}dddn#1swxYwYdddn#1swxYwY|
tj|tj|}	|D]8}||jd||jd9	|dS#|wxYw)NrBrrCr[r)rHr+r;r<rrrrrrrJrKrrr<rMr=
getmembersruidgidr)	rrQrrTrrarchive_namerBmembers	         r%test_tarfile_root_ownerz$TestArchives.test_tarfile_root_owners"//11(GLL;;	Q"Q"

!(
+
+	B	BX	B	B'	7Hf.35BBBL	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B	B
	
|44555,|,,	!,,..
0
0  Q///  Q////
0
MMOOOOOGMMOOOOsCCB<0C<C	CC	CCC%A
F		Fctj}|}d}gfd}td|gd	t	jtd|5	t
dd|n#t$rYnwxYwdddn#1swxYwY|tj||||gtddS#tdwxYw)Nctr*)RuntimeError)r#kws  r%_breaksz3TestArchives.test_make_archive_cwd.<locals>._breaks.s.. r'cH||dSr*r)r;r
orig_chdirs r%_chdirz2TestArchives.test_make_archive_cwd.<locals>._chdir1s+KKJtr'rxxx filechdir)rQ)
r+rvrrr	swap_attrrrrr)rcurrent_dirrQrrrrs     @@r%test_make_archive_cwdz"TestArchives.test_make_archive_cwd+soikk<<>>	!	!	!							 wJ???		-"2w77
: AAAAA D
















RY[[+666THk#:;;;%e,,,,,%e,,,,sUC/#B%A87B8
BBBBC/BC/BAC//Dcr|}tj|5t5|tddd|tj	ddddn#1swxYwYddddS#1swxYwYdS)NtestrFztest.tar
rrrJrKrrrr+r;r<rrQs  r%test_make_tarfile_in_curdirz(TestArchives.test_make_tarfile_in_curdirAs<<>>

!(
+
+	8	8X	8	8\&%88*EEEOOBGNN:66777	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	85B,ABB,B	B,B	B,,B03B0cr|}tj|5t5|tddd|tj	ddddn#1swxYwYddddS#1swxYwYdS)Nrrmztest.ziprrs  r%test_make_zipfile_in_curdirz(TestArchives.test_make_zipfile_in_curdirHs <<>>

!(
+
+	8	8X	8	8\&%88*EEEOOBGNN:66777	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8rc|ttdd|ttddd|ttddddgtdddgdd	tD}|d|tdd
tD}|d|dS)NrrctSr*xrFr'r%<lambda>z;TestArchives.test_register_archive_format.<locals>.<lambda>SQr'ctSr*rrFr'r%rz;TestArchives.test_register_archive_format.<locals>.<lambda>Urr')rrr)rrrrctSr*rrFr'r%rz;TestArchives.test_register_archive_format.<locals>.<lambda>Xsqr'rcg|]\}}|SrFrFrPrjparamss   r%rRz=TestArchives.test_register_archive_format.<locals>.<listcomp>YBBBLD&4BBBr'cg|]\}}|SrFrFrs   r%rRz=TestArchives.test_register_archive_format.<locals>.<listcomp>]rr')r	TypeErrorrrrrr)rformatss  r%test_register_archive_formatz)TestArchives.test_register_archive_formatPs)%<eQGGG)%<eYY			)%<eYY!9-	/	/	/	 yy6(JGGGBB,?,A,ABBB

eW%%%!%(((BB,?,A,ABBB(((((r'c	|tjtddD]-}||5|}tj|d}|	t5}ttd||dddn#1swxYwY||j
jtj||j
j||tjtdt'j|\}}t
j||	t,5}ttd||dddn#1swxYwY||j
jtj||j
j||tjtddddn#1swxYwY/dS)NrGFTrenonexistingrFrrrrxrsubTestrr+r;r<rrrrrr"ENOENTrrrrtrrrENOTDIRrrfrnonexisting_filertmp_fdtmp_files       r%test_make_tarfile_rootdir_nodirz,TestArchives.test_make_tarfile_rootdir_nodir`s	(V///:::$	B	BGg..
B
B,,..#%7<<#G#G &&'899SR 0@'RRRRSSSSSSSSSSSSSSS  !3U\BBB  !68HIII  6!@!@AAA#+#3#@#@#@    &&'9::Kb 'JJJJKKKKKKKKKKKKKKK  !3U]CCC  !6AAA  6!@!@AAA
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B	B	B]AI
B8,I
8B<<I
?B<C
I

F2&I
2F66I
9F6:BI

I	I	c	|tjtddD]-}||5|}tj|d}|	t5}ttd||dddn#1swxYwY||j
jtj||j
j||tjtdt'j|\}}t
j||	t,5}ttd||dddn#1swxYwY||j
jtj||j
j||tjtddddn#1swxYwY/dS)Nrnrrerrmrrrs       r%test_make_zipfile_rootdir_nodirz,TestArchives.test_make_zipfile_rootdir_nodirus	
	(V///:::$	B	BGg..
B
B,,..#%7<<#G#G &&'899SR 0@'RRRRSSSSSSSSSSSSSSS  !3U\BBB  !68HIII  6!@!@AAA#+#3#@#@#@    &&'9::Kb 'JJJJKKKKKKKKKKKKKKK  !3U]CCC  !6AAA  6!@!@AAA
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B	B	Brc|j|dfi||j|tjfi||j|tfi|dS)Nc|Sr*rFr;s r%rz3TestArchives.check_unpack_archive.<locals>.<lambda>sr')#check_unpack_archive_with_converterrprqr)rrr$s   r%check_unpack_archivez!TestArchives.check_unpack_archives}00%%	1	1)/	1	1	100GL	,	,$*	,	,	,00LLVLLLLLr'c|\}}t|}|dtj|d}t||||}|}	t||||	fi||	t|	||}
t||||
fd|i||	t|
||
tj5t|tfi|dddn#1swxYwY|
t5t|tfddi|ddddS#1swxYwYdS)Nr`rBrr)rHrhr r+r;r<rrrrrr	ReadErrorrr)rr	converterr$rQrexpectedrTrrtmpdir3s           r%rz0TestArchives.check_unpack_archive_with_convertersh!//11(H%%   GLL;;		68XFF,,..yy**IIg,>,>II&III'**H555,,..yy**IIg,>,>	!	!v	!	!	!	!'**H555


v/
0
0	8	899V,,77777	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8


z
*
*	F	F99V,,EEUEfEEE	F	F	F	F	F	F	F	F	F	F	F	F	F	F	F	F	F	Fs$E77E;>E;GGGc||d||dtj|5||ddddS#1swxYwYdS)N
fully_trustedfilterdata)rrcheck_no_warnings)rrs  r%check_unpack_tarballz!TestArchives.check_unpack_tarballs!!&!AAA!!&!888

.t
4
4	.	.%%f---	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.sA&&A*-A*c0|ddS)NrFrrs r%test_unpack_archive_tarz$TestArchives.test_unpack_archive_tars!!%(((((r'c0|ddS)NrCrrs r%test_unpack_archive_gztarz&TestArchives.test_unpack_archive_gztar!!'*****r'c0|ddS)Nbztarrrs r%test_unpack_archive_bztarz&TestArchives.test_unpack_archive_bztarrr'z(AIX MAXDATA must be 0x20000000 or largerc0|ddS)Nxztarrrs r%test_unpack_archive_xztarz&TestArchives.test_unpack_archive_xztars	
!!'*****r'c|d|t5|ddddddS#1swxYwYdS)Nrmrr)rrrrs r%test_unpack_archive_zipz$TestArchives.test_unpack_archive_zips!!%(((


y
)
)	<	<%%eF%;;;	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<sAAAct}fd}tdddg|dgtddttddg|tdtddg|ddgd	ftddgd	fttdt|dS)
Nc|d|d|ddS)Nr	stuff.booxx)r)rextract_dirextrars   r%_booz/TestArchives.test_unpack_registry.<locals>._boosKUA&&&X{333[$/////r'Booz.booz.b2)rrrrBoo2r)	rr	rrr
rrrr)rrrs`  r%test_unpack_registryz!TestArchives.test_unpack_registrys$&&	0	0	0	0	0
	uvuotl^LLL{D)))	
-)?!(D	*	*	*	!'''vx666

vx,.@.B.BCCC%&2.0B0D0DEEE	!(((+--w77777r'N)r[)(rrrr
requires_zlibrWrZrHr,r-rwhichrkrzrrrrrrrrrrrrrrrrrrequires_bz2r
requires_lzmar.rrrrrrFr'r%r@r@:sW!H!H!HF   """"WXe,,68811881BW"D"D"DHWXe,,688888880WXg..8::44::4,FFF
W---6WX*HIIJI*---,888W888))) BBB*WBBB.MMMFFF0...)))W+++W+++WX_S--/YZZ++[Z+W<<<
88888r'r@ceZdZejeedddZejedejee	dddZ
dS)	TestMisc
disk_usagez)disk_usage not available on this platformc"tjtjt
}dD]+}|t||t,|	|j
d|	|jd||j
d||j
|j|	|j
|j
tjt
dS)N)rGusedfreer)rrr+r;r:r0rr!r
assertGreaterrGr	assertGreaterEqualr
)rusagers   r%test_disk_usagezTestMisc.test_disk_usages!"'//(";";<<-	=	=D!!'%"6"6<<<<5;***5:q)))
A...UZ8885;
333	(#####r'rchownzrequires os.chownc}tj|tdt
5t
jdddn#1swxYwYt5t
jddddn#1swxYwYt5t
jddddn#1swxYwYt5t
jddddn#1swxYwYt5t
jddddn#1swxYwYtj}tj}dfd		}t
j|||||t
j|||t
j|||t
j|||
t
j|||||||t
j|||||t
j|||||t
j|||||
	tj|d}tj|d}t
j|||||t
j|||||||dS#t"$rYdSwxYw)
Nrztesting chown functionznon-existing username)userznon-existing groupname)rspamgQ	@ctj}|||j|||jdSdSr*)r+rrst_uidst_gid)r;rrsrrs    r%check_chownz(TestMisc.test_chown.<locals>.check_chown
sY!!A  ah///  ah/////r')rr)NN)rrtrrCrrrrLookupErrorrr+getuidgetgidrrrrKeyError)rr:rrrrrrs`      @r%
test_chownzTestMisc.test_chowns,,..?w///85666


z
*
*	#	#L"""	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#

{
+
+	A	AL(?@@@@	A	A	A	A	A	A	A	A	A	A	A	A	A	A	A

{
+
+	C	CL)ABBBB	C	C	C	C	C	C	C	C	C	C	C	C	C	C	C

y
)
)	,	,L7+++	,	,	,	,	,	,	,	,	,	,	,	,	,	,	,

y
)
)	)	)L4(((	)	)	)	)	)	)	)	)	)	)	)	)	)	)	)ikkikk	0	0	0	0	0	0	0	XsC(((Hc3'''Xs###Hc"""XC((((Hc"""XS))))H#&&&&Wc3'''GS#&&&Wc"""GS!!!W3''''GS!!!WC((((G%%%%
	+<$$Q'DL%%a(E

L4///K#s+++L$...Kc*****			DD	slA77A;>A;B??CC$DDD,EEE3FFF 4M
M*)M*N)rrrr,r-rsrrrr+rrFr'r%rrsX66DFF$$FF$X*HIIXW--/BCC:+:+DCJI:+:+:+r'rcNeZdZdZdZdZdZdZej	dZ
dZdZe
jejd	kd
dZdZd
ZdZdZdZdZe
jejd	kddZe
jejd	kddZdS)	TestWhichc|d|_tj|jdd|_tj|jjtj	|
|jjt
j
|jj\|_|_|j|_t
j|_d|_dS)NTmp)rz.Exerprsuffixz.EXE)rtemp_dirrtru	temp_filer+rrjrS_IXUSRrrr;rrpfileenv_pathcurdirextrs r%setUpzTestWhich.setUp5sE22
"4<A<BDDD	$dl333,--- gmmDN,?@@$)
ir'ctj|j|j}|||jjdSNr)rrr&rprr$rjrrs  r%
test_basiczTestWhich.test_basicCs;
\$)$(
3
3
3T^011111r'ctj|jj|j}|||jjdSr,)rrr$rjr#rr-s  r%test_absolute_cmdzTestWhich.test_absolute_cmdHs@\$.-DM
B
B
BT^011111r'ctj|j\}}tj||j}t
j|5tj	||j
}|||dddn#1swxYwYt
j|j5tj	||}||ddddS#1swxYwYdSr,)
r+r;rrpr<r&rrJrrr#rassertIsNone)rrtail_dirrelpathrs     r%test_relative_cmdzTestWhich.test_relative_cmdNsn W]]4844(',,x33

!x
0
0
0	*	*gDM:::BR)))	*	*	*	*	*	*	*	*	*	*	*	*	*	*	*
!tx
0
0
0	"	"gH555Bb!!!	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"s$"2B  B$'B$,C>>DDctj|j}t	j|j5t
j|j|}tj
dkr?||tj|j
|jn||ddddS#1swxYwYdS)Nrr")r+r;r:rprrJrrr&rr/rr<r(r2)rrrs   r%test_cwdzTestWhich.test_cwd[s7??48,,

!tx
0
0
0	&	&dih777B|w&&  RW\\$+ty%I%IJJJJ!!"%%%	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&sBCCCcTtj|jjtjtj|jjtjr|dtj
|j|jtj}|
|dS)Nzcan't set the file read-only)r;rA)r+rr$rjrraccessW_OKrrrr&rpr2r-s  r%test_non_matching_modez TestWhich.test_non_matching_modegs	$dl333
9T^("'22	:MM8999
\$)$(
A
A
A"r'cXtj|j\}}t	j|5t
j|j|}|	|tj
||jddddS#1swxYwYdSr,)r+r;rrprrJrrr&rr<)rrr3rs    r%test_relative_pathzTestWhich.test_relative_pathpsW]]4844(

!x
0
0
0	D	Ddih777BRh	!B!BCCC	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	D	DsABB#&B#cftjd|j}||dS)Nzfoo.exer)rrrpr2r-s  r%test_nonexistent_filezTestWhich.test_nonexistent_filevs2
\)$(
3
3
3"r'r"zpathext check is Windows-onlyctj|jdd|j}|||jjdd|jzdS)Nr)rrr&rprr$rjr)r-s  r%test_pathext_checkingzTestWhich.test_pathext_checking{sU
\$)CRC.tx
8
8
8T^0"5@AAAAAr'ctj5}|j|d<tj|j}|||jjddddS#1swxYwYdSNPATH)	rEnvironmentVarGuardr'rrr&rr$rjrenvrs   r%test_environ_pathzTestWhich.test_environ_paths

*
,
,	6-CKdi((BR!4555	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6sAA%%A),A)c	tj5}d|d<tjd|jd5t
jtd|j5tj	|j5tj|j}|
|dddn#1swxYwYdddn#1swxYwYdddn#1swxYwYddddS#1swxYwYdS)NrrE
os.confstrTreturn_valuecreatedefpath)rrFr,rrrprrr+rJrrr&r2rGs   r%test_environ_path_emptyz!TestWhich.test_environ_path_emptys

*
,
,	&CK$$\,0%22
&
&"2y$(;;
&
&%dh//
&
&\$),,!!"%%%
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&s}-C=!C%"C</B7	+C7B;
;C>B;
?CC%CC%CC%C=%C)	)C=,C)	-C==DDc	tj|jj}t
jdkrUtj}t|trtj
|}tj||}tj
5}tj|d<tjd|jd5t'jtd|j5t+j|j}||tj|j5t+j|j}|||dddn#1swxYwYdddn#1swxYwYdddn#1swxYwYddddS#1swxYwYdS)Nr"rErKTrLrO)r+r;rIr$rjrr/r(r9rrr<rrFpathsepr,rrrprrrrr&r2rJr)rexpected_cwdr(rHrs     r%test_environ_path_cwdzTestWhich.test_environ_path_cwdsw''(;<<<7""YF,..
-V,,7<<==L
*
,
,	7*CK$$\,0%22	
7	
7"2y$(;;	
7	
7\$),,!!"%%%)$(3377di00B$$R666777777777777777	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	
7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7s"7G!F,:AF0E>	2F>F
FF
F	F,FF,FF, G,F0	0G3F0	4GGGc@tj5}|ddtjdtd5tjtd|j
5tj|j
}dddn#1swxYwYdddn#1swxYwY|||jjtjd|j
d5tjtdd5tj|j
}dddn#1swxYwYdddn#1swxYwY|||jjddddS#1swxYwYdS)NrErKT)rrNrOrLr)rrFpopr,rrrrrr+rprrr&rr$rjrGs   r%test_environ_path_missingz#TestWhich.test_environ_path_missings

*
,
,	6GGFD!!!$$\z,0%22
-
-"2y$(;;
-
-\$),,
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
R!4555$$\,0%22
-
-"2y"55
-
-\$),,
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
R!4555	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6	6s>F!B03B
B0BB0 B!B0$F0B4	4F7B4	8A
FEE8EEEEEFE	F"E	##FFFc~tj|j}t	j|j5t	j5}|j|d<tj	|j
d}||dddn#1swxYwYddddS#1swxYwYdS)NrrEr)r+r;r:rprrJrFr'rrr&r2)rrrHrs    r%test_empty_pathzTestWhich.test_empty_paths(7??48,,

!tx
0
0
0	"	"

*
,
,	"03-CKdib111Bb!!!		"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"s5B2;BB2B	B2!B	"B22B69B6ctj5}|ddtj|j}||ddddS#1swxYwYdSrD)rrFrVrrr&r2rGs   r%test_empty_path_no_PATHz!TestWhich.test_empty_path_no_PATHs

*
,
,	"GGFD!!!di((Bb!!!	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"sAA&&A*-A*ztest specific to Windowscd}tj|jd|}tj|jtj||j	tj
|j}tj
|d}tj5}||d<tj||j}|||jddddS#1swxYwYdS)N.xyzTmp2r!rPATHEXTr)rtrur#r+rrjrr%rrr;rIrarrFrrrrr)temp_filexyzprogramrHrs      r%test_pathextzTestWhich.test_pathexts22t}:@NNN
"DL111*+++'""<#455'""7++A.

*
,
,	4 C	NgDM:::BR!2333	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4s9<DD	Dcd}tj|jd|}||jt
j|j}t
j	|d}tj5}|d|d<tj
||j}|||jddddS#1swxYwYdS)Nr]r^r!r;r_r)rtrur#rrr+r;rIrjrarrFrrrr`s      r%test_pathext_with_empty_strz%TestWhich.test_pathext_with_empty_strs!2t}:@NNN*+++'""<#455'""7++A.

*
,
,	4 #YYYC	NgDM:::BR!2333	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4s?C!!C%(C%N)rrrr*r.r0r5r7rr0r;r=r?r,r-rr/rBrIrPrTrWrYr[rcrfrFr'r%rr3s222
222"""
&
&
&#$#DDD
X08::BB::B666	&	&	&777,666$""""""X02LMM44NM4"X02LMM
4
4NM
4
4
4r'rceZdZdZdS)TestWhichBytesczt|tj|j|_tj|j|_tj|jj|j_tj|j|_tj|j	|_	dSr*)
rr*r+rrpr&r$rjr(r)rs r%r*zTestWhichBytes.setUps};tx((K	**	 k$.*=>>k$+..;tx((r'N)rrrr*rFr'r%rhrhs#)))))r'rhceZdZdZdZdZdZdZdZdZ	e
dZe
d	Zd
Z
e
dZdZe
d
ZdZejejjddZdZdZdZdZeje
dZeje
dZeje
dZ eje
dZ!dZ"dZ#e
dZ$e
dZ%dZ&ej'eje(edoe(e)doe(e)d d!d"Z*d#S)$TestMovecd}||_||_tj|j||_tj|j||_t|jd5}|	dddddS#1swxYwYdS)Nrr4r)
rr>r?r+r;r<r%r3r=r>)rrrYs   r%r*zTestMove.setUps||~~||~~T\8<<
T\8<<

$-
&
&	!
GGG																		sCCCct|d5}|}dddn#1swxYwYtj||t|d5}|||dddn#1swxYwY|tj|dSNr])	r=r_rmoverrr+r;r)rr{r|real_dstrYcontentss      r%_check_move_filezTestMove._check_move_files)
#t__	 vvxxH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 C
(D
!
!	1QXqvvxx000	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1,,-----s266")BBBc@ttj|}tj||||ttj||tj|dSr*)	rcr+rdrrorrr;r)rr{r|rprqs     r%_check_move_dirzTestMove._check_move_dir
sy"*S//**C6"*X*>*>#?#?@@@,,-----r'cR||j|j|jdSr*)rrr%r3rs r%test_move_filezTestMove.test_move_files&dmT]DMJJJJJr'cR||j|j|jdSr*)rrr%r?r3rs r%test_move_file_to_dirzTestMove.test_move_file_to_dirs&dmT\4=IIIIIr'cztj|j}|||j|jdSr*)rprqr%rrr?r3)rr{s  r%"test_move_file_to_dir_pathlike_srcz+TestMove.test_move_file_to_dir_pathlike_srcs5l4=))c4<?????r'cztj|j}||j||jdSr*)rprqr?rrr%r3rr|s  r%"test_move_file_to_dir_pathlike_dstz+TestMove.test_move_file_to_dir_pathlike_dsts5l4<((dmS$-@@@@@r'c.|dSr*)rvrs r%test_move_file_other_fsz TestMove.test_move_file_other_fs"s	
r'c.|dSr*)rxrs r%test_move_file_to_dir_other_fsz'TestMove.test_move_file_to_dir_other_fs's	
""$$$$$r'ctj|}	||j||tj|dS#tj|wxYwr)rtrrrtr>rrrr?s  r%
test_move_dirzTestMove.test_move_dir,si/dllnn555	&  w@@@W%%%%%IW%%%%sAA1c.|dSr*)rrs r%test_move_dir_other_fszTestMove.test_move_dir_other_fs4s	
r'c
||j|jtj|jtj|jdSr*)rtr>r?r+r;r<rIrs r%test_move_dir_to_dirzTestMove.test_move_dir_to_dir9sXT\4<GLLrw'7'7'E'EFF	H	H	H	H	Hr'c.|dSr*)rrs r%test_move_dir_to_dir_other_fsz&TestMove.test_move_dir_to_dir_other_fs>s	
!!#####r'c
||jtjjz|jtj|jtj|jdSr*)rtr>r+r;sepr?r<rIrs r%test_move_dir_sep_to_dirz!TestMove.test_move_dir_sep_to_dirCsaT\BGK7GLLrw'7'7'E'EFF	H	H	H	H	Hr'zrequires os.path.altsepc
||jtjjz|jtj|jtj|jdSr*)rtr>r+r;altsepr?r<rIrs r%test_move_dir_altsep_to_dirz$TestMove.test_move_dir_altsep_to_dirGsaT\BGN:DLGLLrw'7'7'E'EFF	H	H	H	H	Hr'ct|jd5	dddn#1swxYwY|tjtj|j|jdS)Nr4)r=r3rrrror%r?rs r%"test_existing_file_inside_dest_dirz+TestMove.test_existing_file_inside_dest_dirLs
$-
&
&																	&,T]DLQQQQQs$((ctj|jd}|t
jt
j|j|dSNr)r+r;r<r>rrrror|s  r%test_dont_move_dir_in_itselfz%TestMove.test_dont_move_dir_in_itselfRs?gll4<//&,T\3GGGGGr'c	tjt	dD]\}}tjt|}tjt|}|t
j||d|d|d	tj	tdS#tj	twxYw)N))srcdirzsrcdir/dest)_destinsrc() wrongly concluded that dst (z) is not in src ()r)
r+rrr;r<rr
_destinsrcrrr&s   r%test_destinsrc_false_negativez&TestMove.test_destinsrc_false_negativeWs
	%7
I
ISgll63//gll63// 1#s ; ; ;>Acc333"H IIII
I
V$$$$$IV$$$$BB::Cc	tjt	dD]\}}tjt|}tjt|}|t
j||d|d|d	tj	tdS#tj	twxYw)N))rzsrc/dest)rz
srcdir.newrz
) is in src (rr)
r+rrr;r<rrrrrr&s   r%test_destinsrc_false_positivez&TestMove.test_destinsrc_false_positivecs
	%N
D
DSgll63//gll63//  !23!<!<!<9<ccc!C!DDDD
D
V$$$$$IV$$$$rctj|jd}tj|j|t
j||j|	tj
|j|	tj|j|jdSr)r+r;r<r>rr%rror3rrfsamefiler|s  r%test_move_file_symlinkzTestMove.test_move_file_symlinkosgll4<//

4=#&&&C'''t}55666((
FFGGGGGr'cd}tj|j|}tj|j|t
j||jtj|j|}|	tj
||	tj|j|dSr)r+r;r<r>rr%rror?rrfr)rrr|
final_links    r%test_move_file_symlink_to_dirz&TestMove.test_move_file_symlink_to_dirxsgll4<22

4=#&&&C&&&W\\$,99
z22333((
CCDDDDDr'c<tj|jd}tj|jd}tj||tj|jd}t
j|||tj	||
tj|tj|dSNrrr)r+r;r<r>rr?rrorrfrrealpathrr{r|rWs    r%test_move_dangling_symlinkz#TestMove.test_move_dangling_symlinksgll4<//gll4<//

37<<f55C"""x00111))#..0@0@0J0JKKKKKr'c*tj|jd}tj|jd}tj|tj||tj|jd}tj|||	tj
||	tj||dSr)r+r;r<r>rrr?rrorrfrrs    r%test_move_dir_symlinkzTestMove.test_move_dir_symlinksgll4<//gll4<//





37<<f55C"""x00111((h7788888r'c	tj|j|j}||t
j|jt
j|jdSr*)	rror%r?rr+r;r<rIr-s  r%test_move_return_valuezTestMove.test_move_return_valuesg
[
5
5T\27+;+;DM+J+JKK	M	M	M	M	Mr'ctj|jtj|jd}||tj|jddSr)rror%r+r;r<r?rr-s  r% test_move_as_rename_return_valuez)TestMove.test_move_as_rename_return_valuesU
[T\5(I(I
J
JRW\\$,>>?????r'cgfd}tj|j|j||tddS)Nc6||fdSr*rr{r|moveds  r%rz7TestMove.test_move_file_special_function.<locals>._copyLL#s$$$$$r'rr)rror%r?rrrrrs  @r%test_move_file_special_functionz(TestMove.test_move_file_special_functions^	%	%	%	%	%DM4<uEEEEUQ'''''r'czgfd}tjtj|jdtjtj|jdt
j|j|j||	tddS)Nc6||fdSr*rrs  r%rz6TestMove.test_move_dir_special_function.<locals>._copyrr'childchild1rr)rrr+r;r<r>rror?rrrs  @r%test_move_dir_special_functionz'TestMove.test_move_dir_special_functions	%	%	%	%	%#BGLLw$G$GHHH#BGLLx$H$HIIIDL$,eDDDDUQ'''''r'cN||_tjtj|jtj|j}||j|	tj
|j||tj|tj
|dS#tj
|wxYwr*)rr>r+r;r<r:rIupperrrrorrerrs  r%test_move_dir_caseinsensitivez&TestMove.test_move_dir_caseinsensitives||~~',,--  ..446688	
DL'222	Kg...OOBGMM'22333HWBHWs
,ADD$rJSF_IMMUTABLE	UF_OPAQUEzrequires lchflagsc	tjttjttj|ttj	tt|ttjvtjttj
tjtjtdtjttj|ttj	tt|ttjvtjtr=tjttj
tjttjtr?tjttj
tjtdSdS#tjtr=tjttj
tjttjtr>tjttj
tjtwwxYw)Nr)r+r
TESTFN_SRCrJrrrrzrro
TESTFN_DSTrrdrrrr;r<rrrs r%test_move_dir_permission_deniedz(TestMove.test_move_dir_permission_denieds	-HZ   K
D$5666
ov{J
SSSZ2:<<7888
K
DN333'Z(I(IJJJK
D$5666
ov{J
SSSZ2:<<7888w~~j))
-J777 ,,,w~~j))
-J777 ,,,,,
-
-w~~j))
-J777 ,,,w~~j))
-J777 ,,,,
-s
E8ICLN)+rrrr*rrrtrvrxrzr}r2rrrrrrrr,r-r+r;rrrrrrrr+rrrrrrrrrr<rsrrrFr'r%rkrks(......KKKJJJ@@@
AAA
[%%[%&&&[HHH
$$[$HHHX)BCCHHDCHRRRHHH

%
%
%
%
%
%"HH[#"H"EE[#"E"LL[#"L"99[#"9MMM
@@@(([((([("'XZ008$WT>::8$WT;77,..--	..('
---r'rkceZdZGddeZdZejeddZ	ejeddZ
ejeddZdS)	TestCopyFilec4eZdZdZdZdZddZdZdZdZ	dS)	TestCopyFile.FauxFNTc"||_||_dSr*)_raise_in_exit_suppress_at_exit)r
raise_in_exitsuppress_at_exits   r%__init__zTestCopyFile.Faux.__init__s"/D%5D"""r'cdS)NrrF)rr#s  r%r_zTestCopyFile.Faux.reads2r'cd|_dS)NT)_enteredrs r%	__enter__zTestCopyFile.Faux.__enter__s
 DMMMr'c^|||f|_|jrd|_td|jS)NTCannot close)_exited_withr_raisedr r)rexc_typeexc_valexc_tbs    r%__exit__zTestCopyFile.Faux.__exit__s: ('6 9D"
.#n---))r'r)
rrrrrrrr_rrrFr'r%Fauxrsd	6	6	6	6				!	!	!	*	*	*	*	*r'rcdd}tjtd|5|t5tjdddddn#1swxYwYddddS#1swxYwYdS)Nr^c0|dkrtdJ)NsrcfilezCannot open "srcfile"r)rrAs  r%_openz4TestCopyFile.test_w_source_open_fails.<locals>._opens!9$$5666Hr'r=rdestfiler^)rrrrr r')rrs  r%test_w_source_open_failsz%TestCopyFile.test_w_source_open_failss				

vvu
5
5	7	7""7++
7
7	:666
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7s4A5AA5A!	!A5$A!	%A55A9<A9zskipped on macOSc|d	fd	}tjtd|5tjdddddn#1swxYwY|j|jdtu|	jdj
ddS)
Nr^cB|dkrS|dkrtdJ)NrrCannot open "destfile"r)rrArs  r%rz2TestCopyFile.test_w_dest_open_fails.<locals>._open	s29$$:%%6777Hr'r=rrrr)rr)rrrrr'rrrr rr#)rrrs  @r%test_w_dest_open_failsz#TestCopyFile.test_w_dest_open_fails	s))++						
vvu
5
5	3	3OIz222	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3())),Q/7:;;;-a054	6	6	6	6	6sAA Ac0||dd
fd	}tjtd|5tjdddddn#1swxYwY|j|j|j|jdtu|
jdjd	dS)NTr^c(|dkrS|dkrSJNrrrFrrArrs  r%rz3TestCopyFile.test_w_dest_close_fails.<locals>._open	(9$$:%%Hr'r=rrrr)rr)rrrrr'rrrrr rr#rrrrs  @@r%test_w_dest_close_failsz$TestCopyFile.test_w_dest_close_fails	sQ))++99T??							
vvu
5
5	3	3OIz222	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3())))***())),Q/7:;;;-a05*	,	,	,	,	,sA00A47A4cr|d|dfd	}tjtd|5|t
5tjdddddn#1swxYwYdddn#1swxYwY|j|j|	j
|jddu|j
dS)	NTr^c(|dkrS|dkrSJrrFrs  r%rz5TestCopyFile.test_w_source_close_fails.<locals>._open4	rr'r=rrrr)rrrrrr r'rrrrrrs  @@r%test_w_source_close_failsz&TestCopyFile.test_w_source_close_fails.	s))D//99;;							
vvu
5
5	7	7""7++
7
7	:666
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	
())))***)***,Q/47888(((((s6B")B?B"B	B"B	B""B&)B&N)rrrobjectrrr,r.r=rrrrFr'r%rrs*****v***$777X_U.//660/6"X_U.//,,0/,(X_U.//))0/)))r'rceZdZdZedZedZdZej	dZ
dZdZdZ
d	Zejejd
kddZd
S)TestCopyFileObji c:tt|jdSr*)r[rFILESIZEclss r%
setUpClasszTestCopyFileObj.setUpClassH	s-----r'cjtjttjtdSr*)rrxrrrs r%
tearDownClasszTestCopyFileObj.tearDownClassL	s*   !!!!!r'c8tjtdSr*rrxrrs r%tearDownzTestCopyFileObj.tearDownQ	!!!!!r'c#Kttd5}ttd5}||fVdddn#1swxYwYddddS#1swxYwYdSNr]r4r=rrr&s   r%	get_fileszTestCopyFileObj.get_filesT	
&$

	!3gt$$
!Cj   
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!	!3AAAA	AA		AA Act|d5}t|d5}|||dddn#1swxYwYddddS#1swxYwYdSrn)r=rr_)rr{r|fsrcfdsts     r%assert_files_eqzTestCopyFileObj.assert_files_eqZ	s
#t__	;c4
;D  diikk:::
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;	;	;	;	;	;	;	;	;	;	;	;	;	;	;	;	;	;	;s4B;A)B)A-	-B0A-	1BBBc|5\}}tj||dddn#1swxYwY|tt
dSr*)rrcopyfileobjr	rrr&s   r%test_contentzTestCopyFileObj.test_content_	s
^^

	)#ssC(((	)	)	)	)	)	)	)	)	)	)	)	)	)	)	)VW-----s
:>>c|5\}}tj|||jrJ|jrJ	ddddS#1swxYwYdSr*)rrrclosedr&s   r%test_file_not_closedz$TestCopyFileObj.test_file_not_closedd	s
^^

	"#ssC(((z!!!z!!!!	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"s+AAAcD|5\}}tj|||||j|||jddddS#1swxYwYdSr*)rrrrtellrr&s   r%test_file_offsetz TestCopyFileObj.test_file_offsetj	s
^^

	8#ssC(((SXXZZ777SXXZZ777	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8sA3BBBrNzWindows onlyctjd5}tjt
tdddn#1swxYwY|jsJ||j	dddtjtj
d5}|ddddn#1swxYwY|j}|t"j|tjd5}tj|tdddn#1swxYwY||j	dddtjtj
d5}	dddn#1swxYwY|j}|t"j|tjd5}tj|tdddn#1swxYwY|jrJ||tdS)	Nzshutil._copyfileobj_readintorrriFrosfoor)r,rrrr'rrcalledr	call_argsrtrur+rvr>rjrrrxr	)rmrYrs    r%
test_win_implzTestCopyFileObj.test_win_implp	s]
 
 !?
@
@	-AOFG,,,	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-x	
Q*O<<<
(RY[[
G
G
G	1
GGFOOO																(%000
]
 
 !?
@
@	,AOE7+++	,	,	,	,	,	,	,	,	,	,	,	,	,	,	,Q*A...
(RY[[
G
G
G	1																(%000
]
 
 !?
@
@	,AOE7+++	,	,	,	,	,	,	,	,	,	,	,	,	,	,	,8UG,,,,,sY AAA.CCC!EEE!F//F36F3H''H+.H+N)rrrrclassmethodrrr
contextlibcontextmanagerrr	rrrr,r.r+rjrrFr'r%rrE	sH..[.""[""""!!!
;;;
...
"""888X_RW_n55--65---r'rceZdZdZdZdZdZedZedZ	dZ
ejdZ
d	Zd
ZdZdZd
ZdZdZdZdZdS)_ZeroCopyFileTestz#Tests common to all zero-copy APIs.ir'rctt|jttd5}||_t
|j|jksJ	ddddS#1swxYwYdSrn)r[rrr=r_FILEDATAr)rrYs  r%rz_ZeroCopyFileTest.setUpClass	s---
&$

	516688CLs|$$44444	5	5	5	5	5	5	5	5	5	5	5	5	5	5	5	5	5	5s9A77A;>A;c8tjtdSr*)rrxrrs r%rz_ZeroCopyFileTest.tearDownClass	s     r'c8tjtdSr*rrs r%rz_ZeroCopyFileTest.tearDown	rr'c#Kttd5}ttd5}||fVdddn#1swxYwYddddS#1swxYwYdSrrr&s   r%rz_ZeroCopyFileTest.get_files	rrc td)Nzmust be implemented in subclass)r)rr#r$s   r%zerocopy_funz_ZeroCopyFileTest.zerocopy_fun	s!"CDDDr'c||||dSr*)rrrr*rs r%resetz_ZeroCopyFileTest.reset	sB



r'c|5\}}|||dddn#1swxYwY|ttd|j|5\}}tjd5}tj
ttdddn#1swxYwY|jrJ	ddddS#1swxYwYdS)NTr@zshutil.copyfileobj)
rr#rr`rrr,rrrr'rr)rr{r|rs    r%test_regular_copyz#_ZeroCopyFileTest.test_regular_copy	s
^^

	(#sc3'''	(	(	(	(	(	(	(	(	(	(	(	(	(	(	(74888$-HHH
^^

	 #s$$%9::
1a000
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1x	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 sC;??	#C:, CC:C	C:C	 C::C>C>c||j|5\}}|tt
f5|||dddn#1swxYwYdddn#1swxYwY|ttd|j
dS)NTr')rr%rrr rr#rr`rrr&s   r%test_same_filez _ZeroCopyFileTest.test_same_file	s.
###
^^

	,#s""G->#?@@
,
,!!#s+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,	,	,	,	,	,	,	,	,	,	,	,	,	,	,	,	
6$777GGGGGs5%BA7+B7A;	;B>A;	?BBBc tjtj}|t
5}t
j|ddddn#1swxYwY||j	j
|dS)Nrnew)rtrr+rvrrrr'rrr)rrjrs   r%test_non_existent_srcz'_ZeroCopyFileTest.test_non_existent_src	s29;;///


0
1
1	)ROD%(((	)	)	)	)	)	)	)	)	)	)	)	)	)	)	).55555sA##A'*A'ctdztdz|fd|fdtd5	dddn#1swxYwYtd5}td5}|||dddn#1swxYwYdddn#1swxYwY|tdd	dS)
Nr{r|c,tjSr*rrx)rysr%rz3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>		 0 9 9r'c,tjSr*r0)rzsr%rz3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>	r1r'r4r]Tr'r')rrr=r#rr`)rr{r|rzrys   @@r%test_empty_filez!_ZeroCopyFileTest.test_empty_file	s5.5.9999:::9999:::
'4
 
 																	'4
 
 	,Cgt$$
,!!#s+++
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,	,	,	,	,	,	,	,	,	,	,	,	,	,	,	,	
74888#>>>>>sHA%%A),A)CB4(C4B8	8C;B8	<CCCctj|jt5|ttjttddddS#1swxYwYdS)Nr)
r,rr
PATCHPOINTZeroDivisionErrorrrr'rrrs r%test_unhandled_exceptionz*_ZeroCopyFileTest.test_unhandled_exception	s
]
 
 ->!@@	@	@/$ovw
@
@
@	@	@	@	@	@	@	@	@	@	@	@	@	@	@	@	@	@	@s2A++A/2A/ctj|jt	t
jd5|5\}}|t5|
||dddn#1swxYwYdddn#1swxYwYddddS#1swxYwYdSNyor)r,rrr5r r"EINVALrrrr#r&s   r%test_exception_on_first_callz._ZeroCopyFileTest.test_exception_on_first_call	s]
 
 -4U\4-H-H!JJ	0	0!!
0Zc3&&'89900%%c3///000000000000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0sYCB,2B	B,BB,BB, C,B0	0C3B0	4CCCcVtj|jt	t
jd5|5\}}|t|j	||dddn#1swxYwYddddS#1swxYwYdSr9)
r,rrr5r r"ENOSPCrrr#r&s   r%test_filesystem_fullz&_ZeroCopyFileTest.test_filesystem_full	sA]
 
 -4U\4-H-H!JJ	H	H!!
HZc3!!'4+<c3GGG
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	H	Hs5B&B:BB
	
B
B
	BB"%B"N)rrr__doc__rrr5rrrrrrrr#r%r(r*r-r3r7r<r?rFr'r%rr	s -- HHJ55[5!![!"""!!!
EEE   HHH666???@@@000HHHHHr'rzos.sendfile() not supportedcHeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS)TestZeroCopySendfileos.sendfilec,tj||Sr*)r_fastcopy_sendfile)rrrs   r%r#z!TestZeroCopySendfile.zerocopy_fun	s(t444r'ctj|j5}ttd5}|t5|||dddn#1swxYwYtj	||dddn#1swxYwYdddn#1swxYwY|
ttd|jdS)Nr4Tr')ioBytesIOrr=rrrr#rrrr`r&s   r%test_non_regular_file_srcz.TestZeroCopySendfile.test_non_regular_file_src	s
Z

&
&	-#gt$$
-&&'89900%%c3///000000000000000"3,,,
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	
74888$-HHHHHsXB1BA."B.A22B5A26BB1B	B1!B	"B11B58B5cttd5}tj5}|t
5|||dddn#1swxYwYtj|||	d|
||jdddn#1swxYwYddddS#1swxYwYdS)Nr]r)
r=rrGrHrrr#rrseekrr_rr&s   r%test_non_regular_file_dstz.TestZeroCopySendfile.test_non_regular_file_dst
s
&$

	<3
<&&'89900%%c3///000000000000000"3,,,  T];;;
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<	<sYC.CA(C(A,,C/A,0AC
C.C	C.C	C..C25C2cfd}gtjtjdd|5|5\}}|t5}tj	||dddn#1swxYwYdddn#1swxYwYdddn#1swxYwYsJ|
|jjtj
dS)Ncvsd|i|Sttjd)Nr:)rgr r"EBADF)r#r$r
orig_sendfiles  r%rnzDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfile
sD
1D!!!$}d5f555ek4000r'rCT)rNr)r+rnr,rrrrr rrErrr"rO)rrnr{r|rrrPs     @@r%test_exception_on_second_callz2TestZeroCopySendfile.test_exception_on_second_call
s	1	1	1	1	1	1

]
 
 t-5!77	8	8!!
8Zc3&&w//82-c3777888888888888888
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8	8	8	8	8	8	8	8	8	8	8	8	8	8	8	8
+U[99999sYB<B%,BB%BB%BB%B<%B)	)B<,B)	-B<<CCc|tjdt5}|5\}}tj|||jsJ	dddn#1swxYwYdddn#1swxYwY|ttd|jdS)Nos.fstatrTr')r,rrr rrrErrr`rrrrr{r|s    r%test_cant_get_sizez'TestZeroCopySendfile.test_cant_get_size
s$]
 
 
 
A
A	 Q!!
 Zc3)#s333x
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
74888$-HHHHHs4B"A+B+A/	/B2A/	3BB	Bctj}d|_tjd|5}|5\}}t
j|||jsJ	dddn#1swxYwYdddn#1swxYwY|	ttd|jdS)NirSrMTr')
r,rMockst_sizerrrrErrr`rrrrrr{r|s     r%test_small_chunksz&TestZeroCopySendfile.test_small_chunks(
s>
}!!## 
]
 
 $
 
?
?	 1!!
 Zc3)#s333x
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
74888$-HHHHHs6B""B?B"B	B"B	B""B&)B&ctj}|jdz|_tjd|5}|5\}}tj|||j	sJ	dddn#1swxYwYdddn#1swxYwY|
ttd|j
dS)Ni@rSrWTr')r,rrXrrYrrrrErrr`rrrZs     r%test_big_chunkz#TestZeroCopySendfile.test_big_chunk5
sF
}!!##}(9:
]
 
 $
 
?
?	 1!!
 Zc3)#s333x
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
74888$-HHHHHs6B*$"BB*B	B*B	B**B.1B.ctjdt5}|tt
jtt|j	dd}|
|tj
ttjtt!tdd|tjtdz|tt
jttdz|j	dd}|
|d	ddddS#1swxYwYdS)
NrCrrrshelloTr'3i)r,rrr6rrr'rrrrr+r;rUrrxrCr)rr	blocksizes   r%test_blocksize_argz'TestZeroCopySendfile.test_blocksize_argB
sw
]
 
 ->!@@	1CD/$ovw
@
@
@Aq)I
Y(?(?@@@W%%%w6666OOI,gm<<</$ow#

G
G
GAq)IY000	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1sD2E&&E*-E*ctjsJ	tj|jt
tjd5}|	5\}}|
t5tj||dddn#1swxYwYdddn#1swxYwY|j
sJ	dddn#1swxYwYtjrJtj|j5}tjtt |j
rJ	dddn#1swxYwYdt_dS#dt_wxYw)Nr:rT)r_USE_CP_SENDFILEr,rrr5r r"ENOTSOCKrrrrErr'rrrTs    r%test_file2file_not_supportedz1TestZeroCopySendfile.test_file2file_not_supportedT
sP&&&&	+$$O ' = =%??
 BC^^%%<#s**+<==<<1#s;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<x

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ....$$T_55
$0008####
$
$
$
$
$
$
$
$
$
$
$
$
$
$
$'+F###dF#****s>E'C#B:B#B:#B''B:*B'+B:.C:B>	>CB>	CE'CE'"C#5E')EE'EE'EE''E5N)
rrrr5r#rIrLrQrUr[r]rarerFr'r%rBrB	sJ555III<<<:::$IIIIIIIII111$+++++r'rBz
macOS onlyceZdZdZdZdS)TestZeroCopyMACOSzposix._fcopyfilecBtj||tjSr*)r_fastcopy_fcopyfileposix_COPYFILE_DATAr&s   r%r#zTestZeroCopyMACOS.zerocopy_funn
s)#sE4HIIIr'N)rrrr5r#rFr'r%rgrgj
s-#JJJJJJr'rgceZdZdZdZdZejej	e
jdeje
edddZejejdd	Zd
S)TestGetTerminalSizectj}||jd||jddS)zCheck if get_terminal_size() returns a meaningful value.

        There's no easy portable way to actually check the size of the
        terminal, so let's check if it returns something sensible instead.
        rN)rget_terminal_sizercolumnslines)rrVs  r%test_does_not_crashz'TestGetTerminalSize.test_does_not_crashs
sH'))a000
A.....r'ctj5}d|d<|d=tj}dddn#1swxYwY||jdtj5}|d=d|d<tj}dddn#1swxYwY||jddS)z.Check if environment variables have precedence777COLUMNSLINESNi	888ix)rrFrrorrprqrrHrVs   r%test_os_environ_firstz)TestGetTerminalSize.test_os_environ_first}
s<
*
,
,	."C	NG+--D	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	
s+++

*
,
,	.I CL+--D	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	
S)))))s!<AA5BB!$B!ctj5}d|d<d|d<tj}dddn#1swxYwY||jd||jddS)Nrruyyyrvr)rrFrrorrprqrxs   r%test_bad_environz$TestGetTerminalSize.test_bad_environ
s

*
,
,	."C	N CL+--D	.	.	.	.	.	.	.	.	.	.	.	.	.	.	.	
a000
A.....s>AAz
not on ttyrozneed os.get_terminal_size()c	tjddg}n7#tt
tjf$r|dYnwxYwt|dt|df}tj
5}|d=|d=tj}dddn#1swxYwY|
||dS)	zCheck if stty returns the same results ignoring env

        This test will fail if stdin and stdout are connected to
        different terminals with different sizes. Nevertheless, such
        situations should be pretty rare.
        sttyrVzstty invocation failedrrrvruN)rrrrrrzrrrrrFrror)rrVrrHr@s     r%test_stty_matchz#TestGetTerminalSize.test_stty_match
s2	4*FF+;<<CCEEKKMMDD!?-/	4	4	4MM233333	4QLL#d1g,,/

*
,
,	0GI-//F	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
	
6*****s!:=1A10A11CCCzWASI has no /dev/nullctj5}|d=|d=tjtdd5tjd}dddn#1swxYwY||jd||j	dttjdd	
5}tjtd|5tjd}dddn#1swxYwYdddn#1swxYwY||jd||j	d
ddddS#1swxYwYdS)Nrvru
__stdout__)
)fallbackrrr5r6r7)(rr)
rrFrrrrrorrprqr=r+devnull)rrHrVrYs    r%
test_fallbackz!TestGetTerminalSize.test_fallback
s{

*
,
,	-GI"3d;;
C
C/BBB
C
C
C
C
C
C
C
C
C
C
C
C
C
C
CT\2...TZ,,,bj#888
CA"3a88
C
C/BBB
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
T\2...TZ,,,!	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-s}"EAEA	EA	 AE5D
C3'D
3C77D
:C7;D
>E
D	ED	9EEEN)rrrrrryr|r,r-r+isattyrrrwrsrr.ris_wasirrFr'r%rmrmr
s///
*
*
*///X3>#8#8#:#:;;\JJX%899688++88KJ+*X_W_&=>>--?>---r'rmceZdZdZdZdS)PublicAPITestsz>Ensures that the correct values are exposed in the public API.cF|ttdgd}ttdstjdkr|d|ttjt|dS)N__all__)rr'rrr
rr;rorrr/	ExecErrorrrrrrr	rrrdrrror
statvfsrNr)	rrsrr+rjrgrrlr)r
target_apis  r%test_module_all_attributez(PublicAPITests.test_module_all_attribute
s	22333<<<
2y!!	,RW__l+++V^,,c*oo>>>>>r'N)rrrr@rrFr'r%rr
s)HH?????r'r__main__)F)Vr,
unittest.mockrrtrrr+os.pathr"r0rprrKrMrrGrrrrrrr	r
rrr
rrMrurjImportErrorrrtest.supportrtest.support.os_helperrrrrrrr/rSr=r>rrrrrrrAssertionErrorrKr&r2rCr[r`rhrSUPPORTS_SENDFILErrTestCaserr3rr@rrrhrkrrrrr.rBrgrmrrmainrFr'r%<module>rs







				







				6666666666666666666666666666LLLLEEE""""""33333333((((((
3,
f_

f_
))

,
!
!'
*
*	l2A2%JJJJJJOOOOONNNNGGG=z"N#>??AALLL			)))$


&&&:0/11								W6W6W6W6W68,W6W6W6t`2`2`2`2`28X.`2`2`2D@?@?@?@?@?x*@?@?@?Ff8f8f8f8f88X.f8f8f8R
M+M+M+M+M+x*M+M+M+`w4w4w4w4w4(+w4w4w4t)))))Y)))o-o-o-o-o-x*o-o-o-dY)Y)Y)Y)Y)8$Y)Y)Y)xG-G-G-G-G-h'G-G-G-TaHaHaHaHaHaHaHaHH&&(EFFs+s+s+s+s+,h.?s+s+GFs+lUL))JJJJJ)8+<JJ*)JL-L-L-L-L-(+L-L-L-^?????X&???$zHMOOOOOs6&A++A54A5)
C44C>=C>DDD