python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_shutil.cpython-312.pyc

ΑeddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlZddlZddlZ	ddlZddl!m"Z"ddl#m$Z$ddl%m&Z&m'Z'ddl#m(Z(e&dzZ)e&dzZ*e&d	zZ+ejXj[d
Z.ejXj[dZ/ejXddd
k(Z0	ddl1Z1ddl2Z2dZ3	ddl4Z4ejjjmde7dZ8dZ9dZ:d>dZ;dZ<d>dZ=dZ>dZ?e?Z@dZAGddZBGddeBejZDGdd eBejZEGd!d"eBejZFGd#d$eBejZGGd%d&eBejZHGd'd(eBejZIGd)d*eIZJGd+d,eBejZKGd-d.ejZLGd/d0ejZMGd1d2eNZOeje@d3Gd4d5eOejZQeje.d6Gd7d8eOejZRGd9d:ejZSGd;d<ejZTeUd=k(rejyy#e $rdZYOwxYw#e $rdZ3YwxYw#e $rdZ4YwxYw)?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_effectc8tttddd)NEXDEVzInvalid cross-device link)OSErrorgetattrerrno)argskwargss  D/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_shutil.py_fake_renamer&;s
'%"-/J
KKcBtjfd}|S)Nc	tj}tt_|i||t_S#t_wxYwN)osrenamer&)r#r$builtin_renamefuncs   r%wrapzmock_rename.<locals>.wrap@s4	'YYN$BI((&BIBIs	&5
A)	functoolswraps)r.r/s` r%mock_renamer2?s%__T''Kr'ct|trtjj|}|rdnd}|rdnd}t|||5}|j
|dddy#1swYyxYw)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_filerCJsa$ww||T"4sDt7H	
dD8	,
sA""A+cd}t|d}djt|Dcgc]3}tjt
jj5c}}t|d5}|||D]}|j|	dddtjj||k(sJycc}w#1swY3xYw)zBCreate a test file with an arbitrary size and random text content.c3PK||k\sJ||kDr|||z}||kDr|r|yywr*)totalsteps  r%chunkszwrite_test_file.<locals>.chunksZs=}dlJTMEdlKs&&i r'r4N)
minr<rangerandomchoicestring
ascii_lettersencoder=r>r+r;getsize)r;sizerIbufsizeichunkfcsizes        r%write_test_filerXXs$oGHH$W~/mmF$8$89@@B/
0E	
dD	QD'*	E
GGEN	77??4 D(((/s8C3 CCct|trtjj|}|rdnd}|rdnd}t|||5}|j
cdddS#1swYyxYw)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]js^$ww||T"4sDt7H	
dD8	,wwysA!!A*cg}ttj|D]}tjj	||}tjj|r[tjj
|s<|j|dzt|D]}|j|dz|z|j||S)N/)	sortedr+listdirr;r<isdirislinkappendrlistdir)r;resnamepns     r%rerexs
Crzz$'(GGLLt$
77==BGGNN1$5JJtcz"a[
+

4#:>*
+
JJtJr'c
ttdsyd}d}	tjdtjd5}|j
}|j
ddddt|d5}tjdtjd5}|j
}|j}|j}	tj||dd	dddddd|tj||tj|y	y	#1swYxYw#t$rBYdddddd|tj||tj|yywxYw#1swYnxYw	dddn#1swYnxYw|tj||tj|yy#|tj||tj|wwxYw)
NsendfileFr4dirdeletes
0123456789rZrT)
hasattrr+tempfileNamedTemporaryFilegetcwdrgr>r=filenorkrunlinkr )srcnamedstnamerVsrcdstinfdoutfds       r%supports_file2file_sendfiler|s2z"GG&

(
(299;u
M	#QRffG
GGM"	#'4
 
	 C,,Tryy{5Q	
 UX((zz|

 KKtQ2 	
 
	 W%W%%	#	#! 	
 
	 W%W%!
	
 	
 	
 
	 
	 
	 W%W%W%W%s*GD%G3+F-E?D1$E?%F-G%D.*G1	E<:E?;FG;E<<E??F	F	GFG1Hctrmtjdk(rZtjdtj
z}|j
ddj
d}t|ddk\Sy)	Niz/usr/bin/dump -o %s
i T)AIXsysmaxsize
subprocess	getoutput
executablesplitint)hdrsmaxdatas  r%
_maxdataOKrs_
s{{j(

!
!"7#.."H
I

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

        Returns the path of the directory.
        )prefixrm)rqmkdtempr+rs
addCleanuprrmtree)selfrds   r%rzBaseTest.mkdtemps5

F		<	((!,r'r*)__name__
__module____qualname__rrFr'r%rrsr'rceZdZdZej
dZej
dZej
dZe	jeddZe	jeddZ
e	jeddZd	Zd
Ze	j"ej&ddd
k(dej(ej*dZdZe	j"ej&ddd
k(dej(ej*dZdZe	j"ej&ddd
k(dej(ej*dZdZdZe	jej<ddZe	j"ej<ddZ dZ!ej
dZ"e	jeddZ#y)
TestRmTreecb|j}tjj|d}tj|ttjj|ddtj|}|j|ttj|y)Nkillmesomefilefoo)rr+r;r<mkdirrCfsencodeassertIsInstancebytesshutilr)rtmpvictims   r%test_rmtree_works_on_bytesz%TestRmTree.test_rmtree_works_on_bytesspllnc8,
277<<
3U;V$fe,

fr'c|j}tjj|d}tj|tjj|d}tj
|||j
ttj||jtjj||jtjj|gfd}|jt5tj||ddd|jt!d|j#ddtjj$|jdd||j'dddty#1swYxYw)Nrmlinkc(j|yr*rdr#errorss r%onerrorz@TestRmTree.test_rmtree_fails_on_symlink_onerror.<locals>.onerrorMM$r'rrrro)rr+r;r<rsymlinkassertRaisesr rr
assertTrueexistslexistsassertWarnsDeprecationWarningassertEquallenassertIsrcrrrdir_rrrs     @r%$test_rmtree_fails_on_symlink_onerrorz/TestRmTree.test_rmtree_fails_on_symlink_onerrors9llnww||C'
ww||C(


4'6==$7t,--.	 


0
1	1MM$0	1Va(

fQilBGGNN31t,fQil1ow7	1	1sF==Gc8|j}tjj|d}tj|tjj|d}tj
|||j
ttj||jtjj||jtjj|gfd}tj|||jtd|jddtjj |jdd||j#ddty)Nrmrc(j|yr*rrs r%onexcz<TestRmTree.test_rmtree_fails_on_symlink_onexc.<locals>.onexcrr'rrrro)rr+r;r<rrrr rrrrrrrrrcrrrrrrrs     @r%"test_rmtree_fails_on_symlink_onexcz-TestRmTree.test_rmtree_fails_on_symlink_onexcsllnww||C'
ww||C(


4'6==$7t,--.	 

d%(Va(

fQilBGGNN31t,fQilG4r'c|j}tjj|d}tjj|d}tjj|d}|||fD]}tj|tjj|d}t|dtjj|d}tj||tjj|d}tj||tjj|d}	tj||	tj||jtjj||jtjj||jtjj|y	Ndir1dir2dir3file1rlink1link2link3)rr+r;r<rrCrrrassertFalserr
rrrrrrrrrrs
          r%test_rmtree_works_on_symlinksz(TestRmTree.test_rmtree_works_on_symlinkssGllnww||C(ww||D&)ww||C(tT!	AHHQK	S'*5% T7+


4T7+


4T7+


5% 

d-.t,-u-.r'zonly relevant on Windowsc|j}tjj|d}tj|tjj|d}tj|||jtj||jttj||jtjj||jtjj!|gfd}|j#t$5tj||ddd|j't)d|j+ddtjj,|j'dd||j/dddty#1swYxYw)Nrmrc(j|yr*rrs r%rzBTestRmTree.test_rmtree_fails_on_junctions_onerror.<locals>.onerrorrr'rrrro)rr+r;r<r_winapiCreateJunctionrrrurr rrrrrrrrrrrcrrs     @r%&test_rmtree_fails_on_junctions_onerrorz1TestRmTree.test_rmtree_fails_on_junctions_onerrorsOllnww||C'
ww||C(tT*	(($/'6==$7t,--.	 


0
1	1MM$0	1Va(

fQilBGGNN31t,fQil1ow7	1	1s:GG&cx|j}tjj|d}tj|tjj|d}tj|||jtj||jttj||jtjj||jtjj!|gfd}tj|||j#t%d|j'ddtjj(|j#dd||j+ddty)Nrmrc(j|yr*rrs r%rz>TestRmTree.test_rmtree_fails_on_junctions_onexc.<locals>.onexc%rr'rrrro)rr+r;r<rrrrrrurr rrrrrrrrrcrrs     @r%$test_rmtree_fails_on_junctions_onexcz/TestRmTree.test_rmtree_fails_on_junctions_onexcs'llnww||C'
ww||C(tT*	(($/'6==$7t,--.	 

d%(Va(

fQilBGGNN31t,fQilG4r'c|j}tjj|d}tjj|d}tjj|d}|||fD]}tj|tjj|d}t|dtjj|d}t
j||tjj|d}t
j||tjj|d}	t
j||	tj||jtjj||jtjj||jtjj|yr)
rr+r;r<rrCrrrrrrrrs
          r%test_rmtree_works_on_junctionsz)TestRmTree.test_rmtree_works_on_junctions-sMllnww||C(ww||D&)ww||C(tT!	AHHQK	S'*5% T7+tU+T7+tU+T7+ue,

d-.t,-u-.r'ctj|j}|jtt
j|tj|d|j}t|dfdtjj|d}|jt5}tj|ddd|jjj||jtjj!|tj|d|jtjj!|gfd}|j#t$5tj||ddd|jt'd|j)d	d	tj*|jd	d
||j-d	dd
t|jd	dd
j||j)d
d	tj.|jd
d
||j-d
dd
t|jd
dd
j|y#1swYxYw#1swY7xYw)NrmT
ignore_errorststfilec(j|yr*rrs r%rz6TestRmTree.test_rmtree_errors_onerror.<locals>.onerrorVrr'rrorr)rqmktemprrFileNotFoundErrorrrrCr+r;r<NotADirectoryErrorr	exceptionfilenamerrrrrrscandirrrmdir)rrtmpdircmrrs     @r%test_rmtree_errors_onerrorz%TestRmTree.test_rmtree_errors_onerrorCs*??t||~6+V]]HE

hd3FI&+77<<	2


1
2	$bMM(#	$..9x01

hd3x01	 


0
1	5MM(G4	5Va(

fQilBJJ/1x0fQil1o/AB1a118<

fQilBHH-1x0fQil1o/AB1a118<)	$	$	5	5s5KKKKcVtj|j}|jtt
j|tj|d|j}t|dfdtjj|d}|jt5}tj|ddd|jjj||jtjj!|tj|d|jtjj!|gfd}tj|||jt#d|j%d	d	tj&|jd	d
||j)d	dt|jd	dj||j%d
d	tj*|jd
d
||j)d
dt|jd
dj|y#1swYxYw)NrTrrrc(j|yr*rrs r%rz2TestRmTree.test_rmtree_errors_onexc.<locals>.onexcwrr'rrorr)rqrrrrrrrCr+r;r<rrrrrrrrrrr)rrrrrrs     @r%test_rmtree_errors_onexcz#TestRmTree.test_rmtree_errors_onexcds??t||~6+V]]HE

hd3FI&+77<<	2


1
2	$bMM(#	$..9x01

hd3x01	 

he,Va(

fQilBJJ/1x0fQil,>?1..9

fQilBHH-1x0fQil,>?1..9'	$	$s5JJ(Ncygwinz2This test can't be run on Cygwin (issue #1071513).cZd|_tjt|j	t
jttjjtd|_	tjjtd|_
tj|jtj|jtjtj}tj|jj}tj|jj}tjtj z}tj"|j|tj"|j|tj"t||j	tj"t||j	tj"|j||j	tj"|j||j%t&5tjt|j(ddd|j+|jddy#1swY'xYw)Nrabrrz1Expected call to onerror function did not happen.)
errorStater+rrrrrr;r<child_file_pathchild_dir_pathrcreate_empty_filestatst_modeS_IREADS_IEXECchmodrrcheck_args_to_onerrorrrold_dir_modeold_child_file_modeold_child_dir_modenew_modes     r%
test_on_errorzTestRmTree.test_on_errors



v.!ww||FC8 ggll637##D$8$89
$$%wwv.. ggd&:&:;CCWWT%8%89AA<<,
%%x0
$$h/
"&,7$"6"68KL$"5"57IJ


0
1	FMM&$*D*DE	F	
!L	N	F	Fs&J!!J*c|jdkr|tjur|j||jnq|tj
ur|j||jnB|j|tj|j|t|jg|jt|dt|xjdz
c_y|j|tj
|j|t|jt|dtd|_y)Nrorrr)rr+rurrrrrraassertInrr
issubclassr rr.argexcs    r%rz TestRmTree.check_args_to_onerrors??Qryy   d&:&:;!  d&9&9:

dBJJ/

cFD,?,?#@AOOJs1vw78OOq OT288,S&)OOJs1vw78DOr'cd|_tjt|j	t
jttjjtd|_	tjjtd|_
tj|jtj|jtjtj}tj|jj}tj|jj}tjtj z}tj"|j|tj"|j|tj"t||j	tj"t||j	tj"|j||j	tj"|j|tjt|j$|j'|jddy)Nrrrrrz/Expected call to onexc function did not happen.)rr+rrrrrr;r<rrrrrrrrrcheck_args_to_onexcrrs     r%test_on_exczTestRmTree.test_on_excs



v.!ww||FC8 ggll637##D$8$89
$$%wwv.. ggd&:&:;CCWWT%8%89AA<<,
%%x0
$$h/
"&,7$"6"68KL$"5"57IJ

fD$<$<=!J	Lr'c|jdkr|tjur|j||jnq|tj
ur|j||jnB|j|tj|j|t|jg|jt|t|xjdz
c_y|j|tj
|j|t|jt|td|_y)Nrorr)rr+rurrrrrrarrrr9r rs    r%r	zTestRmTree.check_args_to_onexcs??Qryy   d&:&:;!  d&9&9:

dBJJ/

cFD,?,?#@AOOJsG45OOq OT288,S&)OOJsG45DOr'cdddfd}fd}tjt|jtj
ttjjtd|_tjjtd|_	tj|jtj|jtjtj}tj|jj}tj|jj}tjtjz}tj |j|tj |j|tj t||jtj t||jtj |j||jtj |j||j#t$5t	j
t||ddd|j'|j)y#1swY,xYw)NFc
dyNTrF)r#onerror_calleds r%rz7TestRmTree.test_both_onerror_and_onexc.<locals>.onerrors!Nr'c
dyrrF)r#onexc_calleds r%rz5TestRmTree.test_both_onerror_and_onexc.<locals>.onexcsLr'rr)rr)r+rrrrrr;r<rrrrrrrrrrrrr)	rrrrrrrrrs	       @@r%test_both_onerror_and_onexcz&TestRmTree.test_both_onerror_and_onexcs
	"	 	

v.!ww||FC8 ggll637##D$8$89
$$%wwv.. ggd&:&:;CCWWT%8%89AA<<,
%%x0
$$h/
"&,7$"6"68KL$"5"57IJ


0
1	@MM&'?	@%(	@	@sJ&&J/c	tjfd}|t_tjtt	tdfdtjtt_y#t_wxYw)Nc:|tk7r
t|Sr*)rr )fnr#r$
orig_lstats   r%raiserzFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiser%s<!)O%b>)r'r)r+lstatrrrCrr)rrrs  @r%+test_rmtree_does_not_choke_on_failing_lstatz6TestRmTree.test_rmtree_does_not_choke_on_failing_lstat"sT
	"J
*
BHHHV.MM&!!BHzBHsA$A33
Bctjtjtjtjhtj
kxrBtjtjvxr tjtjv}|r|jtj|jtjj|j}tjj!|d}tj"|	tj$}Gddt&fd}|t_|j)tj||t_y|j+tj|j+tjjy#t_wxYw)NrceZdZy)HTestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)rrrrFr'r%Calledr?sr'rcr*rF)r#r$rs  r%_raiserzITestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser@s Lr')r+r=rrursupports_dir_fdrasupports_fdsupports_follow_symlinksrr_use_fd_functionsravoids_symlink_attacksrr;r<r_rmtree_safe_fd	Exceptionrr)rr#tmp_dirrreal_rmtreerrs      @r%-test_rmtree_uses_safe_fd_version_if_availablez8TestRmTree.test_rmtree_uses_safe_fd_version_if_available2s4 ggrww		288D//0DZZ2>>9D WW(C(CC	OOF445OOFMM@@AllnGWc*AHHQK
5$44-Y-!)0&!!&&--;)4&V556V]]AAB*5&s
%AG


Gzdir_fd is not supportedc|j}d}tjj||}tj|tj
}|j
tj|tj|tjtjj|dttjj|ddd|jtjj|tj|||jtjj|y)Nrsubdirrrdir_fd)rr+r;r<r=O_RDONLYrcloserrCrrrrr)rr'rfullnamer-s     r%test_rmtree_with_dir_fdz"TestRmTree.test_rmtree_with_dir_fdJs,,.77<<0"++.&)

h12277<<(J?Gx01

fV,12r'zdir_fd is supportedc|j}|jt5tj|dddd|jtjj|y#1swY8xYw)Nrr,)	rrNotImplementedErrorrrrr+r;r)rr's  r%#test_rmtree_with_dir_fd_unsupportedz.TestRmTree.test_rmtree_with_dir_fd_unsupportedXsX,,.


2
3	-MM'!,	-w/0	-	-sA55A>ctj|j\}}tj||jttj|tj|yNr)
rqmkstemprr+r/rrrrremove)rhandler;s   r%test_rmtree_dont_delete_filez'TestRmTree.test_rmtree_dont_delete_file_sJ''DLLN;
,fmmTB
		$r'ctjt	tjj	td}tjj	td}tj|tj
|||j
ttj|tj|dtjtdy#tjtdwxYw)NcheeseshopTr)
r+rrr;r<rrr rrrrxrys   r%test_rmtree_on_symlinkz!TestRmTree.test_rmtree_on_symlinkfs		6'',,vx0C'',,vv.CHHSMJJsC gv}}c:MM#T2MM&5FMM&5sB/C&&Dc|tjt	tjj	td}tjj	td}tj|ttjj	|ddj
tj|||jttj|tj|dtjtdy#tjtdwxYw)Nr<r=spamr4Tr)
r+rrr;r<r=r/rrrr rrr>s   r%test_rmtree_on_junctionz"TestRmTree.test_rmtree_on_junctionts
		6'',,vx0C'',,vv.CHHSMc6*D1779""3,gv}}c:MM#T2MM&5FMM&5sC'DD;)$rrrrrskip_unless_symlinkrrrunittest
skipUnlessrrrrrrskipIfrplatformskip_if_dac_overrideskip_unless_working_chmodrrr
r	rrr)rr#r1r4r:r?rBrFr'r%rrst""8#8&""5#5$""/#/*X"<=8>8(X"<=5>5&X"<=/>/*=B:@X__S\\"1%1IK##((N)$KN8 6X__S\\"1%1IK##((L)$KL6 6X__S\\"1%1IK##((#))$K#)J" C0X113LM3N3X__V--/DE1F1""6#6X"<=6>6r'rceZdZdZdZejdZdZdZ	dZ
ejjddZd	Zej eed
dejej&ej*dk(d
dZdZejdZejdZdZdZy)TestCopyTreec	N|j}tjj|jd}|j	t
j||j	t
jtjj|t|dfdtjtjj|dt|ddfdtj|||jtjjtjj|d|jtjjtjj|d|jtjjtjj|ddt|df}|j|dt|ddf}|j|dy)Ndestinationtest.txt123test_dir456)rr+r;r<rrrdirnamerCrcopytreerisfilerbr]rrsrc_dirdst_diractuals    r%test_copytree_simplez!TestCopyTree.test_copytree_simplese,,.'',,t||~}=

w/

rwww'?@GZ(%0
gz23GZ4e<)rww||GZ'HIJ

bggll7J&GHIrww||GZ4>(@A	BGZ01'GZ<='r'c	|j}|j}|jtj||jtj|t	|dfdtjt
jj|dtjt
jj|dt	|ddfdt	|ddfdtj||d|jt
jjt
jj|d|jt
jjt
jj|d|jt
jjt
jj|ddt|df}|j|dt|ddf}|j|d|jt 5tj||d	dddy#1swYyxYw)
Nznonexisting.txtrOexisting_dirzexisting.txtzwill be replacedzhas been replacedT)
dirs_exist_okF)rrrrrCr+rr;r<rSrrTrbr]rrFileExistsErrorrUs    r%test_copytree_dirs_exist_okz(TestCopyTree.test_copytree_dirs_exist_oks,,.,,.

w/

w/G./7
g~67
g~67G^^<>PQG^^<>QR=rww||G=N'OPQ

bggll7N&KLMrww||G^4B(DE	FG%678'G^^DE!45



/	COOGWEB	C	C	CsI&&I/c	`|j}tjj|d}tjj|d}tjj|d}tj|tj|t|dfdtjj|d}tjj|d}tjtjj|d|ttdr5tj|tjtjzttd	r4ttd
r$tj|tjtj|}tj ||d|j#tjj%tjj|ddtj&tjj|dd}tj(d
k(r|j+dr|dd}|j-|tjj|dtj|}	ttdr&|j-|	j.|j.ttd	r'|j-|	j0|j0yy)Nrxrysubzfile.txtrrzsub/linklchmodlchflags	UF_NODUMPTsymlinksntz\\?\)rr+r;r<rrCrrprarS_IRWXUS_IRWXOrbrcrrrSrrcreadlinkrg
startswithrrst_flags)
rr'rVrWsub_dirsrc_linkdst_linksrc_statrXdst_stats
          r%test_copytree_symlinksz#TestCopyTree.test_copytree_symlinkss,,.'',,w.'',,w.'',,w.

