Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_shutil.cpython-38.opt-2.pyc
U

>��go��@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�//opt/cppython/lib/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)�random�choice�string�
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

�rDc
CsHt|t�rtjj|�}t||r"dnd��}|��W5QR�SQRXdS)N�rb�r)r)r*rr+r,r-�read)r+r/r0rrr�	read_fileas
rHcCs|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�nrrrrOmsrOc
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
0123456789rEr�T)�hasattrrr�unlink�tempfile�NamedTemporaryFilerQr.r-�filenorTr)�srcname�dstnamerC�src�dst�infd�outfdrrr�supports_file2file_sendfileys,
 4


rccCsJtrBtjdkrBt�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
rpcs�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)�superrq�setUp�tempdirs��self��	__class__rrrs�szTestShutil.setUpcs6tt|���|jr2|j��}t�|tjdk�qdS)N)�nt�cygwin)	rrrq�tearDownrt�pop�shutil�rmtreerrQ�rv�drwrrr{�s
zTestShutil.tearDowncCs:d}tjdkrtj�t���}tj|d�}|j�	|�|S)N�win32��dir)
ri�platformrr+�realpath�getcwdrZ�mkdtemprtrN)rv�basedirr�rrrr��s
zTestShutil.mkdtempcCsX|��}tj�|d�}t�|�ttj�|d�d�t�|�}|�|t�t	�
|�dS)NZkillmeZsomefile�foo)r�rr+r,�mkdirr1�fsencode�assertIsInstance�bytesr}r~)rv�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�rN�r��errorsrr�onerror�sz8TestShutil.test_rmtree_fails_on_symlink.<locals>.onerror�r�rfrrW)r�rr+r,r��symlink�assertRaisesrr}r~�
assertTrue�exists�lexists�assertEqual�len�assertIsrMr��rvr�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�r}r~�assertFalser�r��
rvr�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�rfrrW)r�rr+r,r��_winapi�CreateJunctionr�rr}r~r�r�r�r�r�r�rMr�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�r}r~r�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�rWrrf)rZ�mktempr��FileNotFoundErrorr}r~r�r1rr+r,�NotADirectoryError�assertIn�	exception�filenamer�r�r�r�r��scandirr��rmdir)rvr��tmpdir�cmZ
possible_argsr�rr�r�test_rmtree_errorss2zTestShutil.test_rmtree_errorsN�rzz2This 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�
addCleanupr}r~r+r,�child_file_path�child_dir_pathr�create_empty_file�stat�st_mode�S_IREAD�S_IEXEC�chmod�check_args_to_onerrorr�)rvZ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)NrWrrfr)r�rrYr�r�r�r�r�rKr�rr��
issubclassr)rvr"�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�rr1r}r~)rvr�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�quuxry)r�rr+r,r1r�r�r��S_IRWXU�S_IRWXG�S_IRWXO�assertNotEqualr�r}�copymoder�rQ�rv�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�r}r�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�r}r�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_mtimerf�st_flagsg�������?)r�rr+r,r1r��utimer�r�r�r�rXr�r�r�r�r�r}�copystatr��supports_follow_symlinks�assertLessEqualrr�r�r��abs)
rvr�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���err�exrr�_chflags_raiser	sznTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser�r)rrrr�r�make_chflags_raiserszUTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser)
r�rr+r,r1r�rr�r�r}r�r�r)rvr�r�r�rZold_chflagsrrrr�-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�)r
r�)�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,r1r}�
_copyxattr�setxattrr�rJ�	listxattr�getxattr�removerrr	r�r�r�)rvr�r`rrZsrcroZdstror)rrr
r_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�rr}rr�rr�r)rvr�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�rXr�r�r�r�r}�copyr�rMr�rHrr��readlinkr�r�)rvr�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�rfr�)r�rr+r,r1r�rXr�r�r�r�r�r�r�r}�copy2r�rMr�rHrr�rr�r�r�rr�r�r�)	rvr�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,r1rr}rr�rr)rvr�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�r}�copyfiler�rMr�rr�)rvr�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�sr%cs��dSrrr�r%rr�_raiser�szITestShutil.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser)rr-r�rYr��supports_dir_fdrK�supports_fdr�r�r}�_use_fd_functionsr~�avoids_symlink_attacksr�r+r,r��_rmtree_safe_fd�	Exceptionr�r�)rvr*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)	rZ�mkstempr�closer�r�r}r~r)rv�handler+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)rZr�rr+r,r�r}r~�dirnamer1r��copytreer��isfilerLrHr��rv�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.txtr5Zexisting_dirzexisting.txtzwill be replacedzhas been replacedT)�
dirs_exist_okF)rZr�r�r}r~r1rr�r+r,r9r�r:rLrHr�r��FileExistsErrorr;rrr�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��symlinksryz\\?\�)r�rr+r,r�r1r�rXr�r�r�r�r�r�r�r}r9r�rMrrQ�
startswithr�r�r�)
rvr�r<r=Zsub_dirr�r�r�r>rrrr�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)Nr3r4r5ztest.tmpr6r7Z	test_dir2�subdirZsubdir2ztest.pyz*.tmp��ignorezsubdir*cSsfg}|D]X}tj�||�}tj�|�rB|��ddkrB|�|�qtj�|�ddkr|�|�q|S)NrerIz.py)rr+r,rLrnrN�splitext)r_�namesrPrQr+rrr�_filter\s�z6TestShutil.test_copytree_with_exclude.<locals>._filter)rr+r,r�rZr�r}r~r8r1r��ignore_patternsr9r�r�)rvr,r�r<r=�patternsrNrrr�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�sourcer6rIr4r7csT��|���|t���|t���t|�tt|���|D]}��|t�q>gSr)rNr��str�listr�r��set)r_rMrQ�Zinvokationsrvrr�_ignore�s
z=TestShutil.test_copytree_arg_types_of_ignore.<locals>._ignorer3rJr�	)rr+r,r�r�r�r1r}r9r��pathlib�PathrTr�r��DirEntryr�r�)rvr,r�r�r<rWr=Z
src_dir_entryrrVr�!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)NrRr3i�zpermissive.txtr5zrestrictive.txtr7i�r�rf)rZr�rr+r,r�r�r}r~r�r1r9r�r�r�rn)rvr�r<r=Zrestrictive_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)Nr3zka-boom)rZr�rr+r,r�r}r~r8�PermissionError�side_effectr�rr9)rvZ
mock_patchr<r=rrr�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�)rNr�rSr�rr+r,)r�r��r`�flagrvr_rr�custom_cpfun�s

