python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_shutil.cpython-312.opt-1.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+c\d}t|d}djt|Dcgc]3}tjt
jj5c}}t|d5}|||D]}|j|	dddycc}w#1swYyxYw)zBCreate a test file with an arbitrary size and random text content.c3BK||kDr|||z}||kDr|r|yywr*)totalsteps  r%chunkszwrite_test_file.<locals>.chunksZs3dlJTMEdlKsi r'r4N)
minr<rangerandomchoicestring
ascii_lettersencoder=r>)r;sizerIbufsizeichunkfcsizes        r%write_test_filerWXs$oGHH$W~/mmF$8$89@@B/
0E	
dD	QD'*	E
GGEN	/s8B3 B""B+ct|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%rdrdxs
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
0123456789rYrT)
hasattrr+tempfileNamedTemporaryFilegetcwdrfr>r=filenorjrunlinkr )srcnamedstnamerUsrcdstinfdoutfds       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.
        )prefixrl)rpmkdtempr+rr
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)Nrllinkc(j|yr*rcr#errorss r%onerrorz@TestRmTree.test_rmtree_fails_on_symlink_onerror.<locals>.onerrorMM$r'rrrrn)rr+r;r<rsymlinkassertRaisesr rr
assertTrueexistslexistsassertWarnsDeprecationWarningassertEquallenassertIsrbrrrdir_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)Nrlrc(j|yr*rrs r%onexcz<TestRmTree.test_rmtree_fails_on_symlink_onexc.<locals>.onexcrr'rrrrn)rr+r;r<rrrr rrrrrrrrrbrrrrrrrs     @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)Nrlrc(j|yr*rrs r%rzBTestRmTree.test_rmtree_fails_on_junctions_onerror.<locals>.onerrorrr'rrrrn)rr+r;r<r_winapiCreateJunctionrrrtrr rrrrrrrrrrrbrrs     @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)Nrlrc(j|yr*rrs r%rz>TestRmTree.test_rmtree_fails_on_junctions_onexc.<locals>.onexc%rr'rrrrn)rr+r;r<rrrrrrtrr rrrrrrrrrbrrs     @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)NrlT
ignore_errorststfilec(j|yr*rrs r%rz6TestRmTree.test_rmtree_errors_onerror.<locals>.onerrorVrr'rrnrr)rpmktemprrFileNotFoundErrorrrrCr+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'rrnrr)rprrrrrrrCr+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)Nrnrrr)rr+rtrrrrrr`assertInrr
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)Nrnrr)rr+rtrrrrrr`rrrr9r rs    r%rzTestRmTree.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
dyr
rF)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=rrtrsupports_dir_fdr`supports_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)
rpmkstemprr+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 rrrrwrxs   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	rrrr(rr"r0r3r9r>rArFr'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<rrrdirnamerCrcopytreerisfilerar\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.txtrNexisting_dirzexisting.txtzwill be replacedzhas been replacedT)
dirs_exist_okF)rrrrrCr+rr;r<rRrrSrar\rrFileExistsErrorrTs    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)Nrwrxsubzfile.txtrrzsub/linklchmodlchflags	UF_NODUMPTsymlinksntz\\?\)rr+r;r<rrCrror`rS_IRWXUS_IRWXOrarbrrrRrrbreadlinkrf
startswithrrst_flags)
rr&rUrVsub_dirsrc_linkdst_linksrc_statrWdst_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)NrLrMrNztest.tmprOrP	test_dir2r*subdir2ztest.pyz*.tmpignorezsubdir*cRg}|D]}tjj||}tjj|r(|j	ddk(r|j|jtjj
|ddvs|j||S)Nr~r*z.py)r+r;r<rarrcsplitext)rwnamesrerfr;s     r%_filterz8TestCopyTree.test_copytree_with_exclude.<locals>._filtersC %-!ww||C6GGMM$/ JJL,8JJt,WW--d3B7EBJJt,-Jr')r+r;r<rrrCrrignore_patternsrRrrrrQ)rr<rrUrVpatternsrzs       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)NsourcerOr*rMrPcj|j|tj|tj	t|tt
||D]}j|tgSr*)rcrstrlistrrset)rwryrfinvokationsrs   r%_ignorez?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignore sqs#!!#s+!!%.SZSZ9
1%%dC0
1Ir'rLrur	)r+r;r<rrrrCrrRrpathlibPathrrrDirEntryrr)	rr<rr&rUrrV
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)NrrLizpermissive.txtrNzrestrictive.txtrPirr)rr+r;r<rrrrrrCrprrRrrrr)rr&rUrVrestrictive_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)NrLzka-boom)
rr+r;r<rrrrQPermissionErrorrrrrR)r
mock_patchrUrVs    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)rcrrrr+r;r<)rrrxflagrrws  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)rrprr=r+r;r<r.rrRrr)rrrUrxrrws`  @@@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<rrskipTestrrRTESTFN2failrr#rrr)rr*pipeerrwrx	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)	NrLrMrNrOrPc,j||fyr*r)rwrxcopieds  r%_copyz6TestCopyTree.test_copytree_special_func.<locals>._copysMM3*%r'rrn)
rr+r;r<rCrrrRrr)rrUrVrrs    @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)
NrMabcdir_a
IDONTEXISTbrokenvalidrLdestination2T)ignore_dangling_symlinksdestination3rc)rr+r;r<rCrrrrrrRwalkassertNotInrr`)	rrU
valid_filerrrVrootdirsfiless	         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)NrLreal_dirrMr4link_to_dirT)target_is_directoryFrcr)rr+r;r<rr=rrrRrrbrr`r)rrUrVs   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<rCrRrr`)rrUrVrwrvs     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<makedirsrCrRrr`)rbase_dirrUrVrwrs      r%test_copytree_subdirectoryz'TestCopyTree.test_copytree_subdirectorys<<>

xtD'',,xd3'',,we<
Gggll7E*3
__Wg
.%"**R.1r'N)rrrrXr]rrBrqr}rrrCmockpatchrrrDror+rErrFrrrrrrrFr'r%rJrJs(&C2""C#C>?4B(.TC6]]$.%.'$XX.0FG""X__S\\Y.;=7=#H7.)""7#74""T#T&2
2r'rJc^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)Nrbarbazquuxre)rr+r;r<rCrrrrgS_IRWXGrhassertNotEqualrrcopymoderrfrr&rwrxrmrns      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'r`zrequires 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<rCrrrrgrr`rhrrrrrrrs      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@r`rarbTrFst_atimest_mtimerrkg?)rr+r;r<rCrutimerrrrror`rhrarbrrcopystatrr!assertLessEqualr!rrkrabs)
rr&rwrxrmrnro
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_listxattrrws  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_	listxattrgetxattrr7r r"rrrr)rr&rxrrsrcrodstror
r	r
rws       @@@@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&rwrmrxrns      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)NrMr)rrCr+r;r<)rmethodrrrtmpdir2rs       r%
_copy_filezTestCopy._copy_filesgFE?E*VU+,,.ugWe,u~r'c<|jtj\}}|jtj
j
||jt	j|jt	j|jyr*)
rrcopyrr+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)Nrrrr`TrF)rr+r;r<rCrror`rrgrhrr!rrbrr\r7rrirr)rr&rwrxrms     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)Nrrrrk)
rrcopy2rr+r;rrrrrr!ro)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)
Nrrrr`rarbTrFrrrk)rr+r;r<rCrror`rrgrhrarbrrr&rrbrr\r7rrirr!rr!rrrk)	rr&rwrxrmrorrprs	         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&rrr7)rr&rwrxs    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)rrrUrVrwrs      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*)r1rr&r2s 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<rCrrFrIsADirectoryErrorr)r	copy_funcrUsrc_filerrxrs       r%r1zTestCopy._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)NrwrxrnrrFr)
rr+r;r<rCrrcopyfilerrbrrir)rr&rwrxrnrs      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(): %srZTr)r+rrr;r<r=r>rrrrrr
r>rr[r7r)rrwrxrUrs     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<r5r6r7rArZTr)r+rrr;r<r=r>rrrr
r>rr[r7r)rrwrxrUs    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__r7)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\)rrUrVdst_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\)rrUr<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)Nrr8)	rr+r;r<rCrrrr>)rrUr<rxs    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||yr7)rr+r;r<rCrrFrr:rrr>)rrUr<rrxrs      r%test_copyfile_copy_dirzTestCopy.test_copyfile_copy_dirs,,.77<</||~ggll7$568U#<<7"!C#C#v=#v'B#vg>r'N),rrrrrBrrCrDror+rrErrr"rskip_unless_xattrrskip_unless_dac_overriderrr"r$r)r+r-r/r3r5r1r?rBrDrrFrHrKrMMACOSSOLARISrrrOrQrFr'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.tarrZ)
_create_filesrr+rr;rQr<basenamer
change_cwdno_chdirabspathrrrrStarfile
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*)rdr=rgsortr:)rr;r]rys    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)rrrhdists    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)NrYrZr\zarchive2.tarr]z-cfcwdstdoutr^Tdry_run)r_r+r;r<rrbrrrrSr
check_callDEVNULLrq)rrhrrkrltarball2tar_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)NrYzip.zip)dist/	dist/sub/
dist/sub2/
dist/file1
dist/file2dist/sub/file3rv)rrrrrr)r_rr+rr;rQr<r`rrarbrcrrrrSzipfile
is_zipfileZipFilerfnamelist)	rrhrrrirjrkrezfs	         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)NrYrrzarchive2.zipz-qz-rry)r_r+r;r<rrbrrrrSrr~rrrrr_)
rrhrrkrYarchive2zip_cmdrrynames2s
          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)NrYrrrz-t)stderrreplace)rzunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})r_r+r;r<rrbrrrrSrrarcheck_outputSTDOUTCalledProcessErroroutputdecoderrformat)	rrhrrkrYrrdetailsmsgs	         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)NrYr)rr+r;r<r
