Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.9/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.9/test/__pycache__/test_shutil.cpython-39.opt-2.pyc

a

��g���@sTddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlZddlZzddlZWney�dZYn0ddl m!Z!ddl"m#Z#m$Z$ddl"m%Z%e#dZ&e#dZ'e#dZ(ej)�*d	�Z+ej)�*d
�Z,ej)dd�dkZ-zddl.Z.ddl/Z/d
Z0Wne�y�dZ0Yn0zddl1Z1Wne�y�dZ1Yn0dd�Z2dd�Z3dBdd�Z4dd�Z5dCdd�Z6dd�Z7dd�Z8e8�Z9dd�Z:Gdd �d �Z;Gd!d"�d"e;ej<�Z=Gd#d$�d$e;ej<�Z>Gd%d&�d&e;ej<�Z?Gd'd(�d(e;ej<�Z@Gd)d*�d*e;ej<�ZAGd+d,�d,e;ej<�ZBGd-d.�d.eB�ZCGd/d0�d0e;ej<�ZDGd1d2�d2ej<�ZEGd3d4�d4ej<�ZFGd5d6�d6eG�ZHe�Ie9d7�Gd8d9�d9eHej<��ZJe�Ie+d:�Gd;d<�d<eHej<��ZKGd=d>�d>ej<�ZLGd?d@�d@ej<�ZMeNdAk�rPe�O�dS)D�N)�make_archive�register_archive_format�unregister_archive_format�get_archive_formats�Error�unpack_archive�register_unpack_format�
RegistryError�unregister_unpack_format�get_unpack_formats�
SameFileError�_GiveupOnFastCopy)�support)�TESTFN�FakePath)�warnings_helper�2Z_SRCZ_DST�darwinZsunos�ZaixTFcOstttdd�d��dS)NZEXDEV�zInvalid cross-device link)�OSError�getattr�errno��args�kwargs�r�,/usr/local/lib/python3.9/test/test_shutil.py�_fake_rename6srcst����fdd��}|S)Ncs0z"tj}tt_�|i|��W|t_S|t_0dS�N)�os�renamer)rrZbuiltin_rename��funcrr�wrap;s�zmock_rename.<locals>.wrap)�	functools�wraps)r#r$rr"r�mock_rename:sr'cCsVt|t�rtjj|�}t||r"dnd��}|�|�Wd�n1sH0YdS)N�wb�w)�
isinstance�tupler �path�join�open�write)r,Zcontent�binary�fprrr�
write_fileEs
r2cCsrdd�}t|d�}d�dd�t|�D��}t|d��*}|||�D]}|�|�q@Wd�n1sd0YdS)Ncss&||kr|V||8}q|r"|VdSrr)�total�steprrr�chunksSs

zwrite_test_file.<locals>.chunksi �cSsg|]}t�tj����qSr)�random�choice�string�
ascii_letters�encode)�.0�irrr�
<listcomp>\s�z#write_test_file.<locals>.<listcomp>r()�minr-�ranger.r/)r,�sizer5�bufsize�chunk�fZcsizerrr�write_test_fileQs

�*rEcCsTt|t�rtjj|�}t||r"dnd��}|��Wd�S1sF0YdS)N�rb�r)r*r+r r,r-r.�read)r,r0r1rrr�	read_filecs
rIcCs|g}tt�|��D]d}tj�||�}tj�|�rltj�|�sl|�|d�t|�D]}|�|d|�qRq|�|�q|S)N�/)	�sortedr �listdirr,r-�isdir�islink�append�rlistdir)r,�res�name�p�nrrrrPosrPc
Cs�ttd�sdSd}d}�z�tjdt��dd�� }|j}|�d�Wd�n1sT0Yt|d���}tjdt��dd���}|j}|��}|��}zt�	||dd�WnTt
�yYWd�Wd�W|dur�t�|�|dur�t�|�dS0Wd�Wd�W|du�r0t�|�|du�rDt�|�d	SWd�n1�s^0YWd�n1�s~0YW|du�r�t�|�|du�r�t�|�n*|du�r�t�|�|du�r�t�|�0dS)
N�sendfileFr(��dir�deletes
0123456789rFr�T)
�hasattrr �tempfile�NamedTemporaryFile�getcwdrRr/r.�filenorUrr�unlink)�srcname�dstnamerD�src�dst�infd�outfdrrr�supports_file2file_sendfile{sH
(

�



�F


�


rfcCsJtrBtjdkrBt�dtj�}|�d�d��d}t|d�dkSdSdS)	Ni���z/usr/bin/dump -o %s�
�����i T)�AIX�sys�maxsize�
subprocess�	getoutput�
executable�split�int)ZhdrsZmaxdatarrr�
_maxdataOK�s
rsc@seZdZddd�ZdS)�BaseTestNcCs$tj|t��d�}|�tj|�|S)N)�prefixrW)r[�mkdtempr r]�
addCleanupr�rmtree)�selfru�drrrrv�szBaseTest.mkdtemp)N)�__name__�
__module__�__qualname__rvrrrrrt�srtc@s�eZdZdd�Zejdd��Zejdd��Ze�	e
d�dd	��Ze�	e
d�d
d��Zdd
�Z
e�ejdd�dkd�e�eed�o�e��dkd�dd���Zdd�Zdd�Zdd�Zdd�Zejdd ��Ze�	e
d�d!d"��ZdS)#�
TestRmTreecCsX|��}tj�|d�}t�|�ttj�|d�d�t�|�}|�|t�t	�
|�dS)NZkillmeZsomefile�foo)rvr r,r-�mkdirr2�fsencode�assertIsInstance�bytes�shutilrx)ry�tmpZvictimrrr�test_rmtree_works_on_bytes�s

z%TestRmTree.test_rmtree_works_on_bytescs�|��}tj�|d�}t�|�tj�|d�}t�||�|�ttj	|�|�
tj�|��|�
tj�|��g��fdd�}tj	||d�|�
t��d�|��ddtjj�|�
�dd|�|��dddt�dS)	NrW�linkcs��|�dSr�rO�r��errorsrr�onerror�sz8TestRmTree.test_rmtree_fails_on_symlink.<locals>.onerror�r�rirrY)rvr r,r-r��symlink�assertRaisesrr�rx�
assertTrue�exists�lexists�assertEqual�len�assertIsrNr��ryr�Zdir_r�r�rr�r�test_rmtree_fails_on_symlink�s
z'TestRmTree.test_rmtree_fails_on_symlinkc
Cs�|��}tj�|d�}tj�|d�}tj�|d�}|||fD]}t�|�q<tj�|d�}t|d�tj�|d�}t�||�tj�|d�}t�||�tj�|d�}	t�||	�t�|�|�	tj�
|��|�tj�
|��|�tj�
|��dS�	N�dir1�dir2�dir3�file1r�link1�link2�link3)rvr r,r-r�r2r�r�rx�assertFalser�r��
ryr�r�r�r�rzr�r�r�r�rrr�test_rmtree_works_on_symlinks�s$

z(TestRmTree.test_rmtree_works_on_symlinkszonly relevant on Windowscs�|��}tj�|d�}t�|�tj�|d�}t�||�|�tj	|�|�
ttj
|�|�tj�|��|�tj�|��g��fdd�}tj
||d�|�t��d�|��ddtjj�|��dd|�|��dddt�dS)	NrWr�cs��|�dSrr�r�r�rrr��sz:TestRmTree.test_rmtree_fails_on_junctions.<locals>.onerrorr�rirrY)rvr r,r-r��_winapi�CreateJunctionrwrr_r�rr�rxr�r�r�r�r�r�rNr�r�rr�r�test_rmtree_fails_on_junctions�s 
z)TestRmTree.test_rmtree_fails_on_junctionsc
Cs�|��}tj�|d�}tj�|d�}tj�|d�}|||fD]}t�|�q<tj�|d�}t|d�tj�|d�}t�||�tj�|d�}t�||�tj�|d�}	t�||	�t�	|�|�
tj�|��|�tj�|��|�tj�|��dSr�)
rvr r,r-r�r2r�r�r�rxr�r�r�r�rrr�test_rmtree_works_on_junctions�s$

z)TestRmTree.test_rmtree_works_on_junctionscs�tj|��d�}|�ttj|�tj|dd�|��}t|dfd�tj	�
|d�}|�t��}t�|�Wd�n1s|0Y|tj	�
|d�g}|�|j
j|�|�tj	�|��tj|dd�|�tj	�|��g��fdd�}tj||d	�|�t��d
�|��ddtj�|��dd|�|��dd
dt�|��dd
dj|�|��ddtj�|��dd|�|��dd
dt�|��dd
dj|�dS)
N�rWT��
ignore_errorsZtstfile�z*.*cs��|�dSrr�r�r�rrr�'sz.TestRmTree.test_rmtree_errors.<locals>.onerrorr�rYrri)r[�mktemprvr��FileNotFoundErrorr�rxr2r r,r-�NotADirectoryError�assertIn�	exception�filenamer�r�r�r�r��scandirr��rmdir)ryr��tmpdir�cmZ
possible_argsr�rr�r�test_rmtree_errorss2(zTestRmTree.test_rmtree_errorsN��cygwinz2This test can't be run on Cygwin (issue #1071513).�geteuidrz9This test can't be run reliably as root (issue #1076467).cCs
d|_t�t�|�tjt�tj�td�|_	tj�td�|_
t�|j	�t�|j
�t�
t�j}t�
|j	�j}t�
|j
�j}t
jt
jB}t�|j	|�t�|j
|�t�t|�|�tjt|�|�tj|j	|�|�tj|j
|�tjt|jd�|�|jdd�dS)Nr�a�br�rz1Expected call to onerror function did not happen.)�
errorStater r�rrwr�rxr,r-�child_file_path�child_dir_pathr�create_empty_file�stat�st_mode�S_IREAD�S_IEXEC�chmod�check_args_to_onerrorr�)ryZold_dir_modeZold_child_file_modeZold_child_dir_modeZnew_moderrr�
test_on_error5s*