zCTestShutil.test_copytree_custom_copy_function.<locals>.custom_cpfunr�r(��
copy_functionrf)rZr�r�rr~r�r-rr+r,r0r}r9r�r�)rvrdrCrrbr�"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(): %srF)rr�rr+r,r}r~r-r.r�r^�skipTestr�rr r�rGr)rvr_r`rC�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)NrhriTr�r(rjrF)rr�rr+r,r}r~r-r.r�r�rr r�rGr)rvr_r`rCrrr�*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�rhri)
rr�rr}r~r+r,r�r�r�rvr_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�rhriZspamr')
rr�rr}r~r+r,r-r0r�r�r�rrorrr�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)rrrrr^rkrr�r}�SpecialFileErrorr �TESTFN2�__file__)rvrlrrr�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�rIZmypipersrrfz`%s` is a named pipez$shutil.Error should have been raised)rr�rr}r~rur+r,rrr^rkr9rrr�r��fail)rvrI�piperlr�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)
Nr3r4r5r6r7cs��||f�dSrr��r_r`�Zcopiedrr�_copyOsz4TestShutil.test_copytree_special_func.<locals>._copyrerW)
r�rr+r,r1r�r}r9r�r�)rvr<r=r}rr|r�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)Nr3Z
IDONTEXISTr4r6r7�destination2T)�ignore_dangling_symlinksZdestination3rD)r�rr+r,r�r�r1r�rr}r9�assertNotInrKr��rvr<r=rrr�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)Nr3Zreal_dirr4r(Zlink_to_dirT)Ztarget_is_directoryFrDr)r�rr+r,r�r-r�r}r9r�rMr�rKr�r�rrr�test_copytree_symlink_dirjs 
�z$TestShutil.test_copytree_symlink_dircCsPd}|��}t||fd�tj�||�}|��}|||�tj�||�}||fS)Nr4r�)r�r1rr+r,)rv�methodr
r�r��tmpdir2r�rrr�
_copy_file~s
zTestShutil._copy_filecCsB|�tj�\}}|�tj�|��|�t�|�j	t�|�j	�dSr)
r�r}rr�rr+r�r�r�r�)rvr�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�rfr�r�)
r�r}rr�rr+r�r�r�r�r�rrX)rvr�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�.tarrF)�
_create_filesr�rr�r+r8r,�basenamer�
change_cwd�abspathrr�r�r:�tarfileZ
is_tarfiler-�assertCountEqual�getnames)	rv�root_dir�base_dirr��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*)rvr+r�rMrrr�_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�rCZfile3Zsub2�outer)r�rr+r,�makedirsr1r�)rvr�r�r�rrrr��szTestShutil._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�rr+r,r�rr�r�r:rk�
check_call�DEVNULLr�)rvr�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+r8r,r�rr�r�rr�r�r:�zipfile�
is_zipfile�ZipFiler��namelist)	rvr�r�r�r�r�r�rP�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�r:rkr�r�r�r�r�rJ)
rvr�r�r�r�Zarchive2�zip_cmdr�rMZnames2rrr�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�r:rr�rk�check_output�STDOUT�CalledProcessError�output�decoderkrx�format)	rvr�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)rvr�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�groupr�Z	kjhkjhkjgZoihohoh)
�UID_GID_SUPPORT�grp�getgrgid�pwd�getpwuidr�rr+r,r�rr�r:)rvr�r�r�r�r�rPrrr�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�r:r�r-r0Z
getmembersr��uid�gid)	rvr�r�r�r�r��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�)rvZcurrent_dirr�rrr�test_make_archive_cwd�sz TestShutil.test_make_archive_cwdc	CsF|��}t�|��*|�tdd�d�|�tj�d��W5QRXdS)N�testr�ztest.tar�	r�rr�r�rr�rr+r:�rvr�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�rfcSstSr��xrrrr�<lambda>�r5z9TestShutil.test_register_archive_format.<locals>.<lambda>cSstSrr�rrrrr��r5)rfrW)rfrWrcSstSrr�rrrrr��r5r�cSsg|]\}}|�qSrr�r;rQ�paramsrrrr=�sz;TestShutil.test_register_archive_format.<locals>.<listcomp>cSsg|]\}}|�qSrrr�rrrr=�s)r��	TypeErrorrrr�rr�)rv�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_converterrYrZr)rvr�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�rOrrr+r,r�rrr�r�r}�	ReadErrorrr�)rvr��	converterrr�r��expectedr�r�r�Ztmpdir3rrrr��s"
�z.TestShutil.check_unpack_archive_with_converterc	Cs@|j|dd�|j|dd�t�|��|�|�W5QRXdS)NZ
fully_trusted��filter�data)r�rZcheck_no_warnings)rvr�rrr�check_unpack_tarball�szTestShutil.check_unpack_tarballcCs|�d�dS)Nr��r�rurrr�test_unpack_archive_tar�sz"TestShutil.test_unpack_archive_tarcCs|�d�dS)Nr�r�rurrr�test_unpack_archive_gztar�sz$TestShutil.test_unpack_archive_gztarcCs|�d�dS)N�bztarr�rurrr�test_unpack_archive_bztar�sz$TestShutil.test_unpack_archive_bztarz(AIX MAXDATA must be 0x20000000 or largercCs|�d�dS)N�xztarr�rurrr�test_unpack_archive_xztar�sz$TestShutil.test_unpack_archive_xztarc	Cs2|�d�|�t��|jddd�W5QRXdS)Nr�r�r�)r�r�r�rurrr�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)Nrf�	stuff.boo�xx)r�)r��extract_dir�extrarurr�_boo�sz-TestShutil.test_unpack_registry.<locals>._booZBooz.booz.b2)r�rfr�r�ZBoo2r�)	rrrr�r	r
r�r�r�)rvr�r�rrur�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)r}r�rr+r8rvr�rroZ
assertGreaterr2r��assertGreaterEqualr�)rv�usager�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�rvrr�check_chown6s

z*TestShutil.test_chown.<locals>.check_chown)r�r)NN)r�rZr�r1r�r�r}r�LookupErrorr�r�getuid�getgidr�r�r�r�)rvr8r�r�rrr�rrr�
test_chownsL




zTestShutil.test_chowncCs�tjtjfD]v}|��}|��}tj�|d�}t|d�|||�}|�|tj�|d��||tj�|d��}|�|tj�|d��qdS)Nr�r�)	r}rrr�rr+r,r1r�)rvr�r<r=r_�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,r1r}r r�r�r�rH)rvr<r=�dst_file�src_filer
rrr�test_copyfile_return_valuebs
z%TestShutil.test_copyfile_return_valuecCsX|��}tj�|d�}t|d�|�ttj||�|�t	tj||�|�
t|�d�dSra)r�rr+r,r1r�rr}r rr�rH)rvr<rrrr�test_copyfile_same_filems
z"TestShutil.test_copyfile_same_filecCs\|��}|d}|�tj|d�tj�|d�}t|d�t�||�}|�	dgt�
|��dS)N�destTr�)r�r�r}r~rr+r,r1r9r�rK)rvr<r=r_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�r}r~rr+r,r�r1r9r�rK)rvr�r<r=r_r
rrr�test_copytree_subdirectory�s

z%TestShutil.test_copytree_subdirectory)r�)fr"r#r$rsr{r�r�r�skip_unless_symlinkr�r��unittest�
skipUnlessr�r�r�r��skipIfrir�rXrr�r�r�r�r�r�r�r�rrZskip_unless_xattrrrrrrr!r.r2r?rBrHrQr\r]�mock�patchr`rgrmrnrprqrwrzr~r�r�r�r�r�Z
requires_zlibr�r�r�r}�whichr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�Zrequires_bz2r�Z
requires_lzmarhrpr�r�r�rrrrrrr�
__classcell__rrrwrrq�s&	





