Your IP : 216.73.216.85


Current Path : /opt/alt/python38/lib64/python3.8/test/__pycache__/
Upload File :
Current File : //opt/alt/python38/lib64/python3.8/test/__pycache__/test_shutil.cpython-38.opt-2.pyc

U

i�fo��@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlZddlZzddlZWnek
r�dZYnXddl m!Z!ddl"m#Z#m$Z$e#dZ%e#dZ&e#dZ'ej(�)d�Z*ej(dd	�d
kZ+zddl,Z,ddl-Z-dZ.Wnek
�rrdZ.YnXzddl/Z/Wnek
�r�dZ/YnXd
d�Z0dd�Z1d6dd�Z2dd�Z3d7dd�Z4dd�Z5dd�Z6e6�Z7dd�Z8Gdd�dej9�Z:Gdd �d ej9�Z;Gd!d"�d"e;�Z<Gd#d$�d$ej9�Z=Gd%d&�d&ej9�Z>Gd'd(�d(ej9�Z?Gd)d*�d*e@�ZAe�Be7d+�Gd,d-�d-eAej9��ZCe�Be*d.�Gd/d0�d0eAej9��ZDGd1d2�d2ej9�ZEGd3d4�d4ej9�ZFeGd5k�r�e�H�dS)8�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�2Z_SRCZ_DST�darwin�ZaixTFcOstttdd�d��dS)NZEXDEV�zInvalid cross-device link)�OSError�getattr�errno��args�kwargs�r�5/opt/alt/python38/lib64/python3.8/test/test_shutil.py�_fake_rename4srcst����fdd��}|S)Ncs(ztj}tt_�||�W�S|t_XdS�N)�os�renamer)rrZbuiltin_rename��funcrr�wrap9s
zmock_rename.<locals>.wrap)�	functools�wraps)r"r#rr!r�mock_rename8sr&c	CsBt|t�rtjj|�}t||r"dnd��}|�|�W5QRXdS)N�wb�w)�
isinstance�tupler�path�join�open�write)r+Zcontent�binary�fprrr�
write_fileCs
r1c	Cs^dd�}t|d�}d�dd�t|�D��}t|d�� }|||�D]}|�|�q@W5QRXdS)Ncss&||kr|V||8}q|r"|VdSrr)�total�steprrr�chunksQs

zwrite_test_file.<locals>.chunksi �cSsg|]}t�tj����qSr)�randomZchoice�stringZ
ascii_letters�encode)�.0�irrr�
<listcomp>Zs�z#write_test_file.<locals>.<listcomp>r')�minr,�ranger-r.)r+�sizer4�bufsize�chunk�fZcsizerrr�write_test_fileOs

�rBc
CsHt|t�rtjj|�}t||r"dnd��}|��W5QR�SQRXdS)N�rb�r)r)r*rr+r,r-�read)r+r/r0rrr�	read_fileas
rFcCs|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�nrrrrMmsrMc
Csttd�sdSd}d}z�tjddd��}|j}|�d�W5QRXt|d���}tjddd��|}|j}|�	�}|�	�}zt�
||dd�Wn.tk
r�YW5QR�W5QR�W�:dSXW5QR�W5QR�W�d	SW5QRXW5QRXW5|dk	�rt�|�|dk	�rt�|�XdS)
N�sendfileFr'��deletes
0123456789rCr�T)�hasattrrr�unlink�tempfile�NamedTemporaryFilerOr.r-�filenorRr)�srcname�dstnamerA�src�dstZinfdZoutfdrrr�supports_file2file_sendfileys,
 4


r_cCsJtrBtjdkrBt�dtj�}|�d�d��d}t|d�dkSdSdS)	Ni���z/usr/bin/dump -o %s�
�����i T)�AIX�sys�maxsize�
subprocessZ	getoutput�
executable�split�int)ZhdrsZmaxdatarrr�
_maxdataOK�s
rkcs�eZdZ�fdd�Z�fdd�Zdd�Zdd�Zejd	d
��Z	ejdd��Z
e�e
d
�dd��Ze�e
d
�dd��Zdd�Ze�ejdd�dkd�e�eed�o�e��dkd�dd���Zdd�Zdd �Zejd!d"��Ze�eed#�d$�ejd%d&���Ze�eed#�d'�ejd(d)���Zejd*d+��Ze�eed,��oLeed-��oLeed.�d/�d0d1��Zej d2d3��Z!ejej e�eed��o�e��dkd4�d5d6����Z"ejd7d8��Z#ejd9d:��Z$ej d;d<��Z%ejd=d>��Z&d?d@�Z'dAdB�Z(dCdD�Z)dEdF�Z*ejdGdH��Z+dIdJ�Z,dKdL�Z-dMdN�Z.ej/�0dO�dPdQ��Z1dRdS�Z2e�eedT�dU�dVdW��Z3ejdXdY��Z4ejdZd[��Z5e�e
d
�d\d]��Z6e�eed^�d_�d`da��Z7e�eed^�d_�ejdbdc���Z8ddde�Z9ejdfdg��Z:ejdhdi��Z;djdk�Z<dldm�Z=e�eedn�do�dpdq��Z>ej?drds��Z@dtdu�ZAd�dwdx�ZBej?e�eC�Ddy�dz�d{d|���ZEej?d}d~��ZFej?e�eC�Dd�d��d�d����ZGej?e�eC�Dd��d��d�d����ZHd�d��ZIej?d�d���ZJej?e�eKd��d�d����ZLd�d��ZMd�d��ZNej?d�d���ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTej?d�d���ZUejVd�d���ZWejXe�eY�o<eZ�d��d�d����Z[ej?d�d���Z\d�d��Z]e�eeCd��d��d�d���Z^e�eKd��e�eed��d��d�d����Z_d�d��Z`d�d��Zad�d��Zbd�d��Zcd�d��Zd�ZeS)��
TestShutilcstt|���g|_dSr)�superrl�setUp�tempdirs��self��	__class__rrrn�szTestShutil.setUpcs6tt|���|jr2|j��}t�|tjdk�qdS)N)�nt�cygwin)	rmrl�tearDownro�pop�shutil�rmtreerrO�rq�drrrrrv�s
zTestShutil.tearDowncCs:d}tjdkrtj�t���}tj|d�}|j�	|�|S)N�win32��dir)
re�platformrr+�realpath�getcwdrX�mkdtemprorL)rq�basedirr{rrrr��s
zTestShutil.mkdtempcCsX|��}tj�|d�}t�|�ttj�|d�d�t�|�}|�|t�t	�
|�dS)NZkillmeZsomefile�foo)r�rr+r,�mkdirr1�fsencode�assertIsInstance�bytesrxry)rq�tmpZvictimrrr�test_rmtree_works_on_bytes�s

z%TestShutil.test_rmtree_works_on_bytescs�|��}tj�|d�}t�|�tj�|d�}t�||�|�ttj	|�|�
tj�|��|�
tj�|��g��fdd�}tj	||d�|�
t��d�|��ddtjj�|�
�dd|�|��dddt�dS)	Nr~�linkcs��|�dSr�rL�r��errorsrr�onerror�sz8TestShutil.test_rmtree_fails_on_symlink.<locals>.onerror�r�rbrrU)r�rr+r,r��symlink�assertRaisesrrxry�
assertTrue�exists�lexists�assertEqual�len�assertIsrKr��rqr�Zdir_r�r�rr�r�test_rmtree_fails_on_symlink�s
z'TestShutil.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)r�rr+r,r�r1r�rxry�assertFalser�r��
rqr�r�r�r�r{r�r�r�r�rrr�test_rmtree_works_on_symlinks�s$

z(TestShutil.test_rmtree_works_on_symlinkszonly relevant on Windowscs�|��}tj�|d�}t�|�tj�|d�}t�||�|�tt	j
|�|�tj�|��|�tj�
|��g��fdd�}t	j
||d�|�t��d�|��ddtjj�|��dd|�|��dddt�dS)	Nr~r�cs��|�dSrr�r�r�rrr��sz:TestShutil.test_rmtree_fails_on_junctions.<locals>.onerrorr�rbrrU)r�rr+r,r��_winapi�CreateJunctionr�rrxryr�r�r�r�r�r�rKr�r�rr�r�test_rmtree_fails_on_junctions�s
z)TestShutil.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�)
r�rr+r,r�r1r�r�rxryr�r�r�r�rrr�test_rmtree_works_on_junctionss$