�zTestRmTree.test_on_errorcCs�|jdkr�|tjur$|�||j�n:|tjur>|�||j�n |�|tj�|�	|t
|jg�|�t|dt
��|jd7_n4|�|tj�|�|t
�|�t|dt
��d|_dS)NrYrrir)r�r r_r�r�r�r�r�rLr�rr��
issubclassr)ryr#�arg�excrrrr�Ts


z TestRmTree.check_args_to_onerrorcsRzDtj��fdd�}|t_t�t�ttdfd�t�t�W�t_n�t_0dS)Ncs|tkrt��n�|�SdSr)rr)�fnrr�Z
orig_lstatrr�raiserrszFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiserr)r �lstatr�rr2r�rx)ryr�rr�r�+test_rmtree_does_not_choke_on_failing_lstatos
z6TestRmTree.test_rmtree_does_not_choke_on_failing_lstatcs�tjtjtjtjhtjko0tjtjvo0tjtjv}|r�|�	t
j�|�	t
jj
�|��}tj�|d�}t�|�zBt
j}Gdd�dt���fdd�}|t
_|��t
j|�W|t
_q�|t
_0n|�t
j�|�t
jj
�dS)Nr�c@seZdZdS)zHTestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)r{r|r}rrrr�Called�r6r�cs��dSrrr�r�rr�_raiser�szITestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser)r r.r�r_r��supports_dir_fdrL�supports_fd�supports_follow_symlinksr�r��_use_fd_functionsrx�avoids_symlink_attacksrvr,r-r��_rmtree_safe_fd�	Exceptionr�r�)ryr��tmp_dirrzZreal_rmtreer�rr�r�-test_rmtree_uses_safe_fd_version_if_availables,�
�
�
z8TestRmTree.test_rmtree_uses_safe_fd_version_if_availablecCs<tj|��d�\}}t�|�|�ttj|�t�	|�dS�Nr�)
r[�mkstemprvr �closer�r�r�rx�remove)ry�handler,rrr�test_rmtree_dont_delete_file�s
z'TestRmTree.test_rmtree_dont_delete_filec
Cs�t�t�zbtj�td�}tj�td�}t�|�t�||�|�ttj	|�tj	|dd�Wtj	tdd�ntj	tdd�0dS)N�cheese�shopTr�)
r r�rr,r-r�r�rr�rx�ryrbrcrrr�test_rmtree_on_symlink�s

z!TestRmTree.test_rmtree_on_symlinkc
Cs�t�t�zztj�td�}tj�td�}t�|�ttj�|d�d���t�||�|�	t
tj|�tj|dd�Wtjtdd�ntjtdd�0dS)Nr�r�Zspamr(Tr�)
r r�rr,r-r.r�r�r�r�rr�rxr�rrr�test_rmtree_on_junction�s

z"TestRmTree.test_rmtree_on_junction)r{r|r}r�r�skip_unless_symlinkr�r��unittest�
skipUnlessr�r�r�r��skipIfrl�platformrZr r�r�r�r�r�r�r�r�rrrrr~�s2	





$��

r~c@s�eZdZdd�Zdd�Zejdd��Zdd�Zd	d
�Z	dd�Z
ej�
d
�dd��Zdd�Ze�eed�d�ejdd���Zdd�Zejdd��Zejdd��Zdd�Zdd�Zd S)!�TestCopyTreec	Cs|��}tj�|��d�}|�tj|�|�tjtj�|��t|dfd�t�	tj�|d��t|ddfd�t�
||�|�tj�tj�|d���|�tj�
tj�|d���|�tj�tj�|dd���t|df�}|�|d�t|ddf�}|�|d�dS)N�destination�test.txt�123�test_dir�456)rvr r,r-rwr�rx�dirnamer2r��copytreer��isfilerMrIr��ry�src_dir�dst_dir�actualrrr�test_copytree_simple�s"�z!TestCopyTree.test_copytree_simplec	CsZ|��}|��}|�tj|�|�tj|�t|dfd�t�tj�|d��t�tj�|d��t|ddfd�t|ddfd�tj	||dd�|�
tj�tj�|d���|�
tj�tj�|d���|�
tj�tj�|dd���t
|df�}|�|d�t
|ddf�}|�|d�|�t�� tj	||d	d�Wd�n1�sL0YdS)
Nznonexisting.txtr�Zexisting_dirzexisting.txtzwill be replacedzhas been replacedT)�
dirs_exist_okF)rvrwr�rxr2r r�r,r-r�r�r�rMrIr�r��FileExistsErrorr�rrr�test_copytree_dirs_exist_ok�s*�z(TestCopyTree.test_copytree_dirs_exist_okc
	Cs�|��}tj�|d�}tj�|d�}tj�|d�}t�|�t�|�t|dfd�tj�|d�}tj�|d�}t�tj�|d�|�ttd�r�t�|t	j
t	jB�ttd	�r�tt	d
�r�t�|t	j
�t�|�}tj||dd�|�tj�tj�|dd���t�tj�|dd��}tjd
k�r8|�d��r8|dd�}|�|tj�|d��t�|�}	ttd��rt|�|	j|j�ttd	��r�|�|	j|j�dS)Nrbrc�subzfile.txtrr�zsub/link�lchmod�lchflags�	UF_NODUMPT��symlinks�ntz\\?\�)rvr r,r-r�r2r�rZr�r��S_IRWXU�S_IRWXOr�r�r�r�r�r�rN�readlinkrR�
startswithr�r��st_flags)
ryr�r�r�Zsub_dir�src_link�dst_link�src_statr��dst_statrrr�test_copytree_symlinks�s8

�


z#TestCopyTree.test_copytree_symlinkscCs^tjj}tjj}|��}�z ||��d�}t|dfd�t|dfd�t�||d��t|ddfd�t�||d��t|ddfd�t�||dd��t�||dd	��t|dddfd�t|dd	d
fd�zft�dd�}tj	|||d�|�
|||d���|�|||d���|�|||d���Wt�|�nt�|�0zjt�dd
�}tj	|||d�|�|||d���|�|||dd	���|�|||dd���Wt�|�nt�|�0zTdd�}tj	|||d�|�|||dd	d
���|�|||dd���Wt�|�nt�|�0Wt�|�t�tj�
|��nt�|�t�tj�
|��0dS)Nr�r�r�ztest.tmpr�r�Z	test_dir2�subdirZsubdir2ztest.pyz*.tmp��ignorezsubdir*cSsfg}|D]X}tj�||�}tj�|�rB|��ddkrB|�|�qtj�|�ddvr|�|�q|S)Nrhr
z.py)r r,r-rMrqrO�splitext)rb�namesrQrRr,rrr�_filter1s�z8TestCopyTree.test_copytree_with_exclude.<locals>._filter)r r,r-r�rvr2r�r��ignore_patternsr�r�r�rxr�)ryr-r�r�r��patternsrrrr�test_copytree_with_exclude	sR�
�
z'TestCopyTree.test_copytree_with_excludecsVtjj}tjj}���}||d�}t�||��t�||d��t�tj�|dd��t|dddfd�g���fdd�}|���d�}tj|||d	���	|||ddd���|���d�}tjt
�|�||d	���	|||ddd���|���d�}tt�
|��d
}��|tj�tj|||d	���	|||ddd�����t��d�dS)N�sourcer�r
r�r�csT��|���|t���|t���t|�tt|���|D]}��|t�q>gSr)rOr��str�listr�r��set)rbrrR�Zinvokationsryrr�_ignoreXs
z?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignorer�rr�	)r r,r-r�rvr�r2r�r�r��pathlib�Pathrr�r��DirEntryr�r�)ryr-r�r�r�rr�Z
src_dir_entryrrr�!test_copytree_arg_types_of_ignoreJs8
	���z.TestCopyTree.test_copytree_arg_types_of_ignorec	Csx|��}tj�|d�}t�|�tj�|d�}|�tj|�t�|d�t	|dfd�t�tj�|d�d�t	|dfd�t�tj�|d�d�t
j|d	�}|�tj|�t�|d�t�||�|�
t�|�jt�|�j�|�
t�tj�|d��jt�tj�|d��j�|�
t�tj�|d��jt�tj�|d��j�tj�|tj�|�d
�}|�
t�|�jt�|�j�dS)Nrr�i�zpermissive.txtr�zrestrictive.txtr�i�r�ri)rvr r,r-r�rwr�rxr�r2r[rr�r�r�r�rq)ryr�r�r�Zrestrictive_subdirZrestrictive_subdir_dstrrr�!test_copytree_retains_permissionsts6
���
�z.TestCopyTree.test_copytree_retains_permissionszos.chmodcCs�|��}tj�|��d�}|�tj|�|�tjtj�|��td�|_	|�
tj��t�||�Wd�n1sv0YdS)Nr�zka-boom)
rvr r,r-rwr�rxr��PermissionError�side_effectr�rr�)ryZ
mock_patchr�r�rrr�test_copytree_winerror�s
z#TestCopyTree.test_copytree_winerrorcs�����fdd�}g�����tj���d��ttj��d�d��}|��Wd�n1s`0Ytj	��|d���
t��d�dS)NcsR��d���|t���|t���|tj��d����|tj��d��dS�Nr)rOr�rr�r r,r-)r�r��rc�flagryrbrr�custom_cpfun�s

zETestCopyTree.test_copytree_custom_copy_function.<locals>.custom_cpfunr�rr)��
copy_functionri)rvr[r�r.r r,r-r�r�r�r�r�)ryr(rDrr&r�"test_copytree_custom_copy_function�s&z/TestCopyTree.test_copytree_custom_copy_function�mkfifo�requires os.mkfifo()c
Cs2t�t��ztj�td�}t�|�tj�|d�}zt�|�Wn2tyt}z|�d|�WYd}~n
d}~00zt�	tt
�Wn^tjy�}zD|jd}|�
t|�d�|d\}}}|�
d||�WYd}~nd}~00|�d�Wtjtdd	�tjt
dd	�ntjtdd	�tjt
dd	�0dS)
Nr
Zmypipe�os.mkfifo(): %srriz`%s` is a named pipez$shutil.Error should have been raisedTr�)r r�rr,r-r,r"�skipTestr�r��TESTFN2rrr�r��failrx)ryr
�pipe�er�rbrcZ	error_msgrrr�test_copytree_named_pipe�s*

