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.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)z�Write *content* to a file located at *path*.

    If *path* is a tuple instead of a string, os.path.join will be used to
    make a path.  If *binary* is true, the file will be opened in binary
    mode.
    �wb�wN)�
isinstance�tupler�path�join�open�write)r+Zcontent�binary�fprrr�
write_fileCs
r1c	Csrdd�}t|d�}d�dd�t|�D��}t|d�� }|||�D]}|�|�q@W5QRXtj�|�|ksnt�dS)	zBCreate a test file with an arbitrary size and random text content.css2||kst�||kr$|V||8}q|r.|VdSr��AssertionError)�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'N)	�minr,�ranger-r.rr+�getsizer3)r+�sizer6�bufsize�chunk�fZcsizerrr�write_test_fileOs

�rGc
CsHt|t�rtjj|�}t||r"dnd��}|��W5QR�SQRXdS)z�Return contents from a file located at *path*.

    If *path* is a tuple instead of a string, os.path.join will be used to
    make a path.  If *binary* is true, the file will be opened in binary
    mode.
    �rb�rN)r)r*rr+r,r-�read)r+r/r0rrr�	read_fileas
rKcCs|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�nrrrrRmsrRc
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
0123456789rHr�T)�hasattrrr�unlink�tempfile�NamedTemporaryFilerTr.r-�filenorWr)�srcname�dstnamerF�src�dst�infd�outfdrrr�supports_file2file_sendfileys,
 4


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
rscs�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)�superrt�setUp�tempdirs��self��	__class__rrrv�szTestShutil.setUpcs6tt|���|jr2|j��}t�|tjdk�qdS)N)�nt�cygwin)	rurt�tearDownrw�pop�shutil�rmtreerrT�ry�drzrrr~�s
zTestShutil.tearDowncCs:d}tjdkrtj�t���}tj|d�}|j�	|�|S)zjCreate a temporary directory that will be cleaned up.

        Returns the path of the directory.
        N�win32��dir)
rl�platformrr+�realpath�getcwdr]�mkdtemprwrQ)ry�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�)ry�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�rQ�r��errorsrr�onerror�sz8TestShutil.test_rmtree_fails_on_symlink.<locals>.onerror�r�rirrZ)r�rr+r,r��symlink�assertRaisesrr�r��
assertTrue�exists�lexists�assertEqual�len�assertIsrPr��ryr�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��
ryr�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�rirrZ)r�rr+r,r��_winapi�CreateJunctionr�rr�r�r�r�r�r�r�r�rPr�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�rZrri)r]�mktempr��FileNotFoundErrorr�r�r�r1rr+r,�NotADirectoryError�assertIn�	exception�filenamer�r�r�r�r��scandirr��rmdir)ryr��tmpdir�cmZ
possible_argsr�rr�r�test_rmtree_errorss2zTestShutil.test_rmtree_errorsN�r}z2This 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�)ryZ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)NrZrrir)r�rr\r�r�r�r�r�rNr�rr��
issubclassr)ryr"�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�)ryr�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�quuxr|)r�rr+r,r1r�r�r��S_IRWXU�S_IRWXG�S_IRWXO�assertNotEqualr�r��copymoder�rT�ry�tmp_dirrbrc�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_mtimeri�st_flagsg�������?)r�rr+r,r1r��utimer�r�r�r�r[r�r�r�r�r�r��copystatr��supports_follow_symlinks�assertLessEqualrr�r�r��abs)
ryr�rbrcr�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)rrrrr�make_chflags_raiserszUTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser)
r�rr+r,r1r�rr�r�r�r�r�r)ryr�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_listxattrrbrr�
_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�rM�	listxattr�getxattr�removerrrr�r�r�)ryr�rcrrZsrcroZdstror)rrrrbr�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.foor	r
Fr�r�r�)
r�rr+r,r1r�rr�rr�rr�r)ryr�rbr�rcr�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�r[r�r�r�r�r��copyr�rPr�rKrr��readlinkr�r�)ryr�rbrcr�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�rir�)r�rr+r,r1r�r[r�r�r�r�r�r�r�r��copy2r�rPr�rKrr�rr�r�r�rr�r�r�)	ryr�rbrcr�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)ryr�rbrcrrr�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)Nrbrcr�r�r�Fr�)
r�rr+r,r1r�r��copyfiler�rPr�rr�)ryr�rbrcr�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�r\r��supports_dir_fdrN�supports_fdr�r�r��_use_fd_functionsr��avoids_symlink_attacksr�r+r,r��_rmtree_safe_fd�	Exceptionr�r�)ryr,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)	r]�mkstempr�closer�r�r�r�r)ry�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)r]r�rr+r,r�r�r��dirnamer1r��copytreer��isfilerOrKr��ry�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.txtr7Zexisting_dirzexisting.txtzwill be replacedzhas been replacedT)�
dirs_exist_okF)r]r�r�r�r�r1rr�r+r,r;r�r<rOrKr�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)Nrbrc�subzfile.txtr�r�zsub/linkr�r�r�T��symlinksr|z\\?\�)r�rr+r,r�r1r�r[r�r�r�r�r�r�r�r�r;r�rPrrT�
startswithr�r�r�)
ryr�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)Nr5r6r7ztest.tmpr8r9Z	test_dir2�subdirZsubdir2ztest.pyz*.tmp��ignorezsubdir*cSsfg}|D]X}tj�||�}tj�|�rB|��ddkrB|�|�qtj�|�ddkr|�|�q|S)NrhrKz.py)rr+r,rOrqrQ�splitext)rb�namesrSrTr+rrr�_filter\s�z6TestShutil.test_copytree_with_exclude.<locals>._filter)rr+r,r�r]r�r�r�r:r1r��ignore_patternsr;r�r�)ryr,r�r>r?�patternsrPrrr�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�sourcer8rKr6r9csT��|���|t���|t���t|�tt|���|D]}��|t�q>gSr)rQr��str�listr�r��set)rbrOrT�Zinvokationsryrr�_ignore�s
z=TestShutil.test_copytree_arg_types_of_ignore.<locals>._ignorer5rLr�	)rr+r,r�r�r�r1r�r;r��pathlib�PathrVr�r��DirEntryr�r�)ryr,r�r�r>rYr?Z
src_dir_entryrrXr�!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)NrTr5i�zpermissive.txtr7zrestrictive.txtr9i�r�ri)r]r�rr+r,r�r�r�r�r�r1r;r�r�r�rq)ryr�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)Nr5zka-boom)r]r�rr+r,r�r�r�r:�PermissionError�side_effectr�rr;)ryZ
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�)rQr�rUr�rr+r,)r�r��rc�flagryrbrr�custom_cpfun�s

zCTestShutil.test_copytree_custom_copy_function.<locals>.custom_cpfunr�r(��
copy_functionri)r]r�r�rr�r�r-rr+r,r2r�r;r�r�)ryrfrFrrdr�"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(): %srI)rr�rr+r,r�r�r-r.r�r`�skipTestr�rr"r�rJr)ryrbrcrF�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)NrjrkTr�r(rlrI)rr�rr+r,r�r�r-r.r�r�rr"r�rJr)ryrbrcrFrrr�*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�rjrk)
rr�rr�r�r+r,r�r�r�ryrbrcrrr�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�rjrkZspamr')
rr�rr�r�r+r,r-r2r�r�r�rrqrrr�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)rrtrr`rmrr�r��SpecialFileErrorr"�TESTFN2�__file__)ryrnrrr�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�rKZmypiperurriz`%s` is a named pipez$shutil.Error should have been raised)rr�rr�r�rwr+r,rtr`rmr;rrr�r��fail)ryrK�pipernr�rbrcZ	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)
Nr5r6r7r8r9cs��||f�dSrr��rbrc�Zcopiedrr�_copyOsz4TestShutil.test_copytree_special_func.<locals>._copyrgrZ)
r�rr+r,r1r�r�r;r�r�)ryr>r?rrr~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)Nr5Z
IDONTEXISTr6r8r9�destination2T)�ignore_dangling_symlinksZdestination3rF)r�rr+r,r�r�r1r�rr�r;�assertNotInrNr��ryr>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)Nr5Zreal_dirr6r(Zlink_to_dirT)Ztarget_is_directoryFrFr�)r�rr+r,r�r-r�r�r;r�rPr�rNr�r�rrr�test_copytree_symlink_dirjs 
�z$TestShutil.test_copytree_symlink_dircCsPd}|��}t||fd�tj�||�}|��}|||�tj�||�}||fS)Nr6r)r�r1rr+r,)ry�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�)ryr�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�rir�r�)
r�r�rr�rr+r�r�r�r�r�rr[)ryr�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�.tarrI)�
_create_filesr�rr�r+r:r,�basenamer�
change_cwd�abspathrr�r�r<�tarfileZ
is_tarfiler-�assertCountEqual�getnames)	ry�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*)ryr+r�rOrrr�_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�rr�rEZfile3Zsub2�outer)r�rr+r,�makedirsr1r�)ryr�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<rn�
check_call�DEVNULLr�)ryr�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�r<�zipfile�
is_zipfile�ZipFiler��namelist)	ryr�r�r�r�r�r�rS�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<rnr�r�r�r�r�rM)
ryr�r�r�r�Zarchive2�zip_cmdr�rOZnames2rrr�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�rn�check_output�STDOUT�CalledProcessError�output�decodermrz�format)	ryr�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)ryr�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<)ryr�r�r�r�r�rSrrr�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-r2Z
getmembersr��uid�gid)	ryr�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�)ryZcurrent_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<�ryr�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)
NrricSstSr��xrrrr�<lambda>�r7z9TestShutil.test_register_archive_format.<locals>.<lambda>cSstSrr�rrrrr��r7)rirZ)rirZrcSstSrr�rrrrr��r7r�cSsg|]\}}|�qSrr�r=rT�paramsrrrr?�sz;TestShutil.test_register_archive_format.<locals>.<listcomp>cSsg|]\}}|�qSrrr�rrrr?�s)r��	TypeErrorrrr�rr�)ry�formatsrrr�test_register_archive_format�s��z'TestShutil.test_register_archive_formatcKs:|j|dd�f|�|j|tjf|�|j|tf|�dS)NcSs|Srr�r+rrrr��r7z1TestShutil.check_unpack_archive.<locals>.<lambda>)�#check_unpack_archive_with_converterr[r\r)ryr�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�rRrrr+r,r�rrr�r�r��	ReadErrorrr�)ryr��	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)ryr�rrr�check_unpack_tarball�szTestShutil.check_unpack_tarballcCs|�d�dS)Nr��r�rxrrr�test_unpack_archive_tar�sz"TestShutil.test_unpack_archive_tarcCs|�d�dS)Nr�r�rxrrr�test_unpack_archive_gztar�sz$TestShutil.test_unpack_archive_gztarcCs|�d�dS)N�bztarr�rxrrr�test_unpack_archive_bztar�sz$TestShutil.test_unpack_archive_bztarz(AIX MAXDATA must be 0x20000000 or largercCs|�d�dS)N�xztarr�rxrrr�test_unpack_archive_xztar�sz$TestShutil.test_unpack_archive_xztarc	Cs2|�d�|�t��|jddd�W5QRXdS)Nr�r�r�)r�r�r�rxrrr�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)Nri�	stuff.boo�xx)r�)r��extract_dir�extrarxrr�_boo�sz-TestShutil.test_unpack_registry.<locals>._booZBooz.booz.b2)r�rir�r�ZBoo2r�)	rrrr�r	r
r�r�r�)ryr�r�rrxr�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)r4�used�freer)r�r�rr+r:rxr�rrrZ
assertGreaterr4r��assertGreaterEqualr�)ry�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�ryrr�check_chown6s

z*TestShutil.test_chown.<locals>.check_chown)r�r)NN)r�r]r�r1r�r�r�r�LookupErrorr�r�getuid�getgidr�r�r�r�)ryr:r�r�r
rr�rr	r�
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�)ryr�r>r?rb�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�rK)ryr>r?�dst_file�src_filerrrr�test_copyfile_return_valuebs
z%TestShutil.test_copyfile_return_valuecCsX|��}tj�|d�}t|d�|�ttj||�|�t	tj||�|�
t|�d�dSrc)r�rr+r,r1r�rr�r"rr�rK)ryr>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,r1r;r�rN)ryr>r?rbrrrr�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�r1r;r�rN)ryr�r>r?rbrrrr�test_copytree_subdirectory�s

z%TestShutil.test_copytree_subdirectory)r�)fr$r%r&rvr~r�r�r�skip_unless_symlinkr�r��unittest�
skipUnlessr�r�r�r��skipIfrlr�r[rr�r�r�r�r�r�r�r�rrZskip_unless_xattrrrrr r!r#r0r4rArDrJrSr^r_�mock�patchrbrirorprrrsryr|r�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_lzmarkrsr�r�r�rrrrrrr�
__classcell__rrrzrrt�s&	





$��

(��

?�

"


A*














#
�
$��





�

9
rtc@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)r]r��temp_dirr�r�r�r^�	temp_filerr�rTr��S_IXUSRr2r+rqr��file�env_path�curdir�extrxrrrrv�s�zTestWhich.setUpcCs&tj|j|jd�}|�||jj�dS�Nr�)r�rr(r�r�r&rT�ryrrrr�
test_basic�szTestWhich.test_basiccCs(tj|jj|jd�}|�||jj�dSr,)r�rr&rTr%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+rqr�r,r(rr�r�rr%r��assertIsNone)ryr��tail_dir�relpathrrrr�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�r�rr(rlr�r�r,r*r0)ryr�rrrr�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&rTr�r��access�W_OKrmr�rr(r�r0r-rrr�test_non_matching_mode�s

z TestWhich.test_non_matching_modec	CsVtj�|j�\}}tj|d��.tj|j|d�}|�	|tj�
||j��W5QRXdSr,)rr+rqr�rr�r�rr(r�r,)ryr�r1rrrr�test_relative_path�szTestWhich.test_relative_pathcCstjd|jd�}|�|�dS)Nzfoo.exer�)r�rr�r0r-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&rTr+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&rT�ry�envrrrr�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(r0r@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>rCTrDrG)rr+r�r&rTrlr�r*r)r�r�r,rr?�pathseprrrr�rHr�rr(r0r�r�)ryZexpected_cwdr*rArrrr�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>rCT)rarFrGrDr�)rr?rrrrr�rHrr�r�rr(r�r&rTr@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)r�rr(r0)ryr�rArrrr�test_empty_paths�
zTestWhich.test_empty_pathc	Cs:t���(}|�dd�t�|j�}|�|�W5QRXdSr=)rr?rr�rr(r0r@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�)r]r^r%rr�rTr�r'r�r2r+r�rNrr?r�rr��ryr+Ztemp_filexyzZprogramrArrrr�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)NrOrPr#r�;rQr�)r]r^r%r�r2rr+r�rTrNrr?r�rr�rRrrr�test_pathext_with_empty_str;s�
z%TestWhich.test_pathext_with_empty_strN)r$r%r&rvr.r/r3r4rrr[rr�r8r9r:rrlr�r<rBrIrKrLrMrNrSrUrrrrr!�s2
�
�

r!c@seZdZdd�ZdS)�TestWhichBytescCsXt�|�t�|j�|_t�|j�|_t�|jj�|j_t�|j�|_t�|j	�|_	dSr)
r!rvrr�r�r(r&rTr*r+rxrrrrvMs
zTestWhichBytes.setUpN)r$r%r&rvrrrrrVLsrVc@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)rlr�rr+r�r�r]r�r>r?r,rrr-r.)ryr�r�rFrrrrvXs
zTestMove.setUpcCs6|j|jfD]$}z|r t�|�WqYqXqdSr)r>r?r�r�r�rrrr~dszTestMove.tearDownc	Csft|d��}|��}W5QRXt�||�t|d��}|�||���W5QRX|�tj�|��dS�NrH)	r-rJr��mover�r�rr+r�)ryrbrc�real_dstrF�contentsrrr�_check_move_filelszTestMove._check_move_filecCsFtt�|��}t�||�|�|tt�|���|�tj�|��dSr)	rMrrNr�rYr�r�r+r�)ryrbrcrZr[rrr�_check_move_dirtszTestMove._check_move_dircCs|�|j|j|j�dSr)r\rrrxrrr�test_move_filezszTestMove.test_move_filecCs|�|j|j|j�dSr)r\rr?rrxrrr�test_move_file_to_dir~szTestMove.test_move_file_to_dircCs|��dSr)r^rxrrr�test_move_file_other_fs�sz TestMove.test_move_file_other_fscCs|��dSr)r_rxrrr�test_move_file_to_dir_other_fs�sz'TestMove.test_move_file_to_dir_other_fscCs@t��}z|�|j||�W5zt�|�WnYnXXdSr)r]r�r�r�r]r>�ryr?rrr�
test_move_dir�szTestMove.test_move_dircCs|��dSr)rcrxrrr�test_move_dir_other_fs�szTestMove.test_move_dir_other_fsc
Cs,|�|j|jtj�|jtj�|j���dSr)r]r>r?rr+r,r�rxrrr�test_move_dir_to_dir�s�zTestMove.test_move_dir_to_dircCs|��dSr)rerxrrr�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�rxrrr�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�rxrrr�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�rrYrr?rxrrr�"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�rrY�ryrcrrr�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��
_destinsrcrqrrr�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�))rozsrc/dest)roz
srcdir.newz;_destinsrc() wrongly concluded that dst (%s) is in src (%s)rp)	rr�rr�r�r+r,r�rqrqrrr�test_destinsrc_false_positive�s
��z&TestMove.test_destinsrc_false_positivecCs\tj�|jd�}t�|j|�t�||j�|�	tj�
|j��|�	tj�|j|j��dSrl)rr+r,r>r�rr�rYrr�rP�samefilermrrr�test_move_file_symlink�s
zTestMove.test_move_file_symlinkcCsld}tj�|j|�}t�|j|�t�||j�tj�|j|�}|�	tj�
|��|�	tj�|j|��dSrl)rr+r,r>r�rr�rYr?r�rPrt)ryr�rcZ
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�rYr�rPr�r��ryrbrcr�rrr�test_move_dangling_symlink�sz#TestMove.test_move_dangling_symlinkcCs|tj�|jd�}tj�|jd�}t�|�t�||�tj�|jd�}t�||�|�	tj�
|��|�	tj�||��dSrw)rr+r,r>r�r�r?r�rYr�rPrtrxrrr�test_move_dir_symlink�s
zTestMove.test_move_dir_symlinkc	Cs6t�|j|j�}|�|tj�|jtj�|j���dSr)	r�rYrr?r�rr+r,r�r-rrr�test_move_return_value�s�zTestMove.test_move_return_valuecCs6t�|jtj�|jd��}|�|tj�|jd��dSrl)r�rYrrr+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>._copyrgri)r�rYrr?r�r��ryrrr}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}rrrsz6TestMove.test_move_dir_special_function.<locals>._copy�childZchild1rgr)rr�rr+r,r>r�rYr?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�rYr�rNr�r,rxrrr�test_move_dir_permission_denieds 

z(TestMove.test_move_dir_permission_deniedN))r$r%r&rvr~r\r]r^r_r&r`rarcrdrerfrhrrrr+rirjrkrnrrrsrrrurvryrzr{r|rr�r[r�r�r�rrrrrWVsd




		



���rWc@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)ryZ
raise_in_exitZsuppress_at_exitrrr�__init__DszTestCopyFile.Faux.__init__cGsdS)Nr�r)ryrrrrrJGszTestCopyFile.Faux.readcCs
d|_dS�NT)�_enteredrxrrr�	__enter__IszTestCopyFile.Faux.__enter__cCs&|||f|_|jr d|_td��|jS)NT�Cannot close)�_exited_withr��_raisedrr�)ry�exc_type�exc_val�exc_tbrrr�__exit__Ks
zTestCopyFile.Faux.__exit__)FT)
r$r%r&r�r�r�r�rJr�r�rrrr�Faux@s
r�cCs|jr
t`dSr)�_deleter�r-rxrrrr~RszTestCopyFile.tearDowncCs|t_d|_dSr�)r�r-r�)ryr"rrr�_set_shutil_openVszTestCopyFile._set_shutil_opencCs*ddd�}|�|�|�ttjdd�dS)NrIcSs|dkrtd��dst�dS)N�srcfilezCannot open "srcfile"r�rr3�r�r5rrr�_open[sz4TestCopyFile.test_w_source_open_fails.<locals>._openr��destfile)rI)r�r�rr�r"�ryr�rrr�test_w_source_open_failsZs

z%TestCopyFile.test_w_source_open_failszskipped on macOScsd|���d	�fdd�	}|�|�t�dd�|��j�|��jdtk�|��jdj	d�dS)
NrIcs(|dkr�S|dkrtd��ds$t�dS)Nr�r��Cannot open "destfile"rr�r��r�rrr�is
z2TestCopyFile.test_w_dest_open_fails.<locals>._openr�r�rri)r�)rI)
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)NTrIcs$|dkr�S|dkr�Sds t�dS�Nr�r�rr2r��r�r�rrr�~s
z3TestCopyFile.test_w_dest_close_fails.<locals>._openr�r�rri)r�)rI)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)	NTrIcs$|dkr�S|dkr�Sds t�dSr�r2r�r�rrr��s
z5TestCopyFile.test_w_source_close_fails.<locals>._openr�r�r)rI)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�)r]r�r>r�r�r�rr+r,r:r��upperr�r�rYr�rOrbrrr�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)rGr�FILESIZE��clsrrr�
setUpClass�szTestCopyFileObj.setUpClasscCst�t�t�t�dSr)rr\rrwr�rrr�
tearDownClass�s
zTestCopyFileObj.tearDownClasscCst�t�dSr�rr\rwrxrrrr~�szTestCopyFileObj.tearDownc
cs:ttd��&}ttd��}||fVW5QRXW5QRXdS�NrHr'�r-rrwrqrrr�	get_files�szTestCopyFileObj.get_filesc
CsDt|d��0}t|d��}|�|��|���W5QRXW5QRXdSrX)r-r�rJ)ryrbrc�fsrc�fdstrrr�assert_files_eq�szTestCopyFileObj.assert_files_eqc	Cs4|���\}}t�||�W5QRX|�tt�dSr)r�r��copyfileobjr�rrwrqrrr�test_content�szTestCopyFileObj.test_contentc	Cs<|���*\}}t�||�|jr$t�|jr.t�W5QRXdSr)r�r�r��closedr3rqrrr�test_file_not_closed�s
z$TestCopyFileObj.test_file_not_closedc	CsL|���:\}}t�||�|�|��|j�|�|��|j�W5QRXdSr)r�r�r�r��tellr�rqrrr�test_file_offset�sz TestCopyFileObj.test_file_offsetr|zWindows onlyc	Cs tj�d��}t�tt�W5QRX|js.t�|�	|j
ddd�tjdd��}|�
d�W5QRX|j}|�tj|�tj�d��}t�|t�W5QRX|�	|j
ddd�tjdd��}W5QRX|j}|�tj|�tj�d��}t�|t�W5QRX|j�rt�|�|t�dS)	Nzshutil._copyfileobj_readintorrZiFrXsfoor)rrrr�r"rrw�calledr3r��	call_argsr]r^r.rTr�rr\r�)ry�mrFrrrr�
test_win_impl�s&

zTestCopyFileObj.test_win_implN)r$r%r&r��classmethodr�r�r~�
contextlib�contextmanagerr�r�r�r�r�rrrrTr�rrrrr��s


r�c@s�eZdZdZdZdZdZedd��Zedd��Z	d	d
�Z
ejdd��Z
d
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS) �_ZeroCopyFileTestz#Tests common to all zero-copy APIs.i�r7r�c	CsDtt|j�ttd��$}|��|_t|j�|jks6t�W5QRXdSrX)rGrr�r-rJ�FILEDATAr�r3)r�rFrrrr�	s
z_ZeroCopyFileTest.setUpClasscCst�t�dSr)rr\rr�rrrr�	sz_ZeroCopyFileTest.tearDownClasscCst�t�dSrr�rxrrrr~	sz_ZeroCopyFileTest.tearDownc
cs:ttd��&}ttd��}||fVW5QRXW5QRXdSr�r�rqrrrr�	sz_ZeroCopyFileTest.get_filescOstd��dS)Nzmust be implemented in subclass)�NotImplementedError)ryrrrrr�zerocopy_fun	sz_ZeroCopyFileTest.zerocopy_funcCs$|��|��|��|��dSr)r~r�r�rvrxrrr�reset	sz_ZeroCopyFileTest.resetc
Cs�|���\}}|�||�W5QRX|�ttdd�|j�|���8\}}tj�d��}t	�
tt�W5QRX|jrvt
�W5QRXdS)NT�r/zshutil.copyfileobj)r�r�r�rKrwr�rrrr�r"rr�r3)ryrbrcr�rrr�test_regular_copy'	sz#_ZeroCopyFileTest.test_regular_copyc
Cs`|�|j�|���,\}}|�t��|�||�W5QRXW5QRX|�ttdd�|j	�dS)NTr�)
r�r�r�r�r/r�r�rKrr�rqrrr�test_same_file1	s
 z _ZeroCopyFileTest.test_same_filec	Cs>t��}|�t��}t�|d�W5QRX|�|jj|�dS)N�new)	r]r�r�r�r�r"r�r�r�)ryrTr�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)Nrbrccs
t���Sr�rr\r)r`rrr�B	r7z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>cs
t���Srr�r)rarrr�C	r7r'rHTr�r7)rr�r-r�r�rKrqr)rar`r�test_empty_file?	s
 z!_ZeroCopyFileTest.test_empty_filec	Cs4tjj|jtd��|�ttjtt	�W5QRXdS)N�ra)
rrr�
PATCHPOINT�ZeroDivisionErrorr�r�r"rrwrxrrr�test_unhandled_exceptionM	s
��z*_ZeroCopyFileTest.test_unhandled_exceptioncCsdtjj|jttjd�d��@|���,\}}|�t	��|�
||�W5QRXW5QRXW5QRXdS�N�yor�)rrrr�rr�EINVALr�r�r
r�rqrrr�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�rqrrr�test_filesystem_full]	s


�z&_ZeroCopyFileTest.test_filesystem_fullN)r$r%r&�__doc__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)ryr�r�rrrr�j	sz!TestZeroCopySendfile.zerocopy_funcCsvt�|j��J}ttd��4}|�t��|�||�W5QRXt�	||�W5QRXW5QRX|�
ttdd�|j�dS)Nr'Tr�)�io�BytesIOr�r-rwr�r
r�r�r�r�rKrqrrr�test_non_regular_file_srcm	s z.TestZeroCopySendfile.test_non_regular_file_srccCsxttd��d}t���P}|�t��|�||�W5QRXt�||�|�	d�|�
|��|j�W5QRXW5QRXdS)NrHr)
r-rr�r�r�r
r�r�r��seekr�rJr�rqrrr�test_non_regular_file_dstv	s

z.TestZeroCopySendfile.test_non_regular_file_dstcs���fdd�}g�tj�tjjdd|d��@|���,\}}|�t��}t�	||�W5QRXW5QRXW5QRX�sxt
�|�|jj
t
j�dS)Ncs(�s��d��||�Sttjd��dS)Nr�)rQrr�EBADFr�reZ
orig_sendfilerrrW�	s

zDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfiler�T)rFra)rrWrrrr�r�rr�r�r3r�r�rr�)ryrWrbrcr�rr�r�test_exception_on_second_call	s
�*z2TestZeroCopySendfile.test_exception_on_second_callc
Csdtjjdtd��4}|��� \}}t�||�|js6t�W5QRXW5QRX|�	t
tdd�|j�dS)N�os.fstatr�Tr�)
rrrrr�r�r�r�r3r�rKrwr��ryr�rbrcrrr�test_cant_get_size�	s
z'TestZeroCopySendfile.test_cant_get_sizec
Csttj��}d|_tjjd|d��4}|��� \}}t�||�|jsFt	�W5QRXW5QRX|�
ttdd�|j
�dS)Nir��rETr�)rr�Mock�st_sizerr�r�r�r�r3r�rKrwr��ryrr�rbrcrrr�test_small_chunks�	s
z&TestZeroCopySendfile.test_small_chunksc
Csztj��}|jd|_tjjd|d��4}|��� \}}t�||�|j	sLt
�W5QRXW5QRX|�tt
dd�|j�dS)Ni@r�r�Tr�)rrr�r�r�rr�r�r�r�r3r�rKrwr�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"rrwr�r�rr+rBrr\r1r�)ryr��	blocksizerrr�test_blocksize_arg�	s*��
�z'TestZeroCopySendfile.test_blocksize_argcCs�tjs
t�z�tjj|jttj	d�d��J}|�
��,\}}|�t��t�
||�W5QRXW5QRX|jslt�W5QRXtjr�t�tj�|j��}t�tt�|jr�t�W5QRXW5dt_XdS)NTr�r�)r��_USE_CP_SENDFILEr3rrrr�rr�ENOTSOCKr�r�r
r�r�r"rrwr�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_DATArqrrrr��	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)z�Check if get_terminal_size() returns a meaningful value.

        There's no easy portable way to actually check the size of the
        terminal, so let's check if it returns something sensible instead.
        rN)r��get_terminal_sizer�columns�lines)ryrCrrr�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)z.Check if environment variables have precedenceZ777�COLUMNS�LINESi	Z888ixN)rr?r�r�r�r�r��ryrArCrrr�test_os_environ_first�	s

z#TermsizeTests.test_os_environ_firstc	CsLt���}d|d<d|d<t��}W5QRX|�|jd�|�|jd�dS)Nrr�Zyyyr�r)rr?r�r�rr�r�rrrr�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)	z�Check if stty returns the same results ignoring env

        This test will fail if stdin and stdout are connected to
        different terminals with different sizes. Nevertheless, such
        situations should be pretty rare.
        ZsttyrCzstty invocation failedrirr�r�N)rnr�r�rqr�r`r�rmrrrr?r�r�r�)ryrCr�rAr@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?rHrlr�r�r�r�r�r-r�devnull)ryrArCrFrrr�
test_fallback
s
� zTermsizeTests.test_fallbackN)r$r%r&r�rrrrr�isattyrlrr_r[rrrrrrr��	s
�r�c@seZdZdZdd�ZdS)�PublicAPITestsz>Ensures that the correct values are exposed in the public API.cCs~|�ttd��dddddddd	d
ddd
dddddddddddddg}ttd�sZtjdkrd|�d�|�ttj�t|��dS)N�__all__r�r"r�r�rrr;rYr�rrv�	ExecErrorrrrrrrr
rrQrrr�r�statvfsr|r�)	r�r[r�rrTrQr�rWr)ryZ
target_apirrr�test_module_all_attribute6
s6�
z(PublicAPITests.test_module_all_attributeN)r$r%r&r�rrrrrr
3
sr
�__main__)F)F)IrZ
unittest.mockr�r]rlr�rZos.pathrr$r[rnr8r:r�r�rrrrrrrr	r
rrr
r�r�r��ImportErrorr�rZtest.supportrrrwr�r�r�rIr�rkr�r�r�r�rr&r1rGrKrRrfZSUPPORTS_SENDFILErsZTestCasertr!rVrWr�r�r�r�rr�r�r�r
r$�mainrrrr�<module>s�8




w=
g|JdvN


F1le Man4ger