z)TestShutil.test_rmtree_works_on_junctionsc	s�t��}|�ttj|�tj|dd�|��}t|dfd�tj	�
|d�}|�t��}t�|�W5QRX|tj	�
|d�g}|�|j
j|�|�tj	�|��tj|dd�|�tj	�|��g��fdd�}tj||d�|�t��d	�|��d
d
tj�|��d
d|�|��d
d	dt�|��d
d	dj|�|��dd
tj�|��dd|�|��dd	dt�|��dd	dj|�dS)NT��
ignore_errorsZtstfile�z*.*cs��|�dSrr�r�r�rrr�.sz.TestShutil.test_rmtree_errors.<locals>.onerrorr�rUrrb)rX�mktempr��FileNotFoundErrorrxryr�r1rr+r,�NotADirectoryError�assertIn�	exception�filenamer�r�r�r�r��scandirr��rmdir)rqr��tmpdir�cmZ
possible_argsr�rr�r�test_rmtree_errorss2zTestShutil.test_rmtree_errorsN�ruz2This 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.)�
errorStaterr�r�
addCleanuprxryr+r,�child_file_path�child_dir_pathr�create_empty_file�stat�st_mode�S_IREAD�S_IEXEC�chmod�check_args_to_onerrorr�)rqZold_dir_modeZold_child_file_modeZold_child_dir_modeZnew_moderrr�
test_on_error<s*

�zTestShutil.test_on_errorcCs�|jdkr�|tjkr$|�||j�n:|tjkr>|�||j�n |�|tj�|�	|t
|jg�|�t|dt
��|jd7_n4|�|tj�|�|t
�|�t|dt
��d|_dS)NrUrrbr)r�rrWr�r�r�r�r�rIr�rr��
issubclassr)rqr"�arg�excrrrr�[s


z TestShutil.check_args_to_onerrorcsLz>tj��fdd�}|t_t�t�ttdfd�t�t�W5�t_XdS)Ncs|tkrt��n�|�SdSr)rr)�fnrr�Z
orig_lstatrr�raiseryszFTestShutil.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiserr�)r�lstatr�rr1rxry)rqr�rr�r�+test_rmtree_does_not_choke_on_failing_lstatvs
z6TestShutil.test_rmtree_does_not_choke_on_failing_lstatcCs�|��}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�quuxrt)r�rr+r,r1r�r�r��S_IRWXU�S_IRWXG�S_IRWXO�assertNotEqualr�rx�copymoder�rO�rq�tmp_dirr]r^�src_link�dst_linkrrr�test_copymode_follow_symlinks�s0

z(TestShutil.test_copymode_follow_symlinks�lchmodzrequires 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�Nr�r�r�r�F��follow_symlinks)r�rr+r,r1r�r�r�r�r�r�r�rxr�r�r�r�r�r�rrr� test_copymode_symlink_to_symlink�s0


�z+TestShutil.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�dSr�)r�rr+r,r1r�rxr�r�rrr�*test_copymode_symlink_to_symlink_wo_lchmod�s

z5TestShutil.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�|�}tjtjk�rpdD]"}	|�t||	�t||	�d
��qLttd��r�|�|j|j�ttd��r�t|d��r�|�|j|j�tj||dd
�|�tt�|�jt�|�j�dk�dS)Nr�r�r��quxgE@r��lchflags�	UF_NODUMPTr�F��st_atime�st_mtimerb�st_flagsg�������?)r�rr+r,r1r��utimer�r�r�r�rVr�r�r�r�r�rx�copystatr��supports_follow_symlinks�assertLessEqualrr�r�r��abs)
rqr�r]r^r�r��src_stat�
src_link_statZ
dst_link_stat�attrrrr�test_copystat_symlinks�sJ


�



��z!TestShutil.test_copystat_symlinks�chflags�
EOPNOTSUPP�ENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcCs�|��}tj�|d�}tj�|d�}t|d�t|d�dd�}tj}zPtjtjfD]}||�t_t	�
||�qT|tjtj�t_|�tt	j
||�W5|t_XdS)Nr��file2�xxxcst��dd���fdd�
}|S)NTr�cs��_��dSr)r)r+�flagsr���errZexrr�_chflags_raiser	sznTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser�r)r�r�rr�r�make_chflags_raiserszUTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser)
r�rr+r,r1r�rr�r�rxr�r�r)rqr�r�r�r�Zold_chflagsr�rrr�-test_copystat_handles_harmless_chflags_errors�s


z8TestShutil.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	�}z.tj�|t_t��|�|�dt�
|��W5�t_Xd
d���fdd
�
}ztj
�|t_
t��|�W5�t_
Xtj�|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)Nr�r��user.foo�42zuser.bar�43�EPERMcs"|dkr��n�|||f|�dS)Nrr)�fnamer��valr)�
orig_setxattr�os_errorrr�_raise_on_user_foo/sz5TestShutil.test_copyxattr.<locals>._raise_on_user_fooTr�cs |�krttjd���||d�S)NzOperation not supportedr�)rrr�)rr�)�orig_listxattrr]rr�
_raise_on_src<sz0TestShutil.test_copyxattr.<locals>._raise_on_srcZthe_originalZthe_original_rozuser.the_valuesfiddlyi$Zthe_copyZthe_copy_ro)r�rr+r,r1rx�
_copyxattr�setxattrr�rH�	listxattr�getxattr�removerrrr�r�r�)rqr�r^rr
ZsrcroZdstror)r	rrr]r�test_copyxattrsZ

 

�





zTestShutil.test_copyxattr�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)
Nr�r�ztrusted.foorrFr�r�r�)
r�rr+r,r1r�rrxrr�rr�r)rqr�r]r�r^r�rrr�test_copyxattr_symlinksXs 

z"TestShutil.test_copyxattr_symlinkscCs|��}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)Nr�r�r�r�Tr�F)r�rr+r,r1r�rVr�r�r�r�rx�copyr�rKr�rFrr��readlinkr�r�)rqr�r]r^r�rrr�test_copy_symlinksqs&



�zTestShutil.test_copy_symlinksc	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�
|�}tjtjk�rVd
D]"}|�t||�t||�d��q2ttd��r�|�|j|j�|�|j|j�ttd��r�t|d��r�|�|j|j�dS)
Nr�r�r�r�r�r�Tr�Fr�rbr�)r�rr+r,r1r�rVr�r�r�r�r�r�r�rx�copy2r�rKr�rFrr�rr�r�r�rr�r�r�)	rqr�r]r^r�r�r��dst_statr�rrr�test_copy2_symlinks�s<





�zTestShutil.test_copy2_symlinkscCsr|��}tj�|d�}tj�|d�}t|d�t�|dd�t�||�|�t�	|d�t�	|d��t�
|�dS)Nr�r�rr)r�rr+r,r1rrxrr�rr)rqr�r]r^rrr�test_copy2_xattr�s


�zTestShutil.test_copy2_xattrcCs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t�||�tj||dd�|�tj�	|��|�
t�|�t�|��t�||�|�tj�	|��dS)Nr]r^r�r�r�Fr�)
r�rr+r,r1r�rx�copyfiler�rKr�rr�)rqr�r]r^r�r�rrr�test_copyfile_symlinks�s
z!TestShutil.test_copyfile_symlinkscs�tjtjtjtjhtjko0tjtjko0tjtjk}|r�|�	t
j�|�	t
jj
�|��}tj�|d�}t�|�z<t
j}Gdd�dt���fdd�}|t
_|��t
j|�W5|t
_Xn|�t
j�|�t
jj
�dS)Nr�c@seZdZdS)zHTestShutil.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)�__name__�
__module__�__qualname__rrrr�Called�srcs��dSrrr�rrr�_raiser�szITestShutil.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser)rr-r�rWr��supports_dir_fdrI�supports_fdr�r�rx�_use_fd_functionsryZavoids_symlink_attacksr�r+r,r�Z_rmtree_safe_fd�	Exceptionr�r�)rqr$r�r{Zreal_rmtreer!rr r�-test_rmtree_uses_safe_fd_version_if_available�s,�
�
�

z8TestShutil.test_rmtree_uses_safe_fd_version_if_availablecCs4t��\}}t�|�|�ttj|�t�|�dSr)	rXZmkstempr�closer�r�rxryr)rqZhandler+rrr�test_rmtree_dont_delete_file�s
z'TestShutil.test_rmtree_dont_delete_filec	Cst��}tj�t��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)rXr�rr+r,r�rxry�dirnamer1r��copytreer��isfilerJrFr��rq�src_dir�dst_dir�actualrrr�test_copytree_simple�s"�zTestShutil.test_copytree_simplec	CsDt��}t��}|�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�W5QRXdS)
Nznonexisting.txtr+Zexisting_dirzexisting.txtzwill be replacedzhas been replacedT)Z
dirs_exist_okF)rXr�r�rxryr1rr�r+r,r/r�r0rJrFr�r��FileExistsErrorr1rrr�test_copytree_dirs_exist_ok�s*�z&TestShutil.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)Nr]r^�subzfile.txtr�r�zsub/linkr�r�r�T�Zsymlinksrtz\\?\�)r�rr+r,r�r1r�rVr�r�r�r�r�r�r�rxr/r�rKrrO�
startswithr�r�r�)
rqr�r2r3Zsub_dirr�r�r�r4rrrr�test_copytree_symlinkss8

