403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.216.202
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Python313/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Python313/Lib/test/__pycache__/test_shutil.cpython-313.opt-1.pyc
�

��i1>����SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSK
r
SSKrSSKrSSKJrJrJrJrJrJrJrJrJrJrJrJr SSKrSSKrSSKrSSK J!r! SSK"J#r# SSK$J%r%J&r& SSK"J'r' \%S-r(\%S-r)\%S	-r*\RVRYS
5r-\RVRYS5r.\RVSSS
:Hr/SSK0r0SSK1r1Sr2SSK3r3\RhRkS\6"S5S9r7Sr8Sr9S>Sjr:Sr;S?Sjr<Sr=Sr>\>"5r?Sr@"SS5rA"SS\A\R�5rC"SS \A\R�5rD"S!S"\A\R�5rE"S#S$\A\R�5rF"S%S&\A\R�5rG\!R�"5"S'S(\A\R�55rI"S)S*\I5rJ"S+S,\A\R�5rK"S-S.\R�5rL"S/S0\R�5rM"S1S2\N5rO\R�"\?(+S35"S4S5\O\R�55rQ\R�"\-(+S65"S7S8\O\R�55rR"S9S:\R�5rS"S;S<\R�5rT\US=:Xa\R�"5 gg!\a SrGNlf=f!\a Sr2GN�f=f!\a Sr3GN	f=f)@�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�[[[SS5S5e)N�EXDEV�zInvalid cross-device link)�OSError�getattr�errno)�args�kwargss  �%C:\Python313\\Lib\test\test_shutil.py�_fake_renamer&:s��
�'�%��"�-�/J�
K�K�c�F^�[R"T5U4Sj5nU$)Nc�>�[Rn[[lT"U0UD6U[l$!W[lf=f�N)�os�renamer&)r#r$�builtin_rename�funcs   �r%�wrap�mock_rename.<locals>.wrap?s4���	'��Y�Y�N�$�B�I���(��(�&�B�I���B�I�s	�&5�
A)�	functools�wraps)r.r/s` r%�mock_renamer3>s%����_�_�T��'��'��Kr'c� �[U[5(a[RR"U6n[U[
5(aUR
5n[US5nURU5 SSS5 g!,(df   g=f)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.
�xbN)	�
isinstance�tupler+�path�join�str�encode�open�write)r8�content�fps   r%�create_filer@Is`���$�����w�w�|�|�T�"���'�3����.�.�"��	
�d�D�	�R�
�����
�	�	�s�$A?�?
B
c�n�Sn[US5nSR[U5Vs/sH5n[R"[
R5R5PM7 sn5n[US5nU"X5HnURU5 M SSS5 gs snf!,(df   g=f)zBCreate a test file with an arbitrary size and random text content.c3�L# �X:�aUv� X-nX:�aMU(aUv� gg7fr*�)�total�steps  r%�chunks�write_test_file.<locals>.chunksXs,����l��J��M�E��l���K��s�$�
$i r'�wbN)
�minr9�range�random�choice�string�
ascii_lettersr;r<r=)r8�sizerF�bufsize�i�chunk�f�csizes        r%�write_test_filerUVs�����$��o�G��H�H�$�W�~�/�-�!��m�m�F�$8�$8�9�@�@�B�-�/�
0�E�	
�d�D�	�Q��D�*�E�
�G�G�E�N�+�
�	��/�	�	�s�<B!�7!B&�&
B4c��[U[5(a[RR"U6nU(aSOSnU(aSOSn[XUS9nUR
5sSSS5 $!,(df   g=f)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�utf-8��encoding)r6r7r+r8r9r<�read)r8�binary�moder[r?s     r%�	read_filer_hsV���$�����w�w�|�|�T�"���4�s�D��t�7�H�	
�d�8�	,���w�w�y�
-�	,�	,�s�A-�-
A;c���/n[[R"U55H�n[RR	X5n[RRU5(ac[RR
U5(d?URUS-5 [U5HnURUS-U-5 M M�URU5 M� U$)N�/)	�sortedr+�listdirr8r9�isdir�islink�append�rlistdir)r8�res�name�p�ns     r%rgrgvs���
�C��r�z�z�$�'�(���G�G�L�L��$��
�7�7�=�=����B�G�G�N�N�1�$5�$5��J�J�t�c�z�"��a�[���
�
�4�#�:��>�*�!�
�J�J�t��)��Jr'c�P�[[S5(dgSnSn[R"S[R"5SS9nUR
nUR
S5 SSS5 [US5n[R"S[R"5SS9nUR
nUR5nUR5n[R"XeSS5 SSS5 SSS5 Ub[R"U5 Ub[R"U5 g	g	!,(df   N�=f![aF SSS5 SSS5 Ub[R"U5 Ub[R"U5 ggf=f!,(df   O=fSSS5 O!,(df   O=fUb[R"U5 Ub[R"U5 gg!Ub[R"U5 Ub[R"U5 ff=f)
N�sendfileFrH��dir�deletes
0123456789rWr�T)
�hasattrr+�tempfile�NamedTemporaryFile�getcwdrir=r<�filenormr�unlinkr )�srcname�dstnamerS�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�"�N��'�4�
 �C��,�,�T�r�y�y�{�5�Q�UX��(�(���z�z�|���
�
��� ��K�K��Q��2� �R�!������W�%������W�%��%N�
M���!� �R�!������W�%������W�%��!��
R�Q��Q�!�
 �
 �������W�%������W�%��������W�%������W�%��s��)G0�D,�#G0�7*F+�!-F�D=�'F�(F+�0G0�,
D:�6G0�=
F
�F�F+�G0�F
�
F�
F	�F+�"	G0�+
F9�5G0�05H%c��[(ao[RS:Xa[[R"S[R
-5nUR
S5SR
5Sn[US5S:�$g)	Ni���z/usr/bin/dump -o %s�
�����i T)�AIX�sys�maxsize�
subprocess�	getoutput�
executable�split�int)�hdrs�maxdatas  r%�
_maxdataOKr��sa��
�s�s�{�{�j�(�
�
!�
!�"7�#�.�.�"H�
I���
�
�4� ��$�*�*�,�Q�/���7�2��*�,�,�r'c��\rSrSrSSjrSrg)�BaseTest�Nc��[R"U[R"5S9nUR	[
RU5 U$)zZCreate a temporary directory that will be cleaned up.

Returns the path of the directory.
)�prefixro)rs�mkdtempr+ru�
addCleanupr�rmtree)�selfr��ds   r%r��BaseTest.mkdtemp�s5��

���F��	�	��<�����	�(�(�!�,��r'rCr*)�__name__�
__module__�__qualname__�__firstlineno__r��__static_attributes__rCr'r%r�r��s��r'r�c�8�\rSrSrSr\RS5r\RS5r\RS5r	\
R"\S5S5r
\
R"\S5S5r\
R"\S5S	5rS
rSrSr\
R&"\R*S
SS:HS5\R,\R.S555rSr\
R&"\R*S
SS:HS5\R,\R.S555rSr\
R&"\R*S
SS:HS5\R,\R.S555rSrSr\
R"\R@S5S5r!\
R"\R@S5S5r"\
R&"\R@S5S5r#Sr$\RS5r%\
R"\S5S 5r&\
R"\'"\(S!5S"5\
R&"\R*S#:HS$5S%55r)\
R&"\R*S
SS:HS5\R,\R.S&555r*S'r+S(r,g
))�
TestRmTree�c�h�UR5n[RRUS5n[R"U5 [[RRUS5S5 [R"U5nURU[5 [R"U5 g)N�killme�somefile�foo)r�r+r8r9�mkdirr@�fsencode�assertIsInstance�bytes�shutilr�)r��tmp�victims   r%�test_rmtree_works_on_bytes�%TestRmTree.test_rmtree_works_on_bytes�sp���l�l�n�������c�8�,��
������B�G�G�L�L���4�e�<����V�$�����f�e�,��
�
�f�r'c�<^�UR5n[RRUS5n[R"U5 [RRUS5n[R
"X#5 UR
[[RU5 UR[RRU55 UR[RRU55 /mU4Sjn[R"X4S9 UR[T5S5 URTSS[RR 5 URTSSU5 UR#TSSS[5 g)Nro�linkc�(>�TRU5 gr*�rf�r#�errorss �r%�onerror�@TestRmTree.test_rmtree_fails_on_symlink_onerror.<locals>.onerror������M�M�$�r'�r�r�rrq�r�r+r8r9r��symlink�assertRaisesr r�r��
assertTrue�exists�lexists�assertEqual�len�assertIsrer��r�r��dir_r�r�r�s     @r%�$test_rmtree_fails_on_symlink_onerror�/TestRmTree.test_rmtree_fails_on_symlink_onerror�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�1�o�w�7r'c�6^�UR5n[RRUS5n[R"U5 [RRUS5n[R
"X#5 UR
[[RU5 UR[RRU55 UR[RRU55 /mU4Sjn[R"X4S9 UR[T5S5 URTSS[RR 5 URTSSU5 UR#TSS[5 g)Nror�c�(>�TRU5 gr*r�r�s �r%�onexc�<TestRmTree.test_rmtree_fails_on_symlink_onexc.<locals>.onexc�r�r'�r�r�rrqr��r�r�r�r�r�r�s     @r%�"test_rmtree_fails_on_symlink_onexc�-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��UR5n[RRUS5n[RRUS5n[RRUS5nX#U4Hn[R"U5 M [RRUS5n[US5 [RRUS5n[R"X75 [RRUS5n[R"XH5 [RRUS5n	[R"Xi5 [R"U5 UR[RRU55 UR[RRU55 UR[RRU55 g�	N�dir1�dir2�dir3�file1r��link1�link2�link3)r�r+r8r9r�r@r�r�r��assertFalser�r��
r�r�r�r�r�r�r�r�r�r�s
          r%�test_rmtree_works_on_symlinks�(TestRmTree.test_rmtree_works_on_symlinks�s:���l�l�n���w�w�|�|�C��(���w�w�|�|�D�&�)���w�w�|�|�C��(���T�!�A��H�H�Q�K�"������S�'�*���E�5�!������T�7�+��
�
�
�4�������T�7�+��
�
�
�4�������T�7�+��
�
�
�5� ��
�
�d�����������-�.���������t�,�-���������u�-�.r'zonly relevant on Windowsc�|^�UR5n[RRUS5n[R"U5 [RRUS5n[
R"X#5 UR[RU5 UR[[RU5 UR[RRU55 UR[RR!U55 /mU4Sjn[R"X4S9 UR#[%T5S5 UR'TSS[RR(5 UR#TSSU5 UR+TSSS[5 g)Nror�c�(>�TRU5 gr*r�r�s �r%r��BTestRmTree.test_rmtree_fails_on_junctions_onerror.<locals>.onerror
r�r'r�r�rrq�r�r+r8r9r��_winapi�CreateJunctionr�rrwr�r r�r�r�r�r�r�r�r�rer�r�s     @r%�&test_rmtree_fails_on_junctions_onerror�1TestRmTree.test_rmtree_fails_on_junctions_onerrors'����l�l�n���w�w�|�|�C��'��
������w�w�|�|�C��(�����t�*����	�(�(�$�/����'�6�=�=�$�7���������t�,�-����������-�.���	 ��
�
�d�,�����V��a�(��
�
�f�Q�i��l�B�G�G�N�N�3�������1��t�,����f�Q�i��l�1�o�w�7r'c�v^�UR5n[RRUS5n[R"U5 [RRUS5n[
R"X#5 UR[RU5 UR[[RU5 UR[RRU55 UR[RR!U55 /mU4Sjn[R"X4S9 UR#[%T5S5 UR'TSS[RR(5 UR#TSSU5 UR+TSS[5 g)Nror�c�(>�TRU5 gr*r�r�s �r%r��>TestRmTree.test_rmtree_fails_on_junctions_onexc.<locals>.onexc!r�r'r�r�rrqr�r�s     @r%�$test_rmtree_fails_on_junctions_onexc�/TestRmTree.test_rmtree_fails_on_junctions_onexcs#����l�l�n���w�w�|�|�C��'��
������w�w�|�|�C��(�����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��UR5n[RRUS5n[RRUS5n[RRUS5nX#U4Hn[R"U5 M [RRUS5n[US5 [RRUS5n[R"X75 [RRUS5n[R"XH5 [RRUS5n	[R"Xi5 [R"U5 UR[RRU55 UR[RRU55 UR[RRU55 gr�)
r�r+r8r9r�r@r�r�r�r�r�r�r�r�s
          r%�test_rmtree_works_on_junctions�)TestRmTree.test_rmtree_works_on_junctions)s@���l�l�n���w�w�|�|�C��(���w�w�|�|�D�&�)���w�w�|�|�C��(���T�!�A��H�H�Q�K�"������S�'�*���E�5�!������T�7�+�����t�+������T�7�+�����t�+������T�7�+�����u�,��
�
�d�����������-�.���������t�,�-���������u�-�.r'c���[R"UR5S9nUR[[
RU5 [
R"USS9 UR5n[RRUS5n[U5 UR[5n[
R"U5 SSS5 URWRRU5 UR[RR!U55 [
R"USS9 UR[RR!U55 UR["[
RS5 UR["[
RSSS9 [
RR$(a["O[&nURU5 [
R"USS9 SSS5 URU5 [
R"USSS9 SSS5 g!,(df   GNz=f!,(df   NQ=f!,(df   g=f)N�roT��
ignore_errors�tstfile�invalid��dir_fd)r�r�)rs�mktempr�r��FileNotFoundErrorr�r�r+r8r9r@�NotADirectoryErrorr��	exception�filenamer�r��	TypeError�avoids_symlink_attacks�NotImplementedError)r�r��tmpdir�cm�excs     r%�test_rmtree_errors�TestRmTree.test_rmtree_errors?s����?�?�t�|�|�~�6�����+�V�]�]�H�E��
�
�h�d�3�������7�7�<�<��	�2���H��
�
�
�1�
2�b��M�M�(�#�3�������.�.��9���������x�0�1��
�
�h�d�3���������x�0�1����)�V�]�]�D�9����)�V�]�]�D���M�!�=�=�?�?�i�EX��
�
�
�s�
#��M�M�(�9�5�$�
�
�
�s�
#��M�M�(�9�D�I�$�
#�3�
2��$�
#��
#�
#�s$�-H7�(I	�I�7
I�	
I�
I(c��^�UR5n[RRUS5n[	U5 /mU4Sjn[
R"X#S9 UR[T5S5 URTSS[R5 URTSSU5 URTSSS[5 URTSSSRU5 URTSS[R5 URTSSU5 URTSSS[5 URTSSSRU5 g)Nr�c�(>�TRU5 gr*r�r�s �r%r��6TestRmTree.test_rmtree_errors_onerror.<locals>.onerror_r�r'r�rqrr��r�r+r8r9r@r�r�r�r�r��scandirr�r�r��rmdir)r�r�r�r�r�s    @r%�test_rmtree_errors_onerror�%TestRmTree.test_rmtree_errors_onerrorZs6���������7�7�<�<��	�2���H����	 ��
�
�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�<r'c��^�UR5n[RRUS5n[	U5 /mU4Sjn[
R"X#S9 UR[T5S5 URTSS[R5 URTSSU5 URTSS[5 URTSSRU5 URTSS[R5 URTSSU5 URTSS[5 URTSSRU5 g)Nr�c�(>�TRU5 gr*r�r�s �r%r��2TestRmTree.test_rmtree_errors_onexc.<locals>.onexcqr�r'r�rqrr�r)r�r�r�r�r�s    @r%�test_rmtree_errors_onexc�#TestRmTree.test_rmtree_errors_onexcls&���������7�7�<�<��	�2���H����	 ��
�
�h�,�����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��.�.��9r'N��cygwinz2This test can't be run on Cygwin (issue #1071513).c��SUl[R"[5 UR	[
R[5 [RR[S5Ul	[RR[S5Ul
[R"UR5 [R"UR5 [R"[5Rn[R"UR5Rn[R"UR5Rn[R[R -n[R""URU5 [R""URU5 [R""[U5 UR	[R"[U5 UR	[R"URU5 UR	[R"URU5 [
R"[UR$S9 UR'URSS5 g)Nr�a�br�rz1Expected call to onerror function did not happen.)�
errorStater+r�rr�r�r�r8r9�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_error�TestRmTree.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��URS:a�U[RLaURX R5 OqU[R
LaURX R5 OBURU[R5 URU[UR/5 UR[US[55 U=RS-
slgURU[R
5 URU[5 UR[US[55 SUlg)Nrqrr�r)rr+rwr�rrrr�rc�assertInrr��
issubclassr �r�r.�argr�s    r%r� TestRmTree.check_args_to_onerror�s����?�?�Q���r�y�y� �� � ��&:�&:�;�����!�� � ��&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��SUl[R"[5 UR	[
R[5 [RR[S5Ul	[RR[S5Ul
[R"UR5 [R"UR5 [R"[5Rn[R"UR5Rn[R"UR5Rn[R[R -n[R""URU5 [R""URU5 [R""[U5 UR	[R"[U5 UR	[R"URU5 UR	[R"URU5 [
R"[UR$S9 UR'URSS5 g)Nrrrr�rz/Expected call to onexc function did not happen.)rr+r�rr�r�r�r8r9rrrrrrrrr�check_args_to_onexcr�rs     r%�test_on_exc�TestRmTree.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��URS:a�U[RLaURX R5 OqU[R
LaURX R5 OBURU[R5 URU[UR/5 UR[U[55 U=RS-
slgURU[R
5 URU[5 UR[U[55 SUlg)Nrqr�r)rr+rwr�rrrr�rcr$rr�r6r r&s    r%r*�TestRmTree.check_args_to_onexc�s����?�?�Q���r�y�y� �� � ��&:�&:�;�����!�� � ��&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� ^^�SmSmU4SjnU4Sjn[R"[5 UR[R
[5 [RR[S5Ul[RR[S5Ul	[R"UR5 [R"UR5 [R"[5Rn[R"UR5Rn[R"UR5Rn[R[R-n[R "URU5 [R "URU5 [R "[U5 UR[R [U5 UR[R URU5 UR[R URU5 [R
"[XS9 UR#T5 UR%T5 g)NFc�
>�Smg�NTrC)r#�onerror_calleds �r%r��7TestRmTree.test_both_onerror_and_onexc.<locals>.onerror�s���!�Nr'c�
>�Smgr1rC)r#�onexc_calleds �r%r��5TestRmTree.test_both_onerror_and_onexc.<locals>.onexc�s����Lr'rr)r�r�)r+r�rr�r�r�r8r9rrrrrrrrrr�r�)	r�r�r�rrrr r2r5s	       @@r%�test_both_onerror_and_onexc�&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�;�����%�����(r'c�^�[RmU4SjnU[l[R"[5 [	[S4S5 [
R"[5 T[lg!T[lf=f)Nc�<>�U[:wa
[5eT"U5$r*)rr )�fnr#r$�
orig_lstats   �r%�raiser�FTestRmTree.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raisers�����<�!�)�O�%�b�>�)r'r�)r+�lstatr�rr@r�r�)r�r=r<s  @r%�+test_rmtree_does_not_choke_on_failing_lstat�6TestRmTree.test_rmtree_does_not_choke_on_failing_lstatsT���
	"����J�
*�
�B�H��H�H�V�������/��M�M�&�!�!�B�H��z�B�H�s�A'A6�6
Bc��^�[R[R[R[R1[R
:*=(aI [R[R;=(a! [R[R;nU(a�UR[R5 UR[RR5 UR5n[RR!US5n[R""U5 [R$n"SS[&5mU4SjnU[lUR)T[RU5 U[lgUR+[R5 UR+[RR5 g!W[lf=f)Nrc��\rSrSrSrg)�HTestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>.Calledi7rCN)r�r�r�r�r�rCr'r%�CalledrD7s��r'rEc�>�Ter*rC)r#r$rEs  �r%�_raiser�ITestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser8s��� �Lr')r+r<rrwr�supports_dir_fdrc�supports_fd�supports_follow_symlinksr�r��_use_fd_functionsr�r�r�r8r9r��_rmtree_safe_fd�	Exceptionr�r�)r�rL�tmp_dirr��real_rmtreerGrEs      @r%�-test_rmtree_uses_safe_fd_version_if_available�8TestRmTree.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
�7AG�
G*zrequires safe rmtreec�P^^^�UR5n[RRUS5n[R"U5 [RRUS5n[R"U5 UU4SjnSm[
R"[SU5mUR[5 [R"U5 SSS5 SSS5 UR[RRU55 URTS5 Sm/mU4Sjn[
R"[SU5m[R"X%S9 SSS5 UR[T5S5 URTSSU5 URTSS	U5 URTS	SU5 URTS	S	U5 URTS5 g!,(df   GN(=f!,(df   GN2=f!,(df   N�=f)
Nr�r�c�*>�T"U5 TS-
m[e)Nr��r )�fd�close_count�
orig_closes ��r%�close�4TestRmTree.test_rmtree_fails_on_close.<locals>.closeKs����r�N��1��K��Mr'rrYrqc�(>�TRU5 gr*r�r�s �r%r��4TestRmTree.test_rmtree_fails_on_close.<locals>.onexcZr�r'r�r�)r�r+r8r9r�r�	swap_attrr�r r�r�r�rdr�r�r�)	r�r�r�r�rYr�rWr�rXs	      @@@r%�test_rmtree_fails_on_close�%TestRmTree.test_rmtree_fails_on_closeBs�����l�l�n���w�w�|�|�C��(��
������w�w�|�|�D�&�)��
�����	���
�
�
�r�7�E�
2�j��"�"�7�+��
�
�d�#�,�3�	
������
�
�d�+�,�����a�(�����	 �
�
�
�r�7�E�
2�j��M�M�$�,�3�����V��a�(��
�
�f�Q�i��l�E�*�������1��t�,��
�
�f�Q�i��l�E�*�������1��t�,�����a�(�!,�+��3�
2��3�
2�s0�%H�;G3�H�H�3
H	�=H�
H�
H%zdir_fd is not supportedc��UR5nSn[RRX5n[R"U[R
5nUR
[RU5 [R"U5 [R"[RRUS55 [[RRUSS5S5 UR[RRU55 [R"X$S9 UR[RRU55 g)Nr��subdirr�r�r�)r�r+r8r9r<�O_RDONLYr�rYr�r@r�r�r�r�r�)r�rOr��fullnamer�s     r%�test_rmtree_with_dir_fd�"TestRmTree.test_rmtree_with_dir_fdes����,�,�.�����7�7�<�<��0������"�+�+�.��������&�)�
�����
��������h��1�2��B�G�G�L�L��8�Z�@�%�H���������x�0�1��
�
�f�,����������1�2r'zdir_fd is supportedc��UR5nUR[5 [R"USS9 SSS5 UR[RRU55 g!,(df   N==f)Nrr�)	r�r�r�r�r�r�r+r8r�)r�rOs  r%�#test_rmtree_with_dir_fd_unsupported�.TestRmTree.test_rmtree_with_dir_fd_unsupportedssQ���,�,�.��
�
�
�2�
3��M�M�'�!�,�4���������w�/�0�4�
3�s�A3�3
Bc���[R"UR5S9up[R"U5 UR[[RU5 [R"U5 g�Nr�)
rs�mkstempr�r+rYr�r�r�r��remove)r��handler8s   r%�test_rmtree_dont_delete_file�'TestRmTree.test_rmtree_dont_delete_filezsH���'�'�D�L�L�N�;���
��������,�f�m�m�T�B�
�	�	�$�r'c��[R"[5 [RR	[S5n[RR	[S5n[R"U5 [R
"X5 UR
[[RU5 [R"USS9 [R"[SS9 g![R"[SS9 f=f)N�cheese�shopTr�)
r+r�rr8r9r�r�r r�r��r�rzr{s   r%�test_rmtree_on_symlink�!TestRmTree.test_rmtree_on_symlink�s���	�����	6��'�'�,�,�v�x�0�C��'�'�,�,�v�v�.�C��H�H�S�M��J�J�s� ����g�v�}�}�c�:��M�M�#�T�2��M�M�&��5��F�M�M�&��5�s�B.C$�$C?c�V�[R"[5 [RR	[S5n[RR	[S5n[R"U5 [[RR	US55 [R"X5 UR[[RU5 [R"USS9 [R"[SS9 g![R"[SS9 f=f)Nrqrr�spamTr�)r+r�rr8r9r@r�r�r�r r�r�rss   r%�test_rmtree_on_junction�"TestRmTree.test_rmtree_on_junction�s���
�����		6��'�'�,�,�v�x�0�C��'�'�,�,�v�v�.�C��H�H�S�M�������S�&�1�2��"�"�3�,����g�v�}�}�c�:��M�M�#�T�2��M�M�&��5��F�M�M�&��5�s�CD
�
D(�mkfifo�requires os.mkfifo()�vxworks�%fifo requires special path on VxWorksc���[R"[5 UR[5 [
R"[5 SSS5 UR[RR[55 [R"[5 [R"[5 [R"[RR[S55 [
R"[5 URR[55 g!,(df   N�=f![R"[5 f=f)N�mypipe)r+rzrr�r�r�r�r�r8r�rwr�r9r��r�s r%�test_rmtree_on_named_pipe�$TestRmTree.test_rmtree_on_named_pipe�s���	�	�	�&��	��"�"�#5�6��
�
�f�%�7��O�O�B�G�G�N�N�6�2�3��I�I�f��
�����
�	�	�"�'�'�,�,�v�x�0�1��
�
�f�����������/�0�7�6��
�I�I�f��s"�E�D?�:E�?
E
�	E�E,c	�`^^^^	�UUUU	4Sjn[R"[5 [/[S5Vs/sH*n[RR[SU35PM, sn-m	T	SSS2mT	SSS2mTHn[R"U5 M THn[
U5 M T	Vs/sH#n[R"U5RPM% snm[R[R-n[T	5Hn[R"X45 M [R"[US9 gs snfs snf! [T	T5H-up5[R"X55 M![ a M+f=f [R"[5 e=f)Nc�v>^�[U[5(de[T	T5Hup4[R"X45 M [U4SjT55nTH nX5:wdM
[R"U5 M" [U4SjT55nTH nX5:wdM
[R"U5 M" g)Nc3�6># �UHoT:wdM
Uv� M g7fr*rC��.0rjr8s  �r%�	<genexpr>�PTestRmTree.test_rmtree_deleted_race_condition.<locals>._onexc.<locals>.<genexpr>�s����5�4�a��9���4���	�	c3�6># �UHoT:wdM
Uv� M g7fr*rCr�s  �r%r�r��s����6�5�a��I���5�r�)r6�PermissionError�zipr+r�nextrrw)
r;r8r�rjr^�keep�dirs�files�	old_modes�pathss
 `    ����r%�_onexc�=TestRmTree.test_rmtree_deleted_race_condition.<locals>._onexc�s�����c�?�3�3���u�i�0�������!�1��5�4�5�5�D����9��H�H�Q�K���6�5�6�6�D����9��I�I�a�L�r'r
�childr�rqr�)r+r�rrJr8r9r@rrrr�reversedrr�r�r�r )
r�r�rQr8r r^r�r�r�r�s
      @@@@r%�"test_rmtree_deleted_race_condition�-TestRmTree.test_rmtree_deleted_race_condition�s]���	!�	!�$	�������%*�1�X�/�%-���G�G�L�L��5����=�%-�/�/���Q�T��T�{���a�d��d����D��H�H�T�N���D�����8=�=�u�t�R�W�W�T�]�*�*�u�=�	��<�<����,���U�O�D��H�H�T�$�$�
	��M�M�&��/��#/��>��	�!�%��3�
����H�H�T�(�������4�

�M�M�&�!��s;�1E	�8*E�/E�F-�'E?�=F-�?
F
�	F-�F
�
 F-c�$�SnUS-n[RR"[/S/U-Q76n[R"U5 [
R"U5 [R"[5 SSS5 g!,(df   g=f)N�(�
r�)	r+r8r9r�makedirsr�infinite_recursionr�r�)r��recursion_limit�directory_depth�bases    r%�!test_rmtree_above_recursion_limit�,TestRmTree.test_rmtree_above_recursion_limit�sa����)�B�.���w�w�|�|�F�?�s�e�o�&=�?��
���D��
�
'�
'��
8��M�M�&�!�9�
8�
8�s�B�
B)rrr)-r�r�r�r�r�r�skip_unless_symlinkr�r�r��unittest�
skipUnlessr�r�r�r�r�rr�skipIfr��platform�skip_if_dac_override�skip_unless_working_chmodr!rr+r*r7r@rQr�rLr^rdrgrnrtrxrrr+r�r�r�r�rCr'r%r�r��s/����"�"�8�#�8�$�"�"�5�#�5�$�"�"�/�#�/�*����"<�=�8�>�8�&����"<�=�5�>�5�&����"<�=�/�>�/�*J�6=�$:�$�_�_�S�\�\�"�1�%��1�I�K��#�#��(�(�N�)�$�K�N�6 �6�_�_�S�\�\�"�1�%��1�I�K��#�#��(�(�L�)�$�K�L�6 �6�_�_�S�\�\�"�1�%��1�I�K��#�#��(�(�")�)�$�K�")�H"� C�0����1�1�3I�J� )�K� )�D����1�1�3L�M�3�N�3��_�_�V�-�-�/D�E�1�F�1���"�"�6�#�6�����"<�=�6�>�6������X�.�0F�G�
�_�_�S�\�\�Y�.�;�=�1�=�H�1��_�_�S�\�\�"�1�%��1�I�K��#�#��(�(�3�)�$�K�3�j"r'r�c��\rSrSrSrSr\RS5rSr	Sr
Sr\RRS5S	5rS
r\R""\"\S5S5\R\R("\R,S
:HS5S555rSr\RS5r\RS5rSrSrSrg)�TestCopyTreei�c	�P�UR5n[RRUR5S5nUR	[
RU5 UR	[
R[RRU55 [US4S5 [R"[RRUS55 [USS4S5 [
R"X5 UR[RR[RRUS555 UR[RR[RRUS555 UR[RR[RRUSS555 [US45nURUS5 [USS45nURUS5 g)N�destination�test.txt�123�test_dir�456)r�r+r8r9r�r�r��dirnamer@r��copytreer��isfilerdr_r��r��src_dir�dst_dir�actuals    r%�test_copytree_simple�!TestCopyTree.test_copytree_simple�sc���,�,�.���'�'�,�,�t�|�|�~�}�=������
�
�w�/�����
�
�r�w�w���w�'?�@��W�j�)�5�1�
��������g�z�2�3��W�j�*�5�u�=�����)���������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	���UR5nUR5nUR[RU5 UR[RU5 [	US4S5 [
R"[
RRUS55 [
R"[
RRUS55 [	USS4S5 [	USS4S5 [R"XSS9 UR[
RR[
RRUS555 UR[
RR[
RRUS555 UR[
RR[
RRUSS555 [US45nURUS5 [USS45nURUS5 UR[ 5 [R"XS	S9 SSS5 g!,(df   g=f)
Nznonexisting.txtr��existing_dirzexisting.txtzwill be replacedzhas been replacedT)�
dirs_exist_okF)r�r�r�r�r@r+r�r8r9r�r�r�rdr_r�r��FileExistsErrorr�s    r%�test_copytree_dirs_exist_ok�(TestCopyTree.test_copytree_dirs_exist_oks����,�,�.���,�,�.������
�
�w�/�����
�
�w�/��W�/�0�%�8�
��������g�~�6�7�
��������g�~�6�7��W�n�n�=�?Q�R��W�n�n�=�?R�S������=���������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�
�
�
��
/��O�O�G�E�B�0�
/�
/�s�I"�"
I0c	��UR5n[RRUS5n[RRUS5n[RRUS5n[R"U5 [R"U5 [US4S5 [RRUS5n[RRUS5n[R"[RRUS5U5 [[S5(a6[R"U[R[R-5 [[S	5(a:[[S
5(a%[R"U[R5 [R"U5n[R "X#SS9 UR#[RR%[RRUSS555 [R&"[RRUSS55n[R(S
:XaUR+S5(aUSSnUR-U[RRUS55 [R"U5n	[[S5(a&UR-U	R.UR.5 [[S	5(a'UR-U	R0UR05 gg)Nrzr{�subzfile.txtr�r�zsub/link�lchmod�lchflags�	UF_NODUMPT��symlinks�ntz\\?\�)r�r+r8r9r�r@r�rrr�r�S_IRWXU�S_IRWXOr�r�r?r�r�r�re�readlinkri�
startswithr�r�st_flags)
r�rOr�r��sub_dir�src_link�dst_link�src_statr��dst_stats
          r%�test_copytree_symlinks�#TestCopyTree.test_copytree_symlinks s���,�,�.���'�'�,�,�w��.���'�'�,�,�w��.���'�'�,�,�w��.��
�����
������W�j�)�5�1��7�7�<�<���0���7�7�<�<���4��
�
�
�2�7�7�<�<���4��	��2�x� � ��I�I�h����t�|�|� ;�<��2�z�"�"�w�t�[�'A�'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
��[RRn[RRnUR	5nU"UR	5S5n[US4S5 [US4S5 [R"U"US55 [USS4S5 [R"U"US55 [USS4S5 [R"U"USS55 [R"U"USS	55 [USSS4S5 [USS	S
4S5 [R"SS5n[R"X4US9 URU"U"US555 URU"U"US555 URU"U"US555 [R"U5 [R"SS
5n[R"X4US9 URU"U"US555 URU"U"USS	555 URU"U"USS555 [R"U5 Sn[R"X4US9 URU"U"USS	S
555 URU"U"USS555 [R"U5 [R"U5 [R"[RRU55 g![R"U5 f=f![R"U5 f=f![R"U5 f=f![R"U5 [R"[RRW55 f=f)Nr�r�r�ztest.tmpr�r��	test_dir2ra�subdir2ztest.pyz*.tmp��ignorezsubdir*c�h�/nUH�n[RRX5n[RRU5(a*UR	5SS:XaURU5 Mp[RR
U5SS;dM�URU5 M� U$)Nr�raz.py)r+r8r9rdr�rf�splitext)rz�namesrhrir8s     r%�_filter�8TestCopyTree.test_copytree_with_exclude.<locals>._filterhs����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+r8r9r�r�r@r�r��ignore_patternsr�r�r�r�r�)r�r9r�r�r��patternsr�s       r%�test_copytree_with_exclude�'TestCopyTree.test_copytree_with_exclude@s����w�w�|�|���������,�,�.��:	4��4�<�<�>�=�9�G���*�-�u�5���*�-�u�5��H�H�T�'�:�.�/���*�j�9�5�A��H�H�T�'�;�/�0���+�z�:�E�B��H�H�T�'�;��9�:��H�H�T�'�;�	�:�;���+�x��D�e�L���+�y�)�D�e�L�
'�!�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'M3�.BL"�4M3�BL=�M3�*AM�M3�"L:�:M3�=M�M3�M0�0M3�3AN>c
�D^^�[RRn[RRnTR	5nU"US5n[R
"U"U55 [R
"U"US55 [R
"[RRUSS55 [
USSS4S5 /mUU4SjnU"TR	5S5n[R"XFUS9 TRU"U"USSS555 U"TR	5S5n[R"[U5XeS9 TRU"U"USSS555 U"TR	5S5n[[R"U55S	nTRU[R5 [R"XvUS9 TRU"U"USSS555 TR[!T5S
5 g)N�sourcer�rar�r�c�>�TRU5 TRU[5 TRU[5 TR	[U5[[
U555 UHnTRU[5 M /$r*)rfr�r:�listr�r��set)rzr�ri�invokationsr�s   ��r%�_ignore�?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignore�sl������s�#��!�!�#�s�+��!�!�%��.����S��Z��S��Z��9����%�%�d�C�0���Ir'r�r�r�	)r+r8r9r�r�r�r@r�r�r�rr�rr��DirEntryr�r�)	r�r9r�rOr�r�r��
src_dir_entryr�s	`       @r%�!test_copytree_arg_types_of_ignore�.TestCopyTree.test_copytree_arg_types_of_ignore�s�����w�w�|�|���������,�,�.���w��)��
����g���
����g�z�*�+�
��������g�z�8�<�=��W�j�(�J�?��G���	��t�|�|�~�}�5�������9�����t�G�Z��$.� 0�1�	2��t�|�|�~�}�5�������)�7�C�����t�G�Z��$.� 0�1�	2��t�|�|�~�}�5���R�Z�Z��0�1�!�4�
����m�R�[�[�9����
�w�?�����t�G�Z��$.� 0�1�	2�	
����[�)�1�-r'c	���UR5n[RRUS5n[R"U5 [RRUS5nUR[RU5 [R"US5 [US4S5 [R"[RRUS5S5 [US4S5 [R"[RRUS5S5 [R"US	9nUR[RU5 [R"US5 [R"X#5 UR[R"U5R[R"U5R5 UR[R"[RRUS55R[R"[RRUS55R5 UR[R"[RRUS55R[R"[RRUS55R5 [RRU[RR!U5S
5nUR[R"U5R[R"U5R5 g)Nr�r�i�zpermissive.txtr�zrestrictive.txtr�i�r�r�)r�r+r8r9r�r�r�r�rr@rsrr�r�rrr�)r�rOr�r��restrictive_subdir�restrictive_subdir_dsts      r%�!test_copytree_retains_permissions�.TestCopyTree.test_copytree_retains_permissions�s1���,�,�.���'�'�,�,�w��1��
������'�'�,�,�w�
�6������
�
�w�/�
����%� ��W�.�/��7�
��������g�'7�8�%�@��W�/�0�%�8�
��������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��UR5n[RRUR5S5nUR	[
RU5 UR	[
R[RRU55 [S5Ul	UR[
R5 [
R"X#5 SSS5 g!,(df   g=f)Nr�zka-boom)
r�r+r8r9r�r�r�r�r�rr�rr�)r��
mock_patchr�r�s    r%�test_copytree_winerror�#TestCopyTree.test_copytree_winerror�s���
�,�,�.���'�'�,�,�t�|�|�~�}�=������
�
�w�/�����
�
�r�w�w���w�'?�@�!0��!;�
��
�
�
�v�|�|�
,��O�O�G�-�-�
,�
,�s�C+�+
C9c�:^^^^�UUUU4Sjn/mTR5m[R"TR5S9m[[R
R
TS55 [R"TTUS9 TR[T5S5 g)Nc�@>�TRS5 TRU[5 TRU[5 TRU[R
R
TS55 TRU[R
R
TS55 g�Nr�)rfr�r:r�r+r8r9)rrr{�flagr�rzs  ����r%�custom_cpfun�ETestCopyTree.test_copytree_custom_copy_function.<locals>.custom_cpfun�sm����K�K����!�!�!�S�)��!�!�!�S�)����Q������S�%� 8�9����Q������S�%� 8�9r'r�r���
copy_functionr�)r�rsr�r@r+r8r9r�r�r�r�)r�r�r{r�rzs` @@@r%�"test_copytree_custom_copy_function�/TestCopyTree.test_copytree_custom_copy_function�sn���	:�	:����l�l�n���o�o�$�,�,�.�1���B�G�G�L�L��e�,�-�����S��=�����T��A�&r'rzr{r|r}c�v�[R"[5 [RR	[S5n[R"U5 [RR	US5n[R
"U5 [R"[[5 URS5 [R "[SS	9 [R "[SS	9 g![anURSU-5 SnAN�SnAff=f![RaQnURSnUR[U5S5 USupVnURSU-U5 SnAN�SnAff=f![R "[SS	9 [R "[SS	9 f=f)
Nrar�os.mkfifo(): %sz$shutil.Error should have been raisedrr�z`%s` is a named pipeTr�)r+r�rr8r9rzr��skipTestr�r��TESTFN2�failrr#r�r�r�)r�ra�pipe�er�rzr{�	error_msgs        r%�test_copytree_named_pipe�%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�#��)�� � �!7�$�!>�	�J�J��	
K��
�M�M�&��5��M�M�'��6�s[�AF�7C1�D�-F�1
D�;D�F�D�F�F�0AE<�7F�<F�F�4F8c�^�UR5n[RRUR5S5n[	US4S5 [R
"[RRUS55 [	USS4S5 /mU4Sjn[R"XUS9 UR[T5S5 g)	Nr�r�r�r�r�c�*>�TRX45 gr*r�)rzr{�copieds  �r%�_copy�6TestCopyTree.test_copytree_special_func.<locals>._copys����M�M�3�*�%r'rrq)
r�r+r8r9r@r�r�r�r�r�)r�r�r�rrs    @r%�test_copytree_special_func�'TestCopyTree.test_copytree_special_funcs�����,�,�.���'�'�,�,�t�|�|�~�}�=���W�j�)�5�1�
��������g�z�2�3��W�j�*�5�u�=���	&�	�����>�����V��a�(r'c�V�UR5n[RRUS5n[	US5 [RRUS5n[R
"U5 X4Hmn[R"S[RRUS55 [R"U[RRUS55 Mo [RRUR5S5nUR[[RX5 [RRUR5S5n[R"XS	S
9 [R"U5H*upgnURSU5 URSU5 M, [RRUR5S5n[R"XS	S9 URS[R"U55 g)
Nr��abc�dir_a�
IDONTEXIST�broken�validr��destination2T)�ignore_dangling_symlinks�destination3r�)r�r+r8r9r@r�r�r�rr�r��walk�assertNotInr$rc)	r�r��
valid_filerr�r��rootr�r�s	         r%�test_copytree_dangling_symlinks�,TestCopyTree.test_copytree_dangling_symlinkssc���,�,�.���W�W�\�\�'�:�6�
��J��&������W�g�.��
�������A��J�J�|�R�W�W�\�\�!�X�%>�?��J�J�z�2�7�7�<�<��7�#;�<� �
�'�'�,�,�t�|�|�~�}�=�����%����'�C��'�'�,�,�t�|�|�~�~�>������4�H�!#����!1��D�����X�u�-��M�M�'�5�)�"2�
�'�'�,�,�t�|�|�~�~�>������4�8��
�
�j�"�*�*�W�"5�6r'c	���UR5n[RRUR5S5n[R"[RRUS55 [[RRUSS55 [R"[RRUS5[RRUS5SS9 [R"XSS9 UR[RR[RRUS555 URS[R"[RRUS555 [RRUR5S	5n[R"XSS9 UR[RR[RRUS555 URS[R"[RRUS555 g)
Nr��real_dirr��link_to_dirT��target_is_directoryFr�r)r�r+r8r9r�r@r�r�r�r�rer$rcr�)r�r�r�s   r%�test_copytree_symlink_dir�&TestCopyTree.test_copytree_symlink_dir)sc���,�,�.���'�'�,�,�t�|�|�~�}�=��
��������g�z�2�3��B�G�G�L�L��*�j�A�B�
�
�
�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�Sr'c�B�UR5nUS-nUR[RUS5 [R
R
US5n[US5 [R"X5nURS/[R"U55 g)N�destTr�)r�r�r�r�r+r8r9r@r�r�rc)r�r�r�rz�rvs     r%�test_copytree_return_value�'TestCopyTree.test_copytree_return_value<sq���,�,�.���F�"������
�
�w��5��g�g�l�l�7�E�*���C���
�_�_�W�
.�����%��"�*�*�R�.�1r'c���UR5nUR[RUSS9 [R
R
USS5n[R
R
USS5n[R"U5 [R
R
US5n[US5 [R"X#5nURS/[R"U55 g)NTr��t�pg�
somevendorz1.0�pol)r�r�r�r�r+r8r9r�r@r�r�rc)r��base_dirr�r�rzr.s      r%�test_copytree_subdirectory�'TestCopyTree.test_copytree_subdirectoryFs����<�<�>������
�
�x�t��D��'�'�,�,�x��d�3���'�'�,�,�w��e�<��
���G���g�g�l�l�7�E�*���C���
�_�_�W�
.�����%��"�*�*�R�.�1r'rCN)r�r�r�r�r�r�rr�r�r�r�r�r��mock�patchr�rr�rrr+r�r�r�r
rr#r*r/r7r�rCr'r%r�r��s���(�&C�2�"�"�C�#�C�>?4�B(.�TC�6�]�]����$�.�%�.�'�"�����X�.�0F�G��"�"�
�_�_�S�\�\�Y�.�;�=�7�=�#�H�7�.)��"�"�7�#�7�4�"�"�T�#�T�$2�
2r'r�c��\rSrSr\R
S5r\R"\	"\
S5S5\R
S55r\R"\	"\
S5S5\R
S55r
\R
S5r\R"\	"\
S	5=(a \	"\S
5=(a	 \	"\S5S5S
5r\R"S5r\R
\R"\R&S555rSrSr\R
S5r\R"\	"\
S5S5S5r\R
S5r\R"S5rSrSrSrSr\R
S5r\R"\	"\
S5S5S5r \R
S 5r!\R"\	"\
S!5S"5\R"\"RFS#:HS$5S%55r$S&r%S'r&\R"\'=(d \(=(d \)S(5\R"\*S)5S*55r+S+r,S,r-g-).�TestCopyiRc��UR5n[RRUS5n[RRUS5n[RRUS5n[RRUS5n[	US5 [	US5 [R
"X$5 [R
"X55 [R"U[R[R-5 [R"U[R5 UR[R"U5R[R"U5R5 [R"X#5 UR[R"U5R[R"U5R5 [R"U[R5 [R"XC5 UR[R"U5R[R"U5R5 [R"U[R5 [R"X%5 UR[R"U5R[R"U5R5 [R"U[R5 [R"XE5 UR[R"U5R[R"U5R5 g)Nr��bar�baz�quux)r�r+r8r9r@r�rrr��S_IRWXGr��assertNotEqualrr��copymoder��r�rOrzr{r�r�s      r%�test_copymode_follow_symlinks�&TestCopy.test_copymode_follow_symlinksVs����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���7�7�<�<���0���C����C���
�
�
�3�!�
�
�
�3�!�
����d�l�l�4�<�<�/�0�
����d�l�l�#����B�G�G�C�L�0�0�"�'�'�#�,�2F�2F�G�����!���������-�-�r�w�w�s�|�/C�/C�D�	����d�l�l�#�����&���������-�-�r�w�w�s�|�/C�/C�D�
����d�l�l�#�����&���������-�-�r�w�w�s�|�/C�/C�D�
����d�l�l�#�����+���������-�-�r�w�w�s�|�/C�/C�Dr'r�zrequires os.lchmodc��UR5n[RRUS5n[RRUS5n[RRUS5n[RRUS5n[	US5 [	US5 [R
"X$5 [R
"X55 [R"U[R[R-5 [R"U[R5 [R"U[R[R-5 [R"U[R5 [R"U5Rn[R"XESS9 UR[R "U5R[R "U5R5 UR[R"U5RU5 [R"U[R5 [R"XCSS9 UR[R"U5R[R"U5R5 [R"U[R5 [R"X%SS9 UR[R"U5R[R"U5R5 g�Nr�r>r?r@F��follow_symlinks)r�r+r8r9r@r�rrr�rAr�r�rr�rCr�r?)r�rOrzr{r�r��old_modes       r%� test_copymode_symlink_to_symlink�)TestCopy.test_copymode_symlink_to_symlinkus����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���7�7�<�<���0���C����C���
�
�
�3�!�
�
�
�3�!�
����d�l�l�4�<�<�/�0�
����d�l�l�#�
�	�	�(�D�L�L����5�6�
�	�	�(�D�L�L�)��7�7�3�<�'�'������E�B�������(�+�3�3����(�+�3�3�	5���������-�-�x�8�
�	�	�(�D�L�L�)�����u�=���������-�-�r�w�w�s�|�/C�/C�D�
�	�	�(�D�L�L�)�����u�=���������-�-�r�w�w�s�|�/C�/C�Dr'z requires os.lchmod to be missingc���UR5n[RRUS5n[RRUS5n[RRUS5n[RRUS5n[	US5 [	US5 [R
"X$5 [R
"X55 [R"XESS9 grH)r�r+r8r9r@r�r�rCrDs      r%�*test_copymode_symlink_to_symlink_wo_lchmod�3TestCopy.test_copymode_symlink_to_symlink_wo_lchmod�s����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���7�7�<�<���0���C����C���
�
�
�3�!�
�
�
�3�!�����E�Br'c���UR5n[RRUS5n[RRUS5n[RRUS5n[RRUS5n[	US5 [R
"U5n[R"X&RURS-
45 [	US5 UR[R
"U5R[R
"U5R5 [R"X$5 [R"X55 [[S5(a%[R"U[
R5 [[S5(a:[[
S5(a%[R"U[
R5 [R "U5n[[S5(aO["R$"XES	S
9 URUR&[R
"U5R&5 ["R$"XESS
9 [R "U5n[R[R(;a0SH*n	UR+[-Xy5[-X�5S
-5 M, [[S5(a&UR/UR&UR&5 [[S5(a7[US5(a&UR/UR0UR05 ["R$"XCSS
9 UR3[5[R
"U5R[R
"U5R-
5S:5 g)Nr�r>r?�quxgE@r�r�r�TrIF��st_atime�st_mtimer�r�g�������?)r�r+r8r9r@r�utimerTrUrBr�rrr�r�r�r�r?r��copystatrrK�assertLessEqualr!r�r�r��abs)
r�rOrzr{r�r�r��
src_link_stat�
dst_link_stat�attrs
          r%�test_copystat_symlinks�TestCopy.test_copystat_symlinks�s����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���7�7�<�<���/���C����7�7�3�<��
����(�(��(�(�4�/�1�	2��C������B�G�G�C�L�1�1�2�7�7�3�<�3H�3H�I�
�
�
�3�!�
�
�
�3�!��2�x� � ��I�I�h����-��2�z�"�"�w�t�[�'A�'A��K�K��$�.�.�1�����*�
��2�x� � ��O�O�H��E����
� 5� 5�r�w�w�s�|�7K�7K�L�����E�B�����*�
�
�8�8�r�2�2�2�.���$�$�W�]�%A�%,�]�%A�A�%E�G�/��2�x� � ����]�2�2�M�4I�4I�J��2�z�"�"�w�}�j�'I�'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�x�UR5n[RRUS5n[RRUS5n[	US5 [	US5 Sn[R
n[R[R4H*nU"U5[l[R"X#5 M, U"[R[R-5[lUR[[RX#5 U[lg!U[lf=f)Nr��file2�xxxc�4^^�[5mSS.UU4SjjnU$)NTrIc�>�TTlTer*)r")r8�flagsrJ�err�exs   ��r%�_chflags_raiser�lTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser�s�������r'rU)rhrjris` @r%�make_chflags_raiser�STestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser�s�����B�@D�
�
�#�"r')
r�r+r8r9r@r_r"r`rar�rWr�r )r�r�r�rcrl�old_chflagsrhs       r%�-test_copystat_handles_harmless_chflags_errors�6TestCopy.test_copystat_handles_harmless_chflags_errors�s���
����������V�W�-�������V�W�-���E�5�!��E�5�!�	#��j�j��	%��'�'����6��0��5��
�����-�7�-�U�-=�-=��
�
�-M�N�B�J����g�v����E�$�B�J���B�J�s
�=B#D,�,
D9c�^^^	^
�UR5n[RRUS5m
[	T
S5 [RRUS5n[	US5 [
R"T
U5 [R"T
SS5 [R"T
SS5 [
R"T
U5 UR[[R"T
55[[R"U555 UR[R"T
S5[R"US55 [R"U5 [	US5 [[RS5m	UU	4Sjn[RmU[l[
R"T
U5 UR!S[R"U55 T[lS	S
.UU
4Sjjn[RmU[l
[
R"T
U5 T[l
[RRUS5m
[RRUS
5n[	T
T
5 [	XU5 [R"T
SS5 [R"USS5 [R""US5 [RRUS5n[RRUS5n[	X"5 [	Xf5 [
R$"T
U5 [
R$"XV5 UR[R"US5S5 UR[R"US5S5 g!T[lf=f!T[l
f=f)Nr�r>�user.foo�42zuser.bar�43�EPERMc�*>�US:XaTeT"XU40UD6 g)NrrrC)�fnamer\�valr$�
orig_setxattr�os_errors    ��r%�_raise_on_user_foo�3TestCopy.test_copyxattr.<locals>._raise_on_user_foos����z�!����e�3�9�&�9r'TrIc�P>�UT:Xa[[RS5eT"XS9$)NzOperation not supportedrI)r r"ra)rwrJ�orig_listxattrrzs  ��r%�
_raise_on_src�.TestCopy.test_copyxattr.<locals>._raise_on_srcs'�����|��e�m�m�-F�G�G�!�%�I�Ir'�the_original�the_original_rozuser.the_valuesfiddlyi$�the_copy�the_copy_ro)r�r+r8r9r@r��
_copyxattr�setxattrr�rb�	listxattr�getxattrrlr r"rur$rrW)r�rOr{r{r�srcro�dstror~ryrzrzs       @@@@r%�test_copyxattr�TestCopy.test_copyxattr�s�����,�,�.���g�g�l�l�7�E�*���C����g�g�l�l�7�E�*���C���	���#�s�#�
���C��U�+�
���C��U�+����#�s�#��������S� 1�2�F�2�<�<��;L�4M�N�������C��,����C��,�	.�	�	�	�#���C����5�;�;��0��	:�
	(��K�K�M�,�B�K����c�3�'��M�M�*�b�l�l�3�&7�8�'�B�K�48�	J�	J�	*��\�\�N�(�B�L����c�3�'�)�B�L��g�g�l�l�7�N�3�������W�&7�8���C����E�!�
���C�)�9�5�
���E�+�Y�7�
�������g�g�l�l�7�J�/�������W�m�4���C���E�!�����S�!�����%�������S�*:�;�Y�G�������U�,<�=�y�I��9(�B�K��*�B�L�s�AN3�2O�3
O�
Oc�D�UR5n[RRUS5n[RRUS5n[	US5 [R
"X#5 [R"USS5 [R"USSSS9 [RRUS5n[RRUS	5n[	US5 [R
"XE5 [R"X5SS9 UR[R"USSS9S5 UR[[RUS5 [R"X4SS9 UR[R"US5S5 g)
Nr�r?ztrusted.foorsrtFrIr>rR)
r�r+r8r9r@r�r�r�r�r�r�r�r )r�rOrzr�r{r�s      r%�test_copyxattr_symlinks� TestCopy.test_copyxattr_symlinks,s���,�,�.���g�g�l�l�7�E�*���7�7�<�<���/���C���
�
�
�3�!�
���C���.�
���H�m�U�E�J��g�g�l�l�7�E�*���7�7�<�<���/���C���
�
�
�3�!����(�e�D�������X�}�e�T�V[�\����'�2�;�;��]�C����(��?�������S�-�8�%�@r'c���SnUR5n[X24S5 [RR	X25nUR5nU"XE5 [RR	XR5nXF4$)Nr�rd)r�r@r+r8r9)r��methodrwr�r��tmpdir2rcs       r%�
_copy_file�TestCopy._copy_fileFs]����������V�O�U�+������V�+���,�,�.���u�������W�,���~�r'c�>�UR[R5upUR[R
R
U55 UR[R"U5R[R"U5R5 gr*)
r�r��copyr�r+r8r�r�rr)r�r�rcs   r%�	test_copy�TestCopy.test_copyPs[�����v�{�{�3�����������u�-�.���������/�/������1G�1G�Hr'c�z�UR5n[RRUS5n[RRUS5n[RRUS5n[	US5 [R
"X$5 [
[S5(a6[R"U[R[R-5 [R"XCSS9 UR[RRU55 UR[!U5[!U55 [R""U5 [R"XCSS9 UR%[RRU55 UR[R&"U5[R&"U55 [
[S5(aOUR[R("U5R*[R("U5R*5 gg)Nr�r>r?r�TrIF)r�r+r8r9r@r�rrr�rr�r�r�r�r�rer�r_rlr�r�r?r)r�rOrzr{r�s     r%�test_copy_symlinks�TestCopy.test_copy_symlinksVs^���,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���C���
�
�
�3�!��2�x� � ��I�I�h����t�|�|� ;�<����H�4�8����������,�-�����3���3��8�
�	�	�#�����H�5�9���������s�+�,�������S�)�2�;�;�x�+@�A��2�x� � ����R�X�X�h�/�7�7��X�X�c�]�2�2�
4�!r'rVzrequires os.utimec�B�UR[R5upUR[R
R
U55 [R"U5n[R"U5nURURUR5 SH*nUR[X55[XE5S-5 M, [[S5(a9[US5(a'UR[US5[US55 ggg)NrSr�r_r�)
r�r��copy2r�r+r8r�rr�rrXr!rr)r�r�rc�
file1_stat�
file2_statr\s      r%�
test_copy2�TestCopy.test_copy2os������v�|�|�4�����������u�-�.��W�W�U�^�
��W�W�U�^�
�����+�+�Z�-?�-?�@�*�D�� � ���!:�!(��!:�Q�!>�
@�+��2�y�!�!�g�j�*�&E�&E����W�Z��<�$�Z��<�
>�'F�!r'c���UR5n[RRUS5n[RRUS5n[RRUS5n[	US5 [R
"X$5 [
[S5(a6[R"U[R[R-5 [
[S5(a:[
[S5(a%[R"U[R5 [R"U5n[R"U5n[R"XCSS9 UR![RR#U55 UR%['U5['U55 [R("U5 [R"XCS	S9 UR+[RR#U55 UR%[R,"U5[R,"U55 [R"U5n[R.[R0;a0S
H*nUR3[5Xh5[5Xx5S-5 M, [
[S5(aLUR%UR6UR65 UR9UR6UR65 [
[S5(a9[
US5(a'UR%UR:UR:5 ggg)
Nr�r>r?r�r�r�TrIFrSr�r�)r�r+r8r9r@r�rrr�rr�r�r�r�r?r�r�r�rer�r_rlr�r�rVrKrXr!rrBr�)	r�rOrzr{r�r�rZr�r\s	         r%�test_copy2_symlinks�TestCopy.test_copy2_symlinks�s3���,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���/���C���
�
�
�3�!��2�x� � ��I�I�h����t�|�|� ;�<��2�z�"�"�w�t�[�'A�'A��K�K��$�.�.�1��7�7�3�<������*�
����X�D�9����������,�-�����3���3��8�
�	�	�#�����X�E�:���������s�+�,�������S�)�2�;�;�x�+@�A��8�8�C�=��
�8�8�r�2�2�2�.���$�$�W�]�%A�%,�X�%<�q�%@�B�/��2�x� � ����]�2�2�H�4D�4D�E����� 0� 0�(�2B�2B�C��2�z�"�"�w�}�j�'I�'I����]�3�3�X�5F�5F�G�(J�"r'c��UR5n[RRUS5n[RRUS5n[	US5 [R
"USS5 [R"X#5 UR[R"US5[R"US55 [R"U5 g)Nr�r>rrrs)r�r+r8r9r@r�r�r�r�r�rl)r�rOrzr{s    r%�test_copy2_xattr�TestCopy.test_copy2_xattr�s����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���C���
���C��U�+����S��������C��,����C��,�	.�	�	�	�#�r'c��[R[R4H�nUR5nUR5n[R
R
US5n[US5 U"XC5nURU[R
R
US55 U"U[R
R
US55nURU[R
R
US55 M� g)Nr�r>)	r�r�r�r�r+r8r9r@r�)r�r;r�r�rzr.s      r%�test_copy_return_value�TestCopy.test_copy_return_value�s����;�;����-�B��l�l�n�G��l�l�n�G��'�'�,�,�w��.�C���U�#��C�!�B����R������g�u�!=�>��C������g�u�5�6�B����R������g�u�!=�>�.r'c�B�UR[R5 gr*)�_test_copy_dirr�r�r�s r%�
test_copy_dir�TestCopy.test_copy_dir�s�����F�K�K�(r'c�B�UR[R5 gr*)r�r�r�r�s r%�test_copy2_dir�TestCopy.test_copy2_dir�s�����F�L�L�)r'c�v�UR5n[RRUS5nUR5n[RRUS5n[	US5 [
RS:Xa[nO[nURXaXB5 URXaXE5 U"X45 g�Nr��does_not_exist/�win32)
r�r+r8r9r@r�r�r��IsADirectoryErrorr�)r��	copy_funcr��src_filer�r{rhs       r%r��TestCopy._test_copy_dir�s����,�,�.���7�7�<�<���/���|�|�~���g�g�l�l�7�$5�6���H�e�$��<�<�7�"�!�C�#�C����#�$�8�	
���#�$�4��(�!r'c���UR5n[RRUS5n[RRUS5n[RRUS5n[RRUS5n[	US5 [R
"X%5 [R"XTSS9 UR[RRU55 UR[R"U5[R"U55 [R"XS5 UR[RRU55 g)Nrzr{r�r�r�FrI)
r�r+r8r9r@r�r��copyfiler�rer�r�r�)r�rOrzr{r�r�s      r%�test_copyfile_symlinks�TestCopy.test_copyfile_symlinks�s����,�,�.���g�g�l�l�7�E�*���g�g�l�l�7�E�*���7�7�<�<���4���w�w�|�|�G�V�,���C���
�
�
�3�������>���������x�0�1�������T�*�B�K�K��,A�B�����"����������,�-r'r�zrequires os.linkc���[R"[5 [RR	[S5n[RR	[S5n[US5 [R"X5 UR[R[RX5 [USSS9nURUR5S5 SSS5 [R "U5 [R""[SS	9 g![anURSU-5 SnAN�SnAff=f!,(df   Ni=f![R""[SS	9 f=f)
Nrqrr�cheddarz
os.link(): %srXrYrZTr�)r+r�rr8r9r@r�r�rr�r�r
r�r<r�r\rlr�)r�rzr{rrSs     r%�'test_dont_copy_file_onto_link_to_itself�0TestCopy.test_dont_copy_file_onto_link_to_itself�s���	������g�g�l�l�6�8�,���g�g�l�l�6�6�*��	6���Y�'�
3�����!�
���f�2�2�F�O�O�S�N��c�3��1�Q�� � �����9�5�2��I�I�c�N��M�M�&��5��#�
3��
�
�o��1�2�2��
3��2�1��
�M�M�&��5�sN�$E�1D�:E�!E�"E�
E�$D=�8E�=E�E�
E�E�E1c��[R"[5 [RR	[S5n[RR	[S5n[US5 [R"SU5 UR[R[RX5 [USSS9nURUR5S5 SSS5 [R"U5 [R"[SS9 g!,(df   N>=f![R"[SS9 f=f)	Nrqrrr�rXrYrZTr�)r+r�rr8r9r@r�r�r�r
r�r<r�r\rlr�)r�rzr{rSs    r%�*test_dont_copy_file_onto_symlink_to_itself�3TestCopy.test_dont_copy_file_onto_symlink_to_itself�s���	������g�g�l�l�6�8�,���g�g�l�l�6�6�*��	6���Y�'�
�J�J�x��%����f�2�2�F�O�O�S�N��c�3��1�Q�� � �����9�5�2��I�I�c�N��M�M�&��5�	2�1��
�M�M�&��5�s%�$AD+�!D�"D+�
D(�$D+�+Erzr{r|r}c���[R"[5 UR[R[R[[5 UR[R[R[[5 [R"[5 g![anUR	SU-5 SnAN�SnAff=f![R"[5 f=f)Nr)r+rzrr�rr�r��SpecialFileErrorr�r�__file__rl)r�rs  r%�test_copyfile_named_pipe�!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�2C�C�C/c��UR5nUR5n[RRUS5n[RRUS5n[	US5 [
R"XC5nUR[RRU55 UR[U5[U55 g)Nr>r�)r�r+r8r9r@r�r�r�r�r�r_)r�r�r��dst_filer�r.s      r%�test_copyfile_return_value�#TestCopy.test_copyfile_return_values����,�,�.���,�,�.���7�7�<�<���/���7�7�<�<���/���H�e�$�
�_�_�X�
0����������r�*�+�����8�,�i��.A�Br'c�F�UR5n[RRUS5n[	US5 UR[[RX"5 UR[[RX"5 UR[U5S5 gr�)r�r+r8r9r@r�r
r�r�rr�r_)r�r�r�s   r%�test_copyfile_same_file� TestCopy.test_copyfile_same_file'sn���,�,�.���7�7�<�<���/���H�e�$����-����(�M����%����(�E�����8�,�e�4r'zMOn MACOS, Solaris and Windows the errors are not confusing (though different)zNot valid on AIX, see gh-92670c��UR5n[RRUS5n[RRUS5n[	US5 UR[[RX#5 g)Nr�r�)	r�r+r8r9r@r�r�r�r�)r�r�r�r{s    r%�test_copyfile_nonexistent_dir�&TestCopy.test_copyfile_nonexistent_dir3sY���,�,�.���7�7�<�<���/���g�g�l�l�7�$5�6���H�e�$����+�V�_�_�h�Lr'c���UR5n[RRUS5nUR5n[RRUS5n[	US5 [
RS:Xa[nO[nURU[RX5 URU[RX!5 URU[RX15 gr�)r�r+r8r9r@r�r�r�r�r�r�r�)r�r�r�r�r{rhs      r%�test_copyfile_copy_dir�TestCopy.test_copyfile_copy_dir@s����,�,�.���7�7�<�<���/���|�|�~���g�g�l�l�7�$5�6���H�e�$��<�<�7�"�!�C�#�C����#�v����=����#�v����B����#�v����>r'rCN).r�r�r�r�rr�rEr�r�rrr+rLr�rOr]r"ro�skip_unless_xattrr��skip_unless_dac_overrider�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��MACOS�SOLARISr�r�r�r�r�rCr'r%r<r<Rs����"�"�E�#�E�<�����X�.�0D�E��"�"�E�#�F�E�:�_�_�W�R��*�,N�O��"�"�
C�#�P�
C��"�"�&!�#�&!�P�����Y�/�3� ���5�3� ��	�2�D�F�%�	F�%�6� � �=J�!�=J�~�"�"�� � ��'�'�A�(�!�#�A�.�I��"�"�4�#�4�0�����W�-�/B�C�>�D�>� �"�"� H�#� H�D� � �
�!�
�
?�)�*�"�$�"�"�.�#�.� �����V�,�.@�A�6�B�6�$�"�"�6�#�6�&�����X�.�0F�G�
�_�_�S�\�\�Y�.�;�=��=�H��	C�
5��_�_�U�0�g�0��3B�C��_�_�S�:�;�M�<�	C�
M�?r'r<c��\rSrSrSrS+Sjr\R"5S5r\R"5S5r	Sr
\R"5\R"\
R"S5S5S	55r\R"5S
5r\R"5S5r\R"5S5r\R"5\R"\
R"S
5S5S55r\R"5\R"\
R"S5S5S55rSr\R"5S5r\R"5\R"\S5S55rSrSrSrSr\R"5S5rSrSr\R"5S5r Sr!S r"S!r#S"r$\R"5S#5r%\RL"5S$5r'\RP"5\RR"\*=(a \+"5(+S%5S&55r,\R"5S'5r-S(r.S)r/g*),�TestArchivesiSc��[R"U5nUR5nUR5 [	U5sSSS5 $!,(df   g=fr*)�tarfiler<�getnames�sortr7)r�r8�tarr�s    r%�_tarinfo�TestArchives._tarinfoWs7��
�\�\�$�
�3��L�L�N�E��J�J�L���<� �
�
�s�+A�
Ac���UR5n[RRX!5n[R"USS9 [US4S5 [US4S5 [R"[RRUS55 [USS4S5 [R"[RRUS55 U(a[US	4S5 X!4$)
NT)�exist_okr�rdrcr��file3�sub2�outer)r�r+r8r9r�r@r�)r�r6�root_dir�dists    r%�
_create_files�TestArchives._create_files]s����<�<�>���w�w�|�|�H�/��
���D�4�(��T�7�O�U�+��T�7�O�U�+�
��������d�E�*�+��T�5�'�*�E�2�
��������d�F�+�,����7�+�U�3��!�!r'c�j�UR5up[R"5 [ [R
R
SS5n[USU5nURU[R
RU5S-5 UR[R
RU55 UR[R"U55 [R"US5nURUR!5/SQ5 SSS5 SSS5 SSS5 [R"5 [ [R
R
SS5n[USX5nURU[R
RU5S-5 UR[R
RU55 UR[R"U55 [R"US5nURUR!5/SQ5 SSS5 SSS5 SSS5 [R"5 [ [R
R
S	S5n[USU[R
R
US
55nURU[R
RU5S-5 UR[R
RU55 UR[R"U55 [R"US5nURUR!5SS/5 SSS5 SSS5 SSS5 g!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   N�=f!,(df   N�=f!,(df   g=f)
Nr{�archiver��.tarrX��.z./distz
./dist/subz./dist/sub2z./dist/file1z./dist/file2z./dist/sub/file3z./outer�dst2�r��dist/subz	dist/sub2�
dist/file1�
dist/file2�dist/sub/file3�dst3r�r�r�)r�r�temp_cwd�no_chdirr+r8r9rr��abspathr�r�r��
is_tarfiler<�assertCountEqualr��r�r�r6�	base_namer��tfs      r%�test_make_tarfile�TestArchives.test_make_tarfileks���!�/�/�1���
�
�
�
!�8������U�I�6�I�"�9�e�X�>�G����W�b�g�g�o�o�i�&@�6�&I�J��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8����g�s�+�r��%�%�b�k�k�m�$�%�,�$,�
!��
�
�
!�8������V�Y�7�I�"�9�e�X�H�G����W�b�g�g�o�o�i�&@�6�&I�J��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8����g�s�+�r��%�%�b�k�k�m�G�H�,�$,�
!��
�
�
!�8������V�Y�7�I�"�9�e�X�#%�7�7�<�<��%�#@�B�G����W�b�g�g�o�o�i�&@�6�&I�J��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8����g�s�+�r��%�%�b�k�k�m�#�%5�6�8�,�$,�
!�
!�),�+��$,�8��
!�
!��*,�+��$,�8��
!�
!��(,�+��$,�8��
!�
!�s��N:�C
N(�9#N�N(�$N:�	O0�C
O�#O�=O�O0�*P$�1C)P�#P�=P�P$�
N%� N(�(
N7	�2N:�:
O	�
O�O�
O-	�(O0�0
O?�
P�P�
P!	�P$�$
P2c�`�UR5up[RRUR	5SS5n[RRX15n[R"U5 [ [US5nURXCS-5 UR[RRU55 UR[R"U55 [R"US5nUR!UR#5/SQ5 SSS5 SSS5 SSS5 [R"U5 [ [RRSS5n[USUS9nURXCS	-5 UR[RRU55 UR[R"U55 [R"US
5nUR!UR#5/SQ5 SSS5 SSS5 SSS5 g!,(df   GN"=f!,(df   GN,=f!,(df   GN6=f!,(df   NU=f!,(df   N^=f!,(df   g=f)Nr{r��gztar�.tar.gzzr:gzr�r��r6r�rXr�)r�r+r8r9r��relpathr�
change_cwdr�rr�r�r�r�r�r<r�r�r�s      r%�!test_make_tarfile_without_rootdir�.TestArchives.test_make_tarfile_without_rootdir�s���!�/�/�1����G�G�L�L������	�B�	��G�G�O�O�I�8�	�
�
!�
!�(�
+�X�"�9�g�6�G����W�)�&;�<��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8����g�v�.�"��%�%�b�k�k�m�$�%�/�.6�
+��
!�
!�(�
+�X������U�I�6�I�"�9�e�h�G�G����W�&�&8�9��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8����g�s�+�r��%�%�b�k�k�m�G�H�,�
.6�
+�
+�/�.��.6�X��
+�
+��$,�+��
.6�X��
+�
+�sz�7I+�>BI�	#I�,I�4I+�J�!B*J�#I=�.J�6J�
I�I�
I(	�#I+�+
I:�=
J�J�
J	�J�
J-c���UR5up[R"5 [ [R
R
SS5n[USU[R5nURU[R
RU5S-5 UR[R
RU55 UR[R"U55 [R"US5nUR!UR#5/SQ5 SSS5 SSS5 SSS5 g!,(df   N=f!,(df   N(=f!,(df   g=f)Nr{r�r�r�rXr�)r�rr�r�r+r8r9r�curdirr�r�r�r�r�r�r<r�r�r�s      r%�&test_make_tarfile_with_explicit_curdir�3TestArchives.test_make_tarfile_with_explicit_curdir�s���!�/�/�1���
�
�
�
!�8������U�I�6�I�"�9�e�X�r�y�y�I�G����W�b�g�g�o�o�i�&@�6�&I�J��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8����g�s�+�r��%�%�b�k�k�m�$�%�,�
$,�
!�
!�,�+��
$,�8��
!�
!�s;�E&�CE�#E�+E�3E&�
E�E�
E#	�E&�&
E4r�zNeed the tar command to runc	�&�UR5up[RRUR	5S5n[
 [
USX5nSSS5 URWUS-5 UR[RRU55 [RRUS5nSSSU/n[RS:XaHSSKn[UR5SRS	5S5S
:�aURSS5 [ R""Xa[ R$S
9 UR[RRU55 URUR'U5UR'U55 [
 [
USX5nSSS5 URXCS-5 UR[RRU55 [
 [
USXSS9nSSS5 URXCS-5 UR[RRU55 g!,(df   GN=f!,(df   N�=f!,(df   Nt=f)Nr�rrzarchive2.tarr�z-cfrrr��r�z--no-mac-metadata��cwd�stdoutr�T��dry_run)r�r+r8r9r�r�rr�r�r�r�r�r��mac_verr��insertr��
check_call�DEVNULLr�)r�r�r6r��tarball�tarball2�tar_cmdr�s        r%�test_tarfile_vs_tar� TestArchives.test_tarfile_vs_tar�s���"�/�/�1����G�G�L�L������;�	�
�"�9�g�x�J�G��	
����)�i�"7�8���������w�/�0��7�7�<�<��.�9���%���:���<�<�8�#�
��8�#�#�%�a�(�.�.�s�3�A�6�7�2�=����q�"5�6����g�%/�%7�%7�	9�	
��������x�0�1�������w�/����x�1H�I��"�9�e�X�H�G������f�"4�5���������w�/�0��"�9�e�X�+/�1�G��	
����f�"4�5���������w�/�0�O�X��:�X���X�s$�I�)I1�
J�
I.�1
I?�
Jc�d�UR5up[R"5 [ [R
R
SS5n[USU5nURU[R
RU5S-5 UR[R
RU55 UR[R"U55 [R"U5nURUR!5/SQ5 SSS5 SSS5 SSS5 [R"5 [ [R
R
SS5n[USX5nURU[R
RU5S-5 UR[R
RU55 UR[R"U55 [R"U5nURUR!5/SQ5 SSS5 SSS5 SSS5 [R"5 [ [R
R
SS5n[USU[R
R
US	55nURU[R
RU5S-5 UR[R
RU55 UR[R"U55 [R"U5nURUR!5S
S/5 SSS5 SSS5 SSS5 g!,(df   GN=f!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   N�=f!,(df   N�=f!,(df   g=f)Nr{r�r��.zip��dist/�	dist/sub/�
dist/sub2/r�r�r�r�r��r"r#r$r�r�r�r�r�r#r�)r�rr�r�r+r8r9rr�r�r�r��zipfile�
is_zipfile�ZipFiler��namelist�r�r�r6r�r��zfs      r%�test_make_zipfile�TestArchives.test_make_zipfile�s���!�/�/�1���
�
�
�
!�8������U�I�6�I�"�9�e�X�>�G����W�b�g�g�o�o�i�&@�6�&I�J��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8�����)�R��%�%�b�k�k�m�"�#�*�
$,�
!��
�
�
!�8������V�Y�7�I�"�9�e�X�H�G����W�b�g�g�o�o�i�&@�6�&I�J��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8�����)�R��%�%�b�k�k�m�G�H�*�
$,�
!��
�
�
!�8������V�Y�7�I�"�9�e�X�#%�7�7�<�<��%�#@�B�G����W�b�g�g�o�o�i�&@�6�&I�J��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8�����)�R��%�%�b�k�k�m�$�&6�7�9�*�$,�
!�
!�'*�)��
$,�8��
!�
!��&*�)��
$,�8��
!�
!��&*�)��$,�8��
!�
!�s��N7�C	N%�8#N�N%�#N7�O-�C	O�#O	�;O�O-�(P!�/C(P�#O?�:P�P!�
N"�N%�%
N4	�/N7�7
O�	
O�O�
O*	�%O-�-
O<�?
P
�	P�
P	�P!�!
P/c��UR5up[RRUR	5SS5n[RRX15n[R"U5 [ [US5nURXCS-5 UR[RRU55 UR[R"U55 [R"U5nUR!UR#5/SQ5 SSS5 SSS5 SSS5 UR5up[R"U5 [ [RRSS5n[USUS9nURXCS-5 UR[RRU55 UR[R"U55 [R"U5nUR!UR#5/SQ5 SSS5 SSS5 SSS5 g!,(df   GN3=f!,(df   GN==f!,(df   GNG=f!,(df   NU=f!,(df   N^=f!,(df   g=f)Nr{r�r�r r!rr%)r�r+r8r9r�rrrr�rr�r�r�r&r'r(r�r)r*s      r%�!test_make_zipfile_without_rootdir�.TestArchives.test_make_zipfile_without_rootdirs���!�/�/�1����G�G�L�L������	�B�	��G�G�O�O�I�8�	�
�
!�
!�(�
+�X�"�9�e�4�G����W�&�&8�9��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8�����)�R��%�%�b�k�k�m�"�#�*�.6�
+�"�/�/�1���
�
!�
!�(�
+�X������U�I�6�I�"�9�e�h�G�G����W�&�&8�9��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8�����)�R��%�%�b�k�k�m�G�H�*�
.6�
+�
+�*�)��.6�X��
+�
+��&*�)��
.6�X��
+�
+�sz�7I;�>B
I)�#I�+I)�3I;�+J/�2B)J�#J
�>J�J/�
I&�!I)�)
I8	�3I;�;
J
�
J�J�
J,	�(J/�/
J=c���UR5up[R"5 [ [R
R
SS5n[USU[R5nURU[R
RU5S-5 UR[R
RU55 UR[R"U55 [R"U5nUR!UR#5/SQ5 SSS5 SSS5 SSS5 g!,(df   N=f!,(df   N(=f!,(df   g=f)Nr{r�r�r r!)r�rr�r�r+r8r9rrr�r�r�r�r&r'r(r�r)r*s      r%�&test_make_zipfile_with_explicit_curdir�3TestArchives.test_make_zipfile_with_explicit_curdir6s���"�/�/�1���
�
�
�
!�8������U�I�6�I�"�9�e�X�r�y�y�I�G����W�b�g�g�o�o�i�&@�6�&I�J��O�O�B�G�G�N�N�7�3�4��O�O�G�.�.�w�7�8�����)�R��%�%�b�k�k�m�"�#�*�
$,�
!�
!�*�)��
$,�8��
!�
!�s;�E%�CE�#E�*E�2E%�
E�
E�
E"	�E%�%
E3r�zNeed the zip command to runc��UR5up[RRUR	5S5n[
 [
USX5nSSS5 URWUS-5 UR[RRU55 [RRUS5nSSSSU/n[R"Xa[RS9 UR[RRU55 [R"U5nUR5nSSS5 [R"U5nUR5n	SSS5 UR[!W5[!W	55 g!,(df   GNM=f!,(df   Nt=f!,(df   NV=f)Nr�r�r zarchive2.zipz-qz-rr)r�r+r8r9r�r�rr�r�r�r�rrr&r(r)rb)
r�r�r6r�r��archive2�zip_cmdr+r��names2s
          r%�test_zipfile_vs_zip� TestArchives.test_zipfile_vs_zipFs;��"�/�/�1����G�G�L�L������;�	�
�"�9�e�X�H�G��	
����)�f�"4�5���������w�/�0��7�7�<�<��.�9���$��n�h�?�����g�%/�%7�%7�	9�	
��������x�0�1�
�_�_�W�
%���K�K�M�E�&�
�_�_�X�
&�"��[�[�]�F�'��������v��7�'�X��&�
%��
&�
&�s$�F�.F-�F>�
F*�-
F;�>
G�unzipzNeed the unzip command to runc�(^�UR5up[RRUR	5S5n[
 [
USX5nSSS5 URWUS-5 UR[RRU55 SSU/n[R"U5 [R"U[RS9 SSS5 g!,(df   N�=f![RaqnUR R#SS9m[%U4S	jS
55(aUR'S5 SnUR)UR+UT55 SnAN�SnAff=f!,(df   g=f)
Nr�r�r r:z-t)�stderr�replace)r�c3�,># �UH	oT;v� M g7fr*rC)r��message�detailss  �r%r��2TestArchives.test_unzip_zipfile.<locals>.<genexpr>us�����:�g�'�)�:�s�)zunrecognized option: tzinvalid option -- tzunzip doesn't support -tz{}

**Unzip Output**
{})r�r+r8r9r�r�rr�r�r�rrr��check_output�STDOUT�CalledProcessError�output�decode�anyrr	�format)	r�r�r6r�r�r6r��msgr@s	        @r%�test_unzip_zipfile�TestArchives.test_unzip_zipfileas>���"�/�/�1����G�G�L�L������;�	�
�"�9�e�X�H�G��	
����)�f�"4�5���������w�/�0��D�'�*��
�
!�
!�(�
+�

4��'�'��
�8I�8I�J�,�
+��X���0�0�
4��*�*�+�+�9�+�=����:�����M�M�"<�=�2���	�	�#�*�*�S�'�2�3�3��
4��,�
+�s=�C*�<F�>#C;�*
C8�;F�A'E;�6F�;F�F�
Fc��UR5n[RRUS5nUR	[
[US5 g)Nr�rd)r�r+r8r9r��
ValueErrorr)r�r�r�s   r%�test_make_archive�TestArchives.test_make_archive}s5��������G�G�L�L���3�	����*�l�I�u�Er'c	���[(a3[R"S5Sn[R"S5SnOS=pUR5up4[RRUR5S5n[USX4UUS9nUR[RRU55 [USX45nUR[RRU55 [USX4X!S9nUR[RRU55 [USX4SSS9nUR[RRU55 g)	Nrr"r�r���owner�groupr��	kjhkjhkjg�oihohoh)
�UID_GID_SUPPORT�grp�getgrgid�pwd�getpwuidr�r+r8r9r�rr�r�)r�rSrRr�r6r�rhs       r%�test_make_archive_owner_group�*TestArchives.test_make_archive_owner_group�s���?��L�L��O�A�&�E��L�L��O�A�&�E�"�"�E�!�/�/�1����G�G�L�L������;�	��9�e�X�u�!&�(����������s�+�,��9�e�X�@����������s�+�,��9�e�X�!&�5����������s�+�,��9�e�X�!,�I�?����������s�+�,r'�Requires grp and pwd supportc��UR5up[RRUR	5S5n[
R"S5Sn[R"S5Sn[R"U5 [ [USUSXTS9nSSS5 SSS5 UR[RRW55 [R "U5nUR#5H;nUR%UR&S5 UR%UR(S5 M= UR+5 g!,(df   N�=f!,(df   N�=f!UR+5 f=f)Nr�rrr�rQ)r�r+r8r9r�rWrXrYrZrrr�rr�r�r�r<�
getmembersr��uid�gidrY)	r�r�r6r�rSrR�archive_namer��members	         r%�test_tarfile_root_owner�$TestArchives.test_tarfile_root_owner�s��"�/�/�1����G�G�L�L������;�	����Q���"�����Q���"��
�
!�
!�(�
+�X�'�	�7�H�f�.3�B�L�.6�
+�
	
��������|�4�5��,�,�|�,��	�!�,�,�.��� � ����Q�/�� � ����Q�/�/�
�M�M�O�.6�X��
+�
+��
�M�M�O�s1�	E$�E�E$�3AE5�
E!	�E$�$
E2�5Fc�^^�[R"5mUU4Sjn[SU/S5 [ TR	[
5 [
SS5 SSS5 SSS5 TR[R"5T5 [S5 g!,(df   NG=f!,(df   NP=f![S5 f=f)Nc�>�TRSU5 TRUS5 TR[R"5T5 [	5e�Nr��basename)r r�r+ru�RuntimeError)r�r6�kw�current_dirr�s   ��r%�archiver�<TestArchives.test_make_archive_cwd_default.<locals>.archiver�sA������Z��,����Y�
�3����R�Y�Y�[�+�6��.� r'rd�xxx fileri)	r+rurr�r�rjrr�r)r�rmrls` @r%�test_make_archive_cwd_default�*TestArchives.test_make_archive_cwd_default�s�����i�i�k��	!�	 ��x��Z�@�	-���&�&�|�4� ��U�3�5��
���R�Y�Y�[�+�6�%�e�,�	5�4�����

&�e�,�s:�B:�B)�

B�B)�-B:�
B&	�"B)�)
B7�3B:�:
Cc� ^^^^^�[R"5mTR5mUUU4Sjn/mUU4Sjn[SU/S5 [R
"[SU5mTR
[5 [SSTS9 SSS5 SSS5 TR[R"5T5 TRTTT/5 [S5 g!,(df   N[=f!,(df   Nd=f![S5 f=f)Nc��>�TRSU5 TRU[RR	TS55 TR[R
"5T5 [
5erh)r r�r+r8r9rurj�r�r6rkrlr�r�s   ���r%rm�4TestArchives.test_make_archive_cwd.<locals>.archiver�sP������Z��,����Y������[�*�(M�N����R�Y�Y�[�(�3��.� r'c�8>�TRU5 T"U5 gr*r�)r8r��
orig_chdirs ��r%�_chdir�2TestArchives.test_make_archive_cwd.<locals>._chdir�s����K�K����t�r'rdro�chdirri�r�)r+rur�rrr]r�rjrr�r)r�rmrxrlr�rwr�s`  @@@@r%�test_make_archive_cwd�"TestArchives.test_make_archive_cwd�s�����i�i�k���<�<�>��	!�
��	�	 ��x��Z�@�	-��"�"�2�w��7�:��&�&�|�4� ��U�X�F�5�8�
���R�Y�Y�[�+�6����T�H�k�#:�;�%�e�,�5�4��8�7��
&�e�,�s=�D�'C/�=C�	C/�AD�
C,	�(C/�/
C=�9D�
D
c��^^^�[R"5mTR5mUUU4SjnSUl[	SU/S5 [
 TR
[5 [SSTS9 SSS5 SSS5 TR[R"5T5 [S5 g!,(df   NG=f!,(df   NP=f![S5 f=f)Nc�>�TRUS5 TRUST5 TR[R"5T5 [5e)Nrir�)r�r+rurjrts   ���r%rm�FTestArchives.test_make_archive_cwd_supports_root_dir.<locals>.archiver�sE������Y�
�3����R�
�^�X�6����R�Y�Y�[�+�6��.� r'Trdrorir{)r+rur��supports_root_dirrr�r�rjrr�r)r�rmrlr�s` @@r%�'test_make_archive_cwd_supports_root_dir�4TestArchives.test_make_archive_cwd_supports_root_dir�s�����i�i�k���<�<�>��	!�
&*��"���x��Z�@�	-���&�&�|�4� ��U�X�F�5��
���R�Y�Y�[�+�6�%�e�,�	5�4�����

&�e�,�s<�C�
C�#B0�/C�7-C�0
B>	�:C�
C�C�
Cc�X�UR5n[R"U5 [ UR	[SS5S5 UR
[RRS55 SSS5 SSS5 g!,(df   N=f!,(df   g=f)N�testr�ztest.tar�
r�rrr�r�rr�r+r8r��r�r�s  r%�test_make_tarfile_in_curdir�(TestArchives.test_make_tarfile_in_curdir�sd���<�<�>��
�
!�
!�(�
+�X����\�&�%�8�*�E��O�O�B�G�G�N�N�:�6�7�.6�
+�
+�X�X��
+�
+��#�B�AB
�9B�

B	�B�
B)c�X�UR5n[R"U5 [ UR	[SS5S5 UR
[RRS55 SSS5 SSS5 g!,(df   N=f!,(df   g=f)Nr�r�ztest.zipr�r�s  r%�test_make_zipfile_in_curdir�(TestArchives.test_make_zipfile_in_curdir�sf���<�<�>��
�
!�
!�(�
+�X����\�&�%�8�*�E��O�O�B�G�G�N�N�:�6�7�.6�
+�
+�X�X��
+�
+�r�c���UR[[SS5 UR[[SSS5 UR[[SSSS/5 [SSS/S5 [5VVs/sHupUPM	 nnnUR	SU5 [S5 [5VVs/sHupUPM	 nnnUR
SU5 gs snnfs snnf)	Nrdr�c��[$r*��xrCr'r%�<lambda>�;TestArchives.test_register_archive_format.<locals>.<lambda>���Qr'c��[$r*r�rCr'r%r�r�r�r')r�rq)r�rqrc��[$r*r�rCr'r%r�r�	s��qr'ro)r�r�rrr$rr )r�ri�params�formatss    r%�test_register_archive_format�)TestArchives.test_register_archive_formats������)�%<�e�Q�G����)�%<�e�Y��	����)�%<�e�Y�!�9�-�	/�	 ��y�6�(�J�G�,?�,A�B�,A�L�D�4�,A��B��
�
�e�W�%�!�%�(�,?�,A�B�,A�L�D�4�,A��B������(��C��Cs�8C�3Cc
��UR[R[S35 SGH�nUR	US9 UR5n[RRUS5nUR[5n[[SX1S9 SSS5 URWRR[R5 URURR U5 UR#[RR%[S355 [&R("US9upV[R*"U5 UR[,5n[[SXaS9 SSS5 URURR[R.5 URURR U5 UR#[RR%[S355 SSS5 GM� g!,(df   GN�=f!,(df   N�=f!,(df   GM)=f)Nr��FTr�nonexistingr�r��r�rrwr�subTestr�r+r8r9r�r�rr�r�r"�ENOENTr�r�r�rsrkrYr��ENOTDIR�r�rrO�nonexisting_filer��tmp_fd�tmp_files       r%�test_make_tarfile_rootdir_nodir�,TestArchives.test_make_tarfile_rootdir_nodirs������	�(�(�V�H�D�/�:�$�G����g��.��,�,�.��#%�7�7�<�<���#G� ��&�&�'8�9�R� ���0@�R�:�� � ����!3�!3�U�\�\�B�� � ����!6�!6�8H�I�� � ������6�(�$��!@�A�$,�#3�#3��#@� ������ ��&�&�'9�:�b� ����J�;�� � ����!3�!3�U�]�]�C�� � ����!6�!6��A�� � ������6�(�$��!@�A�#/�.�%�
:�9��;�:��/�.��>�AI�H �CI�+H2�;BI� 
H/�*I�2
I�<I�
I	c
��UR[R[S35 SGH�nUR	US9 UR5n[RRUS5nUR[5n[[SX1S9 SSS5 URWRR[R5 URURR U5 UR#[RR%[S355 [&R("US9upV[R*"U5 UR[,5n[[SXaS9 SSS5 URURR[R.5 URURR U5 UR#[RR%[S355 SSS5 GM� g!,(df   GN�=f!,(df   N�=f!,(df   GM)=f)Nr r�rr�r�r�r�r�s       r%�test_make_zipfile_rootdir_nodir�,TestArchives.test_make_zipfile_rootdir_nodir(s���	
���	�(�(�V�H�D�/�:�$�G����g��.��,�,�.��#%�7�7�<�<���#G� ��&�&�'8�9�R� ���0@�R�:�� � ����!3�!3�U�\�\�B�� � ����!6�!6�8H�I�� � ������6�(�$��!@�A�$,�#3�#3��#@� ������ ��&�&�'9�:�b� ����J�;�� � ����!3�!3�U�]�]�C�� � ����!6�!6��A�� � ������6�(�$��!@�A�#/�.�%�
:�9��;�:��/�.�r�c��UR"US40UD6 UR"U[40UD6 UR"U[40UD6 g)Nc��U$r*rC�r8s r%r��3TestArchives.check_unpack_archive.<locals>.<lambda>Ds��r')�#check_unpack_archive_with_converterr)r�rHr$s   r%�check_unpack_archive�!TestArchives.check_unpack_archiveBsN���0�0��%�	1�)/�	1��0�0��H�	(� &�	(��0�0���L�V�Lr'c��UR5upE[U5nURS5 [RRUR
5S5n[XqXE5nUR
5n	[U"U5U"U	540UD6 UR[U	5U5 UR
5n
[U"U5U"U
54SU0UD6 UR[U
5U5 UR[R5 [U"[540UD6 SSS5 UR[5 [U"[54SS0UD6 SSS5 g!,(df   NE=f!,(df   g=f)Nr�r�rHrd)r�rgrlr+r8r9r�rrr�r�r��	ReadErrorrrM)r�rH�	converterr$r�r6�expectedr�r�r��tmpdir3s           r%r��0TestArchives.check_unpack_archive_with_converterIs9��!�/�/�1����H�%������ ��G�G�L�L������;�	��	�8�F���,�,�.���y��*�I�g�,>�I�&�I�����'�*�H�5��,�,�.���y��*�I�g�,>�	!�v�	!��	!�����'�*�H�5�
�
�
�v�/�/�
0��9�V�,�7��7�1�
�
�
�z�
*��9�V�,�E�U�E�f�E�+�
*�1�
0��
*�
*�s�E(�E9�(
E6�9
Fc���URUSS9 URUSS9 [R"S[45 URU5 SSS5 g!,(df   g=f)N�
fully_trusted��filter�datazPython 3.14)r�r�check_warnings�DeprecationWarning)r�rHs  r%�check_unpack_tarball�!TestArchives.check_unpack_tarballas]���!�!�&��!�A��!�!�&��!�8�
�
+�
+�� 2�3�5��%�%�f�-�5�5�5�s�A�
A&c�&�URS5 g)Nr��r�r�s r%�test_unpack_archive_tar�$TestArchives.test_unpack_archive_tarhs���!�!�%�(r'c�&�URS5 g)Nrr�r�s r%�test_unpack_archive_gztar�&TestArchives.test_unpack_archive_gztark����!�!�'�*r'c�&�URS5 g)N�bztarr�r�s r%�test_unpack_archive_bztar�&TestArchives.test_unpack_archive_bztaror�r'z(AIX MAXDATA must be 0x20000000 or largerc�&�URS5 g)N�xztarr�r�s r%�test_unpack_archive_xztar�&TestArchives.test_unpack_archive_xztarss��	
�!�!�'�*r'c��URS5 UR[5 URSSS9 SSS5 g!,(df   g=f)Nr�r�r�)r�r�r�r�s r%�test_unpack_archive_zip�$TestArchives.test_unpack_archive_zipxs=���!�!�%�(�
�
�
�y�
)��%�%�e�F�%�;�*�
)�
)�s�A�
Ac�^�[5nU4Sjn[SSS/US/5 [SS5 TR[[SS/U5 [S5 [SS/U5 TR
SS/S	4[55 TRSS/S	4[55 [S5 TR[5U5 g)
Nc�r>�TRUS5 TRUS5 TRUS5 g)Nr��	stuff.boo�xx)r�)r��extract_dir�extrar�s   �r%�_boo�/TestArchives.test_unpack_registry.<locals>._boo�s3������U�A�&����X�{�3����[�$�/r'�Booz.booz.b2)r�r�r�r��Boo2�)	rr	rr�r
rr$r r�)r�r�r�s`  r%�test_unpack_registry�!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'rCN)r�)0r�r�r�r�r�r�r�
requires_zlibrr	r
r�r�r��whichrr,r/r2r8rJrNr[rVrdrpr|r�r�r�r�r�r�r�r�r�r�r��requires_bz2r��
requires_lzmar�r�r�r�r�r�r�rCr'r%r�r�Ss��� �"�
����'8��'8�R
����H��H�8
%�
����
������e�,�6�8�*1�8��*1�X
����%9��%9�N
����H��H�:
����
#��
#�
����
������e�,�6�8�8�8��8�0
����
������g�.�8�:�4�:��4�2F�

����-��-�6
����
����*H�I��J���*-�"-�.-�&8�
����8��8�)� B�.
����B��B�2M�F�0.�)�
����+��+�
����+��+�
����
�_�_�S�-���-�/Y�Z�+�[��+�
����<��<�
8r'r�c��\rSrSr\R
"\"\S5S5S5r\R
"\	S5\R
"\"\
S5S5S55rS	rg
)�TestMisci��
disk_usagez)disk_usage not available on this platformc�6�[R"[RR	[
55nSH"nUR
[X5[5 M$ URURS5 URURS5 URURS5 URURUR5 URURUR5 [R"[
5 g)N)rD�used�freer)r�r�r+r8r�r�r�r!r��
assertGreaterrDr��assertGreaterEqualr�)r��usager\s   r%�test_disk_usage�TestMisc.test_disk_usage�s����!�!�"�'�'�/�/�(�";�<��-�D��!�!�'�%�"6��<�.����5�;�;��*����5�:�:�q�)�����
�
�A�.�������U�Z�Z�8����5�;�;��
�
�3�	���(�#r'r]�chownzrequires os.chownc�@^�TR5n[R"US9n[RRUS5n[
US5 [R"X#5 TR[5 [R"U5 SSS5 TR[5 [R"USS9 SSS5 TR[5 [R"USS9 SSS5 TR[5 [R"US5 SSS5 TR[5 [R"US	5 SSS5 [R"5n[R"5nSU4S
jjn[R"X$U5 U"X$U5 [R"X$5 U"X$5 [R"X$S9 U"X$5 [R"X%S9 U"X%S9 [R"XU5 U"XU5 [R"X5 U"X5 [R"XS9 U"X5 [R"XS9 U"XS9 [ R""U5Sn[$R&"U5Sn[R"X'U5 U"X$U5 [R"XU5 U"XU5 [R*"U[R,5n	TR/[R0U	5 [RR3U5n
[RR3U5n[R"X�XYS
9 U"X$U5 [R"X�U	S
9 U"X$5 [R"X�U	S9 U"X%S9 [R"X�XYSS9 U"X$U5 [R"X�XYSS9 U"X$U5 [R"X4SS9 U"X$5 [R"X�U	SS9 U"X%S9 [R"X�XYSS9 U"X$U5 TR[5 [R"X$US
9 SSS5 TR[45 [R"SXEU	S
9 SSS5 TR[5 [R"X)S
9 SSS5 g!,(df   GNu=f!,(df   GNT=f!,(df   GN3=f!,(df   GN=f!,(df   GN�=f![(a GNpf=f!,(df   N�=f!,(df   N�=f!,(df   g=f)Nr��
chown_linkztesting chown functionznon-existing username)�userznon-existing groupname)rS�spamg��Q�	@c�>�[R"U5nUbTRXR5 UbTRX#R5 ggr*)r+rr��st_uid�st_gid)r8r`ra�sr�s    �r%�check_chown�(TestMisc.test_chown.<locals>.check_chown�sC�������
�A���� � ��h�h�/���� � ��h�h�/�r')rarr�)rSr�T)r�rJFrI)rSr�rJ�missingfile)NN)r�rsr�r+r8r9r@r�r�rMr�r��LookupErrorr��getuid�getgidrYrZrWrX�KeyErrorr<rbr�rYrir�)r�r�r��linknamer`rar�r�rS�dirfdri�baselinknames`           r%�
test_chown�TestMisc.test_chown�s�����,�,�.���?�?�w�/���7�7�<�<���6���H�6�7�
�
�
�8�&�
�
�
�z�
*��L�L��"�+��
�
�{�
+��L�L��(?�@�,��
�
�{�
+��L�L��)A�B�,��
�
�y�
)��L�L��7�+�*��
�
�y�
)��L�L��4�(�*��i�i�k���i�i�k��	0�	���X�C�(��H�3�'����X�#��H�"����X�(��H�"����X�)��H�&����W�3�'��G�#�&����W�"��G�!����W�'��G�!����W�(��G�%�
	+��<�<��$�Q�'�D��L�L��%�a�(�E�

�L�L���/���s�+��L�L���.���c�*��������-��������%�(��7�7�#�#�H�-���w�w�'�'��1�����X�C�6��H�3�'����X�5�1��H�"����X��7��H�&����X�C�t�L��H�3�'����X�C�u�M��H�3�'����X�D�9��H�"����\�U�E�R��H�&����\��4�P��H�3�'�
�
�
�y�
)��L�L��w�7�*��
�
�0�
1��L�L����?�2��
�
�z�
*��L�L��0�+�
*�e+�
*��,�
+��,�
+��*�
)��*�
)��D�	��	��<*�
)��2�
1��+�
*�sr�=T�1T�$T&�T8�U
�2U�=U-�0U>�$V�
T�
T#�&
T5�8
U�

U�
U*�)U*�-
U;�>
V�
VrCN)
r�r�r�r�r�r�rrr�r�rVr+rr�rCr'r%r�r��sp��
������6�D�F�$�F�$�����*H�I�
�����W�-�/B�C�Z1�D�J�Z1r'r�c�$�\rSrSrSr\"\R5rSr	Sr
SrSrSr
\R"\R"S:gS	5S
5r\R"\R"S:HS5S5r\R"\R"S:HS5S
5r\R,S5rSrSr\R"\R"S:HS5S5rSrSrSrSrSrSr \R"\R"S:HS5S5r!\R"\R"S:HS5S5r"\R"\R"S:HS5S5r#\R"\R"S:HS5S5r$\R"\R"S:HS5S5r%\R"\R"S:HS5S5r&\R"\R"S:HS5S 5r'\R"\R"S:HS5S!5r(\R"\R"S:HS5S"5r)\R"\R"S:HS5S#5r*\R"\R"S:HS5S$5r+S%r,g&)'�	TestWhichi		c���URSS9n[RRU[S-5n[R
"U5 [RRU[S-5Ul[R
"UR5 [RRU[S-5Ul[R
"UR5 [S-Ul[RRURUR5Ul	URUR5 URUl[RUlSUl
g)N�Tmp)r�z-basedirz-dirz-dir2z.Exez.EXE)r�r+r8r9rr�ro�	other_dir�file�filepathr@�env_pathr�ext)r��temp_dirr6s   r%�setUp�TestWhich.setUp	s����<�<�u�<�-���7�7�<�<��&�:�*=�>��
������7�7�<�<��&�6�/�:���
������������h���0@�A���
������ ��V�O��	������T�X�X�t�y�y�9��
�������'�����
��i�i�����r'c�H�[U5 [R"US5 g)Ni�)r@r+r)r�r8s  r%r@�TestWhich.create_file	s���D��
����u�r'c��UR[RRU5[RRU55 gr*)r�r+r8�normcase)r�r�r�s   r%�assertNormEqual�TestWhich.assertNormEqual#	s0��������)�)�&�1�2�7�7�3C�3C�H�3M�Nr'c��[R"URURS9nUR	XR
5 g�Nr�)r�r�rror�r�r�r.s  r%�
test_basic�TestWhich.test_basic&	s,��
�\�\�$�)�)�$�(�(�
3������]�]�+r'c��[R"URURS9nUR	XR5 gr)r�r�rr
r�rs  r%�test_absolute_cmd�TestWhich.test_absolute_cmd+	s.���\�\�$�-�-�d�n�n�
=������]�]�+r'c� �[RRUR5up[RR	X R
5n[R"US9 [R"X0RS9nURXC5 SSS5 [R"URS9 [R"X1S9nURU5 SSS5 g!,(df   N[=f!,(df   g=fr)
r+r8r�ror9rrrr�r�r
r��assertIsNone)r�r6�tail_dirrr.s     r%�test_relative_cmd�TestWhich.test_relative_cmd1	s��� �W�W�]�]�4�8�8�4����'�'�,�,�x���3��
�
!�
!�x�
0����g�N�N�;�B����R�)�1��
!�
!�t�x�x�
0����g�5�B����b�!�1�
0�	1�
0��1�
0�s�)0C.�?&C?�.
C<�?
D
r�ztest is for non win32c���[R"URS9 [R"UR
URS9nURU5 SSS5 g!,(df   g=fr)rrror�r�rr
r!rs  r%�test_cwd_non_win32�TestWhich.test_cwd_non_win32>	sH���
!�
!�t�x�x�
0����d�i�i�d�n�n�=�B����b�!�1�
0�
0�s�;A#�#
A1ztest is for win32c	���[RRUR5n[R
"URS9 [RRSSS9 [R"URURS9nURU[RRURUR55 SSS5 [RRSSS9 [R"URURS9nUR!U5 SSS5 SSS5 g!,(df   Nx=f!,(df   N(=f!,(df   g=f)Nr��shutil._win_path_needs_curdirT��return_valueF)r+r8r�rorrr�r9r:r�r�rr
r�r9rr!)r�r6r.s   r%�test_cwd_win32�TestWhich.test_cwd_win32G	s����7�7�?�?�4�8�8�,��
�
!�
!�t�x�x�
0����$�$�%D�SW�$�X��\�\�$�)�)�$�.�.�A��� � ��R�W�W�\�\�$�+�+�t�y�y�%I�J�Y����$�$�%D�SX�$�Y��\�\�$�)�)�$�.�.�A���!�!�"�%�Z�1�
0�X�X��Z�Y��1�
0�s=�E)�'A.E�&E)�;;E�6E)�
E	�E)�
E&	�"E)�)
E7c	��[RRURUR5nURU5 [RRSSS9 [R"URS9 [R"URURS9nURU[RRURUR55 SSS5 [R"URS9 [R"URURS9nURU[RRURUR55 SSS5 SSS5 g!,(df   N�=f!,(df   N(=f!,(df   g=f)Nr)Tr*r�)r+r8r9r
rr@r�r9r:rrror�r�r�r)r��other_file_pathr.s   r%�*test_cwd_win32_added_before_all_other_path�4TestWhich.test_cwd_win32_added_before_all_other_pathU	s���'�'�,�,�t�~�~�t�y�y�A������)�
�]�]�
 �
 �!@�t�
 �
T��%�%�4�8�8�4��\�\�$�)�)�$�.�.�A��� � ��R�W�W�\�\�$�+�+�t�y�y�%I�J�5��%�%�4�>�>�:��\�\�$�)�)�$�(�(�;��� � ��R�W�W�\�\�$�+�+�t�y�y�%I�J�;�	U�
T�4�4��;�:��	U�
T�s>�$F8�A.F�1&F8�A.F'�F8�
F$	� F8�'
F5	�1F8�8
Gc�~�[R"UR[R5 [R
"UR[R5(aURS5 [R"URUR[RS9nURU5 g)Nzcan't set the file read-only�r8r^)
r+rrrr�access�W_OKrr�r�rror!rs  r%�test_non_matching_mode� TestWhich.test_non_matching_modeb	sl��	���������-�
�9�9�T�]�]�B�G�G�,�,��M�M�8�9�
�\�\�$�)�)�$�(�(����
A�����"�r'c�f�[RRUR5up[R
"US9 [R"URUS9nURU[RRX R55 SSS5 g!,(df   g=fr)r+r8r�rorrr�r�rr�r9)r�r6r"r.s    r%�test_relative_path�TestWhich.test_relative_pathk	sj���W�W�]�]�4�8�8�4���
�
!�
!�x�
0����d�i�i�h�7�B����R������h�	�	�!B�C�1�
0�
0�s
�AB"�"
B0c�d�[R"SURS9nURU5 g)Nzfoo.exer�)r�r�ror!rs  r%�test_nonexistent_file�TestWhich.test_nonexistent_fileq	s$��
�\�\�)�$�(�(�
3�����"�r'zpathext check is Windows-onlyc��[R"URSSURS9nUR	XR
SSUR-5 g)N���r�)r�r�rror�rrrs  r%�test_pathext_checking�TestWhich.test_pathext_checkingv	sD��
�\�\�$�)�)�C�R�.�t�x�x�
8������]�]�3�B�/�$�(�(�:�;r'c��[R"5nURUS'[R"UR
5nUR
X R5 SSS5 g!,(df   g=f�N�PATH)r�EnvironmentVarGuardr
r�r�rr�r�r��envr.s   r%�test_environ_path�TestWhich.test_environ_path~	sM��
�
*�
*�
,���-�-�C��K����d�i�i�(�B����R���/�-�
,�
,�s�AA*�*
A8c	�H�[R"5nSUS'[RR	SUR
SS9 [R"[SUR
5 [R"UR
5 [R"UR5nURU5 SSS5 SSS5 SSS5 SSS5 g!,(df   N'=f!,(df   N0=f!,(df   N9=f!,(df   g=f)Nr�rD�
os.confstrT�r+�create�defpath)rrEr�r9r:rorr]r+rr�r�rr!rFs   r%�test_environ_path_empty�!TestWhich.test_environ_path_empty�	s���
�
*�
*�
,���C��K����$�$�\����,0�%�2��"�"�2�y�$�(�(�;��%�%�d�h�h�/��\�\�$�)�)�,���!�!�"�%�0�<�2�-�
,�
0�/��<�;��2�2��-�
,�sS�/D�'D�,!C1�
2C 	�?C1�D�D� 
C.
�*C1�1
C?�;D�
D	�D�
D!c	�Z�URn[RS:Xa*[RRURU5n[R"5n[RUS'[RRSURSS9 [R"[SUR5 [ R""UR5nUR%U5 [R&"UR5 [ R""UR5nUR)X15 SSS5 SSS5 SSS5 SSS5 g!,(df   N'=f!,(df   N0=f!,(df   N9=f!,(df   g=f)Nr�rDrKTrLrN)rr�r�r+r8r9rrrE�pathsepr�r9r:rorr]r�r�r!rr�)r��expected_cwdrGr.s    r%�test_environ_path_cwd�TestWhich.test_environ_path_cwd�	s���y�y���<�<�7�"��7�7�<�<����\�B�L��
*�
*�
,���*�*�C��K����$�$�\����,0�%�2��"�"�2�y�$�(�(�;��\�\�$�)�)�,���!�!�"�%��)�)�$�(�(�3����d�i�i�0�B��$�$�R�6�4�<�2�-�
,�4�3��<�;��2�2��-�
,�sU� =F�'F�AE:�2E)	�E:�F�F�)
E7
�3E:�:
F�F�
F	�F�
F*c�B�[R"5nUS	[RR	S[
SS9 [R"[SUR5 [R"UR5nSSS5 SSS5 URWUR5 [RR	SURSS9 [R"[SS5 [R"UR5nSSS5 SSS5 URX R5 SSS5 g!,(df   N�=f!,(df   N�=f!,(df   N\=f!,(df   Ne=f!,(df   g=f)NrDrKT)rrMrNrLr�)rrEr�r9r:rMrr]r+ror�r�rr�rrFs   r%�test_environ_path_missing�#TestWhich.test_environ_path_missing�	s��
�
*�
*�
,���F�����$�$�\�z�,0�%�2��"�"�2�y�$�(�(�;��\�\�$�)�)�,��<�2�
���R����/����$�$�\����,0�%�2��"�"�2�y�"�5��\�\�$�)�)�,��6�2�
���R���/�-�
,�<�;��2�2��6�5��2�2��-�
,�sk�'F�'E�$!E�E�
A
F�E?�7!E.�E?� #F�
E�E�
E+	�'F�.
E<�8E?�?
F
	�	F�
Fc��[RRUR5n[R
"URS9 [R"5nURUS'[R"URSS9nURU5 SSS5 SSS5 g!,(df   N=f!,(df   g=f)Nr�rDr�)r+r8r�rorrrEr
r�r�rr!)r�r6rGr.s    r%�test_empty_path�TestWhich.test_empty_path�	s����7�7�?�?�4�8�8�,��
�
!�
!�t�x�x�
0�
�
*�
*�
,���-�-�C��K����d�i�i�b�1�B����b�!�-�1�
0�
,�
,��1�
0�s%�C�AB/�C�/
B=	�9C�
Cc���[R"5nUS	[R"UR5nURU5 SSS5 g!,(df   g=frC)rrEr�r�rr!rFs   r%�test_empty_path_no_PATH�!TestWhich.test_empty_path_no_PATH�	sC��
�
*�
*�
,���F�����d�i�i�(�B����b�!�-�
,�
,�s�5A�
A"ztest specific to Windowsc���SnUR[5nX RU5-n[RR	UR
U5nUR
U5 [R"5nXS'UR[R"X R
S9U5 UR[R"X0R
S9U5 SSS5 g!,(df   g=f)N�.xyz�PATHEXTr���to_text_typerr+r8r9ror@rrEr�r�r��r�r�cmd�cmdextrrGs      r%�test_pathext�TestWhich.test_pathext�	s���������(���(�(��-�-���7�7�<�<����&�1������"�
�
*�
*�
,�� �	�N����V�\�\�#�H�H�=�x�H����V�\�\�&�x�x�@�(�K�-�
,�
,��
�;A!C%�%
C3c���SnUR[5nX RU5-n[RR	UR
U5nUR
U5 [R"5nUS-US'UR[R"X R
S9U5 UR[R"X0R
S9U5 SSS5 g!,(df   g=f)Nr`�;rar�rbrds      r%�test_pathext_with_empty_str�%TestWhich.test_pathext_with_empty_str�	s���������(���(�(��-�-���7�7�<�<����&�1������"�
�
*�
*�
,�� �3�Y�C�	�N����V�\�\�#�H�H�=�x�H����V�\�\�&�x�x�@�(�K�-�
,�
,�s
�;A%C)�)
C7c���SnUR[5nX RU5-n[RR	UR
U5nUR
U5 [R"5nXS'UR[R"X R
S9U5 UR[R"X0R
S9U5 SSS5 g!,(df   g=f)Nz.foo.barrar�rbrds      r%�$test_pathext_with_multidot_extension�.TestWhich.test_pathext_with_multidot_extension�	s���������(���(�(��-�-���7�7�<�<����&�1������"�
�
*�
*�
,�� �	�N����V�\�\�#�H�H�=�x�H����V�\�\�&�x�x�@�(�K�-�
,�
,�ric��UR[5nXRS5-n[RR	UR
U5nUR
U5 [R"5nSUS'UR[R"XR
S95 UR[R"X R
S95 SUS'UR[R"XR
S9U5 UR[R"X R
S9X0RS5-5 SUS'UR[R"XR
S9U5 UR[R"X R
S9X0RS5-5 SSS5 g!,(df   g=f)Nr�r`rar�z.xyz;.z.xyz;..)
rcrr+r8r9ror@rrEr!r�r�r�)r�re�cmddotrrGs     r%� test_pathext_with_null_extension�*TestWhich.test_pathext_with_null_extension�	sN������(���(�(��-�-���7�7�<�<����#�.������"�
�
*�
*�
,��#�C�	�N����f�l�l�3�X�X�>�?����f�l�l�6���A�B�%�C�	�N����V�\�\�#�H�H�=�x�H����V�\�\�&�x�x�@�%�(9�(9�#�(>�>�
@�&�C�	�N����V�\�\�#�H�H�=�x�H����V�\�\�&�x�x�@�%�(9�(9�#�(>�>�
@�-�
,�
,�s
�9EG�
Gc���SnUR[5nX RU5-nURS5n[RR	UR
U5nUR
U5 [R"5nUS-US'UR[R"X R
S9U5 UR[R"X0R
S9U5 UR[R"X$-UR
S95 UR[R"X4-UR
S95 SSS5 g!,(df   g=f)Nr`r�rar�)
rcrr+r8r9ror@rrEr�r�r�r!)r�rrerf�dotrrGs       r%�$test_pathext_extension_ends_with_dot�.TestWhich.test_pathext_extension_ends_with_dot�	s���������(���(�(��-�-������$���7�7�<�<����&�1������"�
�
*�
*�
,�� �3�Y�C�	�N����V�\�\�#�H�H�=�x�H����V�\�\�&�x�x�@�(�K����f�l�l�3�9�4�8�8�D�E����f�l�l�6�<�d�h�h�G�H�-�
,�
,�s
�CE�
E(c��SnUR[5nX RU5-n[RR	UR
U5nUR
U5 [R"5n[R"UR
5US'XS'UR[R"U5U5 UR[R"U5U5 SSS5 g!,(df   g=f)Nr`rDra)
rcrr+r8r9ror@rrE�fsdecoder�r�r�rds      r%�%test_pathext_applied_on_files_in_path�/TestWhich.test_pathext_applied_on_files_in_path

s���������(���(�(��-�-���7�7�<�<����&�1������"�
�
*�
*�
,���+�+�d�h�h�/�C��K� �	�N����V�\�\�#�.��9����V�\�\�&�1�8�<�	-�
,�
,�s
�;A4C8�8
Dc��[RRSSS9nUR[R
"S[R55 URS5 UR5 UR[R
"SS55 UR5 SSS5 [RRSSS9nUR[R
"S[R55 URS5 SSS5 g!,(df   N{=f!,(df   g=f)Nz&_winapi.NeedCurrentDirectoryForExePathTr*�dontcarerF)r�r9r: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_curdir�$TestWhich.test_win_path_needs_curdir
s���
�]�]�
 �
 �!I�X\�
 �
]�aq��O�O�F�9�9�*�b�g�g�N�O��4�4�Z�@��'�'�)��O�O�F�9�9�*�a�H�I��.�.�0�^��]�]�
 �
 �!I�X]�
 �
^�br����V�:�:�:�r�w�w�O�P��4�4�Z�@�_�
^�^�
]��_�
^�s�BD �AD1� 
D.�1
D?c��URnUR[R"XRS9UR
5 UR[R"XR[RS9UR
5 XRS5-n[RRURU5nURU5 UR[R"XRS9UR
5 UR[R"XR[RS9UR
5 UR[R"X RS9U5 UR[R"X R[RS9U5 g�Nr�r3z.com)rrr�r�rorr+�F_OKrcr8r9r@)r�re�cmd2r/s    r%�$test_same_dir_with_pathext_extension�.TestWhich.test_same_dir_with_pathext_extension%
s!���i�i�����V�\�\�#�H�H�=�t�}�}�M����V�\�\�#�H�H�2�7�7�K�!�]�]�	,��&�&�v�.�.���'�'�,�,�t�x�x��6������)�	
���V�\�\�#�H�H�=�t�}�}�M����V�\�\�#�H�H�2�7�7�K�!�]�]�	,����V�\�\�$�X�X�>��P����V�\�\�$�X�X�B�G�G�L�,�	.r'c��URSSnUR[R"XRS9UR
5 UR[R"XR[RS9UR
5 [RRURU5nURU5 UR[R"XRS9UR
5 UR[R"XR[RS9U5 UR[R"URURS9UR
5 UR[R"URUR[RS9UR
5 g�Nr?r�r3)rrr�r�rorr+r�r8r9r@)r�rer/s   r%�'test_same_dir_without_pathext_extension�1TestWhich.test_same_dir_without_pathext_extension9
s$���i�i���n�����V�\�\�#�H�H�=�t�}�}�M����V�\�\�#�H�H�2�7�7�K�!�]�]�	,��'�'�,�,�t�x�x��5������)�	
���V�\�\�#�H�H�=�t�}�}�M����V�\�\�#�H�H�2�7�7�K�,�	.����V�\�\�$�)�)�$�(�(�C�T�]�]�S����V�\�\�$�)�)�$�(�(����Q�!�]�]�	,r'c�4�URn[RR[R"UR
5[R"UR5/5nUR[R"XS9UR5 UR[R"X[RS9UR5 XRS5-n[RRUR
U5nURU5 UR[R"XS9U5 UR[R"X[RS9U5 UR[R"X2S9U5 UR[R"X2[RS9U5 [RR[R"UR5[R"UR
5/5nUR[R"XS9UR5 UR[R"X[RS9UR5 gr�)rr+rRr9rzr
rorr�r�rr�rcr8r@r�)r�re�search_pathr�r/s     r%�%test_dir_order_with_pathext_extension�/TestWhich.test_dir_order_with_pathext_extensionN
s����i�i���j�j�o�o�r�{�{�4�>�>�'B�')�{�{�4�8�8�'<�'>�?��	
���V�\�\�#�@�$�-�-�P����V�\�\�#�b�g�g�N�!�]�]�	,��&�&�v�.�.���'�'�,�,�t�~�~�t�<������)�	
���V�\�\�#�@�/�R����V�\�\�#�b�g�g�N�,�	.�	
���V�\�\�$�A�?�S����V�\�\�$�r�w�w�O�,�	.��j�j�o�o�r�{�{�4�8�8�'<�')�{�{�4�>�>�'B�'D�E��������c�<�d�m�m�L�������c�"�'�'�J����	(r'c�|�URSSn[RR[R"UR
5[R"UR5/5nUR[R"XS9UR5 UR[R"X[RS9UR5 [RRUR
U5nURU5 UR[R"XS9UR5 UR[R"X[RS9U5 UR[R"URUS9UR5 UR[R"URU[RS9UR5 [RR[R"UR5[R"UR
5/5nUR[R"XS9UR5 UR[R"X[RS9UR5 gr�)rr+rRr9rzr
rorr�r�rr�r8r@)r�rer�r/s    r%�(test_dir_order_without_pathext_extension�2TestWhich.test_dir_order_without_pathext_extensionl
s����i�i���n���j�j�o�o�r�{�{�4�>�>�'B�')�{�{�4�8�8�'<�'>�?��	
���V�\�\�#�@�$�-�-�P����V�\�\�#�b�g�g�N�!�]�]�	,��'�'�,�,�t�~�~�s�;������)�	
���V�\�\�#�@�$�-�-�P����V�\�\�#�b�g�g�N�,�	.�	
���V�\�\�$�)�)�+�F��
�
�V����V�\�\�$�)�)�+�B�G�G�T�!�]�]�	,��j�j�o�o�r�{�{�4�8�8�'<�')�{�{�4�>�>�'B�'D�E�����V�\�\�#�@�$�-�-�P����V�\�\�#�b�g�g�N�!�]�]�	,r')rror
rrrr
N)-r�r�r�r�r�staticmethodr+rzrcr@rrrr#r�r�r�r�r&r,r0rr�r6r9r<r@rHrOrTrWrZr]rgrlrorsrwr{r�r�r�r�r�r�rCr'r%rr		s���" ����,�L��O�,�
,�"��������0�0�2�"�2�"��������0�,�.�
&�.�
&��������0�,�.�	K�.�	K��#�#��$��D��
�������0�8�:�<�:�<�0�	&�7�&0�$"�"��������0�2L�M�	L�N�	L��������0�2L�M�	L�N�	L��������0�2L�M�	L�N�	L��������0�2L�M�@�N�@�$�������0�2L�M�I�N�I��������0�2L�M�
=�N�
=��������0�2L�M�
A�N�
A��������0�2L�M�.�N�.�&�������0�2L�M�,�N�,�(�������0�2L�M�(�N�(�:�������0�2L�M�,�N�,r'rc�>�\rSrSrSr\"\R5rSr	g)�TestWhichBytesi�
c���[RU5 [R"UR5Ul[R"UR
5Ul[R"UR5Ul[R"UR5Ul[R"UR5Ul[R"UR5Ul	gr*)
rrr+r�rorrr
rrr�s r%r�TestWhichBytes.setUp�
s���������;�;�t�x�x�(����K�K��	�	�*��	����D�M�M�2��
����T�^�^�4����k�k�$�+�+�.����;�;�t�x�x�(��r')rrorrrr
N)
r�r�r�r�rr�r+r�rcr�rCr'r%r�r��
s��)� ����,�Lr'r�c���\rSrSrSrSrSrSrSrSr	Sr
\S	5r\S
5r
Sr\S5rS
r\S5rSr\R("\R,R.S5S5rSrSrSrSr\R<\S55r\R<\S55r \R<\S55r!\R<\S55r"Sr#Sr$\S5r%\S5r&Sr'\S5r(\R<S 5r)\R<S!5r*\RV\R("\,"\S"5=(a \,"\-S#5=(a	 \,"\-S$5S%5S&55r.S'r/g())�TestMovei�
c�D�SnUR5UlUR5Ul[RRURU5Ul[RRURU5Ul[URS5 g)Nr�r�)	r�r�r�r+r8r9r�r�r@)r�r�s  r%r�TestMove.setUp�
sc�����|�|�~����|�|�~��������T�\�\�8�<��
������T�\�\�8�<��
��D�M�M�7�+r'c��[US5nUR5nSSS5 [R"X5 [US5nUR	WUR55 SSS5 UR[RRU55 g!,(df   N�=f!,(df   NN=f�NrW)	r<r\r��mover�r�r+r8r�)r�rzr{�real_dstrS�contentss      r%�_check_move_file�TestMove._check_move_file�
s|��
�#�t�_���v�v�x�H�����C��
�(�D�
!�Q����X�q�v�v�x�0�"����������,�-��_��"�
!�s�B �!B1� 
B.�1
B?c�(�[[R"U55n[R"X5 URU[[R"U555 UR
[RRU55 gr*)	rbr+rcr�r�r�r�r8r�)r�rzr{r�r�s     r%�_check_move_dir�TestMove._check_move_dir�
sY���"�*�*�S�/�*�����C������6�"�*�*�X�*>�#?�@����������,�-r'c�f�URURURUR5 gr*)r�r�r�r�s r%�test_move_file�TestMove.test_move_file�
s �����d�m�m�T�]�]�D�M�M�Jr'c�f�URURURUR5 gr*)r�r�r�r�r�s r%�test_move_file_to_dir�TestMove.test_move_file_to_dir�
s �����d�m�m�T�\�\�4�=�=�Ir'c�z�[UR5nURXRUR5 gr*)rr�r�r�r�)r�rzs  r%�"test_move_file_to_dir_pathlike_src�+TestMove.test_move_file_to_dir_pathlike_src�
s(���t�}�}�%�����c�<�<����?r'c�z�[UR5nURURXR5 gr*)rr�r�r�r��r�r{s  r%�"test_move_file_to_dir_pathlike_dst�+TestMove.test_move_file_to_dir_pathlike_dst�
s(���t�|�|�$�����d�m�m�S�-�-�@r'c�$�UR5 gr*)r�r�s r%�test_move_file_other_fs� TestMove.test_move_file_other_fs�
s��	
���r'c�$�UR5 gr*)r�r�s r%�test_move_file_to_dir_other_fs�'TestMove.test_move_file_to_dir_other_fs�
s��	
�"�"�$r'c���[R"UR5S9nURURX5 [
R"U5 g![
R"U5 f=frj)rsr�r�r�r�rr��r�r�s  r%�
test_move_dir�TestMove.test_move_dir�
sL���/�/�d�l�l�n�5��	&�� � ����w�@����W�%��I���W�%�s�A�A/c�$�UR5 gr*)r�r�s r%�test_move_dir_other_fs�TestMove.test_move_dir_other_fs�
s��	
���r'c
���URURUR[RRUR[RR
UR555 gr*)r�r�r�r+r8r9rir�s r%�test_move_dir_to_dir�TestMove.test_move_dir_to_dir�
sF�����T�\�\�4�<�<��G�G�L�L����r�w�w�'7�'7����'E�F�	Hr'c�$�UR5 gr*)r�r�s r%�test_move_dir_to_dir_other_fs�&TestMove.test_move_dir_to_dir_other_fs�
s��	
�!�!�#r'c
�&�URUR[RR-UR
[RR
UR
[RRUR555 gr*)r�r�r+r8�sepr�r9rir�s r%�test_move_dir_sep_to_dir�!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
�&�URUR[RR-UR
[RR
UR
[RRUR555 gr*)r�r�r+r8�altsepr�r9rir�s r%�test_move_dir_altsep_to_dir�$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��[UR5 UR[R[R
URUR5 gr*)r@r�r�r�rr�r�r�r�s r%�"test_existing_file_inside_dest_dir�+TestMove.test_existing_file_inside_dest_dir�
s2���D�M�M�"����&�,�,����T�]�]�D�L�L�Qr'c���[RRURS5nUR	[
R[
RURU5 g�Nr>)r+r8r9r�r�r�rr�r�s  r%�test_dont_move_dir_in_itself�%TestMove.test_dont_move_dir_in_itself�
s:���g�g�l�l�4�<�<��/�����&�,�,����T�\�\�3�Gr'c	��[R"[5 SHzup[RR	[U5n[RR	[U5nUR[R"X5SU<SU<S3S9 M| [R"[5 g![R"[5 f=f)N))�srcdirzsrcdir/dest�)_destinsrc() wrongly concluded that dst (z) is not in src (�)�rI)
r+r�rr8r9r�r��
_destinsrcrr�rss   r%�test_destinsrc_false_negative�&TestMove.test_destinsrc_false_negative�
s���
�����	%�7����g�g�l�l�6�3�/���g�g�l�l�6�3�/������ 1� 1�#� ;�>A�3�"H� �I�8�
���V�$��I���V�$���BB7�7Cc	��[R"[5 SHzup[RR	[U5n[RR	[U5nUR[R"X5SU<SU<S3S9 M| [R"[5 g![R"[5 f=f)N))r�zsrc/dest)r�z
srcdir.newr�z
) is in src (r�r�)
r+r�rr8r9r�r�r�rr�rss   r%�test_destinsrc_false_positive�&TestMove.test_destinsrc_false_positives���
�����	%�N����g�g�l�l�6�3�/���g�g�l�l�6�3�/��� � ��!2�!2�3�!<�9<�c�!C�!�D�O�
���V�$��I���V�$�r�c���[RRURS5n[R"UR
U5 [R"XR5 UR[RRUR55 UR[RRUR
UR55 gr�)r+r8r9r�r�r�r�r�r�r�re�samefiler�s  r%�test_move_file_symlink�TestMove.test_move_file_symlinks����g�g�l�l�4�<�<��/��
�
�
�4�=�=�#�&����C���'���������t�}�}�5�6�������(�(�����
�
�F�Gr'c��Sn[RRURU5n[R"UR
U5 [R"X R5 [RRURU5nUR[RRU55 UR[RRUR
U55 gr�)r+r8r9r�r�r�r�r�r�r�rer�)r�r�r{�
final_links    r%�test_move_file_symlink_to_dir�&TestMove.test_move_file_symlink_to_dirs������g�g�l�l�4�<�<��2��
�
�
�4�=�=�#�&����C���&��W�W�\�\�$�,�,��9�
���������z�2�3�������(�(����
�C�Dr'c�L�[RRURS5n[RRURS5n[R"X5 [RRUR
S5n[R"X#5 UR[RRU55 UR[RRU5[RRU55 g�Nr?r>r@)r+r8r9r�r�r�r�r�r�rer��realpath�r�rzr{r�s    r%�test_move_dangling_symlink�#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�<�[RRURS5n[RRURS5n[R"U5 [R
"X5 [RRURS5n[R"X#5 UR[RRU55 UR[RRX55 gr�)r+r8r9r�r�r�r�r�r�r�rer�r�s    r%�test_move_dir_symlink�TestMove.test_move_dir_symlink.s����g�g�l�l�4�<�<��/���g�g�l�l�4�<�<��/��
����
�
�
�
�3���7�7�<�<����f�5�����C�"���������x�0�1�������(�(��7�8r'c	��[R"URUR5nUR	U[
RRUR[
RRUR555 gr*)	r�r�r�r�r�r+r8r9rirs  r%�test_move_return_value�TestMove.test_move_return_value:sT��
�[�[�������
5�����������T�\�\�2�7�7�+;�+;�D�M�M�+J�K�	Mr'c�
�[R"UR[RRURS55nURU[RRURS55 gr�)r�r�r�r+r8r9r�r�rs  r%� test_move_as_rename_return_value�)TestMove.test_move_as_rename_return_value?sL��
�[�[���������T�\�\�5�(I�
J������R�W�W�\�\�$�,�,��>�?r'c�^�/mU4Sjn[R"URURUS9 UR	[T5S5 g)Nc�*>�TRX45 gr*r��rzr{�moveds  �r%r�7TestMove.test_move_file_special_function.<locals>._copyF�����L�L�#��$r'rr�)r�r�r�r�r�r��r�rrs  @r%�test_move_file_special_function�(TestMove.test_move_file_special_functionCs9�����	%����D�M�M�4�<�<�u�E�����U��Q�'r'c�^�/mU4Sjn[R"[RR	UR
S55 [R"[RR	UR
S55 [R"UR
URUS9 UR[T5S5 g)Nc�*>�TRX45 gr*r�r�s  �r%r�6TestMove.test_move_dir_special_function.<locals>._copyNrr'r��child1rr)rrr+r8r9r�r�r�r�r�r�rs  @r%�test_move_dir_special_function�'TestMove.test_move_dir_special_functionKs{�����	%��#�#�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�`�UR5Ul[RR	[RRUR5[RR
UR5R55nURURU5 [R"URU5 UR[RRU55 [R"U5 g![R"U5 f=fr*)r�r�r+r8r9r�ri�upperrBr�r�r�rdrr�s  r%�test_move_dir_caseinsensitive�&TestMove.test_move_dir_caseinsensitiveUs����|�|�~����'�'�,�,���������-���� � ����.�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���[RRURS5n[RRURS5n[R
"URUSS9 [R"X!5 UR[RRU55 UR[RRURU55 UR[RRU55 [R
"URUSS9 UR[R5 [R"X!5 SSS5 UR[RRURU55 UR[RRU55 g!,(df   Nv=f)N�	linktodirTr()r+r8r9r�r�r�r�r�r�rer�r�r�r�r)r�r{rzr�s    r%�"_test_move_symlink_to_dir_into_dir�+TestMove._test_move_symlink_to_dir_into_dirgs#���g�g�l�l�4�<�<��5���7�7�<�<����k�:��
�
�
�4�<�<��$�?����C����������x�0�1�������(�(����x�@�A����������,�-�	�
�
�4�<�<��$�?�
�
�
�v�|�|�
,��K�K��!�-�������(�(����x�@�A���������s�+�,�-�
,�s�G&�&
G4c�:�URUR5 gr*)rr�r�s r%�!test_move_symlink_to_dir_into_dir�*TestMove.test_move_symlink_to_dir_into_dirys���/�/����=r'c��[RRURS5n[R"UR
USS9 UR
U5 g)N�otherlinktodirTr()r+r8r9r�r�r�rr�s  r%�,test_move_symlink_to_dir_into_symlink_to_dir�5TestMove.test_move_symlink_to_dir_into_symlink_to_dir}s=���g�g�l�l�4�<�<�)9�:��
�
�
�4�<�<��$�?��/�/��4r'r��SF_IMMUTABLE�	UF_OPAQUEzrequires lchflagsc�j�[R"[5 [R"[[R
5 UR
[[R[[5 UR[[R"5;5 [R"[[R5 [R"[R R#[S55 [R"[[R
5 UR
[[R[[5 UR[[R"5;5 [R R%[5(aC[R"[[R5 [R&"[5 [R R%[5(aD[R"[[R5 [R&"[5 gg![R R%[5(aC[R"[[R5 [R&"[5 [R R%[5(aD[R"[[R5 [R&"[5 ff=f)Nr�)r+r��
TESTFN_SRCr�rrr�r�r�r��
TESTFN_DSTr�rcrrrr8r9r�r�r�s r%�test_move_dir_permission_denied�(TestMove.test_move_dir_permission_denied�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
�E?I�CL2)r�r�r�r�N)0r�r�r�r�rr�r�r�r�r�r�r3r�r�r�r�r�r�r�r�r�r+r8r�r�r�r�r�r�rr�r�r�r�r�r�r�rr
rrrrr�rrrr r�rCr'r%r�r��
s3��,�.�.�K�J�@�
A�
�����%��%�&�����H�
�$��$�H���������)B�C�H�D�H�R�
H�

%�
%��"�"��H��#�H��"�"��E��#�E��"�"��L��#�L��"�"��9��#�9�M�
@��(��(��(��(��$�-��-�"�"�"�>�#�>��"�"�5�#�5�
�'�'�
�����Z�0�8�$�T�>�:�8�$�T�;�7�,�.�-�	.�(�
-r'r�c���\rSrSr"SS\5rSr\R"\	S5S5r
\R"\	S5S5r\R"\	S5S5rS	r
g
)�TestCopyFilei�c�<�\rSrSrSrSrSrS	SjrSrSr	Sr
Srg)
�TestCopyFile.Fauxi�FNc��XlX lgr*)�_raise_in_exit�_suppress_at_exit)r��
raise_in_exit�suppress_at_exits   r%�__init__�TestCopyFile.Faux.__init__�s��"/��%5�"r'c��g)Nr�rC)r�r#s  r%r\�TestCopyFile.Faux.read�s��r'c��SUlgr1)�_enteredr�s r%�	__enter__�TestCopyFile.Faux.__enter__�s	�� �D�Mr'c�r�XU4UlUR(aSUl[S5eUR$)NT�Cannot close)�_exited_withr'�_raisedr r()r��exc_type�exc_val�exc_tbs    r%�__exit__�TestCopyFile.Faux.__exit__�s6�� (�6� 9�D���"�"�#����n�-�-��)�)�)r')r0r5r'r6r(r�)r�r�r�r�r0r5r6r+r\r1r:r�rCr'r%�Fauxr%�s%��������	6�	�	!�	*r'r<c��SSjn[R"[SU5 UR[5 [R
"SS5 SSS5 SSS5 g!,(df   N=f!,(df   g=f)Nc�&�US:Xa[S5eg)N�srcfilezCannot open "srcfile"rU)r�r^s  r%�_open�4TestCopyFile.test_w_source_open_fails.<locals>._open�s���9�$��5�6�6�%r'r<r?�destfile�rX)rr]r�r�r r�)r�r@s  r%�test_w_source_open_fails�%TestCopyFile.test_w_source_open_fails�sT��	�
�
�
�v�v�u�
5��"�"�7�+����	�:�6�,�6�
5�+�+��6�
5�s"�A2�A!�A2�!
A/	�+A2�2
Bzskipped on macOSc�^�UR5mSU4Sjjn[R"[SU5 [R"SS5 SSS5 URTR5 URTRS[L5 URTRSRS5 g!,(df   Nw=f)	Nc�8>�US:XaT$US:Xa[S5eg)Nr?rB�Cannot open "destfile"rU)r�r^r?s  �r%r@�2TestCopyFile.test_w_dest_open_fails.<locals>._open�s)����9�$����:�%��6�7�7�&r'r<r?rBrr�)rHrC)r<rr]r�r�r�r0r5r r�r#)r�r@r?s  @r%�test_w_dest_open_fails�#TestCopyFile.test_w_dest_open_fails�s�����)�)�+��	��
�
�v�v�u�
5��O�O�I�z�2�6�����(�(�)�����,�,�Q�/�7�:�;�����-�-�a�0�5�5�4�	6�	6�
5�s�B?�?
C
c�2^^�UR5mURS5mS	UU4Sjjn[R"[SU5 [R"SS5 SSS5 URTR5 URTR5 URTR5 URTRS[L5 URTRSRS5 g!,(df   N�=f)
NTc�&>�US:XaT$US:XaT$g�Nr?rBrC�r�r^rBr?s  ��r%r@�3TestCopyFile.test_w_dest_close_fails.<locals>._open��"����9�$����:�%���&r'r<r?rBrr�)r4rC)r<rr]r�r�r�r0r6r5r r�r#�r�r@rBr?s  @@r%�test_w_dest_close_fails�$TestCopyFile.test_w_dest_close_fails�s�����)�)�+���9�9�T�?��	�	��
�
�v�v�u�
5��O�O�I�z�2�6�����(�(�)�����)�)�*�����(�(�)�����,�,�Q�/�7�:�;�����-�-�a�0�5�5�*�	,�
6�
5�s�	D�
Dc�l^^�URS5mUR5mSUU4Sjjn[R"[SU5 UR	[
5 [R"SS5 SSS5 SSS5 URTR5 URTR5 URTR5 URTRSSL5 URTR5 g!,(df   N�=f!,(df   N�=f)NTc�&>�US:XaT$US:XaT$grNrCrOs  ��r%r@�5TestCopyFile.test_w_source_close_fails.<locals>._open�rQr'r<r?rBrrC)r<rr]r�r�r r�r�r0r�r6r5rRs  @@r%�test_w_source_close_fails�&TestCopyFile.test_w_source_close_fails�s�����)�)�D�/���9�9�;��	�	��
�
�v�v�u�
5��"�"�7�+����	�:�6�,�6�	
����(�(�)�����)�)�*�����)�)�*�����,�,�Q�/�4�7�8�������(�
,�+��6�
5�s$�	D%�D�7D%�
D"	�D%�%
D3rCN)r�r�r�r��objectr<rDr�r�r�rJrSrXr�rCr'r%r#r#�ss��*�v�*�$7��_�_�U�.�/�6�0�6�"�_�_�U�.�/�,�0�,�(�_�_�U�.�/�)�0�)r'r#c���\rSrSrSr\S5r\S5rSr\	RS5rSrSr
S	rS
r\R""\R&S:gS5S
5rSrg)�TestCopyFileObjii c�8�[[UR5 gr*)rUr�FILESIZE��clss r%�
setUpClass�TestCopyFileObj.setUpClasss�������-r'c�l�[R"[5 [R"[5 gr*)rrwrrr_s r%�
tearDownClass�TestCopyFileObj.tearDownClass	s������ �����!r'c�8�[R"[5 gr*�rrwrr�s r%�tearDown�TestCopyFileObj.tearDown�������!r'c#�# �[[S5n[[S5nX4v� SSS5 SSS5 g!,(df   N=f!,(df   g=f7f�NrWrH�r<rrrss   r%�	get_files�TestCopyFileObj.get_files�A���
�&�$�
�3��g�t�$���j� �%� �
�$�$�� �
��/�A�A�;�A�	A�
A		�A�
A�Ac��[US5n[US5nURUR5UR55 SSS5 SSS5 g!,(df   N=f!,(df   g=fr�)r<r�r\)r�rzr{�fsrc�fdsts     r%�assert_files_eq�TestCopyFileObj.assert_files_eqsN��
�#�t�_���c�4��D�� � �����d�i�i�k�:�!��_� ����_�s"�
A+�/A�	A+�
A(	�$A+�+
A9c��UR5up[R"X5 SSS5 UR[[
5 g!,(df   N)=fr*)rnr��copyfileobjrurrrss   r%�test_content�TestCopyFileObj.test_contents<��
�^�^�
��#����s�(�����V�W�-��
�s�A
�
Ac��UR5up[R"X5 SSS5 g!,(df   g=fr*)rnr�rxrss   r%�test_file_not_closed�$TestCopyFileObj.test_file_not_closed!s*��
�^�^�
��#����s�(��
�
�s	�3�
Ac�0�UR5up[R"X5 URUR	5UR
5 URUR	5UR
5 SSS5 g!,(df   g=fr*)rnr�rxr��tellr^rss   r%�test_file_offset� TestCopyFileObj.test_file_offset's^��
�^�^�
��#����s�(����S�X�X�Z����7����S�X�X�Z����7��
�
�s�A-B�
Br�zWindows onlyc��[RRS5n[R"[
[5 SSS5 URWRSSS5 [R"[R"5SS9nURS5 SSS5 WRnUR[ R"U5 [RRS5n[R"U[5 SSS5 URURSSS5 [R"[R"5SS9nSSS5 URnUR[ R"U5 [RRS5n[R"U[5 SSS5 UR%U[5 g!,(df   GN�=f!,(df   GNj=f!,(df   GN
=f!,(df   N�=f!,(df   Nl=f)	Nzshutil._copyfileobj_readintorrqiFrnsfoor)r�r9r:r�r�rrr��	call_argsrsrtr+rur=rir�rrwru)r��mrSrws    r%�
test_win_impl�TestCopyFileObj.test_win_impl-s����]�]�
 �
 �!?�
@�A��O�O�F�G�,�A�
	
������Q���*�O�<��
(�
(�R�Y�Y�[��
G�1�
�G�G�F�O�H��������	�(�(�%�0�
�]�]�
 �
 �!?�
@�A��O�O�E�7�+�A�������Q���*�A�.��
(�
(�R�Y�Y�[��
G�1��H��������	�(�(�%�0�
�]�]�
 �
 �!?�
@�A��O�O�E�7�+�A�	
���U�G�,�3A�
@��H�
G��A�
@��
H�
G��A�
@�s;� G5�H�7H�%H+�:H<�5
H�
H�
H(�+
H9�<
I
rCN)r�r�r�r�r^�classmethodrardrh�
contextlib�contextmanagerrnruryr|r�r�r�r+rir�r�rCr'r%r\r\s����H��.��.��"��"�"����!��!�
;�
.�
"�8��_�_�R�W�W��_�n�5�-�6�-r'r\c��\rSrSrSrSrSrSr\S5r	\S5r
Sr\RS	5rS
rSrSrS
rSrSrSrSrSrSrg)�_ZeroCopyFileTestiLz#Tests common to all zero-copy APIs.i�r'r�c��[[UR5 [[S5nUR	5UlSSS5 g!,(df   g=fr�)rUrr^r<r\�FILEDATA)r`rSs  r%ra�_ZeroCopyFileTest.setUpClassRs5�������-�
�&�$�
�1��6�6�8�C�L� �
�
�s�A
�

Ac�8�[R"[5 gr*)rrwrr_s r%rd�_ZeroCopyFileTest.tearDownClassYs������ r'c�8�[R"[5 gr*rgr�s r%rh�_ZeroCopyFileTest.tearDown]rjr'c#�# �[[S5n[[S5nX4v� SSS5 SSS5 g!,(df   N=f!,(df   g=f7frlrmrss   r%rn�_ZeroCopyFileTest.get_files`rprqc��[S5e)Nzmust be implemented in subclass)r�)r�r#r$s   r%�zerocopy_fun�_ZeroCopyFileTest.zerocopy_funfs��!�"C�D�Dr'c��UR5 UR5 UR5 UR5 gr*)rhrdrarr�s r%�reset�_ZeroCopyFileTest.resetis*���
�
�����������
�
�r'c���UR5upURX5 SSS5 UR[[SS9UR
5 UR5up[RRS5n[R"[[5 SSS5 SSS5 g!,(df   N�=f!,(df   N(=f!,(df   g=f)NT�r]zshutil.copyfileobj)rnr�r�r_rr�r�r9r:r�r�r)r�rzr{r�s    r%�test_regular_copy�#_ZeroCopyFileTest.test_regular_copyqs���
�^�^�
��#����c�'������7�4�8�$�-�-�H�
�^�^�
��#����$�$�%9�:�a������0�;��
�	�
��
;�:���
�s/�B8�%"C� C	�'C�8
C�	
C	�C�
C(c�n�URUR5 UR5upUR[[
45 UR
X5 SSS5 SSS5 UR[[SS9UR5 g!,(df   N?=f!,(df   NH=f)NTr�)r�r�rnr�r rr�r�r_rr�rss   r%�test_same_file� _ZeroCopyFileTest.test_same_file{s}������
�
�#�
�^�^�
��#��"�"�G�->�#?�@��!�!�#�+�A��	
����6�$�7����G�A�@���
�s#�B&�
B�B&�
B#	�B&�&
B4c�*�[R"[R"5S9nUR	[
5n[R"US5 SSS5 URWRRU5 g!,(df   N5=f)Nr��new)rsr�r+rur�r�r�r�r�r�r�)r�rir�s   r%�test_non_existent_src�'_ZeroCopyFileTest.test_non_existent_src�s]�����2�9�9�;�/��
�
�
�0�
1�R��O�O�D�%�(�2�������.�.��5�2�
1�s�B�
Bc�^^�[S-m[S-mURU4Sj5 URU4Sj5 [T5 [TS5n[TS5nUR	X5 SSS5 SSS5 UR[
TSS9S	5 g!,(df   N1=f!,(df   N:=f)
Nrzr{c�0>�[R"T5$r*�rrw)rxs�r%r��3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>�����	� 0� 0�� 9r'c�0>�[R"T5$r*r�)rys�r%r�r��r�r'rWrHTr�r')rr�r@r<r�r�r_)r�rzr{ryrxs   @@r%�test_empty_file�!_ZeroCopyFileTest.test_empty_file�s�����5�.���5�.�����9�:����9�:��G��
�'�4�
 �C��g�t�$���!�!�#�+�%�!�	
����7�4�8�#�>�%�$��!�
 �s$�
B1�#B �5B1� 
B.	�*B1�1
B?c���[RRUR[S9 UR[[R[[5 SSS5 g!,(df   g=f)Nr)
r�r9r:�
PATCHPOINT�ZeroDivisionErrorr�r�r�rrr�s r%�test_unhandled_exception�*_ZeroCopyFileTest.test_unhandled_exception�sS��
�]�]�
 �
 ����->�!�@����/�$�o�o�v�w�
@�@�@�@�s�/A%�%
A3c��[RRUR[	[
RS5S9 UR5upUR[5 URX5 SSS5 SSS5 SSS5 g!,(df   N=f!,(df   N(=f!,(df   g=f�N�yor)r�r9r:r�r r"�EINVALrnr�rr�rss   r%�test_exception_on_first_call�._ZeroCopyFileTest.test_exception_on_first_call�s����]�]�
 �
 ����-4�U�\�\�4�-H�!�J����!�Z�c��&�&�'8�9��%�%�c�/�:�"�J�J�:�9��"�!��J�J�s<�B7�B&�*B�<B&�B7�
B#�B&�&
B4	�0B7�7
Cc�R�[RRUR[	[
RS5S9 UR5upUR[URX5 SSS5 SSS5 g!,(df   N=f!,(df   g=fr�)
r�r9r:r�r r"�ENOSPCrnr�r�rss   r%�test_filesystem_full�&_ZeroCopyFileTest.test_filesystem_full�s{���]�]�
 �
 ����-4�U�\�\�4�-H�!�J����!�Z�c��!�!�'�4�+<�+<�c�G�"�J�J�!�!��J�J�s$�B�$B�6B�
B	�B�
B&rCN)r�r�r�r��__doc__r^r�r�r�rardrhr�r�rnr�r�r�r�r�r�r�r�r�r�rCr'r%r�r�Ls���-� �H��H��J��5��5��!��!�"����!��!�
E�� �H�6�?�@�0�Hr'r�zos.sendfile() not supportedc�N�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
Srg
)�TestZeroCopySendfilei��os.sendfilec�.�[R"X5$r*)r��_fastcopy_sendfile)r�rsrts   r%r��!TestZeroCopySendfile.zerocopy_fun�s���(�(��4�4r'c���[R"UR5n[[S5nUR[5 URX5 SSS5 [R"X5 SSS5 SSS5 UR[[SS9UR5 g!,(df   N]=f!,(df   NP=f!,(df   NY=f)NrHTr�)�io�BytesIOr�r<rr�rr�r�rxr�r_rss   r%�test_non_regular_file_src�.TestZeroCopySendfile.test_non_regular_file_src�s���
�Z�Z��
�
�
&�#��g�t�$���&�&�'8�9��%�%�c�/�:��"�"�3�,�%�'�	
����7�4�8�$�-�-�H�	:�9��%�$��'�
&�s:�C�C�B1�C�8C�1
B?�;C�
C	�C�
C!c���[[S5n[R"5nUR	[
5 UR
X5 SSS5 [R"X5 URS5 URUR5UR5 SSS5 SSS5 g!,(df   Np=f!,(df   N(=f!,(df   g=f)NrWr)
r<rr�r�r�rr�r�rx�seekr�r\r�rss   r%�test_non_regular_file_dst�.TestZeroCopySendfile.test_non_regular_file_dst�s���
�&�$�
�3�������&�&�'8�9��%�%�c�/�:��"�"�3�,������� � �����T�]�]�;�� �
�9�9����� �
�s:�C�C
�B9�AC
�(C�9
C�C
�

C	�C�
C)c�^^�UU4Sjn/m[Rm[RR	SSUS9 UR5up#UR
[5n[R"X#5 SSS5 SSS5 SSS5 URWRR[R5 g!,(df   NS=f!,(df   N\=f!,(df   Ne=f)Nc�x>�T(dTRS5 T"U0UD6$[[RS5e)Nr�)rfr r"�EBADF)r#r$r��
orig_sendfiles  ��r%rm�DTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfile�s3�������D�!�$�d�5�f�5�5��e�k�k�4�0�0r'r�T)rMr)r+rmr�r9r:rnr�r r�r�r�r�r"r�)r�rmrzr{r�r�r�s     @@r%�test_exception_on_second_call�2TestZeroCopySendfile.test_exception_on_second_call�s����	1������
�
�]�]�
 �
 ��t�-5�!�7����!�Z�c��&�&�w�/�2��-�-�c�7�0�"�7�	
������+�+�U�[�[�9�0�/��"�!��7�7�s;�C*�C�$C�;C�C*�
C�C�
C'	�#C*�*
C8c�P�[RRS[S9nUR	5up#[
R"X#5 SSS5 SSS5 UR[[SS9UR5 g!,(df   N?=f!,(df   NH=f)N�os.fstatrTr�)r�r9r:r rnr�r�r�r_rr��r�r�rzr{s    r%�test_cant_get_size�'TestZeroCopySendfile.test_cant_get_size�st���]�]�
 �
 ���
 �
A�Q����!�Z�c��)�)�#�3�"�B�	
����7�4�8�$�-�-�H�"�!��B�
A�s"�B�B�
B�
B	�B�
B%c��[RR5nSUl[RR	SUS9nUR5up4[R"X45 SSS5 SSS5 UR[[SS9UR5 g!,(df   N?=f!,(df   NH=f)Nir�r*Tr�)r�r9�Mock�st_sizer:rnr�r�r�r_rr��r�r9r�rzr{s     r%�test_small_chunks�&TestZeroCopySendfile.test_small_chunks�s���
�}�}�!�!�#�� ���
�]�]�
 �
 ��$�
 �
?�1����!�Z�c��)�)�#�3�"�@�	
����7�4�8�$�-�-�H�"�!��@�
?�s$�B8�B'�.B8�'
B5	�1B8�8
Cc��[RR5nURS-Ul[RRSUS9nUR
5up4[R"X45 SSS5 SSS5 UR[[SS9UR5 g!,(df   N?=f!,(df   NH=f)Ni@r�r*Tr�)
r�r9r�r^r�r:rnr�r�r�r_rr�r�s     r%�test_big_chunk�#TestZeroCopySendfile.test_big_chunk�s���
�}�}�!�!�#���}�}�(9�:���
�]�]�
 �
 ��$�
 �
?�1����!�Z�c��)�)�#�3�"�@�	
����7�4�8�$�-�-�H�"�!��@�
?�s$�C�"B4�;C�4
C	�>C�
Cc��[RRS[S9nUR	[[
R[[5 URSSnURU[RR[55 [R"[5 [![S5 UR#[R[S-5 UR	[[
R[[S-5 URSSnURUS5 SSS5 g!,(df   g=f)Nr�rrrshello�3i�)r�r9r:r�r�r�r�rrr�r�r+r8�getsizerrwr@r�)r�r��	blocksizes   r%�test_blocksize_arg�'TestZeroCopySendfile.test_blocksize_arg�s���
�]�]�
 �
 ��->�!�@�CD����/�$�o�o�v�w�
@����A��q�)�I�
���Y�������(?�@����W�%����*��O�O�I�,�,�g��m�<����/�$�o�o�w��#�
�
G����A��q�)�I����Y��0�@�@�@�s�DE�
Ec��[RRUR[	[
RS5S9nUR5up#UR[5 [R"X#5 SSS5 SSS5 SSS5 [RRUR5n[R"[[5 SSS5 S[lg!,(df   N{=f!,(df   N�=f!,(df   N�=f!,(df   NM=f!S[lf=f)Nr�rT)r�r9r:r�r r"�ENOTSOCKrnr�rr�r�r�rr�_USE_CP_SENDFILEr�s    r%�test_file2file_not_supported�1TestZeroCopySendfile.test_file2file_not_supported
s���
	+����$�$��O�O� '����� =�%�?�BC��^�^�%��#��*�*�+<�=��1�1�#�;�>�&�?����$�$�T�_�_�5�������0�6�'+�F�#�>�=��&�%��?�?��6�5��'+�F�#�sl�AD;�D�D�+C7�D�
D�1D;� D*�#D;�7
D�D�
D	�D�
D'�#D;�*
D8�4D;�;
ErCN)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rCr'r%r�r��s8���J�5�I�<�:�$I�I�I�1�$+r'r�z
macOS onlyc��\rSrSrSrSrSrg)�TestZeroCopyMACOSi&
zposix._fcopyfilec�L�[R"X[R5$r*)r��_fastcopy_fcopyfile�posix�_COPYFILE_DATArss   r%r��TestZeroCopyMACOS.zerocopy_fun*
s���)�)�#�E�4H�4H�I�Ir'rCN)r�r�r�r�r�r�r�rCr'r%r�r�&
s
��#�J�Jr'r�c�P�\rSrSrSrSrSr\R"\	R"\RR55S5\R"5\R"\"\	S5S5S555r\R$"\R&S	5S
5rSrg)
�TestGetTerminalSizei.
c��[R"5nURURS5 URURS5 g)z�Check if get_terminal_size() returns a meaningful value.

There's no easy portable way to actually check the size of the
terminal, so let's check if it returns something sensible instead.
rN)r��get_terminal_sizer��columns�lines)r�rOs  r%�test_does_not_crash�'TestGetTerminalSize.test_does_not_crash/
s:���'�'�)��������a�0�����
�
�A�.r'c��[R"5nSUS'US	[R"5nSSS5 UR	WR
S5 [R"5nUS	SUS'[R"5nSSS5 UR	URS5 g!,(df   N�=f!,(df   N<=f)z.Check if environment variables have precedence�777�COLUMNS�LINESNi	�888ix)rrEr�r�r�r�r��r�rGrOs   r%�test_os_environ_first�)TestGetTerminalSize.test_os_environ_first9
s����
*�
*�
,��"�C�	�N��G���+�+�-�D�-�	
������s�+�
�
*�
*�
,���I�� �C��L��+�+�-�D�-�	
������S�)�-�
,��-�
,�s�B0�-C�0
B>�
Cc��[R"5nSUS'SUS'[R"5nSSS5 UR	WR
S5 UR	URS5 g!,(df   NG=f)Nrdr��yyyr�r)rrEr�r�r�r�r�rs   r%�test_bad_environ�$TestGetTerminalSize.test_bad_environH
sh��
�
*�
*�
,��"�C�	�N� �C��L��+�+�-�D�-�	
������a�0�����
�
�A�.�-�
,�s� A7�7
Bz
not on ttyr�zneed os.get_terminal_size()c���[R"SS/5R5R5n[WS5[US54n[R"5nURSS5 [R"5nSSS5 URUW5 g![[
[R4a URS5 N�f=f!,(df   NW=f)	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.
�sttyrOzstty invocation failedr�rr�r�N)r�rBrFr�r�r�rDrr�rrE�unsetr�r�r�)r�rOr�rGr�s     r%�test_stty_match�#TestGetTerminalSize.test_stty_matchP
s���	4��*�*�F�F�+;�<�C�C�E�K�K�M�D���Q��L�#�d�1�g�,�/��
�
*�
*�
,���I�I�g�y�)��-�-�/�F�-�	
����6�*��"�?��-�-�/�	4��M�M�2�3�	4��
-�
,�s�4B*�'(C �*0C�C� 
C.zWASI has no /dev/nullc���[R"5nURSS5 [R"[
SS5 [R"SS9nSSS5 URWRS5 URURS5 [[RSS	S
9n[R"[
SU5 [R"SS9nSSS5 SSS5 URURS5 URURS
5 SSS5 g!,(df   N�=f!,(df   Nh=f!,(df   Nq=f!,(df   g=f)Nr�r��
__stdout__)r��)�fallbackr�r�wrYrZ)�r�rr�)rrEr
rr]r�r�r�r�r�r�r<r+�devnull)r�rGrOrSs    r%�
test_fallback�!TestGetTerminalSize.test_fallbackh
s��
�
*�
*�
,���I�I�g�y�)��"�"�3��d�;��/�/��B��<����T�\�\�2�.����T�Z�Z��,��b�j�j�#��8�A��"�"�3��a�8��/�/��B��9�9�
���T�\�\�2�.����T�Z�Z��,�-�
,�<�;��9�8��9�8��-�
,�sU�/E)�D6�AE)�3E�E�%E�-AE)�6
E	�E)�
E�E�
E&	�"E)�)
E7rCN)r�r�r�r�r�rrr�r�r+�isattyr�rrvr�requires_subprocessrrrr��is_wasirr�rCr'r%r�r�.
s���/�
*�/�������3�>�>�#8�#8�#:�;�\�J�� � �"�
�����%8�9�6�8�+�8�#�K�+�(�_�_�W�_�_�&=�>�-�?�-r'r�c��\rSrSrSrSrSrg)�PublicAPITestsi|
z>Ensures that the correct values are exposed in the public API.c�"�UR[[S55 /SQn[[S5(d[RS:XaURS5 UR
[[R5[U55 g)N�__all__)rxr�rCrWr�r�r�r�r�rr��	ExecErrorrrrrrr	rrr�r�r�r�r
�statvfsr�r�)	r�rrr�r+rirfr�r�r)r��
target_apis  r%�test_module_all_attribute�(PublicAPITests.test_module_all_attribute
s`�������	�2�3�<�
��2�y�!�!�R�W�W��_����l�+�����V�^�^�,�c�*�o�>r'rCN)r�r�r�r�r�r r�rCr'r%rr|
s
��H�?r'r�__main__)r')F)Wr��
unittest.mockr�rsr�rr+�os.pathr"r1�pathlibr�rKrMr�r�rrrrrrr	r
rrr
rr�r&r��ImportErrorr�r�test.supportr�test.support.os_helperrrrrrrr�r�r�r�r�rWrYrVr�r9r:�AssertionErrorr�r&r3r@rUr_rgr~�SUPPORTS_SENDFILEr�r��TestCaser�r�r<r�r�rrr�r�r#r\rZr�r�r�r�r�rr��mainrCr'r%�<module>r-s-����
��
��	������
�
��	�6�6�6�6������"�3�(�
�3�,��
�f�_�
�
�f�_�
�������)��

�,�,�
!�
!�'�
*��	�l�l�2�A��%�������O����=�=���z�"�#>�?��A��L�	��)�$�
�&�:0�1���	�	�u"��8�,�,�u"�p^2�8�X�.�.�^2�@~?�x��*�*�~?�BC	8�8�X�.�.�C	8�Lm1�x��*�*�m1�`	����,��(�+�+�,��,�D
-�Y�
-�J-�x��*�*�J-�ZY)�8�$�$�Y)�xG-�h�'�'�G-�T`H��`H�F
���&�&�(E�F�s+�,�h�.?�.?�s+�G�s+�l
���U��L�)�J�)�8�+<�+<�J�*�J�K-�(�+�+�K-�\?�X�&�&�?�$�z���M�M�O���ck���E���$���O���
���G��s6�&K�
K�'K)�K�K�K&�%K&�)K5�4K5

Youez - 2016 - github.com/yon3zu
LinuXploit