GZ(%077<<077<<4


277<<4	2x IIht|| ;<2z"wt['AKK$..188H%48rww||GUF'KLMRWW\\'5&AB77d?v00;ABZFgz!BC88H%2x X--x/?/?@2z"X..0A0AB#r'c
ttjj}tjj}|j	}	||j	d}t|dfdt|dfdtj||dt|ddfdtj||dt|ddfdtj||ddtj||dd	t|dddfdt|dd	d
fd	tjdd}tj||||j|||d|j|||d|j|||dtj|	tjdd
}tj||||j|||d|j|||dd	|j|||ddtj|	d}tj||||j|||dd	d
|j|||ddtj|	tj|tjtjj|y#tj|wxYw#tj|wxYw#tj|wxYw#tj|tjtjjwxYw)NrMrNrOztest.tmprPrQ	test_dir2r+subdir2ztest.pyz*.tmpignorezsubdir*cRg}|D]}tjj||}tjj|r(|j	ddk(r|j|jtjj
|ddvs|j||S)Nrr+z.py)r+r;r<rbrrdsplitext)rxnamesrfrgr;s     r%_filterz8TestCopyTree.test_copytree_with_exclude.<locals>._filtersC %-!ww||C6GGMM$/ JJL,8JJt,WW--d3B7EBJJt,-Jr')r+r;r<rrrCrrignore_patternsrSrrrrR)rr<rrVrWpatternsr{s       r%test_copytree_with_excludez'TestCopyTree.test_copytree_with_excludesww||,,.:	44<<>=9G,e4,e4HHT':./Z8%@HHT';/0j95AHHT';9:HHT';	:;h
CUKiCUK
'!11';GBtGZ'@ AB  Wj(A!BC  Wk(B!CD

g&
'!11'9EB  Wj(A!BC  Wk9(M!NO  Wk8(L!MN

g&
'
A  Wk9-6)8"9:  Wk8(L!MN

g&MM'"MM"''//'23I

g&

g&0

g&MM'"MM"''//'23sYC#M.*BL 2M.B
L:M.(AMM. L77M.:MM.M++M..A	N7c
`tjj}tjj}j	}||d}tj
||tj
||dtj
tjj|ddt
|dddfdgfd}|j	d}tj|||j|||ddd|j	d}tjtj|||j|||ddd|j	d}ttj|d	}j|tjtj|||j|||dddj!t#d
y)NsourcerPr+rNrQcj|j|tj|tj	t|tt
||D]}j|tgSr*)rdrstrlistrrset)rxrzrginvokationsrs   r%_ignorez?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignore sqs#!!#s+!!%.SZSZ9
1%%dC0
1Ir'rMrvr	)r+r;r<rrrrCrrSrpathlibPathrrrDirEntryrr)	rr<rr'rVrrW
src_dir_entryrs	`       @r%!test_copytree_arg_types_of_ignorez.TestCopyTree.test_copytree_arg_types_of_ignoresww||,,.w)
g
gz*+
gz8<=GZ:>F	t||~}59tGZ$. 01	2t||~}5W-wwGtGZ$. 01	2t||~}5RZZ01!4
mR[[9
ww?tGZ$. 01	2	
[)1-r'c	|j}tjj|d}tj|tjj|d}|jtj|tj|dt|dfdtjtjj|ddt|dfdtjtjj|ddtj|	}|jtj|tj|dt
j|||jtj|jtj|j|jtjtjj|djtjtjj|dj|jtjtjj|djtjtjj|djtjj|tjj!|d
}|jtj|jtj|jy)NrrMizpermissive.txtrOzrestrictive.txtrQirr)rr+r;r<rrrrrrCrqrrSrrrr)rr'rVrWrestrictive_subdirrestrictive_subdir_dsts      r%!test_copytree_retains_permissionsz.TestCopyTree.test_copytree_retains_permissions<s3,,.'',,w1
'',,w
6

w/
% G-.6
g'78%@G./7
g'895A%--':	((*<=
#U+))1127773C3K3KLg7G!HIQQ''"'',,w8H"IJRR	Tg7H!IJRR''"'',,w8I"JKSS	U!#g.0ggmm<N.OPQ.R"T!34<<''"89AA	Cr'zos.chmodc|j}tjj|jd}|j	t
j||j	t
jtjj|td|_	|jt
j5tj||dddy#1swYyxYw)NrMzka-boom)
rr+r;r<rrrrRPermissionErrorrrrrS)r
mock_patchrVrWs    r%test_copytree_winerrorz#TestCopyTree.test_copytree_winerrorWs
,,.'',,t||~}=

w/

rwww'?@!0!;