$
&�z%TestCopyTree.test_copytree_named_pipecs�|��}tj�|��d�}t|dfd�t�tj�|d��t|ddfd�g��fdd�}tj|||d�|�t	��d	�dS)
Nr�r�r�r�r�cs��||f�dSrr��rbrc�Zcopiedrr�_copy�sz6TestCopyTree.test_copytree_special_func.<locals>._copyr)rY)
rvr r,r-r2r�r�r�r�r�)ryr�r�r7rr6r�test_copytree_special_func�sz'TestCopyTree.test_copytree_special_funccCs�|��}tj�|��d�}t�dtj�|d��t�tj�|d��t|ddfd�|�tt	j
||�tj�|��d�}t	j
||dd�|�dt�|��tj�|��d	�}t	j
||dd
�|�
dt�|��dS)Nr�Z
IDONTEXISTr�r�r��destination2T)�ignore_dangling_symlinksZdestination3r�)rvr r,r-r�r�r2r�rr�r��assertNotInrLr��ryr�r�rrr�test_copytree_dangling_symlinks�sz,TestCopyTree.test_copytree_dangling_symlinksc	Cs.|��}tj�|��d�}t�tj�|d��ttj�|dd�d��Wd�n1sZ0Ytjtj�|d�tj�|d�dd�tj||dd	�|�	tj�
tj�|d���|�dt�tj�|d���tj�|��d
�}tj||dd	�|�
tj�
tj�|d���|�dt�tj�|d���dS)Nr�Zreal_dirr�r)Zlink_to_dirT)�target_is_directoryFr�r9)rvr r,r-r�r.r�r�r�r�rNr�rLr�r<rrr�test_copytree_symlink_dir�s �z&TestCopyTree.test_copytree_symlink_dircCs\|��}|d}|�tj|d�tj�|d�}t|d�t�||�}|�	dgt�
|��dS)N�destTr)rvrwr�rxr r,r-r2r�r�rL)ryr�r�rb�rvrrr�test_copytree_return_value�s
z'TestCopyTree.test_copytree_return_valuecCs�|��}|jtj|dd�tj�|dd�}tj�|dd�}t�|�tj�|d�}t|d�t�	||�}|�
dgt�|��dS)NTr��tZpgZ
somevendorz1.0Zpol)rvrwr�rxr r,r-�makedirsr2r�r�rL)ry�base_dirr�r�rbrArrr�test_copytree_subdirectorys

z'TestCopyTree.test_copytree_subdirectoryN)r{r|r}r�r�rr�rrr r!r��mock�patchr$r+r�rZr r4r8r=r?rBrFrrrrr��s(
A*





r�c@s�eZdZejdd��Ze�ee	d�d�ejdd���Z
e�ee	d�d�ejdd	���Zejd
d��Z
e�ee	d�o�eed
�o�eed�d�dd��Zejdd��Zejeje�ee	d�o�e	��dkd�dd����Zdd�Zdd�Zejdd��Ze�ee	d�d �d!d"��Zejd#d$��Zejd%d&��Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zejd/d0��Ze�ee	d1�d2�d3d4��Zejd5d6��Z e�ee	d7�d8�d9d:��Z!d;d<�Z"d=d>�Z#e�e$�p�e%�p�e&d?�d@dA��Z'dBdC�Z(dDS)E�TestCopycCs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t|d�t�||�t�||�t�|tjtj	B�t�|tj
�|�t�|�jt�|�j�t
�||�|�t�|�jt�|�j�tjdk�r�t�|tj
�t
�||�|�t�|�jt�|�j�t�|tj
�t
�||�|�t�|�jt�|�j�t�|tj
�t
�||�|�t�|�jt�|�j�dS)Nr�bar�baz�quuxr)rvr r,r-r2r�r�r�r�S_IRWXGr�assertNotEqualr�r��copymoder�rR�ryr�rbrcrr	rrr�test_copymode_follow_symlinkss0

z&TestCopy.test_copymode_follow_symlinksr�zrequires os.lchmodcCsp|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t|d�t�||�t�||�t�|tjtj	B�t�|tj�t�
|tjtj	B�t�
|tj�tj
||dd�|�t�|�jt�|�j�|�t�|�jt�|�j�t�
|tj�tj
||dd�|�t�|�jt�|�j�t�
|tj�tj
||dd�|�t�|�jt�|�j�dS�NrrJrKrLF��follow_symlinks)rvr r,r-r2r�r�r�rrMr�rr�rOr�r�r�rNrPrrr� test_copymode_symlink_to_symlink8s0


�z)TestCopy.test_copymode_symlink_to_symlinkz requires os.lchmod to be missingcCs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t|d�t�||�t�||�tj||dd�dSrR)rvr r,r-r2r�r�rOrPrrr�*test_copymode_symlink_to_symlink_wo_lchmodVs

z3TestCopy.test_copymode_symlink_to_symlink_wo_lchmodc
Cs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t�|�}t�||j|jdf�t|d�|�	t�|�jt�|�j�t�
||�t�
||�ttd�r�t�|tj
�ttd�r�ttd�r�t�|tj�t�|�}ttd��r tj||d	d
�|�	|jt�|�j�tj||dd
�t�|�}tjtjv�rpdD]"}	|�t||	�t||	�d
��qLttd��r�|�|j|j�ttd��r�t|d��r�|�|j|j�tj||dd
�|�tt�|�jt�|�j�dk�dS)NrrJrK�quxgE@r�r�r�TrSF��st_atime�st_mtimerirg�������?)rvr r,r-r2r��utimerYrZrNr�rZr�rr�r�r�r��copystatr�r��assertLessEqualrr�rr��abs)
ryr�rbrcrr	r
�
src_link_statZ
dst_link_stat�attrrrr�test_copystat_symlinksfsJ


�



��zTestCopy.test_copystat_symlinks�chflags�
EOPNOTSUPP�ENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcCs�|��}tj�|d�}tj�|d�}t|d�t|d�dd�}tj}zVtjtjfD]}||�t_t	�
||�qT|tjtj�t_|�tt	j
||�W|t_n|t_0dS)Nr��file2�xxxcst��dd���fdd�
}|S)NTrScs��_��dSr)r)r,�flagsrT��err�exrr�_chflags_raiser�szlTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser�r)rirkrrhr�make_chflags_raiser�szSTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser)
rvr r,r-r2rbrrcrdr�r\r�r)ryr�r�rermZold_chflagsrirrr�-test_copystat_handles_harmless_chflags_errors�s


z6TestCopy.test_copystat_handles_harmless_chflags_errorscs |��}tj�|d��t�d�tj�|d�}t|d�t��|�t��dd�t��dd�t��|�|�t	t�
���t	t�
|���|�t��d�t�|d��t�|�t|d�t
tjd����fdd	�}z4tj�|t_t��|�|�dt�
|��W�t_n�t_0d
d���fdd
�
}z"tj
�|t_
t��|�W�t_
n�t_
0tj�|d��tj�|d�}t���t||�t��dd�t�|dd�t�|d�tj�|d�}tj�|d�}t||�t||�t��|�t�||�|�t�|d�d�|�t�|d�d�dS)NrrJ�user.foo�42zuser.bar�43�EPERMcs&|dkr��n�|||fi|��dS)Nror)�fnamer`�valr)�
orig_setxattr�os_errorrr�_raise_on_user_foo�sz3TestCopy.test_copyxattr.<locals>._raise_on_user_fooTrScs |�krttjd���||d�S)NzOperation not supportedrS)rrrd)rsrT)�orig_listxattrrbrr�
_raise_on_src�sz.TestCopy.test_copyxattr.<locals>._raise_on_srcZthe_originalZthe_original_rozuser.the_valuesfiddlyi$Zthe_copyZthe_copy_ro)rvr r,r-r2r��
_copyxattr�setxattrr�rK�	listxattr�getxattrr�rrrrr�r�r\)ryr�rcrwryZsrcroZdstror)rxrurvrbr�test_copyxattr�sZ

 

�





zTestCopy.test_copyxattrr�r�root privileges requiredcCs�|��}tj�|d�}tj�|d�}t|d�t�||�t�|dd�tj|dddd�tj�|d�}tj�|d	�}t|d�t�||�tj||dd�|�	tj
|ddd�d�|�ttj
|d�tj||dd�|�	t�
|d�d�dS)
NrrKztrusted.foorprqFrSrJrW)
rvr r,r-r2r�r{r�rzr�r}r�r)ryr�rbrrcr	rrr�test_copyxattr_symlinks�s 

z TestCopy.test_copyxattr_symlinkscCsPd}|��}t||fd�tj�||�}|��}|||�tj�||�}||fS)Nr�rf)rvr2r r,r-)ry�methodrsr�r��tmpdir2rerrr�
_copy_file	s
zTestCopy._copy_filecCsB|�tj�\}}|�tj�|��|�t�|�j	t�|�j	�dSr)
r�r��copyr�r r,r�r�r�r�)ryr�rerrr�	test_copyszTestCopy.test_copycCs|��}tj�|d�}tj�|d�}tj�|d�}t|d�t�||�ttd�rft�|tj	tj
B�tj||dd�|�
tj�|��|�t|�t|��t�|�tj||dd�|�tj�|��|�t�|�t�|��ttd��r|�t�|�jt�|�j�dS)NrrJrKr�TrSF)rvr r,r-r2r�rZr�r�rrr�r�r�rNr�rIr�r�rr�r�)ryr�rbrcrrrr�test_copy_symlinkss&



�zTestCopy.test_copy_symlinksr[zrequires os.utimecCs�|�tj�\}}|�tj�|��t�|�}t�|�}|�|j	|j	�dD] }|�
t||�t||�d�qJttd�r�t|d�r�|�t|d�t|d��dS)NrXrirbr)
r�r��copy2r�r r,r�r�r�r�r]rrZ)ryr�reZ
file1_statZ
file2_statr`rrr�
test_copy22s