ValueErrorr)rrrks   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)	NrrrYrownergroupr]	kjhkjhkjgoihohoh)
UID_GID_SUPPORTgrpgetgrgidpwdgetpwuidr_r+r;r<rrrrS)rrrrhrrkres       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)NrYrrZrwr)r_r+r;r<rrrrrrrarbrrrSrdr=
getmembersruidgidr.)	rrhrrkrrarchive_namerYmembers	         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	Nrhr`)rrr+rrRuntimeError)rkrkwcurrent_dirrs   r%archiverz<TestArchives.test_make_archive_cwd_default.<locals>.archiversAZ,Y
3RYY[+6. r'rxxx filer`)	r+rrrrbrrrrr)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<rrrrkrrrrhrs   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'rrchdirr`rh)r+rrrrr	swap_attrrrrrr)rrrrrrrhs`  @@@@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)Nr`rh)rr+rrrrs   r%rzFTestArchives.test_make_archive_cwd_supports_root_dir.<locals>.archiversEY
3R
^X6RYY[+6. r'Trrr`r)r+rrrsupports_root_dirrrbrrrrr)rrrrhs` @@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
rrrarbrrrr+r;rSrrhs  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')rrn)rrnrctSr*rrFr'r%rz;TestArchives.test_register_archive_format.<locals>.<lambda>+sqr'r)r	TypeErrorrrrrr)rrfparamsformatss    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]rrrrtrsubTestrr+r;r<rrrrrr"ENOENTrrrrpr6r.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)NrvrYrr)r_rdr7r+r;r<rrrrrr	ReadErrorrr)rr	converterr$rhrexpectedrkrrtmpdir3s           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]rr2s r%test_unpack_archive_tarz$TestArchives.test_unpack_archive_tars!!%(r'c&|jdy)NrZrr2s r%test_unpack_archive_gztarz&TestArchives.test_unpack_archive_gztar!!'*r'c&|jdy)Nbztarrr2s r%test_unpack_archive_bztarz&TestArchives.test_unpack_archive_bztarrr'z(AIX MAXDATA must be 0x20000000 or largerc&|jdy)Nxztarrr2s r%test_unpack_archive_xztarz&TestArchives.test_unpack_archive_xztars	
!!'*r'c|jd|jt5|jdddddy#1swYyxYw)Nrrr)rrrr2s 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)rw)*rrrr
requires_zlibrnrqr_rCrDrwhichrrrrrrrrrrrrrrrrrrrrr
requires_bz2r
requires_lzmarErrrrrrFr'r%rWrWsW!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'rWceZdZejeedddZejedejee	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;rQrGrr!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)rrprrCrrrr,LookupErrorrr+getuidgetgidrrrrKeyError)rrQrrr4r.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)rrrrCrDrorr+rr+r9rFr'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.Exerlrsuffixz.EXE)rtemp_dirrprq	temp_filer+rrfrS_IXUSRrr.r;rrlfileenv_pathcurdirextr2s r%setUpzTestWhich.setUp	sE2
"44<A<BD	$$dll3,,- ggmmDNN,?,?@$)
iir'ctj|j|j}|j	||j
jyNr)rrrCrlrrArfrrs  r%
test_basiczTestWhich.test_basics4
\\$))$((
3T^^001r'ctj|jj|j}|j||jjyrI)rrrArfr@rrJs  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#1swYyxYwrI)
r+r;rrlr<rCrrarrr@r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;DDr9ztest is for non win32c$tjj|j}t	j
|j5t
j|j|}|j|dddy#1swYyxYwrI)
r+r;rQrlrrarrrCrOrrrs   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;rQrlrrarCrrrrrCrr<rErOrTs   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.exerrWTrX)rrr+fsdecoderlrtouchrrarCrrrrrr;rc)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++D4cvtjtj|j}|dz}|dz}|j|j|dz}|dz}|j
|j
tjjt|t|g}y)Nrrz
hello.com.exez	hello.com)
rrr+r\rlrr]pathsepr<r)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	$:;	r'ctj|jjtj
tj|jjtjr|jdtj|j|jtj}|j|y)Nzcan't set the file read-only)r;rA)r+rrArfrraccessW_OKrrrrCrlrOrJs  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#1swYyxYwrI)r+r;rrlrrarrrCrr<)rrrPrs    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)rrrlrOrJs  r%test_nonexistent_filezTestWhich.test_nonexistent_file|s$
\\)$((
3"r'zpathext check is Windows-onlyctj|jdd|j}|j	||j
jdd|jzy)Nr)rrrCrlrrArfrFrJs  r%test_pathext_checkingzTestWhich.test_pathext_checkingsL
\\$))CR.txx
8T^^00"5@Ar'ctj5}|j|d<tj|j
}|j
||jjdddy#1swYyxYwNPATH)	rEnvironmentVarGuardrDrrrCrrArfrenvrs   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)Nrru
os.confstrTrYcreatedefpath)rrvrCrrrlrrr+rarrrCrOrws   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)Nr9rur{Tr|r~)r+r;r`rArfrrFrEr9rrr<rrvrcrCrrrlrrrrrCrOrar)rexpected_cwdrErxrs     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)Nrur{T)rr}r~r|r)rrvpoprCrrrrrr+rlrrrCrrArfrws   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)Nrrur)r+r;rQrlrrarvrDrrrCrO)rrrxrs    r%test_empty_pathzTestWhich.test_empty_paths77??488,

!
!txx
0	"

*
*
,	"03--CKdiib1Bb!		"	"	"	"	"	"s%
B>AB2!B>2B;	7B>>Cctj5}|jddtj|j
}|j
|dddy#1swYyxYwrt)rrvrrrrCrOrws   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)rprqr@r+rrfrrBrr.r;r`rxrrvrrrrrFtemp_filexyzprogramrxrs      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)rprqr@rr.r+r;r`rfrxrrvrrrrs      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)Nruz.testrztest_program.testi)rAtest_program)
rrvr@rrr]rrrr)rrxrfs   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.NeedCurrentDirectoryForExePathTrXdontcarerF)rCrrrr_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)rrrrGrKrMrRrCrDrrFrUrZrargrrGrkrmrorrryrrrrrrrrrrFr'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;rGr+rrlrCrArfrErFr2s r%rGzTestWhichBytes.setUp	s};;txx(KK		*	 kk$..*=*=>kk$++.;;txx(r'N)rrrrGrFr'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)Nrr4r/)
rrUrVr+r;r<r<rJr=r>)rrrUs   r%rGzTestMove.setUp	s||~||~T\\8<
T\\8<

$--
&	!
GGG			s!B<<Ccpt|d5}|j}dddtj||t|d5}|j	|jddd|jtjj|y#1swYxYw#1swYDxYwNrY)	r=r[rmoverrr+r;r)rrwrxreal_dstrUcontentss      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+r`rrrrr;r)rrwrxrrs     r%_check_move_dirzTestMove._check_move_dir*	s["**S/*C6"**X*>#?@,-r'cf|j|j|j|jyr*)rr<rJr2s r%test_move_filezTestMove.test_move_file0	s dmmT]]DMMJr'cf|j|j|j|jyr*)rr<rVrJr2s r%test_move_file_to_dirzTestMove.test_move_file_to_dir4	s dmmT\\4==Ir'ctj|j}|j||j|j
yr*)rrr<rrVrJ)rrws  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*)rrrVrr<rJrrxs  r%"test_move_file_to_dir_pathlike_dstz+TestMove.test_move_file_to_dir_pathlike_dst=	s.ll4<<(dmmS$--@r'c$|jyr*)rr2s r%test_move_file_other_fsz TestMove.test_move_file_other_fsB	s	
r'c$|jyr*)rr2s 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|wxYwr5)rprrrrUrrrrVs  r%
test_move_dirzTestMove.test_move_dirL	sN//dlln5	&  w@W%IW%sAA0c$|jyr*)rr2s r%test_move_dir_other_fszTestMove.test_move_dir_other_fsT	s	
r'c
|j|j|jtjj|jtjj
|jyr*)rrUrVr+r;r<r`r2s r%test_move_dir_to_dirzTestMove.test_move_dir_to_dirY	sFT\\4<<GGLLrww'7'7'EF	Hr'c$|jyr*)rr2s 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*)rrUr+r;seprVr<r`r2s 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*)rrUr+r;altseprVr<r`r2s 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=rJrrrrr<rVr2s 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<rUrrrrrs  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<rUrr<rrrJrrbsamefilers  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<rUrr<rrrVrrbr)rrrx
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<rUrrVrrrrbrrealpathrrwrxrns    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<rUrrrVrrrrbrrs    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<rVrr+r;r<r`rJs  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<rVrrJs  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*rrwrxmoveds  r%rz7TestMove.test_move_file_special_function.<locals>._copy	LL#s$r'rr)rrr<rVrrrrrs  @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<rUrrrVrrrs  @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*)rrUr+r;r<rQr`upperrrrrrarrs  r%test_move_dir_caseinsensitivez&TestMove.test_move_dir_caseinsensitive	s||~'',,-  .4468	
DLL'2	KKg.OOBGGMM'23HHWBHHWs
/ADD*ra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_SRCrarrrrrr
TESTFN_DSTrr`rrrr;r<rrr2s 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)+rrrrGrrrrrrr2rrrrrrrrCrDr+r;rrrrrrrrBrrrrrrrrrrSrorrrFr'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
)_enteredr2s 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)
rrrrrrr	r[r
rrFr'r%Fauxr
s%	6		!	*r'rcdd}tjtd|5|jt5tj
ddddddddy#1swYxYw#1swYyxYw)Nc$|dk(rtdy)NsrcfilezCannot open "srcfile"r)rrAs  r%_openz4TestCopyFile.test_w_source_open_fails.<locals>._open
s9$566%r'r=rdestfilerZ)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)	Nc4|dk(rS|dk(rtdy)NrrCannot open "destfile"r)rrArs  r%rz2TestCopyFile.test_w_dest_open_fails.<locals>._open+
s)9$:%677&r'r=rrrr)r r)rrrrr>rrrr 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(rSyNrrrFrrArrs  r%rz3TestCopyFile.test_w_dest_close_fails.<locals>._open>
"9$:%&r'r=rrrr)rr)rrrrr>rrrrr 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(rSyr$rFr%s  r%rz5TestCopyFile.test_w_source_close_fails.<locals>._openT
r&r'r=rrrr)rrrrrr r>rrrrrr'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)rrrobjectrrrCrErTr!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*)rWrFILESIZEclss r%
setUpClasszTestCopyFileObj.setUpClassh
s-r'chtjttjtyr*)rrtrrr1s r%
tearDownClasszTestCopyFileObj.tearDownClassl
s !r'c6tjtyr*rrtrr2s r%tearDownzTestCopyFileObj.tearDownq
!r'c#Kttd5}ttd5}||fddddddy#1swYxYw#1swYyxYwwNrYr4r=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[)rrwrxfsrcfdsts     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*)r=rcopyfileobjrCrrr=s   r%test_contentzTestCopyFileObj.test_content
sG
^^
	)#ssC(	)VW-	)	)sAAc|j5\}}tj||dddy#1swYyxYwr*)r=rrEr=s   r%test_file_not_closedz$TestCopyFileObj.test_file_not_closed
s7
^^
	"#ssC(	"	"	"s4=c(|j5\}}tj|||j|j	|j
|j|j	|j
dddy#1swYyxYwr*)r=rrErtellr0r=s   r%test_file_offsetz TestCopyFileObj.test_file_offset
sk
^^
	8#ssC(SXXZ7SXXZ7	8	8	8sA.BBrezWindows onlycdtjjd5}tjt
tddd|jjdddtjtjd5}|jddddj}|jt j"|tjjd5}tj|tddd|j|jdddtjtjd5}	ddd|j}|jt j"|tjjd5}tj|tddd|j%|ty#1swYxYw#1swY_xYw#1swYxYw#1swYxYw#1swYRxYw)	Nzshutil._copyfileobj_readintorrniFrksfoor)rCrrrr>rrr	call_argsrprqr+rrr>rfrrrtrC)rmrUrs    r%
test_win_implzTestCopyFileObj.test_win_impl
s]]
 
 !?
@	-AOOFG,	-
	
Q*O<
(
(RYY[
G	1
GGFO		((%0
]]
 
 !?
@	,AOOE7+	,Q*A.
(
(RYY[
G	1		((%0
]]
 
 !?
@	,AOOE7+	,	
UG,3	-	-			,	,
			,	,s;G4H7H%H:H&4G>HHH#&H/N)rrrr0classmethodr3r5r8
contextlibcontextmanagerr=rCrFrHrKrCrEr+rfrOrFr'r%r.r.e
sH.."""!!
;
.
"8X__RWW_n5-6-r'r.ceZdZdZdZdZdZedZedZ	dZ
ejdZ
d	Zd
ZdZdZd
ZdZdZdZdZy)_ZeroCopyFileTestz#Tests common to all zero-copy APIs.ir'rctt|jttd5}|j	|_dddy#1swYyxYwr)rWrr0r=r[FILEDATA)r2rUs  r%r3z_ZeroCopyFileTest.setUpClass
s>-
&$
	51668CL	5	5	5sA

Ac6tjtyr*)rrtrr1s r%r5z_ZeroCopyFileTest.tearDownClass
s r'c6tjtyr*r7r2s r%r8z_ZeroCopyFileTest.tearDown
r9r'c#Kttd5}ttd5}||fddddddy#1swYxYw#1swYyxYwwr;r<r=s   r%r=z_ZeroCopyFileTest.get_files
r>r?ctd)Nzmust be implemented in subclass)r2)rr#r$s   r%zerocopy_funz_ZeroCopyFileTest.zerocopy_fun
s!"CDDr'c|j|j|j|jyr*)r8r5r3rGr2s r%resetz_ZeroCopyFileTest.reset
s*



r'c|j5\}}|j||ddd|jttd|j
|j5\}}tjjd5}tjttddddddy#1swYxYw#1swYxYw#1swYyxYw)NTr@zshutil.copyfileobj)r=r[rr\rrVrCrrrr>r)rrwrxrNs    r%test_regular_copyz#_ZeroCopyFileTest.test_regular_copy
s
^^
	(#sc3'	(748$--H
^^
	 #s$$%9:
1a0
1	 	 		(	(

1
1	 	 s/B=*#C
C	,C=C	C	CCcd|j|j|j5\}}|jtt
f5|j
||dddddd|jttd|jy#1swY=xYw#1swYAxYw)NTr_)rr]r=rr rr[rr\rrVr=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)rprr+rrrrrr>rrr)rrfrs   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)
Nrwrxc.tjSr*rrt)rusr%rz3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>
	 0 0 9r'c.tjSr*rh)rvsr%rz3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>
rir'r4rYTr_r')rrr=r[rr\)rrwrxrvrus   @@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)
rCrr
PATCHPOINTZeroDivisionErrorrrr>rrr2s 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)rCrrrmr r"EINVALr=rrr[r=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#1swYyxYwrq)
rCrrrmr r"ENOSPCr=rr[r=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__r0rVrmrPr3r5r8rQrRr=r[r]r`rbrerkrortrwrFr'r%rTrT
s- HHJ55!!"!!
E H6?@0Hr'rTzos.sendfile() not supportedcFeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
Zy)TestZeroCopySendfileos.sendfilec.tj||Sr*)r_fastcopy_sendfile)rrArBs   r%r[z!TestZeroCopySendfile.zerocopy_funs((t44r'ctj|j5}ttd5}|jt5|j||dddtj||dddddd|jttd|jy#1swY[xYw#1swYIxYw#1swYMxYw)Nr4Tr_)ioBytesIOrVr=rrrr[rrErr\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)NrYr)
r=rrrrrr[rrEseekrr[rVr=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||ddddddddd|jjjtjy#1swYNxYw#1swYRxYw#1swYVxYw)Ncnsjd|i|Sttjd)Nrr)rcr r"EBADF)r#r$r
orig_sendfiles  r%rjzDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfile-s3D!$d5f55ekk400r'r{T)r}r)r+rjrCrrr=rr rr}rrr"r)rrjrwrxrrrs     @@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##C,cJtjjdt5}|j	5\}}tj||dddddd|jttd|jy#1swY=xYw#1swYAxYw)Nos.fstatrTr_)rCrrr r=rr}rr\rrVrrNrwrxs    r%test_cant_get_sizez'TestZeroCopySendfile.test_cant_get_size>s]]
 
 
 
A	 Q!
 Zc3))#s3
 	 	
748$--H
 
 	 	 s"BB
B
B	BB"ctjj}d|_tjj	d|5}|j5\}}t
j||dddddd|jttd|jy#1swY=xYw#1swYAxYw)NirrXTr_)rCrMockst_sizerr=rr}rr\rrVrrrNrwrxs     r%test_small_chunksz&TestZeroCopySendfile.test_small_chunksHs
}}!!# 
]]
 
 $
 