v||
,	.OOGW-	.	.	.sC++C4cfd}gjtjjttj
j
ddd5}|jdddtj|jtdy#1swY=xYw)	Nc@jdj|tj|tj|tj
j
dj|tj
j
dyNr)rdrrrr+r;r<)rrryflagrrxs  r%custom_cpfunzETestCopyTree.test_copytree_custom_copy_function.<locals>.custom_cpfungsmKK!!!S)!!!S)QS% 89QS% 89r'rrr5r6r7
copy_functionr)rrqrr=r+r;r<r/rrSrr)rrrVryrrxs`  @@@r%"test_copytree_custom_copy_functionz/TestCopyTree.test_copytree_custom_copy_functiones	:llnoo$,,.1
"'',,sE*C'
B	a
GGI	S=TA&		s/B<<Cmkfiforequires os.mkfifo()vxworks%fifo requires special path on VxWorksc|tjt	tjj	td}tj|tjj	|d}	tj
|	tjtt|jdtj td	tj td	y#t$r}|jd|zYd}~d}~wwxYw#tj$rR}|jd}|jt|d|d\}}}|jd|z|Yd}~d}~wwxYw#tj td	tj td	wxYw)
Nr+mypipeos.mkfifo(): %sz$shutil.Error should have been raisedrrz`%s` is a named pipeTr)r+rrr;r<rrskipTestrrSTESTFN2failrr#rrr)rr+pipeerrxry	error_msgs        r%test_copytree_named_pipez%TestCopyTree.test_copytree_named_pipews?
		7WW\\&(3FHHV77<<1D
5		$
B0		@AMM&5MM'6#
5

/!344
5<<
K  Va0&,Qi#S)  !7$!>	JJ	
K
MM&5MM'6s[AF5C1D)F1	D:DFDFF.AE;6F;FF8F;c|j}tjj|jd}t	|dfdtj
tjj|dt	|ddfdgfd}t
j||||jtdy)	NrMrNrOrPrQc,j||fyr*r)rxrycopieds  r%_copyz6TestCopyTree.test_copytree_special_func.<locals>._copysMM3*%r'rro)
rr+r;r<rCrrrSrr)rrVrWrrs    @r%test_copytree_special_funcz'TestCopyTree.test_copytree_special_funcs,,.'',,t||~}=GZ(%0
gz23GZ4e<	&	>Va(r'cV|j}tjj|d}t	|dtjj|d}tj
|||fD]j}tjdtjj|dtj|tjj|dltjj|jd}|jttj||tjj|jd}tj||d	
tj|D]*\}}}|jd||jd|,tjj|jd}tj||d	|jdtj|y)
NrNabcdir_a
IDONTEXISTbrokenvalidrMdestination2T)ignore_dangling_symlinksdestination3rd)rr+r;r<rCrrrrrrSwalkassertNotInrra)	rrV
valid_filerrrWrootdirsfiless	         r%test_copytree_dangling_symlinksz,TestCopyTree.test_copytree_dangling_symlinkssw,,.WW\\':6
:u%Wg.
%	=AJJ|RWW\\!X%>?JJz277<<7#;<	=
'',,t||~}=%'7C'',,t||~~>4H!#!1	*D$Xu-MM'5)	*
'',,t||~~>48

j"**W"56r'c	
|j}tjj|jd}tjtjj|dttjj|ddd5	dddtjtjj|dtjj|ddtj||d	|jtjjtjj|d|jdtjtjj|dtjj|jd
}tj||d	|jtjjtjj|d|jdtjtjj|dy#1swYxYw)NrMreal_dirrNr4link_to_dirT)target_is_directoryFrdr)rr+r;r<rr=rrrSrrcrrar)rrVrWs   r%test_copytree_symlink_dirz&TestCopyTree.test_copytree_symlink_dirs,,.'',,t||~}=
gz23
"'',,w
J?
F		


277<<477<<7'+	-	59Wm(LMN

j"**RWW\\'=-Q"RS'',,t||~~>48rww||G]'KLM

j"**RWW\\'=-Q"RS		sI88Jc@|j}|dz}|jtj|dtj
j
|d}t|dtj||}|jdgt	j|y)NdestTr)rrrrr+r;r<rCrSrra)rrVrWrxrvs     r%test_copytree_return_valuez'TestCopyTree.test_copytree_return_valuess,,.F"

w5ggll7E*3
__Wg
.%"**R.1r'c|j}|jtj|dtj
j
|dd}tj
j
|dd}t	j|tj
j
|d}t|dtj||}|jdgt	j|y)NTrtpg
somevendorz1.0pol)rrrrr+r;r<makedirsrCrSrra)rbase_dirrVrWrxrs      r%test_copytree_subdirectoryz'TestCopyTree.test_copytree_subdirectorys<<>

xtD'',,xd3'',,we<
Gggll7E*3
__Wg
.%"**R.1r'N)rrrrYr^rrCrrr~rrrDmockpatchrrrErpr+rFrrGrrrrrrrFr'r%rKrKs(&C2""C#C>?4B(.TC6]]$.%.'$XX.0FG""X__S\\Y.;=7=#H7.)""7#74""T#T&2
2r'rKc^eZdZejdZejee	ddejdZ
ejee	ddejdZejdZ
ejee	dxreed	xr	eed
ddZej d
Zejej ej$dZdZdZejdZejee	dddZejdZej dZdZdZdZdZejdZejee	dddZejdZ ejee	d d!eje!jDd"k(d#d$Z#d%Z$d&Z%eje&xse'xse(d'eje)d(d)Z*d*Z+y+),TestCopyc|j}tjj|d}tjj|d}tjj|d}tjj|d}t	|dt	|dtj
||tj
||tj|tjtjztj|tj|jtj|jtj|jtj|||jtj|jtj|jtj dk7rtj|tjtj|||jtj|jtj|jtj|tjtj|||jtj|jtj|jtj|tjtj|||jtj|jtj|jyy)Nrbarbazquuxrf)rr+r;r<rCrrrrhS_IRWXGriassertNotEqualrrcopymoderrgrr'rxryrnros      r%test_copymode_follow_symlinksz&TestCopy.test_copymode_follow_symlinkss,,.ggll7E*ggll7E*77<</77<<033


3!


3!
dll4<</0
dll#BGGCL00"''#,2F2FGS!--rwws|/C/CD
77d?HHS$,,'OOHc*RWWS\112773<3G3GHHHS$,,'OOC*RWWS\112773<3G3GHHHS$,,'OOHh/RWWS\112773<3G3GHr'razrequires os.lchmodc|j}tjj|d}tjj|d}tjj|d}tjj|d}t	|dt	|dtj
||tj
||tj|tjtjztj|tjtj|tjtjztj|tjtj||d|jtj|j tj|j |j#tj|j tj|j tj|tjtj||d|jtj|j tj|j tj|tjtj||d|jtj|j tj|j yNrrrrFfollow_symlinks)rr+r;r<rCrrrrhrrarirrrrrrrs      r% test_copymode_symlink_to_symlinkz)TestCopy.test_copymode_symlink_to_symlink	s,,.ggll7E*ggll7E*77<</77<<033


3!


3!
dll4<</0
dll#
		(DLL56
		(DLL)(EB(+33(+33	5BGGCL00"''#,2F2FG
		(DLL)#u=--rwws|/C/CD
		(DLL)Xu=--rwws|/C/CDr'z requires os.lchmod to be missingc|j}tjj|d}tjj|d}tjj|d}tjj|d}t	|dt	|dtj
||tj
||t
j||dyr)rr+r;r<rCrrrrs      r%*test_copymode_symlink_to_symlink_wo_lchmodz3TestCopy.test_copymode_symlink_to_symlink_wo_lchmod's,,.ggll7E*ggll7E*77<</77<<033


3!


3!(EBr'cv|j}tjj|d}tjj|d}tjj|d}tjj|d}t	|dtj
|}tj||j|jdz
ft	|d|jtj
|jtj
|jtj||tj||ttdr$tj|t
jttdr4tt
dr$tj|t
jtj |}ttdrQt#j$||d	
|j|j&tj
|j&t#j$||d
tj |}tjtj(vr0dD]+}	|j+t-||	t-||	d
z-ttdr&|j/|j&|j&ttdr2t|dr&|j/|j0|j0t#j$||d
|j3t5tj
|jtj
|jz
dky)NrrrquxgE@rarbrcTrFst_atimest_mtimerrlg?)rr+r;r<rCrutimerrrrrprarirbrcrrcopystatrr"assertLessEqualr!rrlrabs)
rr'rxryrnrorp
src_link_stat
dst_link_statattrs
          r%test_copystat_symlinkszTestCopy.test_copystat_symlinks7s,,.ggll7E*ggll7E*77<</77<</3773<
x((((4/1	23BGGCL112773<3H3HI


3!


3!2x IIh-2z"wt['AKK$..1*
2x OOHhE
 5 5rwws|7K7KL(EB*

88r222.
G$$W]D%A%,]D%AA%EG
G2x ]22M4I4IJ2z"w}j'I]33]5K5KL#u=BGGCL11BGGCL4I4IIJ 	!r'chflags
EOPNOTSUPPENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcv|j}tjj|d}tjj|d}t	|dt	|dd}tj
}	tjtjfD])}||t_tj||+|tjtjzt_|jttj|||t_y#|t_wxYw)Nrfile2xxxc0tddfd
}|S)NTrc_r*)r")r;flagsrerrexs   r%_chflags_raiserzlTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raisernsr'r )rrrs` @r%make_chflags_raiserzSTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiserksB@D
#"r')
rr+r;r<rCrr"rrrrrr )rrrrrold_chflagsrs       r%-test_copystat_handles_harmless_chflags_errorsz6TestCopy.test_copystat_handles_harmless_chflags_errors`s
VW-VW-5% 5% 	#jj	%''6
.05
u-
.-U-=-=

-MNBJgvuE$BJBJs
=B"D++
D8c	
|j}tjj|d
t	
dtjj|d}t	|dtj
|tj
ddtj
ddtj
||jttj
ttj||jtj
dtj|dtj|t	|dttjd		fd}	tj|t_tj
||j!dtj|t_d	d

fd
}	tj|t_
tj
|t_
tjj|d
tjj|d
}t	