�


z!TestShutil.test_copytree_symlinkscCs$tjj}tjj}t��}�z�|t��d�}t	|dfd�t	|dfd�t�
||d��t	|ddfd�t�
||d��t	|ddfd�t�
||dd��t�
||dd	��t	|dddfd�t	|dd	d
fd�z\t�dd�}tj|||d�|�
|||d���|�|||d���|�|||d���W5t�|�Xz`t�dd
�}tj|||d�|�|||d���|�|||dd	���|�|||dd���W5t�|�XzJdd�}tj|||d�|�|||dd	d
���|�|||dd���W5t�|�XW5t�|�t�tj�|��XdS)Nr)r*r+ztest.tmpr,r-Z	test_dir2�subdirZsubdir2ztest.pyz*.tmp��ignorezsubdir*cSsfg}|D]X}tj�||�}tj�|�rB|��ddkrB|�|�qtj�|�ddkr|�|�q|S)Nrar=z.py)rr+r,rJrirL�splitext)r]�namesrNrOr+rrr�_filter\s�z6TestShutil.test_copytree_with_exclude.<locals>._filter)rr+r,r�rXr�rxryr.r1r��ignore_patternsr/r�r�)rqr,r�r2r3ZpatternsrBrrr�test_copytree_with_exclude4sN�
z%TestShutil.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)rLr��str�listr�r��set)r]rArO�Zinvokationsrqrr�_ignore�s
z=TestShutil.test_copytree_arg_types_of_ignore.<locals>._ignorer)r>r�	)rr+r,r�r�r�r1rxr/r��pathlib�PathrGr�r��DirEntryr�r�)rqr,r�r�r2rJr3Z
src_dir_entryrrIr�!test_copytree_arg_types_of_ignoreus8
	���z,TestShutil.test_copytree_arg_types_of_ignorec	Csjt��}tj�|d�}t�|�tj�|d�}|�tj|�t�	|d�t
|dfd�t�	tj�|d�d�t
|dfd�t�	tj�|d�d�tj|d	�}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)NrEr)i�zpermissive.txtr+zrestrictive.txtr-i�r}rb)rXr�rr+r,r�r�rxryr�r1r/r�r�r�ri)rqr�r2r3Zrestrictive_subdirZrestrictive_subdir_dstrrr�!test_copytree_retains_permissions�s4
���
�z,TestShutil.test_copytree_retains_permissionszos.chmodc	Cspt��}tj�t��d�}|�tj|�|�tjtj�|��t	d�|_
|�tj��t�
||�W5QRXdS)Nr)zka-boom)rXr�rr+r,r�rxryr.�PermissionError�side_effectr�rr/)rqZ
mock_patchr2r3rrr�test_copytree_winerror�s
z!TestShutil.test_copytree_winerrorc	s�����fdd�}g�t�����tj��t�����tj��ttj�	�d�d��}|�
�W5QRXtj��|d���
t��d�dS)NcsR��d���|t���|t���|tj��d����|tj��d��dS�Nr�)rLr�rFr�rr+r,)r�r��r^�flagrqr]rr�custom_cpfun�s

zCTestShutil.test_copytree_custom_copy_function.<locals>.custom_cpfunr�r(�Z
copy_functionrb)rXr�r�rryr�r-rr+r,r'rxr/r�r�)rqrWrArrUr�"test_copytree_custom_copy_function�sz-TestShutil.test_copytree_custom_copy_functionr�zrequires os.linkc
Cs�t�t�tj�td�}tj�td�}z�t|d��}|�d�W5QRXzt�	||�Wn0t
k
r�}z|�d|�W5d}~XYnX|�tj
tj||�t|d��}|�|��d�W5QRXt�|�W5tjtdd�XdS)	N�cheese�shopTr�r(�cheddarz
os.link(): %srD)rr�rr+r,rxryr-r.r�rQ�skipTestr�rrr�rEr)rqr]r^rA�errr�'test_dont_copy_file_onto_link_to_itself�s
 z2TestShutil.test_dont_copy_file_onto_link_to_itselfc
Cs�t�t�tj�td�}tj�td�}ztt|d��}|�d�W5QRXt�	d|�|�
tjtj||�t|d��}|�
|��d�W5QRXt�|�W5tjtdd�XdS)NrZr[Tr�r(r\rD)rr�rr+r,rxryr-r.r�r�rrr�rEr)rqr]r^rArrr�*test_dont_copy_file_onto_symlink_to_itself�s
z5TestShutil.test_dont_copy_file_onto_symlink_to_itselfc
Cstt�t�zTtj�td�}tj�td�}t�|�t�||�|�t	tj|�tj|dd�W5tjtdd�XdS)NTr�rZr[)
rr�rrxryr+r,r�r�r�rqr]r^rrr�test_rmtree_on_symlinks

z!TestShutil.test_rmtree_on_symlinkc
Cs�t�t�zltj�td�}tj�td�}t�|�ttj�|d�d���t	�
||�|�ttj|�tj|dd�W5tjtdd�XdS)NTr�rZr[Zspamr')
rr�rrxryr+r,r-r'r�r�r�rrarrr�test_rmtree_on_junctions

z"TestShutil.test_rmtree_on_junction�mkfifozrequires os.mkfifo()c
Cs~zt�t�Wn0tk
r>}z|�d|�W5d}~XYnXz,|�tjtj	tt
�|�tjtj	tt�W5t�t�XdS)N�os.mkfifo(): %s)rrdrrQr]rr�rx�SpecialFileErrorr�TESTFN2�__file__)rqr^rrr�test_copyfile_named_pipes  ��z#TestShutil.test_copyfile_named_pipec
Cst�t�z�tj�td�}t�|�tj�|d�}zt�|�Wn0t	k
rp}z|�
d|�W5d}~XYnXzt�tt�Wn\tjk
r�}z<|j
d}|�t|�d�|d\}}}|�d||�W5d}~XYnX|�d	�W5tjtdd�tjtdd�XdS)
NTr�r=Zmypipererrbz`%s` is a named pipez$shutil.Error should have been raised)rr�rrxryrgr+r,rdrQr]r/rrr�r��fail)rqr=�piper^r�r]r^Z	error_msgrrr�test_copytree_named_pipe-s&

 
"z#TestShutil.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��r]r^�Zcopiedrr�_copyOsz4TestShutil.test_copytree_special_func.<locals>._copyrXrU)
r�rr+r,r1r�rxr/r�r�)rqr2r3rorrnr�test_copytree_special_funcFsz%TestShutil.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)Zignore_dangling_symlinksZdestination3r9)r�rr+r,r�r�r1r�rrxr/�assertNotInrIr��rqr2r3rrr�test_copytree_dangling_symlinksUsz*TestShutil.test_copytree_dangling_symlinksc	Cs|��}tj�|��d�}t�tj�|d��ttj�|dd�d��W5QRXtjtj�|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)Ztarget_is_directoryFr9rq)r�rr+r,r�r-r�rxr/r�rKr�rIr�rsrrr�test_copytree_symlink_dirjs 
�z$TestShutil.test_copytree_symlink_dircCsPd}|��}t||fd�tj�||�}|��}|||�tj�||�}||fS)Nr*r�)r�r1rr+r,)rq�methodrr�r��tmpdir2r�rrr�
_copy_file~s
zTestShutil._copy_filecCsB|�tj�\}}|�tj�|��|�t�|�j	t�|�j	�dSr)
rxrxrr�rr+r�r�r�r�)rqr�r�rrr�	test_copy�szTestShutil.test_copyr�zrequires os.utimecCs�|�tj�\}}|�tj�|��t�|�}t�|�}|�|j	|j	�dD] }|�
t||�t||�d�qJttd�r�t|d�r�|�t|d�t|d��dS)Nr�rbr�r�)
rxrxrr�rr+r�r�r�r�r�rrV)rqr�r�Z
file1_statZ
file2_statr�rrr�
test_copy2�s

��zTestShutil.test_copy2c	
Csf|�d�\}}|��}t�|�tj�|�}tj�tj�|�d�}t�	|�� tj�
|�}t|d|d�}W5QRX|�||d�|�
tj�|��|�
t�|��t�|d��"}|�|��dddd	d
dg�W5QRXt�	|��t|d|d�}W5QRX|�||d
�|�
tj�|��|�
t�|��t�|d��"}|�|��dddd	d
dg�W5QRXdS)Nr��archive�gztar�.�.tar.gzzr:gzz./subz./sub2z./file1z./file2z./sub/file3�tar�.tarrD)�
_create_filesr�rr�r+r.r,�basenamer�
change_cwd�abspathrr�r�r0�tarfileZ
is_tarfiler-�assertCountEqual�getnames)	rq�root_dir�base_dirrw�work_dir�
rel_base_name�	base_name�tarballZtfrrr�test_make_tarball�s@

��
��zTestShutil.test_make_tarballc
Cs:t�|��&}|��}|��t|�W5QR�SQRXdSr)r�r-r��sortr*)rqr+rrArrr�_tarinfo�szTestShutil._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�r�r�r8Zfile3Zsub2�outer)r�rr+r,�makedirsr1r�)rqr�r�r�rrrr��szTestShutil._create_filesrzNeed 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.tarrz-cf��cwd�stdoutr�T)Zdry_run)
r�rr+r,r�rr�r�r0rg�
check_call�DEVNULLr�)rqr�r�r�r�Ztarball2Ztar_cmdrrr�test_tarfile_vs_tar�s(�
�zTestShutil.test_tarfile_vs_tarc	Csl|��\}}|��}t�|�tj�|�}tj�tj�|�d�}t�	|��tj�
|�}t|d|�}W5QRX|�||d�|�
tj�|��|�
t�|��t�|��$}|�|��dddddd	d
g�W5QRXt�	|�� tj�
|�}t|d||�}W5QRX|�||d�|�
tj�|��|�
t�|��t�|��"}|�|��dddddd	g�W5QRXdS)Nr{�zip�.zipzdist/z	dist/sub/z
dist/sub2/z
dist/file1z
dist/file2zdist/sub/file3r�)r�r�rr�r+r.r,r�rr�r�rr�r�r0�zipfileZ
is_zipfile�ZipFiler��namelist)	rqr�r�rwr�r�r�rN�zfrrr�test_make_zipfile�sD

��
��zTestShutil.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�
|��}|��}W5QRXt�
|��}|��}	W5QRX|�t|�t|	��dS)Nr{r�r�zarchive2.zipz-qz-rr�)r�rr+r,r�rr�r�r0rgr�r�r�r�r�rH)
rqr�r�r�r{Zarchive2�zip_cmdr�rAZnames2rrr�test_zipfile_vs_zips �zTestShutil.test_zipfile_vs_zip�unzipzNeed the unzip command to runc	Cs�|��\}}tj�|��d�}t|d||�}|�||d�|�tj�|��dd|g}t	�
|��vztj|tj
d�WnZtjk
r�}z:|jjdd�}d	|kr�|�d
�d}|�|�||��W5d}~XYnXW5QRXdS)Nr{r�r�r�z-t)�stderr�replacer�zunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})r�rr+r,r�rr�r�r0rr�rg�check_outputZSTDOUT�CalledProcessError�output�decoder]rj�format)	rqr�r�r�r{r�r�Zdetails�msgrrr�test_unzip_zipfile7s

zTestShutil.test_unzip_zipfilecCs*|��}tj�|d�}|�tt|d�dS)Nr{r�)r�rr+r,r��
ValueErrorr)rqr�r�rrr�test_make_archiveOszTestShutil.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�grouprZ	kjhkjhkjgZoihohoh)
�UID_GID_SUPPORT�grp�getgrgid�pwd�getpwuidr�rr+r,r�rr�r0)rqr�r�r�r�r�rNrrr�test_make_archive_owner_groupTs,�
�
�z(TestShutil.test_make_archive_owner_groupzRequires grp and pwd supportc		Cs�|��\}}tj�|��d�}t�d�d}t�d�d}t	�
|��t|d|d||d�}W5QRX|�tj�
|��t�|�}z.|��D] }|�|jd�|�|jd�q�W5|��XdS)Nr{rr|r�r�)r�rr+r,r�r�r�r�r�rr�rr�r0r�r-r'Z
getmembersr��uid�gid)	rqr�r�r�r�r�Zarchive_namer{�memberrrr�test_tarfile_root_ownerps 
�
z"TestShutil.test_tarfile_root_ownercCsnt��}dd�}td|gd�z@ztdd|��d�Wntk
rJYnX|�t��|�W5td�XdS)Nc_s
t��dSr)�RuntimeError)r�kwrrr�_breaks�sz1TestShutil.test_make_archive_cwd.<locals>._breaksr��xxx file)r�)rr�rrrr�r%r�)rqZcurrent_dirr�rrr�test_make_archive_cwd�sz TestShutil.test_make_archive_cwdc	CsF|��}t�|��*|�tdd�d�|�tj�d��W5QRXdS)N�testrztest.tar�	r�rr�r�rr�rr+r0�rqr�rrr�test_make_tarfile_in_curdir�sz&TestShutil.test_make_tarfile_in_curdirc	CsF|��}t�|��*|�tdd�d�|�tj�d��W5QRXdS)Nr�r�ztest.zipr�r�rrr�test_make_zipfile_in_curdir�sz&TestShutil.test_make_zipfile_in_curdircCs�|�ttdd�|�ttddd�d�|�ttddd�ddg�tddd�dgd	�d
d�t�D�}|�d|�td�dd�t�D�}|�d|�dS)
Nr�rbcSstSr��xrrrr�<lambda>�r5z9TestShutil.test_register_archive_format.<locals>.<lambda>cSstSrr�rrrrr��r5)rbrU)rbrUrcSstSrr�rrrrr��r5r�cSsg|]\}}|�qSrr�r9rOZparamsrrrr;�sz;TestShutil.test_register_archive_format.<locals>.<listcomp>cSsg|]\}}|�qSrrr�rrrr;�s)r��	TypeErrorrrr�rrr)rq�formatsrrr�test_register_archive_format�s��z'TestShutil.test_register_archive_formatcKs:|j|dd�f|�|j|tjf|�|j|tf|�dS)NcSs|Srr�r+rrrr��r5z1TestShutil.check_unpack_archive.<locals>.<lambda>)�#check_unpack_archive_with_converterrLrMr)rqr�rrrr�check_unpack_archive�s����zTestShutil.check_unpack_archivec	Ks�|��\}}t|�}|�d�tj�|��d�}t||||�}|��}	t||�||	�f|�|�	t|	�|�|��}
t||�||
�fd|i|��|�	t|
�|�|�
tj��t|t
�f|�W5QRX|�
t��t|t
�fddi|��W5QRXdS)Nr�r{r�r�)r�rMrrr+r,r�rrr�r�rxZ	ReadErrorrr�)rqr�Z	converterrr�r��expectedr�r�rwZtmpdir3rrrr��s"
�z.TestShutil.check_unpack_archive_with_converterc	Cs@|j|dd�|j|dd�t�|��|�|�W5QRXdS)NZ
fully_trusted��filter�data)r�rZcheck_no_warnings)rqr�rrr�check_unpack_tarball�szTestShutil.check_unpack_tarballcCs|�d�dS)Nr�r�rprrr�test_unpack_archive_tar�sz"TestShutil.test_unpack_archive_tarcCs|�d�dS)Nr|r�rprrr�test_unpack_archive_gztar�sz$TestShutil.test_unpack_archive_gztarcCs|�d�dS)NZbztarr�rprrr�test_unpack_archive_bztar�sz$TestShutil.test_unpack_archive_bztarz(AIX MAXDATA must be 0x20000000 or largercCs|�d�dS)NZxztarr�rprrr�test_unpack_archive_xztar�sz$TestShutil.test_unpack_archive_xztarc	Cs2|�d�|�t��|jddd�W5QRXdS)Nr�r�r�)r�r�r�rprrr�test_unpack_archive_zip�s
z"TestShutil.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)Nrb�	stuff.boo�xx)r�)r�Zextract_dir�extrarprr�_boo�sz-TestShutil.test_unpack_registry.<locals>._booZBooz.booz.b2)r�rbr�r�ZBoo2r�)	rrrr�r	r
r�rrr�)rqr�r�rrpr�test_unpack_registry�s

�zTestShutil.test_unpack_registry�
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)r2�used�freer)rxr�rr+r.rhr�rrjZ
assertGreaterr2r��assertGreaterEqualr�)rqZusager�rrr�test_disk_usageszTestShutil.test_disk_usage�chownzrequires os.chownc	s���}tj|d��t�d���t��t���W5QRX��t��tj�dd�W5QRX��t��tj�dd�W5QRX��t	��t��d�W5QRX��t	��t��d�W5QRXt
��}t
��}d
��fd	d
�	}t��||�|�||�t��|�|�|�tj�|d�|�|�tj�|d�|�|d�t�|||�||||�t�||�|||�tj||d�|||�tj||d�|||d�t
�|�d}t�|�d}t��||�|�||�t�|||�||||�dS)Nr}ztesting chown functionznon-existing username)�userznon-existing groupname)r��spamg��Q�	@cs:t���}|dk	r ��||j�|dk	r6��||j�dSr)rr�r��st_uid�st_gid)r+r�r��s�r�rqrr�check_chown6s

z*TestShutil.test_chown.<locals>.check_chown)r�r)NN)r�rXr�r1r�r�rxr��LookupErrorr�r�getuid�getgidr�r�r�r�)rqr.r�r�r�r�r�rr�r�
test_chownsL




zTestShutil.test_chowncCs�tjtjfD]v}|��}|��}tj�|d�}t|d�|||�}|�|tj�|d��||tj�|d��}|�|tj�|d��qdS)Nr�r�)	rxrrr�rr+r,r1r�)rqr�r2r3r]�rvrrr�test_copy_return_valueVs

z!TestShutil.test_copy_return_valuecCsl|��}|��}tj�|d�}tj�|d�}t|d�t�||�}|�tj�|��|�	t
|�t
|��dS)Nr�r�)r�rr+r,r1rxrr�r�r�rF)rqr2r3�dst_file�src_filer�rrr�test_copyfile_return_valuebs
z%TestShutil.test_copyfile_return_valuecCsX|��}tj�|d�}t|d�|�ttj||�|�t	tj||�|�
t|�d�dSrT)r�rr+r,r1r�rrxrrr�rF)rqr2r�rrr�test_copyfile_same_filems
z"TestShutil.test_copyfile_same_filecCs\|��}|d}|�tj|d�tj�|d�}t|d�t�||�}|�	dgt�
|��dS)N�destTr�)r�r�rxryrr+r,r1r/r�rI)rqr2r3r]r�rrr�test_copytree_return_valueys
z%TestShutil.test_copytree_return_valuecCs�|��}|jtj|dd�tj�|dd�}tj�|dd�}t�|�tj�|d�}t|d�t�	||�}|�
dgt�|��dS)NTr��tZpgZ
somevendorz1.0Zpol)r�r�rxryrr+r,r�r1r/r�rI)rqr�r2r3r]r�rrr�test_copytree_subdirectory�s

z%TestShutil.test_copytree_subdirectory)r�)frrrrnrvr�r�r�skip_unless_symlinkr�r��unittest�
skipUnlessr�r�r�r��skipIfrerrVrr�r�r�r�r�r�r�r�rr�Zskip_unless_xattrrrrrrrr&r(r5r7r<rDrOrP�mock�patchrSrYr_r`rbrcrirlrprtrurxryrzZ
requires_zlibr�r�r�rx�whichr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�Zrequires_bz2r�Z
requires_lzmardrkr�r�r�r�r�r�r�r�r�r��
__classcell__rrrrrrl�s&	