?	 1!
 Zc3))#s3
 	 	
748$--H
 
 	 	 s$B:B.2B:.B7	3B::Cctjj}|jdz|_tjjd|5}|j
5\}}tj||dddddd|jttd|jy#1swY=xYw#1swYAxYw)Ni@rrXTr_)
rCrrr0rrr=rr}rr\rrVrs     r%test_big_chunkz#TestZeroCopySendfile.test_big_chunkUs
}}!!#}}(9:
]]
 
 $
 
?	 1!
 Zc3))#s3
 	 	
748$--H
 
 	 	 s$C%B;?C;C	CCctjjdt5}|j	tt
jtt|jdd}|j|tjjttjtt!tdd|j#tjtdz|j	tt
jttdz|jdd}|j|d	dddy#1swYyxYw)
Nr{rrrshelloTr_3i)rCrrrnrrr>rrrMrr+r;getsizerrtrCr)rrN	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

Ect	tjj|jt	t
jd5}|j5\}}|jt5tj||dddddddddtjj|j5}tjttddddt_y#1swYuxYw#1swYyxYw#1swY}xYw#1swY9xYw#dt_wxYw)NrrrT)rCrrrmr r"ENOTSOCKr=rrrr}r>rr_USE_CP_SENDFILErs    r%test_file2file_not_supportedz1TestZeroCopySendfile.test_file2file_not_supportedts
	+$$OO ' =%?
 BC^^%<#s**+<=<11#s;<<
 $$T__5