��zTestCopy.test_copy2c	Cs�|��}tj�|d�}tj�|d�}tj�|d�}t|d�t�||�ttd�rft�|tj	tj
B�ttd�r�ttd�r�t�|tj�t�|�}t�
|�}tj||dd�|�tj�|��|�t|�t|��t�|�tj||d	d�|�tj�|��|�t�|�t�|��t�
|�}tjtjv�rVd
D]"}|�t||�t||�d��q2ttd��r�|�|j|j�|�|j|j�ttd��r�t|d��r�|�|j|j�dS)
NrrJrKr�r�r�TrSFrXrir)rvr r,r-r2r�rZr�r�rrr�r�r�r�r�r�rNr�rIr�r�rr[r�r]rr�rNr)	ryr�rbrcrr
r_rr`rrr�test_copy2_symlinksCs<





�zTestCopy.test_copy2_symlinkscCsr|��}tj�|d�}tj�|d�}t|d�t�|dd�t�||�|�t�	|d�t�	|d��t�
|�dS)NrrJrorp)rvr r,r-r2r{r�r�r�r}r�)ryr�rbrcrrr�test_copy2_xattrfs


�zTestCopy.test_copy2_xattrcCs�tjtjfD]v}|��}|��}tj�|d�}t|d�|||�}|�|tj�|d��||tj�|d��}|�|tj�|d��qdS)NrrJ)	r�r�r�rvr r,r-r2r�)ryr�r�r�rbrArrr�test_copy_return_valuess

zTestCopy.test_copy_return_valuecCs|�tj�dSr)�_test_copy_dirr�r��ryrrr�
test_copy_dirszTestCopy.test_copy_dircCs|�tj�dSr)r�r�r�r�rrr�test_copy2_dir�szTestCopy.test_copy2_dircCsx|��}tj�|d�}|��}tj�|d�}t|d�tjdkrFt}nt}|�	||||�|�	||||�|||�dS�Nr�does_not_exist/�win32)
rvr r,r-r2rlr�r"�IsADirectoryErrorr�)ryZ	copy_funcr��src_filer�rcrirrrr��s

zTestCopy._test_copy_dircCs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t�||�tj||dd�|�tj�	|��|�
t�|�t�|��t�||�|�tj�	|��dS)Nrbrcr	r�rFrS)
rvr r,r-r2r�r��copyfiler�rNr�rr�)ryr�rbrcr	r�rrr�test_copyfile_symlinks�s
zTestCopy.test_copyfile_symlinksr�zrequires os.linkc
Cst�t�tj�td�}tj�td�}z�t|d��}|�d�Wd�n1sR0Yzt�||�Wn2ty�}z|�	d|�WYd}~n
d}~00|�
tjtj
||�t|d�� }|�|��d�Wd�n1s�0Yt�|�Wtjtdd�ntjtdd�0dS)	Nr�r�r)�cheddarz
os.link(): %srGTr�)r r�rr,r-r.r/r�r"r/r�r�rr�r�rHr�rx)ryrbrcrDr3rrr�'test_dont_copy_file_onto_link_to_itself�s
($.z0TestCopy.test_dont_copy_file_onto_link_to_itselfc
Cs�t�t�tj�td�}tj�td�}z�t|d��}|�d�Wd�n1sR0Yt�d|�|�t	j
t	j||�t|d�� }|�|�
�d�Wd�n1s�0Yt�|�Wt	jtdd�nt	jtdd�0dS)Nr�r�r)r�rGTr�)r r�rr,r-r.r/r�r�r�rr�r�rHr�rx)ryrbrcrDrrr�*test_dont_copy_file_onto_symlink_to_itself�s
(.z3TestCopy.test_dont_copy_file_onto_symlink_to_itselfr,r-c
Cs�zt�t�Wn2ty@}z|�d|�WYd}~n
d}~00z6|�tjtjtt	�|�tjtjt
t�Wt�t�nt�t�0dS)Nr.)r r,rr"r/r�r��SpecialFileErrorr�r0�__file__r�)ryr3rrr�test_copyfile_named_pipe�s$��z!TestCopy.test_copyfile_named_pipecCsl|��}|��}tj�|d�}tj�|d�}t|d�t�||�}|�tj�|��|�	t
|�t
|��dS)NrJr)rvr r,r-r2r�r�r�r�r�rI)ryr�r��dst_filer�rArrr�test_copyfile_return_value�s
z#TestCopy.test_copyfile_return_valuecCsX|��}tj�|d�}t|d�|�ttj||�|�t	tj||�|�
t|�d�dSr%)rvr r,r-r2r�rr�r�rr�rI)ryr�r�rrr�test_copyfile_same_file�s
z TestCopy.test_copyfile_same_filezMOn MACOS, Solaris and Windows the errors are not confusing (though different)cCsD|��}tj�|d�}tj�|d�}t|d�|�ttj||�dS)Nrr�)	rvr r,r-r2r�r�r�r�)ryr�r�rcrrr�test_copyfile_nonexistent_dir�s

z&TestCopy.test_copyfile_nonexistent_dircCs�|��}tj�|d�}|��}tj�|d�}t|d�tjdkrFt}nt}|�	|t
j||�|�	|t
j||�|�	|t
j||�dSr�)rvr r,r-r2rlr�r"r�r�r�r�)ryr�r�r�rcrirrr�test_copyfile_copy_dir�s

zTestCopy.test_copyfile_copy_dirN))r{r|r}rr�rQr�r�rZr rUr�rVrarrnZskip_unless_xattrr~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��MACOS�SOLARISr�r�r�rrrrrIsh

(��

?�



"






rIc@s~eZdZe��dd��Zdd�Zd9dd�Ze��e�	e
�d�d	�d
d���Ze��dd
��Z
e��e�	e
�d�d�dd���Ze��e�	e
�d�d�dd���Zdd�Ze��dd��Ze��e�	ed�dd���Zdd�Zdd �Ze��d!d"��Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Ze��d-d.��Ze��d/d0��Ze��e� e!�oRe"�d1�d2d3���Z#e��d4d5��Z$d6d7�Z%d8S):�TestArchivesc	Cs�|�d�\}}|��}t�|�tj�|�}tj�tj�|�d�}t�	|��*tj�
|�}t|d|d�}Wd�n1s|0Y|�||d�|�
tj�|��|�
t�|��t�|d��$}|�|��gd��Wd�n1s�0Yt�	|��t|d|d�}Wd�n1�s(0Y|�||d	�|�
tj�|��|�
t�|��t�|d
��$}|�|��gd��Wd�n1�s�0YdS)Nr��archive�gztar�.�.tar.gzzr:gz)r�z./subz./sub2z./file1z./file2z./sub/file3�tar�.tarrG)�
_create_filesrvr r�r,r�r-�basenamer�
change_cwd�abspathrr�r�r��tarfileZ
is_tarfiler.�assertCountEqual�getnames)	ry�root_dirrEr��work_dir�
rel_base_name�	base_name�tarballZtfrrr�test_make_tarballs0
,
�".
�zTestArchives.test_make_tarballcCsFt�|��(}|��}|��t|�Wd�S1s80YdSr)r�r.r��sortr+)ryr,r�rrrr�_tarinfo:szTestArchives._tarinfo�distcCs�|��}tj�||�}tj|dd�t|dfd�t|dfd�t�tj�|d��t|ddfd�t�tj�|d��|r�t|d	fd�||fS)
NT)�exist_okr�rfrer�Zfile3Zsub2�outer)rvr r,r-rDr2r�)ryrEr�r�rrrr�@szTestArchives._create_filesr�zNeed the tar command to runcCs|��\}}tj�|��d�}t|d||�}|�||d�|�tj�|��tj�|d�}ddd|g}t	j
||t	jd�|�tj�|��|�|�|�|�|��t|d||�}|�||d�|�tj�|��t|d||d	d
�}|�||d�|�tj�|��dS)Nr�r�r�zarchive2.tarr�z-cf��cwd�stdoutr�T)�dry_run)
r�r r,r-rvrr�r�r�rn�
check_call�DEVNULLr�)ryr�rEr�r�Ztarball2Ztar_cmdrrr�test_tarfile_vs_tarNs(�
�z TestArchives.test_tarfile_vs_tarc	Cs�|��\}}|��}t�|�tj�|�}tj�tj�|�d�}t�	|��(tj�
|�}t|d|�}Wd�n1sx0Y|�||d�|�
tj�|��|�
t�|��t�|��$}|�|��gd��Wd�n1s�0Yt�	|��*tj�
|�}t|d||�}Wd�n1�s.0Y|�||d�|�
tj�|��|�
t�|��t�|��$}|�|��gd��Wd�n1�s�0YdS)Nr��zip�.zip)�dist/�	dist/sub/�
dist/sub2/�
dist/file1�
dist/file2�dist/sub/file3r�)r�r�r�r�r�r�)r�rvr r�r,r�r-r�rr�r�rr�r�r��zipfile�
is_zipfile�ZipFiler��namelist)	ryr�rEr�r�r�r�rQ�zfrrr�test_make_zipfileos2
*
�".
�zTestArchives.test_make_zipfiler�zNeed the zip command to runc
Cs
|��\}}tj�|��d�}t|d||�}|�||d�|�tj�|��tj�|d�}dddd|g}t	j
||t	jd�|�tj�|��t�
|��}|��}Wd�n1s�0Yt�
|��}|��}	Wd�n1s�0Y|�t|�t|	��dS)Nr�r�r�zarchive2.zipz-qz-rr�)r�r r,r-rvrr�r�r�rnr�r�r�r�r�rK)
ryr�rEr�r�Zarchive2�zip_cmdr�rZnames2rrr�test_zipfile_vs_zip�s �&&z TestArchives.test_zipfile_vs_zip�unzipzNeed the unzip command to runc	Cs�|��\}}tj�|��d�}t|d||�}|�||d�|�tj�|��dd|g}t	�
|���ztj|tj
d�Wn\tjy�}zB|jjdd�}d	|vr�|�d
�d}|�|�||��WYd}~n
d}~00Wd�n1s�0YdS)Nr�r�r�r�z-t)�stderr�replacer�zunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})r�r r,r-rvrr�r�r�rr�rn�check_output�STDOUT�CalledProcessError�output�decoder/r1�format)	ryr�rEr�r�r�r��details�msgrrr�test_unzip_zipfile�s

zTestArchives.test_unzip_zipfilecCs*|��}tj�|d�}|�tt|d�dS)Nr�rf)rvr r,r-r��
ValueErrorr)ryr�r�rrr�test_make_archive�szTestArchives.test_make_archivecCs�tr"t�d�d}t�d�d}nd}}|��\}}tj�|�	�d�}t
|d||||d�}|�tj�|��t
|d||�}|�tj�|��t
|d||||d�}|�tj�|��t
|d||ddd�}|�tj�|��dS)	Nr�rootr�r���owner�groupr�Z	kjhkjhkjgZoihohoh)
�UID_GID_SUPPORT�grp�getgrgid�pwd�getpwuidr�r r,r-rvrr�r�)ryr�r�r�rEr�rQrrr�test_make_archive_owner_group�s(�
�
�z*TestArchives.test_make_archive_owner_group�Requires grp and pwd supportc		Cs�|��\}}tj�|��d�}t�d�d}t�d�d}t	�
|��$t|d|d||d�}Wd�n1sn0Y|�tj�
|��t�|�}z6|��D] }|�|jd�|�|jd�q�W|��n
|��0dS)Nr�rr�r�r�)r�r r,r-rvr�r�r�r�rr�rr�r�r�r.Z
getmembersr��uid�gidr�)	ryr�rEr�r�r��archive_namer��memberrrr�test_tarfile_root_owner�s
�$
z$TestArchives.test_tarfile_root_ownercCstt��}dd�}td|gd�zFztdd|��d�WntyHYn0|�t��|�Wtd�n
td�0dS)Nc_s
t��dSr)�RuntimeError)r�kwrrr�_breakssz3TestArchives.test_make_archive_cwd.<locals>._breaksrf�xxx file)r�)r r]rrrvr�r�r)ryZcurrent_dirr�rrr�test_make_archive_cwd�sz"TestArchives.test_make_archive_cwdcCsZ|��}t�|��4|�tdd�d�|�tj�d��Wd�n1sL0YdS)N�testr�ztest.tar�	rvrr�r�rr�r r,r��ryr�rrr�test_make_tarfile_in_curdir
sz(TestArchives.test_make_tarfile_in_curdircCsZ|��}t�|��4|�tdd�d�|�tj�d��Wd�n1sL0YdS)Nr�r�ztest.zipr�r�rrr�test_make_zipfile_in_curdirsz(TestArchives.test_make_zipfile_in_curdircCs�|�ttdd�|�ttddd�d�|�ttddd�ddg�tddd�dgd	�d
d�t�D�}|�d|�td�dd�t�D�}|�d|�dS)
NrfricSstSr��xrrrr�<lambda>r6z;TestArchives.test_register_archive_format.<locals>.<lambda>cSstSrr�rrrrr�!r6)rirY)rirYrcSstSrr�rrrrr�$r6r�cSsg|]\}}|�qSrr�r<rR�paramsrrrr>%r6z=TestArchives.test_register_archive_format.<locals>.<listcomp>cSsg|]\}}|�qSrrr�rrrr>)r6)r��	TypeErrorrrr�rr;)ry�formatsrrr�test_register_archive_formats��z)TestArchives.test_register_archive_formatcKsF|j|dd�fi|��|j|tjfi|��|j|tfi|��dS)NcSs|Srr�r,rrrr�0r6z3TestArchives.check_unpack_archive.<locals>.<lambda>)�#check_unpack_archive_with_converterrrr)ryr�rrrr�check_unpack_archive.s����z!TestArchives.check_unpack_archivecKs.|��\}}t|�}|�d�tj�|��d�}t||||�}|��}	t||�||	�fi|��|�	t|	�|�|��}
t||�||
�fd|i|��|�	t|
�|�|�
tj��$t|t
�fi|��Wd�n1s�0Y|�
t��(t|t
�fddi|��Wd�n1�s 0YdS)Nr�r�r�rf)r�rPr�r r,r-rvrrr�r�r��	ReadErrorrr�)ryr��	converterrr�rE�expectedr�r�r�Ztmpdir3rrrr5s"
�2z0TestArchives.check_unpack_archive_with_convertercCsT|j|dd�|j|dd�t�|��|�|�Wd�n1sF0YdS)NZ
fully_trusted��filter�data)rrZcheck_no_warnings)ryr�rrr�check_unpack_tarballMsz!TestArchives.check_unpack_tarballcCs|�d�dS)Nr��r
r�rrr�test_unpack_archive_tarSsz$TestArchives.test_unpack_archive_tarcCs|�d�dS)Nr�rr�rrr�test_unpack_archive_gztarVsz&TestArchives.test_unpack_archive_gztarcCs|�d�dS)N�bztarrr�rrr�test_unpack_archive_bztarZsz&TestArchives.test_unpack_archive_bztarz(AIX MAXDATA must be 0x20000000 or largercCs|�d�dS)N�xztarrr�rrr�test_unpack_archive_xztar^sz&TestArchives.test_unpack_archive_xztarcCsF|�d�|�t��|jddd�Wd�n1s80YdS)Nr�rr
)rr�rr�rrr�test_unpack_archive_zipcs
z$TestArchives.test_unpack_archive_zipcs�t�}�fdd�}tdddg|dg�tdd���ttd	dg|�td�td	dg|���d	dgd
ft����ddgd
ft��td	���t�|�dS)Ncs(��|d���|d���|d�dS)Nri�	stuff.boo�xx)r�)r��extract_dir�extrar�rr�_boomsz/TestArchives.test_unpack_registry.<locals>._booZBooz.booz.b2)rrirrZBoo2r�)	rrrr�r	r
r�r;r�)ryrrrr�r�test_unpack_registryis

�z!TestArchives.test_unpack_registryN)r�)&r{r|r}rZ
requires_zlibr�r�r�r�r�r��whichr�r�r�r�r�r�r�r�r�r�r�rrrr
rrZrequires_bz2rZ
requires_lzmar�rkrsrrrrrrrr�s\
#
�
$��





r�c@sLeZdZe�eed�d�dd��Ze�ed�e�ee	d�d�dd	���Z
d
S)�TestMisc�
disk_usagez)disk_usage not available on this platformcCs�t�tj�t��}dD]}|�t||�t�q|�	|j
d�|�	|jd�|�|j
d�|�|j
|j�|�	|j
|j
�t�t�dS)N)r3�used�freer)r�rr r,r�r�r�rrrZ
assertGreaterr3r�assertGreaterEqualr )ry�usager`rrr�test_disk_usage�szTestMisc.test_disk_usager��chownzrequires os.chowncs����}tj|d��t�d���t��t���Wd�n1sH0Y��t��tj�dd�Wd�n1s�0Y��t��tj�dd�Wd�n1s�0Y��t	��t��d�Wd�n1s�0Y��t	��t��d�Wd�n1�s&0Yt
��}t
��}d
��fd	d
�	}t��||�|�||�t��|�|�|�tj�|d�|�|�tj�|d�|�|d�t�|||�||||�t�||�|||�tj||d�|||�tj||d�|||d�z t
�|�d}t�|�d}Wnt�yHYn60t��||�|�||�t�|||�||||�dS)Nr�ztesting chown functionznon-existing username)�userznon-existing groupname)r��spamg��Q�	@cs:t���}|dur ��||j�|dur6��||j�dSr)r r�r��st_uid�st_gid)r,r�r��s�r�ryrr�check_chown�s

