Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/test_shutil.cpython-34.pyc

�
g f!�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddlm
Z
mZmZmZmZmZmZmZmZmZmZddlZddlZddlmZddlmZmZmZm Z yddl!Z!dZ"Wne#k
rZdZ"YnXedZ$y"ddl%Z%ddl&Z&dZ'Wne#k
r�dZ'YnXyddl(Z(dZ)Wn!e#k
r�ej*d	�Z)YnXd
d�Z+dd
�Z,ddd�Z-ddd�Z.dd�Z/Gdd�dej0�Z1Gdd�dej0�Z2Gdd�dej0�Z3Gdd�dej0�Z4Gdd�dej0�Z5Gdd�dej0�Z6e7d kr�ej8�ndS)!�N)�	ExitStack)�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�check_warnings�captured_stdout�
requires_zlibTF�2�zipcOstttdd�d��dS)NZEXDEV�zInvalid cross-device link)�OSError�getattr�errno)�args�kwargs�r�5/opt/alt/python34/lib64/python3.4/test/test_shutil.py�_fake_rename0srcs%tj���fdd��}|S)Ncs4z#tj}tt_�||�SWd|t_XdS)N)�os�renamer)rrZbuiltin_rename)�funcrr�wrap5s
		zmock_rename.<locals>.wrap)�	functools�wraps)r r!r)r r�mock_rename4s!r$c	CsYt|t�r$tjj|�}nt||r6dnd��}|j|�WdQXdS)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_file?sr/cCsVt|t�r$tjj|�}nt||r6dnd��}|j�SWdQXdS)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_fileKsr3cCs�g}x�ttj|��D]�}tjj||�}tjj|�r�tjj|�r�|j|d�x9t|�D]}|j|d|�qzWq|j|�qW|S)N�/)	�sortedr�listdirr)r*�isdir�islink�append�rlistdir)r)�res�name�p�nrrrr:Ws%r:cs�eZdZ�fdd�Z�fdd�Zdd�Zdd�Zejd	d
��Z	ejdd��Z
d
d�Zej
eed�d�ejejdd�dkd�ejeed�o�ej�dkd�dd����Zdd�Zdd�Zej
eed�d�ejdd ���Zej
eed!�d"�ejd#d$���Zejeed!�d%�ejd&d'���Zejd(d)��Zej
eed*�o�eed+�o�eed,�d-�d.d/��Zejd0d1��Zejejej
eed�o>ej�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*j+dI�dJdK��Z,ejej-dLkdM�ej
eedN�dO�dPdQ���Z.ejdRdS��Z/ejdTdU��Z0ej
eedV�dW�dXdY��Z1ej
eedV�dW�ejdZd[���Z2d\d]�Z3ejd^d_��Z4ejd`da��Z5dbdc�Z6ej
eed�d�ddde��Z7ej
eed�d�ej
eedf�dg�dhdi���Z8e9djdk��Z:dldm�Z;dndodp�Z<e9ej
e=j>dq�dr�dsdt���Z?e9ej
e@du�dvdw���ZAe9ej
e@du�ej
e=j>dx�dy�dzd{����ZBe9ej
e@du�ej
e=j>d|�d}�d~d����ZCd�d��ZDe9d�d���ZEe9ej
eFd��d�d����ZGd�d��ZHd�d��ZIe9d�d���ZJd�d��ZKe9d�d���ZLd�d��ZMej
ee=d��d��d�d���ZNej
eFd��ej
eed��d��d�d����ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZS�S)��
TestShutilcs tt|�j�g|_dS)N)�superr?�setUp�tempdirs)�self)�	__class__rrrAfszTestShutil.setUpcsOtt|�j�x5|jrJ|jj�}tj|tjdk�qWdS)N�nt�cygwin)zntzcygwin)	r@r?�tearDownrB�pop�shutil�rmtreerr<)rC�d)rDrrrGjszTestShutil.tearDowncCs tj�}|jj|�|S)zjCreate a temporary directory that will be cleaned up.

        Returns the path of the directory.
        )�tempfile�mkdtemprBr9)rCrKrrrrMqszTestShutil.mkdtempc	Cs�|j�}tjj|d�}tj|�ttjj|d�d�tj|�}|j|t�tj	dk}|r�|j
t�nt��t
j|�WdQXdS)NZkillmeZsomefile�foorE)rMrr)r*�mkdirr/�fsencode�assertIsInstance�bytesr<ZassertWarns�DeprecationWarningrrIrJ)rC�tmpZvictim�winrrr�test_rmtree_works_on_byteszs
z%TestShutil.test_rmtree_works_on_bytescs2|j�}tjj|d�}tj|�tjj|d�}tj||�|jttj	|�|j
tjj|��|j
tjj|��g��fdd�}tj	|d|�|j
t��d�|j�ddtjj�|j
�dd|�|j�dddt�dS)	N�dir�linkcs�j|�dS)N)r9)r)�errorsrr�onerror�sz8TestShutil.test_rmtree_fails_on_symlink.<locals>.onerrorrZ�r�)rMrr)r*rO�symlink�assertRaisesrrIrJ�
assertTrue�exists�lexists�assertEqual�len�assertIsr8rQ)rCrTZdir_rXrZr)rYr�test_rmtree_fails_on_symlink�s
z'TestShutil.test_rmtree_fails_on_symlinkc
Cs_|j�}tjj|d�}tjj|d�}tjj|d�}x$|||fD]}tj|�q[Wtjj|d�}t|d�tjj|d�}tj||�tjj|d�}tj||�tjj|d�}	tj||	�tj|�|j	tjj
|��|jtjj
|��|jtjj
|��dS)	N�dir1�dir2�dir3�file1rN�link1�link2�link3)rMrr)r*rOr/r]rIrJ�assertFalser`r_)
rCrTrfrgrhrKrirjrkrlrrr�test_rmtree_works_on_symlinks�s$