$0
$'+F#<<<<
 
 
$
$'+F#slAD*DD/C:DD1D*D&D*:D?DD	DDD*D'#D**
D7N)
rrrrmr[rrrrrrrrrFr'r%rzrzs8J5I<:$III1$+r'rzz
macOS onlyceZdZdZdZy)TestZeroCopyMACOSzposix._fcopyfilecLtj||tjSr*)r_fastcopy_fcopyfileposix_COPYFILE_DATAr=s   r%r[zTestZeroCopyMACOS.zerocopy_funs))#sE4H4HIIr'N)rrrrmr[rFr'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)rrQs  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)rrvrrrrrrrxrQs   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)rrvrrr)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.
        sttyrQzstty invocation failedrrrrN)rrrrrrrrrrrvrrr)rrQrrxrWs     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)
rrvrrrrrrrrr=r+devnull)rrxrQrUs    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)rrrrrrrCrDr+isattyrrrsrorrEris_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__)rEr>rrr!r&rRrrrrF	ExecErrorrrrrrr	rrr{r,rrr
statvfsrer$)	rrorr+rfrcrrr)r
target_apis  r%test_module_all_attributez(PublicAPITests.test_module_all_attributes]	23<
2y!RWW_l+V^^,c*o>r'N)rrrrxrrFr'r%rrs
H?r'r__main__)F)WrC
unittest.mockrrprrr+os.pathr"r0rrrLrNrQrrrrrrrr	r
rrr
rrdwarningsrrImportErrorrrtest.supportrtest.support.os_helperrrrrrrrFrjrTrUrrrrrrrAssertionErrorrbr&r2rCrWr\rdr{SUPPORTS_SENDFILErrTestCaserrJrrWr#r;rrrr.r,rTrErzrrrrmainrFr'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