z(TestMisc.test_chown.<locals>.check_chown)r�r)NN)rvr[r�r2r�r�r�r$�LookupErrorrr �getuid�getgidr�r�r�r��KeyError)ryr�r�r�r+r%r�rr*r�
test_chown�sR
(,,*,



zTestMisc.test_chownN)r{r|r}r�r�rZr�r#r�r r0rrrrr�s�

rc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Ze�	e
ed�oHe��dkd
�dd��Z
dd�Zdd�Ze�ejdkd�dd��Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Ze�ejdkd$�d%d&��Ze�ejdkd$�d'd(��Zd)S)*�	TestWhichcCst|jdd�|_tj|jddd�|_t�|jjtj	�|�
|jj�tj�
|jj�\|_|_|j|_tj|_d|_dS)NZTmp)ruz.Exe�rWru�suffixz.EXE)rv�temp_dirr[r\�	temp_filer r�rRr��S_IXUSRrwr�r,rqrW�file�env_path�curdir�extr�rrr�setUp�s�zTestWhich.setUpcCs&tj|j|jd�}|�||jj�dS�Nr)r�rr7rWr�r5rR�ryrArrr�
test_basic�szTestWhich.test_basiccCs(tj|jj|jd�}|�||jj�dSr<)r�rr5rRr4r�r=rrr�test_absolute_cmd�szTestWhich.test_absolute_cmdcCs�tj�|j�\}}tj�||j�}tj|d��,tj	||j
d�}|�||�Wd�n1s`0Ytj|jd��(tj	||d�}|�|�Wd�n1s�0YdSr<)
r r,rqrWr-r7rr�r�rr4r��assertIsNone)ryrE�tail_dir�relpathrArrr�test_relative_cmd�s*zTestWhich.test_relative_cmdcCs�tj�|j�}tj|jd��Ptj|j|d�}t	j
dkrT|�|tj�|j
|j��n
|�|�Wd�n1sr0YdS)Nrr�)r r,r�rWrr�r�rr7rlr�r�r-r9r@)ryrErArrr�test_cwd�s
zTestWhich.test_cwdr�rznon-root user requiredcCsRt�|jjtj�t�|jjtj�r.|�d�t	j
|j|jtjd�}|�
|�dS)Nzcan't set the file read-only)r,�mode)r r�r5rRr�r��access�W_OKr/r�rr7rWr@r=rrr�test_non_matching_modes

z TestWhich.test_non_matching_modecCsjtj�|j�\}}tj|d��8tj|j|d�}|�	|tj�
||j��Wd�n1s\0YdSr<)r r,rqrWrr�r�rr7r�r-)ryrErArArrr�test_relative_pathszTestWhich.test_relative_pathcCstjd|jd�}|�|�dS)Nzfoo.exer)r�rrWr@r=rrr�test_nonexistent_fileszTestWhich.test_nonexistent_filer�zpathext check is Windows-onlycCs<tj|jdd�|jd�}|�||jjdd�|j�dS)N���r)r�rr7rWr�r5rRr:r=rrr�test_pathext_checkingszTestWhich.test_pathext_checkingcCsRt���6}|j|d<t�|j�}|�||jj�Wd�n1sD0YdS�N�PATH)	r�EnvironmentVarGuardr8r�rr7r�r5rR�ry�envrArrr�test_environ_path%s

zTestWhich.test_environ_pathcCs�t����}d|d<tjjd|jdd���t�td|j��Rt�|j��&t	�
|j�}|�|�Wd�n1sr0YWd�n1s�0YWd�n1s�0YWd�n1s�0YdS)Nr�rN�
os.confstrT��return_value�create�defpath)
rrOr�rGrHrW�	swap_attrr r�r�rr7r@rPrrr�test_environ_path_empty+s
��
�z!TestWhich.test_environ_path_emptycCs:tj�|jj�}tjdkrBtj}t|t	�r4t�
|�}tj�||�}t�
���}tj|d<tjjd|jdd���t�td|j��jt�|j�}|�|�t�|j��(t�|j�}|�||�Wd�n1s�0YWd�n1s�0YWd�n1�s0YWd�n1�s,0YdS)Nr�rNrSTrTrW)r r,r�r5rRrlr�r9r*r�r�r-rrO�pathsepr�rGrHrWrXr�rr7r@r�r�)ryZexpected_cwdr9rQrArrr�test_environ_path_cwd6s$




��
zTestWhich.test_environ_path_cwdc
Cs8t����}|�dd�tjjdtdd��Lt�td|j	��t
�|j�}Wd�n1s^0YWd�n1s|0Y|�
||jj�tjjd|j	dd��Jt�tdd��t
�|j�}Wd�n1s�0YWd�n1s�0Y|�
||jj�Wd�n1�s*0YdS)NrNrST)r#rVrWrTr�)rrO�popr�rGrHr�rXr rWr�rr7r�r5rRrPrrr�test_environ_path_missingLs 
��H��Hz#TestWhich.test_environ_path_missingc	Cs�tj�|j�}tj|jd��\t���4}|j|d<tj	|j
dd�}|�|�Wd�n1s`0YWd�n1s~0YdS)NrrNr�)r r,r�rWrr�rOr8r�rr7r@)ryrErQrArrr�test_empty_path^s�
zTestWhich.test_empty_pathcCsNt���2}|�dd�t�|j�}|�|�Wd�n1s@0YdSrM)rrOr\r�rr7r@rPrrr�test_empty_path_no_PATHfs
z!TestWhich.test_empty_path_no_PATHztest specific to WindowscCs�d}tj|jd|d�}t�|jtj�|�|j	�tj
�|j�}tj
�|�d}t
���6}||d<tj||jd�}|�||j�Wd�n1s�0YdS)N�.xyz�Tmp2r2r�PATHEXTr)r[r\r4r r�rRr�r6rwr�r,r�rrrOr�rr��ryr:Ztemp_filexyzZprogramrQrArrr�test_pathextls�
zTestWhich.test_pathextcCs�d}tj|jd|d�}|�|j�tj�|j�}tj�	|�d}t
���<}|�d�|d<tj
||jd�}|�||j�Wd�n1s�0YdS)Nr`rar2r�;rbr)r[r\r4rwr�r r,r�rRrrrOr�rr�rcrrr�test_pathext_with_empty_str~s�
z%TestWhich.test_pathext_with_empty_strN)r{r|r}r;r>r?rCrDr�r�rZr r�rHrIrJr�rlr�rLrRrYr[r]r^r_rdrfrrrrr1�s2
�
�

r1c@seZdZdd�ZdS)�TestWhichBytescCsXt�|�t�|j�|_t�|j�|_t�|jj�|j_t�|j�|_t�|j	�|_	dSr)
r1r;r r�rWr7r5rRr9r:r�rrrr;�s
zTestWhichBytes.setUpN)r{r|r}r;rrrrrg�srgc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
dd��Ze
dd��Zdd�Z
e
dd��Zdd�Ze
dd��Zdd�Ze�ejjd�dd��Zd d!�Zd"d#�Zd$d%�Zd&d'�Zeje
d(d)���Zeje
d*d+���Zeje
d,d-���Z eje
d.d/���Z!d0d1�Z"d2d3�Z#e
d4d5��Z$e
d6d7��Z%d8d9�Z&e�e'ed:��ove�(�d;k�ove'ed<��ove'e)d=��ove'e)d>�d?�d@dA��Z*dBS)C�TestMovecCsvd}|��|_|��|_tj�|j|�|_tj�|j|�|_t|jd��}|�	d�Wd�n1sh0YdS)Nrr(r&)
rvr�r�r r,r-r�r�r.r/)ryr�rDrrrr;�s

zTestMove.setUpcCs�t|d��}|��}Wd�n1s(0Yt�||�t|d�� }|�||���Wd�n1sn0Y|�tj�|��dS�NrF)	r.rHr��mover�r�r r,r�)ryrbrc�real_dstrD�contentsrrr�_check_move_file�s&.zTestMove._check_move_filecCsFtt�|��}t�||�|�|tt�|���|�tj�|��dSr)	rKr rLr�rjr�r�r,r�)ryrbrcrkrlrrr�_check_move_dir�szTestMove._check_move_dircCs|�|j|j|j�dSr)rmr�r�r�rrr�test_move_file�szTestMove.test_move_filecCs|�|j|j|j�dSr)rmr�r�r�r�rrr�test_move_file_to_dir�szTestMove.test_move_file_to_dircCs"t�|j�}|�||j|j�dSr)rrr�rmr�r�)ryrbrrr�"test_move_file_to_dir_pathlike_src�sz+TestMove.test_move_file_to_dir_pathlike_srccCs"t�|j�}|�|j||j�dSr)rrr�rmr�r��ryrcrrr�"test_move_file_to_dir_pathlike_dst�sz+TestMove.test_move_file_to_dir_pathlike_dstcCs|��dSr)ror�rrr�test_move_file_other_fs�sz TestMove.test_move_file_other_fscCs|��dSr)rpr�rrr�test_move_file_to_dir_other_fs�sz'TestMove.test_move_file_to_dir_other_fsc	Cs@tj|��d�}z|�|j||�Wt�|�nt�|�0dSr�)r[r�rvrnr�rrx�ryr�rrr�
test_move_dir�szTestMove.test_move_dircCs|��dSr)rwr�rrr�test_move_dir_other_fs�szTestMove.test_move_dir_other_fsc
Cs,|�|j|jtj�|jtj�|j���dSr)rnr�r�r r,r-r�r�rrr�test_move_dir_to_dir�s�zTestMove.test_move_dir_to_dircCs|��dSr)ryr�rrr�test_move_dir_to_dir_other_fs�sz&TestMove.test_move_dir_to_dir_other_fsc
Cs4|�|jtjj|jtj�|jtj�|j���dSr)rnr�r r,�sepr�r-r�r�rrr�test_move_dir_sep_to_dir�s�z!TestMove.test_move_dir_sep_to_dirzrequires os.path.altsepc
Cs4|�|jtjj|jtj�|jtj�|j���dSr)rnr�r r,�altsepr�r-r�r�rrr�test_move_dir_altsep_to_dir�s�z$TestMove.test_move_dir_altsep_to_dircCsHt|jd��Wd�n1s"0Y|�tjtj|j|j�dS)Nr()r.r�r�r�rrjr�r�r�rrr�"test_existing_file_inside_dest_dir�sz+TestMove.test_existing_file_inside_dest_dircCs*tj�|jd�}|�tjtj|j|�dS�NrJ)r r,r-r�r�r�rrjrrrrr�test_dont_move_dir_in_itself�sz%TestMove.test_dont_move_dir_in_itselfc	Csrt�t�zVdD]B\}}tj�t|�}tj�t|�}|jt�||�d||fd�qWt�	t�nt�	t�0dS)N))�srcdirzsrcdir/destz?_destinsrc() wrongly concluded that dst (%s) is not in src (%s)�r�)
r r�rr,r-r�r��
_destinsrcrrxr�rrr�test_destinsrc_false_negative�s
��
z&TestMove.test_destinsrc_false_negativec	Csrt�t�zVdD]B\}}tj�t|�}tj�t|�}|jt�||�d||fd�qWt�	t�nt�	t�0dS)N))r�zsrc/dest)r�z
srcdir.newz;_destinsrc() wrongly concluded that dst (%s) is in src (%s)r�)
r r�rr,r-r�r�r�rrxr�rrr�test_destinsrc_false_positives
��
z&TestMove.test_destinsrc_false_positivecCs\tj�|jd�}t�|j|�t�||j�|�	tj�
|j��|�	tj�|j|j��dSr�)r r,r-r�r�r�r�rjr�r�rN�samefilerrrrr�test_move_file_symlinks
zTestMove.test_move_file_symlinkcCsld}tj�|j|�}t�|j|�t�||j�tj�|j|�}|�	tj�
|��|�	tj�|j|��dSr�)r r,r-r�r�r�r�rjr�r�rNr�)ryr�rcZ
final_linkrrr�test_move_file_symlink_to_dirsz&TestMove.test_move_file_symlink_to_dircCsztj�|jd�}tj�|jd�}t�||�tj�|jd�}t�||�|�tj�	|��|�
tj�|�tj�|��dS�NrKrJrL)r r,r-r�r�r�r�rjr�rNr��realpath�ryrbrcr	rrr�test_move_dangling_symlink%sz#TestMove.test_move_dangling_symlinkcCs|tj�|jd�}tj�|jd�}t�|�t�||�tj�|jd�}t�||�|�	tj�
|��|�	tj�||��dSr�)r r,r-r�r�r�r�r�rjr�rNr�r�rrr�test_move_dir_symlink0s
zTestMove.test_move_dir_symlinkc	Cs6t�|j|j�}|�|tj�|jtj�|j���dSr)	r�rjr�r�r�r r,r-r�r=rrr�test_move_return_value<s�zTestMove.test_move_return_valuecCs6t�|jtj�|jd��}|�|tj�|jd��dSr�)r�rjr�r r,r-r�r�r=rrr� test_move_as_rename_return_valueAsz)TestMove.test_move_as_rename_return_valuecs8g��fdd�}tj|j|j|d�|�t��d�dS)Ncs��||f�dSrr�r5�Zmovedrrr7Hsz7TestMove.test_move_file_special_function.<locals>._copyr)ri)r�rjr�r�r�r��ryr7rr�r�test_move_file_special_functionEsz(TestMove.test_move_file_special_functioncsdg��fdd�}t�tj�|jd��t�tj�|jd��tj|j|j|d�|�	t
��d�dS)Ncs��||f�dSrr�r5r�rrr7Psz6TestMove.test_move_dir_special_function.<locals>._copy�childZchild1r)r)rr�r r,r-r�r�rjr�r�r�r�rr�r�test_move_dir_special_functionMsz'TestMove.test_move_dir_special_functionc	Cs~|��|_tj�tj�|j�tj�|j����}|�|j|�z.t	�
|j|�|�tj�|��Wt�
|�nt�
|�0dSr)rvr�r r,r-r�r��upperrNr�rjr�rMr�rvrrr�test_move_dir_caseinsensitiveWs
�z&TestMove.test_move_dir_caseinsensitiver�rr��SF_IMMUTABLE�	UF_OPAQUErc
Cs0z�t�t�t�ttj�|�ttj	tt
�|�t
t��v�t�ttj
�t�tj�td��t�ttj�|�ttj	tt
�|�t
t��v�Wtj�t�r�t�ttj
�t�t�tj�t
�r�t�t
tj
�t�t
�nNtj�t��rt�ttj
�t�t�tj�t
��r*t�t
tj
�t�t
�0dS)Nr�)r r��
TESTFN_SRCr�r�r�r�r"r�rj�
TESTFN_DSTr�rLr�rr�r,r-r�rxr�rrr�test_move_dir_permission_deniedhs,

�
z(TestMove.test_move_dir_permission_deniedN)+r{r|r}r;rmrnrorprqrsr'rtrurwrxryrzr|r�r�r r,r}r~rr�r�r�rr�r�r�r�r�r�r�r�r�r�rZr�r�r�rrrrrh�sh	




		


	���rhc@s`eZdZGdd�de�Zdd�Ze�ed�dd��Z	e�ed�dd	��Z
