HEX
Server: Apache
System: Linux bd12.noc223.com 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64
User: handcraf (1693)
PHP: 8.1.28
Disabled: NONE
Upload Files
File: //opt/alt/python312/lib64/python3.12/test/__pycache__/test_shutil.cpython-312.opt-2.pyc
�

�h�eu����ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlZddlZddlZ	ddlZddl!m"Z"ddl#m$Z$ddl%m&Z&m'Z'ddl#m(Z(e&dzZ)e&dzZ*e&d	zZ+ejXj[d
�Z.ejXj[d�Z/ejXddd
k(Z0	ddl1Z1ddl2Z2dZ3	ddl4Z4ejjjmde7d���Z8d�Z9d�Z:d>d�Z;d�Z<d>d�Z=d�Z>d�Z?e?�Z@d�ZAGd�d�ZBGd�deBej��ZDGd�d eBej��ZEGd!�d"eBej��ZFGd#�d$eBej��ZGGd%�d&eBej��ZHGd'�d(eBej��ZIGd)�d*eI�ZJGd+�d,eBej��ZKGd-�d.ej��ZLGd/�d0ej��ZMGd1�d2eN�ZOej�e@d3�Gd4�d5eOej���ZQej�e.d6�Gd7�d8eOej���ZRGd9�d:ej��ZSGd;�d<ej��ZTeUd=k(rej��yy#e $rdZY��OwxYw#e $rdZ3Y���wxYw#e $rdZ4Y���wxYw)?�N)�make_archive�register_archive_format�unregister_archive_format�get_archive_formats�Error�unpack_archive�register_unpack_format�
RegistryError�unregister_unpack_format�get_unpack_formats�
SameFileError�_GiveupOnFastCopy)�support)�	os_helper)�TESTFN�FakePath)�warnings_helper�2�_SRC�_DST�darwin�sunos��aixTFzos.chdirzshouldn't call os.chdir()��side_effectc�8�tttdd�d��)N�EXDEV�zInvalid cross-device link)�OSError�getattr�errno)�args�kwargss  �7/opt/alt/python312/lib64/python3.12/test/test_shutil.py�_fake_renamer&;s��
�'�%��"�-�/J�
K�K�c�B��tj���fd��}|S)Nc���	tj}tt_�|i|��|t_S#t_wxYw�N)�os�renamer&)r#r$�builtin_rename�funcs   �r%�wrapzmock_rename.<locals>.wrap@s4���	'��Y�Y�N�$�B�I���(��(�&�B�I���B�I�s	�&5�
A)�	functools�wraps)r.r/s` r%�mock_renamer2?s%����_�_�T��'��'��Kr'c���	t|t�rtjj|�}|rdnd}|rdnd}t|||��5}|j
|�ddd�y#1swYyxYw)N�wb�w�utf-8��encoding)�
isinstance�tupler+�path�join�open�write)r;�content�binary�moder8�fps      r%�
write_filerCJsf����$����w�w�|�|�T�"���4�s�D��t�7�H�	
�d�D�8�	,���
��������s�A#�#A,c�^�	d�}t|d�}djt|�D�cgc]3}tjt
j�j���5c}�}t|d�5}|||�D]}|j|��	ddd�ycc}w#1swYyxYw)Nc3�BK�||kDr|��||z}||kDr�|r|��yy�wr*�)�total�steps  r%�chunkszwrite_test_file.<locals>.chunksZs3�����d�l��J��T�M�E��d�l���K��s��i r'r4)
�minr<�range�random�choice�string�
ascii_letters�encoder=r>)r;�sizerI�bufsize�i�chunk�f�csizes        r%�write_test_filerWXs���L���$��o�G��H�H�$�W�~�/���m�m�F�$8�$8�9�@�@�B�/�
0�E�	
�d�D�	��Q��D�'�*�	�E�
�G�G�E�N�	����/���s�8B�4 B#�#B,c���	t|t�rtjj|�}|rdnd}|rdnd}t|||��5}|j
�cddd�S#1swYyxYw)N�rb�rr6r7)r9r:r+r;r<r=�read)r;r@rAr8rBs     r%�	read_filer\jsc����$����w�w�|�|�T�"���4�s�D��t�7�H�	
�d�D�8�	,����w�w�y����s�A"�"A+c��g}ttj|��D]�}tjj	||�}tjj|�r[tjj
|�s<|j|dz�t|�D]}|j|dz|z����|j|���|S)N�/)	�sortedr+�listdirr;r<�isdir�islink�append�rlistdir)r;�res�name�p�ns     r%rdrdxs���
�C��r�z�z�$�'�(����G�G�L�L��t�$��
�7�7�=�=���B�G�G�N�N�1�$5��J�J�t�c�z�"��a�[�
+���
�
�4�#�:��>�*�
+�
�J�J�t����Jr'c�
�ttd�syd}d}	tjdtj�d��5}|j
}|j
d�ddd�t|d�5}tjdtj�d��5}|j
}|j�}|j�}	tj||dd�	ddd�ddd�|�tj|�|�tj|�y	y	#1swY��xYw#t$rBYddd�ddd�|�tj|�|�tj|�yywxYw#1swYnxYw	ddd�n#1swYnxYw|�tj|�|�tj|�yy#|�tj|�|�tj|�wwxYw)
N�sendfileFr4��dir�deletes
0123456789rYr�T)
�hasattrr+�tempfile�NamedTemporaryFile�getcwdrfr>r=�filenorjr�unlinkr )�srcname�dstnamerU�src�dst�infd�outfds       r%�supports_file2file_sendfiler{�s����2�z�"���G��G�&�
�
(�
(��2�9�9�;�u�
M�	#�QR��f�f�G�
�G�G�M�"�	#��'�4�
 �
	 �C��,�,�T�r�y�y�{�5�Q�	
 �UX��(�(���z�z�|���
�
��� ��K�K��t�Q��2� �	
 �
	 ������W�%������W�%��%	#�	#���!� �	
 �
	 ������W�%������W�%��!��
	
 �	
 ��	
 �
	 �
	 �
	 �������W�%������W�%��������W�%������W�%��s��*G�D%�G�3+F�-E?�D1�$E?�%F�-G�%D.�*G�1	E<�:E?�;F�G�;E<�<E?�?F	�F�	G�F�G�1Hc���trmtjdk(rZtjdtj
z�}|j
d�dj
�d}t|d�dk\Sy)	Ni���z/usr/bin/dump -o %s�
�����i T)�AIX�sys�maxsize�
subprocess�	getoutput�
executable�split�int)�hdrs�maxdatas  r%�
_maxdataOKr��s_��
�s�{�{�j�(�
�
!�
!�"7�#�.�.�"H�
I���
�
�4� ��$�*�*�,�Q�/���7�2��*�,�,�r'c��eZdZdd�Zy)�BaseTestNc��	tj|tj���}|j	t
j|�|S)N)�prefixrl)rp�mkdtempr+rr�
addCleanupr�rmtree)�selfr��ds   r%r�zBaseTest.mkdtemp�s:��	�
���F��	�	��<�����	�(�(�!�,��r'r*)�__name__�
__module__�__qualname__r�rFr'r%r�r��s��r'r�c��eZdZd�Zej
d��Zej
d��Zej
d��Ze	jed�d��Ze	jed�d��Z
e	jed�d��Zd	�Zd
�Ze	j"ej&ddd
k(d�ej(ej*d����Zd�Ze	j"ej&ddd
k(d�ej(ej*d����Zd�Ze	j"ej&ddd
k(d�ej(ej*d����Zd�Zd�Ze	jej<d�d��Ze	jej<d�d��Z e	j"ej<d�d��Z!d�Z"ej
d��Z#e	jed�d��Z$y)�
TestRmTreec�b�|j�}tjj|d�}tj|�ttjj|d�d�tj|�}|j|t�tj|�y)N�killme�somefile�foo)r�r+r;r<�mkdirrC�fsencode�assertIsInstance�bytes�shutilr�)r��tmp�victims   r%�test_rmtree_works_on_bytesz%TestRmTree.test_rmtree_works_on_bytes�sp���l�l�n�������c�8�,��
������2�7�7�<�<��
�3�U�;����V�$�����f�e�,��
�
�f�r'c�>��|j�}tjj|d�}tj|�tjj|d�}tj
||�|j
ttj|�|jtjj|��|jtjj|��g��fd�}tj||��|jt��d�|j�ddtjj �|j�dd|�|j#�dddt�y)Nrl�linkc�(���j|�yr*�rc�r#�errorss �r%�onerrorz@TestRmTree.test_rmtree_fails_on_symlink_onerror.<locals>.onerror������M�M�$�r'�r�rrrn�r�r+r;r<r��symlink�assertRaisesr r�r��
assertTrue�exists�lexists�assertEqual�len�assertIsrbr��r�r��dir_r�r�r�s     @r%�$test_rmtree_fails_on_symlink_onerrorz/TestRmTree.test_rmtree_fails_on_symlink_onerror�s����l�l�n���w�w�|�|�C��'��
������w�w�|�|�C��(��
�
�
�4������'�6�=�=�$�7���������t�,�-����������-�.���	 ��
�
�d�G�,�����V��a�(��
�
�f�Q�i��l�B�G�G�N�N�3�������1��t�,����f�Q�i��l�1�o�w�7r'c�8��|j�}tjj|d�}tj|�tjj|d�}tj
||�|j
ttj|�|jtjj|��|jtjj|��g��fd�}tj||��|jt��d�|j�ddtjj �|j�dd|�|j#�ddt�y)Nrlr�c�(���j|�yr*r�r�s �r%�onexcz<TestRmTree.test_rmtree_fails_on_symlink_onexc.<locals>.onexc�r�r'�r�rrrnr��r�r�r�r�r�r�s     @r%�"test_rmtree_fails_on_symlink_onexcz-TestRmTree.test_rmtree_fails_on_symlink_onexc�s����l�l�n���w�w�|�|�C��'��
������w�w�|�|�C��(��
�
�
�4������'�6�=�=�$�7���������t�,�-����������-�.���	 ��
�
�d�%�(�����V��a�(��
�
�f�Q�i��l�B�G�G�N�N�3�������1��t�,����f�Q�i��l�G�4r'c��|j�}tjj|d�}tjj|d�}tjj|d�}|||fD]}tj|��tjj|d�}t|d�tjj|d�}tj||�tjj|d�}tj||�tjj|d�}	tj||	�tj|�|jtjj|��|jtjj|��|jtjj|��y�	N�dir1�dir2�dir3�file1r��link1�link2�link3)r�r+r;r<r�rCr�r�r��assertFalser�r��
r�r�r�r�r�r�r�r�r�r�s
          r%�test_rmtree_works_on_symlinksz(TestRmTree.test_rmtree_works_on_symlinks�sG���l�l�n���w�w�|�|�C��(���w�w�|�|�D�&�)���w�w�|�|�C��(���t�T�!�	�A��H�H�Q�K�	������S�'�*���5�%� ������T�7�+��
�
�
�4��������T�7�+��
�
�
�4��������T�7�+��
�
�
�5�%� ��
�
�d�����������-�.���������t�,�-���������u�-�.r'zonly relevant on Windowsc�~��|j�}tjj|d�}tj|�tjj|d�}tj||�|jtj|�|jttj|�|jtjj|��|jtjj!|��g��fd�}tj||��|j#t%��d�|j'�ddtjj(�|j#�dd|�|j+�dddt�y)Nrlr�c�(���j|�yr*r�r�s �r%r�zBTestRmTree.test_rmtree_fails_on_junctions_onerror.<locals>.onerrorr�r'r�rrrn�r�r+r;r<r��_winapi�CreateJunctionr�rrtr�r r�r�r�r�r�r�r�r�rbr�r�s     @r%�&test_rmtree_fails_on_junctions_onerrorz1TestRmTree.test_rmtree_fails_on_junctions_onerrors+����l�l�n���w�w�|�|�C��'��
������w�w�|�|�C��(�����t�T�*����	�(�(�$�/����'�6�=�=�$�7���������t�,�-����������-�.���	 ��
�
�d�G�,�����V��a�(��
�
�f�Q�i��l�B�G�G�N�N�3�������1��t�,����f�Q�i��l�1�o�w�7r'c�x��|j�}tjj|d�}tj|�tjj|d�}tj||�|jtj|�|jttj|�|jtjj|��|jtjj!|��g��fd�}tj||��|j#t%��d�|j'�ddtjj(�|j#�dd|�|j+�ddt�y)Nrlr�c�(���j|�yr*r�r�s �r%r�z>TestRmTree.test_rmtree_fails_on_junctions_onexc.<locals>.onexc#r�r'r�rrrnr�r�s     @r%�$test_rmtree_fails_on_junctions_onexcz/TestRmTree.test_rmtree_fails_on_junctions_onexcs'����l�l�n���w�w�|�|�C��'��
������w�w�|�|�C��(�����t�T�*����	�(�(�$�/����'�6�=�=�$�7���������t�,�-����������-�.���	 ��
�
�d�%�(�����V��a�(��
�
�f�Q�i��l�B�G�G�N�N�3�������1��t�,����f�Q�i��l�G�4r'c��|j�}tjj|d�}tjj|d�}tjj|d�}|||fD]}tj|��tjj|d�}t|d�tjj|d�}t
j||�tjj|d�}t
j||�tjj|d�}	t
j||	�tj|�|jtjj|��|jtjj|��|jtjj|��yr�)
r�r+r;r<r�rCr�r�r�r�r�r�r�r�s
          r%�test_rmtree_works_on_junctionsz)TestRmTree.test_rmtree_works_on_junctions+sM���l�l�n���w�w�|�|�C��(���w�w�|�|�D�&�)���w�w�|�|�C��(���t�T�!�	�A��H�H�Q�K�	������S�'�*���5�%� ������T�7�+�����t�U�+������T�7�+�����t�U�+������T�7�+�����u�e�,��
�
�d�����������-�.���������t�,�-���������u�-�.r'c�n��tj|j���}|jtt
j|�tj|d��|j�}t|dfd�tjj|d�}|jt�5}tj|�ddd�|jjj|�|jtjj!|��tj|d��|jtjj!|��g��fd�}tj||��|jt#��d�|j%�d	d	tj&�|j�d	d
|�|j)�d	dd
t�|j�d	dd
j|�|j%�d
d	tj*�|j�d
d
|�|j)�d
dd
t�|j�d
dd
j|�y#1swY���xYw)N�rlT��
ignore_errors�tstfile�c�(���j|�yr*r�r�s �r%r�z6TestRmTree.test_rmtree_errors_onerror.<locals>.onerrorTr�r'r�rnrr�rp�mktempr�r��FileNotFoundErrorr�r�rCr+r;r<�NotADirectoryErrorr��	exception�filenamer�r�r�r��scandirr��rmdir)r�r��tmpdir�cmr�r�s     @r%�test_rmtree_errors_onerrorz%TestRmTree.test_rmtree_errors_onerrorAs����?�?�t�|�|�~�6�����+�V�]�]�H�E��
�
�h�d�3�������F�I�&��+��7�7�<�<��	�2��
�
�
�1�
2�	$�b��M�M�(�#�	$�������.�.��9���������x�0�1��
�
�h�d�3���������x�0�1���	 ��
�
�h��0�����V��a�(��
�
�f�Q�i��l�B�J�J�/�������1��x�0����f�Q�i��l�1�o�/A�B�������1��a��1�1�8�<��
�
�f�Q�i��l�B�H�H�-�������1��x�0����f�Q�i��l�1�o�/A�B�������1��a��1�1�8�<�'	$�	$�s�5J*�*J4c�V��tj|j���}|jtt
j|�tj|d��|j�}t|dfd�tjj|d�}|jt�5}tj|�ddd�|jjj|�|jtjj!|��tj|d��|jtjj!|��g��fd�}tj||��|jt#��d�|j%�d	d	tj&�|j�d	d
|�|j)�d	dt�|j�d	dj|�|j%�d
d	tj*�|j�d
d
|�|j)�d
dt�|j�d
dj|�y#1swY���xYw)Nr�Tr�r�r�c�(���j|�yr*r�r�s �r%r�z2TestRmTree.test_rmtree_errors_onexc.<locals>.onexctr�r'r�rnrrr�)r�r�r�r�r�r�s     @r%�test_rmtree_errors_onexcz#TestRmTree.test_rmtree_errors_onexcas�����?�?�t�|�|�~�6�����+�V�]�]�H�E��
�
�h�d�3�������F�I�&��+��7�7�<�<��	�2��
�
�
�1�
2�	$�b��M�M�(�#�	$�������.�.��9���������x�0�1��
�
�h�d�3���������x�0�1���	 ��
�
�h�e�,�����V��a�(��
�
�f�Q�i��l�B�J�J�/�������1��x�0����f�Q�i��l�,>�?�������1��.�.��9��
�
�f�Q�i��l�B�H�H�-�������1��x�0����f�Q�i��l�,>�?�������1��.�.��9�'	$�	$�s�5J�J(N��cygwinz2This test can't be run on Cygwin (issue #1071513).c��d|_tjt�|j	t
jt�tjjtd�|_	tjjtd�|_
tj|j�tj|j�tjt�j}tj|j�j}tj|j�j}tjtj z}tj"|j|�tj"|j|�tj"t|�|j	tj"t|�|j	tj"|j|�|j	tj"|j|�tjt|j$��|j'|jdd�y)Nr�a�br�rz1Expected call to onerror function did not happen.)�
errorStater+r�rr�r�r�r;r<�child_file_path�child_dir_pathr�create_empty_file�stat�st_mode�S_IREAD�S_IEXEC�chmod�check_args_to_onerrorr��r��old_dir_mode�old_child_file_mode�old_child_dir_mode�new_modes     r%�
test_on_errorzTestRmTree.test_on_error�s���
���
���������
�
�v�.�!�w�w�|�|�F�C�8��� �g�g�l�l�6�3�7����#�#�D�$8�$8�9�
����$�$�%��w�w�v��.�.�� �g�g�d�&:�&:�;�C�C���W�W�T�%8�%8�9�A�A���<�<����,��
����%�%�x�0�
����$�$�h�/�
�����"�������&�,�7�������$�"6�"6�8K�L�������$�"5�"5�7I�J��
�
�f�d�&@�&@�A�������!�L�	Nr'c��|jdkr�|tjur|j||j�nq|tj
ur|j||j�nB|j|tj�|j|t|jg�|jt|dt��|xjdz
c_y|j|tj
�|j|t�|jt|dt��d|_y)Nrnrrr)r�r+rtr�r�r�r�r�r`�assertInrr��
issubclassr �r�r.�arg�excs    r%r�z TestRmTree.check_args_to_onerror�s����?�?�Q���r�y�y� �� � ��d�&:�&:�;�����!�� � ��d�&9�&9�:��
�
�d�B�J�J�/��
�
�c�F�D�,?�,?�#@�A��O�O�J�s�1�v�w�7�8��O�O�q� �O����T�2�8�8�,����S�&�)��O�O�J�s�1�v�w�7�8��D�Or'c��d|_tjt�|j	t
jt�tjjtd�|_	tjjtd�|_
tj|j�tj|j�tjt�j}tj|j�j}tj|j�j}tjtj z}tj"|j|�tj"|j|�tj"t|�|j	tj"t|�|j	tj"|j|�|j	tj"|j|�tjt|j$��|j'|jdd�y)Nrr�r�r�rz/Expected call to onexc function did not happen.)r�r+r�rr�r�r�r;r<r�r�rr�r�r�r�r�r��check_args_to_onexcr�r�s     r%�test_on_exczTestRmTree.test_on_exc�s���
���
���������
�
�v�.�!�w�w�|�|�F�C�8��� �g�g�l�l�6�3�7����#�#�D�$8�$8�9�
����$�$�%��w�w�v��.�.�� �g�g�d�&:�&:�;�C�C���W�W�T�%8�%8�9�A�A���<�<����,��
����%�%�x�0�
����$�$�h�/�
�����"�������&�,�7�������$�"6�"6�8K�L�������$�"5�"5�7I�J��
�
�f�D�$<�$<�=�������!�J�	Lr'c��|jdkr�|tjur|j||j�nq|tj
ur|j||j�nB|j|tj�|j|t|jg�|jt|t��|xjdz
c_y|j|tj
�|j|t�|jt|t��d|_y)Nrnrr)r�r+rtr�r�r�r�r�r`rrr�r9r rs    r%r	zTestRmTree.check_args_to_onexc�s����?�?�Q���r�y�y� �� � ��d�&:�&:�;�����!�� � ��d�&9�&9�:��
�
�d�B�J�J�/��
�
�c�F�D�,?�,?�#@�A��O�O�J�s�G�4�5��O�O�q� �O����T�2�8�8�,����S�&�)��O�O�J�s�G�4�5��D�Or'c����d�d��fd�}�fd�}tjt�|jtj
t�tjjtd�|_tjjtd�|_	tj|j�tj|j�tjt�j}tj|j�j}tj|j�j}tjtjz}tj |j|�tj |j|�tj t|�|jtj t|�|jtj |j|�|jtj |j|�t	j
t||��|j#��|j%��y)NFc�
��d�y�NTrF)r#�onerror_calleds �r%r�z7TestRmTree.test_both_onerror_and_onexc.<locals>.onerror�s���!�Nr'c�
��d�yrrF)r#�onexc_calleds �r%r�z5TestRmTree.test_both_onerror_and_onexc.<locals>.onexcs����Lr'r�r�)r�r�)r+r�rr�r�r�r;r<r�r�rr�r�r�r�r�r�r�r�)	r�r�r�r�r�r�rrrs	       @@r%�test_both_onerror_and_onexcz&TestRmTree.test_both_onerror_and_onexc�s����
����	"�	 �	���������
�
�v�.�!�w�w�|�|�F�C�8��� �g�g�l�l�6�3�7����#�#�D�$8�$8�9�
����$�$�%��w�w�v��.�.�� �g�g�d�&:�&:�;�C�C���W�W�T�%8�%8�9�A�A���<�<����,��
����%�%�x�0�
����$�$�h�/�
�����"�������&�,�7�������$�"6�"6�8K�L�������$�"5�"5�7I�J��
�
�f�g�U�;�����%�����(r'c���	tj��fd�}|t_tjt�t	tdfd�tjt��t_y#�t_wxYw)Nc�:��|tk7r
t���|�Sr*)rr )�fnr#r$�
orig_lstats   �r%�raiserzFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiser s�����<�!�)�O�%�b�>�)r'r�)r+�lstatr�rrCr�r�)r�rrs  @r%�+test_rmtree_does_not_choke_on_failing_lstatz6TestRmTree.test_rmtree_does_not_choke_on_failing_lstatsT���
	"����J�
*�
�B�H��H�H�V�������.��M�M�&�!�!�B�H��z�B�H�s�A$A3�3
Bc���tjtjtjtjhtj
kxrBtjtjvxr tjtjv}|r�|jtj�|jtjj�|j�}tjj!|d�}tj"|�	tj$}Gd�dt&���fd�}|t_|j)�tj|�|t_y|j+tj�|j+tjj�y#t_wxYw)Nr�c��eZdZy)�HTestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)r�r�r�rFr'r%�Calledr:s�r'rc�����r*rF)r#r$rs  �r%�_raiserzITestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser;s��� �Lr')r+r=r�rtr��supports_dir_fdr`�supports_fd�supports_follow_symlinksr�r��_use_fd_functionsr��avoids_symlink_attacksr�r;r<r��_rmtree_safe_fd�	Exceptionr�r�)r�r#�tmp_dirr��real_rmtreerrs      @r%�-test_rmtree_uses_safe_fd_version_if_availablez8TestRmTree.test_rmtree_uses_safe_fd_version_if_available-s4��� �g�g�r�w�w��	�	�2�8�8�D��/�/�0�D��Z�Z�2�>�>�9�D� �W�W��(C�(C�C�	���O�O�F�4�4�5��O�O�F�M�M�@�@�A��l�l�n�G������W�c�*�A��H�H�Q�K�
5�$�4�4��-�Y�-�!�)0��&��!�!�&�&�-�-��;�)4��&����V�5�5�6����V�]�]�A�A�B��*5��&�s
�%AG
�

Gzrequires safe rmtreec�*����|j�}tjj|d�}tj|�tjj|d�}tj|���fd�}d�tjtd|�5�|jt�5tj|�ddd�ddd�|jtjj|��|j�d�d�g��fd�}tjtd|�5�tj||��ddd�|jt��d�|j�dd|�|j�dd	|�|j�d	d|�|j�d	d	|�|j�d�y#1swY��$xYw#1swY��)xYw#1swY��xYw)
Nr�r�c�*���|��dz
�t�)Nr�r )�fd�close_count�
orig_closes ��r%�closez4TestRmTree.test_rmtree_fails_on_close.<locals>.closeNs����r�N��1��K��Mr'rr0rnc�(���j|�yr*r�r�s �r%r�z4TestRmTree.test_rmtree_fails_on_close.<locals>.onexc]r�r'r�r)r�r+r;r<r�r�	swap_attrr�r r�r�r�rar�r�r�)	r�r�r�r�r0r�r.r�r/s	      @@@r%�test_rmtree_fails_on_closez%TestRmTree.test_rmtree_fails_on_closeEs�����l�l�n���w�w�|�|�C��(��
������w�w�|�|�D�&�)��
�����	���
�
�
�r�7�E�
2�	$�j��"�"�7�+�
$��
�
�d�#�
$�	$�	
������
�
�d�+�,�����a�(�����	 �
�
�
�r�7�E�
2�	-�j��M�M�$�e�,�	-�����V��a�(��
�
�f�Q�i��l�E�*�������1��t�,��
�
�f�Q�i��l�E�*�������1��t�,�����a�(�!
$�
$��	$�	$��	-�	-�s0�!G<�7G/�
G<�H	�/G9	�4G<�<H�	Hzdir_fd is not supportedc��|j�}d}tjj||�}tj|tj
�}|j
tj|�tj|�tjtjj|d��ttjj|dd�d�|jtjj|��tj||��|jtjj|��y)Nr��subdirr�r���dir_fd)r�r+r;r<r=�O_RDONLYr�r0r�rCr�r�r�r�r�)r�r'r��fullnamer7s     r%�test_rmtree_with_dir_fdz"TestRmTree.test_rmtree_with_dir_fdhs����,�,�.�����7�7�<�<���0������"�+�+�.��������&�)�
�����
��������h��1�2��2�7�7�<�<��(�J�?��G���������x�0�1��
�
�f�V�,����������1�2r'zdir_fd is supportedc��|j�}|jt�5tj|d��ddd�|jtjj|��y#1swY�8xYw)Nrr6)	r�r��NotImplementedErrorr�r�r�r+r;r�)r�r's  r%�#test_rmtree_with_dir_fd_unsupportedz.TestRmTree.test_rmtree_with_dir_fd_unsupportedvsX���,�,�.��
�
�
�2�
3�	-��M�M�'�!�,�	-���������w�/�0�	-�	-�s�A5�5A>c���tj|j���\}}tj|�|jttj|�tj|�y�Nr�)
rp�mkstempr�r+r0r�r�r�r��remove)r��handler;s   r%�test_rmtree_dont_delete_filez'TestRmTree.test_rmtree_dont_delete_file}sJ���'�'�D�L�L�N�;����
��������,�f�m�m�T�B�
�	�	�$�r'c��tjt�	tjj	td�}tjj	td�}tj|�tj
||�|j
ttj|�tj|d��tjtd��y#tjtd��wxYw)N�cheese�shopTr�)
r+r�rr;r<r�r�r r�r��r�rwrxs   r%�test_rmtree_on_symlinkz!TestRmTree.test_rmtree_on_symlink�s���	�����	6��'�'�,�,�v�x�0�C��'�'�,�,�v�v�.�C��H�H�S�M��J�J�s�C� ����g�v�}�}�c�:��M�M�#�T�2��M�M�&��5��F�M�M�&��5�s�B/C&�&Dc�|�tjt�	tjj	td�}tjj	td�}tj|�ttjj	|d�d�j
�tj||�|jttj|�tj|d��tjtd��y#tjtd��wxYw)NrErF�spamr4Tr�)
r+r�rr;r<r=r0r�r�r�r r�r�rGs   r%�test_rmtree_on_junctionz"TestRmTree.test_rmtree_on_junction�s���
�����		6��'�'�,�,�v�x�0�C��'�'�,�,�v�v�.�C��H�H�S�M�������c�6�*�D�1�7�7�9��"�"�3��,����g�v�}�}�c�:��M�M�#�T�2��M�M�&��5��F�M�M�&��5�s�C'D�D;)%r�r�r�r�r�skip_unless_symlinkr�r�r��unittest�
skipUnlessr�r�r�r�r�r��skipIfr��platform�skip_if_dac_override�skip_unless_working_chmodrr�r
r	rrr)r�r#r3r:r=rCrHrKrFr'r%r�r��s�����"�"�8�#�8�$�"�"�5�#�5�$�"�"�/�#�/�*�X����"<�=�8�>�8�&�X����"<�=�5�>�5�&�X����"<�=�/�>�/�*=�@:�@�X�_�_�S�\�\�"�1�%��1�I�K��#�#��(�(�N�)�$�K�N�6 �6�X�_�_�S�\�\�"�1�%��1�I�K��#�#��(�(�L�)�$�K�L�6 �6�X�_�_�S�\�\�"�1�%��1�I�K��#�#��(�(�")�)�$�K�")�H"� C�0�X����1�1�3I�J� )�K� )�D�X����1�1�3L�M�3�N�3��X�_�_�V�-�-�/D�E�1�F�1���"�"�6�#�6��X����"<�=�6�>�6r'r�c��eZdZd�Zd�Zejd��Zd�Zd�Z	d�Z
ejjd�d��Zd	�Zej eed
�d�ejej&ej*dk(d
�d����Zd�Zejd��Zejd��Zd�Zd�Zy)�TestCopyTreec	�N�|j�}tjj|j�d�}|j	t
j|�|j	t
jtjj|��t|dfd�tjtjj|d��t|ddfd�tj||�|jtjjtjj|d���|jtjjtjj|d���|jtjjtjj|dd���t|df�}|j|d�t|ddf�}|j|d�y)N�destination�test.txt�123�test_dir�456)r�r+r;r<r�r�r��dirnamerCr��copytreer��isfilerar\r��r��src_dir�dst_dir�actuals    r%�test_copytree_simplez!TestCopyTree.test_copytree_simple�se���,�,�.���'�'�,�,�t�|�|�~�}�=������
�
�w�/�����
�
�r�w�w���w�'?�@��G�Z�(�%�0�
��������g�z�2�3��G�Z��4�e�<������)���������r�w�w�|�|�G�Z�'H�I�J�������
�
�b�g�g�l�l�7�J�&G�H�I���������r�w�w�|�|�G�Z�4>�(@�A�	B��G�Z�0�1�������'��G�Z��<�=�������'r'c	���|j�}|j�}|jtj|�|jtj|�t	|dfd�tjt
jj|d��tjt
jj|d��t	|ddfd�t	|ddfd�tj||d��|jt
jjt
jj|d���|jt
jjt
jj|d���|jt
jjt
jj|dd���t|df�}|j|d�t|ddf�}|j|d�|jt �5tj||d	��ddd�y#1swYyxYw)
Nznonexisting.txtrX�existing_dirzexisting.txtzwill be replacedzhas been replacedT)�
dirs_exist_okF)r�r�r�r�rCr+r�r;r<r\r�r]rar\r�r��FileExistsErrorr^s    r%�test_copytree_dirs_exist_okz(TestCopyTree.test_copytree_dirs_exist_ok�s����,�,�.���,�,�.������
�
�w�/�����
�
�w�/��G�.�/��7�
��������g�~�6�7�
��������g�~�6�7��G�^�^�<�>P�Q��G�^�^�<�>Q�R�������=���������r�w�w�|�|�G�=N�'O�P�Q�������
�
�b�g�g�l�l�7�N�&K�L�M���������r�w�w�|�|�G�^�4B�(D�E�	F��G�%6�7�8�������'��G�^�^�D�E������!4�5�
�
�
��
/�	C��O�O�G�W�E�B�	C�	C�	C�s�I&�&I/c	�`�|j�}tjj|d�}tjj|d�}tjj|d�}tj|�tj|�t|dfd�tjj|d�}tjj|d�}tjtjj|d�|�ttd�r5tj|tjtjz�ttd	�r4ttd
�r$tj|tj�tj|�}tj ||d��|j#tjj%tjj|dd���tj&tjj|dd��}tj(d
k(r|j+d�r|dd}|j-|tjj|d��tj|�}	ttd�r&|j-|	j.|j.�ttd	�r'|j-|	j0|j0�yy)Nrwrx�subzfile.txtr�r�zsub/link�lchmod�lchflags�	UF_NODUMPT��symlinks�ntz\\?\�)r�r+r;r<r�rCr�rorjr��S_IRWXU�S_IRWXOrkrlrr�r\r�rb�readlinkrf�
startswithr�r��st_flags)
r�r'r_r`�sub_dir�src_link�dst_link�src_statra�dst_stats
          r%�test_copytree_symlinksz#TestCopyTree.test_copytree_symlinks�s���,�,�.���'�'�,�,�w��.���'�'�,�,�w��.���'�'�,�,�w��.��
�����
������G�Z�(�%�0��7�7�<�<���0���7�7�<�<���4��
�
�
�2�7�7�<�<���4��	��2�x� ��I�I�h����t�|�|� ;�<��2�z�"�w�t�[�'A��K�K��$�.�.�1��8�8�H�%�������4�8���������r�w�w�|�|�G�U�F�'K�L�M����R�W�W�\�\�'�5�&�A�B���7�7�d�?�v�0�0��;��A�B�Z�F����������g�z�!B�C��8�8�H�%���2�x� ����X�-�-�x�/?�/?�@��2�z�"����X�.�.��0A�0A�B�#r'c
�t�tjj}tjj}|j	�}	||j	�d�}t|dfd�t|dfd�tj||d��t|ddfd�tj||d��t|ddfd�tj||dd��tj||dd	��t|dddfd�t|dd	d
fd�	tjdd�}tj|||��|j|||d���|j|||d���|j|||d���tj|�	tjdd
�}tj|||��|j|||d���|j|||dd	���|j|||dd���tj|�	d�}tj|||��|j|||dd	d
���|j|||dd���tj|�	tj|�tjtjj|��y#tj|�wxYw#tj|�wxYw#tj|�wxYw#tj|�tjtjj��wxYw)NrVrWrXztest.tmprYrZ�	test_dir2r5�subdir2ztest.pyz*.tmp��ignorezsubdir*c�R�g}|D]�}tjj||�}tjj|�r(|j	�ddk(r|j|��jtjj
|�ddvs��|j|���|S)Nr~r5z.py)r+r;r<rar�rc�splitext)rw�namesrerfr;s     r%�_filterz8TestCopyTree.test_copytree_with_exclude.<locals>._filters����C� %�-��!�w�w�|�|�C��6���G�G�M�M�$�/� �J�J�L��,��8��J�J�t�,��W�W�-�-�d�3�B�7�E�B��J�J�t�,�-��Jr')r+r;r<r�r�rCr�r��ignore_patternsr\r�r�r�r[)r�r<r�r_r`�patternsr�s       r%�test_copytree_with_excludez'TestCopyTree.test_copytree_with_exclude�s����w�w�|�|���������,�,�.��:	4��4�<�<�>�=�9�G����,�e�4����,�e�4��H�H�T�'�:�.�/����Z�8�%�@��H�H�T�'�;�/�0����j�9�5�A��H�H�T�'�;��9�:��H�H�T�'�;�	�:�;����h�
�C�U�K����i��C�U�K�
'�!�1�1�'�;�G��������B�����t�G�Z�'@� A�B�� � ���W�j�(A�!B�C�� � ���W�k�(B�!C�D��
�
�g�&�
'�!�1�1�'�9�E��������B�� � ���W�j�(A�!B�C�� � ���W�k�9�(M�!N�O�� � ���W�k�8�(L�!M�N��
�
�g�&�
'�
�������A�� � ���W�k�9�-6�)8�"9�:�� � ���W�k�8�(L�!M�N��
�
�g�&��M�M�'�"��M�M�"�'�'�/�/�'�2�3��I�
�
�g�&���
�
�g�&��0�
�
�g�&���M�M�'�"��M�M�"�'�'�/�/�'�2�3�sY�C#M.�*BL �2M.�B
L:�M.�(AM�M.� L7�7M.�:M�M.�M+�+M.�.A	N7c
�`���tjj}tjj}�j	�}||d�}tj
||��tj
||d��tj
tjj|dd��t
|dddfd�g���fd�}|�j	�d�}tj|||���j|||ddd���|�j	�d�}tjtj|�||���j|||ddd���|�j	�d�}ttj|��d	}�j|tj�tj|||���j|||ddd����j!t#��d
�y)N�sourcerYr5rWrZc����j|��j|t��j|t��j	t|�tt
|���|D]}�j|t��gSr*)rcr��str�listr�r��set)rwr�rf�invokationsr�s   ��r%�_ignorez?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignore>sq������s�#��!�!�#�s�+��!�!�%��.����S��Z��S��Z��9��
1���%�%�d�C�0�
1��Ir'rVrr�	)r+r;r<r�r�r�rCr�r\r��pathlib�Pathr�r�r��DirEntryr�r�)	r�r<r�r'r_r�r`�
src_dir_entryr�s	`       @r%�!test_copytree_arg_types_of_ignorez.TestCopyTree.test_copytree_arg_types_of_ignore0s�����w�w�|�|���������,�,�.���w��)��
����g���
����g�z�*�+�
��������g�z�8�<�=��G�Z��:�>��F���	��t�|�|�~�}�5��������9�����t�G�Z��$.� 0�1�	2��t�|�|�~�}�5��������W�-�w�w�G�����t�G�Z��$.� 0�1�	2��t�|�|�~�}�5���R�Z�Z��0�1�!�4�
����m�R�[�[�9����
�w�w�?�����t�G�Z��$.� 0�1�	2�	
����[�)�1�-r'c	���|j�}tjj|d�}tj|�tjj|d�}|jtj|�tj|d�t|dfd�tjtjj|d�d�t|dfd�tjtjj|d�d�tj|�	�}|jtj|�tj|d�t
j||�|jtj|�jtj|�j�|jtjtjj|d��jtjtjj|d��j�|jtjtjj|d��jtjtjj|d��j�tjj|tjj!|�d
�}|jtj|�jtj|�j�y)Nr�rVi�zpermissive.txtrXzrestrictive.txtrZi�r�r)r�r+r;r<r�r�r�r�r�rCrprr\r�r�r�r�)r�r'r_r`�restrictive_subdir�restrictive_subdir_dsts      r%�!test_copytree_retains_permissionsz.TestCopyTree.test_copytree_retains_permissionsZs3���,�,�.���'�'�,�,�w��1��
������'�'�,�,�w�
�6������
�
�w�/�
����%� ��G�-�.��6�
��������g�'7�8�%�@��G�.�/��7�
��������g�'8�9�5�A�%�-�-�'�:�����	�(�(�*<�=�
���#�U�+������)��������)�1�1�2�7�7�7�3C�3K�3K�L������������g�7G�!H�I�Q�Q��'�'�"�'�'�,�,�w�8H�"I�J�R�R�	T������������g�7H�!I�J�R�R��'�'�"�'�'�,�,�w�8I�"J�K�S�S�	U�!#�����g�.0�g�g�m�m�<N�.O�PQ�.R�"T��������!3�4�<�<��'�'�"8�9�A�A�	Cr'zos.chmodc���|j�}tjj|j�d�}|j	t
j|�|j	t
jtjj|��td�|_	|jt
j�5tj||�ddd�y#1swYyxYw)NrVzka-boom)
r�r+r;r<r�r�r�r[�PermissionErrorrr�rr\)r��
mock_patchr_r`s    r%�test_copytree_winerrorz#TestCopyTree.test_copytree_winerrorus���
�,�,�.���'�'�,�,�t�|�|�~�}�=������
�
�w�/�����
�
�r�w�w���w�'?�@�!0��!;�
��
�
�
�v�|�|�
,�	.��O�O�G�W�-�	.�	.�	.�s�C+�+C4c����������fd�}g��j��tj�j����ttj
j
�d�dd��5}|j�ddd�tj��|���jt��d�y#1swY�=xYw)	Nc�@���jd��j|t��j|t��j|tj
j
�d���j|tj
j
�d��y�Nr�)rcr�r�r�r+r;r<)r�r�rx�flagr�rws  ����r%�custom_cpfunzETestCopyTree.test_copytree_custom_copy_function.<locals>.custom_cpfun�sm����K�K����!�!�!�S�)��!�!�!�S�)����Q������S�%� 8�9����Q������S�%� 8�9r'r�r�r5r6r7��
copy_functionr)r�rpr�r=r+r;r<r0r�r\r�r�)r�r�rUrxr�rws`  @@@r%�"test_copytree_custom_copy_functionz/TestCopyTree.test_copytree_custom_copy_function�s����	:����l�l�n���o�o�$�,�,�.�1��
�"�'�'�,�,�s�E�*�C�'�
B�	�a�
�G�G�I�	�����S��=�����T��A�&�	�	�s�/B<�<C�mkfifo�requires os.mkfifo()�vxworks�%fifo requires special path on VxWorksc�|�tjt�	tjj	td�}tj|�tjj	|d�}	tj
|�	tjtt�|jd�tj td�	�tj td�	�y#t$r}|jd|z�Yd}~��d}~wwxYw#tj$rR}|jd}|jt|�d�|d\}}}|jd|z|�Yd}~��d}~wwxYw#tj td�	�tj td�	�wxYw)
Nr5�mypipe�os.mkfifo(): %sz$shutil.Error should have been raisedrrz`%s` is a named pipeTr�)r+r�rr;r<r�r��skipTestr�r\�TESTFN2�failrr#r�r�r�)r�r5�pipe�er�rwrx�	error_msgs        r%�test_copytree_named_pipez%TestCopyTree.test_copytree_named_pipe�s?��
	�����	7��W�W�\�\�&�(�3�F��H�H�V���7�7�<�<���1�D�
5��	�	�$��
B������0��	�	�@�A��M�M�&��5��M�M�'��6��#�
5��
�
�/�!�3�4�4��
5���<�<�
K�������� � ��V��a�0�&,�Q�i�#��S�)�� � �!7�$�!>�	�J�J��	
K��
�M�M�&��5��M�M�'��6�s[�AF�5C1�D�)F�1	D�:D�F�D�F�F�.AE;�6F�;F�F�8F;c���|j�}tjj|j�d�}t	|dfd�tj
tjj|d��t	|ddfd�g��fd�}t
j|||��|jt��d�y)	NrVrWrXrYrZc�,���j||f�yr*r�)rwrx�copieds  �r%�_copyz6TestCopyTree.test_copytree_special_func.<locals>._copy�s����M�M�3��*�%r'r�rn)
r�r+r;r<rCr�r�r\r�r�)r�r_r`r�r�s    @r%�test_copytree_special_funcz'TestCopyTree.test_copytree_special_func�s�����,�,�.���'�'�,�,�t�|�|�~�}�=���G�Z�(�%�0�
��������g�z�2�3��G�Z��4�e�<���	&�	������>�����V��a�(r'c�V�|j�}tjj|d�}t	|d�tjj|d�}tj
|�||fD]j}tjdtjj|d��tj|tjj|d���ltjj|j�d�}|jttj||�tjj|j�d�}tj||d	�
�tj|�D]*\}}}|jd|�|jd|��,tjj|j�d�}tj||d	��|jdtj|��y)
NrW�abc�dir_a�
IDONTEXIST�broken�validrV�destination2T)�ignore_dangling_symlinks�destination3rm)r�r+r;r<rCr�r�r�rr�r\�walk�assertNotInrr`)	r�r_�
valid_filer�r�r`�root�dirs�filess	         r%�test_copytree_dangling_symlinksz,TestCopyTree.test_copytree_dangling_symlinks�sw���,�,�.���W�W�\�\�'�:�6�
��:�u�%������W�g�.��
������%��	=�A��J�J�|�R�W�W�\�\�!�X�%>�?��J�J�z�2�7�7�<�<��7�#;�<�	=�
�'�'�,�,�t�|�|�~�}�=�����%����'�7�C��'�'�,�,�t�|�|�~�~�>�������4�H�!#����!1�	*��D�$�����X�u�-��M�M�'�5�)�	*�
�'�'�,�,�t�|�|�~�~�>�������4�8��
�
�j�"�*�*�W�"5�6r'c	�
�|j�}tjj|j�d�}tjtjj|d��ttjj|dd�d�5	ddd�tjtjj|d�tjj|d�d��tj||d�	�|jtjjtjj|d���|jdtjtjj|d���tjj|j�d
�}tj||d�	�|jtjjtjj|d���|jdtjtjj|d���y#1swY���xYw)NrV�real_dirrWr4�link_to_dirT��target_is_directoryFrmr�)r�r+r;r<r�r=r�r�r\r�rbrr`r�)r�r_r`s   r%�test_copytree_symlink_dirz&TestCopyTree.test_copytree_symlink_dir�s����,�,�.���'�'�,�,�t�|�|�~�}�=��
��������g�z�2�3�
�"�'�'�,�,�w�
�J�?��
F�	��	�
�
�
�2�7�7�<�<���4��7�7�<�<���7�'+�	-�	�����5�9��������������W�m�(L�M�N��
�
�j�"�*�*�R�W�W�\�\�'�=�-Q�"R�S��'�'�,�,�t�|�|�~�~�>�������4�8���������r�w�w�|�|�G�]�'K�L�M��
�
�j�"�*�*�R�W�W�\�\�'�=�-Q�"R�S�	�	�s�I8�8Jc�@�|j�}|dz}|jtj|d�tj
j
|d�}t|d�tj||�}|jdgt	j|��y)N�destTr�)r�r�r�r�r+r;r<rCr\r�r`)r�r_r`rw�rvs     r%�test_copytree_return_valuez'TestCopyTree.test_copytree_return_value�ss���,�,�.���F�"������
�
�w��5��g�g�l�l�7�E�*���3���
�_�_�W�g�
.�����%��"�*�*�R�.�1r'c���|j�}|jtj|d��tj
j
|dd�}tj
j
|dd�}t	j|�tj
j
|d�}t|d�tj||�}|jdgt	j|��y)NTr��t�pg�
somevendorz1.0�pol)r�r�r�r�r+r;r<�makedirsrCr\r�r`)r��base_dirr_r`rwr�s      r%�test_copytree_subdirectoryz'TestCopyTree.test_copytree_subdirectory�s����<�<�>������
�
�x�t��D��'�'�,�,�x��d�3���'�'�,�,�w��e�<��
���G���g�g�l�l�7�E�*���3���
�_�_�W�g�
.�����%��"�*�*�R�.�1r'N)r�r�r�rbrgrrLr{r�r�r�rM�mock�patchr�r�rNror+rOr�rPr�r�r�r�r�r�rFr'r%rTrT�s��(�&C�2�"�"�C�#�C�>?4�B(.�TC�6�]�]����$�.�%�.�'�$�X�����X�.�0F�G��"�"��X�_�_�S�\�\�Y�.�;�=�7�=�#�H�7�.)��"�"�7�#�7�4�"�"�T�#�T�&2�
2r'rTc��eZdZejd��Zejee	d�xse	jdk(d�ejd���Zejee	d�d�ejd���Z
ejd��Zejee	d	�xreed
�xr	eed�d�d
��Zej"d��Zejej"ej&d����Zd�Zd�Zejd��Zejee	d�d�d��Zejd��Zej"d��Zd�Zd�Zd�Zd�Zejd��Zejee	d�d�d��Z ejd ��Z!ejee	d!�d"�eje"jFd#k(d$�d%���Z$d&�Z%d'�Z&eje'xse(xse)d(�eje*d)�d*���Z+d+�Z,y,)-�TestCopyc���|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t	|d�t	|d�tj
||�tj
||�tj|tjtjz�tj|tj�|jtj|�jtj|�j�tj||�|jtj|�jtj|�j�tj|tj�tj||�|jtj|�jtj|�j�tj|tj�tj||�|jtj|�jtj|�j�tj|tj�tj||�|jtj|�jtj|�j�y)Nr��bar�baz�quux)r�r+r;r<rCr�r�r�rq�S_IRWXGrr�assertNotEqualr�r��copymoder��r�r'rwrxrwrxs      r%�test_copymode_follow_symlinksz&TestCopy.test_copymode_follow_symlinkss���,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���7�7�<�<���0���3����3���
�
�
�3��!�
�
�
�3��!�
����d�l�l�4�<�<�/�0�
����d�l�l�#����B�G�G�C�L�0�0�"�'�'�#�,�2F�2F�G�����S�!���������-�-�r�w�w�s�|�/C�/C�D�	����d�l�l�#�����#�&���������-�-�r�w�w�s�|�/C�/C�D�
����d�l�l�#�����X�&���������-�-�r�w�w�s�|�/C�/C�D�
����d�l�l�#�����(�+���������-�-�r�w�w�s�|�/C�/C�Dr'rjrozrequires os.lchmodc��tjdk(rtjntj}|j	�}tj
j
|d�}tj
j
|d�}tj
j
|d�}tj
j
|d�}t|d�t|d�tj||�tj||�tj|tjtjz�tj|tj�||tjtjz�||tj�tj|�j}tj||d��|j!tj"|�jtj"|�j�|j!tj|�j|�||tj�tj||d��|j!tj|�jtj|�j�||tj�tj||d��|j!tj|�jtj|�j�y)Nror�r�r�r�F��follow_symlinks)r+rfr�rjr�r;r<rCr�r�rqr�rrr�r�r�r�r)r��_lchmodr'rwrxrwrx�old_modes        r%� test_copymode_symlink_to_symlinkz)TestCopy.test_copymode_symlink_to_symlink&s��!�g�g��o�"�(�(�2�9�9���,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���7�7�<�<���0���3����3���
�
�
�3��!�
�
�
�3��!�
����d�l�l�4�<�<�/�0�
����d�l�l�#���$�,�,�t�|�|�3�4���$�,�,�'��7�7�3�<�'�'������(�E�B�������(�+�3�3����(�+�3�3�	5���������-�-�x�8���$�,�,�'�����#�u�=���������-�-�r�w�w�s�|�/C�/C�D���$�,�,�'�����X�u�=���������-�-�r�w�w�s�|�/C�/C�Dr'z requires os.lchmod to be missingc���|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t	|d�t	|d�tj
||�tj
||�t
j||d��y)Nr�r�r�r�Fr�)r�r+r;r<rCr�r�r�r�s      r%�*test_copymode_symlink_to_symlink_wo_lchmodz3TestCopy.test_copymode_symlink_to_symlink_wo_lchmodFs����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���7�7�<�<���0���3����3���
�
�
�3��!�
�
�
�3��!�����(�E�Br'c�2�|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t	|d�tj
|�}tj||j|jdz
f�t	|d�|jtj
|�jtj
|�j�tj||�tj||�ttd�r%tj|t
j�n7tjdk(r$tj|t
j�ttd�r4tt
d	�r$tj |t
j"�tj$|�}ttd�stjdk(rQt'j(||d
��|j|j*tj
|�j*�t'j(||d��tj$|�}tjtj,vr0d
D]+}	|j/t1||	�t1||	�dz��-ttd�stjdk(r&|j3|j*|j*�ttd�r2t|d�r&|j3|j4|j4�t'j(||d��|j7t9tj
|�jtj
|�jz
�dk�y)Nr�r�r��quxgE@rjrorkrlTr�F��st_atime�st_mtimerrug�������?)r�r+r;r<rCr��utimer�r�r�r�rorjrrrfr�rkrlrr��copystatr�r"�assertLessEqualr!r�rur��abs)
r�r'rwrxrwrxry�
src_link_stat�
dst_link_stat�attrs
          r%�test_copystat_symlinkszTestCopy.test_copystat_symlinksVs����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���7�7�<�<���/���3����7�7�3�<��
����x�(�(��(�(�4�/�1�	2��3������B�G�G�C�L�1�1�2�7�7�3�<�3H�3H�I�
�
�
�3��!�
�
�
�3��!��2�x� ��I�I�h����-�
�W�W��_��H�H�X�t�|�|�,��2�z�"�w�t�[�'A��K�K��$�.�.�1�����*�
��2�x� �B�G�G�t�O��O�O�H�h��E����
� 5� 5�r�w�w�s�|�7K�7K�L�����(�E�B�����*�
�
�8�8�r�2�2�2�.�
G���$�$�W�]�D�%A�%,�]�D�%A�A�%E�G�
G��2�x� �B�G�G�t�O����]�2�2�M�4I�4I�J��2�z�"�w�}�j�'I����]�3�3�]�5K�5K�L�����#�u�=�����B�G�G�C�L�1�1�B�G�G�C�L�4I�4I�I�J�� �	!r'�chflags�
EOPNOTSUPP�ENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPc�v�|j�}tjj|d�}tjj|d�}t	|d�t	|d�d�}tj
}	tjtjfD])}||�t_tj||��+|tjtjz�t_|jttj||�|t_y#|t_wxYw)Nr��file2�xxxc�0���t��dd���fd�
}|S)NTr�c�����_��r*)r")r;�flagsr��err�exs   ��r%�_chflags_raiserzlTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser�s�������r'r,)rrrs` @r%�make_chflags_raiserzSTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser�s�����B�@D�
�#�"r')
r�r+r;r<rCr�r"r�r�r�r�r�r )r�r�r�rr	�old_chflagsrs       r%�-test_copystat_handles_harmless_chflags_errorsz6TestCopy.test_copystat_handles_harmless_chflags_errors�s���
����������V�W�-�������V�W�-���5�%� ��5�%� �	#��j�j��	%��'�'����6�
.��0��5��
�����u�-�
.�-�U�-=�-=��
�
�-M�N�B�J����g�v����u�E�$�B�J���B�J�s
�=B"D+�+
D8c����	�
�|j�}tjj|d��
t	�
d�tjj|d�}t	|d�tj�
|�tj�
dd�tj�
dd�tj�
|�|jttj�
��ttj|���|jtj�
d�tj|d��tj|�t	|d�ttjd��	��	fd�}	tj�|t_tj�
|�|j!dtj|���t_d	d
���
fd�
}	tj�|t_
tj�
|��t_
tjj|d��
tjj|d
�}t	�
�
�t	||�tj�
dd�tj|dd�tj"|d�tjj|d�}tjj|d�}t	||�t	||�tj$�
|�tj$||�|jtj|d�d�|jtj|d�d�y#�t_wxYw#�t_
wxYw)Nr�r��user.foo�42zuser.bar�43�EPERMc�*��|dk(r���|||fi|��y)Nr
rF)�fnamer��valr$�
orig_setxattr�os_errors    ��r%�_raise_on_user_fooz3TestCopy.test_copyxattr.<locals>._raise_on_user_foo�s!����z�!����e�T�3�9�&�9r'Tr�c�V��|�k(rttjd���||��S)NzOperation not supportedr�)r r"r�)rr��orig_listxattrrws  ��r%�
_raise_on_srcz.TestCopy.test_copyxattr.<locals>._raise_on_src�s)�����|��e�m�m�-F�G�G�!�%��I�Ir'�the_original�the_original_rozuser.the_valuesfiddlyi$�the_copy�the_copy_ro)r�r+r;r<rCr��
_copyxattr�setxattrr�r_�	listxattr�getxattrrAr r"rrr�r�)r�r'rxrr�srcro�dstrorrrrws       @@@@r%�test_copyxattrzTestCopy.test_copyxattr�s�����,�,�.���g�g�l�l�7�E�*���3����g�g�l�l�7�E�*���3���	���#�s�#�
���C��U�+�
���C��U�+����#�s�#��������S� 1�2�F�2�<�<��;L�4M�N�������C��,����C��,�	.�	�	�	�#���3����5�;�;��0��	:�
	(��K�K�M�,�B�K����c�3�'��M�M�*�b�l�l�3�&7�8�'�B�K�48�	J�	*��\�\�N�(�B�L����c�3�'�)�B�L��g�g�l�l�7�N�3�������W�&7�8���3����5�%� �
���C�)�9�5�
���E�+�Y�7�
�������g�g�l�l�7�J�/�������W�m�4���3����5�%� �����S�!�����u�%�������S�*:�;�Y�G�������U�,<�=�y�I��9(�B�K��*�B�L�s�
AN!�81N1�!
N.�1
N>c�T�|j�}tjj|d�}tjj|d�}t	|d�tj
||�tj|dd�tj|ddd��tjj|d�}tjj|d	�}t	|d�tj
||�tj||d��|jtj|dd��d�|jttj|d�tj||d��|jtj|d�d�y)
Nr�r�ztrusted.foorrFr�r�r�)
r�r+r;r<rCr�rr�rr�r!r�r )r�r'rwrwrxrxs      r%�test_copyxattr_symlinksz TestCopy.test_copyxattr_symlinks�s&���,�,�.���g�g�l�l�7�E�*���7�7�<�<���/���3���
�
�
�3��!�
���C���.�
���H�m�U�E�J��g�g�l�l�7�E�*���7�7�<�<���/���3���
�
�
�3��!����(�H�e�D�������X�}�e�T�V[�\����'�2�;�;��]�C����(�C��?�������S�-�8�%�@r'c��d}|j�}t||fd�tjj	||�}|j�}|||�tjj	||�}||fS)NrWr)r�rCr+r;r<)r��methodrr�r��tmpdir2rs       r%�
_copy_filezTestCopy._copy_file�sg����������F�E�?�E�*������V�U�+���,�,�.���u�g�������W�e�,���u�~�r'c�<�|jtj�\}}|jtj
j
|��|jt	j|�jt	j|�j�yr*)
r*r��copyr�r+r;r�r�r�r�)r�r�rs   r%�	test_copyzTestCopy.test_copys]�����v�{�{�3���u���������u�-�.���������/�/������1G�1G�Hr'c�f�|j�}tjj|d�}tjj|d�}tjj|d�}t	|d�tj
||�t
td�r5tj|tjtjz�tj||d��|jtjj|��|jt!|�t!|��tj"|�tj||d��|j%tjj|��|jtj&|�tj&|��t
td�rM|jtj(|�j*tj(|�j*�yy)Nr�r�r�rjTr�F)r�r+r;r<rCr�rorjr�rqrrr�r,r�rbr�r\rAr�rsrr�)r�r'rwrxrws     r%�test_copy_symlinkszTestCopy.test_copy_symlinks
s^���,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���3���
�
�
�3��!��2�x� ��I�I�h����t�|�|� ;�<����H�c�4�8����������,�-�����3���3��8�
�	�	�#�����H�c�5�9���������s�+�,�������S�)�2�;�;�x�+@�A��2�x� ����R�X�X�h�/�7�7��X�X�c�]�2�2�
4�!r'r�zrequires os.utimec�,�|jtj�\}}|jtj
j
|��t	j|�}t	j|�}|j|j|j�dD]+}|jt||�t||�dz��-ttd�r4t|d�r'|jt|d�t|d��yyy)Nr�rr�ru)
r*r��copy2r�r+r;r�r�r�r�r�r!ro)r�r�r�
file1_stat�
file2_statr�s      r%�
test_copy2zTestCopy.test_copy2#s������v�|�|�4���u���������u�-�.��W�W�U�^�
��W�W�U�^�
�����+�+�Z�-?�-?�@�*�	@�D�� � ���T�!:�!(��T�!:�Q�!>�
@�	@��2�y�!�g�j�*�&E����W�Z��<�$�Z��<�
>�'F�!r'c��|j�}tjj|d�}tjj|d�}tjj|d�}t	|d�tj
||�t
td�r5tj|tjtjz�t
td�r4t
td�r$tj|tj�tj|�}tj|�}tj||d��|j!tjj#|��|j%t'|�t'|��tj(|�tj||d	��|j+tjj#|��|j%tj,|�tj,|��tj|�}tj.tj0vr0d
D]+}|j3t5||�t5||�dz��-t
td�rL|j%|j6|j6�|j9|j6|j6�t
td�r4t
|d�r'|j%|j:|j:�yyy)
Nr�r�r�rjrkrlTr�Fr�rru)r�r+r;r<rCr�rorjr�rqrrrkrlrr�r1r�rbr�r\rAr�rsr�r"r�r!r�r�ru)	r�r'rwrxrwryr�rzr�s	         r%�test_copy2_symlinkszTestCopy.test_copy2_symlinks4s2���,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���3���
�
�
�3��!��2�x� ��I�I�h����t�|�|� ;�<��2�z�"�w�t�[�'A��K�K��$�.�.�1��7�7�3�<������*�
����X�s�D�9����������,�-�����3���3��8�
�	�	�#�����X�s�E�:���������s�+�,�������S�)�2�;�;�x�+@�A��8�8�C�=��
�8�8�r�2�2�2�.�
B���$�$�W�]�D�%A�%,�X�t�%<�q�%@�B�
B��2�x� ����]�2�2�H�4D�4D�E����� 0� 0�(�2B�2B�C��2�z�"�w�}�j�'I����]�3�3�X�5F�5F�G�(J�"r'c��|j�}tjj|d�}tjj|d�}t	|d�tj
|dd�t
j||�|jtj|d�tj|d��tj|�y)Nr�r�r
r)r�r+r;r<rCrr�r1r�r!rA)r�r'rwrxs    r%�test_copy2_xattrzTestCopy.test_copy2_xattrWs����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���3���
���C��U�+����S�#��������C��,����C��,�	.�	�	�	�#�r'c��tjtjfD]�}|j�}|j�}tj
j
|d�}t|d�|||�}|j|tj
j
|d��||tj
j
|d��}|j|tj
j
|d����y)Nr�r�)	r�r,r1r�r+r;r<rCr�)r�rr_r`rwr�s      r%�test_copy_return_valuezTestCopy.test_copy_return_valueds����;�;����-�	?�B��l�l�n�G��l�l�n�G��'�'�,�,�w��.�C��s�E�"��C��!�B����R������g�u�!=�>��C������g�u�5�6�B����R������g�u�!=�>�	?r'c�B�|jtj�yr*)�_test_copy_dirr�r,�r�s r%�
test_copy_dirzTestCopy.test_copy_dirps�����F�K�K�(r'c�B�|jtj�yr*)r<r�r1r=s r%�test_copy2_dirzTestCopy.test_copy2_dirss�����F�L�L�)r'c�~�|j�}tjj|d�}|j�}tjj|d�}t	|d�t
jdk(rt}nt}|j||||�|j||||�|||�y�Nr��does_not_exist/�win32)
r�r+r;r<rCr�rPr��IsADirectoryErrorr�)r��	copy_funcr_�src_filer�rxrs       r%r<zTestCopy._test_copy_dirvs����,�,�.���7�7�<�<���/���|�|�~���g�g�l�l�7�$5�6���8�U�#��<�<�7�"�!�C�#�C����#�y�$��8�	
���#�y�$��4��(�D�!r'c���|j�}tjj|d�}tjj|d�}tjj|d�}tjj|d�}t	|d�tj
||�t
j||d��|jtjj|��|jtj|�tj|��t
j||�|jtjj|��y)Nrwrxrxr�r�Fr�)
r�r+r;r<rCr�r��copyfiler�rbr�rsr�)r�r'rwrxrxr�s      r%�test_copyfile_symlinkszTestCopy.test_copyfile_symlinks�s����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���4���w�w�|�|�G�V�,���3���
�
�
�3�������h��>���������x�0�1�������T�*�B�K�K��,A�B�����c�"����������,�-r'r�zrequires os.linkc�8�tjt�tjj	td�}tjj	td�}	t|dd��5}|j
d�ddd�	tj||�|jtjtj||�t|dd��5}|j|j�d�ddd�tj |�tj"td	�
�y#1swY��xYw#t$r}|jd|z�Yd}~��d}~wwxYw#1swY�pxYw#tj"td	�
�wxYw)NrErFr5r6r7�cheddarz
os.link(): %srZTr�)r+r�rr;r<r=r>r�r�r�r�r�r
rIr�r[rAr�)r�rwrxrUr�s     r%�'test_dont_copy_file_onto_link_to_itselfz0TestCopy.test_dont_copy_file_onto_link_to_itself�s'��	������g�g�l�l�6�8�,���g�g�l�l�6�6�*��	6��c�3��1�
#�Q����	�"�
#�
3�����S�!�
���f�2�2�F�O�O�S�#�N��c�3��1�
6�Q�� � �����9�5�
6��I�I�c�N��M�M�&��5�
#�
#��#�
3��
�
�o��1�2�2��
3��
6�
6��
�M�M�&��5�sf�#E<�1D:�E<�E�">E<� !E0�E<�:E�?E<�	E-�E(�#E<�(E-�-E<�0E9�5E<�<Fc���tjt�tjj	td�}tjj	td�}	t|dd��5}|j
d�ddd�tjd|�|jtjtj||�t|dd��5}|j|j�d�ddd�tj|�tjtd�	�y#1swY��xYw#1swY�FxYw#tjtd�	�wxYw)
NrErFr5r6r7rLrZTr�)r+r�rr;r<r=r>r�r�r�r
rIr�r[rAr�)r�rwrxrUs    r%�*test_dont_copy_file_onto_symlink_to_itselfz3TestCopy.test_dont_copy_file_onto_symlink_to_itself�s���	������g�g�l�l�6�8�,���g�g�l�l�6�6�*��	6��c�3��1�
#�Q����	�"�
#�

�J�J�x��%����f�2�2�F�O�O�S�#�N��c�3��1�
6�Q�� � �����9�5�
6��I�I�c�N��M�M�&��5�
#�
#��
6�
6��
�M�M�&��5�s=�#E�1D9�AE�!E�E�9E�>E�E�
E�E.r�r�r�r�c���	tjt�	|jtjtjtt�|jtjtjtt�tjt�y#t$r}|j	d|z�Yd}~��d}~wwxYw#tjt�wxYw)Nr�)r+r�rr�r�r�r��SpecialFileErrorrIr��__file__rA)r�r�s  r%�test_copyfile_named_pipez!TestCopy.test_copyfile_named_pipe�s���	1��I�I�f��	����f�5�5� &�����
B����f�5�5� &����6�
C�
�I�I�f����	1��M�M�+�a�/�0�0��	1��
�I�I�f��s#�B&�A0C�&	C
�/C�C
�C+c��|j�}|j�}tjj|d�}tjj|d�}t	|d�tj||�}|jtjj|��|jt|�t|��y)Nr�r�)r�r+r;r<rCr�rIr�r�r�r\)r�r_r`�dst_filerGr�s      r%�test_copyfile_return_valuez#TestCopy.test_copyfile_return_value�s����,�,�.���,�,�.���7�7�<�<���/���7�7�<�<���/���8�U�#�
�_�_�X�x�
0����������r�*�+�����8�,�i��.A�Br'c�J�|j�}tjj|d�}t	|d�|jttj||�|jttj||�|jt|�d�yr�)r�r+r;r<rCr�r
r�rIrr�r\)r�r_rGs   r%�test_copyfile_same_filez TestCopy.test_copyfile_same_file�sr���,�,�.���7�7�<�<���/���8�U�#����-����(�H�M����%����(�H�E�����8�,�e�4r'zMOn MACOS, Solaris and Windows the errors are not confusing (though different)zNot valid on AIX, see gh-92670c��|j�}tjj|d�}tjj|d�}t	|d�|jttj||�y)Nr�rC)	r�r+r;r<rCr�r�r�rI)r�r_rGrxs    r%�test_copyfile_nonexistent_dirz&TestCopy.test_copyfile_nonexistent_dir�s[���,�,�.���7�7�<�<���/���g�g�l�l�7�$5�6���8�U�#����+�V�_�_�h��Lr'c���|j�}tjj|d�}|j�}tjj|d�}t	|d�t
jdk(rt}nt}|j|tj||�|j|tj||�|j|tj||�yrB)r�r+r;r<rCr�rPr�rEr�r�rI)r�r_rGr�rxrs      r%�test_copyfile_copy_dirzTestCopy.test_copyfile_copy_dir�s����,�,�.���7�7�<�<���/���|�|�~���g�g�l�l�7�$5�6���8�U�#��<�<�7�"�!�C�#�C����#�v�����=����#�v����'�B����#�v����g�>r'N)-r�r�r�rrLr�rMrNror+rfr�rOr�r�r"r�skip_unless_xattrr$�skip_unless_dac_overrider&r*r-r/r4r6r8r:r>r@r<rJrMrOr�rPrSrVrX�MACOS�SOLARISr�r�rZr\rFr'r%r�r�s���"�"�E�#�E�<�X�����X�.�A�"�'�'�T�/�CW�X��"�"�E�#�Y�E�<�X�_�_�W�R��*�,N�O��"�"�
C�#�P�
C��"�"�(!�#�(!�T�X�����Y�/�3� ���5�3� ��	�2�D�F�%�	F�%�6� � �=J�!�=J�~�"�"�� � ��'�'�A�(�!�#�A�.�I��"�"�4�#�4�0�X�����W�-�/B�C�>�D�>� �"�"� H�#� H�D� � �
�!�
�
?�)�*�"�$�"�"�.�#�.� �X�����V�,�.@�A�6�B�6�&�"�"�6�#�6�(�X�����X�.�0F�G��X�_�_�S�\�\�Y�.�;�=��=�H��	C�
5��X�_�_�U�0�g�0��3B�C��X�_�_�S�:�;�M�<�	C�
M�?r'r�c��eZdZej�d��Zd�Zd%d�Zej�eje
jd�d�d���Zej�d��Z
ej�eje
jd�d	�d
���Zej�eje
jd�d�d
���Zd�Zej�d��Zej�ejed�d���Zd�Zd�Zd�Zd�Zej�d��Zd�Zd�Zej�d��Zd�Zd�Zd�Zd�Zej�d��Z ejB�d��Z"ejF�ejHe%xre&�d �d!���Z'ej�d"��Z(d#�Z)y$)&�TestArchivesc��|jd�\}}|j�}tj|�tjj|�}tjj
tjj|�d�}tj|�5t5tjj|�}t|d|d�}ddd�ddd�|jdz�|jtjj|��|jt!j"|��t!j$|d�5}|j'|j)�gd��ddd�tj|�5t5t|d|d�}ddd�ddd�|j||d	z�|jtjj|��|jt!j"|��t!j$|d
�5}|j'|j)�gd��ddd�y#1swY���xYw#1swY���xYw#1swY��xYw#1swY��xYw#1swY��xYw#1swYyxYw)Nr��archive�gztar�.�.tar.gzzr:gz)rfz./subz./sub2z./file1z./file2z./sub/file3�tar�.tarrZ)�
_create_filesr�r+r�r;r[r<�basenamer�
change_cwd�no_chdir�abspathrr�r�r]�tarfile�
is_tarfiler=�assertCountEqual�getnames)	r��root_dirr�r)�work_dir�
rel_base_name�	base_name�tarball�tfs	         r%�test_make_tarballzTestArchives.test_make_tarball
s;��"�/�/��3���(��,�,�.��
������7�7�?�?�7�+�������R�W�W�%5�%5�g�%>�	�J�
�
�
!�
!�(�
+�	J�X�	J������
�6�I�"�=�'�8�S�I�G�	J�	J�
	
����)�i�"7�8���������w�/�0�����*�*�7�3�4�
�\�\�'�6�
*�	I�b��!�!�"�+�+�-�#H�
I�	I��
!�
!�(�
+�	H�X�	H�"�=�%��3�G�G�	H�	H�����)�f�"4�5���������w�/�0�����*�*�7�3�4�
�\�\�'�3�
'�	H�2��!�!�"�+�+�-�#G�
H�	H�	H�'	J�	J��	J�	J��	I�	I��	H�	H��	H�	H��
	H�	H�s`�+J	�2.I<� J	�-#J�-J/�4J#�J/�#J;�<J	�J	�	J�J �#J,	�(J/�/J8�;Kc��tj|�5}|j�}|j�t	|�cddd�S#1swYyxYwr*)ror=rr�sortr:)r�r;rhr�s    r%�_tarinfozTestArchives._tarinfo1s@��
�\�\�$�
�	 �3��L�L�N�E��J�J�L���<�	 �	 �	 �s�+A�Ac���|j�}tjj||�}tj|d��t|dfd�t|dfd�tjtjj|d��t|ddfd�tjtjj|d��|rt|d	fd�||fS)
NT)�exist_okr�rrri�file3�sub2�outer)r�r+r;r<r�rCr�)r�r�rs�dists    r%rjzTestArchives._create_files7s����<�<�>���w�w�|�|�H�h�/��
���D�4�(��D�'�?�E�*��D�'�?�E�*�
��������d�E�*�+��D�%��)�5�1�
��������d�F�+�,����'�*�E�2���!�!r'rhzNeed the tar command to runc��|j�\}}tjj|j	�d�}t
5t
|d||�}ddd�|j|dz�|jtjj|��tjj|d�}ddd|g}tjdk(rGddl}t|j�djd	�d�d
k\r|jdd�t!j"||t j$�
�|jtjj|��|j|j'|�|j'|��t
5t
|d||�}ddd�|j||dz�|jtjj|��t
5t
|d||d��}ddd�|j||dz�|jtjj|��y#1swY��xYw#1swY��xYw#1swY�fxYw)Nrdrergzarchive2.tarrhz-cfrrrf�rz--no-mac-metadata��cwd�stdoutriT��dry_run)rjr+r;r<r�rmrr�r�r]r�rPr��mac_verr��insertr��
check_call�DEVNULLr|)r�rsr�rvrw�tarball2�tar_cmdrPs        r%�test_tarfile_vs_tarz TestArchives.test_tarfile_vs_tarEs��"�/�/�1���(��G�G�L�L������;�	�
�	K�"�9�g�x��J�G�	K�	
����)�i�"7�8���������w�/�0��7�7�<�<��.�9���%���:���<�<�8�#�
��8�#�#�%�a�(�.�.�s�3�A�6�7�2�=����q�"5�6����g�8�%/�%7�%7�	9�	
��������x�0�1�������w�/����x�1H�I��	I�"�9�e�X�x�H�G�	I�����)�f�"4�5���������w�/�0��	1�"�9�e�X�x�+/�1�G�	1�	
����)�f�"4�5���������w�/�0�O	K�	K��:	I�	I��	1�	1�s$�I)�,I6�J�)I3�6I?�Jc���|j�\}}|j�}tj|�tjj|�}tjj
tjj|�d�}tj|�5t5tjj|�}t|d|�}ddd�ddd�|jdz�|jtjj|��|jt!j"|��t!j$|�5}|j'|j)�gd��ddd�tj|�5t5tjj|�}t|d||�}ddd�ddd�|j||dz�|jtjj|��|jt!j"|��t!j$|�5}|j'|j)�gd��ddd�y#1swY���xYw#1swY���xYw#1swY��&xYw#1swY��xYw#1swY��xYw#1swYyxYw)Nrd�zip�.zip)�dist/�	dist/sub/�
dist/sub2/�
dist/file1�
dist/file2�dist/sub/file3r�)r�r�r�r�r�r�)rjr�r+r�r;r[r<rkrrlrmrnrr�r�r]�zipfile�
is_zipfile�ZipFilerq�namelist)	r�rsr�r)rtrurvre�zfs	         r%�test_make_zipfilezTestArchives.test_make_zipfilets9��"�/�/�1���(��,�,�.��
������7�7�?�?�7�+�������R�W�W�%5�%5�g�%>�	�J�
�
�
!�
!�(�
+�	?�X�	?������
�6�I��}�e�X�>�C�	?�	?�	
����i�&�0�1���������s�+�,�����*�*�3�/�0�
�_�_�S�
!�	�R��!�!�"�+�+�-��
�	��
!�
!�(�
+�	I�X�	I������
�6�I��}�e�X�x�H�C�	I�	I�	
����i�&�0�1���������s�+�,�����*�*�3�/�0�
�_�_�S�
!�	D�R��!�!�"�+�+�-�C�
D�	D�	D�)	?�	?��	?�	?��	�	��	I�	I��	I�	I��	D�	D�s`�*J$�1-J�J$�*#J1�*K
�1.J>�K
�+#K�J!	�J$�$J.�1J;�>K	�K
�
K�Kr�zNeed the zip command to runc��|j�\}}tjj|j	�d�}t
5t
|d||�}ddd�|j|dz�|jtjj|��tjj|d�}dddd|g}tj||tj��|jtjj|��tj|�5}|j�}ddd�tj|�5}|j�}	ddd�|jt!�t!	��y#1swY��IxYw#1swY�ixYw#1swY�GxYw)Nrdr�r�zarchive2.zipz-qz-rr�)rjr+r;r<r�rmrr�r�r]r�r�r�r�r�r�r_)
r�rsr�rvrd�archive2�zip_cmdr�r��names2s
          r%�test_zipfile_vs_zipz TestArchives.test_zipfile_vs_zip�s]��"�/�/�1���(��G�G�L�L������;�	�
�	I�"�9�e�X�x�H�G�	I�	
����)�f�"4�5���������w�/�0��7�7�<�<��.�9���$��n�h�?�����g�8�%/�%7�%7�	9�	
��������x�0�1�
�_�_�W�
%�	"���K�K�M�E�	"�
�_�_�X�
&�	#�"��[�[�]�F�	#��������v��7�'	I�	I��	"�	"��	#�	#�s$�F�2F+� F7�F(�+F4�7G�unzipzNeed the unzip command to runc���|j�\}}tjj|j	�d�}t
5t
|d||�}ddd�|j|dz�|jtjj|��dd|g}tj|�5	tj|tj��ddd�y#1swY��xYw#tj$r^}|j j#d��}d	|vr|j%d
�d}|j'|j)||��Yd}~��d}~wwxYw#1swYyxYw)Nrdr�r�r�z-t)�stderr�replace)r�zunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})rjr+r;r<r�rmrr�r�r]rrlr��check_output�STDOUT�CalledProcessError�output�decoder�r��format)	r�rsr�rvrdr�r�details�msgs	         r%�test_unzip_zipfilezTestArchives.test_unzip_zipfile�s@��"�/�/�1���(��G�G�L�L������;�	�
�	I�"�9�e�X�x�H�G�	I�	
����)�f�"4�5���������w�/�0��D�'�*��
�
!�
!�(�
+�	4�
4��'�'��
�8I�8I�J�	4�	4�	I�	I���0�0�
4��*�*�+�+�9�+�=��+�w�6��M�M�"<�=�2���	�	�#�*�*�S�'�2�3�3��
4��	4�	4�s=�C,�<E,�>%C8�,C5�8E)�AE$�E,�$E)�)E,�,E5c��|j�}tjj|d�}|j	t
t|d�y)Nrdr)r�r+r;r<r��
ValueErrorr)r�r�rvs   r%�test_make_archivezTestArchives.test_make_archive�s5��������G�G�L�L���3�	����*�l�I�u�Er'c���tr1tjd�d}tjd�d}ndx}}|j�\}}tjj|j�d�}t|d||||��}|jtjj|��t|d||�}|jtjj|��t|d||||��}|jtjj|��t|d||dd��}|jtjj|��y)	Nrr�rdr���owner�grouprh�	kjhkjhkjg�oihohoh)
�UID_GID_SUPPORT�grp�getgrgid�pwd�getpwuidrjr+r;r<r�rr�r])r�r�r�rsr�rvres       r%�test_make_archive_owner_groupz*TestArchives.test_make_archive_owner_group�s����L�L��O�A�&�E��L�L��O�A�&�E�"�"�E�E�!�/�/�1���(��G�G�L�L������;�	��9�e�X�x�u�!&�(����������s�+�,��9�e�X�x�@����������s�+�,��9�e�X�x�!&�e�5����������s�+�,��9�e�X�x�!,�I�?����������s�+�,r'�Requires grp and pwd supportc
��|j�\}}tjj|j	�d�}tjd�d}tjd�d}tj|�5t5t|d|d||��}ddd�ddd�|jtjj��tj |�}	|j#�D]:}|j%|j&d�|j%|j(d��<	|j+�y#1swY��xYw#1swY��xYw#|j+�wxYw)Nrdrrer�r�)rjr+r;r<r�r�r�r�r�rrlrmrr�r]ror=�
getmembersr��uid�gidr0)	r�rsr�rvr�r��archive_namerd�members	         r%�test_tarfile_root_ownerz$TestArchives.test_tarfile_root_owner�s6��"�/�/�1���(��G�G�L�L������;�	����Q���"�����Q���"��
�
!�
!�(�
+�	B�X�	B�'�	�7�H�f�.3�5�B�L�	B�	B�
	
��������|�4�5��,�,�|�,��	�!�,�,�.�
0��� � ����Q�/�� � ����Q�/�
0�
�M�M�O�	B�	B��	B�	B��
�M�M�O�s1�E�E� E�4A
E+�E	�E�E(�+E=c�z���tj����fd�}td|gd�	t5�j	t
�5t
dd�ddd�ddd��jtj���td�y#1swY�AxYw#1swY�ExYw#td�wxYw)Nc����jd|��j|d��jtj���t	���Nrsrk)r�r�r+rr�RuntimeError)rvr��kw�current_dirr�s   ��r%�archiverz<TestArchives.test_make_archive_cwd_default.<locals>.archiversA������Z��,����Y�
�3����R�Y�Y�[�+�6��.� r'r�xxx filerk)	r+rrrrmr�r�rr�r)r�r�r�s` @r%�test_make_archive_cwd_defaultz*TestArchives.test_make_archive_cwd_defaults�����i�i�k��	!�	 ��x��Z�@�	-��
4��&�&�|�4�4� ��U�3�4�
4�
���R�Y�Y�[�+�6�%�e�,�	4�4��
4�
4��

&�e�,�s:�B-�B!�
B�B!�,B-�B	�B!�!B*�&B-�-
B:c�������tj���j�����fd�}g���fd�}td|gd�	t	j
td|�5��j
t�5tdd���ddd�ddd��jtj����j���g�td�y#1swY�UxYw#1swY�YxYw#td�wxYw)Nc�����jd|��j|tjj	�d���jtj
���t
��r�)r�r�r+r;r<rrr��rvr�r�r�rsr�s   ���r%r�z4TestArchives.test_make_archive_cwd.<locals>.archiversP������Z��,����Y������[�*�(M�N����R�Y�Y�[�(�3��.� r'c�8���j|��|�yr*r�)r;r��
orig_chdirs ��r%�_chdirz2TestArchives.test_make_archive_cwd.<locals>._chdirs����K�K����t�r'rr��chdirrk�rs)r+rrr�rrr2r�r�rr�r)r�r�r�r�r�r�rss`  @@@@r%�test_make_archive_cwdz"TestArchives.test_make_archive_cwds�����i�i�k���<�<�>��	!�
��	�	 ��x��Z�@�	-��"�"�2�w��7�
G�:��&�&�|�4�G� ��U�X�F�G�
G�
���R�Y�Y�[�+�6����T�H�k�#:�;�%�e�,�G�G��
G�
G��
&�e�,�s=�C4�#C(�9C�C(�AC4�C%	�!C(�(C1�-C4�4
Dc�����tj���j�����fd�}d|_t	d|gd�	t
5�j
t�5tdd���ddd�ddd��jtj���td�y#1swY�AxYw#1swY�ExYw#td�wxYw)Nc����j|d��j|d���jtj���t��)Nrkrs)r�r+rrr�r�s   ���r%r�zFTestArchives.test_make_archive_cwd_supports_root_dir.<locals>.archiver0sE������Y�
�3����R�
�^�X�6����R�Y�Y�[�+�6��.� r'Trr�rkr�)r+rrr��supports_root_dirrrmr�r�rr�r)r�r�r�rss` @@r%�'test_make_archive_cwd_supports_root_dirz4TestArchives.test_make_archive_cwd_supports_root_dir-s�����i�i�k���<�<�>��	!�
&*��"���x��Z�@�	-��
G��&�&�|�4�G� ��U�X�F�G�
G�
���R�Y�Y�[�+�6�%�e�,�	G�G��
G�
G��

&�e�,�s<�C�B<�!B0�0B<�8,C�0B9	�5B<�<C�C�
Cc�B�|j�}tj|�5t5|j	tdd�d�|j
tjjd��ddd�ddd�y#1swY�xYw#1swYyxYw)N�testrhztest.tar�
r�rrlrmr�rr�r+r;r]�r�rss  r%�test_make_tarfile_in_curdirz(TestArchives.test_make_tarfile_in_curdir@sw���<�<�>��
�
!�
!�(�
+�	8�X�	8����\�&�%�8�*�E��O�O�B�G�G�N�N�:�6�7�	8�	8�	8�	8��	8�	8��#�B�AB	�8B�	B	�B�Bc�B�|j�}tj|�5t5|j	tdd�d�|j
tjjd��ddd�ddd�y#1swY�xYw#1swYyxYw)Nr�r�ztest.zipr�r�s  r%�test_make_zipfile_in_curdirz(TestArchives.test_make_zipfile_in_curdirGsy���<�<�>��
�
!�
!�(�
+�	8�X�	8����\�&�%�8�*�E��O�O�B�G�G�N�N�:�6�7�	8�	8�	8�	8��	8�	8�r�c��|jttdd�|jttdd�d�|jttdd�ddg�tdd�dgd�t�D��cgc]\}}|��	}}}|j	d|�td�t�D��cgc]\}}|��	}}}|j
d|�ycc}}wcc}}w)	Nrrc��tSr*��xrFr'r%�<lambda>z;TestArchives.test_register_archive_format.<locals>.<lambda>R���Q�r'c��tSr*r�rFr'r%r�z;TestArchives.test_register_archive_format.<locals>.<lambda>Tr�r')rrn)rrnrc��tSr*r�rFr'r%r�z;TestArchives.test_register_archive_format.<locals>.<lambda>Ws��q�r'r�)r��	TypeErrorrrrrr�)r�rf�params�formatss    r%�test_register_archive_formatz)TestArchives.test_register_archive_formatOs������)�%<�e�Q�G����)�%<�e�Y��	����)�%<�e�Y�!�9�-�	/�	 ��y�6�(�J�G�,?�,A�B�L�D�&�4�B��B��
�
�e�W�%�!�%�(�,?�,A�B�L�D�&�4�B��B������(��C��Cs�8C�1Cc	��|jtjt�d��dD�]�}|j	|��5|j�}tjj|d�}|jt�5}ttd||��ddd�|jjjtj�|j|jj |�|j#tjj%t�d���t'j(|��\}}t
j*|�|jt,�5}ttd||��ddd�|j|jjtj.�|j|jj |�|j#tjj%t�d���ddd����y#1swY���xYw#1swY��xYw#1swY��$xYw)Nri�FTr��nonexistingrhr��r�rrtr�subTestr�r+r;r<r�r�rr�r�r"�ENOENTr�r�r�rpr@r0r��ENOTDIR�r�r�r'�nonexisting_filer��tmp_fd�tmp_files       r%�test_make_tarfile_rootdir_nodirz,TestArchives.test_make_tarfile_rootdir_nodir_s������	�(�(�V�H�D�/�:�$�	B�G����g��.�
B��,�,�.��#%�7�7�<�<���#G� ��&�&�'8�9�S�R� ���0@�'�R�S�� � ����!3�!3�U�\�\�B�� � ����!6�!6�8H�I�� � ������6�(�$��!@�A�#+�#3�#3��#@� ������� ��&�&�'9�:�K�b� ����'�J�K�� � ����!3�!3�U�]�]�C�� � ����!6�!6��A�� � ������6�(�$��!@�A�
B�
B�	B�S�S��K�K��
B�
B��?�AI�H+�CI�4H8�BI�+H5�0I�8I�=I�I	c	��|jtjt�d��dD�]�}|j	|��5|j�}tjj|d�}|jt�5}ttd||��ddd�|jjjtj�|j|jj |�|j#tjj%t�d���t'j(|��\}}t
j*|�|jt,�5}ttd||��ddd�|j|jjtj.�|j|jj |�|j#tjj%t�d���ddd����y#1swY���xYw#1swY��xYw#1swY��$xYw)Nr�r�r�r�r�r�r�r�s       r%�test_make_zipfile_rootdir_nodirz,TestArchives.test_make_zipfile_rootdir_nodirts���	
���	�(�(�V�H�D�/�:�$�	B�G����g��.�
B��,�,�.��#%�7�7�<�<���#G� ��&�&�'8�9�S�R� ���0@�'�R�S�� � ����!3�!3�U�\�\�B�� � ����!6�!6�8H�I�� � ������6�(�$��!@�A�#+�#3�#3��#@� ������� ��&�&�'9�:�K�b� ����'�J�K�� � ����!3�!3�U�]�]�C�� � ����!6�!6��A�� � ������6�(�$��!@�A�
B�
B�	B�S�S��K�K��
B�
B�r�c��|j|d�fi|��|j|tjfi|��|j|tfi|��y)Nc��|Sr*rF�r;s r%r�z3TestArchives.check_unpack_archive.<locals>.<lambda>�s���r')�#check_unpack_archive_with_converterr�r�r)r�r�r$s   r%�check_unpack_archivez!TestArchives.check_unpack_archive�sX��0��0�0��%�	1�)/�	1�0��0�0��G�L�L�	,�$*�	,�0��0�0���L�V�Lr'c��|j�\}}t|�}|jd�tjj|j
�d�}t||||�}|j
�}	t||�||	�fi|��|jt|	�|�|j
�}
t||�||
�fd|i|��|jt|
�|�|jtj�5t|t�fi|��ddd�|jt�5t|t�fddi|��ddd�y#1swY�@xYw#1swYyxYw)Nr�rdr�r)rjrdrAr+r;r<r�rrr�r�r��	ReadErrorrr�)r�r��	converterr$rsr��expectedrvr�r)�tmpdir3s           r%rz0TestArchives.check_unpack_archive_with_converter�sV��!�/�/�1���(��H�%������ ��G�G�L�L������;�	��	�6�8�X�F���,�,�.���y��*�I�g�,>�I�&�I�����'�*�H�5��,�,�.���y��*�I�g�,>�	!�v�	!��	!�����'�*�H�5�
�
�
�v�/�/�
0�	8��9�V�,�7��7�	8�
�
�
�z�
*�	F��9�V�,�E�U�E�f�E�	F�	F�	8�	8��	F�	F�s�E+�	E7�+E4�7Fc���|j|d��|j|d��tjdtf�5|j|�ddd�y#1swYyxYw)N�
fully_trusted��filter�datazPython 3.14)rr�check_warnings�DeprecationWarning)r�r�s  r%�check_unpack_tarballz!TestArchives.check_unpack_tarball�sb���!�!�&��!�A��!�!�&��!�8�
�
+�
+�� 2�3�5�	.��%�%�f�-�	.�	.�	.�s�A�A&c�&�|jd�y)Nrh�rr=s r%�test_unpack_archive_tarz$TestArchives.test_unpack_archive_tar�s���!�!�%�(r'c�&�|jd�y)Nrerr=s r%�test_unpack_archive_gztarz&TestArchives.test_unpack_archive_gztar�����!�!�'�*r'c�&�|jd�y)N�bztarrr=s r%�test_unpack_archive_bztarz&TestArchives.test_unpack_archive_bztar�rr'z(AIX MAXDATA must be 0x20000000 or largerc�&�|jd�y)N�xztarrr=s r%�test_unpack_archive_xztarz&TestArchives.test_unpack_archive_xztar�s��	
�!�!�'�*r'c��|jd�|jt�5|jdd��ddd�y#1swYyxYw)Nr�rr)rr�r�r=s r%�test_unpack_archive_zipz$TestArchives.test_unpack_archive_zip�sF���!�!�%�(�
�
�
�y�
)�	<��%�%�e�F�%�;�	<�	<�	<�s�A�A
c���t�}�fd�}tdddg|dg�tdd��jttddg|�td�tddg|��j
ddgd	ft���jddgd	ft��td��jt�|�y)
Nc�r���j|d��j|d��j|d�y)Nr�	stuff.boo�xx)r�)r��extract_dir�extrar�s   �r%�_booz/TestArchives.test_unpack_registry.<locals>._boo�s3������U�A�&����X�{�3����[�$�/r'�Booz.booz.b2)r'rr$r%�Boo2r�)	rr	rr�r
rrr�r�)r�r�r(s`  r%�test_unpack_registryz!TestArchives.test_unpack_registry�s����$�&��	0�
	�u�v�u�o�t�l�^�L��{�D�)�	
���-�)?��!�(�D�	*�	!��'��v��x��6��
�
�v��x��,�.@�.B�C����%�&��2�.�0B�0D�E�	!��(����+�-�w�7r'N)r�)*r�r�r�r�
requires_zlibryr|rjrMrNr��whichr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr�requires_bz2r�
requires_lzmarOr�r�rr!r+rFr'r%rbrb	s����W����!H��!H�F �"��W�����X�������e�,�6�8�*1�8��*1�X�W����"D��"D�H�W�����X�������e�,�6�8�8�8��8�0�W�����X�������g�.�8�:�4�:��4�,F�
�W����-��-�6�W�����X����*H�I��J���*-�"-�.-�&8��W����8��8�)� B�*�W����B��B�.M�F�0.�)��W����+��+��W����+��+��W�����X�_�_�S�-���-�/Y�Z�+�[��+��W����<��<�
8r'rbc��eZdZejeed�d�d��Zejed�ejee	d�d�d���Z
y)	�TestMisc�
disk_usagez)disk_usage not available on this platformc�0�tjtjj	t
��}dD]"}|j
t||�t��$|j|jd�|j|jd�|j|jd�|j|j|j�|j|j|j�tjt
�y)N)rG�used�freer)r�r2r+r;r[rRr�r!r��
assertGreaterrGr4�assertGreaterEqualr5)r��usager�s   r%�test_disk_usagezTestMisc.test_disk_usage�s����!�!�"�'�'�/�/�(�";�<��-�	=�D��!�!�'�%��"6��<�	=����5�;�;��*����5�:�:�q�)�����
�
�A�.�������U�Z�Z�8����5�;�;��
�
�3�	���(�#r'r��chownzrequires os.chownc�^����j�}tj|���t�d��j	t
�5t
j��ddd��j	t�5t
j�d��ddd��j	t�5t
j�d��ddd��j	t�5t
j�d�ddd��j	t�5t
j�d�ddd�tj�}tj�}d��fd	�	}t
j�||�|�||�t
j�|�|�|�t
j�|��|�|�t
j�|��|�|�
�t
j|||�||||�t
j||�|||�t
j||��|||�t
j||��|||�
�	tj|�d}tj |�d}t
j�||�|�||�t
j|||�||||�y#1swY���xYw#1swY��YxYw#1swY��1xYw#1swY��
xYw#1swY���xYw#t"$rYywxYw)
Nr�ztesting chown functionznon-existing username)�userznon-existing groupname)r��spamg��Q�	@c���tj��}|��j||j�|��j||j�yyr*)r+r�r��st_uid�st_gid)r;r�r��sr�r�s    ��r%�check_chownz(TestMisc.test_chown.<locals>.check_chown
sH�������!�A���� � ��a�h�h�/���� � ��a�h�h�/�r')r�r)NN)r�rpr�rCr�r�r�r:�LookupErrorr�r+�getuid�getgidr�r�r�r��KeyError)r�r[r�r�rBr<r�r�s`      @r%�
test_chownzTestMisc.test_chown�s�����,�,�.���?�?�w�/���8�5�6�
�
�
�z�
*�	#��L�L��"�	#��
�
�{�
+�	A��L�L��(?�@�	A��
�
�{�
+�	C��L�L��)A�B�	C��
�
�y�
)�	,��L�L��7�+�	,��
�
�y�
)�	)��L�L��4�(�	)��i�i�k���i�i�k��	0�	���X�s�C�(��H�c�3�'����X�s�#��H�c�"����X�C�(��H�c�"����X�S�)��H�#�&����W�c�3�'��G�S�#�&����W�c�"��G�S�!����W�3�'��G�S�!����W�C�(��G��%�
	+��<�<��$�Q�'�D��L�L��%�a�(�E�

�L�L��4��/���#�s�+��L�L��$��.����c�*�k	#�	#��	A�	A��	C�	C��	,�	,��	)�	)��D�	��	�sN�
K�=K,�2K9�'L�L�,0L �K)�,K6�9L�L�L� 	L,�+L,N)r�r�r�rMrNror�r9r�r+rGrFr'r%r1r1�st���X������6�D�F�$�F�$��X����*H�I��X�����W�-�/B�C�:+�D�J�:+r'r1c���eZdZd�Zd�Zd�Zd�Zd�Zeje
jdk7d�d��Zeje
jdk(d	�d
��Z
eje
jdk(d	�d��Zeje
jdk(d	�d��Zej"d
��Zd�Zd�Zeje
jdk(d�d��Zd�Zd�Zd�Zd�Zd�Zd�Zeje
jdk(d�d��Zeje
jdk(d�d��Zeje
jdk(d�d��Zeje
jdk(d�d��Zeje
jdk(d�d��Z eje
jdk(d�d��Z!y) �	TestWhichc��|jd��|_tj|jdd��|_tj|jjtj�|j|jj�t
jj|jj�\|_|_|j|_t
j"|_d|_y)N�Tmp)r�z.Exe�rlr��suffixz.EXE)r��temp_dirrprq�	temp_filer+r�rfr��S_IXUSRr�r0r;r�rl�file�env_path�curdir�extr=s r%�setUpzTestWhich.setUp5s������E��2��
�"�4�4����<A�<B�D���	������$�$�d�l�l�3�������,�,�-� �g�g�m�m�D�N�N�,?�,?�@����$�)�����
��i�i�����r'c�H�	t|t�r|j�S|Sr*)r9r�r��r�rAs  r%�to_text_typezTestWhich.to_text_typeCs$��	��a����8�8�:���r'c��tj|j|j��}|j	||j
j�y�Nr)r�r-rQrlr�rOrf�r�r�s  r%�
test_basiczTestWhich.test_basicKs4��
�\�\�$�)�)�$�(�(�
3������T�^�^�0�0�1r'c��tj|jj|j��}|j||jj�yrZ)r�r-rOrfrNr�r[s  r%�test_absolute_cmdzTestWhich.test_absolute_cmdPs<���\�\�$�.�.�-�-�D�M�M�
B������T�^�^�0�0�1r'c�&�tjj|j�\}}tjj	||j
�}t
j|��5tj||j��}|j||�ddd�t
j|j��5tj||��}|j|�ddd�y#1swY�[xYw#1swYyxYwrZ)
r+r;r�rlr<rQrrlr�r-rNr��assertIsNone)r�r��tail_dir�relpathr�s     r%�test_relative_cmdzTestWhich.test_relative_cmdVs��� �W�W�]�]�4�8�8�4���(��'�'�,�,�x����3��
�
!�
!�x�
0�	*����g�D�M�M�:�B����R��)�	*��
!�
!�t�x�x�
0�	"����g�H�5�B����b�!�	"�	"�		*�	*��	"�	"�s�-4C;�	)D�;D�DrDztest is for non win32c�$�tjj|j�}t	j
|j��5t
j|j|��}|j|�ddd�y#1swYyxYwrZ)
r+r;r[rlrrlr�r-rQr`�r�r�r�s   r%�test_cwd_non_win32zTestWhich.test_cwd_non_win32csc���7�7�?�?�4�8�8�,��
�
!�
!�t�x�x�
0�	"����d�i�i�h�7�B����b�!�	"�	"�	"�s�
3B�Bztest is for win32c	���tjj|j�}t	j
|j��5tjjdd��5tj|j|��}|j|tjj|j|j��ddd�tjjdd��5tj|j|��}|j|�ddd�ddd�y#1swY�nxYw#1swY�xYw#1swYyxYw)Nr�shutil._win_path_needs_curdirT��return_valueF)r+r;r[rlrrlrMr�r�r�r-rQr�r<rSr`res   r%�test_cwd_win32zTestWhich.test_cwd_win32ms���7�7�?�?�4�8�8�,��
�
!�
!�t�x�x�
0�	&����$�$�%D�SW�$�X�
K��\�\�$�)�)�(�;��� � ��R�W�W�\�\�$�+�+�t�y�y�%I�J�
K����$�$�%D�SX�$�Y�
&��\�\�$�)�)�(�;���!�!�"�%�
&�	&�	&�
K�
K��
&�
&��	&�	&�s=�
"E�,A&D?�)E�;3E�.E�?E	�E�E	�E�E c�n�tjtj|j��}|dz}|j�|dz}|j
�|dz}|j
�tj|��5tjjdd��5tjd|��}ddd�|jtjj!�tjj!|��ddd�y#1swY�^xYw#1swYyxYw)Nr�z	hello.exerrhTri)r�r�r+�fsdecoderlr��touchrrlrMr�r�r�r-r�r;rn)r�r��elsewhere_in_path_dir�match_elsewhere_in_path�
exe_in_cwdr�s      r%�*test_cwd_win32_added_before_all_other_pathz4TestWhich.test_cwd_win32_added_before_all_other_path{s����<�<����D�H�H� 5�6�� (�6� 1���#�#�%�"7�+�"E���%�%�'���+�
�����
�
!�
!�x�
0�	O����$�$�%D�SW�$�X�
K��\�\�+�4I�J��
K�
���R�W�W�_�_�R�0�"�'�'�/�/�*�2M�N�		O�	O�
K�
K��	O�	O�s%�"D+�*D�AD+�D(	�$D+�+D4c�v�tjtj|j��}|dz}|dz}|j�|j�|dz}|dz}|j
�|j
�tjjt|�t|�g�}y)Nr�r�z
hello.com.exez	hello.com)
r�r�r+rmrlr�rn�pathsepr<r�)r�r�r�r��
pathext_match�
path_match�	test_paths       r%�)test_pathext_match_before_path_full_matchz3TestWhich.test_pathext_match_before_path_full_match�s����<�<����D�H�H� 5�6���&� ���&� ���
�
���
�
����.�
��K�'�
����������J�J�O�O�S��Y��D�	�$:�;�	r'c��tj|jjtj
�tj|jjtj�r|jd�tj|j|jtj��}|j|�y)Nzcan't set the file read-only)r;rA)r+r�rOrfr�r��access�W_OKr�r�r-rQrlr`r[s  r%�test_non_matching_modez TestWhich.test_non_matching_mode�su��	������$�$�d�l�l�3�
�9�9�T�^�^�(�(�"�'�'�2��M�M�8�9�
�\�\�$�)�)�$�(�(����
A�����"�r'c�h�tjj|j�\}}t	j
|��5t
j|j|��}|j|tjj||j��ddd�y#1swYyxYwrZ)r+r;r�rlrrlr�r-rQr�r<)r�r�rar�s    r%�test_relative_pathzTestWhich.test_relative_path�s{���W�W�]�]�4�8�8�4���(�
�
!�
!�x�
0�	D����d�i�i�h�7�B����R������h��	�	�!B�C�	D�	D�	D�s
�AB(�(B1c�h�tjd|j��}|j|�y)Nzfoo.exer)r�r-rlr`r[s  r%�test_nonexistent_filezTestWhich.test_nonexistent_file�s$��
�\�\�)�$�(�(�
3�����"�r'zpathext check is Windows-onlyc���tj|jdd|j��}|j	||j
jdd|jz�y)N���r)r�r-rQrlr�rOrfrTr[s  r%�test_pathext_checkingzTestWhich.test_pathext_checking�sL��
�\�\�$�)�)�C�R�.�t�x�x�
8������T�^�^�0�0��"�5����@�Ar'c��tj�5}|j|d<tj|j
�}|j
||jj�ddd�y#1swYyxYw�N�PATH)	r�EnvironmentVarGuardrRr�r-rQr�rOrf�r��envr�s   r%�test_environ_pathzTestWhich.test_environ_path�s^��
�
*�
*�
,�	6���-�-�C��K����d�i�i�(�B����R����!4�!4�5�	6�	6�	6�s�AA3�3A<c	��tj�5}d|d<tjj	d|j
d��5t
jtd|j
�5tj|j
�5tj|j�}|j|�ddd�ddd�ddd�ddd�y#1swY�"xYw#1swY�&xYw#1swY�*xYw#1swYyxYw)Nr�r��
os.confstrT�rj�create�defpath)rr�rMr�r�rlrr2r+rlr�r-rQr`r�s   r%�test_environ_path_emptyz!TestWhich.test_environ_path_empty�s���
�
*�
*�
,�	&���C��K����$�$�\����,0�%�2�
&��"�"�2�y�$�(�(�;�
&��%�%�d�h�h�/�
&��\�\�$�)�)�,���!�!�"�%�
&�
&�
&�	&�	&�
&�
&��
&�
&��
&�
&��	&�	&�sS�2D�&C7�- C+�
1C	�>C+�C7�D�C(
�$C+�+C4�0C7�7D	�<D�Dc	���tjj|jj�}t
jdk(rUtj}t|t�rtj|�}tjj||�}tj�5}tj|d<tj j#d|j$d��5t'j(td|j$�5t+j,|j.�}|j1|�tj2|j$�5t+j,|j.�}|j5||�ddd�ddd�ddd�ddd�y#1swY�"xYw#1swY�&xYw#1swY�*xYw#1swYyxYw)NrDr�r�Tr�r�)r+r;rkrOrfr�rPrSr9r�r�r<rr�rtrMr�r�rlrr2r�r-rQr`rlr�)r��expected_cwdrSr�r�s     r%�test_environ_path_cwdzTestWhich.test_environ_path_cwd�sg���w�w�'�'����(;�(;�<���<�<�7�"��Y�Y�F��,��.����V�,���7�7�<�<���=�L��
*�
*�
,�	7���*�*�C��K����$�$�\����,0�%�2�	
7��"�"�2�y�$�(�(�;�	
7��\�\�$�)�)�,���!�!�"�%��)�)�$�(�(�3�7����d�i�i�0�B��$�$�R��6�7�	
7�	
7�	7�	7�7�7��	
7�	
7��	
7�	
7��	7�	7�sV�0AG�0&G�AG�&2F9	�G� G�(G�9G
�>G�G�
G�G	�G�G&c�Z�tj�5}|jdd�tjjdtd��5tjtd|j�5tj|j�}ddd�ddd�|j|jj �tjjd|jd��5tjtdd�5tj|j�}ddd�ddd�|j||jj �ddd�y#1swY��xYw#1swY��xYw#1swY�XxYw#1swY�\xYw#1swYyxYw)Nr�r�T)rr�r�r�r�)rr��poprMr�r�r�rr2r+rlr�r-rQr�rOrfr�s   r%�test_environ_path_missingz#TestWhich.test_environ_path_missing�sX��
�
*�
*�
,�	6���G�G�F�D�!����$�$�\�z�,0�%�2�
-��"�"�2�y�$�(�(�;�
-��\�\�$�)�)�,��
-�
-�
���R����!4�!4�5����$�$�\����,0�%�2�
-��"�"�2�y�"�5�
-��\�\�$�)�)�,��
-�
-�
���R����!4�!4�5�	6�	6�
-�
-��
-�
-��
-�
-��
-�
-��	6�	6�sl�9F!�&E=�4 E1�E=�AF!�6F� F	�2F�:.F!�1E:�6E=�=F	�F!�	F�F�F	�F!�!F*c��tjj|j�}t	j
|j��5t	j�5}|j|d<tj|jd��}|j|�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr�r�)r+r;r[rlrrlr�rRr�r-rQr`)r�r�r�r�s    r%�test_empty_pathzTestWhich.test_empty_path�s����7�7�?�?�4�8�8�,��
�
!�
!�t�x�x�
0�	"�
�
*�
*�
,�	"�03��-�-�C��K����d�i�i�b�1�B����b�!�		"�	"�	"�	"��	"�	"�s%�
B>�AB2�!B>�2B;	�7B>�>Cc���tj�5}|jdd�tj|j
�}|j
|�ddd�y#1swYyxYwr�)rr�r�r�r-rQr`r�s   r%�test_empty_path_no_PATHz!TestWhich.test_empty_path_no_PATH�sS��
�
*�
*�
,�	"���G�G�F�D�!����d�i�i�(�B����b�!�	"�	"�	"�s�AA!�!A*ztest specific to Windowsc���|jd�}tj|j|jd�|��}t	j
|jtj�|j|j�tjj|j�}tjj|�d}tj�5}t!|t"�r|n|j%�|d<t'j(||j��}|j+||j�ddd�y#1swYyxYw)N�.xyz�Tmp2rLr�PATHEXTr)rXrprqrNr+r�rfr�rPr�r0r;rkr�rr�r9r�r�r�r-r��r�rT�temp_filexyz�programr�r�s      r%�test_pathextzTestWhich.test_pathext	s������'���2�2�t�}�}�:>�:K�:K�F�:S�\_�a��
����"�"�D�L�L�1�����*�*�+��'�'�"�"�<�#4�#4�5���'�'�"�"�7�+�A�.��
�
*�
*�
,�	4��$.�s�C�$8�S�c�j�j�l�C�	�N����g�D�M�M�:�B����R��!2�!2�3�	4�	4�	4�s
�+A#E�E c�p�|jd�}tj|j|jd�|��}|j	|j
�tjj|j�}tjj|�d}tj�5}t|t�r|n|j��d�|d<t!j"||j��}|j%||j�ddd�y#1swYyxYw)Nr�r�rLr�;r�r)rXrprqrNr�r0r+r;rkrfr�rr�r9r�r�r�r-r�r�s      r%�test_pathext_with_empty_strz%TestWhich.test_pathext_with_empty_str	s�������'���2�2�t�}�}�:>�:K�:K�F�:S�\_�a������*�*�+��'�'�"�"�<�#4�#4�5���'�'�"�"�7�+�A�.��
�
*�
*�
,�	4��'1�#�s�';������N�a�P�C�	�N����g�D�M�M�:�B����R��!2�!2�3�	4�	4�	4�s
�=A&D,�,D5c� �tj�5}t|jt�r|jn|jj�|d<d|d<tjj|j|jd��}t|d�j�t
j|d�|jtj|jd��|�ddd�y#1swYyxYw)Nr��.testr�ztest_program.testr5���test_program�rr�r9rNr�r�r+r;r<rXr=r0r�r�r�r-)r�r�rws   r%�%test_pathext_applied_on_files_in_pathz/TestWhich.test_pathext_applied_on_files_in_path'	s���
�
*�
*�
,�	Y��+5�d�m�m�S�+I�$�-�-�t�}�}�Oc�Oc�Oe�C��K�$�C�	�N������T�]�]�D�4E�4E�FY�4Z�[�I���C� �&�&�(��H�H�Y��&����V�\�\�$�*;�*;�N�*K�L�i�X�	Y�	Y�	Y�s�C&D�D
c�v�tjjdd��5}|jt	j
dtj��|jd�|j�|jt	j
dd��|j�ddd�tjjdd��5}|jt	j
dtj��|jd�ddd�y#1swY�xxYw#1swYyxYw)Nz&_winapi.NeedCurrentDirectoryForExePathTri�dontcarerF)rMr�r�r�r��_win_path_needs_curdirr+�X_OK�assert_called_once_with�
reset_mock�assert_not_calledr�)r��need_curdir_mocks  r%�test_win_path_needs_curdirz$TestWhich.test_win_path_needs_curdir4	s���
�]�]�
 �
 �!I�X\�
 �
]�	1�aq��O�O�F�9�9�*�b�g�g�N�O��4�4�Z�@��'�'�)��O�O�F�9�9�*�a�H�I��.�.�0�	1��]�]�
 �
 �!I�X]�
 �
^�	A�br����V�:�:�:�r�w�w�O�P��4�4�Z�@�	A�	A�	1�	1��	A�	A�s�B
D#�AD/�#D,�/D8c���tj�5}t|jt�r|jn|jj�|d<d|d<tjj|j|jd��}t|d�j�t
j|d�|jtj|jd��|�tjj|j|jd��}t|d�j�t
j|d�|jtj|jd��|�|jtj|jd�tj ��|�ddd�y#1swYyxYw)	Nr�r�r��test.exer5r�z
test.exe.test)rA)rr�r9rNr�r�r+r;r<rXr=r0r�r�r�r-�F_OK)r�r��exe�dot_tests    r%�"test_pathext_preferred_for_executez,TestWhich.test_pathext_preferred_for_executeB	s[��
�
*�
*�
,�	]��+5�d�m�m�S�+I�$�-�-�t�}�}�Oc�Oc�Oe�C��K�$�C�	�N��'�'�,�,�t�}�}�d�.?�.?�
�.K�L�C���c�N� � �"��H�H�S�%� �
���V�\�\�$�*;�*;�J�*G�H�#�N��w�w�|�|�D�M�M�4�3D�3D�_�3U�V�H���3��%�%�'��H�H�X�u�%�
���V�\�\�$�*;�*;�J�*G�H�(�S�
���V�\�\�$�*;�*;�J�*G�b�g�g�V�X[�\�)	]�	]�	]�s�GG%�%G.c�Z�tj�5}t|jt�r|jn|jj�|d<d|d<tjj|j|jd��}t|d�j�t
j|d�tjj|j|jd��}t|d�j�t
j|d�|jtj|jd��|�|jtj|jd��|�ddd�y#1swYyxYw)	Nr�z
.exe2;.exer�r�r5r�z	test.exe2r�r�)r�r�r��exe2s    r%�&test_pathext_given_extension_preferredz0TestWhich.test_pathext_given_extension_preferred[	s+��
�
*�
*�
,�	L��+5�d�m�m�S�+I�$�-�-�t�}�}�Oc�Oc�Oe�C��K�)�C�	�N��'�'�,�,�t�}�}�d�.?�.?�
�.K�L�C���c�N� � �"��H�H�S�%� ��7�7�<�<��
�
�t�/@�/@��/M�N�D���s�O�!�!�#��H�H�T�5�!�
���V�\�\�$�*;�*;�J�*G�H�#�N����V�\�\�$�*;�*;�F�*C�D�d�K�	L�	L�	L�s�FF!�!F*N)"r�r�r�rUrXr\r^rcrMrNr�rPrfrkrrrxrrQr|r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�rFr'r%rIrI3si����2�
2�"��X�������0�0�2�"�2�"��X�������0�,�.�
&�.�
&��X�������0�,�.�O�.�O�"�X�������0�,�.�&�.�&�"�#�#��$��D��
�X�������0�8�:�B�:�B�6�	&�7�,6�$"�"��X�������0�2L�M�4�N�4�"�X�������0�2L�M�
4�N�
4� �X�������0�2L�M�	Y�N�	Y��X�������0�2L�M�
A�N�
A��X�������0�2L�M�]�N�]�0�X�������0�2L�M�L�N�Lr'rIc��eZdZd�Zd�Zy)�TestWhichBytesc��tj|�tj|j�|_tj|j
�|_tj|jj�|j_tj|j�|_tj|j�|_	tj|j�|_
yr*)rIrUr+r�rlrQrOrfrNrSrTr=s r%rUzTestWhichBytes.setUpo	s���������;�;�t�x�x�(����K�K��	�	�*��	� �k�k�$�.�.�*=�*=�>��������D�M�M�2��
��k�k�$�+�+�.����;�;�t�x�x�(��r'c�H�	t|t�r|j�S|Sr*)r9r�rPrWs  r%rXzTestWhichBytes.to_text_typex	s$��	��a����8�8�:���r'N)r�r�r�rUrXrFr'r%r�r�n	s��)�r'r�c���eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	e
d��Ze
d	��Zd
�Z
e
d��Zd�Ze
d
��Zd�Zej&ej*j,d�d��Zd�Zd�Zd�Zd�Zej:e
d���Zej:e
d���Zej:e
d���Z ej:e
d���Z!d�Z"d�Z#e
d��Z$e
d��Z%d�Z&e
d��Z'ej:d��Z(ej:d ��Z)ejTej&e+ed!�xre+e,d"�xr	e+e,d#�d$�d%���Z-y&)'�TestMovec��d}|j�|_|j�|_tjj|j|�|_tjj|j|�|_t|jd�5}|jd�ddd�y#1swYyxYw)Nr�r4r=)
r�r_r`r+r;r<rGrUr=r>)r�r�rUs   r%rUzTestMove.setUp�	s������|�|�~����|�|�~��������T�\�\�8�<��
������T�\�\�8�<��
�
�$�-�-��
&�	�!�
�G�G�G��	�	�	�s�!B<�<Cc�p�t|d�5}|j�}ddd�tj||�t|d�5}|j	|j��ddd�|jtjj|��y#1swY��xYw#1swY�DxYw�NrY)	r=r[r��mover�r�r+r;r�)r�rwrx�real_dstrU�contentss      r%�_check_move_filezTestMove._check_move_file�	s���
�#�t�_�	 ���v�v�x�H�	 ����C���
�(�D�
!�	1�Q����X�q�v�v�x�0�	1����������,�-�	 �	 ��	1�	1�s�B �!B,� B)�,B5c�$�ttj|��}tj||�|j|ttj|���|j
tjj|��yr*)	r_r+r`r�r�r�r�r;r�)r�rwrxr�r�s     r%�_check_move_dirzTestMove._check_move_dir�	s[���"�*�*�S�/�*�����C�������6�"�*�*�X�*>�#?�@����������,�-r'c�f�|j|j|j|j�yr*)r�rGrUr=s r%�test_move_filezTestMove.test_move_file�	s �����d�m�m�T�]�]�D�M�M�Jr'c�f�|j|j|j|j�yr*)r�rGr`rUr=s r%�test_move_file_to_dirzTestMove.test_move_file_to_dir�	s �����d�m�m�T�\�\�4�=�=�Ir'c��tj|j�}|j||j|j
�yr*)r�r�rGr�r`rU)r�rws  r%�"test_move_file_to_dir_pathlike_srcz+TestMove.test_move_file_to_dir_pathlike_src�	s.���l�l�4�=�=�)�����c�4�<�<����?r'c��tj|j�}|j|j||j
�yr*)r�r�r`r�rGrU�r�rxs  r%�"test_move_file_to_dir_pathlike_dstz+TestMove.test_move_file_to_dir_pathlike_dst�	s.���l�l�4�<�<�(�����d�m�m�S�$�-�-�@r'c�$�|j�yr*)r�r=s r%�test_move_file_other_fsz TestMove.test_move_file_other_fs�	s��	
���r'c�$�|j�yr*)r�r=s r%�test_move_file_to_dir_other_fsz'TestMove.test_move_file_to_dir_other_fs�	s��	
�"�"�$r'c���tj|j���}	|j|j||�tj|�y#tj|�wxYwr?)rpr�r�r�r_rr��r�r`s  r%�
test_move_dirzTestMove.test_move_dir�	sN���/�/�d�l�l�n�5��	&�� � ����w��@����W�%��I���W�%�s�A�A0c�$�|j�yr*)r�r=s r%�test_move_dir_other_fszTestMove.test_move_dir_other_fs�	s��	
���r'c
���|j|j|jtjj|jtjj
|j���yr*)r�r_r`r+r;r<rkr=s r%�test_move_dir_to_dirzTestMove.test_move_dir_to_dir�	sF�����T�\�\�4�<�<��G�G�L�L����r�w�w�'7�'7����'E�F�	Hr'c�$�|j�yr*)r�r=s r%�test_move_dir_to_dir_other_fsz&TestMove.test_move_dir_to_dir_other_fs�	s��	
�!�!�#r'c
�&�|j|jtjjz|j
tjj
|j
tjj|j���yr*)r�r_r+r;�sepr`r<rkr=s r%�test_move_dir_sep_to_dirz!TestMove.test_move_dir_sep_to_dir�	sS�����T�\�\�B�G�G�K�K�7�����G�G�L�L����r�w�w�'7�'7����'E�F�	Hr'zrequires os.path.altsepc
�&�|j|jtjjz|j
tjj
|j
tjj|j���yr*)r�r_r+r;�altsepr`r<rkr=s r%�test_move_dir_altsep_to_dirz$TestMove.test_move_dir_altsep_to_dir�	sS�����T�\�\�B�G�G�N�N�:�D�L�L��G�G�L�L����r�w�w�'7�'7����'E�F�	Hr'c���t|jd�5	ddd�|jtjtj
|j|j�y#1swY�NxYw)Nr4)r=rUr�r�rr�rGr`r=s r%�"test_existing_file_inside_dest_dirz+TestMove.test_existing_file_inside_dest_dir�	sL��
�$�-�-��
&�	��	����&�,�,����T�]�]�D�L�L�Q�	�	�s�A&�&A/c���tjj|jd�}|j	t
jt
j|j|�y�Nr�)r+r;r<r_r�r�rr�r�s  r%�test_dont_move_dir_in_itselfz%TestMove.test_dont_move_dir_in_itself�	s:���g�g�l�l�4�<�<��/�����&�,�,����T�\�\�3�Gr'c	��tjt�	dD]{\}}tjj	t|�}tjj	t|�}|jt
j||�d|�d|�d����}	tjt�y#tjt�wxYw)N))�srcdirzsrcdir/dest�)_destinsrc() wrongly concluded that dst (z) is not in src (�)�r�)
r+r�rr;r<r�r��
_destinsrcrr�rGs   r%�test_destinsrc_false_negativez&TestMove.test_destinsrc_false_negative�	s���
�����	%�7�
I���S��g�g�l�l�6�3�/���g�g�l�l�6�3�/������ 1� 1�#�s� ;�>A�3�"H� �I�
I�
���V�$��I���V�$���BB6�6Cc	��tjt�	dD]{\}}tjj	t|�}tjj	t|�}|jt
j||�d|�d|�d����}	tjt�y#tjt�wxYw)N))r�zsrc/dest)r�z
srcdir.newr�z
) is in src (r�r�)
r+r�rr;r<r�r�r�rr�rGs   r%�test_destinsrc_false_positivez&TestMove.test_destinsrc_false_positive�	s���
�����	%�N�
D���S��g�g�l�l�6�3�/���g�g�l�l�6�3�/��� � ��!2�!2�3��!<�9<�c�!C�!�D�
D�
���V�$��I���V�$�r�c���tjj|jd�}tj|j
|�t
j||j�|jtjj|j��|jtjj|j
|j��yr�)r+r;r<r_r�rGr�r�rUr�rb�samefiler�s  r%�test_move_file_symlinkzTestMove.test_move_file_symlink�	s����g�g�l�l�4�<�<��/��
�
�
�4�=�=�#�&����C����'���������t�}�}�5�6�������(�(�����
�
�F�Gr'c��d}tjj|j|�}tj|j
|�t
j||j�tjj|j|�}|jtjj|��|jtjj|j
|��yr�)r+r;r<r_r�rGr�r�r`r�rbr�)r�r�rx�
final_links    r%�test_move_file_symlink_to_dirz&TestMove.test_move_file_symlink_to_dir
s������g�g�l�l�4�<�<��2��
�
�
�4�=�=�#�&����C����&��W�W�\�\�$�,�,��9�
���������z�2�3�������(�(����
�C�Dr'c�L�tjj|jd�}tjj|jd�}tj||�tjj|j
d�}t
j||�|jtjj|��|jtjj|�tjj|��y�Nr�r�r�)r+r;r<r_r�r`r�r�r�rbr��realpath�r�rwrxrxs    r%�test_move_dangling_symlinkz#TestMove.test_move_dangling_symlink
s����g�g�l�l�4�<�<��/���g�g�l�l�4�<�<��/��
�
�
�3����7�7�<�<����f�5�����C��"���������x�0�1�������)�)�#�.����0@�0@��0J�Kr'c�<�tjj|jd�}tjj|jd�}tj|�tj
||�tjj|jd�}tj||�|jtjj|��|jtjj||��yr�)r+r;r<r_r�r�r`r�r�r�rbr�rs    r%�test_move_dir_symlinkzTestMove.test_move_dir_symlink
s����g�g�l�l�4�<�<��/���g�g�l�l�4�<�<��/��
����
�
�
�
�3����7�7�<�<����f�5�����C��"���������x�0�1�������(�(��h�7�8r'c	��tj|j|j�}|j	|t
jj|jt
jj|j���yr*)	r�r�rGr`r�r+r;r<rkr[s  r%�test_move_return_valuezTestMove.test_move_return_value$
sT��
�[�[�������
5�����������T�\�\�2�7�7�+;�+;�D�M�M�+J�K�	Mr'c��tj|jtjj|jd��}|j|tjj|jd��yr�)r�r�rGr+r;r<r`r�r[s  r%� test_move_as_rename_return_valuez)TestMove.test_move_as_rename_return_value)
sL��
�[�[���������T�\�\�5�(I�
J������R�W�W�\�\�$�,�,��>�?r'c���g��fd�}tj|j|j|��|j	t��d�y)Nc�,���j||f�yr*r��rwrx�moveds  �r%r�z7TestMove.test_move_file_special_function.<locals>._copy0
�����L�L�#�s��$r'r�r)r�r�rGr`r�r��r�r�rs  @r%�test_move_file_special_functionz(TestMove.test_move_file_special_function-
s9�����	%����D�M�M�4�<�<�u�E�����U��Q�'r'c���g��fd�}tjtjj	|j
d��tjtjj	|j
d��t
j|j
|j|��|jt��d�y)Nc�,���j||f�yr*r�rs  �r%r�z6TestMove.test_move_dir_special_function.<locals>._copy8
r
r'�child�child1r�r)rr�r+r;r<r_r�r�r`r�r�rs  @r%�test_move_dir_special_functionz'TestMove.test_move_dir_special_function5
s{�����	%��#�#�B�G�G�L�L����w�$G�H��#�#�B�G�G�L�L����x�$H�I����D�L�L�$�,�,�e�D�����U��Q�'r'c�Z�|j�|_tjj	tjj|j�tjj
|j�j��}|j|j|�	tj|j|�|jtjj|��tj|�y#tj|�wxYwr*)r�r_r+r;r<r[rk�upperr�r�r�r�rar�r�s  r%�test_move_dir_caseinsensitivez&TestMove.test_move_dir_caseinsensitive?
s����|�|�~����'�'�,�,���������-���� � ����.�4�4�6�8��	
���D�L�L�'�2�	��K�K����g�.��O�O�B�G�G�M�M�'�2�3��H�H�W���B�H�H�W��s
�/AD�D*c���tjj|jd�}tjj|jd�}tj
|j|d��t
j||�|jtjj|��|jtjj|j|��|jtjj|��tj
|j|d��|jtj�5t
j||�ddd�|jtjj|j|��|jtjj|��y#1swY�qxYw)N�	linktodirTr�)r+r;r<r_r`r�r�r�r�rbr�r�r�r�r)r�rxrwrxs    r%�"_test_move_symlink_to_dir_into_dirz+TestMove._test_move_symlink_to_dir_into_dirQ
s.���g�g�l�l�4�<�<��5���7�7�<�<����k�:��
�
�
�4�<�<��$�?����C�����������x�0�1�������(�(����x�@�A����������,�-�	�
�
�4�<�<��$�?�
�
�
�v�|�|�
,�	"��K�K��S�!�	"�������(�(����x�@�A���������s�+�,�	"�	"�s�#G*�*G3c�:�|j|j�yr*)rr`r=s r%�!test_move_symlink_to_dir_into_dirz*TestMove.test_move_symlink_to_dir_into_dirc
s���/�/����=r'c��tjj|jd�}tj|j
|d��|j
|�y)N�otherlinktodirTr�)r+r;r<r_r�r`rr�s  r%�,test_move_symlink_to_dir_into_symlink_to_dirz5TestMove.test_move_symlink_to_dir_into_symlink_to_dirg
s=���g�g�l�l�4�<�<�)9�:��
�
�
�4�<�<��$�?��/�/��4r'rk�SF_IMMUTABLE�	UF_OPAQUEzrequires lchflagsc� �	tjt�tjttj
�|j
ttjtt�|jttj�v�tjttj�tjtj j#td��tjttj
�|j
ttjtt�|jttj�v�tj j%t�rAtjttj�tj&t�tj j%t�rBtjttj�tj&t�yy#tj j%t�rAtjttj�tj&t�tj j%t�rBtjttj�tj&t�wwxYw)Nr)r+r��
TESTFN_SRCrkr�r r�r�r�r��
TESTFN_DSTr�r`r!rr�r;r<r�r�r=s r%�test_move_dir_permission_deniedz(TestMove.test_move_dir_permission_deniedm
s���	-��H�H�Z� ��K�K�
�D�$5�$5�6�
���o�v�{�{�J�
�S����Z�2�:�:�<�7�8�
�K�K�
�D�N�N�3��'�'������Z��(I�J��K�K�
�D�$5�$5�6�
���o�v�{�{�J�
�S����Z�2�:�:�<�7�8��w�w�~�~�j�)����J����7�� � ��,��w�w�~�~�j�)����J����7�� � ��,�*���w�w�~�~�j�)����J����7�� � ��,��w�w�~�~�j�)����J����7�� � ��,�*�s
�E6I�CL
N).r�r�r�rUr�r�r�r�r�r�r2r�r�r�r�r�r�r�rMrNr+r;r�r�r�r�r�r�rrLr�r�rrrrrrrrrrr^ror�r%rFr'r%r�r��	s7���.�.�K�J�@�
A�
�����%��%�&�����H�
�$��$�H��X��������)B�C�H�D�H�R�H�

%�
%��"�"��H��#�H��"�"��E��#�E��"�"��L��#�L��"�"��9��#�9�M�
@��(��(��(��(��$�-��-�"�"�"�>�#�>��"�"�5�#�5�
�'�'��X�����Z�0�8�$�T�>�:�8�$�T�;�7�,�.�-�	.�(�
-r'r�c��eZdZGd�de�Zd�Zejed�d��Z	ejed�d��Z
ejed�d��Zy)	�TestCopyFilec�2�eZdZdZdZdZdd�Zd�Zd�Zd�Z	y)�TestCopyFile.FauxFNc� �||_||_yr*)�_raise_in_exit�_suppress_at_exit)r��
raise_in_exit�suppress_at_exits   r%�__init__zTestCopyFile.Faux.__init__�
s��"/�D��%5�D�"r'c��y)Nr�rF)r�r#s  r%r[zTestCopyFile.Faux.read�
s��r'c��d|_yr)�_enteredr=s r%�	__enter__zTestCopyFile.Faux.__enter__�
s	�� �D�Mr'c�j�|||f|_|jrd|_td��|jS)NT�Cannot close)�_exited_withr+�_raisedr r,)r��exc_type�exc_val�exc_tbs    r%�__exit__zTestCopyFile.Faux.__exit__�
s8�� (�'�6� 9�D���"�"�#����n�-�-��)�)�)r'r�)
r�r�r�r2r6r7r/r[r3r;rFr'r%�Fauxr)�
s%��������	6�	�	!�	*r'r<c���dd�}tjtd|�5|jt�5tj
dd�ddd�ddd�y#1swY�xYw#1swYyxYw)Nc�$�|dk(rtd��y)N�srcfilezCannot open "srcfile"r,)r�rAs  r%�_openz4TestCopyFile.test_w_source_open_fails.<locals>._open�
s���9�$��5�6�6�%r'r=r?�destfile�rZ)rr2r�r�r rI)r�r@s  r%�test_w_source_open_failsz%TestCopyFile.test_w_source_open_fails�
sf��	�
�
�
�v�v�u�
5�	7��"�"�7�+�
7����	�:�6�
7�	7�	7�
7�
7��	7�	7�s"�A*�A�
A*�A'	�#A*�*A3zskipped on macOSc���|j��d�fd�	}tjtd|�5tjdd�ddd�|j�j�|j�jdtu�|j�jdjd�y#1swY�rxYw)	Nc�4��|dk(r�S|dk(rtd��y)Nr?rA�Cannot open "destfile"r,)r�rAr?s  �r%r@z2TestCopyFile.test_w_dest_open_fails.<locals>._open�
s)����9�$����:�%��6�7�7�&r'r=r?rArr)rFrB)r<rr2r�rIr�r2r6r r�r#)r�r@r?s  @r%�test_w_dest_open_failsz#TestCopyFile.test_w_dest_open_fails�
s�����)�)�+��	��
�
�v�v�u�
5�	3��O�O�I�z�2�	3�����(�(�)�����,�,�Q�/�7�:�;�����-�-�a�0�5�5�4�	6�		3�	3�s�B;�;Cc� ���|j��|jd��d	��fd�	}tjtd|�5tjdd�ddd�|j�j�|j�j�|j�j�|j�jdtu�|j�jdjd�y#1swY��xYw)
NTc�"��|dk(r�S|dk(r�Sy�Nr?rArF�r�rArAr?s  ��r%r@z3TestCopyFile.test_w_dest_close_fails.<locals>._open�
�"����9�$����:�%���&r'r=r?rArr)r5rB)r<rr2r�rIr�r2r7r6r r�r#�r�r@rAr?s  @@r%�test_w_dest_close_failsz$TestCopyFile.test_w_dest_close_fails�
s�����)�)�+���9�9�T�?��	��
�
�v�v�u�
5�	3��O�O�I�z�2�	3�����(�(�)�����)�)�*�����(�(�)�����,�,�Q�/�7�:�;�����-�-�a�0�5�5�*�	,�
	3�	3�s�D�D
c�P���|jd��|j��d��fd�	}tjtd|�5|j	t
�5tjdd�ddd�ddd�|j�j�|j�j�|j�j�|j�jddu�|j�j�y#1swY��xYw#1swY��xYw)NTc�"��|dk(r�S|dk(r�SyrJrFrKs  ��r%r@z5TestCopyFile.test_w_source_close_fails.<locals>._open�
rLr'r=r?rArrB)r<rr2r�r�r rIr�r2r�r7r6rMs  @@r%�test_w_source_close_failsz&TestCopyFile.test_w_source_close_fails�
s�����)�)�D�/���9�9�;��	��
�
�v�v�u�
5�	7��"�"�7�+�
7����	�:�6�
7�	7�	
����(�(�)�����)�)�*�����)�)�*�����,�,�Q�/�4�7�8�������(�

7�
7��	7�	7�s$�D�D�3D�D	�D�D%N)r�r�r��objectr<rCrMrOr_rGrNrQrFr'r%r'r'�
sy��*�v�*�$7��X�_�_�U�.�/�6�0�6�"�X�_�_�U�.�/�,�0�,�(�X�_�_�U�.�/�)�0�)r'r'c��eZdZdZed��Zed��Zd�Zejd��Z
d�Zd�Zd�Z
d	�Zej ej$d
k7d�d��Zy
)�TestCopyFileObji c�8�tt|j�yr*)rWr�FILESIZE��clss r%�
setUpClasszTestCopyFileObj.setUpClass�
s�������-r'c�h�tjt�tjt�yr*)rrtrr�rWs r%�
tearDownClasszTestCopyFileObj.tearDownClass�
s������ �����!r'c�6�tjt�yr*�rrtr�r=s r%�tearDownzTestCopyFileObj.tearDown�
�������!r'c#�K�ttd�5}ttd�5}||f��ddd�ddd�y#1swY�xYw#1swYyxYw�w�NrYr4�r=rr�rGs   r%�	get_fileszTestCopyFileObj.get_files�
�V����
�&�$�
�	!�3��g�t�$�
!���C�j� �
!�	!�	!�
!�
!��	!�	!��/�A�A�<�A�	A�A	�A�A�
Ac���t|d�5}t|d�5}|j|j�|j��ddd�ddd�y#1swY�xYw#1swYyxYwr�)r=r�r[)r�rwrx�fsrc�fdsts     r%�assert_files_eqzTestCopyFileObj.assert_files_eqsc��
�#�t�_�	;���c�4��
;�D�� � �����d�i�i�k�:�
;�	;�	;�
;�
;��	;�	;�s"�
A&�/A�	A&�A#	�A&�&A/c��|j�5\}}tj||�ddd�|jtt
�y#1swY�$xYwr*)rcr��copyfileobjrirr�rGs   r%�test_contentzTestCopyFileObj.test_contentsG��
�^�^�
�	)��#�s����s�C�(�	)����V�W�-�	)�	)�s�A�Ac��|j�5\}}tj||�ddd�y#1swYyxYwr*)rcr�rkrGs   r%�test_file_not_closedz$TestCopyFileObj.test_file_not_closeds7��
�^�^�
�	"��#�s����s�C�(�	"�	"�	"�s�4�=c�(�|j�5\}}tj||�|j|j	�|j
�|j|j	�|j
�ddd�y#1swYyxYwr*)rcr�rkr��tellrVrGs   r%�test_file_offsetz TestCopyFileObj.test_file_offsetsk��
�^�^�
�	8��#�s����s�C�(����S�X�X�Z����7����S�X�X�Z����7�	8�	8�	8�s�A.B�BrozWindows onlyc�d�tjjd�5}tjt
t�ddd�|jjddd�tjtj�d��5}|jd�ddd�j}|jt j"|�tjjd�5}tj|t�ddd�|j|jddd�tjtj�d��5}	ddd�|j}|jt j"|�tjjd�5}tj|t�ddd�|j%|t�y#1swY���xYw#1swY��_xYw#1swY��xYw#1swY��xYw#1swY�RxYw)	Nzshutil._copyfileobj_readintorrniFrksfoor)rMr�r�r�rIrr�r��	call_argsrprqr+rrr>rfr�rrtri)r��mrUrs    r%�
test_win_implzTestCopyFileObj.test_win_impls����]�]�
 �
 �!?�
@�	-�A��O�O�F�G�,�	-�
	
������Q���*�O�<��
(�
(�R�Y�Y�[��
G�	�1�
�G�G�F�O�	��������	�(�(�%�0�
�]�]�
 �
 �!?�
@�	,�A��O�O�E�7�+�	,�������Q���*�A�.��
(�
(�R�Y�Y�[��
G�	�1��	��������	�(�(�%�0�
�]�]�
 �
 �!?�
@�	,�A��O�O�E�7�+�	,�	
���U�G�,�3	-�	-��	�	��	,�	,��
	�	��	,�	,�s;�G4�H�7H�%H�:H&�4G>�H�H�H#�&H/N)r�r�r�rV�classmethodrYr[r^�
contextlib�contextmanagerrcrirlrnrqrMrOr+rfrurFr'r%rTrT�
s����H��.��.��"��"�"����!��!�
;�
.�
"�8��X�_�_�R�W�W��_�n�5�-�6�-r'rTc��eZdZ	dZdZdZed��Zed��Zd�Z	e
jd��Zd�Z
d	�Zd
�Zd�Zd�Zd
�Zd�Zd�Zd�Zy)�_ZeroCopyFileTesti�r'r�c��tt|j�ttd�5}|j	�|_ddd�y#1swYyxYwr�)rWrrVr=r[�FILEDATA)rXrUs  r%rYz_ZeroCopyFileTest.setUpClass<s>�������-�
�&�$�
�	5�1��6�6�8�C�L�	5�	5�	5�s�A
�
Ac�6�tjt�yr*)rrtrrWs r%r[z_ZeroCopyFileTest.tearDownClassCs������ r'c�6�tjt�yr*r]r=s r%r^z_ZeroCopyFileTest.tearDownGr_r'c#�K�ttd�5}ttd�5}||f��ddd�ddd�y#1swY�xYw#1swYyxYw�wrarbrGs   r%rcz_ZeroCopyFileTest.get_filesJrdrec��td��)Nzmust be implemented in subclass)r<)r�r#r$s   r%�zerocopy_funz_ZeroCopyFileTest.zerocopy_funPs��!�"C�D�Dr'c��|j�|j�|j�|j�yr*)r^r[rYrUr=s r%�resetz_ZeroCopyFileTest.resetSs*���
�
�����������
�
�r'c���|j�5\}}|j||�ddd�|jttd��|j
�|j�5\}}tjjd�5}tjtt�ddd�ddd�y#1swY��xYw#1swY�xYw#1swYyxYw)NT�r@zshutil.copyfileobj)rcr�r�r\r�r|rMr�r�r�rIr)r�rwrxrts    r%�test_regular_copyz#_ZeroCopyFileTest.test_regular_copy[s���
�^�^�
�	(��#�s����c�3�'�	(�����7�4�8�$�-�-�H�
�^�^�
�	 ��#�s����$�$�%9�:�
1�a������0�
1�	 �	 �		(�	(��

1�
1��	 �	 �s/�B=�*#C�
C	�,C�=C�	C	�C�Cc�d�|j|j�|j�5\}}|jtt
f�5|j
||�ddd�ddd�|jttd��|j�y#1swY�=xYw#1swY�AxYw)NTr�)r�r�rcr�r rr�r�r\rr|rGs   r%�test_same_filez _ZeroCopyFileTest.test_same_filees�������
�
�#�
�^�^�
�	,��#�s��"�"�G�->�#?�@�
,��!�!�#�s�+�
,�	,�	
����6�$�7����G�
,�
,��	,�	,�s#�B&�B�B&�B#	�B&�&B/c� �tjtj���}|j	t
�5}t
j|d�ddd�|jjj|�y#1swY�0xYw)Nr��new)rpr�r+rrr�r�r�rIr�r�r�)r�rfr�s   r%�test_non_existent_srcz'_ZeroCopyFileTest.test_non_existent_srcmsd�����2�9�9�;�/��
�
�
�0�
1�	)�R��O�O�D�%�(�	)�������.�.��5�	)�	)�s�B�B
c����tdz�tdz�|j�fd��|j�fd��t�d�5	ddd�t�d�5}t�d�5}|j||�ddd�ddd�|j	t�d��d	�y#1swY�cxYw#1swY�;xYw#1swY�?xYw)
Nrwrxc�.��tj��Sr*�rrt)rus�r%r�z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>v����	� 0� 0�� 9�r'c�.��tj��Sr*r�)rvs�r%r�z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>wr�r'r4rYTr�r')rr�r=r�r�r\)r�rwrxrvrus   @@r%�test_empty_filez!_ZeroCopyFileTest.test_empty_filess�����5�.���5�.�����9�:����9�:�
�'�4�
 �	��	��'�4�
 �	,�C��g�t�$�
,���!�!�#�s�+�
,�	,�	
����7�4�8�#�>�	�	��
,�
,��	,�	,�s0�	B-�
C�,B9�?C�-B6�9C	�>C�Cc���tjj|jt��5|jttjtt�ddd�y#1swYyxYw)Nr)
rMr�r��
PATCHPOINT�ZeroDivisionErrorr�r�rIrr�r=s r%�test_unhandled_exceptionz*_ZeroCopyFileTest.test_unhandled_exception�sY��
�]�]�
 �
 ����->�!�@�	@����/�$�o�o�v�w�
@�	@�	@�	@�s�/A(�(A1c�|�tjj|jt	t
jd���5|j�5\}}|jt�5|j||�ddd�ddd�ddd�y#1swY�xYw#1swY�xYw#1swYyxYw�N�yor)rMr�r�r�r r"�EINVALrcr�rr�rGs   r%�test_exception_on_first_callz._ZeroCopyFileTest.test_exception_on_first_call�s����]�]�
 �
 ����-4�U�\�\�4�-H�!�J�	0����!�
0�Z�c�3��&�&�'8�9�0��%�%�c�3�/�0�
0�	0�	0�0�0��
0�
0��	0�	0�s<�B2�B&�.B�B&�	B2�B#�B&�&B/	�+B2�2B;c�H�tjj|jt	t
jd���5|j�5\}}|jt|j||�ddd�ddd�y#1swY�xYw#1swYyxYwr�)
rMr�r�r�r r"�ENOSPCrcr�r�rGs   r%�test_filesystem_fullz&_ZeroCopyFileTest.test_filesystem_full�s����]�]�
 �
 ����-4�U�\�\�4�-H�!�J�	H����!�
H�Z�c�3��!�!�'�4�+<�+<�c�3�G�
H�	H�	H�
H�
H��	H�	H�s$�B�&B�;B�B	�B�B!N)r�r�r�rVr|r�rvrYr[r^rwrxrcr�r�r�r�r�r�r�r�r�rFr'r%rzrz6s���-� �H��H��J��5��5��!��!�"����!��!�
E�� �H�6�?�@�0�Hr'rzzos.sendfile() not supportedc�F�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zy)�TestZeroCopySendfile�os.sendfilec�.�tj||�Sr*)r��_fastcopy_sendfile)r�rgrhs   r%r�z!TestZeroCopySendfile.zerocopy_fun�s���(�(��t�4�4r'c��tj|j�5}ttd�5}|jt�5|j||�ddd�tj||�ddd�ddd�|jttd��|j�y#1swY�[xYw#1swY�IxYw#1swY�MxYw)Nr4Tr�)�io�BytesIOr|r=r�r�rr�r�rkr�r\rGs   r%�test_non_regular_file_srcz.TestZeroCopySendfile.test_non_regular_file_src�s���
�Z�Z��
�
�
&�	-�#��g�t�$�
-���&�&�'8�9�0��%�%�c�3�/�0��"�"�3��,�
-�	-�	
����7�4�8�$�-�-�H�	0�0��
-�
-��	-�	-�s:�C�C�B4�C�8C�4B=�9C�C		�C�Cc��ttd�5}tj�5}|j	t
�5|j
||�ddd�tj||�|jd�|j|j�|j�ddd�ddd�y#1swY�kxYw#1swY�xYw#1swYyxYw)NrYr)
r=rr�r�r�rr�r�rk�seekr�r[r|rGs   r%�test_non_regular_file_dstz.TestZeroCopySendfile.test_non_regular_file_dst�s���
�&�$�
�	<�3�����
<���&�&�'8�9�0��%�%�c�3�/�0��"�"�3��,������� � �����T�]�]�;�
<�	<�	<�0�0��
<�
<��	<�	<�s:�C�C�B9�AC�(C�9C�>C�C	�
C�Cc�������fd�}g�tj�tjj	dd|��5|j�5\}}|j
t�5}tj||�ddd�ddd�ddd�|jjjtj�y#1swY�NxYw#1swY�RxYw#1swY�VxYw)Nc�n���s�jd��|i|��Sttjd��)Nr�)rcr r"�EBADF)r#r$r��
orig_sendfiles  ��r%rjzDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfile�s3�������D�!�$�d�5�f�5�5��e�k�k�4�0�0r'r�T)r�r)r+rjrMr�r�rcr�r r�r�r�r�r"r�)r�rjrwrxr�r�r�s     @@r%�test_exception_on_second_callz2TestZeroCopySendfile.test_exception_on_second_call�s����	1������
�
�]�]�
 �
 ��t�-5�!�7�	8����!�
8�Z�c�3��&�&�w�/�8�2��-�-�c�3�7�8�
8�	8�	
������+�+�U�[�[�9�8�8��
8�
8��	8�	8�s;�C#�C�'C�>C�C#�C�C�C 	�C#�#C,c�J�tjjdt��5}|j	�5\}}tj||�ddd�ddd�|jttd��|j�y#1swY�=xYw#1swY�AxYw)N�os.fstatrTr�)rMr�r�r rcr�r�r�r\r�r|�r�rtrwrxs    r%�test_cant_get_sizez'TestZeroCopySendfile.test_cant_get_size�s����]�]�
 �
 ���
 �
A�	 �Q����!�
 �Z�c�3��)�)�#�s�3�
 �	 �	
����7�4�8�$�-�-�H�
 �
 ��	 �	 �s"�B�B
�B�
B	�B�B"c��tjj�}d|_tjj	d|��5}|j�5\}}t
j||�ddd�ddd�|jttd��|j�y#1swY�=xYw#1swY�AxYw)Nir�riTr�)rMr��Mock�st_sizer�rcr�r�r�r\r�r|�r�r�rtrwrxs     r%�test_small_chunksz&TestZeroCopySendfile.test_small_chunks�s���
�}�}�!�!�#�� ���
�]�]�
 �
 ��$�
 �
?�	 �1����!�
 �Z�c�3��)�)�#�s�3�
 �	 �	
����7�4�8�$�-�-�H�
 �
 ��	 �	 �s$�B:�B.�2B:�.B7	�3B:�:Cc��tjj�}|jdz|_tjjd|��5}|j
�5\}}tj||�ddd�ddd�|jttd��|j�y#1swY�=xYw#1swY�AxYw)Ni@r�riTr�)
rMr�r�rVr�r�rcr�r�r�r\r�r|r�s     r%�test_big_chunkz#TestZeroCopySendfile.test_big_chunk�s���
�}�}�!�!�#���}�}�(9�:���
�]�]�
 �
 ��$�
 �
?�	 �1����!�
 �Z�c�3��)�)�#�s�3�
 �	 �	
����7�4�8�$�-�-�H�
 �
 ��	 �	 �s$�C�%B;�?C�;C	�C�Cc��tjjdt��5}|j	tt
jtt�|jdd}|j|tjjt��tjt�t!tdd��|j#tjtdz�|j	tt
jttdz�|jdd}|j|d	�ddd�y#1swYyxYw)
Nr�rrrshelloTr��3i�)rMr�r�r�r�r�rIrr�rsr�r+r;�getsizerrtrCr�)r�rt�	blocksizes   r%�test_blocksize_argz'TestZeroCopySendfile.test_blocksize_arg�s���
�]�]�
 �
 ��->�!�@�	1�CD����/�$�o�o�v�w�
@����A��q�)�I�
���Y�������(?�@����W�%��w���6��O�O�I�,�,�g��m�<����/�$�o�o�w��#�
�
G����A��q�)�I����Y��0�	1�	1�	1�s�DE
�
Ec�t�	tjj|jt	t
jd���5}|j�5\}}|jt�5tj||�ddd�ddd�ddd�tjj|j�5}tjtt�ddd�dt_y#1swY�uxYw#1swY�yxYw#1swY�}xYw#1swY�9xYw#dt_wxYw)Nr�rT)rMr�r�r�r r"�ENOTSOCKrcr�rr�r�rIrr��_USE_CP_SENDFILEr�s    r%�test_file2file_not_supportedz1TestZeroCopySendfile.test_file2file_not_supported�s���
	+����$�$��O�O� '����� =�%�?�
 �BC��^�^�%�<��#�s��*�*�+<�=�<��1�1�#�s�;�<�<�
 ����$�$�T�_�_�5�
$�������0�
$�'+�F�#�<�<��<�<��
 �
 ��
$�
$��'+�F�#�sl�AD*�D�D�/C:�D�D�1D*�D�&D*�:D�?D�D	�D�D�D*�D'�#D*�*
D7N)
r�r�r�r�r�r�r�r�r�r�r�r�r�rFr'r%r�r��s8���J�5�I�<�:�$I�I�I�1�$+r'r�z
macOS onlyc��eZdZdZd�Zy)�TestZeroCopyMACOSzposix._fcopyfilec�L�tj||tj�Sr*)r��_fastcopy_fcopyfile�posix�_COPYFILE_DATArGs   r%r�zTestZeroCopyMACOS.zerocopy_funs���)�)�#�s�E�4H�4H�I�Ir'N)r�r�r�r�r�rFr'r%r�r�s
��#�J�Jr'r�c� �eZdZd�Zd�Zd�Zejeje
jj��d�eje
ed�d�d���Zejej"d�d	��Zy
)�TestGetTerminalSizec��	tj�}|j|jd�|j|jd�y)Nr)r��get_terminal_sizer7�columns�lines)r�rQs  r%�test_does_not_crashz'TestGetTerminalSize.test_does_not_crashs?��	�
�'�'�)��������a�0�����
�
�A�.r'c��	tj�5}d|d<|d=tj�}ddd�|j	j
d�tj�5}|d=d|d<tj�}ddd�|j	|jd�y#1swY�{xYw#1swY�2xYw)N�777�COLUMNS�LINESi	�888ix)rr�r�r�r�r�r��r�r�rQs   r%�test_os_environ_firstz)TestGetTerminalSize.test_os_environ_first$s���8�
�
*�
*�
,�	.��"�C�	�N��G���+�+�-�D�	.�	
������s�+�
�
*�
*�
,�	.���I�� �C��L��+�+�-�D�	.�	
������S�)�	.�	.��	.�	.�s�B-�+B9�-B6�9Cc��tj�5}d|d<d|d<tj�}ddd�|j	j
d�|j	|jd�y#1swY�BxYw)Nrr��yyyr�r)rr�r�r�r7r�r�r�s   r%�test_bad_environz$TestGetTerminalSize.test_bad_environ3so��
�
*�
*�
,�	.��"�C�	�N� �C��L��+�+�-�D�	.�	
������a�0�����
�
�A�.�	.�	.�s�A5�5A>z
not on ttyr�zneed os.get_terminal_size()c��		tjddg�j�j�}td�t|d�f}tj�5}|d=|d=tj�}ddd�|j|�y#tt
tjf$r|jd�Y��wxYw#1swY�QxYw)N�sttyrQzstty invocation failedrrr�r�)r�r�r�r�r�r�r�r�r�rr�r�r�r�)r�rQr
r�ras     r%�test_stty_matchz#TestGetTerminalSize.test_stty_match;s���	�	4��*�*�F�F�+;�<�C�C�E�K�K�M�D���Q��L�#�d�1�g�,�/��
�
*�
*�
,�	0���G���I���-�-�/�F�	0�
	
����6�*��"�?��-�-�/�	4��M�M�2�3�	4��
	0�	0�s�3B�&C�/C�
C�CzWASI has no /dev/nullc��tj�5}|d=|d=tjtdd�5tjd��}ddd�|jjd�|j|jd�ttjdd	�
�5}tjtd|�5tjd��}ddd�ddd�|j|jd�|j|jd
�ddd�y#1swY��xYw#1swY�^xYw#1swY�bxYw#1swYyxYw)Nr�r��
__stdout__)�
�)�fallbackr�r�r5r6r7)��(r�r�)
rr�rr2r�r�r�r�r�r�r=r+�devnull)r�r�rQrUs    r%�
test_fallbackz!TestGetTerminalSize.test_fallbackSs/��
�
*�
*�
,�	-���G���I���"�"�3��d�;�
C��/�/��B��
C����T�\�\�2�.����T�Z�Z��,��b�j�j�#��8�
C�A��"�"�3��a�8�
C��/�/��B��
C�
C�
���T�\�\�2�.����T�Z�Z��,�!	-�	-�

C�
C��
C�
C��
C�
C��	-�	-�sT�"E�D.�AE�*E�D:�E�%AE�.D7	�3E�:E�?E�E	�E�EN)r�r�r�r�r�r�rMrNr+�isattyr�r�rsror�rOr�is_wasir�rFr'r%r�r�s���/�
*�/��X�������3�>�>�#8�#8�#:�;�\�J��X�����%8�9�6�8�+�8�K�+�*�X�_�_�W�_�_�&=�>�-�?�-r'r�c��eZdZ	d�Zy)�PublicAPITestsc��|jttd��gd�}ttd�stjdk(r|jd�|j
ttj�t|��y)N�__all__)rkrIr�r�r,r1r\r�r�rrQ�	ExecErrorrrrrrr	rrr�r:r-r�r
�statvfsror2)	r�ror�r+rfrcr�r�r�)r��
target_apis  r%�test_module_all_attributez(PublicAPITests.test_module_all_attributeks]�������	�2�3�<�
��2�y�!�R�W�W��_����l�+�����V�^�^�,�c�*�o�>r'N)r�r�r�r�rFr'r%r�r�hs
��H�?r'r��__main__)F)WrM�
unittest.mockr�rpr�r�r+�os.pathr"r0r�r�rLrNrwr�rrrrrrr	r
rrr
rro�warningsr�r��ImportErrorr�r�test.supportr�test.support.os_helperrrrr�r#r$rPrtr_r`r�r�r�r�r�r�r��AssertionErrorrmr&r2rCrWr\rdr{�SUPPORTS_SENDFILEr�r��TestCaser�rTr�rbr1rIr�r�r'rTrRrzrOr�r�r�r�r��mainrFr'r%�<module>r�s����
��
��	������
�
��	�6�6�6�6�������"�3�(�
�3�,��
�f�_�
�
�f�_�
�������)��

�,�,�
!�
!�'�
*��	�l�l�2�A��%�������O����=�=���z�"�#>�?��A��L�	��)�$�
�&�:0�1���	�	�b6��8�,�,�b6�J`2�8�X�.�.�`2�DC?�x��*�*�C?�LW8�8�X�.�.�W8�tM+�x��*�*�M+�`xL��(�+�+�xL�v	�Y��&L-�x��*�*�L-�^Y)�8�$�$�Y)�xG-�h�'�'�G-�TaH��aH�H����&�&�(E�F�s+�,�h�.?�.?�s+�G�s+�l����U��L�)�J�)�8�+<�+<�J�*�J�L-�(�+�+�L-�^?�X�&�&�?�$�z���H�M�M�O���yb���E���$���O���
���G��s6�*J3� 
K�+K�3J>�=J>�K�K�K�K