$��

(��

?�

"


A*














#
�
$��





�

9
rqc@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)rZr��temp_dirr�r}r~r[�	temp_filerr�rQr��S_IXUSRr0r+rnr��file�env_path�curdir�extrurrrrs�s�zTestWhich.setUpcCs&tj|j|jd�}|�||jj�dS�Nr�)r}rr&r�r�r$rQ�rvr
rrr�
test_basic�szTestWhich.test_basiccCs(tj|jj|jd�}|�||jj�dSr*)r}rr$rQr#r�r+rrr�test_absolute_cmd�szTestWhich.test_absolute_cmdc	Cs�tj�|j�\}}tj�||j�}tj|d��"tj	||j
d�}|�||�W5QRXtj|jd��tj	||d�}|�|�W5QRXdSr*)
rr+rnr�r,r&rr�r}rr#r��assertIsNone)rvr��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+r8r�rr�r}rr&rir�r�r,r(r.)rvr�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$rQr�r��access�W_OKrkr}rr&r�r.r+rrr�test_non_matching_mode�s

z TestWhich.test_non_matching_modec	CsVtj�|j�\}}tj|d��.tj|j|d�}|�	|tj�
||j��W5QRXdSr*)rr+rnr�rr�r}rr&r�r,)rvr�r/r
rrr�test_relative_path�szTestWhich.test_relative_pathcCstjd|jd�}|�|�dS)Nzfoo.exer�)r}rr�r.r+rrr�test_nonexistent_file�szTestWhich.test_nonexistent_filer�zpathext check is Windows-onlycCs<tj|jdd�|jd�}|�||jjdd�|j�dS)N���r�)r}rr&r�r�r$rQr)r+rrr�test_pathext_checking�szTestWhich.test_pathext_checkingc	Cs>t���,}|j|d<t�|j�}|�||jj�W5QRXdS�N�PATH)	r�EnvironmentVarGuardr'r}rr&r�r$rQ�rv�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=rrrr��	swap_attrrr�r}rr&r.r>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<rATrBrE)rr+r�r$rQrir�r(r)r�r�r,rr=�pathseprrrr�rFr}rr&r.r�r�)rvZexpected_cwdr(r?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<rAT)r_rDrErBr�)rr=r|rrrr�rFrr�r}rr&r�r$rQr>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+r8r�rr�r=r'r}rr&r.)rvr�r?r
rrr�test_empty_paths�
zTestWhich.test_empty_pathc	Cs:t���(}|�dd�t�|j�}|�|�W5QRXdSr;)rr=r|r}rr&r.r>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�Tmp2r!r�PATHEXTr�)rZr[r#rr�rQr�r%r�r0r+r�rLrr=r}rr��rvr)Z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)NrMrNr!r�;rOr�)rZr[r#r�r0rr+r�rQrLrr=r}rr�rPrrr�test_pathext_with_empty_str;s�
z%TestWhich.test_pathext_with_empty_strN)r"r#r$rsr,r-r1r2rrrXrr�r6r7r8rrir�r:r@rGrIrJrKrLrQrSrrrrr�s2
�
�

rc@seZdZdd�ZdS)�TestWhichBytescCsXt�|�t�|j�|_t�|j�|_t�|jj�|j_t�|j�|_t�|j	�|_	dSr)
rrsrr�r�r&r$rQr(r)rurrrrsMs
zTestWhichBytes.setUpN)r"r#r$rsrrrrrTLsrTc@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)rir�rr+r�r�rZr�r<r=r,rrr-r.)rvr�r�rCrrrrsXs
zTestMove.setUpcCs6|j|jfD]$}z|r t�|�WqYqXqdSr)r<r=r}r~rrrrr{dszTestMove.tearDownc	Csft|d��}|��}W5QRXt�||�t|d��}|�||���W5QRX|�tj�|��dS�NrE)	r-rGr}�mover�r�rr+r�)rvr_r`�real_dstrC�contentsrrr�_check_move_filelszTestMove._check_move_filecCsFtt�|��}t�||�|�|tt�|���|�tj�|��dSr)	rJrrKr}rWr�r�r+r�)rvr_r`rXrYrrr�_check_move_dirtszTestMove._check_move_dircCs|�|j|j|j�dSr)rZrrrurrr�test_move_filezszTestMove.test_move_filecCs|�|j|j|j�dSr)rZrr=rrurrr�test_move_file_to_dir~szTestMove.test_move_file_to_dircCs|��dSr)r\rurrr�test_move_file_other_fs�sz TestMove.test_move_file_other_fscCs|��dSr)r]rurrr�test_move_file_to_dir_other_fs�sz'TestMove.test_move_file_to_dir_other_fscCs@t��}z|�|j||�W5zt�|�WnYnXXdSr)rZr�r}r~r[r<�rvr=rrr�
test_move_dir�szTestMove.test_move_dircCs|��dSr)rarurrr�test_move_dir_other_fs�szTestMove.test_move_dir_other_fsc
Cs,|�|j|jtj�|jtj�|j���dSr)r[r<r=rr+r,r�rurrr�test_move_dir_to_dir�s�zTestMove.test_move_dir_to_dircCs|��dSr)rcrurrr�test_move_dir_to_dir_other_fs�sz&TestMove.test_move_dir_to_dir_other_fsc
Cs4|�|jtjj|jtj�|jtj�|j���dSr)r[r<rr+�sepr=r,r�rurrr�test_move_dir_sep_to_dir�s�z!TestMove.test_move_dir_sep_to_dirzrequires os.path.altsepc
Cs4|�|jtjj|jtj�|jtj�|j���dSr)r[r<rr+�altsepr=r,r�rurrr�test_move_dir_altsep_to_dir�s�z$TestMove.test_move_dir_altsep_to_dirc	Cs4t|jd��W5QRX|�tjtj|j|j�dS)Nr')r-rr�r}rrWrr=rurrr�"test_existing_file_inside_dest_dir�s
z+TestMove.test_existing_file_inside_dest_dircCs*tj�|jd�}|�tjtj|j|�dS�Nr�)rr+r,r<r�r}rrW�rvr`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�rr}r~r+r,r��
_destinsrcrorrr�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�))rmzsrc/dest)rmz
srcdir.newz;_destinsrc() wrongly concluded that dst (%s) is in src (%s)rn)	rr�rr}r~r+r,r�rororrr�test_destinsrc_false_positive�s
��z&TestMove.test_destinsrc_false_positivecCs\tj�|jd�}t�|j|�t�||j�|�	tj�
|j��|�	tj�|j|j��dSrj)rr+r,r<r�rr}rWrr�rM�samefilerkrrr�test_move_file_symlink�s
zTestMove.test_move_file_symlinkcCsld}tj�|j|�}t�|j|�t�||j�tj�|j|�}|�	tj�
|��|�	tj�|j|��dSrj)rr+r,r<r�rr}rWr=r�rMrr)rvr�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,r<r�r=r}rWr�rMr�r��rvr_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�||��dSru)rr+r,r<r�r�r=r}rWr�rMrrrvrrr�test_move_dir_symlink�s
zTestMove.test_move_dir_symlinkc	Cs6t�|j|j�}|�|tj�|jtj�|j���dSr)	r}rWrr=r�rr+r,r�r+rrr�test_move_return_value�s�zTestMove.test_move_return_valuecCs6t�|jtj�|jd��}|�|tj�|jd��dSrj)r}rWrrr+r,r=r�r+rrr� test_move_as_rename_return_valuesz)TestMove.test_move_as_rename_return_valuecs8g��fdd�}tj|j|j|d�|�t��d�dS)Ncs��||f�dSrr�r{�Zmovedrrr}	sz7TestMove.test_move_file_special_function.<locals>._copyrerf)r}rWrr=r�r��rvr}rr{r�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�r{r{rrr}sz6TestMove.test_move_dir_special_function.<locals>._copy�childZchild1rer)rr�rr+r,r<r}rWr=r�r�r|rr{r�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)Nr~)rr+r��
TESTFN_SRCr�r�r�Z	os_helperr~�
TESTFN_DSTr�r�r�r^r}rWr�rKr�r,rurrr�test_move_dir_permission_denieds 

z(TestMove.test_move_dir_permission_deniedN))r"r#r$rsr{rZr[r\r]r&r^r_rarbrcrdrfrrrr+rgrhrirlrprqrrrsrtrwrxryrzr}rrXr�r�r�rrrrrUVsd




		



���rUc@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)rvZ
raise_in_exitZsuppress_at_exitrrr�__init__DszTestCopyFile.Faux.__init__cGsdS)Nr�r)rvrrrrrGGszTestCopyFile.Faux.readcCs
d|_dS�NT)�_enteredrurrr�	__enter__IszTestCopyFile.Faux.__enter__cCs&|||f|_|jr d|_td��|jS)NT�Cannot close)�_exited_withr��_raisedrr�)rv�exc_type�exc_val�exc_tbrrr�__exit__Ks
zTestCopyFile.Faux.__exit__)FT)
r"r#r$r�r�r�r�rGr�r�rrrr�Faux@s
r�cCs|jr
t`dSr)�_deleter}r-rurrrr{RszTestCopyFile.tearDowncCs|t_d|_dSr�)r}r-r�)rvr"rrr�_set_shutil_openVszTestCopyFile._set_shutil_opencCs*ddd�}|�|�|�ttjdd�dS)NrFcSs|dkrtd��dS)N�srcfilezCannot open "srcfile"r�r�r3rrr�_open[sz4TestCopyFile.test_w_source_open_fails.<locals>._openr��destfile)rF)r�r�rr}r �rvr�rrr�test_w_source_open_failsZs