t	||tj
ddtj|ddtj"|dtjj|d}tjj|d}t	||t	||tj$
|tj$|||jtj|dd|jtj|ddy#t_wxYw#t_
wxYw)Nrruser.foo42zuser.bar43EPERMc*|dk(r|||fi|y)NrrF)fnamervalr$
orig_setxattros_errors    r%_raise_on_user_fooz3TestCopy.test_copyxattr.<locals>._raise_on_user_foos!z!eT39&9r'TrcV|k(rttjd||S)NzOperation not supportedr)r r"r)rrorig_listxattrrxs  r%
_raise_on_srcz.TestCopy.test_copyxattr.<locals>._raise_on_srcs)|emm-FGG!%IIr'the_originalthe_original_rozuser.the_valuesfiddlyi$the_copythe_copy_ro)rr+r;r<rCr
_copyxattrsetxattrrr`	listxattrgetxattrr8r r"rrrr)rr'ryrrsrcrodstrorr
rrxs       @@@@r%test_copyxattrzTestCopy.test_copyxattrs,,.ggll7E*3ggll7E*3	#s#
CU+
CU+#s#S 12F2<<;L4MNC,C,	.			#35;;0	:
	(KKM,BKc3'MM*bll3&78'BK48	J	*\\N(BLc3')BLggll7N3W&7835% 
C)95
E+Y7
ggll7J/Wm435% S!u%S*:;YGU,<=yI9(BK*BLs
AN!81N1!
N.1
N>cT|j}tjj|d}tjj|d}t	|dtj
||tj|ddtj|dddtjj|d}tjj|d	}t	|dtj
||tj||d|jtj|ddd|jttj|dtj||d|jtj|ddy)
Nrrztrusted.foorrFrrr)
rr+r;r<rCrrrrrrrr )rr'rxrnryros      r%test_copyxattr_symlinksz TestCopy.test_copyxattr_symlinkss&,,.ggll7E*77<</3


3!
C.
HmUEJggll7E*77<</3


3!(HeDX}eTV[\'2;;]C(C?S-8%@r'cd}|j}t||fdtjj	||}|j}|||tjj	||}||fS)NrNr)rrCr+r;r<)rmethodrrrtmpdir2rs       r%
_copy_filezTestCopy._copy_filesgFE?E*VU+,,.ugWe,u~r'c<|jtj\}}|jtj
j
||jt	j|jt	j|jyr*)
r rcopyrr+r;rrrr)rrrs   r%	test_copyzTestCopy.test_copys]v{{3uu-.//1G1GHr'cf|j}tjj|d}tjj|d}tjj|d}t	|dtj
||t
tdr5tj|tjtjztj||d|jtjj||jt!|t!|tj"|tj||d|j%tjj||jtj&|tj&|t
tdrM|jtj(|j*tj(|j*yy)NrrrraTrF)rr+r;r<rCrrprarrhrirr"rrcrr]r8rrjrr)rr'rxryrns     r%test_copy_symlinkszTestCopy.test_copy_symlinkss^,,.ggll7E*ggll7E*77<</3


3!2x IIht|| ;<Hc48,-338
		#Hc59s+,S)2;;x+@A2x RXXh/77XXc]22
4!r'rzrequires os.utimec,|jtj\}}|jtj
j
|t	j|}t	j|}|j|j|jdD]+}|jt||t||dz-ttdr4t|dr'|jt|dt|dyyy)Nrrrrl)
r rcopy2rr+r;rrrrrr!rp)rrr
file1_stat
file2_statrs      r%
test_copy2zTestCopy.test_copy2sv||4uu-.WWU^
WWU^
++Z-?-?@*	@D  T!:!(T!:Q!>
@	@2y!gj*&EWZ<$Z<
>'F!r'c|j}tjj|d}tjj|d}tjj|d}t	|dtj
||t
tdr5tj|tjtjzt
tdr4t
tdr$tj|tjtj|}tj|}tj||d|j!tjj#||j%t'|t'|tj(|tj||d	|j+tjj#||j%tj,|tj,|tj|}tj.tj0vr0d
D]+}|j3t5||t5||dz-t
tdrL|j%|j6|j6|j9|j6|j6t
tdr4t
|dr'|j%|j:|j:yyy)
NrrrrarbrcTrFrrrl)rr+r;r<rCrrprarrhrirbrcrrr'rrcrr]r8rrjrr"rr!rrrl)	rr'rxryrnrprrqrs	         r%test_copy2_symlinkszTestCopy.test_copy2_symlinkss2,,.ggll7E*ggll7E*77<</3


3!2x IIht|| ;<2z"wt['AKK$..1773<*
XsD9,-338
		#XsE:s+,S)2;;x+@A88C=
88r222.
B$$W]D%A%,Xt%<q%@B
B2x ]22H4D4DE 0 0(2B2BC2z"w}j'I]33X5F5FG(J"r'c|j}tjj|d}tjj|d}t	|dtj
|ddt
j|||jtj|dtj|dtj|y)Nrrrr)rr+r;r<rCrrr'rrr8)rr'rxrys    r%test_copy2_xattrzTestCopy.test_copy2_xattr6s,,.ggll7E*ggll7E*3
CU+S#C,C,	.			#r'ctjtjfD]}|j}|j}tj
j
|d}t|d|||}|j|tj
j
|d||tj
j
|d}|j|tj
j
|dy)Nrr)	rr"r'rr+r;r<rCr)rrrVrWrxrs      r%test_copy_return_valuezTestCopy.test_copy_return_valueCs;;-	?BllnGllnG'',,w.CsE"C!BRgu!=>Cgu56BRgu!=>	?r'cB|jtjyr*)_test_copy_dirrr"rs r%
test_copy_dirzTestCopy.test_copy_dirOsFKK(r'cB|jtjyr*)r2rr'r3s r%test_copy2_dirzTestCopy.test_copy2_dirRsFLL)r'c~|j}tjj|d}|j}tjj|d}t	|dt
jdk(rt}nt}|j|||||j|||||||yNrdoes_not_exist/win32)
rr+r;r<rCrrGrIsADirectoryErrorr)r	copy_funcrVsrc_filerryrs       r%r2zTestCopy._test_copy_dirUs,,.77<</||~ggll7$568U#<<7"!C#C#y$8	
#y$4(D!r'c|j}tjj|d}tjj|d}tjj|d}tjj|d}t	|dtj
||t
j||d|jtjj||jtj|tj|t
j|||jtjj|y)NrxryrorrFr)
rr+r;r<rCrrcopyfilerrcrrjr)rr'rxryrors      r%test_copyfile_symlinkszTestCopy.test_copyfile_symlinksgs,,.ggll7E*ggll7E*77<<4ww||GV,3


3h>x01T*BKK,ABc",-r'rzrequires os.linkc8tjttjj	td}tjj	td}	t|dd5}|j
dddd	tj|||jtjtj||t|dd5}|j|jddddtj |tj"td	
y#1swYxYw#t$r}|jd|zYd}~d}~wwxYw#1swYpxYw#tj"td	
wxYw)Nr<r=r5r6r7cheddarz
os.link(): %sr[Tr)r+rrr;r<r=r>rrrrrr
r?rr\r8r)rrxryrVrs     r%'test_dont_copy_file_onto_link_to_itselfz0TestCopy.test_dont_copy_file_onto_link_to_itselfxs'	ggll68,ggll66*	6c31
#Q	"
#
3S!
f22FOOS#Nc31
6Q  95
6IIcNMM&5
#
##
3

o122
3
6
6
MM&5sf#E<1D:E<E">E< !E0E<:E?E<	E-E(#E<(E--E<0E95E<<Fctjttjj	td}tjj	td}	t|dd5}|j
ddddtjd||jtjtj||t|dd5}|j|jddddtj|tjtd	y#1swYxYw#1swYFxYw#tjtd	wxYw)
Nr<r=r5r6r7rBr[Tr)r+rrr;r<r=r>rrrr
r?rr\r8r)rrxryrVs    r%*test_dont_copy_file_onto_symlink_to_itselfz3TestCopy.test_dont_copy_file_onto_symlink_to_itselfs	ggll68,ggll66*	6c31
#Q	"
#

JJx%f22FOOS#Nc31
6Q  95
6IIcNMM&5
#
#
6
6
MM&5s=#E1D9AE!EE9E>EE
EE.rrrrc	tjt	|jtjtjtt|jtjtjtttjty#t$r}|j	d|zYd}~d}~wwxYw#tjtwxYw)Nr)r+rrrrrrSpecialFileErrorr?r__file__r8)rrs  r%test_copyfile_named_pipez!TestCopy.test_copyfile_named_pipes	1IIf	f55 &
Bf55 &6
C
IIf	1MM+a/00	1
IIfs#B&A0C&	C
/CC
C+c|j}|j}tjj|d}tjj|d}t	|dtj||}|jtjj||jt|t|y)Nrr)rr+r;r<rCrr?rrrr])rrVrWdst_filer=rs      r%test_copyfile_return_valuez#TestCopy.test_copyfile_return_values,,.,,.77<</77<</8U#
__Xx
0r*+8,i.ABr'cJ|j}tjj|d}t	|d|jttj|||jttj|||jt|dyr)rr+r;r<rCrr
rr?rrr])rrVr=s   r%test_copyfile_same_filez TestCopy.test_copyfile_same_filesr,,.77<</8U#-(HM%(HE8,e4r'zMOn MACOS, Solaris and Windows the errors are not confusing (though different)zNot valid on AIX, see gh-92670c|j}tjj|d}tjj|d}t	|d|jttj||y)Nrr9)	rr+r;r<rCrrrr?)rrVr=rys    r%test_copyfile_nonexistent_dirz&TestCopy.test_copyfile_nonexistent_dirs[,,.77<</ggll7$568U#+V__hLr'c|j}tjj|d}|j}tjj|d}t	|dt
jdk(rt}nt}|j|tj|||j|tj|||j|tj||yr8)rr+r;r<rCrrGrr;rrr?)rrVr=rryrs      r%test_copyfile_copy_dirzTestCopy.test_copyfile_copy_dirs,,.77<</||~ggll7$568U#<<7"!C#C#v=#v'B#vg>r'N),rrrrrCrrDrErpr+rrFrrr"rskip_unless_xattrrskip_unless_dac_overriderr r#r%r*r,r.r0r4r6r2r@rCrErrGrIrLrNMACOSSOLARISrrrPrRrFr'r%rrs""I#I>XX.0DE""E#FE8X__WR*,NO""
C#P
C""&!#&!PXY/3 53 	2DF%	F%6  =J!=J~""  ''A(!#A.I""4#40XW-/BC>D> "" H# HD  
!

?)*"$"".#. XV,.@A6B6&""6#6(XX.0FGX__S\\Y.;==H	C
5X__U0g03BCX__S:;M<	C
M?r'rceZdZejdZdZd%dZejeje
jdddZejdZ
ejeje
jdd	d
Zejeje
jddd
ZdZejdZejejeddZdZdZdZdZejdZdZdZejdZdZdZdZdZejdZ ejBdZ"ejFejHe%xre&d d!Z'ejd"Z(d#Z)y$)&TestArchivesc|jd\}}|j}tj|tjj|}tjj
tjj|d}tj|5t5tjj|}t|d|d}dddddd|jdz|jtjj||jt!j"|t!j$|d5}|j'|j)gddddtj|5t5t|d|d}dddddd|j||d	z|jtjj||jt!j"|t!j$|d
5}|j'|j)gddddy#1swYxYw#1swYxYw#1swYxYw#1swYxYw#1swYxYw#1swYyxYw)Nrarchivegztar..tar.gzzr:gz)r\z./subz./sub2z./file1z./file2z./sub/file3tar.tarr[)
_create_filesrr+rr;rRr<basenamer
change_cwdno_chdirabspathrrrrTtarfile
is_tarfiler=assertCountEqualgetnames)	rroot_dirrrwork_dir
rel_base_name	base_nametarballtfs	         r%test_make_tarballzTestArchives.test_make_tarballs;"//3(,,.
77??7+RWW%5%5g%>	J


!
!(
+	JX	J
6I"='8SIG	J	J
	
)i"78w/0**734
\\'6
*	Ib!!"++-#H
I	I
!
!(
+	HX	H"=%3GG	H	H)f"45w/0**734
\\'3
'	H2!!"++-#G
H	H	H'	J	J	J	J	I	I	H	H	H	H
	H	Hs`+J	2.I< J	-#J-J/4J#J/#J;<J	J		JJ #J,	(J//J8;Kctj|5}|j}|jt	|cdddS#1swYyxYwr*)rer=rhsortr:)rr;r^rzs    r%_tarinfozTestArchives._tarinfos@
\\$
	 3LLNEJJL<	 	 	 s+AAc|j}tjj||}tj|dt|dfdt|dfdtjtjj|dt|ddfdtjtjj|d|rt|d	fd||fS)
NT)exist_okrrrr`file3sub2outer)rr+r;r<rrCr)rrridists    r%r`zTestArchives._create_filess<<>ww||Hh/
D4(D'?E*D'?E*
dE*+D%)51
dF+,'*E2!!r'r^zNeed the tar command to runch|j\}}tjj|j	d}t
5t
|d||}ddd|j|dz|jtjj|tjj|d}ddd|g}tj||tj|jtjj||j|j||j|t
5t
|d||}ddd|j||dz|jtjj|t
5t
|d||d	
}ddd|j||dz|jtjj|y#1swYxYw#1swYxYw#1swYfxYw)NrZr[r]zarchive2.tarr^z-cfcwdstdoutr_Tdry_run)r`r+r;r<rrcrrrrTr
check_callDEVNULLrr)rrirrlrmtarball2tar_cmds       r%test_tarfile_vs_tarz TestArchives.test_tarfile_vs_tar$s"//1(GGLL;	
	K"9gxJG	K	
)i"78w/077<<.9%:g8%/%7%7	9	
x01w/x1HI	I"9eXxHG	I)f"45w/0	1"9eXx+/1G	1	
)f"45w/09	K	K$	I	I	1	1s$HH2H(HH%(H1c|j\}}|j}tj|tjj|}tjj
tjj|d}tj|5t5tjj|}t|d|}dddddd|jdz|jtjj||jt!j"|t!j$|5}|j'|j)gddddtj|5t5tjj|}t|d||}dddddd|j||dz|jtjj||jt!j"|t!j$|5}|j'|j)gddddy#1swYxYw#1swYxYw#1swY&xYw#1swYxYw#1swYxYw#1swYyxYw)NrZzip.zip)dist/	dist/sub/
dist/sub2/
dist/file1
dist/file2dist/sub/file3rw)rrrrrr)r`rr+rr;rRr<rarrbrcrdrrrrTzipfile
is_zipfileZipFilergnamelist)	rrirrrjrkrlrfzfs	         r%test_make_zipfilezTestArchives.test_make_zipfileHs9"//1(,,.
77??7+RWW%5%5g%>	J


!
!(
+	?X	?
6I}eX>C	?	?	
i&01s+,**3/0
__S
!	R!!"++-
	
!
!(
+	IX	I
6I}eXxHC	I	I	
i&01s+,**3/0
__S
!	DR!!"++-C
D	D	D)	?	?	?	?			I	I	I	I	D	Ds`*J$1-JJ$*#J1*K
1.J>K
+#KJ!	J$$J.1J;>K	K

KKrzNeed the zip command to runc|j\}}tjj|j	d}t
5t
|d||}ddd|j|dz|jtjj|tjj|d}dddd|g}tj||tj|jtjj|tj|5}|j}dddtj|5}|j}	ddd|jt!t!	y#1swYIxYw#1swYixYw#1swYGxYw)NrZrrzarchive2.zipz-qz-rrz)r`r+r;r<rrcrrrrTrrrrrrr`)
rrirrlrZarchive2zip_cmdrrznames2s
          r%test_zipfile_vs_zipz TestArchives.test_zipfile_vs_zipms]"//1(GGLL;	
	I"9eXxHG	I	
)f"45w/077<<.9$nh?g8%/%7%7	9	
x01
__W
%	"KKME	"
__X
&	#"[[]F	#v7'	I	I	"	"	#	#s$F2F+ F7F(+F47GunzipzNeed the unzip command to runc|j\}}tjj|j	d}t
5t
|d||}ddd|j|dz|jtjj|dd|g}tj|5	tj|tjdddy#1swYxYw#tj$r^}|j j#d}d	|vr|j%d
d}|j'|j)||Yd}~d}~wwxYw#1swYyxYw)NrZrrrz-t)stderrreplace)rzunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})r`r+r;r<rrcrrrrTrrbrcheck_outputSTDOUTCalledProcessErroroutputdecoderrformat)	rrirrlrZrrdetailsmsgs	         r%test_unzip_zipfilezTestArchives.test_unzip_zipfiles@"//1(GGLL;	
	I"9eXxHG	I	
)f"45w/0D'*