$��

(��

?�

"


A*














#
�
$��





�

9
rlc@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)*�	TestWhichcCs�tjdd�|_|�tj|jd�tj|jddd�|_t�	|jj
tj�|�|jj
�tj�|jj
�\|_|_|j|_tj|_d|_dS)NZTmp)�prefixTz.Exe�r~r�suffixz.EXE)rXr��temp_dirr�rxryrY�	temp_filerr�rOr��S_IXUSRr'r+rir~�file�env_path�curdir�extrprrrrn�s�zTestWhich.setUpcCs&tj|j|jd�}|�||jj�dS�Nr�)rxrrr~r�r
rO�rqr�rrr�
test_basic�szTestWhich.test_basiccCs(tj|jj|jd�}|�||jj�dSr)rxrr
rOr	r�rrrr�test_absolute_cmd�szTestWhich.test_absolute_cmdc	Cs�tj�|j�\}}tj�||j�}tj|d��"tj	||j
d�}|�||�W5QRXtj|jd��tj	||d�}|�|�W5QRXdSr)
rr+rir~r,rrr�rxrr	r��assertIsNone)rqr��tail_dir�relpathr�rrr�test_relative_cmd�szTestWhich.test_relative_cmdc	Csltj�|j�}tj|jd��Ftj|j|d�}t	j
dkrT|�|tj�|j
|j��n
|�|�W5QRXdS)Nr�r|)rr+r.r~rr�rxrrrerr�r,rr)rqr�r�rrr�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)rr�r
rOr�r��access�W_OKr]rxrrr~rrrrr�test_non_matching_mode�s