z%TestCopyFile.test_w_source_open_failszskipped on macOScsd|���d	�fdd�	}|�|�t�dd�|��j�|��jdtk�|��jdj	d�dS)
NrFcs |dkr�S|dkrtd��dS)Nr�r��Cannot open "destfile"rr��r�rrr�is
z2TestCopyFile.test_w_dest_open_fails.<locals>._openr�r�rrf)r�)rF)
r�r�r}r r�r�r�rr�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)NTrFcs|dkr�S|dkr�SdS�Nr�r�rr��r�r�rrr�~s
z3TestCopyFile.test_w_dest_close_fails.<locals>._openr�r�rrf)r�)rF)r�r�r}r r�r�r�r�rr�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)	NTrFcs|dkr�S|dkr�SdSr�rr�r�rrr��s
z5TestCopyFile.test_w_source_close_fails.<locals>._openr�r�r)rF)r�r�r�rr}r r�r�r�r�r�r�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�
|�XdSr�)rZr�r<r�r}r~rr+r,r8r��upperr�r�rWr�rLr`rrr�test_move_dir_caseinsensitive�s
�z*TestCopyFile.test_move_dir_caseinsensitiveN)r"r#r$r��objectr�r{r�r�rr�MACOSr�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)rDr�FILESIZE��clsrrr�
setUpClass�szTestCopyFileObj.setUpClasscCst�t�t�t�dSr)rrYrrur�rrr�
tearDownClass�s
zTestCopyFileObj.tearDownClasscCst�t�dSr�rrYrururrrr{�szTestCopyFileObj.tearDownc
cs:ttd��&}ttd��}||fVW5QRXW5QRXdS�NrEr'�r-rrurorrr�	get_files�szTestCopyFileObj.get_filesc
CsDt|d��0}t|d��}|�|��|���W5QRXW5QRXdSrV)r-r�rG)rvr_r`�fsrc�fdstrrr�assert_files_eq�szTestCopyFileObj.assert_files_eqc	Cs4|���\}}t�||�W5QRX|�tt�dSr)r�r}�copyfileobjr�rrurorrr�test_content�szTestCopyFileObj.test_contentc	Cs(|���\}}t�||�W5QRXdSr)r�r}r�rorrr�test_file_not_closed�sz$TestCopyFileObj.test_file_not_closedc	CsL|���:\}}t�||�|�|��|j�|�|��|j�W5QRXdSr)r�r}r�r��tellr�rorrr�test_file_offset�sz TestCopyFileObj.test_file_offsetryz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_readintorrWiFrUsfoor)rrrr}r rrur��	call_argsrZr[r.rQr�rrYr�)rv�mrCr
rrr�
test_win_impl�s"
zTestCopyFileObj.test_win_implN)r"r#r$r��classmethodr�r�r{�
contextlib�contextmanagerr�r�r�r�r�rrrrQr�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��}|��|_W5QRXdSrV)rDrr�r-rG�FILEDATA)r�rCrrrr�	s
z_ZeroCopyFileTest.setUpClasscCst�t�dSr)rrYrr�rrrr�	sz_ZeroCopyFileTest.tearDownClasscCst�t�dSrr�rurrrr{	sz_ZeroCopyFileTest.tearDownc
cs:ttd��&}ttd��}||fVW5QRXW5QRXdSr�r�rorrrr�	sz_ZeroCopyFileTest.get_filescOstd��dS)Nzmust be implemented in subclass)�NotImplementedError)rvrrrrr�zerocopy_fun	sz_ZeroCopyFileTest.zerocopy_funcCs$|��|��|��|��dSr)r{r�r�rsrurrr�reset	sz_ZeroCopyFileTest.resetc
Csz|���\}}|�||�W5QRX|�ttdd�|j�|���.\}}tj�d��}t	�
tt�W5QRXW5QRXdS)NT�r/zshutil.copyfileobj)r�r�r�rHrur�rrrr}r r)rvr_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�rHrr�rorrr�test_same_file1	s
 z _ZeroCopyFileTest.test_same_filec	Cs>t��}|�t��}t�|d�W5QRX|�|jj|�dS)N�new)	rZr�r�r�r}r r�r�r�)rvrQr�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�rrYr)r]rrr�B	r5z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>cs