!
!(
+	4
4''
8I8IJ	4	4	I	I00
4**++9+=+w6MM"<=2		#**S'233
4	4	4s=C,<E,>%C8,C58E)AE$E,$E))E,,E5c|j}tjj|d}|j	t
t|dy)NrZr)rr+r;r<r
ValueErrorr)rrrls   r%test_make_archivezTestArchives.test_make_archives5GGLL3	*lIuEr'ctr1tjdd}tjdd}ndx}}|j\}}tjj|jd}t|d||||}|jtjj|t|d||}|jtjj|t|d||||}|jtjj|t|d||dd}|jtjj|y)	NrrrZrownergroupr^	kjhkjhkjgoihohoh)
UID_GID_SUPPORTgrpgetgrgidpwdgetpwuidr`r+r;r<rrrrT)rrrrirrlrfs       r%test_make_archive_owner_groupz*TestArchives.test_make_archive_owner_groupsLLOA&ELLOA&E""EE!//1(GGLL;	9eXxu!&(s+,9eXx@s+,9eXx!&e5s+,9eXx!,I?s+,r'Requires grp and pwd supportc
|j\}}tjj|j	d}tjdd}tjdd}tj|5t5t|d|d||}dddddd|jtjjtj |}	|j#D]:}|j%|j&d|j%|j(d<	|j+y#1swYxYw#1swYxYw#|j+wxYw)NrZrr[rxr)r`r+r;r<rrrrrrrbrcrrrTrer=
getmembersruidgidr/)	rrirrlrrarchive_namerZmembers	         r%test_tarfile_root_ownerz$TestArchives.test_tarfile_root_owners6"//1(GGLL;	Q"Q"

!
!(
+	BX	B'	7Hf.35BL	B	B
	
|45,,|,	!,,.
0  Q/  Q/
0
MMO	B	B	B	B
MMOs1EE E4A
E+E	EE(+E=cztjfd}td|gd	t5j	t
5t
ddddddddjtjtdy#1swYAxYw#1swYExYw#tdwxYw)Ncjd|j|djtjt	Nrira)rrr+rsRuntimeError)rlrkwcurrent_dirrs   r%archiverz<TestArchives.test_make_archive_cwd_default.<locals>.archiversAZ,Y
3RYY[+6. r'rxxx filera)	r+rsrrcrrrrr)rrrs` @r%test_make_archive_cwd_defaultz*TestArchives.test_make_archive_cwd_defaultsiik	!	 xZ@	-
4&&|44 U34
4
RYY[+6%e,	44
4
4

&e,s:B-B!
BB!,B-B	B!!B*&B--
B:ctjjfd}gfd}td|gd	t	j
td|5j
t5tddddddddjtjjgtdy#1swYUxYw#1swYYxYw#tdwxYw)Ncjd|j|tjj	djtj
t
r)rrr+r;r<rsrrlrrrrirs   r%rz4TestArchives.test_make_archive_cwd.<locals>.archiversPZ,Y[*(MNRYY[(3. r'c8j||yr*r)r;r
orig_chdirs r%_chdirz2TestArchives.test_make_archive_cwd.<locals>._chdirsKKtr'rrchdirrari)r+rsrrr	swap_attrrrrrr)rrrrrrris`  @@@@r%test_make_archive_cwdz"TestArchives.test_make_archive_cwdsiik<<>	!
		 xZ@	-""2w7
G:&&|4G UXFG
G
RYY[+6THk#:;%e,GG
G
G
&e,s=C4#C(9CC(AC4C%	!C((C1-C44
Dctjjfd}d|_t	d|gd	t
5j
t5tddddddddjtjtdy#1swYAxYw#1swYExYw#tdwxYw)Ncj|dj|djtjt)Nrari)rr+rsrrs   r%rzFTestArchives.test_make_archive_cwd_supports_root_dir.<locals>.archiversEY
3R
^X6RYY[+6. r'Trrrar)r+rsrsupports_root_dirrrcrrrrr)rrrris` @@r%'test_make_archive_cwd_supports_root_dirz4TestArchives.test_make_archive_cwd_supports_root_dirsiik<<>	!
&*"xZ@	-
G&&|4G UXFG
G
RYY[+6%e,	GG
G
G

&e,s<CB<!B00B<8,C0B9	5B<<CC
CcB|j}tj|5t5|j	tddd|j
tjjdddddddy#1swYxYw#1swYyxYw)Ntestr^ztest.tar
rrrbrcrrrr+r;rTrris  r%test_make_tarfile_in_curdirz(TestArchives.test_make_tarfile_in_curdirsw<<>

!
!(
+	8X	8\&%8*EOOBGGNN:67	8	8	8	8	8	8#BAB	8B	B	BBcB|j}tj|5t5|j	tddd|j
tjjdddddddy#1swYxYw#1swYyxYw)Nrrztest.ziprrs  r%test_make_zipfile_in_curdirz(TestArchives.test_make_zipfile_in_curdirsy<<>

!
!(
+	8X	8\&%8*EOOBGGNN:67	8	8	8	8	8	8rc|jttdd|jttddd|jttddddgtdddgdtDcgc]\}}|	}}}|j	d|tdtDcgc]\}}|	}}}|j
d|ycc}}wcc}}w)	NrrctSr*xrFr'r%<lambda>z;TestArchives.test_register_archive_format.<locals>.<lambda>&Qr'ctSr*rrFr'r%rz;TestArchives.test_register_archive_format.<locals>.<lambda>(rr')rro)rrorctSr*rrFr'r%rz;TestArchives.test_register_archive_format.<locals>.<lambda>+sqr'r)r	TypeErrorrrrrr)rrgparamsformatss    r%test_register_archive_formatz)TestArchives.test_register_archive_format#s)%<eQG)%<eY	)%<eY!9-	/	 y6(JG,?,ABLD&4BB

eW%!%(,?,ABLD&4BB(CCs8C1Cc	|jtjtddD]}|j	|5|j}tjj|d}|jt5}ttd||ddd|jjjtj|j|jj ||j#tjj%tdt'j(|\}}t
j*||jt,5}ttd||ddd|j|jjtj.|j|jj ||j#tjj%tddddy#1swYxYw#1swYxYw#1swY$xYw)Nr_FTr}nonexistingr^rrrrursubTestrr+r;r<rrrrrr"ENOENTrrrrqr7r/rENOTDIRrr~r'nonexisting_filertmp_fdtmp_files       r%test_make_tarfile_rootdir_nodirz,TestArchives.test_make_tarfile_rootdir_nodir3s	((VHD/:$	BGg.
B,,.#%77<<#G &&'89SR 0@'RS  !3!3U\\B  !6!68HI  6($!@A#+#3#3#@  &&'9:Kb 'JK  !3!3U]]C  !6!6A  6($!@A
B
B	BSSKK
B
B?AIH+CI4H8BI+H50I8I=II	c	|jtjtddD]}|j	|5|j}tjj|d}|jt5}ttd||ddd|jjjtj|j|jj ||j#tjj%tdt'j(|\}}t
j*||jt,5}ttd||ddd|j|jjtj.|j|jj ||j#tjj%tddddy#1swYxYw#1swYxYw#1swY$xYw)Nrrr}rrrrrs       r%test_make_zipfile_rootdir_nodirz,TestArchives.test_make_zipfile_rootdir_nodirHs	
	((VHD/:$	BGg.
B,,.#%77<<#G &&'89SR 0@'RS  !3!3U\\B  !6!68HI  6($!@A#+#3#3#@  &&'9:Kb 'JK  !3!3U]]C  !6!6A  6($!@A
B
B	BSSKK
B
Brc|j|dfi||j|tjfi||j|tfi|y)Nc|Sr*rFr;s r%rz3TestArchives.check_unpack_archive.<locals>.<lambda>bsr')#check_unpack_archive_with_converterrrr)rrr$s   r%check_unpack_archivez!TestArchives.check_unpack_archive`sX000%	1)/	1000GLL	,$*	,000LVLr'c|j\}}t|}|jdtjj|j
d}t||||}|j
}	t||||	fi||jt|	||j
}
t||||
fd|i||jt|
||jtj5t|tfi|ddd|jt5t|tfddi|dddy#1swY@xYw#1swYyxYw)NrwrZrr)r`rer8r+r;r<rrrrrr	ReadErrorrr)rr	converterr$rirexpectedrlrrtmpdir3s           r%rz0TestArchives.check_unpack_archive_with_convertergsV!//1(H% GGLL;		68XF,,.y*Ig,>I&I'*H5,,.y*Ig,>	!v	!	!'*H5


v//
0	89V,77	8


z
*	F9V,EUEfE	F	F	8	8	F	FsE+	E7+E47Fc|j|d|j|dtjdtf5|j|dddy#1swYyxYw)N
fully_trustedfilterdatazPython 3.14)rrcheck_warningsr)rrs  r%check_unpack_tarballz!TestArchives.check_unpack_tarballsb!!&!A!!&!8

+
+ 235	.%%f-	.	.	.sAA&c&|jdy)Nr^rr3s r%test_unpack_archive_tarz$TestArchives.test_unpack_archive_tars!!%(r'c&|jdy)Nr[rr3s r%test_unpack_archive_gztarz&TestArchives.test_unpack_archive_gztar!!'*r'c&|jdy)Nbztarrr3s r%test_unpack_archive_bztarz&TestArchives.test_unpack_archive_bztarrr'z(AIX MAXDATA must be 0x20000000 or largerc&|jdy)Nxztarrr3s r%test_unpack_archive_xztarz&TestArchives.test_unpack_archive_xztars	
!!'*r'c|jd|jt5|jdddddy#1swYyxYw)Nrrr)rrrr3s r%test_unpack_archive_zipz$TestArchives.test_unpack_archive_zipsF!!%(


y
)	<%%eF%;	<	<	<sAA
ct}fd}tdddg|dgtddjttddg|tdtddg|j
ddgd	ftjddgd	fttdjt|y)
Ncrj|dj|dj|dy)Nr	stuff.booxx)r)rextract_dirextrars   r%_booz/TestArchives.test_unpack_registry.<locals>._boos3UA&X{3[$/r'Booz.booz.b2)rrrrBoo2r)	rr	rrr
rrrr)rrrs`  r%test_unpack_registryz!TestArchives.test_unpack_registrys$&	0
	uvuotl^L{D)	
-)?!(D	*	!'vx6

vx,.@.BC%&2.0B0DE	!(+-w7r'N)rx)*rrrr
requires_zlibrorrr`rDrErwhichrrrrrrrrrrrrrrrrrrrr	rrequires_bz2r
requires_lzmarFrrrrrrFr'r%rXrXsW!H!HF "WXe,68181BW"D"DHWXe,688880WXg.8:4:4,F
W--6WX*HIJ*-"-.-&8W88) B*WBB.MF0.)W++W++WX__S--/YZ+[+W<<
8r'rXceZdZejeedddZejedejee	dddZ
y)	TestMisc
disk_usagez)disk_usage not available on this platformc0tjtjj	t
}dD]"}|j
t||t$|j|jd|j|jd|j|jd|j|j|j|j|j|jtjt
y)N)rGusedfreer)rr%r+r;rRrHrr!r
assertGreaterrGr'assertGreaterEqualr()rusagers   r%test_disk_usagezTestMisc.test_disk_usages!!"''//(";<-	=D!!'%"6<	=5;;*5::q)

A.UZZ85;;

3	(#r'rchownzrequires os.chownc^j}tj|tdj	t
5t
jdddj	t5t
jddddj	t5t
jddddj	t5t
jddddj	t5t
jddddtj}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|||||||y#1swYxYw#1swYYxYw#1swY1xYw#1swY
xYw#1swYxYw#t"$rYywxYw)
Nrztesting chown functionznon-existing username)userznon-existing groupname)rspamgQ	@ctj}|j||j|j||jyyr*)r+rrst_uidst_gid)r;rrsrrs    r%check_chownz(TestMisc.test_chown.<locals>.check_chownsH!A  ahh/  ahh/r')rr)NN)rrqrrCrrrr-LookupErrorrr+getuidgetgidrrrrKeyError)rrRrrr5r/rrs`      @r%
test_chownzTestMisc.test_chowns,,.??w/856


z
*	#LL"	#

{
+	ALL(?@	A

{
+	CLL)AB	C

y
)	,LL7+	,

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

LL4/#s+LL$.c*k	#	#	A	A	C	C	,	,	)	)D		sN
K=K,2K9'LL,0L K),K69LLL 	L,+L,N)rrrrDrErprr,rr+r:rFr'r%r$r$stX6DF$F$X*HIXW-/BC:+DJ:+r'r$c$eZdZdZdZdZdZeje	jdk7ddZeje	jdk(dd	Zeje	jdk(dd
Z
eje	jdk(ddZej dZd
ZdZeje	jdk(ddZdZdZdZdZdZdZeje	jdk(ddZeje	jdk(ddZeje	jdk(ddZeje	jdk(ddZy)	TestWhichc|jd|_tj|jdd|_tj|jjtj|j|jjt
jj|jj\|_|_|j|_t
j"|_d|_y)NTmp)rz.Exermrsuffixz.EXE)rtemp_dirrqrr	temp_filer+rrgrS_IXUSRrr/r;rrmfileenv_pathcurdirextr3s r%setUpzTestWhich.setUp	sE2
"44<A<BD	$$dll3,,- ggmmDNN,?,?@$)
iir'ctj|j|j}|j	||j
jyNr)rr rDrmrrBrgrrs  r%
test_basiczTestWhich.test_basics4
\\$))$((
3T^^001r'ctj|jj|j}|j||jjyrJ)rr rBrgrArrKs  r%test_absolute_cmdzTestWhich.test_absolute_cmds<\\$..--DMM
BT^^001r'c&tjj|j\}}tjj	||j
}t
j|5tj||j}|j||dddt
j|j5tj||}|j|dddy#1swY[xYw#1swYyxYwrJ)
r+r;rrmr<rDrrbrr rArassertIsNone)rrtail_dirrelpathrs     r%test_relative_cmdzTestWhich.test_relative_cmd"s WW]]4884('',,x3

!
!x
0	*gDMM:BR)	*
!
!txx
0	"gH5Bb!	"	"		*	*	"	"s-4C;	)D;DDr:ztest is for non win32c$tjj|j}t	j
|j5t
j|j|}|j|dddy#1swYyxYwrJ)
r+r;rRrmrrbrr rDrPrrrs   r%test_cwd_non_win32zTestWhich.test_cwd_non_win32/sc77??488,