z(TestShutil.test_rmtree_works_on_symlinksc
s%tj�}|jttj|�tj|dd�|j�}t|dfd�tj	j
|d�}|jt��}tj|�WdQX|tj	j
|d�g}|j|j
j|�|jtj	j|��tj|dd�|jtj	j|��g��fdd�}tj|d|�|jt��d	�|j�d
d
tj�|j�d
d|�|j�d
d	dt�|j�d
d	dj|�|j�dd
tj�|j�dd|�|j�dd	dt�|j�dd	dj|�dS)N�
ignore_errorsTZtstfile�z*.*cs�j|�dS)N)r9)r)rYrrrZ�sz.TestShutil.test_rmtree_errors.<locals>.onerrorrZr\rr[)rL�mktempr^�FileNotFoundErrorrIrJrMr/rr)r*�NotADirectoryError�assertInZ	exception�filenamer_r`rbrcrdr6rQ�rmdir)rCru�tmpdir�cmZ
possible_argsrZr)rYr�test_rmtree_errors�s2zTestShutil.test_rmtree_errors�chmodzrequires os.chmod()N�rFz2This test can't be run on Cygwin (issue #1071513).�geteuidrz9This test can't be run reliably as root (issue #1076467).cCssd|_tjt�|jtjt�tjjtd�|_	tjjtd�|_
tj|j	�tj|j
�tj
t�j}tj
|j	�j}tj
|j
�j}t
jt
jB}tj|j	|�tj|j
|�tjt|�|jtjt|�|jtj|j	|�|jtj|j
|�tjtd|j�|j|jdd�dS)Nr�a�brZ�z1Expected call to onerror function did not happen.)�
errorStaterrOr�
addCleanuprIrJr)r*�child_file_path�child_dir_pathrZcreate_empty_file�stat�st_mode�S_IREAD�S_IEXECrz�check_args_to_onerrorrb)rCZold_dir_modeZold_child_file_modeZold_child_dir_modeZnew_moderrr�
test_on_error�s(	
zTestShutil.test_on_errorcCs�|jdkr�|tjkr4|j||j�nQ|tjkrY|j||j�n,|j|tj�|j	|t
|jg�|jt|dt
��|jd7_nF|j|tj�|j|t
�|jt|dt
��d|_dS)Nr\rr[r)r�r�unlinkrbr�rvr�rdr6rtrr_�
issubclassr)rCr �arg�excrrrr��sz TestShutil.check_args_to_onerrorcsfzUtj��fdd�}|t_tjt�ttdfd�tjt�Wd�t_XdS)Ncs&|tkrt��n
�|�SdS)N)rr)�fnrr)�
orig_lstatrr�raiserszFTestShutil.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiserrN)r�lstatrOrr/rIrJ)rCr�r)r�r�+test_rmtree_does_not_choke_on_failing_lstat
s		
z6TestShutil.test_rmtree_does_not_choke_on_failing_lstatzrequires os.chmodcCs|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t|d�t|d�tj||�tj||�tj|tjtj	B�tj|tj
�|jtj|�jtj|�j�t
j||�|jtj|�jtj|�j�tjdkrtj|tj
�t
j||�|jtj|�jtj|�j�tj|tj
�t
j||�|jtj|�jtj|�j�tj|tj
�t
j||�|jtj|�jtj|�j�ndS)NrN�bar�baz�quuxrE)rMrr)r*r/r]rzr��S_IRWXU�S_IRWXG�S_IRWXO�assertNotEqualr�rI�copymoderbr<)rC�tmp_dir�src�dst�src_link�dst_linkrrr�test_copymode_follow_symlinkss0

((((z(TestShutil.test_copymode_follow_symlinks�lchmodzrequires os.lchmodcCs|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t|d�t|d�tj||�tj||�tj|tjtj	B�tj|tj�tj
|tjtj	B�tj
|tj�tj
||dd�|jtj|�jtj|�j�|jtj|�jtj|�j�tj
|tj�tj
||dd�|jtj|�jtj|�j�tj
|tj�tj
||dd�|jtj|�jtj|�j�dS)NrNr�r�r��follow_symlinksF)rMrr)r*r/r]rzr�r�r�r�r�rIr�rbr�r�r�)rCr�r�r�r�r�rrr� test_copymode_symlink_to_symlink>s.

((z+TestShutil.test_copymode_symlink_to_symlinkz requires os.lchmod to be missingcCs�|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t|d�t|d�tj||�tj||�tj||dd�dS)NrNr�r�r�r�F)rMrr)r*r/r]rIr�)rCr�r�r�r�r�rrr�*test_copymode_symlink_to_symlink_wo_lchmod\s

z5TestShutil.test_copymode_symlink_to_symlink_wo_lchmodc
Cs�|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t|d�tj|�}tj||j|jdf�t|d�|j	tj|�jtj|�j�tj
||�tj
||�ttd�rtj|tj
�nttd�rJttd�rJtj|tj�ntj|�}ttd�r�tj||d	d
�|j	|jtj|�j�ntj||d	d�tj|�}tjtjkrx7dD],}	|jt||	�t||	�d�q�Wnttd�r9|j|j|j�nttd�rpt|d�rp|j|j|j�ntj||d	d�|jttj|�jtj|�j�dk�dS)NrNr�r��quxgE@r��lchflags�	UF_NODUMPr�TF�st_atime�st_mtimer[�st_flagsg�������?)zst_atimezst_mtime)rMrr)r*r/r��utimer�r�r�r]�hasattrr�r�r�r�r�rI�copystatr��supports_follow_symlinks�assertLessEqualrrbr�r_�abs)
rCr�r�r�r�r��src_stat�
src_link_statZ
dst_link_stat�attrrrr�test_copystat_symlinksjsD

("
+z!TestShutil.test_copystat_symlinks�chflags�
EOPNOTSUPP�ENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcCs�|j�}tjj|d�}tjj|d�}t|d�t|d�dd�}tj}zrx9tjtjfD]%}||�t_t	j
||�q{W|tjtj�t_|jtt	j
||�Wd|t_XdS)Nri�file2�xxxcs(t��dd��fdd�}|S)Nr�Tcs��_��dS)N)r)r)�flagsr�)�err�exrr�_chflags_raiser�s	znTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser)r)r�r�r)r�r�r�make_chflags_raiser�s	zUTestShutil.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser)
rMrr)r*r/r�rr�r�rIr�r^r)rCrwrir�r�Zold_chflagsr�rrr�-test_copystat_handles_harmless_chflags_errors�s

	z8TestShutil.test_copystat_handles_harmless_chflags_errorscsN|j�}tjj|d��t�d�tjj|d�}t|d�tj�|�tj�dd�tj�dd�tj�|�|jt	tj
���t	tj
|���|jtj�d�tj|d��tj|�t|d�t
tjd����fdd	�}z?tj�|t_tj�|�|jdtj
|��Wd�t_Xd
d��fdd
�}z&tj
�|t_
tj�|�Wd�t_
Xtjj|d��t���tj�dd�tjj|d�}t||�tj�|�|jtj|d�d�dS)NrNr�zuser.foos42zuser.bars43�EPERMcs,|dkr��n�||||�dS)Nzuser.foor)�fnamer��valr)�
orig_setxattr�os_errorrr�_raise_on_user_foo�s	z5TestShutil.test_copyxattr.<locals>._raise_on_user_foor�Tcs1|�kr!ttjd��n�|d|�S)NzOperation not supportedr�)rrr�)r�r�)�orig_listxattrr�rr�
_raise_on_src�sz0TestShutil.test_copyxattr.<locals>._raise_on_srcZthe_originalzuser.the_valuesfiddlyZthe_copy)rMrr)r*r/rI�
_copyxattr�setxattrrbr5�	listxattr�getxattr�removerrr�rtr�)rCr�r�r�r�r)r�r�r�r�r�test_copyxattr�sH

.

		
		


zTestShutil.test_copyxattrzroot privileges requiredcCsM|j�}tjj|d�}tjj|d�}t|d�tj||�tj|dd�tj|dddd�tjj|d�}tjj|d	�}t|d�tj||�tj||dd�|j	tj
|ddd�d�|jttj
|d�tj||dd�|j	tj
|d�d�dS)
NrNr�ztrusted.foos42s43r�Fr�r�)
rMrr)r*r/r]r�rIr�rbr�r^r)rCr�r�r�r�r�rrr�test_copyxattr_symlinks�s 

"z"TestShutil.test_copyxattr_symlinkscCs{|j�}tjj|d�}tjj|d�}tjj|d�}t|d�tj||�ttd�r�tj|tj	tj
B�ntj||dd�|j
tjj|��|jt|�t|��tj|�tj||dd�|jtjj|��|jtj|�tj|��ttd�rw|jtj|�jtj|�j�ndS)NrNr�r�r�r�TF)rMrr)r*r/r]r�r�r�r�r�rI�copyrmr8rbr3r�r_�readlinkr�r�)rCr�r�r�r�rrr�test_copy_symlinkss$

"zTestShutil.test_copy_symlinksc	Csc|j�}tjj|d�}tjj|d�}tjj|d�}t|d�tj||�ttd�r�tj|tj	tj
B�nttd�r�ttd�r�tj|tj�ntj|�}tj
|�}tj||dd�|jtjj|��|jt|�t|��tj|�tj||dd	�|jtjj|��|jtj|�tj|��tj
|�}tjtjkr�x7dD],}|jt||�t||�d�q�Wnttd�r(|j|j|j�|j|j|j�nttd�r_t|d
�r_|j|j|j�ndS)NrNr�r�r�r�r�r�TFr�r�r[r�)zst_atimezst_mtime)rMrr)r*r/r]r�r�r�r�r�r�r�r�rI�copy2rmr8rbr3r�r_r�r�r�r�rr�r�r�)	rCr�r�r�r�r�r��dst_statr�rrr�test_copy2_symlinkss:

"
zTestShutil.test_copy2_symlinkscCs�|j�}tjj|d�}tjj|d�}t|d�tj|dd�tj||�|jtj	|d�tj	|d��tj
|�dS)NrNr�zuser.foos42)rMrr)r*r/r�rIr�rbr�r�)rCr�r�r�rrr�test_copy2_xattr;s
zTestShutil.test_copy2_xattrcCs�|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t|d�tj||�tj||dd�|jtjj	|��|j
tj|�tj|��tj||�|jtjj	|��dS)Nr�r�r�rXrNr�F)
rMrr)r*r/r]rI�copyfiler_r8rbr�rm)rCr�r�r�r�rXrrr�test_copyfile_symlinksHs
"z!TestShutil.test_copyfile_symlinkscs-tjtjtjtjhtjkoHtjtjkoHtjtjk}|r|j	t
j�|j	t
jj
�|j�}tjj|d�}tj|�zTt
j}Gdd�dt���fdd�}|t
_|j�t
j|�Wd|t
_Xn#|jt
j�|jt
jj
�dS)Nr}c@seZdZdS)zHTestShutil.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)�__name__�
__module__�__qualname__rrrr�Calledfsr�cs
��dS)Nr)rr)r�rr�_raisergszITestShutil.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser)rr+r�r�rv�supports_dir_fdr6�supports_fdr�r_rI�_use_fd_functionsrJZavoids_symlink_attacksrMr)r*rOZ_rmtree_safe_fd�	Exceptionr^rm)rCr�r�rKZreal_rmtreer�r)r�r�-test_rmtree_uses_safe_fd_version_if_availableYs&
		
z8TestShutil.test_rmtree_uses_safe_fd_version_if_availablecCsFtj�\}}tj|�|jttj|�tj|�dS)N)	rLZmkstempr�closer^rsrIrJr�)rCZhandler)rrr�test_rmtree_dont_delete_fileqs
z'TestShutil.test_rmtree_dont_delete_filecCsttj�}tjjtj�d�}|jtj|�|jtjtjj|��t	|dfd�tj
tjj|d��t	|ddfd�tj||�|jtjj
tjj|d���|jtjjtjj|d���|jtjj
tjj|dd���t|df�}|j|d�t|ddf�}|j|d�dS)N�destinationztest.txt�123�test_dir�456)rLrMrr)r*r�rIrJ�dirnamer/rO�copytreer_�isfiler7r3rb)rC�src_dir�dst_dir�actualrrr�test_copytree_simplexs ((
zTestShutil.test_copytree_simplec	Cs|j�}tjj|d�}tjj|d�}tjj|d�}tj|�tj|�t|dfd�tjj|d�}tjj|d�}tjtjj|d�|�ttd�r�tj|t	j
t	jB�nttd	�r!tt	d
�r!tj|t	j
�ntj|�}tj||dd�|jtjjtjj|dd���|jtjtjj|dd��tjj|d��tj|�}ttd�r�|j|j|j�nttd	�r
|j|j|j�ndS)
Nr�r��subzfile.txtrNrXzsub/linkr�r�r��symlinksT)rMrr)r*rOr/r]r�r�r�r�r�r�r�r�rIr�r_r8rbr�r�r�)	rCr�r�r�Zsub_dirr�r�r�r�rrr�test_copytree_symlinks�s2

+$z!TestShutil.test_copytree_symlinksc#Cs�tjj}tjj}tj�}z�|tj�d�}t|dfd�t|dfd�tj||d��t|ddfd�tj||d��t|ddfd�tj||dd��tj||dd	��t|dddfd�t|dd	d
fd�z�tj	dd�}tj
||d|�|j|||d���|j|||d���|j|||d���Wdtj
|�Xz�tj	dd
�}tj
||d|�|j|||d���|j|||dd	���|j|||dd���Wdtj
|�Xzgdd�}tj
||d|�|j|||dd	d
���|j|||dd���Wdtj
|�XWdtj
|�tj
tjj|��XdS)Nr�ztest.txtr�ztest.tmpr�r�Z	test_dir2�subdirZsubdir2ztest.pyz*.tmp�ignorezsubdir*cSs�g}x�|D]}tjj||�}tjj|�r`|j�ddkr`|j|�q
tjj|�ddkr
|j|�q
q
W|S)Nr[r�z.py���r�)rr)r*r7�splitr9�splitext)r��namesr;r<r)rrr�_filter�s
z6TestShutil.test_copytree_with_exclude.<locals>._filter)rr)r*r`rLrMr/rOrI�ignore_patternsr�r_rmrJr�)rCr*r`r�r�Zpatternsr�rrr�test_copytree_with_exclude�sL #
#
z%TestShutil.test_copytree_with_excludecCstj�}tjj|d�}tj|�tjj|d�}|jtj|�tj	|d�t
|dfd�tj	tjj|d�d�t
|dfd�tj	tjj|d�d�tjd	|�}tj	|d�tj||�|jtj
|�jtj
|�j�|jtj
tjj|d��jtj
tjj|d��j�|jtj
tjj|d��jtj
tjj|d��j�tjj|tjj|�d
�}|jtj
|�jtj
|�j�dS)N�sourcer�i�zpermissive.txtr�zrestrictive.txtr�i�rWr[)rLrMrr)r*rOr�rIrJrzr/r�rbr�r�r�)rCr�r�r�Zrestrictive_subdirZrestrictive_subdir_dstrrr�!test_copytree_retains_permissions�s,
($"$"z,TestShutil.test_copytree_retains_permissionszos.chmodc
Cs�tj�}tjjtj�d�}|jtj|�|jtjtjj|��t	d�|_
|jtj��tj
||�WdQXdS)Nr�zka-boom)rLrMrr)r*r�rIrJr��PermissionErrorZside_effectr^rr�)rCZ
mock_patchr�r�rrr�test_copytree_winerrorsz!TestShutil.test_copytree_winerrorrEztemporarily disabled on WindowsrXzrequires os.linkcCs�tjt�tjjtd�}tjjtd�}z�t|d��}|jd�WdQXtj||�|jt	j
t	j||�t|d��}|j|j
�d�WdQXtj|�Wdt	jtdd�XdS)N�cheese�shopr&�cheddarr1roT)rrOrr)r*r+r,rXr^rIr
r�rbr2r�rJ)rCr�r��frrr�'test_dont_copy_file_onto_link_to_itselfs
z2TestShutil.test_dont_copy_file_onto_link_to_itselfcCs�tjt�tjjtd�}tjjtd�}z�t|d��}|jd�WdQXtjd|�|jt	j
t	j||�t|d��}|j|j
�d�WdQXtj|�Wdt	jtdd�XdS)Nr�rr&rr1roT)rrOrr)r*r+r,r]r^rIr
r�rbr2r�rJ)rCr�r�rrrr�*test_dont_copy_file_onto_symlink_to_itself"s
z5TestShutil.test_dont_copy_file_onto_symlink_to_itselfc
Cs�tjt�zttjjtd�}tjjtd�}tj|�tj||�|jttj	|�tj	|dd�Wdtj	tdd�XdS)Nr�rroT)
rrOrr)r*r]r^rrIrJ)rCr�r�rrr�test_rmtree_on_symlink6s

z!TestShutil.test_rmtree_on_symlink�mkfifozrequires os.mkfifo()cCs^tjt�z<|jtjtjtt�|jtjtjtt�Wdtj	t�XdS)N)
rrrr^rI�SpecialFileErrorr��TESTFN2�__file__r�)rCrrr�test_copyfile_named_pipeEs
z#TestShutil.test_copyfile_named_pipecCstjt�z�tjjtd�}tj|�tjj|d�}tj|�ytjtt�Wnrtj	k
r�}zO|j
d}|jt|�d�|d\}}}|jd||�WYdd}~XnX|j
d�Wdtjtdd�tjtdd�XdS)	Nr�Zmypiperr[z`%s` is a named pipez$shutil.Error should have been raisedroT)rrOrr)r*rrIr�rrrrbrc�failrJ)rCr��pipe�erYr�r�Z	error_msgrrr�test_copytree_named_pipePs 



'z#TestShutil.test_copytree_named_pipecs�|j�}tjj|j�d�}t|dfd�tjtjj|d��t|ddfd�g��fdd�}tj||d|�|jt	��d	�dS)
Nr�ztest.txtr�r�r�cs�j||f�dS)N)r9)r�r�)�copiedrr�_copyosz4TestShutil.test_copytree_special_func.<locals>._copyZ
copy_functionr\)
rMrr)r*r/rOrIr�rbrc)rCr�r�rr)rr�test_copytree_special_funcfsz%TestShutil.test_copytree_special_funccCs)|j�}tjj|j�d�}tjdtjj|d��tjtjj|d��t|ddfd�|jtt	j
||�tjj|j�d�}t	j
||dd�|jdtj|��tjj|j�d	�}t	j
||d
d�|j
dtj|��dS)Nr�Z
IDONTEXISTztest.txtr�r��destination2Zignore_dangling_symlinksTZdestination3r�)rMrr)r*r]rOr/r^rrIr��assertNotInr6rt)rCr�r�rrr�test_copytree_dangling_symlinksusz*TestShutil.test_copytree_dangling_symlinkscCs�|j�}tjj|j�d�}tjtjj|d��ttjj|dd�d��WdQXtjtjj|d�tjj|d�dd�tj||dd	�|j	tjj
tjj|d���|jdtjtjj|d���tjj|j�d
�}tj||dd�|j
tjj
tjj|d���|jdtjtjj|d���dS)Nr�Zreal_dirztest.txtr&Zlink_to_dirZtarget_is_directoryTr�Fr)rMrr)r*rOr+r]rIr�rmr8rtr6r_)rCr�r�rrr�test_copytree_symlink_dir�s"(((z$TestShutil.test_copytree_symlink_dircCsrd}|j�}t||fd�tjj||�}|j�}|||�tjj||�}||fS)Nztest.txtr�)rMr/rr)r*)rC�methodr�rwri�tmpdir2r�rrr�
_copy_file�s
zTestShutil._copy_filecCs]|jtj�\}}|jtjj|��|jtj|�j	tj|�j	�dS)N)
rrIr�r_rr)r`rbr�r�)rCrir�rrr�	test_copy�szTestShutil.test_copyr�zrequires os.utimecCs�|jtj�\}}|jtjj|��tj|�}tj|�}|j|j	|j	�x4dD],}|j
t||�t||�d�qlWttd�r�t|d�r�|jt|d�t|d��ndS)Nr�r�r[r�r�)zst_atimezst_mtime)
rrIr�r_rr)r`r�rbr�r�rr�)rCrir�Z
file1_statZ
file2_statr�rrr�
test_copy2�s
zTestShutil.test_copy2c	!Cs�|jd�\}}|j�}tj|�tjj|�}tjjtjj|�d�}tj	|��,tjj
|�}t|d|d�}WdQX|j||d�|j
tjj|��|j
tj|��tj|d��/}|j|j�dddd	d
dg�WdQXtj	|��t|d|d�}WdQX|j||d
�|j
tjj|��|j
tj|��tj|d��/}|j|j�dddd	d
dg�WdQXdS)Nrp�archive�gztar�.z.tar.gzzr:gzz./subz./sub2z./file1z./file2z./sub/file3�tarz.tarr1)�
_create_filesrMrrvr)r�r*�basenamer�
change_cwd�abspathrrbr_r��tarfileZ
is_tarfiler+�assertCountEqual�getnames)	rC�root_dir�base_dirr�work_dir�
rel_base_name�	base_name�tarballZtfrrr�test_make_tarball�s0
!		zTestShutil.test_make_tarballc	Cs<tj|��'}|j�}|j�t|�SWdQXdS)N)r#r+r%�sortr()rCr)rr�rrr�_tarinfo�s
zTestShutil._tarinfo�distcCs�|j�}tjj||�}tj|dd�t|dfd�t|dfd�tjtjj|d��t|ddfd�tjtjj|d��|r�t|d	fd�n||fS)
N�exist_okTrir�r�r�Zfile3Zsub2�outer)rMrr)r*�makedirsr/rO)rCr'r&r/rrrr�szTestShutil._create_filesrzNeed the tar command to runcCs{|j�\}}tjj|j�d�}t|d||�}|j||d�|jtjj|��tjj|d�}ddd|g}t	j
|d|dt	j�|jtjj|��|j|j|�|j|��t|d||�}|j||d	�|jtjj|��t|d||d
d�}|j||d	�|jtjj|��dS)Nrrz.tar.gzzarchive2.tarrz-cf�cwd�stdoutz.tarZdry_runT)
rrr)r*rMrrbr_r��
subprocess�
check_call�DEVNULLr.)rCr&r'r*r+Ztarball2Ztar_cmdrrr�test_tarfile_vs_tar�s$
"	zTestShutil.test_tarfile_vs_tarzNeed zip support to runc	Cs"|j�\}}|j�}tj|�tjj|�}tjjtjj|�d�}tj	|��,tjj
|�}t|d||�}WdQX|j||d�|j
tjj|��|j
tj|��tj|��/}|j|j�dddddd	g�WdQXdS)
Nrrz.zipzdist/z	dist/sub/z
dist/sub2/z
dist/file1z
dist/file2zdist/sub/file3)rrMrrvr)r�r*r rr!r"rrbr_r��zipfileZ
is_zipfile�ZipFiler$�namelist)	rCr&r'rr(r)r*r;�zfrrr�test_make_zipfiles
!	zTestShutil.test_make_zipfilerzNeed the zip command to runc
Cs6|j�\}}tjj|j�d�}t|d||�}|j||d�|jtjj|��tjj|d�}dddd|g}t	j
|d|dt	j�|jtjj|��tj
|��}|j�}WdQXtj
|��}|j�}	WdQX|jt|�t|	��dS)	Nrrz.zipzarchive2.zipz-qz-rr3r4)rrr)r*rMrrbr_r�r5r6r7r9r:r;r5)
rCr&r'r*rZarchive2�zip_cmdr<r�Znames2rrr�test_zipfile_vs_zip3s
zTestShutil.test_zipfile_vs_zip�unzipzNeed the unzip command to runc	Cs|j�\}}tjj|j�d�}t|d||�}|j||d�|jtjj|��dd|g}t	j
|��~ytj|dtj
�Wn\tjk
r}z9|jjdd�}d	}|j|j||��WYdd}~XnXWdQXdS)
Nrrz.zipr@z-t�stderrrY�replacez{}

**Unzip Output**
{})rrr)r*rMrrbr_r�rr!r5�check_outputZSTDOUT�CalledProcessError�output�decoder�format)	rCr&r'r*rr>r�Zdetails�msgrrr�test_unzip_zipfileNszTestShutil.test_unzip_zipfilecCs;|j�}tjj|d�}|jtt|d�dS)Nrr�)rMrr)r*r^�
ValueErrorr)rCrwr*rrr�test_make_archiveeszTestShutil.test_make_archivec	CsFtr/tjd�d}tjd�d}n
d}}|j�\}}tjj|j	�d�}t
|d||d|d|�}|jtjj|��t
|d||�}|jtjj|��t
|d||d|d|�}|jtjj|��t
|d||dddd	�}|jtjj|��dS)
Nr�rootrr�owner�grouprZ	kjhkjhkjgZoihohoh)
�UID_GID_SUPPORT�grp�getgrgid�pwd�getpwuidrrr)r*rMrr_r�)rCrNrMr&r'r*r;rrr�test_make_archive_owner_groupjs"
	z(TestShutil.test_make_archive_owner_groupzRequires grp and pwd supportc	Cs|j�\}}tjj|j�d�}tjd�d}tjd�d}t	j
|��&t|d|dd|d|�}WdQX|jtjj
|��tj|�}zAx:|j�D],}|j|jd�|j|jd�q�WWd|j�XdS)Nrrrr/rMrN)rrr)r*rMrPrQrRrSrr!rr_r�r#r+Z
getmembersrb�uid�gidr�)	rCr&r'r*rNrMZarchive_namerZmemberrrr�test_tarfile_root_owner�sz"TestShutil.test_tarfile_root_ownercCs�tj�}dd�}td|gd�zLytddd|j��Wntk
r_YnX|jtj�|�Wdtd�XdS)Nc_s
t��dS)N)�RuntimeError)r�kwrrr�_breaks�sz1TestShutil.test_make_archive_cwd.<locals>._breaksr�zxxx filer&)r�getcwdrrrMr�rbr)rCZcurrent_dirrZrrr�test_make_archive_cwd�s
z TestShutil.test_make_archive_cwdcCsX|j�}tj|��7|jtdd�d�|jtjjd��WdQXdS)N�testrztest.tar)	rMrr!rbrr_rr)r�)rCr&rrr�test_make_tarfile_in_curdir�sz&TestShutil.test_make_tarfile_in_curdircCsX|j�}tj|��7|jtdd�d�|jtjjd��WdQXdS)Nr]rztest.zip)	rMrr!rbrr_rr)r�)rCr&rrr�test_make_zipfile_in_curdir�sz&TestShutil.test_make_zipfile_in_curdirc	Cs�|jttdd�|jttddd�d�|jttddd�d
dg�tddd�dgd	�d
d�t�D�}|jd|�td�dd�t�D�}|jd|�dS)Nr�r[cSstS)N)�xrrrr�<lambda>�sz9TestShutil.test_register_archive_format.<locals>.<lambda>cSstS)N)r`rrrrra�sr\rcSstS)N)r`rrrrra�szxxx filecSsg|]\}}|�qSrr)�.0r<�paramsrrr�
<listcomp>�s	z;TestShutil.test_register_archive_format.<locals>.<listcomp>cSsg|]\}}|�qSrr)rbr<rcrrrrd�s	)r[r\)r[r\r)r[r\)r^�	TypeErrorrrrtrr)rC�formatsrrr�test_register_archive_format�s

z'TestShutil.test_register_archive_formatc
Cs(dddg}tr%|jd�n|j�\}}t|�}|jd�x�|D]�}tjj|j�d�}t	||||�}|j�}t
||�|jt|�|�|j�}	t
||	d|�|jt|	�|�qWW|jt
jt
t�|jtt
tdd�dS)	NrrrZbztarr1rrGr�)�
BZ2_SUPPORTEDr9rr:r�rr)r*rMrrrbr^rIZ	ReadErrorrrJ)
rCrfr&r'�expectedrGr*rurZtmpdir3rrr�test_unpack_archive�s"


zTestShutil.test_unpack_archivecs�t�}�fdd�}tdddg|dg�tdd	��jttd
dg|�td�td
dg|��jd
dgdft���jddgdft��td
��jt�|�dS)
Ncs4�j|d��j|d��j|d�dS)Nr[z	stuff.boo�xx)rb)ruZextract_dir�extra)rCrr�_boo�sz.TestShutil.test_unpack_registery.<locals>._booZBooz.booz.b2rlr[z	stuff.boorkZBoo2rp)zextrar[)	rr	rr^r
rrtrrb)rCrfrmr)rCr�test_unpack_registery�s	



z TestShutil.test_unpack_registery�
disk_usagez)disk_usage not available on this platformcCs~tjtj��}|j|jd�|j|jd�|j|jd�|j|j|j�|j|j|j�dS)Nr)	rIrorr[Z
assertGreaterZtotalZused�assertGreaterEqualZfree)rCZusagerrr�test_disk_usage�szTestShutil.test_disk_usage�chownzrequires os.chownc#s��j�}tjd|��t�d��jt��tj��WdQX�jt��tj�dd�WdQX�jt��tj�dd�WdQX�jt	��tj�d�WdQX�jt	��tj�d�WdQXt
j�}t
j�}dd��fd	d
�}tj�||�|�||�tj�|�|�|�tj�d|�|�|�tj�d|�|�d|�tj|||�||||�tj||�|||�tj|d|�|||�tj|d|�||d|�t
j|�d}tj|�d}tj�||�|�||�tj|||�||||�dS)
NrWztesting chown function�userznon-exising usernamerNznon-exising groupnamesspamg��Q�	@csWtj��}|dk	r1�j||j�n|dk	rS�j||j�ndS)N)rr�rb�st_uid�st_gid)r)rUrV�s)rurCrr�check_chown#s
z*TestShutil.test_chown.<locals>.check_chownrVr)rMrLrqr/r^rJrIrr�LookupErrorrer�getuid�getgidrRrSrPrQ)rCr�rUrVrwrsrNr)rurCr�
test_chownsL




zTestShutil.test_chowncCs�x�tjtjfD]�}|j�}|j�}tjj|d�}t|d�|||�}|j|tjj|d��||tjj|d��}|j|tjj|d��qWdS)NrNr�)	rIr�r�rMrr)r*r/rb)rCr�r�r�r��rvrrr�test_copy_return_valueCs
z!TestShutil.test_copy_return_valuecCs�|j�}|j�}tjj|d�}tjj|d�}t|d�tj||�}|jtjj|��|j	t
|�t
|��dS)Nr�rN)rMrr)r*r/rIr�r_r`rbr3)rCr�r��dst_file�src_filer|rrr�test_copyfile_return_valueOs
z%TestShutil.test_copyfile_return_valuecCsd|j�}tjj|d�}t|d�|jttj||�|jt	tj||�dS)NrN)
rMrr)r*r/r^r
rIr�r)rCr�rrrr�test_copyfile_same_fileZs

