HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //proc/thread-self/root/usr/local/lib/python3.7/test/__pycache__/test_shutil.cpython-37.pyc
B

��g�:�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZm
Z
mZmZmZmZmZmZmZmZmZddlZddlZddlmZddlmZmZedZyddlZddl Z dZ!Wne"k
r�dZ!YnXdd	�Z#d
d�Z$ddd
�Z%d dd�Z&dd�Z'Gdd�dej(�Z)Gdd�dej(�Z*Gdd�dej(�Z+Gdd�dej(�Z,Gdd�dej(�Z-Gdd�dej(�Z.e/dk�r�e�0�dS)!�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)�support)�TESTFN�FakePath�2TFcOstttdd�d��dS)NZEXDEV�zInvalid cross-device link)�OSError�getattr�errno)�args�kwargs�r�,/usr/local/lib/python3.7/test/test_shutil.py�_fake_rename$srcst����fdd��}|S)Ncs$ztj}tt_�||�S|t_XdS)N)�os�renamer)rrZbuiltin_rename)�funcrr�wrap)s

zmock_rename.<locals>.wrap)�	functools�wraps)rrr)rr�mock_rename(sr c	CsBt|t�rtjj|�}t||r"dnd��}|�|�WdQRXdS)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_file3s
r+c	Cs<t|t�rtjj|�}t||r"dnd��
}|��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)r*rrr�	read_file?s
r/cCs�g}xztt�|��D]h}tj�||�}tj�|�rrtj�|�sr|�|d�x.t|�D]}|�|d|�qVWq|�|�qW|S)N�/)	�sortedr�listdirr%r&�isdir�islink�append�rlistdir)r%�res�name�p�nrrrr6Ksr6cs�eZdZ�fdd�Z�fdd�Zdd�Zdd�Zejd	d
��Z	ejdd��Z
d
d�Ze�
eed�d�e�ejdd�dkd�e�eed�o�e��dkd�dd����Zdd�Zdd�Ze�
eed�d�ejdd ���Ze�
eed!�d"�ejd#d$���Ze�eed!�d%�ejd&d'���Zejd(d)��Ze�
eed*��oHeed+��oHeed,�d-�d.d/��Zejd0d1��Zejeje�
eed��o�e��dkd2�d3d4����Zejd5d6��Z ejd7d8��Z!ejd9d:��Z"ejd;d<��Z#d=d>�Z$d?d@�Z%dAdB�Z&ejdCdD��Z'dEdF�Z(dGdH�Z)ej*�+dI�dJdK��Z,e�ej-dLkdM�e�
eedN�dO�dPdQ���Z.ejdRdS��Z/ejdTdU��Z0e�
eedV�dW�dXdY��Z1e�
eedV�dW�ejdZd[���Z2d\d]�Z3ejd^d_��Z4ejd`da��Z5dbdc�Z6e�
eed�d�ddde��Z7e�
eed�d�e�
eedf�dg�dhdi���Z8ej9djdk��Z:dldm�Z;d�dodp�Z<ej9e�
e=�>dq�dr�dsdt���Z?ej9dudv��Z@ej9e�
e=�>dw�dx�dydz���ZAej9e�
e=�>d{�d|�d}d~���ZBdd��ZCej9d�d���ZDej9e�
eEd��d�d����ZFd�d��ZGd�d��ZHej9d�d���ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMej9d�d���ZNejOd�d���ZPejQd�d���ZRej9d�d���ZSd�d��ZTe�
ee=d��d��d�d���ZUe�
eEd��e�
eed��d��d�d����ZVd�d��ZWd�d��ZXd�d��ZYd�d��ZZ�Z[S)��
TestShutilcstt|���g|_dS)N)�superr;�setUp�tempdirs)�self)�	__class__rrr=ZszTestShutil.setUpcs:tt|���x&|jr4|j��}t�|tjdk�qWdS)N)�nt�cygwin)	r<r;�tearDownr>�pop�shutil�rmtreerr8)r?�d)r@rrrC^s
zTestShutil.tearDowncCst��}|j�|�|S)zjCreate a temporary directory that will be cleaned up.

        Returns the path of the directory.
        )�tempfile�mkdtempr>r5)r?rGrrrrIeszTestShutil.mkdtempcCsX|��}tj�|d�}t�|�ttj�|d�d�t�|�}|�|t�t	�
|�dS)NZkillmeZsomefile�foo)rIrr%r&�mkdirr+�fsencode�assertIsInstance�bytesrErF)r?�tmpZvictimrrr�test_rmtree_works_on_bytesns

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)	N�dir�linkcs��|�dS)N)r5)r)�errorsrr�onerror�sz8TestShutil.test_rmtree_fails_on_symlink.<locals>.onerror)rT�r�)rIrr%r&rK�symlink�assertRaisesrrErF�
assertTrue�exists�lexists�assertEqual�len�assertIsr4rM)r?rOZdir_rRrTr)rSr�test_rmtree_fails_on_symlinkws
z'TestShutil.test_rmtree_fails_on_symlinkc
Cs�|��}tj�|d�}tj�|d�}tj�|d�}x|||fD]}t�|�q>Wtj�|d�}t|d�tj�|d�}t�||�tj�|d�}t�||�tj�|d�}	t�||	�t�|�|�	tj�
|��|�tj�
|��|�tj�
|��dS)	N�dir1�dir2�dir3�file1rJ�link1�link2�link3)rIrr%r&rKr+rWrErF�assertFalserZrY)
r?rOr`rarbrGrcrdrerfrrr�test_rmtree_works_on_symlinks�s$

z(TestShutil.test_rmtree_works_on_symlinksc	s�t��}|�ttj|�tj|dd�|��}t|dfd�tj	�
|d�}|�t��}t�|�WdQRX|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��|�dS)N)r5)r)rSrrrT�sz.TestShutil.test_rmtree_errors.<locals>.onerror)rTrVrrU)rH�mktemprX�FileNotFoundErrorrErFrIr+rr%r&�NotADirectoryError�assertInZ	exception�filenamerYrZr\r]r^�scandirrM�rmdir)r?ro�tmpdir�cmZ
possible_argsrTr)rSr�test_rmtree_errors�s2zTestShutil.test_rmtree_errors�chmodzrequires os.chmod()N�rBz2This 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�b)rT�z1Expected call to onerror function did not happen.)�
errorStaterrKr�
addCleanuprErFr%r&�child_file_path�child_dir_pathr
�create_empty_file�stat�st_mode�S_IREAD�S_IEXECru�check_args_to_onerrorr\)r?Z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)NrVrrUrz)r{r�unlinkr\r}rqr~r^r2rnrrY�
issubclassr)r?r�arg�excrrrr��s


z TestShutil.check_args_to_onerrorcsLz>tj��fdd�}|t_t�t�ttdfd�t�t�Wd�t_XdS)Ncs|tkrt��n�|�SdS)N)rr)�fnrr)�
orig_lstatrr�raiserszFTestShutil.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiserrJ)r�lstatrKrr+rErF)r?r�r)r�r�+test_rmtree_does_not_choke_on_failing_lstat�s
z6TestShutil.test_rmtree_does_not_choke_on_failing_lstatzrequires os.chmodcCs�|��}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)NrJ�bar�baz�quuxrA)rIrr%r&r+rWrur��S_IRWXU�S_IRWXG�S_IRWXO�assertNotEqualr�rE�copymoder\r8)r?�tmp_dir�src�dst�src_link�dst_linkrrr�test_copymode_follow_symlinkss0

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)NrJr�r�r�F)�follow_symlinks)rIrr%r&r+rWrur�r�r�r�r�rEr�r\r�r�r�)r?r�r�r�r�r�rrr� test_copymode_symlink_to_symlink0s.

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�dS)NrJr�r�r�F)r�)rIrr%r&r+rWrEr�)r?r�r�r�r�r�rrr�*test_copymode_symlink_to_symlink_wo_lchmodNs

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�rtx*dD]"}	|�t||	�t||	�d
��qNWttd��r�|�|j|j�ttd��r�t|d��r�|�|j|j�tj||dd
�|�tt�|�jt�|�j�dk�dS)NrJr�r��quxgE@r��lchflags�	UF_NODUMPT)r�F)�st_atime�st_mtimerU�st_flagsg�������?)rIrr%r&r+r��utimer�r�r�rW�hasattrr�r�r�r�r�rE�copystatr��supports_follow_symlinks�assertLessEqualrr\r�rY�abs)
r?r�r�r�r�r��src_stat�
src_link_statZ
dst_link_stat�attrrrr�test_copystat_symlinks\sD







z!TestShutil.test_copystat_symlinks�chflags�
EOPNOTSUPP�ENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcCs�|��}tj�|d�}tj�|d�}t|d�t|d�dd�}tj}zTx*tjtjfD]}||�t_t	�
||�qVW|tjtj�t_|�tt	j
||�Wd|t_XdS)Nrc�file2�xxxcst��dd���fdd�
}|S)NT)r�cs��_��dS)N)r)r%�flagsr�)�err�exrr�_chflags_raiser�sznTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser)r)r�r�r)r�r�r�make_chflags_raiser�szUTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser)
rIrr%r&r+r�rr�r�rEr�rXr)r?rrrcr�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�
|��Wd�t_Xd
d���fdd
�
}ztj
�|t_
t��|�Wd�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)NrJr�zuser.foos42zuser.bars43�EPERMcs"|dkr��n�|||f|�dS)Nzuser.foor)�fnamer��valr)�
orig_setxattr�os_errorrr�_raise_on_user_foo�sz5TestShutil.test_copyxattr.<locals>._raise_on_user_fooT)r�cs |�krttjd���||d�S)NzOperation not supported)r�)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)rIrr%r&r+rE�
_copyxattr�setxattrr\r1�	listxattr�getxattr�removerrr�rnrur�)r?r�r�r�r�ZsrcroZdstror)r�r�r�r�r�test_copyxattr�sX

 






zTestShutil.test_copyxattrzroot 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)
NrJr�ztrusted.foos42s43F)r�r�r�)
rIrr%r&r+rWr�rEr�r\r�rXr)r?r�r�r�r�r�rrr�test_copyxattr_symlinks�s 

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)NrJr�r�r�T)r�F)rIrr%r&r+rWr�r�r�r�r�rE�copyrgr4r\r/r�rY�readlinkr�r�)r?r�r�r�r�rrr�test_copy_symlinks�s$


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�rZx*d
D]"}|�t||�t||�d��q4Wttd��r�|�|j|j�|�|j|j�ttd��r�t|d��r�|�|j|j�dS)
NrJr�r�r�r�r�T)r�F)r�r�rUr�)rIrr%r&r+rWr�r�r�r�r�r�r�r�rE�copy2rgr4r\r/r�rYr�r�r�r�rr�r�r�)	r?r�r�r�r�r�r��dst_statr�rrr�test_copy2_symlinkss:






zTestShutil.test_copy2_symlinkscCsr|��}tj�|d�}tj�|d�}t|d�t�|dd�t�||�|�t�	|d�t�	|d��t�
|�dS)NrJr�zuser.foos42)rIrr%r&r+r�rEr�r\r�r�)r?r�r�r�rrr�test_copy2_xattr5s

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�rRrJF)r�)
rIrr%r&r+rWrE�copyfilerYr4r\r�rg)r?r�r�r�r�rRrrr�test_copyfile_symlinksBs
z!TestShutil.test_copyfile_symlinkscs�tjtjtjtjhtjko0tjtjko0tjtjk}|r�|�	t
j�|�	t
jj
�|��}tj�|d�}t�|�z<t
j}Gdd�dt���fdd�}|t
_|��t
j|�Wd|t
_Xn|�t
j�|�t
jj
�dS)Nrxc@seZdZdS)zHTestShutil.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)�__name__�
__module__�__qualname__rrrr�Called`sr�cs��dS)Nr)rr)r�rr�_raiseraszITestShutil.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser)rr'r�r�rq�supports_dir_fdr2�supports_fdr�rYrE�_use_fd_functionsrFZavoids_symlink_attacksrIr%r&rKZ_rmtree_safe_fd�	ExceptionrXrg)r?r�r�rGZreal_rmtreer�r)r�r�-test_rmtree_uses_safe_fd_version_if_availableSs&

z8TestShutil.test_rmtree_uses_safe_fd_version_if_availablecCs4t��\}}t�|�|�ttj|�t�|�dS)N)	rHZmkstempr�closerXrmrErFr�)r?Zhandler%rrr�test_rmtree_dont_delete_fileks
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�destinationztest.txt�123�test_dir�456)rHrIrr%r&r|rErF�dirnamer+rK�copytreerY�isfiler3r/r\)r?�src_dir�dst_dir�actualrrr�test_copytree_simplers 
zTestShutil.test_copytree_simplec		Csl|��}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��tj�|d��t�|�}ttd��rL|�|j|j�ttd	��rh|�|j|j�dS)
Nr�r��subzfile.txtrJrRzsub/linkr�r�r�T)�symlinks)rIrr%r&rKr+rWr�r�r�r�r�r�r�r�rEr�rYr4r\r�r�r�)	r?r�r�r�Zsub_dirr�r�r�r�rrr�test_copytree_symlinks�s2




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���Wdt�
|�Xz`t�	dd
�}tj
|||d�|�|||d���|�|||dd	���|�|||dd���Wdt�
|�XzJdd�}tj
|||d�|�|||dd	d
���|�|||dd���Wdt�
|�XWdt�
|�t�
tj�|��XdS)Nr�ztest.txtr�ztest.tmpr�r�Z	test_dir2�subdirZsubdir2ztest.pyz*.tmp)�ignorezsubdir*cSsjg}x`|D]X}tj�||�}tj�|�rD|��ddkrD|�|�q
tj�|�ddkr
|�|�q
W|S)N���r�z.py)rr%r&r3�splitr5�splitext)r��namesr7r8r%rrr�_filter�s
z6TestShutil.test_copytree_with_exclude.<locals>._filter)rr%r&rZrHrIr+rKrE�ignore_patternsr�rYrgrFr�)r?r&rZr�r�Zpatternsr�rrr�test_copytree_with_exclude�sL

z%TestShutil.test_copytree_with_excludec	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)N�sourcer�i�zpermissive.txtr�zrestrictive.txtr�i�)rQrU)rHrIrr%r&rKr|rErFrur+r�r\r�r�r�)r?r�r�r�Zrestrictive_subdirZrestrictive_subdir_dstrrr�!test_copytree_retains_permissions�s,
z,TestShutil.test_copytree_retains_permissionszos.chmodc	Cspt��}tj�t��d�}|�tj|�|�tjtj�|��t	d�|_
|�tj��t�
||�WdQRXdS)Nr�zka-boom)rHrIrr%r&r|rErFr��PermissionError�side_effectrXrr�)r?Z
mock_patchr�r�rrr�test_copytree_winerror�s
z!TestShutil.test_copytree_winerrorrAztemporarily disabled on WindowsrRzrequires os.linkc
Cs�t�t�tj�td�}tj�td�}z�t|d��}|�d�WdQRXyt�||�Wn0tk
r�}z|�	d|�Wdd}~XYnX|�
tjtj
||�t|d��}|�|��d�WdQRXt�|�Wdtjtdd�XdS)	N�cheese�shopr"�cheddarz
os.link(): %sr-T)ri)rrKrr%r&r'r(rRr��skipTestrXrErr�r\r.r�rF)r?r�r��f�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�WdQRXt�d|�|�t	j
t	j||�t|d��}|�|�
�d�WdQRXt�|�Wdt	jtdd�XdS)Nr�r�r"r�r-T)ri)rrKrr%r&r'r(rWrXrErr�r\r.r�rF)r?r�r�rrrr�*test_dont_copy_file_onto_symlink_to_itselfs
z5TestShutil.test_dont_copy_file_onto_symlink_to_itselfc
Cstt�t�zTtj�td�}tj�td�}t�|�t�||�|�ttj	|�tj	|dd�Wdtj	tdd�XdS)Nr�r�T)ri)
rrKrr%r&rWrXrrErF)r?r�r�rrr�test_rmtree_on_symlink3s

z!TestShutil.test_rmtree_on_symlink�mkfifozrequires os.mkfifo()c
Cs~yt�t�Wn0tk
r>}z|�d|�Wdd}~XYnXz,|�tjtjtt	�|�tjtjt
t�Wdt�t�XdS)Nzos.mkfifo(): %s)rrrr�r�rXrE�SpecialFileErrorr��TESTFN2�__file__r�)r?rrrr�test_copyfile_named_pipeBs z#TestShutil.test_copyfile_named_pipec
Cst�t�z�tj�td�}t�|�tj�|d�}yt�|�Wn0tk
rp}z|�d|�Wdd}~XYnXyt�	tt
�Wn\tjk
r�}z<|jd}|�
t|�d�|d\}}}|�
d||�Wdd}~XYnX|�d�Wdtjtdd	�tjt
dd	�XdS)
Nr�Zmypipezos.mkfifo(): %srrUz`%s` is a named pipez$shutil.Error should have been raisedT)ri)rrKrr%r&rr�r�rEr�rrrr\r]�failrF)r?r��piperrSr�r�Z	error_msgrrr�test_copytree_named_pipePs&

 
"z#TestShutil.test_copytree_named_pipecs�|��}tj�|��d�}t|dfd�t�tj�|d��t|ddfd�g��fdd�}tj|||d�|�t	��d	�dS)
Nr�ztest.txtr�r�r�cs��||f�dS)N)r5)r�r�)�copiedrr�_copyrsz4TestShutil.test_copytree_special_func.<locals>._copy)�
copy_functionrV)
rIrr%r&r+rKrEr�r\r])r?r�r�rr)r
r�test_copytree_special_funcis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
IDONTEXISTztest.txtr�r��destination2T)Zignore_dangling_symlinksZdestination3)r�)rIrr%r&rWrKr+rXrrEr��assertNotInr2rn)r?r�r�rrr�test_copytree_dangling_symlinksxsz*TestShutil.test_copytree_dangling_symlinksc	Cs|��}tj�|��d�}t�tj�|d��ttj�|dd�d��WdQRXtjtj�|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_dirztest.txtr"Zlink_to_dirT)Ztarget_is_directoryF)r�r)rIrr%r&rKr'rWrEr�rgr4rnr2rY)r?r�r�rrr�test_copytree_symlink_dir�s
z$TestShutil.test_copytree_symlink_dircCsPd}|��}t||fd�tj�||�}|��}|||�tj�||�}||fS)Nztest.txtr�)rIr+rr%r&)r?�methodr�rrrc�tmpdir2r�rrr�
_copy_file�s
zTestShutil._copy_filecCsB|�tj�\}}|�tj�|��|�t�|�j	t�|�j	�dS)N)
rrEr�rYrr%rZr\r�r�)r?rcr�rrr�	test_copy�szTestShutil.test_copyr�zrequires os.utimecCs�|�tj�\}}|�tj�|��t�|�}t�|�}|�|j	|j	�x(dD] }|�
t||�t||�d�qLWttd�r�t|d�r�|�t|d�t|d��dS)N)r�r�rUr�r�)
rrEr�rYrr%rZr�r\r�r�rr�)r?rcr�Z
file1_statZ
file2_statr�rrr�
test_copy2�s


zTestShutil.test_copy2c	
Csf|�d�\}}|��}t�|�tj�|�}tj�tj�|�d�}t�	|�� tj�
|�}t|d|d�}WdQRX|�||d�|�
tj�|��|�
t�|��t�|d��"}|�|��dddd	d
dg�WdQRXt�	|��t|d|d�}WdQRX|�||d
�|�
tj�|��|�
t�|��t�|d��"}|�|��dddd	d
dg�WdQRXdS)Nrj�archive�gztar�.z.tar.gzzr:gzz./subz./sub2z./file1z./file2z./sub/file3�tarz.tarr-)�
_create_filesrIrrqr%r�r&�basenamer
�
change_cwd�abspathrr\rYr��tarfileZ
is_tarfiler'�assertCountEqual�getnames)	r?�root_dir�base_dirr�work_dir�
rel_base_name�	base_name�tarballZtfrrr�test_make_tarball�s0


zTestShutil.test_make_tarballc	Cs.t�|��}|��}|��t|�SQRXdS)N)r"r'r$�sortr$)r?r%rr�rrr�_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_okrcr�r�r�Zfile3Zsub2�outer)rIrr%r&�makedirsr+rK)r?r&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)Nrrz.tar.gzzarchive2.tarrz-cf)�cwd�stdoutz.tarT)Zdry_run)
rrr%r&rIrr\rYr��
subprocess�
check_call�DEVNULLr-)r?r%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|�}WdQRX|�||d�|�
tj�|��|�
t�|��t�|��$}|�|��dddddd	d
g�WdQRXt�	|�� tj�
|�}t|d||�}WdQRX|�||d�|�
tj�|��|�
t�|��t�|��"}|�|��dddddd	g�WdQRXdS)Nr�zipz.zipzdist/z	dist/sub/z
dist/sub2/z
dist/file1z
dist/file2zdist/sub/file3r0)rrIrrqr%r�r&rr
r r!rr\rYr��zipfileZ
is_zipfile�ZipFiler#�namelist)	r?r%r&rr'r(r)r7�zfrrr�test_make_zipfiles4


zTestShutil.test_make_zipfiler8zNeed the zip command to runc
	Cs�|��\}}tj�|��d�}t|d||�}|�||d�|�tj�|��tj�|d�}dddd|g}t	j
||t	jd�|�tj�|��t�
|��}|��}WdQRXt�
|��}|��}	WdQRX|�t|�t|	��dS)Nrr8z.zipzarchive2.zipz-qz-r)r2r3)rrr%r&rIrr\rYr�r4r5r6r9r:r;r1)
r?r%r&r)rZarchive2�zip_cmdr<r�Znames2rrr�test_zipfile_vs_zipBs
zTestShutil.test_zipfile_vs_zip�unzipzNeed the unzip command to runc	Cs�|��\}}tj�|��d�}t|d||�}|�||d�|�tj�|��dd|g}t	�
|��vytj|tj
d�WnZtjk
r�}z:|jjdd�}d	|kr�|�d
�d}|�|�||��Wdd}~XYnXWdQRXdS)Nrr8z.zipr@z-t)�stderr�replace)rSzunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})rrr%r&rIrr\rYr�r
r r4�check_outputZSTDOUT�CalledProcessError�output�decoder�r
�format)	r?r%r&r)rr>r�Zdetails�msgrrr�test_unzip_zipfile\s

zTestShutil.test_unzip_zipfilecCs*|��}tj�|d�}|�tt|d�dS)Nrr�)rIrr%r&rX�
ValueErrorr)r?rrr)rrr�test_make_archivetszTestShutil.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�rootrr8)�owner�grouprZ	kjhkjhkjgZoihohoh)
�UID_GID_SUPPORT�grp�getgrgid�pwd�getpwuidrrr%r&rIrrYr�)r?rNrMr%r&r)r7rrr�test_make_archive_owner_groupys"



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�}WdQRX|�tj�
|��t�|�}z2x,|��D] }|�|jd�|�|jd�q�WWd|��XdS)Nrrrr.)rMrN)rrr%r&rIrPrQrRrSr
r rrYr�r"r'Z
getmembersr\�uid�gidr�)	r?r%r&r)rNrMZarchive_namer�memberrrr�test_tarfile_root_owner�s

z"TestShutil.test_tarfile_root_ownercCsnt��}dd�}td|gd�z@ytdd|��d�Wntk
rJYnX|�t��|�Wdtd�XdS)Nc_s
t��dS)N)�RuntimeError)r�kwrrr�_breaks�sz1TestShutil.test_make_archive_cwd.<locals>._breaksr�zxxx file)r%)r�getcwdrrrIr�r\r)r?Zcurrent_dirr[rrr�test_make_archive_cwd�sz TestShutil.test_make_archive_cwdc	CsF|��}t�|��*|�tdd�d�|�tj�d��WdQRXdS)N�testrztest.tar)	rIr
r r\rrYrr%r�)r?r%rrr�test_make_tarfile_in_curdir�sz&TestShutil.test_make_tarfile_in_curdirc	CsF|��}t�|��*|�tdd�d�|�tj�d��WdQRXdS)Nr^r8ztest.zip)	rIr
r r\rrYrr%r�)r?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�rUcSstS)N)�xrrrr�<lambda>��z9TestShutil.test_register_archive_format.<locals>.<lambda>cSstS)N)rarrrrrb�rc)rUrV)rUrVrzcSstS)N)rarrrrrb�rczxxx filecSsg|]\}}|�qSrr)�.0r8�paramsrrr�
<listcomp>�sz;TestShutil.test_register_archive_format.<locals>.<listcomp>cSsg|]\}}|�qSrr)rdr8rerrrrf�s)rX�	TypeErrorrrrnrr)r?�formatsrrr�test_register_archive_format�s
z'TestShutil.test_register_archive_formatcCs.|�|dd��|�|tj�|�|t�dS)NcSs|S)Nr)r%rrrrb�rcz1TestShutil.check_unpack_archive.<locals>.<lambda>)�#check_unpack_archive_with_converter�pathlibZPathr)r?rGrrr�check_unpack_archive�szTestShutil.check_unpack_archivec
Cs�|��\}}t|�}|�d�tj�|��d�}t||||�}|��}t||�||��|�	t|�|�|��}	t||�||	�|d�|�	t|	�|�|�
tjt|t
��|j
tt|t
�dd�dS)Nr0r)rGr�)rr6r�rr%r&rIrrr\rXrEZ	ReadErrorrrJ)
r?rGZ	converterr%r&�expectedr)rorZtmpdir3rrrrj�s
z.TestShutil.check_unpack_archive_with_convertercCs|�d�dS)Nr)rl)r?rrr�test_unpack_archive_tar�sz"TestShutil.test_unpack_archive_tarcCs|�d�dS)Nr)rl)r?rrr�test_unpack_archive_gztar�sz$TestShutil.test_unpack_archive_gztarcCs|�d�dS)NZbztar)rl)r?rrr�test_unpack_archive_bztar�sz$TestShutil.test_unpack_archive_bztarcCs|�d�dS)NZxztar)rl)r?rrr�test_unpack_archive_xztar�sz$TestShutil.test_unpack_archive_xztarcCs|�d�dS)Nr8)rl)r?rrr�test_unpack_archive_zipsz"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)NrUz	stuff.boo�xx)r\)roZextract_dir�extra)r?rr�_boosz-TestShutil.test_unpack_registry.<locals>._booZBooz.booz.b2)rtrUz	stuff.boorsZBoo2rj)	rrrrXr	r
rnrr\)r?rhrur)r?r�test_unpack_registrys


zTestShutil.test_unpack_registry�
disk_usagez)disk_usage not available on this platformcCs`t�tj�t��}|�|jd�|�|jd�|�	|j
d�|�	|j|j�|�|j|j
�dS)Nr)rErwrr%r�rZ
assertGreaterZtotalZused�assertGreaterEqualZfree)r?�usagerrr�test_disk_usage!szTestShutil.test_disk_usage�chownzrequires os.chownc	s���}tj|d��t�d���t��t���WdQRX��t��tj�dd�WdQRX��t��tj�dd�WdQRX��t	��t��d�WdQRX��t	��t��d�WdQRXt
��}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)N)rQztesting chown functionznon-existing username)�userznon-existing groupname)rNsspamg��Q�	@cs:t���}|dk	r ��||j�|dk	r6��||j�dS)N)rr�r\�st_uid�st_gid)r%rUrV�s)ror?rr�check_chownFs

z*TestShutil.test_chown.<locals>.check_chown)rVr)NN)rIrHrkr+rXrJrEr{�LookupErrorrgr�getuid�getgidrRrSrPrQ)r?r�rUrVr�r|rNr)ror?r�
test_chown+sL




zTestShutil.test_chowncCs�x�tjtjfD]v}|��}|��}tj�|d�}t|d�|||�}|�|tj�|d��||tj�|d��}|�|tj�|d��qWdS)NrJr�)	rEr�r�rIrr%r&r+r\)r?r�r�r�r��rvrrr�test_copy_return_valuefs

z!TestShutil.test_copy_return_valuecCsl|��}|��}tj�|d�}tj�|d�}t|d�t�||�}|�tj�|��|�	t
|�t
|��dS)Nr�rJ)rIrr%r&r+rEr�rYrZr\r/)r?r�r��dst_file�src_filer�rrr�test_copyfile_return_valuers
z%TestShutil.test_copyfile_return_valuecCsH|��}tj�|d�}t|d�|�ttj||�|�t	tj||�dS)NrJ)
rIrr%r&r+rXrrEr�r)r?r�r�rrr�test_copyfile_same_file}s

z"TestShutil.test_copyfile_same_filecCs\|��}|d}|�tj|d�tj�|d�}t|d�t�||�}|�	dgt�
|��dS)N�destTrJ)rIr|rErFrr%r&r+r�r\r2)r?r�r�r�r�rrr�test_copytree_return_value�s
z%TestShutil.test_copytree_return_value)r.)\r�r�r�r=rCrIrPr
�skip_unless_symlinkr_rhrt�unittest�
skipUnlessr�r�skipIf�sys�platformrwr�r�r�r�r�r�r�rr�Zskip_unless_xattrr�r�r�r�r�r�r�r�r�r�r�r��mock�patchr�r8rrrr	rrrrrrrZ
requires_zlibr+r-rrE�whichr7r=r?rIrKrTrOrXr]r_r`rirlrjrnroZrequires_bz2rpZ
requires_lzmarqrrrvrzr�r�r�r�r��
__classcell__rr)r@rr;Xs�		$ 
)@#
A
$
%	
:
r;c@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&��Zd'S)(�	TestWhichcCsptjdd�|_|�tj|jd�tj|jddd�|_t�	|jj
tj�|�|jj
�tj�|jj
�\|_|_dS)NZTmp)�prefixTz.Exe)rQr��suffix)rHrI�temp_dirr|rErF�NamedTemporaryFile�	temp_filerrur8r��S_IXUSRr�r%r�rQ�file)r?rrrr=�s
zTestWhich.setUpcCs&tj|j|jd�}|�||jj�dS)N)r%)rEr�r�rQr\r�r8)r?r�rrr�
test_basic�szTestWhich.test_basiccCs(tj|jj|jd�}|�||jj�dS)N)r%)rEr�r�r8r�r\)r?r�rrr�test_absolute_cmd�szTestWhich.test_absolute_cmdc	Cs�tj�|j�\}}tj�||j�}tj|d��"tj	||j
d�}|�||�WdQRXtj|jd��tj	||d�}|�|�WdQRXdS)N)r%)
rr%r�rQr&r�r
r rEr�r�r\�assertIsNone)r?r&�tail_dir�relpathr�rrr�test_relative_cmd�szTestWhich.test_relative_cmdc	Csltj�|j�}tj|jd��Ftj|j|d�}t	j
dkrT|�|tj�tj
|j��n
|�|�WdQRXdS)N)r%�win32)rr%r�rQr
r rEr�r�r�r�r\r&�curdirr�)r?r&r�rrr�test_cwd�s
zTestWhich.test_cwdrwrznon-root user requiredcCsRt�|jjtj�t�|jjtj�r.|�d�t	j
|j|jtjd�}|�
|�dS)Nzcan't set the file read-only)r%�mode)rrur�r8r�r��access�W_OKr�rEr�r�rQr�)r?r�rrr�test_non_matching_mode�s

z TestWhich.test_non_matching_modec	CsVtj�|j�\}}tj|d��.tj|j|d�}|�	|tj�
||j��WdQRXdS)N)r%)rr%r�rQr
r rEr�r�r\r&)r?r&r�r�rrr�test_relative_path�szTestWhich.test_relative_pathcCstjd|jd�}|�|�dS)Nzfoo.exe)r%)rEr�rQr�)r?r�rrr�test_nonexistent_file�szTestWhich.test_nonexistent_filer�zpathext check is Windows-onlycCs:tj|jdd�|jd�}|�||jjdd�d�dS)N���)r%z.EXE)rEr�r�rQr\r�r8)r?r�rrr�test_pathext_checking�szTestWhich.test_pathext_checkingc	Cs>t���,}|j|d<t�|j�}|�||jj�WdQRXdS)N�PATH)	r
�EnvironmentVarGuardrQrEr�r�r\r�r8)r?�envr�rrr�test_environ_path�s

zTestWhich.test_environ_pathcCs�t���x}d|d<tjjd|jdd��Pt�td|j��4t�|j��t	�
|j�}|�|�WdQRXWdQRXWdQRXWdQRXdS)Nrjr�z
os.confstrT)�return_value�create�defpath)
r
r�r�r�r�rQ�	swap_attrrr rEr�r�r�)r?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�}|�||�WdQRXWdQRXWdQRXWdQRXdS)Nr�r�z
os.confstrT)r�r�r�)rr%rr�r8r�r�r�r#rNrLr&r
r��pathsepr�r�r�rQr�rEr�r�r�r r\)r?Zexpected_cwdr�r�r�rrr�test_environ_path_cwd�s 






zTestWhich.test_environ_path_cwdcCs�t����}|�dd�tjjdtdd��.t�td|j	��t
�|j�}WdQRXWdQRX|�
||jj�tjjd|j	dd��,t�tdd��t
�|j�}WdQRXWdQRX|�
||jj�WdQRXdS)Nr�z
os.confstrT)r�r�r�)r�r�rj)r
r�rDr�r�r�rJr�rrQrEr�r�r\r�r8)r?r�r�rrr�test_environ_path_missings


 
 z#TestWhich.test_environ_path_missingc
Csdtj�|j�}tj|jd��>t���*}|j|d<tj|j	dd�}|�
|�WdQRXWdQRXdS)N)r%r�rj)rr%r�rQr
r r�rEr�r�r�)r?r&r�r�rrr�test_empty_paths

zTestWhich.test_empty_pathc	Cs:t���(}|�dd�t�|j�}|�|�WdQRXdS)Nr�)r
r�rDrEr�r�r�)r?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�WdQRXdS)Nz.xyzZTmp2)rQr�r�rZPATHEXT)r%)rHr�r�rrur8r�r�r|r�r%rr�r
r�rEr�r\)r?ZextZtemp_filexyzZprogramr�r�rrr�test_pathext(s

zTestWhich.test_pathextN)r�r�r�r=r�r�r�r�r�r�r�rrwr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��s$
	r�c@s,eZdZdd�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$d6S)7�TestMovec	Csbd}t��|_t��|_tj�|j|�|_tj�|j|�|_t	|jd��}|�
d�WdQRXdS)NrJr!sspam)rHrIr�r�rr%r&r�r�r'r()r?rorrrrr=<s

zTestMove.setUpcCs:x4|j|jfD]$}y|r"t�|�WqYqXqWdS)N)r�r�rErF)r?rGrrrrCEszTestMove.tearDownc	Csft|d��}|��}WdQRXt�||�t|d��}|�||���WdQRX|�tj�|��dS)Nr,)	r'r.rE�mover\rgrr%rZ)r?r�r��real_dstr�contentsrrr�_check_move_fileMszTestMove._check_move_filecCsFtt�|��}t�||�|�|tt�|���|�tj�|��dS)N)	r1rr2rEr�r\rgr%rZ)r?r�r�r�r�rrr�_check_move_dirUszTestMove._check_move_dircCs|�|j|j|j�dS)N)r�r�r�)r?rrr�test_move_file[szTestMove.test_move_filecCs|�|j|j|j�dS)N)r�r�r�r�)r?rrr�test_move_file_to_dir_szTestMove.test_move_file_to_dircCs|��dS)N)r�)r?rrr�test_move_file_other_fscsz TestMove.test_move_file_other_fscCs|��dS)N)r�)r?rrr�test_move_file_to_dir_other_fshsz'TestMove.test_move_file_to_dir_other_fscCs@t��}z|�|j||�Wdyt�|�WnYnXXdS)N)rHrkr�r�rErF)r?r�rrr�
test_move_dirmszTestMove.test_move_dircCs|��dS)N)r�)r?rrr�test_move_dir_other_fsxszTestMove.test_move_dir_other_fsc
Cs,|�|j|jtj�|jtj�|j���dS)N)r�r�r�rr%r&r)r?rrr�test_move_dir_to_dir}szTestMove.test_move_dir_to_dircCs|��dS)N)r�)r?rrr�test_move_dir_to_dir_other_fs�sz&TestMove.test_move_dir_to_dir_other_fsc
Cs4|�|jtjj|jtj�|jtj�|j���dS)N)r�r�rr%�sepr�r&r)r?rrr�test_move_dir_sep_to_dir�sz!TestMove.test_move_dir_sep_to_dirzrequires os.path.altsepc
Cs4|�|jtjj|jtj�|jtj�|j���dS)N)r�r�rr%�altsepr�r&r)r?rrr�test_move_dir_altsep_to_dir�sz$TestMove.test_move_dir_altsep_to_dirc	Cs4t|jd��WdQRX|�tjtj|j|j�dS)Nr!)r'r�rXrErr�r�r�)r?rrr�"test_existing_file_inside_dest_dir�s
z+TestMove.test_existing_file_inside_dest_dircCs*tj�|jd�}|�tjtj|j|�dS)Nr�)rr%r&r�rXrErr�)r?r�rrr�test_dont_move_dir_in_itself�sz%TestMove.test_dont_move_dir_in_itselfc
Cspt�t�zPxJdD]B\}}tj�t|�}tj�t|�}|jt�||�d||fd�qWWdtjtdd�XdS)N))�srcdirzsrcdir/destz?_destinsrc() wrongly concluded that dst (%s) is not in src (%s))rHT)ri)	rrKrr%r&rYrE�
_destinsrcrF)r?r�r�rrr�test_destinsrc_false_negative�s
z&TestMove.test_destinsrc_false_negativec
Cspt�t�zPxJdD]B\}}tj�t|�}tj�t|�}|jt�||�d||fd�qWWdtjtdd�XdS)N))r�zsrc/dest)r�z
srcdir.newz;_destinsrc() wrongly concluded that dst (%s) is in src (%s))rHT)ri)	rrKrr%r&rgrEr�rF)r?r�r�rrr�test_destinsrc_false_positive�s
z&TestMove.test_destinsrc_false_positivecCs\tj�|jd�}t�|j|�t�||j�|�	tj�
|j��|�	tj�|j|j��dS)Nr�)rr%r&r�rWr�rEr�r�rYr4�samefile)r?r�rrr�test_move_file_symlink�s
zTestMove.test_move_file_symlinkcCsld}tj�|j|�}t�|j|�t�||j�tj�|j|�}|�	tj�
|��|�	tj�|j|��dS)Nr�)rr%r&r�rWr�rEr�r�rYr4r�)r?ror�Z
final_linkrrr�test_move_file_symlink_to_dir�sz&TestMove.test_move_file_symlink_to_dircCs�tj�|jd�}tj�|jd�}t�||�tj�|jd�}t�||�|�tj�	|��tj
dkr�|�tj�|�t�
|��n|�tj�|�tj�|��dS)Nr�r�r�rA)rr%r&r�rWr�rEr�rYr4r8r\�realpathr�)r?r�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�||��dS)Nr�r�r�)rr%r&r�rKrWr�rEr�rYr4r�)r?r�r�r�rrr�test_move_dir_symlink�s
zTestMove.test_move_dir_symlinkc	Cs6t�|j|j�}|�|tj�|jtj�|j���dS)N)	rEr�r�r�r\rr%r&r)r?r�rrr�test_move_return_value�szTestMove.test_move_return_valuecCs6t�|jtj�|jd��}|�|tj�|jd��dS)Nr�)rEr�r�rr%r&r�r\)r?r�rrr� test_move_as_rename_return_value�sz)TestMove.test_move_as_rename_return_valuecs8g��fdd�}tj|j|j|d�|�t��d�dS)Ncs��||f�dS)N)r5)r�r�)�movedrrr�sz7TestMove.test_move_file_special_function.<locals>._copy)rrU)rEr�r�r�r\r])r?rr)r�r�test_move_file_special_function�sz(TestMove.test_move_file_special_functioncsdg��fdd�}t�tj�|jd��t�tj�|jd��tj|j|j|d�|�	t
��d�dS)Ncs��||f�dS)N)r5)r�r�)r�rrr�sz6TestMove.test_move_dir_special_function.<locals>._copyZchildZchild1)rrz)r
rrr%r&r�rEr�r�r\r])r?rr)r�r�test_move_dir_special_function�sz'TestMove.test_move_dir_special_functionN)%r�r�r�r=rCr�r�r�r�r r�r�r�r�r�r�r�r�r�rr%r�r�r�r�r�r�r
r�r�r�r�r�r�r�r�r�rrrrr�:s<	
r�c@sXeZdZdZGdd�de�Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�ZdS)�TestCopyFileFc@s:eZdZdZdZdZddd�Zdd�Zdd	�Zd
d�Z	dS)
zTestCopyFile.FauxFNTcCs||_||_dS)N)�_raise_in_exit�_suppress_at_exit)r?Z
raise_in_exitZsuppress_at_exitrrr�__init__szTestCopyFile.Faux.__init__cGsdS)Nrjr)r?rrrrr.	szTestCopyFile.Faux.readcCs
d|_dS)NT)�_entered)r?rrr�	__enter__szTestCopyFile.Faux.__enter__cCs&|||f|_|jr d|_td��|jS)NTzCannot close)�_exited_withr��_raisedrr�)r?�exc_typeZexc_valZexc_tbrrr�__exit__
s
zTestCopyFile.Faux.__exit__)FT)
r�r�r�r�r�r�r�r.r�r�rrrr�Fauxs
r�cCs|jr
t`dS)N)�_deleterEr')r?rrrrCszTestCopyFile.tearDowncCs|t_d|_dS)NT)rEr'r�)r?rrrr�_set_shutil_openszTestCopyFile._set_shutil_opencCs*ddd�}|�|�|�ttjdd�dS)Nr-cSs|dkrtd��dst�dS)N�srcfilezCannot open "srcfile"r)r�AssertionError)ror�rrr�_opensz4TestCopyFile.test_w_source_open_fails.<locals>._openr��destfile)r-)r�rXrrEr�)r?r�rrr�test_w_source_open_failss

z%TestCopyFile.test_w_source_open_failscsd|���d	�fdd�	}|�|�t�dd�|��j�|��jdtk�|��jdj	d�dS)
Nr-cs(|dkr�S|dkrtd��ds$t�dS)Nr�r�zCannot open "destfile"r)rr�)ror�)r�rrr�*s
z2TestCopyFile.test_w_dest_open_fails.<locals>._openr�r�rrU)zCannot open "destfile")r-)
r�r�rEr�rYr�r�rr\r)r?r�r)r�r�test_w_dest_open_fails&s
z#TestCopyFile.test_w_dest_open_failscs�|���|�d��d
��fdd�	}|�|�t�dd�|��j�|��j�|��j�|��jdtk�|�	�jdj
d	�dS)NTr-cs$|dkr�S|dkr�Sds t�dS)Nr�r�r)r�)ror�)r�r�rrr�>s
z3TestCopyFile.test_w_dest_close_fails.<locals>._openr�r�rrU)zCannot close)r-)r�r�rEr�rYr�r�r�rr\r)r?r�r)r�r�r�test_w_dest_close_fails9s

z$TestCopyFile.test_w_dest_close_failscs�|�d��|���d��fdd�	}|�|�|�ttjdd�|��j�|��j�|��j	�|��j
ddk�|��j	�dS)	NTr-cs$|dkr�S|dkr�Sds t�dS)Nr�r�r)r�)ror�)r�r�rrr�Ts
z5TestCopyFile.test_w_source_close_fails.<locals>._openr�r�r)r-)r�r�rXrrEr�rYr�rgr�r�)r?r�r)r�r�r�test_w_source_close_failsOs

z&TestCopyFile.test_w_source_close_failsc	Cs�t��|_|�tj|jd�tj�tj�	|j�tj�
|j����}|�|j|�z$t�
|j|�|�tj�|��Wdt�|�XdS)NT)rHrIr�r|rErFrr%r&r�r�upperr�r�rYr3rq)r?r�rrr�test_move_dir_caseinsensitivees
z*TestCopyFile.test_move_dir_caseinsensitiveN)
r�r�r�r��objectr�rCr�r�r�r�r�r�rrrrr��s
r�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)rE�get_terminal_sizerx�columns�lines)r?�sizerrr�test_does_not_crashwsz!TermsizeTests.test_does_not_crashc	Cstt���}d|d<|d=t��}WdQRX|�|jd�t���}|d=d|d<t��}WdQRX|�|jd�dS)z.Check if environment variables have precedenceZ777�COLUMNS�LINESNi	Z888ix)r
r�rEr�r\r�r�)r?r�r�rrr�test_os_environ_first�s

z#TermsizeTests.test_os_environ_firstc	CsLt���}d|d<d|d<t��}WdQRX|�|jd�|�|jd�dS)Nr�rZyyyrr)r
r�rEr�rxr�r�)r?r�r�rrr�test_bad_environ�s
zTermsizeTests.test_bad_environz
not on ttyr�zneed os.get_terminal_size()c
Cs�yt�ddg�����}Wn&tttjfk
r@|�d�YnXt|d�t|d�f}t	�
��}|d=|d=t��}WdQRX|�
||�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.
        Zsttyr�zstty invocation failedrUrrrN)r4rCrFr�rlr�rDr��intr
r�rEr�r\)r?r�rmr�r�rrr�test_stty_match�s

zTermsizeTests.test_stty_matchcCs�t����}|d=|d=t�tdd��tjdd�}WdQRX|�|jd�|�|jd�t	t
jd��,}t�td|��tjd	d�}WdQRXWdQRX|�|jd
�|�|jd�WdQRXdS)Nrr�
__stdout__)�
�)�fallbackrrr")��(r
r)r
r�r�r�rEr�r\r�r�r'r�devnull)r?r�r�rrrr�
test_fallback�s
 zTermsizeTests.test_fallbackN)r�r�r�r�rrr�r�r�isattyr�r�filenor�rr
rrrrr�vs
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__Zcopyfileobjr�r�r�r�r�r�r�rFrrZ	ExecErrorrrrrrrr
rr�r{r�r�r�statvfsrArw)	rYr�rErr8r5r\�setr)r?Z
target_apirrr�test_module_all_attribute�s
z(PublicAPITests.test_module_all_attributeN)r�r�r��__doc__rrrrrr�sr�__main__)F)F)1r�Z
unittest.mockrErHr�r�rZos.pathrrrkr4rrrrrrrr	r
rrr"r9r^r
Ztest.supportrrrrPrRrO�ImportErrorrr r+r/r6ZTestCaser;r�r�r�r�rr��mainrrrr�<module>s`4



D)ExN