e�ed�d
d��ZdS)
�TestCopyFilec@s:eZdZdZdZdZddd�Zdd�Zdd	�Zd
d�Z	dS)
zTestCopyFile.FauxFNTcCs||_||_dSr)�_raise_in_exit�_suppress_at_exit)ryZ
raise_in_exitZsuppress_at_exitrrr�__init__�szTestCopyFile.Faux.__init__cGsdS)Nr�r)ryrrrrrH�szTestCopyFile.Faux.readcCs
d|_dS)NT)�_enteredr�rrr�	__enter__�szTestCopyFile.Faux.__enter__cCs&|||f|_|jr d|_td��|jS)NT�Cannot close)�_exited_withr��_raisedrr�)ry�exc_type�exc_val�exc_tbrrr�__exit__�s
zTestCopyFile.Faux.__exit__)FT)
r{r|r}r�r�r�r�rHr�r�rrrr�Faux�s
r�c	Csrddd�}t�td|��F|�t��t�dd�Wd�n1sF0YWd�n1sd0YdS)NrGcSs|dkrtd��dS)N�srcfilezCannot open "srcfile"rl�r�rErrr�_open�sz4TestCopyFile.test_w_source_open_fails.<locals>._openr.r��destfile)rG)rrXr�r�rr��ryr�rrr�test_w_source_open_fails�s
z%TestCopyFile.test_w_source_open_failszskipped on macOScs�|���d
�fdd�	}t�td|��t�dd�Wd�n1sF0Y|��j�|��jdtu�|�	�jdj
d	�dS)NrGcs |dkr�S|dkrtd��dS)Nr�r��Cannot open "destfile"rlr��r�rrr��s
z2TestCopyFile.test_w_dest_open_fails.<locals>._openr.r�r�rri)r�)rG)r�rrXr�r�r�r�r�rr�rr�rr�r�test_w_dest_open_fails�s*�z#TestCopyFile.test_w_dest_open_failscs�|���|�d��d��fdd�	}t�td|��t�dd�Wd�n1sR0Y|��j�|��j�|��j�|��jdt	u�|�
�jd	jd
�dS)NTrGcs|dkr�S|dkr�SdS�Nr�r�rr��r�r�rrr��s
z3TestCopyFile.test_w_dest_close_fails.<locals>._openr.r�r�rri)r�)rG)r�rrXr�r�r�r�r�r�rr�rr�rr�r�test_w_dest_close_fails�s
*�z$TestCopyFile.test_w_dest_close_failsc	s�|�d��|���d	��fdd�	}t�td|��F|�t��t�dd�Wd�n1s^0YWd�n1s|0Y|��j�|��j�|�	�j
�|��jddu�|��j
�dS)
NTrGcs|dkr�S|dkr�SdSr�rr�r�rrr��s
z5TestCopyFile.test_w_source_close_fails.<locals>._openr.r�r�r)rG)r�rrXr�r�rr�r�r�r�r�r�r�rr�r�test_w_source_close_fails�s
Hz&TestCopyFile.test_w_source_close_failsN)r{r|r}�objectr�r�r�r�r�r�r�r�rrrrr��s