z"TestShutil.test_copyfile_same_filecCs�|j�}|d}|jtj|d�tjj|d�}t|d�tj||�}|j	dgtj
|��dS)N�destTrN)rMr�rIrJrr)r*r/r�rbr6)rCr�r�r�r|rrr�test_copytree_return_valueds

z%TestShutil.test_copytree_return_value)Tr�r�r�rArGrMrVr�skip_unless_symlinkrernry�unittest�
skipUnlessr�r�skipIf�sys�platformr|r�r�r�r�r�r�r�rr�Zskip_unless_xattrr�r�r�r�r�r�r�r�r�r�r�r�ZmockZpatchr�r<rrrr
rrrrrrrrr,r.rrI�whichr8�ZIP_SUPPORTr=r?rIrKrTrOrWr\r^r_rgrjrnrqr{r}r�r�r�rr)rDrr?ds�	$$ 
)8$#
A*'
'*$!!	*:
r?c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zej	e
ed�olej�dkd
�dd��Z
dd�Zdd�Zejejdkd�dd��Zdd�Zdd�Zdd�ZdS)�	TestWhichcCs�tjdd�|_|jtj|jd�tjd|jdddd�|_tj	|jj
tj�|j|jj
�tjj|jj
�\|_|_dS)N�prefixZTmpTrW�suffixz.Exe)rLrM�temp_dirr�rIrJZNamedTemporaryFile�	temp_filerrzr<r��S_IXUSRr�r)r�rW�file)rCrrrrAqszTestWhich.setUpcCs5tj|jd|j�}|j||jj�dS)Nr))rIr�r�rWrbr�r<)rCr|rrr�
test_basic}szTestWhich.test_basiccCs8tj|jjd|j�}|j||jj�dS)Nr))rIr�r�r<r�rb)rCr|rrr�test_absolute_cmd�szTestWhich.test_absolute_cmdcCs�tjj|j�\}}tjj||j�}tjd|��-tj	|d|j
�}|j||�WdQXtjd|j��'tj	|d|�}|j|�WdQXdS)Nr))
rr)r�rWr*r�rr!rIr�r�rb�assertIsNone)rCr'�tail_dir�relpathr|rrr�test_relative_cmd�szTestWhich.test_relative_cmdcCs�tjj|j�}tjd|j��atj|jd|�}t	j
dkrz|j|tjjtj
|j��n
|j|�WdQXdS)Nr)�win32)rr)r�rWrr!rIr�r�r�r�rbr*�curdirr�)rCr'r|rrr�test_cwd�s(zTestWhich.test_cwdr|rznon-root user requiredcCsytj|jjtj�tj|jjtj�rD|jd�nt	j
|jd|jdtj�}|j
|�dS)Nzcan't set the file read-onlyr)�mode)rrzr�r<r�r��access�W_OK�skipTestrIr�r�rWr�)rCr|rrr�test_non_matching_mode�s
$z TestWhich.test_non_matching_modecCsrtjj|j�\}}tjd|��?tj|jd|�}|j	|tjj
||j��WdQXdS)Nr))rr)r�rWrr!rIr�r�rbr*)rCr'r�r|rrr�test_relative_path�szTestWhich.test_relative_pathcCs)tjdd|j�}|j|�dS)Nzfoo.exer))rIr�rWr�)rCr|rrr�test_nonexistent_file�szTestWhich.test_nonexistent_filer�zpathext check is Windows-onlycCsMtj|jdd�d|j�}|j||jjdd�d�dS)N�r)z.EXE���r�)rIr�r�rWrbr�r<)rCr|rrr�test_pathext_checking�s%zTestWhich.test_pathext_checkingc
CsNtj��<}|j|d<tj|j�}|j||jj�WdQXdS)N�PATH)	r�EnvironmentVarGuardrWrIr�r�rbr�r<)rC�envr|rrr�test_environ_path�s
zTestWhich.test_environ_pathcCs|tjj|j�}tjd|j��Ltj��9}|j|d<tj|j	dd�}|j
|�WdQXWdQXdS)Nr)r�rp)rr)r�rWrr!r�rIr�r�r�)rCr'r�r|rrr�test_empty_path�s
zTestWhich.test_empty_pathc
CsHtj��6}|jdd�tj|j�}|j|�WdQXdS)Nr�)rr�rHrIr�r�r�)rCr�r|rrr�test_empty_path_no_PATH�sz!TestWhich.test_empty_path_no_PATHN)r�r�r�rAr�r�r�r�r�r�r�rr|r�r�r�r�r�r�r�r�r�r�rrrrr�os
$	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�Zejejjd�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"d2S)3�TestMovec	Cs�d}tj�|_tj�|_tjj|j|�|_tjj|j|�|_t	|jd��}|j
d�WdQXdS)NrNr%sspam)rLrMr�r�rr)r*rr~r+r,)rCrurrrrrA�szTestMove.setUpc
CsFx?|j|jfD]+}y|r2tj|�nWqYqXqWdS)N)r�r�rIrJ)rCrKrrrrG�szTestMove.tearDowncCst|d��}|j�}WdQXtj||�t|d��}|j||j��WdQX|jtjj|��dS)Nr0)	r+r2rI�moverbrmrr)r`)rCr�r��real_dstr�contentsrrr�_check_move_file�szTestMove._check_move_filecCsattj|��}tj||�|j|ttj|���|jtjj|��dS)N)	r5rr6rIr�rbrmr)r`)rCr�r�r�r�rrr�_check_move_dir�szTestMove._check_move_dircCs |j|j|j|j�dS)N)r�rr~)rCrrr�test_move_file�szTestMove.test_move_filecCs |j|j|j|j�dS)N)r�rr�r~)rCrrr�test_move_file_to_dir�szTestMove.test_move_file_to_dircCs|j�dS)N)r�)rCrrr�test_move_file_other_fs�sz TestMove.test_move_file_other_fscCs|j�dS)N)r�)rCrrr�test_move_file_to_dir_other_fssz'TestMove.test_move_file_to_dir_other_fscCsJtj�}z|j|j||�Wdytj|�WnYnXXdS)N)rLrqr�r�rIrJ)rCr�rrr�
test_move_dirszTestMove.test_move_dircCs|j�dS)N)r�)rCrrr�test_move_dir_other_fsszTestMove.test_move_dir_other_fscCs>|j|j|jtjj|jtjj|j���dS)N)r�r�r�rr)r*r )rCrrr�test_move_dir_to_dirszTestMove.test_move_dir_to_dircCs|j�dS)N)r�)rCrrr�test_move_dir_to_dir_other_fssz&TestMove.test_move_dir_to_dir_other_fscCsH|j|jtjj|jtjj|jtjj|j���dS)N)r�r�rr)�sepr�r*r )rCrrr�test_move_dir_sep_to_dir sz!TestMove.test_move_dir_sep_to_dirzrequires os.path.altsepcCsH|j|jtjj|jtjj|jtjj|j���dS)N)r�r�rr)�altsepr�r*r )rCrrr�test_move_dir_altsep_to_dir$sz$TestMove.test_move_dir_altsep_to_dircCs?t|jd��WdQX|jtjtj|j|j�dS)Nr%)r+r~r^rIrr�rr�)rCrrr�"test_existing_file_inside_dest_dir)sz+TestMove.test_existing_file_inside_dest_dircCs;tjj|jd�}|jtjtj|j|�dS)Nr�)rr)r*r�r^rIrr�)rCr�rrr�test_dont_move_dir_in_itself/sz%TestMove.test_dont_move_dir_in_itselfc
Cs�tjt�zqxjdgD]_\}}tjjt|�}tjjt|�}|jtj||�dd||f�qWWdtjtdd�XdS)N�srcdir�srcdir/destrHz?_destinsrc() wrongly concluded that dst (%s) is not in src (%s)roT)zsrcdirr�)	rrOrr)r*r_rI�
_destinsrcrJ)rCr�r�rrr�test_destinsrc_false_negative4s
z&TestMove.test_destinsrc_false_negativec
Cs�tjt�ztxmdd	gD]_\}}tjjt|�}tjjt|�}|jtj||�dd||f�qWWdtjtdd�XdS)
Nr��src/dest�
srcdir.newrHz;_destinsrc() wrongly concluded that dst (%s) is in src (%s)roT)�srcdirr�)r�r�)	rrOrr)r*rmrIr�rJ)rCr�r�rrr�test_destinsrc_false_positive@s
z&TestMove.test_destinsrc_false_positivecCs�tjj|jd�}tj|j|�tj||j�|j	tjj
|j��|j	tjj|j|j��dS)Nr�)rr)r*r�r]rrIr�r~r_r8�samefile)rCr�rrr�test_move_file_symlinkLs
zTestMove.test_move_file_symlinkcCs�d}tjj|j|�}tj|j|�tj||j�tjj|j|�}|j	tjj
|��|j	tjj|j|��dS)Nr�)rr)r*r�r]rrIr�r�r_r8r�)rCrur�Z
final_linkrrr�test_move_file_symlink_to_dirUsz&TestMove.test_move_file_symlink_to_dircCs�tjj|jd�}tjj|jd�}tj||�tjj|jd�}tj||�|jtjj	|��tj
dkr�|jtjj|�tj
|��n(|jtjj|�tjj|��dS)Nr�r�r�rE)rr)r*r�r]r�rIr�r_r8r<rb�realpathr�)rCr�r�r�rrr�test_move_dangling_symlink`s(z#TestMove.test_move_dangling_symlinkcCs�tjj|jd�}tjj|jd�}tj|�tj||�tjj|jd�}tj||�|j	tjj
|��|j	tjj||��dS)Nr�r�r�)rr)r*r�rOr]r�rIr�r_r8r�)rCr�r�r�rrr�test_move_dir_symlinkos
zTestMove.test_move_dir_symlinkcCsMtj|j|j�}|j|tjj|jtjj|j���dS)N)	rIr�rr�rbrr)r*r )rCr|rrr�test_move_return_value{s	zTestMove.test_move_return_valuecCsMtj|jtjj|jd��}|j|tjj|jd��dS)Nr�)rIr�rrr)r*r�rb)rCr|rrr� test_move_as_rename_return_value�s'z)TestMove.test_move_as_rename_return_valueN)#r�r�r�rArGr�r�r�r�r$r�r�r�r�r�r�r�r�r�rr)r�r�r�r�r�r�rr�r�r�r�r�r�r�rrrrr��s8	$
r�c@s�eZdZdZGdd�de�Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�ZdS)�TestCopyFileFc@sXeZdZdZdZdZdddd�Zdd�Zdd	�Zd
d�Z	dS)zTestCopyFile.FauxFNTcCs||_||_dS)N)�_raise_in_exit�_suppress_at_exit)rCZ
raise_in_exitZsuppress_at_exitrrr�__init__�s	zTestCopyFile.Faux.__init__cGsdS)Nrpr)rCrrrrr2�szTestCopyFile.Faux.readcCs
d|_dS)NT)�_entered)rCrrr�	__enter__�szTestCopyFile.Faux.__enter__cCs:|||f|_|jr3d|_td��n|jS)NTzCannot close)�_exited_withr��_raisedrr�)rC�exc_typeZexc_valZexc_tbrrr�__exit__�s
		zTestCopyFile.Faux.__exit__)
r�r�r�r�r�r�r�r2r�r�rrrr�Faux�sr�cCs|jrt`ndS)N)�_deleterIr+)rCrrrrG�s	zTestCopyFile.tearDowncCs|t_d|_dS)NT)rIr+r�)rCr rrr�_set_shutil_open�s	zTestCopyFile._set_shutil_opencCs9ddd�}|j|�|jttjdd�dS)Nr1cSs+|dkrtd��nds't�dS)N�srcfilezCannot open "srcfile"r)r�AssertionError)rur�rrr�_open�sz4TestCopyFile.test_w_source_open_fails.<locals>._openr��destfile)r�r^rrIr�)rCr�rrr�test_w_source_open_fails�s
z%TestCopyFile.test_w_source_open_failscs�|j��d�fdd�}|j|�tjdd�|j�j�|j�jdtk�|j�jdj	d	�dS)
Nr1cs;|dkr�S|dkr+td��nds7t�dS)Nr�r�zCannot open "destfile"r)rr�)rur�)r�rrr��s
z2TestCopyFile.test_w_dest_open_fails.<locals>._openr�r�rr[�Cannot open "destfile")r�)
r�r�rIr�r_r�r�rrbr)rCr�r)r�r�test_w_dest_open_fails�s
z#TestCopyFile.test_w_dest_open_failscs�|j��|jd��d��fdd�}|j|�tjdd�|j�j�|j�j�|j�j�|j�jdtk�|j	�jdj
d
�dS)NTr1cs0|dkr�S|dkr �Sds,t�dS)Nr�r�r)r�)rur�)r�r�rrr��s
z3TestCopyFile.test_w_dest_close_fails.<locals>._openr�r�rr[�Cannot close)r�)r�r�rIr�r_r�r�r�rrbr)rCr�r)r�r�r�test_w_dest_close_fails�s
z$TestCopyFile.test_w_dest_close_failscs�|jd��|j��d��fdd�}|j|�|jttjdd�|j�j�|j�j�|j�j	�|j�j
ddk�|j�j	�dS)NTr1cs0|dkr�S|dkr �Sds,t�dS)Nr�r�r)r�)rur�)r�r�rrr��s
z5TestCopyFile.test_w_source_close_fails.<locals>._openr�r�r)r�r�r^rrIr�r_r�rmr�r�)rCr�r)r�r�r�test_w_source_close_fails�s
	z&TestCopyFile.test_w_source_close_failscCs�tj�|_|jtj|jd�tjjtjj	|j�tjj
|j�j��}|j|j|�z0tj
|j|�|jtjj|��Wdtj|�XdS)NT)rLrMr�r�rIrJrr)r*r�r �upperr�r�r_r7rv)rCr�rrr�test_move_dir_caseinsensitive�s	z*TestCopyFile.test_move_dir_caseinsensitiveN)
r�r�r�r��objectr�rGr�r�r�r�r�r�rrrrr��s
r�c@sXeZdZdd�Zdd�Zejeje	j
j��d�dd��ZdS)	�
TermsizeTestscCs6tj�}|j|jd�|j|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)rI�get_terminal_sizerp�columns�lines)rC�sizerrr�test_does_not_crash�sz!TermsizeTests.test_does_not_crashcCs�tj��}d|d<tj�}WdQX|j|jd�tj��}d|d<tj�}WdQX|j|jd�dS)z.Check if environment variables have precedenceZ777�COLUMNSNi	Z888�LINESix)rr�rIr�rbr�r�)rCr�r�rrr�test_os_environ_firsts

z#TermsizeTests.test_os_environ_firstz
not on ttycCs�y%tjddg�j�j�}Wn(ttjfk
rO|jd�YnXt|d�t|d�f}tj	��!}|d=|d=t
j�}WdQX|j||�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 failedr[rr�r�N)
r5rCrFr�rrrDr��intrr�rIr�rb)rCr�rir�r�rrr�test_stty_matchs% zTermsizeTests.test_stty_matchN)
r�r�r�r�r�r�r�r�isattyr��
__stdout__�filenor�rrrrr��s

r�c@s"eZdZdZdd�ZdS)�PublicAPITestsz>Ensures that the correct values are exposed in the public API.cCs�|jttd��dddddddd	d
ddd
dddddddddddddg}ttd�s�tjdkr�|jd�n|jttj�t|��dS)N�__all__Zcopyfileobjr�r�r�r�r�r�r�rJrrZ	ExecErrorrrrrrr	rrr�rrr�r�r
�statvfsrEro)	r_r�rIrr<r9rb�setr�)rCZ
target_apirrr�test_module_all_attribute.s	z(PublicAPITests.test_module_all_attributeN)r�r�r��__doc__r�rrrrr�+sr��__main__)9r�Z
unittest.mockrIrLr�r�rZos.pathrr"r5�
contextlibrrrrrrrr	r
rrr
r#�warningsr]rZtest.supportrrrr�bz2rh�ImportErrorrrPrRrOr9r�r�rr$r/r3r:ZTestCaser?r�r�r�r�r�r��mainrrrr�<module>sfL"







�����d�x.