z TestWhich.test_non_matching_modec	CsVtj�|j�\}}tj|d��.tj|j|d�}|�	|tj�
||j��W5QRXdSr)rr+rir~rr�rxrrr�r,)rqr�rr�rrr�test_relative_path�szTestWhich.test_relative_pathcCstjd|jd�}|�|�dS)Nzfoo.exer�)rxrr~rrrrr�test_nonexistent_file�szTestWhich.test_nonexistent_filer|zpathext check is Windows-onlycCs<tj|jdd�|jd�}|�||jjdd�|j�dS)N���r�)rxrrr~r�r
rOrrrrr�test_pathext_checking�szTestWhich.test_pathext_checkingc	Cs>t���,}|j|d<t�|j�}|�||jj�W5QRXdS�N�PATH)	r�EnvironmentVarGuardr
rxrrr�r
rO�rq�envr�rrr�test_environ_path�s

zTestWhich.test_environ_pathcCs�t���x}d|d<tjjd|jdd��Pt�td|j��4t�|j��t	�
|j�}|�|�W5QRXW5QRXW5QRXW5QRXdS)Nr�r"�
os.confstrT��return_value�create�defpath)
rr#r�rrr~�	swap_attrrr�rxrrrr$rrr�test_environ_path_empty�s
��
�z!TestWhich.test_environ_path_emptycCs�tj�|jj�}tjdkrBtj}t|t	�r4t�
|�}tj�||�}t�
���}tj|d<tjjd|jdd��ht�td|j��Lt�|j�}|�|�t�|j��t�|j�}|�||�W5QRXW5QRXW5QRXW5QRXdS)Nr|r"r'Tr(r+)rr+r�r
rOrerrr)r�r�r,rr#�pathsepr�rrr~r,rxrrrr�r�)rqZexpected_cwdrr%r�rrr�test_environ_path_cwd�s$




��
zTestWhich.test_environ_path_cwdcCs�t����}|�dd�tjjdtdd��.t�td|j	��t
�|j�}W5QRXW5QRX|�
||jj�tjjd|j	dd��,t�tdd��t
�|j�}W5QRXW5QRX|�
||jj�W5QRXdS)Nr"r'T)rRr*r+r(r�)rr#rwr�rrr�r,rr~rxrrr�r
rOr$rrr�test_environ_path_missing	s 