r�c@sxeZdZdZedd��Zedd��Zdd�Zej	dd	��Z
d
d�Zdd
�Zdd�Z
dd�Ze�ejdkd�dd��ZdS)�TestCopyFileObji cCstt|j�dSr)rEr�FILESIZE��clsrrr�
setUpClass�szTestCopyFileObj.setUpClasscCst�t�t�t�dSr)rr_rr0r�rrr�
tearDownClass�s
zTestCopyFileObj.tearDownClasscCst�t�dSr�rr_r0r�rrr�tearDown�szTestCopyFileObj.tearDownc	csbttd��D}ttd��}||fVWd�n1s60YWd�n1sT0YdS�NrFr(�r.rr0r�rrr�	get_files�szTestCopyFileObj.get_filesc	Cslt|d��N}t|d��$}|�|��|���Wd�n1s@0YWd�n1s^0YdSri)r.r�rH)ryrbrc�fsrc�fdstrrr�assert_files_eq�szTestCopyFileObj.assert_files_eqcCsH|��� \}}t�||�Wd�n1s.0Y|�tt�dSr)r�r��copyfileobjr�rr0r�rrr�test_content	s*zTestCopyFileObj.test_contentcCs<|��� \}}t�||�Wd�n1s.0YdSr)r�r�r�r�rrr�test_file_not_closed	sz$TestCopyFileObj.test_file_not_closedcCs`|���D\}}t�||�|�|��|j�|�|��|j�Wd�n1sR0YdSr)r�r�r�r��tellr�r�rrr�test_file_offset	sz TestCopyFileObj.test_file_offsetrzWindows onlycCs~tj�d��}t�tt�Wd�n1s.0Y|�|jddd�t	j
t��dd��}|�
d�Wd�n1s�0Y|j}|�tj|�tj�d��}t�|t�Wd�n1s�0Y|�|jddd�t	j
t��dd��}Wd�n1�s0Y|j}|�tj|�tj�d��}t�|t�Wd�n1�sd0Y|�|t�dS)	Nzshutil._copyfileobj_readintorrYiFrVsfoor)r�rGrHr�r�rr0r��	call_argsr[r\r r]r/rRrwrr_r�)ry�mrDrsrrr�
test_win_impl	s"*(* ,zTestCopyFileObj.test_win_implN)r{r|r}r��classmethodr�r�r��
contextlib�contextmanagerr�r�r�r�r�r�r�r rRr�rrrrr��s


r�c@s�eZdZdZdZdZedd��Zedd��Zdd	�Z	e
jd
d��Zdd
�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)�_ZeroCopyFileTesti�r6r�cCsDtt|j�ttd��}|��|_Wd�n1s60YdSri)rErr�r.rH�FILEDATA)r�rDrrrr�7	s
z_ZeroCopyFileTest.setUpClasscCst�t�dSr)rr_rr�rrrr�>	sz_ZeroCopyFileTest.tearDownClasscCst�t�dSrr�r�rrrr�B	sz_ZeroCopyFileTest.tearDownc	csbttd��D}ttd��}||fVWd�n1s60YWd�n1sT0YdSr�r�r�rrrr�E	sz_ZeroCopyFileTest.get_filescOstd��dS)Nzmust be implemented in subclass)�NotImplementedError)ryrrrrr�zerocopy_funK	sz_ZeroCopyFileTest.zerocopy_funcCs$|��|��|��|��dSr)r�r�r�r;r�rrr�resetN	sz_ZeroCopyFileTest.resetc	Cs�|��� \}}|�||�Wd�n1s.0Y|�ttdd�|j�|���L\}}tj�d��}t	�
tt�Wd�n1s�0YWd�n1s�0YdS)NT�r0zshutil.copyfileobj)r�r�r�rIr0r�r�rGrHr�r�r)ryrbrcr�rrr�test_regular_copyV	s**z#_ZeroCopyFileTest.test_regular_copyc	Cs�|�|j�|���J\}}|�t��|�||�Wd�n1sF0YWd�n1sd0Y|�ttdd�|j	�dS)NTr�)
rwr�r�r�r�r�r�rIrr�r�rrr�test_same_file`	s
Hz _ZeroCopyFileTest.test_same_filecCsZtjt��d�}|�t��}t�|d�Wd�n1s<0Y|�|j	j
|�dS)Nr��new)r[r�r r]r�r�r�r�r�r�r�)ryrRr�rrr�test_non_existent_srch	s*z'_ZeroCopyFileTest.test_non_existent_srcc	s�td�td�|��fdd��|��fdd��t�d��Wd�n1sT0Yt�d��F}t�d��}|�||�Wd�n1s�0YWd�n1s�0Y|�t�dd	�d
�dS)Nrbrccs
t���Sr�rr_r)r`rrr�q	r6z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>cs
t���Srr�r)rarrr�r	r6r(rFTr�r6)rrwr.r�r�rIr�r)rar`r�test_empty_filen	sHz!_ZeroCopyFileTest.test_empty_filecCsHtjj|jtd��"|�ttjtt	�Wd�n1s:0YdS)N�r#)
r�rGrH�
PATCHPOINT�ZeroDivisionErrorr�r�r�rr0r�rrr�test_unhandled_exception|	s
��z*_ZeroCopyFileTest.test_unhandled_exceptionc
Cs�tjj|jttjd�d��r|���J\}}|�t	��|�
||�Wd�n1sV0YWd�n1st0YWd�n1s�0YdS�N�yor�)r�rGrHr�rr�EINVALr�r�r
r�r�rrr�test_exception_on_first_call�	s