t���Srr�r)r^rrr�C	r5r'rETr�r5)rr�r-r�r�rHror)r^r]r�test_empty_file?	s
 z!_ZeroCopyFileTest.test_empty_filec	Cs4tjj|jtd��|�ttjtt	�W5QRXdS)N�r_)
rrr�
PATCHPOINT�ZeroDivisionErrorr�r}r rrururrr�test_unhandled_exceptionM	s
��z*_ZeroCopyFileTest.test_unhandled_exceptioncCsdtjj|jttjd�d��@|���,\}}|�t	��|�
||�W5QRXW5QRXW5QRXdS�N�yor�)rrrr�rr�EINVALr�r�r
r�rorrr�test_exception_on_first_callS	s

�z._ZeroCopyFileTest.test_exception_on_first_callc
CsTtjj|jttjd�d��0|���\}}|�t|j	||�W5QRXW5QRXdSr�)
rrrr�rr�ENOSPCr�r�r�rorrr�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�	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)rvr�r�rrrr�j	sz!TestZeroCopySendfile.zerocopy_funcCsvt�|j��J}ttd��4}|�t��|�||�W5QRXt�	||�W5QRXW5QRX|�
ttdd�|j�dS)Nr'Tr�)�io�BytesIOr�r-rur�r
r�r}r�r�rHrorrr�test_non_regular_file_srcm	s z.TestZeroCopySendfile.test_non_regular_file_srccCsxttd��d}t���P}|�t��|�||�W5QRXt�||�|�	d�|�
|��|j�W5QRXW5QRXdS)NrEr)
r-rr�r�r�r
r�r}r��seekr�rGr�rorrr�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�)rNrr�EBADFr�rcZ
orig_sendfilerrrT�	s

zDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfiler�T)rDr_)rrTrrrr�r�rr}r�r�r�rr�)rvrTr_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�)rrrrr�r}r�r�rHrur��rvr�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��rCTr�)rr�Mock�st_sizerr�r}r�r�rHrur��rvrr�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�)
rrr�r�r�rr�r}r�r�rHrur�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�)rrrr�r�r}r rrur�r�rr+�getsizerrYr1r�)rvr��	blocksizerrr�test_blocksize_arg�	s*��
�z'TestZeroCopySendfile.test_blocksize_argcCs�z�tjj|jttjd�d��@}|�	��,\}}|�
t��t�||�W5QRXW5QRXW5QRXtj�|j��}t�
tt�W5QRXW5dt_XdS)NTr�r�)r}�_USE_CP_SENDFILErrrr�rr�ENOTSOCKr�r�r
r�r rrur�rrr�test_file2file_not_supported�	s
� 
z1TestZeroCopySendfile.test_file2file_not_supportedN)
r"r#r$r�r�r�r�r�r�r�r�r�r�rrrrr�f	s		


r�z
macOS onlyc@seZdZdZdd�ZdS)�TestZeroCopyMACOSzposix._fcopyfilecCst�||tj�Sr)r}�_fastcopy_fcopyfile�posix�_COPYFILE_DATArorrrr��	szTestZeroCopyMACOS.zerocopy_funN)r"r#r$r�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)r}�get_terminal_sizer��columns�lines)rvr@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=r}r�r�r�r��rvr?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=r}r�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 failedrfrr�r�)rkr�r�rnr�r^r�rkrorr=r}r�r�)rvr@r�r?r>rrr�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__)�
�)�fallbackrrr()��(rr)rr=rFrir}r�r�r�r�r-r�devnull)rvr?r@rCrrr�
test_fallback
s
� zTermsizeTests.test_fallbackN)r"r#r$r�r�r�rrr�isattyrir�r\rXr�rrrrrr��	s
�r�c@seZdZdd�ZdS)�PublicAPITestscCs~|�ttd��dddddddd	d
ddd
dddddddddddddg}ttd�sZtjdkrd|�d�|�ttj�t|��dS)N�__all__r�r r�r�rrr9rWr~rrt�	ExecErrorrrrrrrr
rrOrrr�r�statvfsryr�)	r�rXr}rrQrNr�rUr	)rvZ
target_apirrr�test_module_all_attribute6
s6�
z(PublicAPITests.test_module_all_attributeN)r"r#r$rrrrrr3
sr�__main__)F)F)IrZ
unittest.mockr}rZrir�rZos.pathrr$rYrkr6r8r�r�rrrrrrrr	r
rrr
r�r�r��ImportErrorr�rZtest.supportrrrur�r�r�rGr�rhr�r�r�r�rr&r1rDrHrOrcZSUPPORTS_SENDFILErpZTestCaserqrrTrUr�r�r�r�rr�r�r�rr"�mainrrrr�<module>s�8




w=
g|JdvN


F1le Man4ger