�� �� z#TestWhich.test_environ_path_missingc
Csdtj�|j�}tj|jd��>t���*}|j|d<tj	|j
dd�}|�|�W5QRXW5QRXdS)Nr�r"r�)rr+r.r~rr�r#r
rxrrr)rqr�r%r�rrr�test_empty_paths�
zTestWhich.test_empty_pathc	Cs:t���(}|�dd�t�|j�}|�|�W5QRXdSr!)rr#rwrxrrrr$rrr�test_empty_path_no_PATH#s
z!TestWhich.test_empty_path_no_PATHztest specific to Windowsc	Cs�d}tj|jd|d�}t�|jtj�|�|j	�tj
�|j�}tj
�|�d}t
���,}||d<tj||jd�}|�||j�W5QRXdS)N�.xyz�Tmp2rr�PATHEXTr�)rXrYr	rr�rOr�rr�r'r+r�r@rr#rxrr��rqrZtemp_filexyzZprogramr%r�rrr�test_pathext)s�
zTestWhich.test_pathextc	Cs�d}tj|jd|d�}|�|j�tj�|j�}tj�	|�d}t
���2}|�d�|d<tj
||jd�}|�||j�W5QRXdS)Nr3r4rr�;r5r�)rXrYr	r�r'rr+r�rOr@rr#rxrr�r6rrr�test_pathext_with_empty_str;s�
z%TestWhich.test_pathext_with_empty_strN)rrrrnrrrrr�rrVrr�rrrr�rerr r&r-r/r0r1r2r7r9rrrrr�s2
�
�

rc@seZdZdd�ZdS)�TestWhichBytescCsXt�|�t�|j�|_t�|j�|_t�|jj�|j_t�|j�|_t�|j	�|_	dSr)
rrnrr�r~rr
rOrrrprrrrnMs
zTestWhichBytes.setUpN)rrrrnrrrrr:Lsr:c@sxeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	d
d��Z
e	dd��Zdd�Ze	dd��Z
dd�Ze	dd��Zdd�Ze�ejjd�dd��Zdd�Zd d!�Zd"d#�Zd$d%�Zeje	d&d'���Zeje	d(d)���Zeje	d*d+���Zeje	d,d-���Z d.d/�Z!d0d1�Z"e	d2d3��Z#e	d4d5��Z$e�e%ed6��ofe�&�d7k�ofe%ed8��ofe%e'd9��ofe%e'd:�d;�d<d=��Z(d>S)?�TestMovec	Cs�d}d}tjdkr"tj�t���}tj|d�|_tj|d�|_	tj�
|j|�|_tj�
|j	|�|_t
|jd��}|�d�W5QRXdS)Nr�r|r}r'r�)rerrr+r�r�rXr�r2r3r,r�r�r-r.)rqr�r�rArrrrnXs
zTestMove.setUpcCs6|j|jfD]$}z|r t�|�WqYqXqdSr)r2r3rxryrzrrrrvdszTestMove.tearDownc	Csft|d��}|��}W5QRXt�||�t|d��}|�||���W5QRX|�tj�|��dS�NrC)	r-rErx�mover�r�rr+r�)rqr]r^�real_dstrA�contentsrrr�_check_move_filelszTestMove._check_move_filecCsFtt�|��}t�||�|�|tt�|���|�tj�|��dSr)	rHrrIrxr=r�r�r+r�)rqr]r^r>r?rrr�_check_move_dirtszTestMove._check_move_dircCs|�|j|j|j�dSr)r@r�r�rprrr�test_move_filezszTestMove.test_move_filecCs|�|j|j|j�dSr)r@r�r3r�rprrr�test_move_file_to_dir~szTestMove.test_move_file_to_dircCs|��dSr)rBrprrr�test_move_file_other_fs�sz TestMove.test_move_file_other_fscCs|��dSr)rCrprrr�test_move_file_to_dir_other_fs�sz'TestMove.test_move_file_to_dir_other_fscCs@t��}z|�|j||�W5zt�|�WnYnXXdSr)rXr�rxryrAr2�rqr3rrr�
test_move_dir�szTestMove.test_move_dircCs|��dSr)rGrprrr�test_move_dir_other_fs�szTestMove.test_move_dir_other_fsc
Cs,|�|j|jtj�|jtj�|j���dSr)rAr2r3rr+r,r�rprrr�test_move_dir_to_dir�s�zTestMove.test_move_dir_to_dircCs|��dSr)rIrprrr�test_move_dir_to_dir_other_fs�sz&TestMove.test_move_dir_to_dir_other_fsc
Cs4|�|jtjj|jtj�|jtj�|j���dSr)rAr2rr+�sepr3r,r�rprrr�test_move_dir_sep_to_dir�s�z!TestMove.test_move_dir_sep_to_dirzrequires os.path.altsepc
Cs4|�|jtjj|jtj�|jtj�|j���dSr)rAr2rr+�altsepr3r,r�rprrr�test_move_dir_altsep_to_dir�s�z$TestMove.test_move_dir_altsep_to_dirc	Cs4t|jd��W5QRX|�tjtj|j|j�dS)Nr')r-r�r�rxrr=r�r3rprrr�"test_existing_file_inside_dest_dir�s
z+TestMove.test_existing_file_inside_dest_dircCs*tj�|jd�}|�tjtj|j|�dS�Nr�)rr+r,r2r�rxrr=�rqr^rrr�test_dont_move_dir_in_itself�sz%TestMove.test_dont_move_dir_in_itselfc
Cslt�t�zLdD]B\}}tj�t|�}tj�t|�}|jt�||�d||fd�qW5tjtdd�XdS)NTr�))�srcdirzsrcdir/destz?_destinsrc() wrongly concluded that dst (%s) is not in src (%s)�r�)	rr�rrxryr+r,r��
_destinsrcrarrr�test_destinsrc_false_negative�s
��z&TestMove.test_destinsrc_false_negativec
Cslt�t�zLdD]B\}}tj�t|�}tj�t|�}|jt�||�d||fd�qW5tjtdd�XdS)NTr�))rSzsrc/dest)rSz
srcdir.newz;_destinsrc() wrongly concluded that dst (%s) is in src (%s)rT)	rr�rrxryr+r,r�rUrarrr�test_destinsrc_false_positive�s
��z&TestMove.test_destinsrc_false_positivecCs\tj�|jd�}t�|j|�t�||j�|�	tj�
|j��|�	tj�|j|j��dSrP)rr+r,r2r�r�rxr=r�r�rK�samefilerQrrr�test_move_file_symlink�s
zTestMove.test_move_file_symlinkcCsld}tj�|j|�}t�|j|�t�||j�tj�|j|�}|�	tj�
|��|�	tj�|j|��dSrP)rr+r,r2r�r�rxr=r3r�rKrX)rqr�r^Z
final_linkrrr�test_move_file_symlink_to_dir�sz&TestMove.test_move_file_symlink_to_dircCsztj�|jd�}tj�|jd�}t�||�tj�|jd�}t�||�|�tj�	|��|�
tj�|�tj�|��dS�Nr�r�r�)rr+r,r2r�r3rxr=r�rKr�r��rqr]r^r�rrr�test_move_dangling_symlink�sz#TestMove.test_move_dangling_symlinkcCs|tj�|jd�}tj�|jd�}t�|�t�||�tj�|jd�}t�||�|�	tj�
|��|�	tj�||��dSr[)rr+r,r2r�r�r3rxr=r�rKrXr\rrr�test_move_dir_symlink�s
zTestMove.test_move_dir_symlinkc	Cs6t�|j|j�}|�|tj�|jtj�|j���dSr)	rxr=r�r3r�rr+r,r�rrrr�test_move_return_value�s�zTestMove.test_move_return_valuecCs6t�|jtj�|jd��}|�|tj�|jd��dSrP)rxr=r�rr+r,r3r�rrrr� test_move_as_rename_return_valuesz)TestMove.test_move_as_rename_return_valuecs8g��fdd�}tj|j|j|d�|�t��d�dS)Ncs��||f�dSrr�rm�Zmovedrrro	sz7TestMove.test_move_file_special_function.<locals>._copyrXrb)rxr=r�r3r�r��rqrorrar�test_move_file_special_functionsz(TestMove.test_move_file_special_functioncsdg��fdd�}t�tj�|jd��t�tj�|jd��tj|j|j|d�|�	t
��d�dS)Ncs��||f�dSrr�rmrarrrosz6TestMove.test_move_dir_special_function.<locals>._copy�childZchild1rXr)rr�rr+r,r2rxr=r3r�r�rbrrar�test_move_dir_special_functionsz'TestMove.test_move_dir_special_functionr�rr��SF_IMMUTABLE�	UF_OPAQUErc
Cs�z�t�
t�t�ttj�|�t
tjtt	�|�t	t��k�t�ttj�t�tj�td��t�ttj�|�t
tjtt	�|�t	t��k�W5tj�t�r�t�ttj�t�t�tj�t	�r�t�t	tj�t�t	�XdS)Nrd)rr+r��
TESTFN_SRCr�r�rgZ	os_helperry�
TESTFN_DSTr�rfr�rQrxr=r�rIr�r,rprrr�test_move_dir_permission_denieds 

z(TestMove.test_move_dir_permission_deniedN))rrrrnrvr@rArBrCr&rDrErGrHrIrJrLr�r�rr+rMrNrOrRrVrWrr�rYrZr]r^r_r`rcrerVr�r�rjrrrrr;Vsd




		



���r;c@s|eZdZdZGdd�de�Zdd�Zdd�Zdd	�Ze	�
ed
�dd��Ze	�
ed
�d
d��Z
e	�
ed
�dd��Zdd�ZdS)�TestCopyFileFc@s:eZdZdZdZdZddd�Zdd�Zdd	�Zd
d�Z	dS)
zTestCopyFile.FauxFNTcCs||_||_dSr)�_raise_in_exit�_suppress_at_exit)rqZ
raise_in_exitZsuppress_at_exitrrr�__init__DszTestCopyFile.Faux.__init__cGsdS)Nr�r)rqrrrrrEGszTestCopyFile.Faux.readcCs
d|_dS�NT)�_enteredrprrr�	__enter__IszTestCopyFile.Faux.__enter__cCs&|||f|_|jr d|_td��|jS)NT�Cannot close)�_exited_withrl�_raisedrrm)rq�exc_typeZexc_valZexc_tbrrr�__exit__Ks
zTestCopyFile.Faux.__exit__)FT)
rrrrprsrtrnrErqrvrrrr�Faux@s
rwcCs|jr
t`dSr)�_deleterxr-rprrrrvRszTestCopyFile.tearDowncCs|t_d|_dSro)rxr-rx)rqr"rrr�_set_shutil_openVszTestCopyFile._set_shutil_opencCs*ddd�}|�|�|�ttjdd�dS)NrDcSs|dkrtd��dS)N�srcfilezCannot open "srcfile"r��r�rrrr�_open[sz4TestCopyFile.test_w_source_open_fails.<locals>._openrz�destfile)rD)ryr�rrxr�rqr|rrr�test_w_source_open_failsZs

z%TestCopyFile.test_w_source_open_failszskipped on macOScsd|���d	�fdd�	}|�|�t�dd�|��j�|��jdtk�|��jdj	d�dS)
NrDcs |dkr�S|dkrtd��dS)Nrzr}�Cannot open "destfile"r�r{�rzrrr|is
z2TestCopyFile.test_w_dest_open_fails.<locals>._openrzr}rrb)r�)rD)
rwryrxrr�rprsrr�rr~rr�r�test_w_dest_open_failsds
�z#TestCopyFile.test_w_dest_open_failscs�|���|�d��d
��fdd�	}|�|�t�dd�|��j�|��j�|��j�|��jdtk�|�	�jdj
d	�dS)NTrDcs|dkr�S|dkr�SdS�Nrzr}rr{�r}rzrrr|~s
z3TestCopyFile.test_w_dest_close_fails.<locals>._openrzr}rrb)rr)rD)rwryrxrr�rprtrsrr�rr~rr�r�test_w_dest_close_failsxs

�z$TestCopyFile.test_w_dest_close_failscs�|�d��|���d��fdd�	}|�|�|�ttjdd�|��j�|��j�|��j	�|��j
ddk�|��j	�dS)	NTrDcs|dkr�S|dkr�SdSr�rr{r�rrr|�s
z5TestCopyFile.test_w_source_close_fails.<locals>._openrzr}r)rD)rwryr�rrxrr�rpr�rtrsr~rr�r�test_w_source_close_fails�s

�z&TestCopyFile.test_w_source_close_failsc	Cs�t��|_|�tj|jd�tj�tj�	|j�tj�
|j����}|�|j|�z$t�|j|�|�tj�|��W5t�
|�XdSro)rXr�r2r�rxryrr+r,r.r��upperr�r�r=r�rJrFrrr�test_move_dir_caseinsensitive�s
�z*TestCopyFile.test_move_dir_caseinsensitiveN)rrrrx�objectrwrvryrr�r�MACOSr�r�r�r�rrrrrk<s






rkc@sxeZdZdZedd��Zedd��Zdd�Zej	dd	��Z
d
d�Zdd
�Zdd�Z
dd�Ze�ejdkd�dd��ZdS)�TestCopyFileObji cCstt|j�dSr)rBr�FILESIZE��clsrrr�
setUpClass�szTestCopyFileObj.setUpClasscCst�t�t�t�dSr)rrWrrgr�rrr�
tearDownClass�s
zTestCopyFileObj.tearDownClasscCst�t�dSr�rrWrgrprrrrv�szTestCopyFileObj.tearDownc
cs:ttd��&}ttd��}||fVW5QRXW5QRXdS�NrCr'�r-rrgrarrr�	get_files�szTestCopyFileObj.get_filesc
CsDt|d��0}t|d��}|�|��|���W5QRXW5QRXdSr<)r-r�rE)rqr]r^�fsrc�fdstrrr�assert_files_eq�szTestCopyFileObj.assert_files_eqc	Cs4|���\}}t�||�W5QRX|�tt�dSr)r�rx�copyfileobjr�rrgrarrr�test_content�szTestCopyFileObj.test_contentc	Cs(|���\}}t�||�W5QRXdSr)r�rxr�rarrr�test_file_not_closed�sz$TestCopyFileObj.test_file_not_closedc	CsL|���:\}}t�||�|�|��|j�|�|��|j�W5QRXdSr)r�rxr�r��tellr�rarrr�test_file_offset�sz TestCopyFileObj.test_file_offsetrtzWindows onlyc	Cs
tj�d��}t�tt�W5QRX|�|jddd�t	j
dd��}|�d�W5QRX|j}|�
tj|�tj�d��}t�|t�W5QRX|�|jddd�t	j
dd��}W5QRX|j}|�
tj|�tj�d��}t�|t�W5QRX|�|t�dS)	Nzshutil._copyfileobj_readintorrUiFrSsfoor)r�rrrxrrrgr��	call_argsrXrYr.rOr�rrWr�)rq�mrArrrr�
test_win_impl�s"
zTestCopyFileObj.test_win_implN)rrrr��classmethodr�r�rv�
contextlib�contextmanagerr�r�r�r�r�r�rrrOr�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�r5r�c	Cs0tt|j�ttd��}|��|_W5QRXdSr<)rBrr�r-rE�FILEDATA)r�rArrrr�	s
z_ZeroCopyFileTest.setUpClasscCst�t�dSr)rrWrr�rrrr�	sz_ZeroCopyFileTest.tearDownClasscCst�t�dSrr�rprrrrv	sz_ZeroCopyFileTest.tearDownc
cs:ttd��&}ttd��}||fVW5QRXW5QRXdSr�r�rarrrr�	sz_ZeroCopyFileTest.get_filescOstd��dS)Nzmust be implemented in subclass)�NotImplementedError)rqrrrrr�zerocopy_fun	sz_ZeroCopyFileTest.zerocopy_funcCs$|��|��|��|��dSr)rvr�r�rnrprrr�reset	sz_ZeroCopyFileTest.resetc
Csz|���\}}|�||�W5QRX|�ttdd�|j�|���.\}}tj�d��}t	�
tt�W5QRXW5QRXdS)NT�r/zshutil.copyfileobj)r�r�r�rFrgr�r�rrrxrr)rqr]r^r�rrr�test_regular_copy'	sz#_ZeroCopyFileTest.test_regular_copyc
Cs`|�|j�|���,\}}|�t��|�||�W5QRXW5QRX|�ttdd�|j	�dS)NTr�)
r�r�r�r�r%r�r�rFrr�rarrr�test_same_file1	s
 z _ZeroCopyFileTest.test_same_filec	Cs>t��}|�t��}t�|d�W5QRX|�|jj|�dS)N�new)	rXr�r�r�rxrr�r�r�)rqrOr�rrr�test_non_existent_src9	sz'_ZeroCopyFileTest.test_non_existent_srcc
s�td�td�|��fdd��|��fdd��t�d��W5QRXt�d��(}t�d��}|�||�W5QRXW5QRX|�t�dd	�d
�dS)Nr]r^cs
t���Sr�rrWr)r[rrr�B	r5z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>cs
t���Srr�r)r\rrr�C	r5r'rCTr�r5)rr�r-r�r�rFrar)r\r[r�test_empty_file?	s
 z!_ZeroCopyFileTest.test_empty_filec	Cs4tjj|jtd��|�ttjtt	�W5QRXdS)N�rR)
r�rr�
PATCHPOINT�ZeroDivisionErrorr�rxrrrgrprrr�test_unhandled_exceptionM	s
��z*_ZeroCopyFileTest.test_unhandled_exceptioncCsdtjj|jttjd�d��@|���,\}}|�t	��|�
||�W5QRXW5QRXW5QRXdS�N�yor�)r�rrr�rrZEINVALr�r�r
r�rarrr�test_exception_on_first_callS	s

�z._ZeroCopyFileTest.test_exception_on_first_callc
CsTtjj|jttjd�d��0|���\}}|�t|j	||�W5QRXW5QRXdSr�)
r�rrr�rrZENOSPCr�r�r�rarrr�test_filesystem_full]	s


�z&_ZeroCopyFileTest.test_filesystem_fullN)rrrr�r�r�r�r�r�rvr�r�r�r�r�r�r�r�r�r�r�r�rrrrr�	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)rx�_fastcopy_sendfile)rqr�r�rrrr�j	sz!TestZeroCopySendfile.zerocopy_funcCsvt�|j��J}ttd��4}|�t��|�||�W5QRXt�	||�W5QRXW5QRX|�
ttdd�|j�dS)Nr'Tr�)�io�BytesIOr�r-rgr�r
r�rxr�r�rFrarrr�test_non_regular_file_srcm	s z.TestZeroCopySendfile.test_non_regular_file_srccCsxttd��d}t���P}|�t��|�||�W5QRXt�||�|�	d�|�
|��|j�W5QRXW5QRXdS)NrCr)
r-rr�r�r�r
r�rxr��seekr�rEr�rarrr�test_non_regular_file_dstv	s

z.TestZeroCopySendfile.test_non_regular_file_dstcs���fdd�}g�tj�tjjdd|d��@|���,\}}|�t��}t�	||�W5QRXW5QRXW5QRX|�
|jjtj
�dS)Ncs(�s��d��||�Sttjd��dS)Nr�)rLrr�EBADFr�rVZ
orig_sendfilerrrR�	s

zDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfiler�T)r*rR)rrRr�rrr�r�rrxr�r�r�rr�)rqrRr]r^r�rr�r�test_exception_on_second_call	s
�*z2TestZeroCopySendfile.test_exception_on_second_callc
CsZtjjdtd��*}|���\}}t�||�W5QRXW5QRX|�tt	dd�|j
�dS)N�os.fstatr�Tr�)r�rrrr�rxr�r�rFrgr��rqr�r]r^rrr�test_cant_get_size�	s
z'TestZeroCopySendfile.test_cant_get_sizec
Csjtj��}d|_tjjd|d��*}|���\}}t�||�W5QRXW5QRX|�t	t
dd�|j�dS)Nir��r)Tr�)r�r�Mock�st_sizerr�rxr�r�rFrgr��rqrr�r]r^rrr�test_small_chunks�	s
z&TestZeroCopySendfile.test_small_chunksc
Csptj��}|jd|_tjjd|d��*}|���\}}t�||�W5QRXW5QRX|�	t
tdd�|j�dS)Ni@r�r�Tr�)
r�rr�r�r�rr�rxr�r�rFrgr�r�rrr�test_big_chunk�	s
z#TestZeroCopySendfile.test_big_chunkc	Cs�tjjdtd���}|�ttjtt�|j	dd}|�
|tj�
t��t�t�ttddd�|�tjtd�|�ttjttd�|j	dd}|�
|d	�W5QRXdS)
Nr�r�rrshelloTr��3i�)r�rrr�r�rxrrrgr�r�rr+�getsizerrWr1r�)rqr�Z	blocksizerrr�test_blocksize_arg�	s*��
�z'TestZeroCopySendfile.test_blocksize_argcCs�z�tjj|jttjd�d��@}|�	��,\}}|�
t��t�||�W5QRXW5QRXW5QRXtj�|j��}t�
tt�W5QRXW5dt_XdS)NTr�r�)rxZ_USE_CP_SENDFILEr�rrr�rrZENOTSOCKr�r�r
r�rrrgr�rrr�test_file2file_not_supported�	s
� 
z1TestZeroCopySendfile.test_file2file_not_supportedN)
rrrr�r�r�r�r�r�r�r�r�r�rrrrr�f	s		


r�z
macOS onlyc@seZdZdZdd�ZdS)�TestZeroCopyMACOSzposix._fcopyfilecCst�||tj�Sr)rxZ_fastcopy_fcopyfile�posixZ_COPYFILE_DATArarrrr��	szTestZeroCopyMACOS.zerocopy_funN)rrrr�r�rrrrr��	sr�c@s^eZdZdd�Zdd�Zdd�Ze�e�	e
j���d�e�e
ed�d	�d
d���Zdd
�ZdS)�
TermsizeTestscCs(t��}|�|jd�|�|jd�dS)Nr)rx�get_terminal_sizer��columns�lines)rqr>rrr�test_does_not_crash�	sz!TermsizeTests.test_does_not_crashc	Cstt���}d|d<|d=t��}W5QRX|�|jd�t���}|d=d|d<t��}W5QRX|�|jd�dS)NZ777�COLUMNS�LINESi	Z888ix)rr#rxr�r�r�r��rqr%r>rrr�test_os_environ_first�	s

z#TermsizeTests.test_os_environ_firstc	CsLt���}d|d<d|d<t��}W5QRX|�|jd�|�|jd�dS)Nr�r�Zyyyr�r)rr#rxr�r�r�r�r�rrr�test_bad_environ�	s
zTermsizeTests.test_bad_environz
not on ttyr�zneed os.get_terminal_size()c
Cs�zt�ddg�����}Wn&tttjfk
r@|�d�YnXt|d�t|d�f}t	�
��}|d=|d=t��}W5QRX|�
||�dS)NZsttyr>zstty invocation failedrbrr�r�)rgr�r�rir�rQr�r]rjrr#rxr�r�)rqr>r�r%r4rrr�test_stty_match
s
�
zTermsizeTests.test_stty_matchcCs�t����}|d=|d=t�tdd��tjdd�}W5QRX|�|jd�|�|jd�t	t
jd��,}t�td|��tjd	d�}W5QRXW5QRX|�|jd
�|�|jd�W5QRXdS)Nr�r��
__stdout__)�
�)Zfallbackr�r�r()��(r�r�)rr#r,rerxr�r�r�r�r-r�devnull)rqr%r>rArrr�
test_fallback
s
� zTermsizeTests.test_fallbackN)rrrr�r�r�r�r�r�isattyrer�rZrVr�r�rrrrr��	s
�r�c@seZdZdd�ZdS)�PublicAPITestscCs~|�ttd��dddddddd	d
ddd
dddddddddddddg}ttd�sZtjdkrd|�d�|�ttj�t|��dS)N�__all__r�rr�r�rrr/r=ryrrfZ	ExecErrorrrrrrrr
rrCr�rr�r�statvfsrtr�)	r�rVrxrrOrLr�rHr�)rqZ
target_apirrr�test_module_all_attribute6
s6�
z(PublicAPITests.test_module_all_attributeN)rrrr�rrrrr�3
sr��__main__)F)F)Ir�Z
unittest.mockrxrXrer�rZos.pathrr$rLrgr6r7r�r�rrrrrrrr	r
rrr
r�r�r��ImportErrorr�rZtest.supportrrrgrhrirr;r�rdr�r�r�r�rr&r1rBrFrMr_ZSUPPORTS_SENDFILErkZTestCaserlrr:r;rkr�r�r�rr�r�r�r�r�mainrrrr�<module>s�8




w=
g|JdvN