�z._ZeroCopyFileTest.test_exception_on_first_callc	Cs|tjj|jttjd�d��N|���&\}}|�t|j	||�Wd�n1sP0YWd�n1sn0YdSr�)
r�rGrHr�rr�ENOSPCr�r�r�r�rrr�test_filesystem_full�	s


�z&_ZeroCopyFileTest.test_filesystem_fullN)r{r|r}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�1	s&




r�zos.sendfile() not supportedc@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�TestZeroCopySendfile�os.sendfilecCst�||�Sr)r��_fastcopy_sendfile)ryr�r�rrrr��	sz!TestZeroCopySendfile.zerocopy_func
Cs�t�|j��|}ttd��R}|�t��|�||�Wd�n1sF0Yt�	||�Wd�n1sp0YWd�n1s�0Y|�
ttdd�|j�dS)Nr(Tr�)�io�BytesIOr�r.r0r�r
r�r�r�r�rIr�rrr�test_non_regular_file_src�	s*Hz.TestZeroCopySendfile.test_non_regular_file_srcc
Cs�ttd���}t���n}|�t��|�||�Wd�n1sB0Yt�||�|�	d�|�
|��|j�Wd�n1s�0YWd�n1s�0YdS)NrFr)
r.rr�r�r�r
r�r�r��seekr�rHr�r�rrr�test_non_regular_file_dst�	s
*
z.TestZeroCopySendfile.test_non_regular_file_dstc
s���fdd�}g�tj�tjjdd|d��r|���J\}}|�t��}t�	||�Wd�n1sf0YWd�n1s�0YWd�n1s�0Y|�
|jjtj
�dS)Ncs,�s��d��|i|��Sttjd��dS)Nr�)rOrr�EBADFr�r'Z
orig_sendfilerrrU�	s
zDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfiler�T)rVr#)r rUr�rGrHr�r�rr�r�r�r�rr�)ryrUrbrcr�rr�r�test_exception_on_second_call�	s
�fz2TestZeroCopySendfile.test_exception_on_second_callc	Cs�tjjdtd��H}|��� \}}t�||�Wd�n1s@0YWd�n1s^0Y|�tt	dd�|j
�dS)N�os.fstatr�Tr�)r�rGrHrr�r�r�r�rIr0r��ryr�rbrcrrr�test_cant_get_size�	s
<z'TestZeroCopySendfile.test_cant_get_sizec	Cs�tj��}d|_tjjd|d��H}|��� \}}t�||�Wd�n1sP0YWd�n1sn0Y|�t	t
dd�|j�dS)Nir��rUTr�)r�rG�Mock�st_sizerHr�r�r�r�rIr0r��ryrGr�rbrcrrr�test_small_chunks�	s
<z&TestZeroCopySendfile.test_small_chunksc	Cs�tj��}|jd|_tjjd|d��H}|��� \}}t�||�Wd�n1sV0YWd�n1st0Y|�	t
tdd�|j�dS)Ni@r�r�Tr�)
r�rGr�r�r�rHr�r�r�r�rIr0r�r�rrr�test_big_chunk�	s
<z#TestZeroCopySendfile.test_big_chunkcCs�tjjdtd���}|�ttjtt�|j	dd}|�
|tj�
t��t�t�ttddd�|�tjtd�|�ttjttd�|j	dd}|�
|d	�Wd�n1s�0YdS)
Nr�r�rrshelloTr��3i�)r�rGrHr�r�r�r�rr0r�r�r r,�getsizerr_r2rw)ryr��	blocksizerrr�test_blocksize_arg�	s"��
�z'TestZeroCopySendfile.test_blocksize_argc
Cs�z�tjj|jttjd�d��r}|���J\}}|�t	��t
�||�Wd�n1sX0YWd�n1sv0YWd�n1s�0Ytj�|j��}t
�t
t�Wd�n1s�0YWdt
_ndt
_0dS)Nr�r�T)r�rGrHr�rr�ENOTSOCKr�r�r
r�r�r�rr0�_USE_CP_SENDFILEr�rrr�test_file2file_not_supported�	s
�H z1TestZeroCopySendfile.test_file2file_not_supportedN)
r{r|r}r�r�r�r�r�r�r�r�r�rrrrrr��	s		


r�z
macOS onlyc@seZdZdZdd�ZdS)�TestZeroCopyMACOSzposix._fcopyfilecCst�||tj�Sr)r��_fastcopy_fcopyfile�posix�_COPYFILE_DATAr�rrrr�
szTestZeroCopyMACOS.zerocopy_funN)r{r|r}r�r�rrrrr
src@s^eZdZdd�Zdd�Zdd�Ze�e�	e
j���d�e�e
ed�d	�d
d���Zdd
�ZdS)�TestGetTerminalSizecCs(t��}|�|jd�|�|jd�dS)Nr)r��get_terminal_sizer!�columns�lines)ryrArrr�test_does_not_crash
sz'TestGetTerminalSize.test_does_not_crashcCs�t���&}d|d<|d=t��}Wd�n1s40Y|�|jd�t���&}|d=d|d<t��}Wd�n1s�0Y|�|jd�dS)NZ777�COLUMNS�LINESi	Z888ix)rrOr�rr�r	r
�ryrQrArrr�test_os_environ_first
s
&
&z)TestGetTerminalSize.test_os_environ_firstcCs`t���(}d|d<d|d<t��}Wd�n1s60Y|�|jd�|�|jd�dS)NrfrZyyyr
r)rrOr�rr!r	r
rrrr�test_bad_environ.
s
&z$TestGetTerminalSize.test_bad_environz
not on ttyrzneed os.get_terminal_size()c
Cs�zt�ddg�����}Wn$tttjfy>|�d�Yn0t|d�t|d�f}t	�
��$}|d=|d=t��}Wd�n1s�0Y|�
||�dS)NZsttyrAzstty invocation failedrirr
r)rnr�r�rqr�r"r�r/rrrrOr�rr�)ryrAr	rQr�rrr�test_stty_match6
s
�

&z#TestGetTerminalSize.test_stty_matchc
Cst����}|d=|d=t�tdd��tjdd�}Wd�n1sF0Y|�|jd�|�|jd�t	t
jd��J}t�td|��tjd	d�}Wd�n1s�0YWd�n1s�0Y|�|jd
�|�|jd�Wd�n1�s0YdS)Nr
r�
__stdout__)�
�)�fallbackrrr))��(rr)rrOrXrlr�rr�r	r
r.r �devnull)ryrQrArDrrr�
test_fallbackN
s
*�Hz!TestGetTerminalSize.test_fallbackN)r{r|r}rrrr�r�r �isattyrlrr^rZrrrrrrr
s
�rc@seZdZdd�ZdS)�PublicAPITestscCsP|�ttd��gd�}ttd�s,tjdkr6|�d�|�ttj�t|��dS)N�__all__)r�r�rOr\r�r�r�rjrxrr��	ExecErrorrrrrrrr
rrr$rrr�statvfsrr)	r�rZr�r rRrOr�rr)ryZ
target_apirrr�test_module_all_attributee
s

z(PublicAPITests.test_module_all_attributeN)r{r|r}rrrrrrb
sr�__main__)F)F)Pr�Z
unittest.mockr�r[rlr�r Zos.pathrr%rrnr7r9r�r�rrrrrrrr	r
rrr
r�r�r�ImportErrorr�rZtest.supportrrrr0r�r�r�rr�r�rkr�r�r�r�rr'r2rErIrPrfZSUPPORTS_SENDFILErsrtZTestCaser~r�rIr�rr1rgrhr�r�r�r�r�r�rrrr{�mainrrrr�<module>s�8




	
[tP<
s\JdvN


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists