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.opt-2.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)N�wb�w)�
isinstance�tupler�path�join�open�write)r%Zcontent�binary�fprrr�
write_file3s
r+c	Cs<t|t�rtjj|�}t||r"dnd��
}|��SQRXdS)N�rb�r)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)N)�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��dS)N�srcfilezCannot open "srcfile")r)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)Nr�r�zCannot open "destfile")r)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)Nr�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)Nr�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)Nr)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)NZ777�COLUMNS�LINESi	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�r�Zyyyrr)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)NZsttyr�zstty invocation failedrUrrr�)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@seZdZdd�ZdS)�PublicAPITestscCs~|�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�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