!
!txx
0	"diih7Bb!	"	"	"s
3BBztest is for win32c	tjj|j}t	j
|j5tjjdd5tj|j|}|j|tjj|j|jdddtjjdd5tj|j|}|j|ddddddy#1swYnxYw#1swYxYw#1swYyxYw)Nrshutil._win_path_needs_curdirTreturn_valueF)r+r;rRrmrrbrDrrrr rDrr<rFrPrUs   r%test_cwd_win32zTestWhich.test_cwd_win329s77??488,

!
!txx
0	&$$%DSW$X
K\\$))(;  RWW\\$++tyy%IJ
K$$%DSX$Y
&\\$))(;!!"%
&	&	&
K
K
&
&	&	&s=
"E,A&D?)E;3E.E?E	EE	EE cntjtj|j}|dz}|j|dz}|j
|dz}|j
tj|5tjjdd5tjd|}ddd|jtjj!tjj!|dddy#1swY^xYw#1swYyxYw)Nrz	hello.exerrXTrY)rrr+fsdecodermrtouchrrbrDrrrr rr;rd)rrelsewhere_in_path_dirmatch_elsewhere_in_path
exe_in_cwdrs      r%*test_cwd_win32_added_before_all_other_pathz4TestWhich.test_cwd_win32_added_before_all_other_pathGs<<DHH 56 (6 1##%"7+"E%%'+


!
!x
0	O$$%DSW$X
K\\+4IJ
K
RWW__R0"''//*2MN		O	O
K
K	O	Os%"D+*DAD+D(	$D++D4c"tjtj|j}|dz}|dz}|j|j|dz}|dz}|j
|j
tjjt|t|g}tjjtjd|tjjdk(sJy)Nrrz
hello.com.exez	hello.comr;rA)rrr+r]rmrr^pathsepr<rr;rarr F_OKlower)rrrr
pathext_match
path_match	test_paths       r%)test_pathext_match_before_path_full_matchz3TestWhich.test_pathext_match_before_path_full_matchZs<<DHH 56& & 



.
K'
JJOOSYD	$:;	wwi!
57o&	&&r'ctj|jjtj
tj|jjtjr|jdtj|j|jtj}|j|y)Nzcan't set the file read-onlyrd)r+rrBrgrraccessW_OKrrr rDrmrPrKs  r%test_non_matching_modez TestWhich.test_non_matching_modemsu	$$dll3
99T^^(("''2MM89
\\$))$((
A"r'chtjj|j\}}t	j
|5t
j|j|}|j|tjj||jdddy#1swYyxYwrJ)r+r;rrmrrbrr rDrr<)rrrQrs    r%test_relative_pathzTestWhich.test_relative_pathvs{WW]]4884(

!
!x
0	Ddiih7BRh		!BC	D	D	Ds
AB((B1chtjd|j}|j|y)Nzfoo.exer)rr rmrPrKs  r%test_nonexistent_filezTestWhich.test_nonexistent_file|s$
\\)$((
3"r'zpathext check is Windows-onlyctj|jdd|j}|j	||j
jdd|jzy)Nr)rr rDrmrrBrgrGrKs  r%test_pathext_checkingzTestWhich.test_pathext_checkingsL
\\$))CR.txx
8T^^00"5@Ar'ctj5}|j|d<tj|j
}|j
||jjdddy#1swYyxYwNPATH)	rEnvironmentVarGuardrErr rDrrBrgrenvrs   r%test_environ_pathzTestWhich.test_environ_paths^

*
*
,	6--CKdii(BR!4!45	6	6	6sAA33A<c	tj5}d|d<tjj	d|j
d5t
jtd|j
5tj|j
5tj|j}|j|ddddddddddddy#1swY"xYw#1swY&xYw#1swY*xYw#1swYyxYw)Nrry
os.confstrTrZcreatedefpath)rrzrDrrrmrrr+rbrr rDrPr{s   r%test_environ_path_emptyz!TestWhich.test_environ_path_emptys

*
*
,	&CK$$\,0%2
&""2y$((;
&%%dhh/
&\\$)),!!"%
&
&
&	&	&
&
&
&
&
&
&	&	&sS2D&C7- C+
1C	>C+C7DC(
$C++C40C77D	<DDc	tjj|jj}t
jdk(rUtj}t|trtj|}tjj||}tj5}tj|d<tj j#d|j$d5t'j(td|j$5t+j,|j.}|j1|tj2|j$5t+j,|j.}|j5||ddddddddddddy#1swY"xYw#1swY&xYw#1swY*xYw#1swYyxYw)Nr:ryrTrr)r+r;rarBrgrrGrFr9rrr<rrzrerDrrrmrrrr rDrPrbr)rexpected_cwdrFr|rs     r%test_environ_path_cwdzTestWhich.test_environ_path_cwdsgww''(;(;<<<7"YYF,.V,77<<=L
*
*
,	7**CK$$\,0%2	
7""2y$((;	
7\\$)),!!"%))$((37dii0B$$R67	
7	
7	7	777	
7	
7	
7	
7	7	7sV0AG0&GAG&2F9	G G(G9G
>GG
GG	GG&cZtj5}|jddtjjdtd5tjtd|j5tj|j}dddddd|j|jj tjjd|jd5tjtdd5tj|j}dddddd|j||jj dddy#1swYxYw#1swYxYw#1swYXxYw#1swY\xYw#1swYyxYw)NryrT)rrrrr)rrzpoprDrrrrrr+rmrr rDrrBrgr{s   r%test_environ_path_missingz#TestWhich.test_environ_path_missingsX

*
*
,	6GGFD!$$\z,0%2
-""2y$((;
-\\$)),
-
-
R!4!45$$\,0%2
-""2y"5
-\\$)),
-
-
R!4!45	6	6
-
-
-
-
-
-
-
-	6	6sl9F!&E=4 E1E=AF!6F F	2F:.F!1E:6E==F	F!	FFF	F!!F*ctjj|j}t	j
|j5t	j5}|j|d<tj|jd}|j|ddddddy#1swYxYw#1swYyxYw)Nrryr)r+r;rRrmrrbrzrErr rDrP)rrr|rs    r%test_empty_pathzTestWhich.test_empty_paths77??488,

!
!txx
0	"

*
*
,	"03--CKdiib1Bb!		"	"	"	"	"	"s%
B>AB2!B>2B;	7B>>Cctj5}|jddtj|j
}|j
|dddy#1swYyxYwrx)rrzrrr rDrPr{s   r%test_empty_path_no_PATHz!TestWhich.test_empty_path_no_PATHsS

*
*
,	"GGFD!dii(Bb!	"	"	"sAA!!A*ztest specific to WindowscJd}tj|jd|}tj|j
tj|j|jtjj|j
}tjj|d}tj5}||d<tj ||j}|j#||j
dddy#1swYyxYw)N.xyzTmp2r?rPATHEXTr)rqrrrAr+rrgrrCrr/r;raryrrzrr rrrGtemp_filexyzprogramr|rs      r%test_pathextzTestWhich.test_pathexts22t}}:@N
""DLL1**+''""<#4#45''""7+A.

*
*
,	4 C	NgDMM:BR!2!23	4	4	4s

ADD"cd}tj|jd|}|j|jt
jj|j}t
jj|d}tj5}|d|d<tj||j}|j||jdddy#1swYyxYw)Nrrr?r;rr)rqrrrArr/r+r;rargryrrzrr rrs      r%test_pathext_with_empty_strz%TestWhich.test_pathext_with_empty_strs22t}}:@N**+''""<#4#45''""7+A.

*
*
,	4 #uAYC	NgDMM:BR!2!23	4	4	4s
AC..C7cBtj5}|j|d<d|d<tj|jdz}|jd|j
tjdt|dddy#1swYyxYw)Nryz.testrztest_program.testi)rAtest_program)
rrzrArrr^rrr r)rr|rjs   r%%test_pathext_applied_on_files_in_pathz/TestWhich.test_pathext_applied_on_files_in_paths

*
*
,	K--CK$C	NT]]36IIIOOO'V\\.93y>J	K	K	KsA7BBcvtjjdd5}|jt	j
dtj|jd|j|jt	j
dd|jdddtjjdd5}|jt	j
dtj|jddddy#1swYxxYw#1swYyxYw)Nz&_winapi.NeedCurrentDirectoryForExePathTrYdontcarerF)rDrrrr_win_path_needs_curdirr+X_OKassert_called_once_with
reset_mockassert_not_calledr)rneed_curdir_mocks  r%test_win_path_needs_curdirz$TestWhich.test_win_path_needs_curdirs
]]
 
 !IX\
 
]	1aqOOF99*bggNO44Z@'')OOF99*aHI..0	1]]
 
 !IX]
 
^	AbrV:::rwwOP44Z@	A	A	1	1	A	AsB
D#AD/#D,/D8N)rrrrHrLrNrSrDrErrGrVr[rbrkrrHrorqrsrvr}rrrrrrrrrrFr'r%r<r<s2
2"X002"2"X0,.
&.
&X0,.O.O"X0,.&.&"##$D
X08:B:B6	&7,6$""X02LM4N4"X02LM
4N
4 X02LMKNKX02LM
AN
Ar'r<ceZdZdZy)TestWhichBytesctj|tj|j|_tj|j
|_tj|jj|j_tj|j|_tj|j|_	yr*)
r<rHr+rrmrDrBrgrFrGr3s r%rHzTestWhichBytes.setUp	s};;txx(KK		*	 kk$..*=*=>kk$++.;;txx(r'N)rrrrHrFr'r%rr
	s)r'rcneZdZdZdZdZdZdZdZdZ	e
dZe
d	Zd
Z
e
dZdZe
d
ZdZej&ej*j,ddZdZdZdZdZej:e
dZej:e
dZej:e
dZ ej:e
dZ!dZ"dZ#e
dZ$e
dZ%dZ&ejNej&e(edxre(e)dxr	e(e)d d!d"Z*y#)$TestMovecd}|j|_|j|_tjj|j||_tjj|j||_t|jd5}|jddddy#1swYyxYw)Nrr4r0)
rrVrWr+r;r<r=rKr=r>)rrrVs   r%rHzTestMove.setUp	s||~||~T\\8<
T\\8<

$--
&	!
GGG			s!B<<Ccpt|d5}|j}dddtj||t|d5}|j	|jddd|jtjj|y#1swYxYw#1swYDxYwNrZ)	r=r\rmoverrr+r;r)rrxryreal_dstrVcontentss      r%_check_move_filezTestMove._check_move_file"	s
#t_	 vvxH	 C
(D
!	1QXqvvx0	1,-	 	 	1	1sB !B, B),B5c$ttj|}tj|||j|ttj||j
tjj|yr*)	r`r+rarrrrr;r)rrxryrrs     r%_check_move_dirzTestMove._check_move_dir*	s["**S/*C6"**X*>#?@,-r'cf|j|j|j|jyr*)rr=rKr3s r%test_move_filezTestMove.test_move_file0	s dmmT]]DMMJr'cf|j|j|j|jyr*)rr=rWrKr3s r%test_move_file_to_dirzTestMove.test_move_file_to_dir4	s dmmT\\4==Ir'ctj|j}|j||j|j
yr*)rrr=rrWrK)rrxs  r%"test_move_file_to_dir_pathlike_srcz+TestMove.test_move_file_to_dir_pathlike_src8	s.ll4==)c4<<?r'ctj|j}|j|j||j
yr*)rrrWrr=rKrrys  r%"test_move_file_to_dir_pathlike_dstz+TestMove.test_move_file_to_dir_pathlike_dst=	s.ll4<<(dmmS$--@r'c$|jyr*)rr3s r%test_move_file_other_fsz TestMove.test_move_file_other_fsB	s	
r'c$|jyr*)rr3s r%test_move_file_to_dir_other_fsz'TestMove.test_move_file_to_dir_other_fsG	s	
""$r'ctj|j}	|j|j||tj|y#tj|wxYwr6)rqrrrrVrrrrWs  r%
test_move_dirzTestMove.test_move_dirL	sN//dlln5	&  w@W%IW%sAA0c$|jyr*)rr3s r%test_move_dir_other_fszTestMove.test_move_dir_other_fsT	s	
r'c
|j|j|jtjj|jtjj
|jyr*)rrVrWr+r;r<rar3s r%test_move_dir_to_dirzTestMove.test_move_dir_to_dirY	sFT\\4<<GGLLrww'7'7'EF	Hr'c$|jyr*)rr3s r%test_move_dir_to_dir_other_fsz&TestMove.test_move_dir_to_dir_other_fs^	s	
!!#r'c
&|j|jtjjz|j
tjj
|j
tjj|jyr*)rrVr+r;seprWr<rar3s r%test_move_dir_sep_to_dirz!TestMove.test_move_dir_sep_to_dirc	sST\\BGGKK7GGLLrww'7'7'EF	Hr'zrequires os.path.altsepc
&|j|jtjjz|j
tjj
|j
tjj|jyr*)rrVr+r;altseprWr<rar3s r%test_move_dir_altsep_to_dirz$TestMove.test_move_dir_altsep_to_dirg	sST\\BGGNN:DLLGGLLrww'7'7'EF	Hr'ct|jd5	ddd|jtjtj
|j|jy#1swYNxYw)Nr4)r=rKrrrrr=rWr3s r%"test_existing_file_inside_dest_dirz+TestMove.test_existing_file_inside_dest_dirl	sL
$--
&		&,,T]]DLLQ		sA&&A/ctjj|jd}|j	t
jt
j|j|yNr)r+r;r<rVrrrrrs  r%test_dont_move_dir_in_itselfz%TestMove.test_dont_move_dir_in_itselfr	s:ggll4<</&,,T\\3Gr'c	tjt	dD]{\}}tjj	t|}tjj	t|}|jt
j||d|d|d}	tjty#tjtwxYw)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_negativew	s
	%7
ISggll63/ggll63/ 1 1#s ;>A3"H I
I
V$IV$BB66Cc	tjt	dD]{\}}tjj	t|}tjj	t|}|jt
j||d|d|d}	tjty#tjtwxYw)N))rzsrc/dest)rz
srcdir.newrz
) is in src (rr)
r+rrr;r<rrrrrr>s   r%test_destinsrc_false_positivez&TestMove.test_destinsrc_false_positive	s
	%N
DSggll63/ggll63/  !2!23!<9<c!C!D
D
V$IV$rctjj|jd}tj|j
|t
j||j|jtjj|j|jtjj|j
|jyr)r+r;r<rVrr=rrrKrrcsamefilers  r%test_move_file_symlinkzTestMove.test_move_file_symlink	sggll4<</


4==#&C't}}56((

FGr'cd}tjj|j|}tj|j
|t
j||jtjj|j|}|jtjj||jtjj|j
|yr)r+r;r<rVrr=rrrWrrcr)rrry
final_links    r%test_move_file_symlink_to_dirz&TestMove.test_move_file_symlink_to_dir	sggll4<<2


4==#&C&WW\\$,,9
z23((
CDr'cLtjj|jd}tjj|jd}tj||tjj|j
d}t
j|||jtjj||jtjj|tjj|yNrrr)r+r;r<rVrrWrrrrcrrealpathrrxryros    r%test_move_dangling_symlinkz#TestMove.test_move_dangling_symlink	sggll4<</ggll4<</


377<<f5C"x01))#.0@0@0JKr'c<tjj|jd}tjj|jd}tj|tj
||tjj|jd}tj|||jtjj||jtjj||yr)r+r;r<rVrrrWrrrrcrrs    r%test_move_dir_symlinkzTestMove.test_move_dir_symlink	sggll4<</ggll4<</




377<<f5C"x01((h78r'c	tj|j|j}|j	|t
jj|jt
jj|jyr*)	rrr=rWrr+r;r<rarKs  r%test_move_return_valuezTestMove.test_move_return_value	sT
[[
5T\\277+;+;DMM+JK	Mr'ctj|jtjj|jd}|j|tjj|jdyr)rrr=r+r;r<rWrrKs  r% test_move_as_rename_return_valuez)TestMove.test_move_as_rename_return_value	sL
[[T\\5(I
JRWW\\$,,>?r'cgfd}tj|j|j||j	tdy)Nc,j||fyr*rrxrymoveds  r%rz7TestMove.test_move_file_special_function.<locals>._copy	LL#s$r'rr)rrr=rWrrrrrs  @r%test_move_file_special_functionz(TestMove.test_move_file_special_function	s9	%DMM4<<uEUQ'r'cgfd}tjtjj	|j
dtjtjj	|j
dt
j|j
|j||jtdy)Nc,j||fyr*rrs  r%rz6TestMove.test_move_dir_special_function.<locals>._copy	rr'childchild1rr)rrr+r;r<rVrrrWrrrs  @r%test_move_dir_special_functionz'TestMove.test_move_dir_special_function	s{	%##BGGLLw$GH##BGGLLx$HIDLL$,,eDUQ'r'cZ|j|_tjj	tjj|jtjj
|jj}|j|j|	tj|j||jtjj|tj|y#tj|wxYwr*)rrVr+r;r<rRraupperrrrrrbrrs  r%test_move_dir_caseinsensitivez&TestMove.test_move_dir_caseinsensitive	s||~'',,-  .4468	
DLL'2	KKg.OOBGGMM'23HHWBHHWs
/ADD*rbSF_IMMUTABLE	UF_OPAQUEzrequires lchflagsc 	tjttjttj
|j
ttjtt|jttjvtjttjtjtj j#tdtjttj
|j
ttjtt|jttjvtj j%trAtjttjtj&ttj j%trBtjttjtj&tyy#tj j%trAtjttjtj&ttj j%trBtjttjtj&twwxYw)Nr)r+r
TESTFN_SRCrbrrrrrr
TESTFN_DSTrrarrrr;r<rrr3s r%test_move_dir_permission_deniedz(TestMove.test_move_dir_permission_denied	s	-HHZ KK
D$5$56
ov{{J
SZ2::<78
KK
DNN3''Z(IJKK
D$5$56
ov{{J
SZ2::<78ww~~j)J7  ,ww~~j)J7  ,*ww~~j)J7  ,ww~~j)J7  ,*s
E6ICL
N)+rrrrHrrrrrrr2rrrrrrrrDrEr+r;rrrrrrrrCrrrrrrrrrrTrprrrFr'r%rr	s..KJ@
A
%%&H
$$HX)BCHDHRH

%
%""H#H""E#E""L#L""9#9M
@(((("''XZ08$T>:8$T;7,.-	.(
-r'rceZdZGddeZdZejeddZ	ejeddZ
ejeddZy)	TestCopyFilec2eZdZdZdZdZddZdZdZdZ	y)TestCopyFile.FauxFNc ||_||_yr*)_raise_in_exit_suppress_at_exit)r
raise_in_exitsuppress_at_exits   r%__init__zTestCopyFile.Faux.__init__
s"/D%5D"r'cy)NrrF)rr#s  r%r\zTestCopyFile.Faux.read
sr'cd|_yr)_enteredr3s r%	__enter__zTestCopyFile.Faux.__enter__
s	 DMr'cj|||f|_|jrd|_td|jS)NTCannot close)_exited_withr	_raisedr r
)rexc_typeexc_valexc_tbs    r%__exit__zTestCopyFile.Faux.__exit__
s8 ('6 9D""#n--)))r'r)
rrrrrrr
r\rrrFr'r%Fauxr
s%	6		!	*r'rcdd}tjtd|5|jt5tj
ddddddddy#1swYxYw#1swYyxYw)Nc&|dk(rtdJ)NsrcfilezCannot open "srcfile"r)rrAs  r%_openz4TestCopyFile.test_w_source_open_fails.<locals>._open
s9$566r'r=rdestfiler[)rrrrr r?)rrs  r%test_w_source_open_failsz%TestCopyFile.test_w_source_open_fails
sf	


vvu
5	7""7+
7	:6
7	7	7
7
7	7	7s"A*A
A*A'	#A**A3zskipped on macOSc|jdfd	}tjtd|5tjddddd|jj|jjdtu|jjdjdy#1swYrxYw)	Nc6|dk(rS|dk(rtdJ)NrrCannot open "destfile"r)rrArs  r%rz2TestCopyFile.test_w_dest_open_fails.<locals>._open+
s'9$:%677r'r=rrrr)r$r )rrrrr?rrrr rr#)rrrs  @r%test_w_dest_open_failsz#TestCopyFile.test_w_dest_open_fails'
s))+	

vvu
5	3OOIz2	3((),,Q/7:;--a0554	6		3	3sB;;Cc |j|jdd	fd	}tjtd|5tjddddd|jj|jj|jj|jjdtu|jjdjdy#1swYxYw)
NTc$|dk(rS|dk(rSJNrrrFrrArrs  r%rz3TestCopyFile.test_w_dest_close_fails.<locals>._open>
 9$:%r'r=rrrr)rr )rrrrr?rrrrr rr#rrrrs  @@r%test_w_dest_close_failsz$TestCopyFile.test_w_dest_close_fails9
s))+99T?	

vvu
5	3OOIz2	3(()))*((),,Q/7:;--a055*	,
	3	3sDD
cP|jd|jdfd	}tjtd|5|j	t
5tjdddddddd|jj|jj|jj|jjddu|jjy#1swYxYw#1swYxYw)NTc$|dk(rS|dk(rSJr(rFr)s  r%rz5TestCopyFile.test_w_source_close_fails.<locals>._openT
r*r'r=rrrr )rrrrrr r?rrrrrr+s  @@r%test_w_source_close_failsz&TestCopyFile.test_w_source_close_failsN
s))D/99;	

vvu
5	7""7+
7	:6
7	7	
(()))*))*,,Q/478(

7
7	7	7s$DD3DD	DD%N)rrrobjectrr!rDrFrUr%r,r/rFr'r%rr	
sy*v*$7X__U./606"X__U./,0,(X__U./)0)r'rceZdZdZedZedZdZejdZ
dZdZdZ
d	Zej ej$d
k7ddZy
)TestCopyFileObji c8tt|jyr*)rXrFILESIZEclss r%
setUpClasszTestCopyFileObj.setUpClassh
s-r'chtjttjtyr*)rrurrr5s r%
tearDownClasszTestCopyFileObj.tearDownClassl
s !r'c6tjtyr*rrurr3s r%tearDownzTestCopyFileObj.tearDownq
!r'c#Kttd5}ttd5}||fddddddy#1swYxYw#1swYyxYwwNrZr4r=rrr>s   r%	get_fileszTestCopyFileObj.get_filest
V
&$
	!3gt$
!Cj 
!	!	!
!
!	!	!/AA<A	AA	AA
Act|d5}t|d5}|j|j|jddddddy#1swYxYw#1swYyxYwr)r=rr\)rrxryfsrcfdsts     r%assert_files_eqzTestCopyFileObj.assert_files_eqz
sc
#t_	;c4
;D  diik:
;	;	;
;
;	;	;s"
A&/A	A&A#	A&&A/c|j5\}}tj||ddd|jtt
y#1swY$xYwr*)rArcopyfileobjrGrrr>s   r%test_contentzTestCopyFileObj.test_content
sG
^^
	)#ssC(	)VW-	)	)sAAc|j5\}}tj|||jrJ|jrJ	dddy#1swYyxYwr*)rArrIclosedr>s   r%test_file_not_closedz$TestCopyFileObj.test_file_not_closed
sM
^^
	"#ssC(zz!zz!z	"	"	"s6AAc(|j5\}}tj|||j|j	|j
|j|j	|j
dddy#1swYyxYwr*)rArrIrtellr4r>s   r%test_file_offsetz TestCopyFileObj.test_file_offset
sk
^^
	8#ssC(SXXZ7SXXZ7	8	8	8sA.BBrfzWindows onlyctjjd5}tjt
tdddjsJ|j|jdddtjtjd5}|jddddj}|j!t"j$|tjjd5}tj|tddd|j|jdddtjtjd5}	ddd|j}|j!t"j$|tjjd5}tj|tddd|jrJ|j'|ty#1swYxYw#1swYmxYw#1swYxYw#1swYxYw#1swYaxYw)	Nzshutil._copyfileobj_readintorroiFrlsfoor)rDrrrr?rrcalledr	call_argsrqrrr+rsr>rgrrrurG)rmrVrs    r%
test_win_implzTestCopyFileObj.test_win_impl
s]]
 
 !?
@	-AOOFG,	-xx	
Q*O<
(
(RYY[
G	1
GGFO		((%0
]]
 
 !?
@	,AOOE7+	,Q*A.
(
(RYY[
G	1		((%0
]]
 
 !?
@	,AOOE7+	,88UG,3	-	-			,	,
			,	,s;H HH*3H7IHH'*H47IIN)rrrr4classmethodr7r9r<
contextlibcontextmanagerrArGrJrMrPrDrFr+rgrUrFr'r%r2r2e
sH.."""!!
;
.
"8X__RWW_n5-6-r'r2ceZdZdZdZdZdZedZedZ	dZ
ejdZ
d	Zd
ZdZdZd
ZdZdZdZdZy)_ZeroCopyFileTestz#Tests common to all zero-copy APIs.ir'rctt|jttd5}|j	|_t
|j
|jk(sJ	dddy#1swYyxYwr)rXrr4r=r\FILEDATAr)r6rVs  r%r7z_ZeroCopyFileTest.setUpClass
sY-
&$
	51668CLs||$444	5	5	5s:A//A8c6tjtyr*)rrurr5s r%r9z_ZeroCopyFileTest.tearDownClass
s r'c6tjtyr*r;r3s r%r<z_ZeroCopyFileTest.tearDown
r=r'c#Kttd5}ttd5}||fddddddy#1swYxYw#1swYyxYwwr?r@r>s   r%rAz_ZeroCopyFileTest.get_files
rBrCctd)Nzmust be implemented in subclass)r3)rr#r$s   r%zerocopy_funz_ZeroCopyFileTest.zerocopy_fun
s!"CDDr'c|j|j|j|jyr*)r<r9r7rHr3s r%resetz_ZeroCopyFileTest.reset
s*



r'c|j5\}}|j||ddd|jttd|j
|j5\}}tjjd5}tjttdddjrJ	dddy#1swYxYw#1swY-xYw#1swYyxYw)NTr@zshutil.copyfileobj)
rArarr]rr\rDrrrr?rrR)rrxryrTs    r%test_regular_copyz#_ZeroCopyFileTest.test_regular_copy
s
^^
	(#sc3'	(748$--H
^^
	 #s$$%9:
1a0
1xxx	 	 		(	(

1
1	 	 s/C*#C$
C,C$CC!	C$$C-cd|j|j|j5\}}|jtt
f5|j
||dddddd|jttd|jy#1swY=xYw#1swYAxYw)NTre)rrcrArr rrarr]rr\r>s   r%test_same_filez _ZeroCopyFileTest.test_same_file
s

#
^^
	,#s""G->#?@
,!!#s+
,	,	
6$7G
,
,	,	,s#B&BB&B#	B&&B/c tjtj}|j	t
5}t
j|dddd|jjj|y#1swY0xYw)Nrnew)rqrr+rsrrrr?rrr)rrgrs   r%test_non_existent_srcz'_ZeroCopyFileTest.test_non_existent_src
sd299;/


0
1	)ROOD%(	)..5	)	)sBB
ctdztdz|jfd|jfdtd5	dddtd5}td5}|j||dddddd|j	tdd	y#1swYcxYw#1swY;xYw#1swY?xYw)
Nrxryc.tjSr*rru)rvsr%rz3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>
	 0 0 9r'c.tjSr*rn)rwsr%rz3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>
ror'r4rZTrer')rrr=rarr])rrxryrwrvs   @@r%test_empty_filez!_ZeroCopyFileTest.test_empty_file
s5.5.9:9:
'4
 		'4
 	,Cgt$
,!!#s+
,	,	
748#>		
,
,	,	,s0	B-
C,B9?C-B69C	>CCctjj|jt5|jttjttdddy#1swYyxYw)Nr)
rDrr
PATCHPOINTZeroDivisionErrorrrr?rrr3s r%test_unhandled_exceptionz*_ZeroCopyFileTest.test_unhandled_exception
sY
]]
 
 ->!@	@/$oovw
@	@	@	@s/A((A1c|tjj|jt	t
jd5|j5\}}|jt5|j||dddddddddy#1swYxYw#1swYxYw#1swYyxYwNyor)rDrrrsr r"EINVALrArrrar>s   r%test_exception_on_first_callz._ZeroCopyFileTest.test_exception_on_first_calls]]
 
 -4U\\4-H!J	0!
0Zc3&&'890%%c3/0
0	0	000
0
0	0	0s<B2B&.BB&	B2B#B&&B/	+B22B;cHtjj|jt	t
jd5|j5\}}|jt|j||ddddddy#1swYxYw#1swYyxYwrw)
rDrrrsr r"ENOSPCrArrar>s   r%test_filesystem_fullz&_ZeroCopyFileTest.test_filesystem_full
s]]
 
 -4U\\4-H!J	H!
HZc3!!'4+<+<c3G
H	H	H
H
H	H	Hs$B&B;BB	BB!N)rrr__doc__r4r\rsrVr7r9r<rWrXrArarcrfrhrkrqrurzr}rFr'r%rZrZ
s- HHJ55!!"!!
E H6?@0Hr'rZzos.sendfile() not supportedcFeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
Zy)TestZeroCopySendfileos.sendfilec.tj||Sr*)r_fastcopy_sendfile)rrErFs   r%raz!TestZeroCopySendfile.zerocopy_funs((t44r'ctj|j5}ttd5}|jt5|j||dddtj||dddddd|jttd|jy#1swY[xYw#1swYIxYw#1swYMxYw)Nr4Tre)ioBytesIOr\r=rrrrarrIrr]r>s   r%test_non_regular_file_srcz.TestZeroCopySendfile.test_non_regular_file_srcs
ZZ


&	-#gt$
-&&'890%%c3/0""3,
-	-	
748$--H	00
-
-	-	-s:CCB4C8C4B=9CC		CCcttd5}tj5}|j	t
5|j
||dddtj|||jd|j|j|jddddddy#1swYkxYw#1swYxYw#1swYyxYw)NrZr)
r=rrrrrrarrIseekrr\r\r>s   r%test_non_regular_file_dstz.TestZeroCopySendfile.test_non_regular_file_dst#s
&$
	<3
<&&'890%%c3/0""3,  T]];
<	<	<00
<
<	<	<s:CCB9AC(C9C>CC	
CCcfd}gtjtjj	dd|5|j5\}}|j
t5}tj||dddddddddsJ|jjjtjy#1swYRxYw#1swYVxYw#1swYZxYw)Ncnsjd|i|Sttjd)Nrx)rdr r"EBADF)r#r$r
orig_sendfiles  r%rkzDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfile-s3D!$d5f55ekk400r'rT)rr)r+rkrDrrrArr rrrrr"r)rrkrxryrrrs     @@r%test_exception_on_second_callz2TestZeroCopySendfile.test_exception_on_second_call,s	1

]]
 
 t-5!7	8!
8Zc3&&w/82--c378
8	8
++U[[988
8
8	8	8s;C'C'C>CC'CCC$	 C''C0chtjjdt5}|j	5\}}tj|||jsJ	dddddd|jttd|jy#1swY=xYw#1swYAxYw)Nos.fstatrTre)rDrrr rArrrRrr]rr\rrTrxrys    r%test_cant_get_sizez'TestZeroCopySendfile.test_cant_get_size>s]]
 
 
 
A	 Q!
 Zc3))#s3xxx
 	 	
748$--H
 
 	 	 s"B((B B(B%	!B((B1ctjj}d|_tjj	d|5}|j5\}}t
j|||jsJ	dddddd|jttd|jy#1swY=xYw#1swYAxYw)NirrYTre)
rDrMockst_sizerrArrrRrr]rr\rrrTrxrys     r%test_small_chunksz&TestZeroCopySendfile.test_small_chunksHs
}}!!# 
]]
 
 $
 
?	 1!
 Zc3))#s3xxx
 	 	
748$--H
 
 	 	 s$C	(B=C	=C	C		Cctjj}|jdz|_tjjd|5}|j
5\}}tj|||jsJ	dddddd|jttd|jy#1swY=xYw#1swYAxYw)Ni@rrYTre)rDrrr4rrrArrrRrr]rr\rs     r%test_big_chunkz#TestZeroCopySendfile.test_big_chunkUs
}}!!#}}(9:
]]
 
 $
 
?	 1!
 Zc3))#s3xxx
 	 	
748$--H
 
 	 	 s$C%(C
C
C	CCctjjdt5}|j	tt
jtt|jdd}|j|tjjttjtt!tdd|j#tjtdz|j	tt
jttdz|jdd}|j|d	dddy#1swYyxYw)
NrrrrshelloTre3i)rDrrrtrrr?rrrSrr+r;rQrrurCr)rrT	blocksizes   r%test_blocksize_argz'TestZeroCopySendfile.test_blocksize_argbs
]]
 
 ->!@	1CD/$oovw
@Aq)I
Y(?@W%w6OOI,,gm</$oow#

GAq)IY0	1	1	1sDE

EctjsJ	tjj	|j
t
tjd5}|j5\}}|jt5tj||dddddd|jsJ	dddtjrJtjj	|j
5}tjtt |jrJ	ddddt_y#1swYxYw#1swYxYw#1swYxYw#1swY9xYw#dt_wxYw)NrxrT)r_USE_CP_SENDFILErDrrrsr r"ENOTSOCKrArrrrRr?rrrs    r%test_file2file_not_supportedz1TestZeroCopySendfile.test_file2file_not_supportedts)&&&	+$$OO ' =%?
 BC^^%<#s**+<=<11#s;<<xxx

 ...$$T__5
$088#8
$'+F#<<<<
 
 
$
$'+F#smAE,E(ED<E E7AE,:-E (E,<EEE	
EEE, E)%E,,
E9N)
rrrrsrarrrrrrrrrFr'r%rrs8J5I<:$III1$+r'rz
macOS onlyceZdZdZdZy)TestZeroCopyMACOSzposix._fcopyfilecLtj||tjSr*)r_fastcopy_fcopyfileposix_COPYFILE_DATAr>s   r%razTestZeroCopyMACOS.zerocopy_funs))#sE4H4HIIr'N)rrrrsrarFr'r%rrs
#JJr'rc eZdZdZdZdZejeje
jjdeje
edddZejej"dd	Zy
)TestGetTerminalSizectj}|j|jd|j|jdy)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)rrRs  r%test_does_not_crashz'TestGetTerminalSize.test_does_not_crashs:'')a0

A.r'ctj5}d|d<|d=tj}ddd|j	j
dtj5}|d=d|d<tj}ddd|j	|jdy#1swY{xYw#1swY2xYw)z.Check if environment variables have precedence777COLUMNSLINESNi	888ix)rrzrrrrrrr|rRs   r%test_os_environ_firstz)TestGetTerminalSize.test_os_environ_firsts
*
*
,	."C	NG++-D	.	
s+

*
*
,	.I CL++-D	.	
S)	.	.	.	.sB,*B8,B58Cctj5}d|d<d|d<tj}ddd|j	j
d|j	|jdy#1swYBxYw)Nrryyyrr)rrzrrr*rrrs   r%test_bad_environz$TestGetTerminalSize.test_bad_environso

*
*
,	."C	N CL++-D	.	
a0

A.	.	.sA55A>z
not on ttyrzneed os.get_terminal_size()c	tjddgjj}tdt|df}tj5}|d=|d=tj}ddd|j|y#tt
tjf$r|jdYwxYw#1swYQxYw)	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.
        sttyrRzstty invocation failedrrrrN)rrrrrrrrrrrzrrr)rrRrr|rXs     r%test_stty_matchz#TestGetTerminalSize.test_stty_matchs	4**FF+;<CCEKKMDQL#d1g,/

*
*
,	0GI--/F	0
	
6*"?--/	4MM23	4
	0	0s3B%C/C
C
CzWASI has no /dev/nullctj5}|d=|d=tjtdd5tjd}ddd|jjd|j|jdttjdd	
5}tjtd|5tjd}dddddd|j|jd|j|jd
dddy#1swYxYw#1swY^xYw#1swYbxYw#1swYyxYw)Nrr
__stdout__)
)fallbackrrr5r6r7)(rr)
rrzrrrrrrrrr=r+devnull)rr|rRrVs    r%
test_fallbackz!TestGetTerminalSize.test_fallbacks/

*
*
,	-GI""3d;
C//B
CT\\2.TZZ,bjj#8
CA""3a8
C//B
C
C
T\\2.TZZ,!	-	-

C
C
C
C
C
C	-	-sT"ED.AE*ED:E%AE.D7	3E:E?EE	EEN)rrrrrrrDrEr+isattyrrrtrprrFris_wasirrFr'r%rrs/
*/X3>>#8#8#:;\JX%8968+8K+*X__W__&=>-?-r'rceZdZdZdZy)PublicAPITestsz>Ensures that the correct values are exposed in the public API.c|jttdgd}ttdstjdk(r|jd|j
ttjt|y)N__all__)rIr?rrr"r'rSrrrrG	ExecErrorrrrrrr	rrr|r-r rr
statvfsrfr%)	rrprr+rgrdrrr)r
target_apis  r%test_module_all_attributez(PublicAPITests.test_module_all_attributes]	23<
2y!RWW_l+V^^,c*o>r'N)rrrr~rrFr'r%rrs
H?r'r__main__)F)WrD
unittest.mockrrqrrr+os.pathr"r0rrrLrNrWrrrrrrrr	r
rrr
rrewarningsrrImportErrorrrtest.supportrtest.support.os_helperrrrrrrrGrkrUrVrrrrrrrAssertionErrorrcr&r2rCrXr]rer|SUPPORTS_SENDFILErrTestCaserrKrrXr$r<rrrr2r0rZrFrrrrrmainrFr'r%<module>rs

	

	6666"3(
3,
f_

f_
)

,,
!
!'
*	ll2A%O==z"#>?AL	)$
&:01		D68,,D6N`28X..`2D@?x**@?FL88X..L8^M+x**M+`CA(++CAL)Y)o-x**o-dY)8$$Y)xG-h''G-TaHaHH&&(EFs+,h.?.?s+Gs+lUL)J)8+<+<J*JL-(++L-^?X&&?$zHMMOk^E$O
Gs6*J3 
K+K3J>=J>KKKK