
    z%i                       d dl Z d dlZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlZ	 d dlZd dl!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d dl#m(Z( e&dz   Z)e&dz   Z*e&d	z   Z+ejX                  j[                  d
      Z.ejX                  j[                  d      Z/ejX                  dd dk(  Z0	 d dl1Z1d dl2Z2dZ3	 d dl4Z4e jj                  jm                  d e7d            Z8d Z9d Z:d>dZ;d Z<d>dZ=d Z>d Z? e?       Z@d ZA G d d      ZB G d deBe j                        ZD G d d eBe j                        ZE G d! d"eBe j                        ZF G d# d$eBe j                        ZG G d% d&eBe j                        ZH G d' d(eBe j                        ZI G d) d*eI      ZJ G d+ d,eBe j                        ZK G d- d.e j                        ZL G d/ d0e j                        ZM G d1 d2eN      ZO e j                  e@ d3       G d4 d5eOe j                               ZQ e j                  e. d6       G d7 d8eOe j                               ZR G d9 d:e j                        ZS G d; d<e j                        ZTeUd=k(  r e j                          yy# e $ r dZY Ow xY w# e $ r dZ3Y w xY w# e $ r dZ4Y w xY w)?    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   aixTFzos.chdirzshouldn't call os.chdir()side_effectc                  8    t        t        t        dd      d      )NEXDEV   zInvalid cross-device link)OSErrorgetattrerrno)argskwargss     D/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_shutil.py_fake_renamer&   ;   s    
'%"-/J
KK    c                 B     t        j                          fd       }|S )Nc                      	 t         j                  }t        t         _         | i ||t         _        S # t         _        w xY wN)osrenamer&   )r#   r$   builtin_renamefuncs      r%   wrapzmock_rename.<locals>.wrap@   s4    	'YYN$BI((&BIBIs	   &5 A)	functoolswraps)r.   r/   s   ` r%   mock_renamer2   ?   s%    __T' ' Kr'   c                     	 t        | t              rt        j                  j                  |  } |rdnd}|rd nd}t        | ||      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nwbwutf-8encoding)
isinstancetupler+   pathjoinopenwrite)r;   contentbinarymoder8   fps         r%   
write_filerC   J   sf     $ww||T"4sDt7H	dD8	, 
  s   A##A,c                 ^   	 d }t        |d      }dj                  t        |      D cg c]3  }t        j                  t
        j                        j                         5 c}      }t        | d      5 } |||      D ]  }|j                  |        	 d d d        y c c}w # 1 sw Y   y xY w)Nc              3   B   K   | |kD  r| | |z  } | |kD  r| r|  y y wr*    )totalsteps     r%   chunkszwrite_test_file.<locals>.chunksZ   s3     dlJTME dl K s   i    r'   r4   )
minr<   rangerandomchoicestringascii_lettersencoder=   r>   )r;   sizerI   bufsizeichunkfcsizes           r%   write_test_filerW   X   s    L $oGHH$W~/ mmF$8$89@@B / 0E	dD	 QD'* 	EGGEN	 / s   8B4 B##B,c                     	 t        | t              rt        j                  j                  |  } |rdnd}|rd nd}t        | ||      5 }|j                         cd d d        S # 1 sw Y   y xY w)Nrbrr6   r7   )r9   r:   r+   r;   r<   r=   read)r;   r@   rA   r8   rB   s        r%   	read_filer\   j   sc     $ww||T"4sDt7H	dD8	, wwy  s   A""A+c                    g }t        t        j                  |             D ]  }t        j                  j	                  | |      }t        j                  j                  |      r[t        j                  j                  |      s<|j                  |dz          t        |      D ]  }|j                  |dz   |z           |j                  |        |S )N/)	sortedr+   listdirr;   r<   isdirislinkappendrlistdir)r;   resnamepns        r%   rd   rd   x   s    
Crzz$'( GGLLt$77==BGGNN1$5JJtcz"a[ +

4#:>*+ JJt Jr'   c                  
   t        t        d      syd } d }	 t        j                  dt        j                         d      5 }|j
                  } |j                  d       d d d        t        | d      5 }t        j                  dt        j                         d      5 }|j
                  }|j                         }|j                         }	 t        j                  ||dd       	 d d d        d d d        | t        j                  |        |t        j                  |       y	y	# 1 sw Y   xY w# t        $ rB Y d d d        d d d        | t        j                  |        |t        j                  |       yyw xY w# 1 sw Y   nxY w	 d d d        n# 1 sw Y   nxY w| t        j                  |        |t        j                  |       y y # | t        j                  |        |t        j                  |       w w xY w)
NsendfileFr4   dirdeletes
   0123456789rY   r      T)hasattrr+   tempfileNamedTemporaryFilegetcwdrf   r>   r=   filenorj   r   unlinkr    )srcnamedstnamerU   srcdstinfdoutfds          r%   supports_file2file_sendfiler{      s   2z"GG&((299;uM 	#QRffGGGM"	# '4  
	 C,,Tryy{5Q 	 UX((zz|

 KKtQ2  	 
	  W%W% %	# 	#  ! 	 
	  W%W% !	  	  	 
	  
	  
	  W%W%  W%W% s   *G D%G 3+F-E?D1$E?%F-G %D.*G 1	E<:E?;FG ;E<<E??F	F	G FG 1Hc                      t         rmt        j                  dk(  rZt        j                  dt        j
                  z        } | j                  d      d   j                         d   }t        |d      dk\  S y)	Niz/usr/bin/dump -o %s
      i    T)AIXsysmaxsize
subprocess	getoutput
executablesplitint)hdrsmaxdatas     r%   
_maxdataOKr      s_    
s{{j(!!"7#.."HI

4 $**,Q/72*,,r'   c                       e Zd ZddZy)BaseTestNc                     	 t        j                  |t        j                               }| j	                  t
        j                  |       |S )N)prefixrl   )rp   mkdtempr+   rr   
addCleanupr   rmtree)selfr   ds      r%   r   zBaseTest.mkdtemp   s:    	 F		<	((!,r'   r*   )__name__
__module____qualname__r   rF   r'   r%   r   r      s    r'   r   c                      e Zd Zd Zej
                  d        Zej
                  d        Zej
                  d        Z e	j                  ed      d        Z e	j                  ed      d        Z e	j                  ed      d        Zd	 Zd
 Z e	j"                  ej&                  dd dk(  d      ej(                  ej*                  d                      Zd Z e	j"                  ej&                  dd dk(  d      ej(                  ej*                  d                      Zd Z e	j"                  ej&                  dd dk(  d      ej(                  ej*                  d                      Zd Zd Z e	j                  ej<                  d      d        Z e	j"                  ej<                  d      d        Z d Z!ej
                  d        Z" e	j                  ed      d        Z#y)
TestRmTreec                 b   | j                         }t        j                  j                  |d      }t        j                  |       t        t        j                  j                  |d      d       t        j                  |      }| j                  |t               t        j                  |       y )Nkillmesomefilefoo)r   r+   r;   r<   mkdirrC   fsencodeassertIsInstancebytesshutilr   )r   tmpvictims      r%   test_rmtree_works_on_bytesz%TestRmTree.test_rmtree_works_on_bytes   sp    llnc8,
277<<
3U;V$fe,fr'   c                    | j                         }t        j                  j                  |d      }t        j                  |       t        j                  j                  |d      }t        j
                  ||       | j                  t        t        j                  |       | j                  t        j                  j                  |             | j                  t        j                  j                  |             g fd}| j                  t              5  t        j                  ||       d d d        | j                  t!              d       | j#                  d   d   t        j                  j$                         | j                  d   d   |       | j'                  d   d   d   t               y # 1 sw Y   xY w)Nrl   linkc                  (    j                  |        y r*   rc   r#   errorss    r%   onerrorz@TestRmTree.test_rmtree_fails_on_symlink_onerror.<locals>.onerror       MM$r'   r   r   r   rn   )r   r+   r;   r<   r   symlinkassertRaisesr    r   r   
assertTrueexistslexistsassertWarnsDeprecationWarningassertEquallenassertIsrb   r   r   r   dir_r   r   r   s        @r%   $test_rmtree_fails_on_symlink_onerrorz/TestRmTree.test_rmtree_fails_on_symlink_onerror   s9   llnww||C'
ww||C(


4'6==$7t,--.	 01 	1MM$0	1Va(fQilBGGNN31t,fQil1ow7	1 	1s   F==Gc                 8   | j                         }t        j                  j                  |d      }t        j                  |       t        j                  j                  |d      }t        j
                  ||       | j                  t        t        j                  |       | j                  t        j                  j                  |             | j                  t        j                  j                  |             g fd}t        j                  ||       | j                  t              d       | j                  d   d   t        j                  j                          | j                  d   d   |       | j#                  d   d   t               y )Nrl   r   c                  (    j                  |        y r*   r   r   s    r%   onexcz<TestRmTree.test_rmtree_fails_on_symlink_onexc.<locals>.onexc   r   r'   r   r   r   rn   )r   r+   r;   r<   r   r   r   r    r   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   r   s        @r%   "test_rmtree_fails_on_symlink_onexcz-TestRmTree.test_rmtree_fails_on_symlink_onexc   s   llnww||C'
ww||C(


4'6==$7t,--.	 d%(Va(fQilBGGNN31t,fQilG4r'   c                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }|||fD ]  }t        j                  |        t        j                  j                  |d      }t        |d       t        j                  j                  |d      }t        j                  ||       t        j                  j                  |d      }t        j                  ||       t        j                  j                  |d      }	t        j                  ||	       t        j                  |       | j                  t        j                  j                  |             | j                  t        j                  j                  |             | j                  t        j                  j                  |             y 	Ndir1dir2dir3file1r   link1link2link3)r   r+   r;   r<   r   rC   r   r   r   assertFalser   r   
r   r   r   r   r   r   r   r   r   r   s
             r%   test_rmtree_works_on_symlinksz(TestRmTree.test_rmtree_works_on_symlinks   sG   llnww||C(ww||D&)ww||C(tT! 	AHHQK	S'*5% T7+


4T7+


4T7+


5% d-.t,-u-.r'   zonly relevant on Windowsc                    | j                         }t        j                  j                  |d      }t        j                  |       t        j                  j                  |d      }t        j                  ||       | j                  t        j                  |       | j                  t        t        j                  |       | j                  t        j                  j                  |             | j                  t        j                  j!                  |             g fd}| j#                  t$              5  t        j                  ||       d d d        | j'                  t)              d       | j+                  d   d   t        j                  j,                         | j'                  d   d   |       | j/                  d   d   d   t               y # 1 sw Y   xY w)Nrl   r   c                  (    j                  |        y r*   r   r   s    r%   r   zBTestRmTree.test_rmtree_fails_on_junctions_onerror.<locals>.onerror  r   r'   r   r   r   rn   )r   r+   r;   r<   r   _winapiCreateJunctionr   r   rt   r   r    r   r   r   r   r   r   r   r   r   r   rb   r   r   s        @r%   &test_rmtree_fails_on_junctions_onerrorz1TestRmTree.test_rmtree_fails_on_junctions_onerror  sO   llnww||C'
ww||C(tT*	(($/'6==$7t,--.	 01 	1MM$0	1Va(fQilBGGNN31t,fQil1ow7	1 	1s   :GG&c                 x   | j                         }t        j                  j                  |d      }t        j                  |       t        j                  j                  |d      }t        j                  ||       | j                  t        j                  |       | j                  t        t        j                  |       | j                  t        j                  j                  |             | j                  t        j                  j!                  |             g fd}t        j                  ||       | j#                  t%              d       | j'                  d   d   t        j                  j(                         | j#                  d   d   |       | j+                  d   d   t               y )Nrl   r   c                  (    j                  |        y r*   r   r   s    r%   r   z>TestRmTree.test_rmtree_fails_on_junctions_onexc.<locals>.onexc%  r   r'   r   r   r   rn   )r   r+   r;   r<   r   r   r   r   r   rt   r   r    r   r   r   r   r   r   r   r   rb   r   r   s        @r%   $test_rmtree_fails_on_junctions_onexcz/TestRmTree.test_rmtree_fails_on_junctions_onexc  s'   llnww||C'
ww||C(tT*	(($/'6==$7t,--.	 d%(Va(fQilBGGNN31t,fQilG4r'   c                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }|||fD ]  }t        j                  |        t        j                  j                  |d      }t        |d       t        j                  j                  |d      }t        j                  ||       t        j                  j                  |d      }t        j                  ||       t        j                  j                  |d      }	t        j                  ||	       t        j                  |       | j                  t        j                  j                  |             | j                  t        j                  j                  |             | j                  t        j                  j                  |             y r   )r   r+   r;   r<   r   rC   r   r   r   r   r   r   r   r   s
             r%   test_rmtree_works_on_junctionsz)TestRmTree.test_rmtree_works_on_junctions-  sM   llnww||C(ww||D&)ww||C(tT! 	AHHQK	S'*5% T7+tU+T7+tU+T7+ue,d-.t,-u-.r'   c                    t        j                  | j                               }| j                  t        t
        j                  |       t        j                  |d       | j                         }t        |dfd       t        j                  j                  |d      }| j                  t              5 }t        j                  |       d d d        | j                  j                  j                  |       | j                  t        j                  j!                  |             t        j                  |d       | j                  t        j                  j!                  |             g fd}| j#                  t$              5  t        j                  ||       d d d        | j                  t'              d       | j)                  d	   d	   t        j*                         | j                  d	   d
   |       | j-                  d	   d   d
   t               | j                  d	   d   d
   j                  |       | j)                  d
   d	   t        j.                         | j                  d
   d
   |       | j-                  d
   d   d
   t               | j                  d
   d   d
   j                  |       y # 1 sw Y   xY w# 1 sw Y   7xY w)Nrl   Tignore_errorststfile c                  (    j                  |        y r*   r   r   s    r%   r   z6TestRmTree.test_rmtree_errors_onerror.<locals>.onerrorV  r   r'   r   rn   r   r   )rp   mktempr   r   FileNotFoundErrorr   r   rC   r+   r;   r<   NotADirectoryErrorr   	exceptionfilenamer   r   r   r   r   r   scandirr   rmdir)r   r   tmpdircmr   r   s        @r%   test_rmtree_errors_onerrorz%TestRmTree.test_rmtree_errors_onerrorC  s*   ??t||~6+V]]HEhd3 FI&+77<<	212 	$bMM(#	$..9x01hd3x01	 01 	5MM(G4	5Va(fQilBJJ/1x0fQil1o/AB1a118<fQilBHH-1x0fQil1o/AB1a118<)	$ 	$	5 	5s   5KKKKc                 V   t        j                  | j                               }| j                  t        t
        j                  |       t        j                  |d       | j                         }t        |dfd       t        j                  j                  |d      }| j                  t              5 }t        j                  |       d d d        | j                  j                  j                  |       | j                  t        j                  j!                  |             t        j                  |d       | j                  t        j                  j!                  |             g fd}t        j                  ||       | j                  t#              d       | j%                  d	   d	   t        j&                         | j                  d	   d
   |       | j)                  d	   d   t               | j                  d	   d   j                  |       | j%                  d
   d	   t        j*                         | j                  d
   d
   |       | j)                  d
   d   t               | j                  d
   d   j                  |       y # 1 sw Y   xY w)Nr   Tr   r   r   c                  (    j                  |        y r*   r   r   s    r%   r   z2TestRmTree.test_rmtree_errors_onexc.<locals>.onexcw  r   r'   r   rn   r   r   )rp   r   r   r   r   r   r   rC   r+   r;   r<   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   s        @r%   test_rmtree_errors_onexcz#TestRmTree.test_rmtree_errors_onexcd  s   ??t||~6+V]]HEhd3 FI&+77<<	212 	$bMM(#	$..9x01hd3x01	 he,Va(fQilBJJ/1x0fQil,>?1..9fQilBHH-1x0fQil,>?1..9'	$ 	$s   5JJ(N   cygwinz2This test can't be run on Cygwin (issue #1071513).c                 Z   d| _         t        j                  t               | j	                  t
        j                  t               t        j                  j                  t        d      | _	        t        j                  j                  t        d      | _
        t        j                  | j                         t        j                  | j                         t        j                  t              j                  }t        j                  | j                        j                  }t        j                  | j                        j                  }t        j                  t        j                   z  }t        j"                  | j                  |       t        j"                  | j                  |       t        j"                  t        |       | j	                  t        j"                  t        |       | j	                  t        j"                  | j                  |       | j	                  t        j"                  | j                  |       | j%                  t&              5  t        j                  t        | j(                         d d d        | j+                  | j                   dd       y # 1 sw Y   'xY w)Nr   abr   r   z1Expected call to onerror function did not happen.)
errorStater+   r   r   r   r   r   r;   r<   child_file_pathchild_dir_pathr   create_empty_filestatst_modeS_IREADS_IEXECchmodr   r   check_args_to_onerrorr   r   old_dir_modeold_child_file_modeold_child_dir_modenew_modes        r%   test_on_errorzTestRmTree.test_on_error  s   
 
v.!ww||FC8 ggll637##D$8$89
$$%wwv.. ggd&:&:;CCWWT%8%89AA<<,
%%x0
$$h/
"&,7$"6"68KL$"5"57IJ01 	FMM&$*D*DE	F 	!L	N	F 	Fs   &J!!J*c                    | j                   dk  r|t        j                  u r| j                  || j                         nq|t        j
                  u r| j                  || j                         nB| j                  |t        j                         | j                  |t        | j                  g       | j                  t        |d   t                     | xj                   dz  c_         y | j                  |t        j
                         | j                  |t               | j                  t        |d   t                     d| _         y )Nrn   r   r   r   )r   r+   rt   r   r   r   r   r   r`   assertInr   r   
issubclassr    r   r.   argexcs       r%   r   z TestRmTree.check_args_to_onerror  s     ??Qryy   d&:&:;!  d&9&9:dBJJ/cFD,?,?#@AOOJs1vw78OOq OT288,S&)OOJs1vw78DOr'   c                    d| _         t        j                  t               | j	                  t
        j                  t               t        j                  j                  t        d      | _	        t        j                  j                  t        d      | _
        t        j                  | j                         t        j                  | j                         t        j                  t              j                  }t        j                  | j                        j                  }t        j                  | j                        j                  }t        j                  t        j                   z  }t        j"                  | j                  |       t        j"                  | j                  |       t        j"                  t        |       | j	                  t        j"                  t        |       | j	                  t        j"                  | j                  |       | j	                  t        j"                  | j                  |       t        j                  t        | j$                         | j'                  | j                   dd       y )Nr   r   r   r   r   z/Expected call to onexc function did not happen.)r   r+   r   r   r   r   r   r;   r<   r   r   r   r   r   r   r   r   r   check_args_to_onexcr   r   s        r%   test_on_exczTestRmTree.test_on_exc  s   
 
v.!ww||FC8 ggll637##D$8$89
$$%wwv.. ggd&:&:;CCWWT%8%89AA<<,
%%x0
$$h/
"&,7$"6"68KL$"5"57IJfD$<$<=!J	Lr'   c                    | j                   dk  r|t        j                  u r| j                  || j                         nq|t        j
                  u r| j                  || j                         nB| j                  |t        j                         | j                  |t        | j                  g       | j                  t        |t                     | xj                   dz  c_         y | j                  |t        j
                         | j                  |t               | j                  t        |t                     d| _         y )Nrn   r   r   )r   r+   rt   r   r   r   r   r   r`   r  r   r   r9   r    r  s       r%   r  zTestRmTree.check_args_to_onexc  s     ??Qryy   d&:&:;!  d&9&9:dBJJ/cFD,?,?#@AOOJsG45OOq OT288,S&)OOJsG45DOr'   c                 d   ddfd}fd}t        j                  t               | j                  t        j
                  t               t         j                  j                  t        d      | _        t         j                  j                  t        d      | _	        t        j                  | j                         t        j                  | j                         t        j                  t              j                  }t        j                  | j                        j                  }t        j                  | j                        j                  }t        j                  t        j                  z  }t        j                   | j                  |       t        j                   | j                  |       t        j                   t        |       | j                  t         j                   t        |       | j                  t         j                   | j                  |       | j                  t         j                   | j                  |       | j#                  t$              5  t	        j
                  t        ||       d d d        | j'                         | j)                         y # 1 sw Y   ,xY w)NFc                  
    dy NTrF   )r#   onerror_calleds    r%   r   z7TestRmTree.test_both_onerror_and_onexc.<locals>.onerror  s    !Nr'   c                  
    dy r  rF   )r#   onexc_calleds    r%   r   z5TestRmTree.test_both_onerror_and_onexc.<locals>.onexc  s    Lr'   r   r   )r   r   )r+   r   r   r   r   r   r;   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r  r  s	          @@r%   test_both_onerror_and_onexcz&TestRmTree.test_both_onerror_and_onexc  s   
 	"	  	v.!ww||FC8 ggll637##D$8$89
$$%wwv.. ggd&:&:;CCWWT%8%89AA<<,
%%x0
$$h/
"&,7$"6"68KL$"5"57IJ01 	@MM&'?	@%(	@ 	@s   J&&J/c                    	 t         j                  fd}|t         _        t        j                  t               t	        t        dfd       t        j                  t               t         _        y # t         _        w xY w)Nc                 :    | t         k7  r
t                |       S r*   )r   r    )fnr#   r$   
orig_lstats      r%   raiserzFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiser%  s    <!)O%b>)r'   r   )r+   lstatr   r   rC   r   r   )r   r  r  s     @r%   +test_rmtree_does_not_choke_on_failing_lstatz6TestRmTree.test_rmtree_does_not_choke_on_failing_lstat"  sT    	"J*
 BHHHV.MM&!!BHzBHs   A$A3 3B c                    t         j                  t         j                  t         j                  t         j                  ht         j
                  k  xrB t         j                  t         j                  v xr  t         j                  t         j                  v }|r| j                  t        j                         | j                  t        j                  j                         | j                         }t         j                  j!                  |d      }t        j"                  |       	 t        j$                  } G d dt&              fd}|t        _        | j)                  t        j                  |       |t        _        y | j+                  t        j                         | j+                  t        j                  j                         y # t        _        w xY w)Nr   c                       e Zd Zy)HTestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)r   r   r   rF   r'   r%   Calledr  ?  s    r'   r  c                      r*   rF   )r#   r$   r  s     r%   _raiserzITestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser@  s     Lr'   )r+   r=   r   rt   r   supports_dir_fdr`   supports_fdsupports_follow_symlinksr   r   _use_fd_functionsr   avoids_symlink_attacksr   r;   r<   r   _rmtree_safe_fd	Exceptionr   r   )r   r"  tmp_dirr   real_rmtreer  r  s         @r%   -test_rmtree_uses_safe_fd_version_if_availablez8TestRmTree.test_rmtree_uses_safe_fd_version_if_available2  s4    ggrww		288D//0 DZZ2>>9D  WW(C(CC 	 OOF445OOFMM@@AllnGWc*AHHQK5$44-Y-!)0&!!&&--;)4&V556V]]AAB *5&s   %AG
 
Gzdir_fd is not supportedc                    | j                         }d}t        j                  j                  ||      }t        j                  |t        j
                        }| j                  t        j                  |       t        j                  |       t        j                  t        j                  j                  |d             t        t        j                  j                  |dd      d       | j                  t        j                  j                  |             t        j                  ||       | j                  t        j                  j                  |             y )Nr   subdirr   r   dir_fd)r   r+   r;   r<   r=   O_RDONLYr   closer   rC   r   r   r   r   r   )r   r&  r   fullnamer,  s        r%   test_rmtree_with_dir_fdz"TestRmTree.test_rmtree_with_dir_fdJ  s    ,,.77<<0"++.&)

h12277<<(J?Gx01fV,12r'   zdir_fd is supportedc                    | j                         }| j                  t              5  t        j                  |d       d d d        | j                  t        j                  j                  |             y # 1 sw Y   8xY w)Nr   r+  )	r   r   NotImplementedErrorr   r   r   r+   r;   r   )r   r&  s     r%   #test_rmtree_with_dir_fd_unsupportedz.TestRmTree.test_rmtree_with_dir_fd_unsupportedX  sX    ,,.23 	-MM'!,	-w/0	- 	-s   A55A>c                     t        j                  | j                               \  }}t        j                  |       | j                  t        t        j                  |       t        j                  |       y Nr   )
rp   mkstempr   r+   r.  r   r   r   r   remove)r   handler;   s      r%   test_rmtree_dont_delete_filez'TestRmTree.test_rmtree_dont_delete_file_  sJ    ''DLLN;
,fmmTB
		$r'   c                    t        j                  t               	 t         j                  j	                  t        d      }t         j                  j	                  t        d      }t        j                  |       t        j
                  ||       | j                  t        t        j                  |       t        j                  |d       t        j                  t        d       y # t        j                  t        d       w xY w)NcheeseshopTr   )
r+   r   r   r;   r<   r   r   r    r   r   r   rw   rx   s      r%   test_rmtree_on_symlinkz!TestRmTree.test_rmtree_on_symlinkf  s     		6'',,vx0C'',,vv.CHHSMJJsC gv}}c:MM#T2MM&5FMM&5s   B/C& &Dc                 |   t        j                  t               	 t         j                  j	                  t        d      }t         j                  j	                  t        d      }t        j                  |       t        t         j                  j	                  |d      d      j                          t        j                  ||       | j                  t        t        j                  |       t        j                  |d       t        j                  t        d       y # t        j                  t        d       w xY w)Nr;  r<  spamr4   Tr   )r+   r   r   r;   r<   r=   r.  r   r   r   r    r   r   r=  s      r%   test_rmtree_on_junctionz"TestRmTree.test_rmtree_on_junctiont  s    
		6'',,vx0C'',,vv.CHHSMc6*D1779""3,gv}}c:MM#T2MM&5FMM&5s   C'D D;)$r   r   r   r   r   skip_unless_symlinkr   r   r   unittest
skipUnlessr   r   r   r   r   r   skipIfr   platformskip_if_dac_overrideskip_unless_working_chmodr   r   r	  r  r  r  r(  r   r"  r0  r3  r9  r>  rA  rF   r'   r%   r   r      st    ""8 #8& ""5 #5$ ""/ #/* X"<=8 >8( X"<=5 >5& X"<=/ >/*=B:@ X__S\\"1%1IK##((N ) $KN8 6 X__S\\"1%1IK##((L ) $KL6 6 X__S\\"1%1IK##((#) ) $K#)J" C0 X113LM3 N3 X__V--/DE1 F1 ""6 #6 X"<=6 >6r'   r   c                      e Zd Zd Zd Zej                  d        Zd Zd Z	d Z
ej                  j                  d      d        Zd	 Z ej                    eed
      d      ej                   ej&                  ej*                  dk(  d      d                      Zd Zej                  d        Zej                  d        Zd Zd Zy)TestCopyTreec           	      N   | j                         }t        j                  j                  | j                         d      }| j	                  t
        j                  |       | j	                  t
        j                  t        j                  j                  |             t        |dfd       t        j                  t        j                  j                  |d             t        |ddfd       t        j                  ||       | j                  t        j                  j                  t        j                  j                  |d                   | j                  t        j                  j                  t        j                  j                  |d                   | j                  t        j                  j                  t        j                  j                  |dd                   t        |df      }| j                  |d       t        |ddf      }| j                  |d       y )Ndestinationtest.txt123test_dir456)r   r+   r;   r<   r   r   r   dirnamerC   r   copytreer   isfilera   r\   r   r   src_dirdst_diractuals       r%   test_copytree_simplez!TestCopyTree.test_copytree_simple  se   ,,.'',,t||~}=w/rwww'?@GZ(%0
gz23GZ4e<)rww||GZ'HIJbggll7J&GHIrww||GZ4>(@ A 	BGZ01'GZ<='r'   c           	         | j                         }| j                         }| j                  t        j                  |       | j                  t        j                  |       t	        |dfd       t        j                  t
        j                  j                  |d             t        j                  t
        j                  j                  |d             t	        |ddfd       t	        |ddfd       t        j                  ||d       | j                  t
        j                  j                  t
        j                  j                  |d                   | j                  t
        j                  j                  t
        j                  j                  |d                   | j                  t
        j                  j                  t
        j                  j                  |dd                   t        |df      }| j                  |d       t        |ddf      }| j                  |d       | j                  t               5  t        j                  ||d	       d d d        y # 1 sw Y   y xY w)
Nznonexisting.txtrN  existing_dirzexisting.txtzwill be replacedzhas been replacedT)dirs_exist_okF)r   r   r   r   rC   r+   r   r;   r<   rR  r   rS  ra   r\   r   r   FileExistsErrorrT  s       r%   test_copytree_dirs_exist_okz(TestCopyTree.test_copytree_dirs_exist_ok  s   ,,.,,.w/w/G./7
g~67
g~67G^^<>PQG^^<>QR=rww||G=N'OPQbggll7N&KLMrww||G^4B(D E 	FG%678'G^^DE!45/ 	COOGWEB	C 	C 	Cs   I&&I/c           	      `   | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  |       t        j                  |       t        |dfd       t        j                  j                  |d      }t        j                  j                  |d      }t        j                  t        j                  j                  |d      |       t        t        d      r5t        j                  |t        j                  t        j                  z         t        t        d	      r4t        t        d
      r$t        j                  |t        j                         t        j                  |      }t        j                   ||d       | j#                  t        j                  j%                  t        j                  j                  |dd                   t        j&                  t        j                  j                  |dd            }t        j(                  dk(  r|j+                  d      r|dd  }| j-                  |t        j                  j                  |d             t        j                  |      }	t        t        d      r&| j-                  |	j.                  |j.                         t        t        d	      r'| j-                  |	j0                  |j0                         y y )Nrw   rx   subzfile.txtr   r   zsub/linklchmodlchflags	UF_NODUMPTsymlinksntz\\?\   )r   r+   r;   r<   r   rC   r   ro   r`  r   S_IRWXUS_IRWXOra  rb  r  r   rR  r   rb   readlinkrf   
startswithr   r   st_flags)
r   r&  rU  rV  sub_dirsrc_linkdst_linksrc_statrW  dst_stats
             r%   test_copytree_symlinksz#TestCopyTree.test_copytree_symlinks  s   ,,.'',,w.'',,w.'',,w.

GZ(%077<<077<<4


277<<4	2x IIht|| ;<2z"wt['AKK$..188H%48rww||GUF'KLMRWW\\'5&AB 77d?v00;ABZFgz!BC88H%2x X--x/?/?@2z"X..0A0AB #r'   c           
      t   t         j                  j                  }t         j                  j                  }| j	                         }	  || j	                         d      }t        |dfd       t        |dfd       t        j                   ||d             t        |ddfd       t        j                   ||d             t        |ddfd       t        j                   ||dd             t        j                   ||dd	             t        |dddfd       t        |dd	d
fd       	 t        j                  dd      }t        j                  |||       | j                   | ||d                   | j                   | ||d                   | j                   | ||d                   t        j                  |       	 t        j                  dd      }t        j                  |||       | j                   | ||d                   | j                   | ||dd	                   | j                   | ||dd                   t        j                  |       	 d }t        j                  |||       | j                   | ||dd	d
                   | j                   | ||dd                   t        j                  |       	 t        j                  |       t        j                  t         j                  j                  |             y # t        j                  |       w xY w# t        j                  |       w xY w# t        j                  |       w xY w# t        j                  |       t        j                  t         j                  j                               w xY w)NrL  rM  rN  ztest.tmprO  rP  	test_dir2r*  subdir2ztest.pyz*.tmpignorezsubdir*c                 R   g }|D ]  }t         j                  j                  | |      }t         j                  j                  |      r(|j	                         d   dk(  r|j                  |       jt         j                  j                  |      d   dv s|j                  |        |S )Nr~   r*  z.py)r+   r;   r<   ra   r   rc   splitext)rw   namesre   rf   r;   s        r%   _filterz8TestCopyTree.test_copytree_with_exclude.<locals>._filter  s    C % -!ww||C6GGMM$/ JJL,8JJt,WW--d3B7EBJJt,- Jr'   )r+   r;   r<   r   r   rC   r   r   ignore_patternsrR  r   r   r   rQ  )r   r<   r   rU  rV  patternsrz  s          r%   test_copytree_with_excludez'TestCopyTree.test_copytree_with_exclude  s   ww||,,.:	44<<>=9G,e4,e4HHT':./Z8%@HHT';/0j95AHHT';9:HHT';	:;h
CUKiCUK'!11';GBtGZ'@ AB  Wj(A!BC  Wk(B!CDg&'!11'9EB  Wj(A!BC  Wk9(M!NO  Wk8(L!MNg&'
 A   Wk9-6)8 "9 :  Wk8(L!MN g&MM'"MM"''//'23I g& g&0 g&MM'"MM"''//'23sY   C#M. *BL  2M. B
L: M. (AM M.  L77M. :MM. M++M. .A	N7c           
      `    t         j                  j                  }t         j                  j                  } j	                         } ||d      }t        j
                   ||             t        j
                   ||d             t        j
                  t         j                  j                  |dd             t        |dddfd       g  fd} | j	                         d      }t        j                  |||        j                   | ||ddd                    | j	                         d      }t        j                  t        j                  |      ||        j                   | ||ddd                    | j	                         d      }t        t        j                  |            d	   } j                  |t         j                         t        j                  |||        j                   | ||ddd                    j!                  t#              d
       y )NsourcerO  r*  rM  rP  c                    j                  |        j                  | t               j                  |t               j	                  t        |      t        t        |                   |D ]  }j                  |t                g S r*   )rc   r   strlistr   r   set)rw   ry  rf   invokationsr   s      r%   _ignorez?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignore   sq    s#!!#s+!!%.SZSZ9 1%%dC01Ir'   rL  ru  r   	   )r+   r;   r<   r   r   r   rC   r   rR  r   pathlibPathr  r   r   DirEntryr   r   )	r   r<   r   r&  rU  r  rV  src_dir_entryr  s	   `       @r%   !test_copytree_arg_types_of_ignorez.TestCopyTree.test_copytree_arg_types_of_ignore  s   ww||,,.w)
g
gz*+
gz8<=GZ:>F	 t||~}59tGZ$. 0 1 	2 t||~}5W-wwGtGZ$. 0 1 	2 t||~}5RZZ01!4mR[[9ww?tGZ$. 0 1 	2 	[)1-r'   c           	         | j                         }t        j                  j                  |d      }t        j                  |       t        j                  j                  |d      }| j                  t        j                  |       t        j                  |d       t        |dfd       t        j                  t        j                  j                  |d      d       t        |dfd       t        j                  t        j                  j                  |d      d       t        j                   |	      }| j                  t        j                  |       t        j                  |d       t        j                  ||       | j                  t        j                  |      j                  t        j                  |      j                         | j                  t        j                  t        j                  j                  |d            j                  t        j                  t        j                  j                  |d            j                         | j                  t        j                  t        j                  j                  |d            j                  t        j                  t        j                  j                  |d            j                         t        j                  j                  |t        j                  j!                  |      d
         }| j                  t        j                  |      j                  t        j                  |      j                         y )Nr  rL  i  zpermissive.txtrN  zrestrictive.txtrP  i  r   r   )r   r+   r;   r<   r   r   r   r   r   rC   rp   r   rR  r   r   r   r   )r   r&  rU  rV  restrictive_subdirrestrictive_subdir_dsts         r%   !test_copytree_retains_permissionsz.TestCopyTree.test_copytree_retains_permissions<  s3   ,,.'',,w1
'',,w6w/
% G-.6
g'78%@G./7
g'895A%--':	((*<=
#U+))1127773C3K3KLg7G!HIQQ''"'',,w8H"IJRR	Tg7H!IJRR''"'',,w8I"JKSS	U!#g.0ggmm<N.OPQ.R"T!34<<''"89AA	Cr'   zos.chmodc                    | j                         }t        j                  j                  | j                         d      }| j	                  t
        j                  |       | j	                  t
        j                  t        j                  j                  |             t        d      |_	        | j                  t
        j                        5  t        j                  ||       d d d        y # 1 sw Y   y xY w)NrL  zka-boom)r   r+   r;   r<   r   r   r   rQ  PermissionErrorr   r   r   rR  )r   
mock_patchrU  rV  s       r%   test_copytree_winerrorz#TestCopyTree.test_copytree_winerrorW  s    
 ,,.'',,t||~}=w/rwww'?@!0!;
v||, 	.OOGW-	. 	. 	.s   C++C4c                      fd}g  j                         t        j                   j                               t        t        j
                  j                  d      dd      5 }|j                          d d d        t        j                  |        j                  t              d       y # 1 sw Y   =xY w)	Nc                 @   j                  d        j                  | t               j                  |t               j                  | t        j
                  j                  d             j                  |t        j
                  j                  d             y Nr   )rc   r   r  r   r+   r;   r<   )r   r   rx   flagr   rw   s     r%   custom_cpfunzETestCopyTree.test_copytree_custom_copy_function.<locals>.custom_cpfung  sm    KK!!!S)!!!S)QS% 89QS% 89r'   r   r   r5   r6   r7   copy_functionr   )r   rp   r   r=   r+   r;   r<   r.  r   rR  r   r   )r   r  rU   rx   r  rw   s   `  @@@r%   "test_copytree_custom_copy_functionz/TestCopyTree.test_copytree_custom_copy_functione  s    	: llnoo$,,.1"'',,sE*C'B 	aGGI	S=TA&	 	s   /B<<Cmkfiforequires os.mkfifo()vxworks%fifo requires special path on VxWorksc                 |   t        j                  t               	 t         j                  j	                  t        d      }t        j                  |       t         j                  j	                  |d      }	 t        j
                  |       	 t        j                  t        t               | j                  d       t        j                   t        d	       t        j                   t        d	       y # t        $ r}| j                  d|z         Y d }~d }~ww xY w# t        j                  $ rR}|j                  d   }| j                  t        |      d       |d   \  }}}| j                  d|z  |       Y d }~d }~ww xY w# t        j                   t        d	       t        j                   t        d	       w xY w)
Nr*  mypipeos.mkfifo(): %sz$shutil.Error should have been raisedr   r   z`%s` is a named pipeTr   )r+   r   r   r;   r<   r  r  skipTestr   rR  TESTFN2failr   r#   r   r   r   )r   r*  pipeer   rw   rx   	error_msgs           r%   test_copytree_named_pipez%TestCopyTree.test_copytree_named_pipew  s?   
 		7WW\\&(3FHHV77<<1D5		$B0 		@AMM&5MM'6 # 5/!3445 << K  Va0&,Qi#S)  !7$!>	JJ	K MM&5MM'6s[   AF 5C1 D )F 1	D:DF DF F .AE;6F ;F  F 8F;c                    | j                         }t        j                  j                  | j                         d      }t	        |dfd       t        j
                  t        j                  j                  |d             t	        |ddfd       g fd}t        j                  |||       | j                  t              d       y )	NrL  rM  rN  rO  rP  c                 ,    j                  | |f       y r*   r   )rw   rx   copieds     r%   _copyz6TestCopyTree.test_copytree_special_func.<locals>._copy  s    MM3*%r'   r  rn   )
r   r+   r;   r<   rC   r   r   rR  r   r   )r   rU  rV  r  r  s       @r%   test_copytree_special_funcz'TestCopyTree.test_copytree_special_func  s    ,,.'',,t||~}=GZ(%0
gz23GZ4e<	& 	>Va(r'   c                 V   | j                         }t        j                  j                  |d      }t	        |d       t        j                  j                  |d      }t        j
                  |       ||fD ]j  }t        j                  dt        j                  j                  |d             t        j                  |t        j                  j                  |d             l t        j                  j                  | j                         d      }| j                  t        t        j                  ||       t        j                  j                  | j                         d      }t        j                  ||d	
       t        j                  |      D ]*  \  }}}| j                  d|       | j                  d|       , t        j                  j                  | j                         d      }t        j                  ||d	       | j                  dt        j                  |             y )NrM  abcdir_a
IDONTEXISTbrokenvalidrL  destination2T)ignore_dangling_symlinksdestination3rc  )r   r+   r;   r<   rC   r   r   r   r   r   rR  walkassertNotInr  r`   )	r   rU  
valid_filer  r   rV  rootdirsfiless	            r%   test_copytree_dangling_symlinksz,TestCopyTree.test_copytree_dangling_symlinks  sw   ,,.WW\\':6
:u%Wg.
% 	=AJJ|RWW\\!X%>?JJz277<<7#;<	=
 '',,t||~}=%'7C '',,t||~~>4H!#!1 	*D$Xu-MM'5)	*
 '',,t||~~>48j"**W"56r'   c           	      
   | j                         }t        j                  j                  | j                         d      }t        j                  t        j                  j                  |d             t        t        j                  j                  |dd      d      5  	 d d d        t        j                  t        j                  j                  |d      t        j                  j                  |d      d       t        j                  ||d	       | j                  t        j                  j                  t        j                  j                  |d                   | j                  dt        j                  t        j                  j                  |d                   t        j                  j                  | j                         d
      }t        j                  ||d	       | j                  t        j                  j                  t        j                  j                  |d                   | j                  dt        j                  t        j                  j                  |d                   y # 1 sw Y   xY w)NrL  real_dirrM  r4   link_to_dirT)target_is_directoryFrc  r  )r   r+   r;   r<   r   r=   r   r   rR  r   rb   r  r`   r   )r   rU  rV  s      r%   test_copytree_symlink_dirz&TestCopyTree.test_copytree_symlink_dir  s   ,,.'',,t||~}=
gz23"'',,w
J?F 		


277<<477<<7'+	- 	59Wm(LMNj"**RWW\\'=-Q"RS'',,t||~~>48rww||G]'KLMj"**RWW\\'=-Q"RS	 	s   I88Jc                 @   | j                         }|dz   }| j                  t        j                  |d       t        j
                  j                  |d      }t        |d       t        j                  ||      }| j                  dgt	        j                  |             y )NdestTr   )r   r   r   r   r+   r;   r<   rC   rR  r   r`   )r   rU  rV  rw   rvs        r%   test_copytree_return_valuez'TestCopyTree.test_copytree_return_value  ss    ,,.F"w5ggll7E*3__Wg.%"**R.1r'   c                    | j                         }| j                  t        j                  |d       t        j
                  j                  |dd      }t        j
                  j                  |dd      }t	        j                  |       t        j
                  j                  |d      }t        |d       t        j                  ||      }| j                  dgt	        j                  |             y )NTr   tpg
somevendorz1.0pol)r   r   r   r   r+   r;   r<   makedirsrC   rR  r   r`   )r   base_dirrU  rV  rw   r  s         r%   test_copytree_subdirectoryz'TestCopyTree.test_copytree_subdirectory  s    <<>xtD'',,xd3'',,we<
Gggll7E*3__Wg.%"**R.1r'   N)r   r   r   rX  r]  r   rB  rq  r}  r  r  rC  mockpatchr  r  rD  ro   r+   rE  r   rF  r  r  r  r  r  r  rF   r'   r%   rJ  rJ    s   (&C2 ""C #C>?4B(.TC6 ]]$. %.'$ XX.0FG""X__S\\Y.;=7= # H7.) ""7 #74 ""T #T&2
2r'   rJ  c                   ^   e Zd Zej                  d        Z ej                   ee	d      d      ej                  d               Z
 ej                   ee	d      d      ej                  d               Zej                  d        Z ej                   ee	d      xr  eed	      xr	  eed
      d      d        Zej                   d        Zej                  ej                   ej$                  d                      Zd Zd Zej                  d        Z ej                   ee	d      d      d        Zej                  d        Zej                   d        Zd Zd Zd Zd Zej                  d        Z ej                   ee	d      d      d        Zej                  d        Z  ej                   ee	d       d!       ej                  e!jD                  d"k(  d#      d$               Z#d% Z$d& Z% ej                  e&xs e'xs e(d'       ej                  e)d(      d)               Z*d* Z+y+),TestCopyc                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t	        |d       t        j
                  ||       t        j
                  ||       t        j                  |t        j                  t        j                  z         t        j                  |t        j                         | j                  t        j                  |      j                  t        j                  |      j                         t        j                  ||       | j                  t        j                  |      j                  t        j                  |      j                         t        j                   dk7  rt        j                  |t        j                         t        j                  ||       | j                  t        j                  |      j                  t        j                  |      j                         t        j                  |t        j                         t        j                  ||       | j                  t        j                  |      j                  t        j                  |      j                         t        j                  |t        j                         t        j                  ||       | j                  t        j                  |      j                  t        j                  |      j                         y y )Nr   barbazquuxre  )r   r+   r;   r<   rC   r   r   r   rg  S_IRWXGrh  assertNotEqualr   r   copymoder   rf   r   r&  rw   rx   rm  rn  s         r%   test_copymode_follow_symlinksz&TestCopy.test_copymode_follow_symlinks  s   ,,.ggll7E*ggll7E*77<</77<<033


3!


3!
dll4<</0
dll#BGGCL00"''#,2F2FGS!--rwws|/C/CD77d?HHS$,,'OOHc*RWWS\112773<3G3GHHHS$,,'OOC*RWWS\112773<3G3GHHHS$,,'OOHh/RWWS\112773<3G3GH r'   r`  zrequires os.lchmodc                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t	        |d       t        j
                  ||       t        j
                  ||       t        j                  |t        j                  t        j                  z         t        j                  |t        j                         t        j                  |t        j                  t        j                  z         t        j                  |t        j                         t        j                  ||d       | j                  t        j                  |      j                   t        j                  |      j                          | j#                  t        j                  |      j                   t        j                  |      j                          t        j                  |t        j                         t        j                  ||d       | j                  t        j                  |      j                   t        j                  |      j                          t        j                  |t        j                         t        j                  ||d       | j                  t        j                  |      j                   t        j                  |      j                          y Nr   r  r  r  Ffollow_symlinks)r   r+   r;   r<   rC   r   r   r   rg  r  r`  rh  r   r  r   r  r   r  r  s         r%    test_copymode_symlink_to_symlinkz)TestCopy.test_copymode_symlink_to_symlink	  s    ,,.ggll7E*ggll7E*77<</77<<033


3!


3!
dll4<</0
dll#
		(DLL56
		(DLL)(EB(+33(+33	5BGGCL00"''#,2F2FG
		(DLL)#u=--rwws|/C/CD
		(DLL)Xu=--rwws|/C/CDr'   z requires os.lchmod to be missingc                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t	        |d       t        j
                  ||       t        j
                  ||       t        j                  ||d       y r  )r   r+   r;   r<   rC   r   r   r  r  s         r%   *test_copymode_symlink_to_symlink_wo_lchmodz3TestCopy.test_copymode_symlink_to_symlink_wo_lchmod'  s     ,,.ggll7E*ggll7E*77<</77<<033


3!


3!(EBr'   c                 v   | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t        j
                  |      }t        j                  ||j                  |j                  dz
  f       t	        |d       | j                  t        j
                  |      j                  t        j
                  |      j                         t        j                  ||       t        j                  ||       t        t        d      r$t        j                  |t
        j                         t        t        d      r4t        t
        d      r$t        j                  |t
        j                         t        j                   |      }t        t        d      rQt#        j$                  ||d	
       | j                  |j&                  t        j
                  |      j&                         t#        j$                  ||d
       t        j                   |      }t        j                  t        j(                  v r0dD ]+  }	| j+                  t-        ||	      t-        ||	      dz          - t        t        d      r&| j/                  |j&                  |j&                         t        t        d      r2t        |d      r&| j/                  |j0                  |j0                         t#        j$                  ||d
       | j3                  t5        t        j
                  |      j                  t        j
                  |      j                  z
        dk         y )Nr   r  r  quxg      E@r`  ra  rb  Tr  Fst_atimest_mtimer   rk  g?)r   r+   r;   r<   rC   r   utimer  r  r  r   ro   r`  rh  ra  rb  r  r   copystatr   r!  assertLessEqualr!   r   rk  r   abs)
r   r&  rw   rx   rm  rn  ro  src_link_statdst_link_statattrs
             r%   test_copystat_symlinkszTestCopy.test_copystat_symlinks7  s   ,,.ggll7E*ggll7E*77<</77<</3773<
x((((4/1 	23BGGCL112773<3H3HI


3!


3!2x IIh-2z"wt['AKK$..1*2x OOHhE 5 5rwws|7K7KL(EB*88r222. G$$W]D%A%,]D%AA%EGG 2x ]22M4I4IJ2z"w}j'I]33]5K5KL#u=BGGCL11BGGCL4I4IIJ  	!r'   chflags
EOPNOTSUPPENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPc                 v   | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t	        |d       d }t        j
                  }	 t        j                  t        j                  fD ])  } ||      t        _        t        j                  ||       +  |t        j                  t        j                  z         t        _        | j                  t        t        j                  ||       |t        _        y # |t        _        w xY w)Nr   file2xxxc                 0     t               dd fd
}|S )NTr  c                    _         r*   )r"   )r;   flagsr  errexs      r%   _chflags_raiserzlTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raisern  s    r'   r    )r  r  r  s   ` @r%   make_chflags_raiserzSTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiserk  s    B@D  #"r'   )r   r+   r;   r<   rC   r  r"   r  r  r   r  r   r    )r   r   r   r  r  old_chflagsr  s          r%   -test_copystat_handles_harmless_chflags_errorsz6TestCopy.test_copystat_handles_harmless_chflags_errors`  s    
 VW-VW-5% 5% 	# jj	%''6 .05
u-. -U-=-=-MNBJgvuE$BJBJs   =B"D+ +D8c                   	
 | j                         }t        j                  j                  |d      
t	        
d       t        j                  j                  |d      }t	        |d       t        j                  
|       t        j                  
dd       t        j                  
dd       t        j                  
|       | j                  t        t        j                  
            t        t        j                  |                   | j                  t        j                  
d      t        j                  |d             t        j                  |       t	        |d       t        t        j                  d      		fd}	 t        j                  |t        _        t        j                  
|       | j!                  dt        j                  |             t        _        d	d

fd
}	 t        j                  |t        _
        t        j                  
|       t        _
        t        j                  j                  |d      
t        j                  j                  |d      }t	        

       t	        ||       t        j                  
dd       t        j                  |dd       t        j"                  |d       t        j                  j                  |d      }t        j                  j                  |d      }t	        ||       t	        ||       t        j$                  
|       t        j$                  ||       | j                  t        j                  |d      d       | j                  t        j                  |d      d       y # t        _        w xY w# t        _
        w xY w)Nr   r  user.foo   42zuser.bar   43EPERMc                 *    |dk(  r | ||fi | y )Nr  rF   )fnamer  valr$   orig_setxattros_errors       r%   _raise_on_user_fooz3TestCopy.test_copyxattr.<locals>._raise_on_user_foo  s!    z!eT39&9r'   Tr  c                V    | k(  rt        t        j                  d       | |      S )NzOperation not supportedr  )r    r"   r  )r  r  orig_listxattrrw   s     r%   _raise_on_srcz.TestCopy.test_copyxattr.<locals>._raise_on_src  s)    |emm-FGG!%IIr'   the_originalthe_original_rozuser.the_values   fiddlyi$  the_copythe_copy_ro)r   r+   r;   r<   rC   r   
_copyxattrsetxattrr   r_   	listxattrgetxattrr7  r    r"   r  r  r   r  )r   r&  rx   r  r  srcrodstror  r	  r
  rw   s          @@@@r%   test_copyxattrzTestCopy.test_copyxattr  s   ,,.ggll7E*3ggll7E*3 	#s#
CU+
CU+#s#S 12F2<<;L4MNC,C,	. 			#35;;0	:
	(KKM,BKc3'MM*bll3&78'BK48 	J	*\\N(BLc3')BL ggll7N3W&7835% 
C)95
E+Y7
ggll7J/Wm435% S!u%S*:;YGU,<=yI9 (BK *BLs   AN! 81N1 !N.1N>c                 T   | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t        j
                  ||       t        j                  |dd       t        j                  |ddd       t        j                  j                  |d      }t        j                  j                  |d	      }t	        |d       t        j
                  ||       t        j                  ||d       | j                  t        j                  |dd      d       | j                  t        t        j                  |d       t        j                  ||d       | j                  t        j                  |d      d       y )
Nr   r  ztrusted.foor  r  Fr  r  r  )r   r+   r;   r<   rC   r   r  r   r  r   r  r   r    )r   r&  rw   rm  rx   rn  s         r%   test_copyxattr_symlinksz TestCopy.test_copyxattr_symlinks  s&    ,,.ggll7E*77<</3


3!
C.
HmUEJggll7E*77<</3


3!(HeDX}eTV[\'2;;]C(C?S-8%@r'   c                     d}| j                         }t        ||fd       t        j                  j	                  ||      }| j                         } |||       t        j                  j	                  ||      }||fS )NrM  r  )r   rC   r+   r;   r<   )r   methodr  r   r   tmpdir2r  s          r%   
_copy_filezTestCopy._copy_file  sg    FE?E*VU+,,.ugWe,u~r'   c                 <   | j                  t        j                        \  }}| j                  t        j
                  j                  |             | j                  t	        j                  |      j                  t	        j                  |      j                         y r*   )
r  r   copyr   r+   r;   r   r   r   r   )r   r   r  s      r%   	test_copyzTestCopy.test_copy  s]    v{{3uu-.//1G1GHr'   c                 f   | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t        j
                  ||       t        t        d      r5t        j                  |t        j                  t        j                  z         t        j                  ||d       | j                  t        j                  j                  |             | j                  t!        |      t!        |             t        j"                  |       t        j                  ||d       | j%                  t        j                  j                  |             | j                  t        j&                  |      t        j&                  |             t        t        d      rM| j                  t        j(                  |      j*                  t        j(                  |      j*                         y y )Nr   r  r  r`  Tr  F)r   r+   r;   r<   rC   r   ro   r`  r   rg  rh  r   r!  r   rb   r   r\   r7  r   ri  r  r   )r   r&  rw   rx   rm  s        r%   test_copy_symlinkszTestCopy.test_copy_symlinks  s^   ,,.ggll7E*ggll7E*77<</3


3!2x IIht|| ;<Hc48,-338
		#Hc59s+,S)2;;x+@A2x RXXh/77XXc]224 !r'   r  zrequires os.utimec                 ,   | j                  t        j                        \  }}| j                  t        j
                  j                  |             t	        j                  |      }t	        j                  |      }| j                  |j                  |j                         dD ]+  }| j                  t        ||      t        ||      dz          - t        t        d      r4t        |d      r'| j                  t        |d      t        |d             y y y )Nr  r   r  rk  )r  r   copy2r   r+   r;   r   r   r   r   r  r!   ro   )r   r   r  
file1_stat
file2_statr  s         r%   
test_copy2zTestCopy.test_copy2  s     v||4uu-.WWU^
WWU^
++Z-?-?@* 	@D  T!:!(T!:Q!>@	@ 2y!gj*&EWZ<$Z<> 'F!r'   c                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t        j
                  ||       t        t        d      r5t        j                  |t        j                  t        j                  z         t        t        d      r4t        t        d      r$t        j                  |t        j                         t        j                  |      }t        j                  |      }t        j                  ||d       | j!                  t        j                  j#                  |             | j%                  t'        |      t'        |             t        j(                  |       t        j                  ||d	       | j+                  t        j                  j#                  |             | j%                  t        j,                  |      t        j,                  |             t        j                  |      }t        j.                  t        j0                  v r0d
D ]+  }| j3                  t5        ||      t5        ||      dz          - t        t        d      rL| j%                  |j6                  |j6                         | j9                  |j6                  |j6                         t        t        d      r4t        |d      r'| j%                  |j:                  |j:                         y y y )Nr   r  r  r`  ra  rb  Tr  Fr  r   rk  )r   r+   r;   r<   rC   r   ro   r`  r   rg  rh  ra  rb  r  r   r&  r   rb   r   r\   r7  r   ri  r  r!  r  r!   r   r  rk  )	r   r&  rw   rx   rm  ro  r  rp  r  s	            r%   test_copy2_symlinkszTestCopy.test_copy2_symlinks  s2   ,,.ggll7E*ggll7E*77<</3


3!2x IIht|| ;<2z"wt['AKK$..1773<*XsD9,-338
		#XsE:s+,S)2;;x+@A88C=88r222. B$$W]D%A%,Xt%<q%@BB 2x ]22H4D4DE 0 0(2B2BC2z"w}j'I]33X5F5FG (J"r'   c                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t        j
                  |dd       t        j                  ||       | j                  t        j                  |d      t        j                  |d             t        j                  |       y )Nr   r  r  r  )r   r+   r;   r<   rC   r  r   r&  r   r  r7  )r   r&  rw   rx   s       r%   test_copy2_xattrzTestCopy.test_copy2_xattr6  s    ,,.ggll7E*ggll7E*3
CU+S#C,C,	. 			#r'   c                    t         j                  t         j                  fD ]  }| j                         }| j                         }t        j
                  j                  |d      }t        |d        |||      }| j                  |t        j
                  j                  |d              ||t        j
                  j                  |d            }| j                  |t        j
                  j                  |d              y )Nr   r  )	r   r!  r&  r   r+   r;   r<   rC   r   )r   r  rU  rV  rw   r  s         r%   test_copy_return_valuezTestCopy.test_copy_return_valueC  s    ;;- 	?BllnGllnG'',,w.CsE"C!BRgu!=>Cgu56BRgu!=>	?r'   c                 B    | j                  t        j                         y r*   )_test_copy_dirr   r!  r   s    r%   test_copy_dirzTestCopy.test_copy_dirO  s    FKK(r'   c                 B    | j                  t        j                         y r*   )r1  r   r&  r2  s    r%   test_copy2_dirzTestCopy.test_copy2_dirR  s    FLL)r'   c                 ~   | j                         }t        j                  j                  |d      }| j                         }t        j                  j                  |d      }t	        |d       t
        j                  dk(  rt        }nt        }| j                  ||||       | j                  ||||        |||       y Nr   does_not_exist/win32)
r   r+   r;   r<   rC   r   rF  r  IsADirectoryErrorr   )r   	copy_funcrU  src_filer   rx   r  s          r%   r1  zTestCopy._test_copy_dirU  s    ,,.77<</||~ggll7$568U#<<7"!C#C#y$8 	#y$4(D!r'   c                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t        j
                  ||       t        j                  ||d       | j                  t        j                  j                  |             | j                  t        j                  |      t        j                  |             t        j                  ||       | j                  t        j                  j                  |             y )Nrw   rx   rn  r   r   Fr  )r   r+   r;   r<   rC   r   r   copyfiler   rb   r   ri  r   )r   r&  rw   rx   rn  r   s         r%   test_copyfile_symlinkszTestCopy.test_copyfile_symlinksg  s    ,,.ggll7E*ggll7E*77<<4ww||GV,3


3h>x01T*BKK,ABc",-r'   r   zrequires os.linkc                 8   t        j                  t               t         j                  j	                  t        d      }t         j                  j	                  t        d      }	 t        |dd      5 }|j                  d       d d d        	 t        j                  ||       | j                  t        j                  t        j                  ||       t        |dd      5 }| j                  |j                         d       d d d        t        j                   |       t        j"                  t        d	
       y # 1 sw Y   xY w# t        $ r}| j                  d|z         Y d }~d }~ww xY w# 1 sw Y   pxY w# t        j"                  t        d	
       w xY w)Nr;  r<  r5   r6   r7   cheddarzos.link(): %srZ   Tr   )r+   r   r   r;   r<   r=   r>   r   r  r  r   r   r   r>  r   r[   r7  r   )r   rw   rx   rU   r  s        r%   'test_dont_copy_file_onto_link_to_itselfz0TestCopy.test_dont_copy_file_onto_link_to_itselfx  s'    	ggll68,ggll66*	6c31 #Q	"#3S! f22FOOS#Nc31 6Q  956IIcNMM&5# # # 3o12236 6 MM&5sf   #E< 1D:E< E ">E<  !E0E< :E?E< 	E-E(#E< (E--E< 0E95E< <Fc                    t        j                  t               t         j                  j	                  t        d      }t         j                  j	                  t        d      }	 t        |dd      5 }|j                  d       d d d        t        j                  d|       | j                  t        j                  t        j                  ||       t        |dd      5 }| j                  |j                         d       d d d        t        j                  |       t        j                  t        d	       y # 1 sw Y   xY w# 1 sw Y   FxY w# t        j                  t        d	       w xY w)
Nr;  r<  r5   r6   r7   rA  rZ   Tr   )r+   r   r   r;   r<   r=   r>   r   r   r   r   r>  r   r[   r7  r   )r   rw   rx   rU   s       r%   *test_dont_copy_file_onto_symlink_to_itselfz3TestCopy.test_dont_copy_file_onto_symlink_to_itself  s     	ggll68,ggll66*	6c31 #Q	"#
 JJx%f22FOOS#Nc31 6Q  956IIcNMM&5# #6 6 MM&5s=   #E 1D9AE !E E 9E>E E
E E.r  r  r  r  c                    	 t        j                  t               	 | j                  t        j                  t        j                  t        t               | j                  t        j                  t        j                  t        t               t        j                  t               y # t        $ r}| j	                  d|z         Y d }~d }~ww xY w# t        j                  t               w xY w)Nr  )r+   r  r   r  r  r   r   SpecialFileErrorr>  r  __file__r7  )r   r  s     r%   test_copyfile_named_pipez!TestCopy.test_copyfile_named_pipe  s    	1IIf	f55 &Bf55 &6C IIf  	1MM+a/00	1 IIfs#   B& A0C &	C/CCC+c                    | j                         }| j                         }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       t        j                  ||      }| j                  t        j                  j                  |             | j                  t        |      t        |             y )Nr  r   )r   r+   r;   r<   rC   r   r>  r   r   r   r\   )r   rU  rV  dst_filer<  r  s         r%   test_copyfile_return_valuez#TestCopy.test_copyfile_return_value  s    ,,.,,.77<</77<</8U#__Xx0r*+8,i.ABr'   c                 J   | j                         }t        j                  j                  |d      }t	        |d       | j                  t        t        j                  ||       | j                  t        t        j                  ||       | j                  t        |      d       y r  )r   r+   r;   r<   rC   r   r   r   r>  r   r   r\   )r   rU  r<  s      r%   test_copyfile_same_filez TestCopy.test_copyfile_same_file  sr     ,,.77<</8U#-(HM%(HE8,e4r'   zMOn MACOS, Solaris and Windows the errors are not confusing (though different)zNot valid on AIX, see gh-92670c                    | j                         }t        j                  j                  |d      }t        j                  j                  |d      }t	        |d       | j                  t        t        j                  ||       y )Nr   r8  )	r   r+   r;   r<   rC   r   r   r   r>  )r   rU  r<  rx   s       r%   test_copyfile_nonexistent_dirz&TestCopy.test_copyfile_nonexistent_dir  s[     ,,.77<</ggll7$568U#+V__hLr'   c                    | j                         }t        j                  j                  |d      }| j                         }t        j                  j                  |d      }t	        |d       t
        j                  dk(  rt        }nt        }| j                  |t        j                  ||       | j                  |t        j                  ||       | j                  |t        j                  ||       y r7  )r   r+   r;   r<   rC   r   rF  r  r:  r   r   r>  )r   rU  r<  r   rx   r  s         r%   test_copyfile_copy_dirzTestCopy.test_copyfile_copy_dir  s     ,,.77<</||~ggll7$568U#<<7"!C#C#v=#v'B#vg>r'   N),r   r   r   r   rB  r  rC  rD  ro   r+   r  rE  r  r  r"   r   skip_unless_xattrr  skip_unless_dac_overrider  r  r"  r$  r)  r+  r-  r/  r3  r5  r1  r?  rB  rD  r   rF  rH  rK  rM  MACOSSOLARISr   r   rO  rQ  rF   r'   r%   r  r    s    ""I #I> XX.0DE""E # FE8 X__WR*,NO""
C # P
C ""&! #&!P XY/ 3 53 	2DF%	F%6   =J !=J~ ""  ''A ( ! #A.I ""4 #40 XW-/BC> D>  "" H # HD   
 !

?)*"$ "". #.  XV,.@A6 B6& ""6 #6( XX.0FGX__S\\Y.;== H	C
5 X__U0g0  3B  C X__S:;M <	 C
M?r'   r  c                      e Zd Z ej                         d        Zd Zd%dZ ej                          ej                   e
j                  d      d      d               Z ej                         d        Z ej                          ej                   e
j                  d      d	      d
               Z ej                          ej                   e
j                  d      d      d               Zd Z ej                         d        Z ej                          ej                  ed      d               Zd Zd Zd Zd Z ej                         d        Zd Zd Z ej                         d        Zd Zd Zd Zd Z ej                         d        Z  ejB                         d        Z" ejF                          ejH                  e%xr  e&        d       d!               Z' ej                         d"        Z(d# Z)y$)&TestArchivesc                    | j                  d      \  }}| j                         }t        j                  |       t        j                  j                  |      }t        j                  j                  t        j                  j                  |      d      }t        j                  |      5  t        5  t        j                  j                  |      }t        |d|d      }d d d        d d d        | j                  dz          | j                  t        j                  j                  |             | j                  t!        j"                  |             t!        j$                  |d      5 }| j'                  |j)                         g d       d d d        t        j                  |      5  t        5  t        |d|d      }d d d        d d d        | j                  ||d	z          | j                  t        j                  j                  |             | j                  t!        j"                  |             t!        j$                  |d
      5 }| j'                  |j)                         g d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   archivegztar..tar.gzzr:gz)r[  z./subz./sub2z./file1z./file2z./sub/file3tar.tarrZ   )_create_filesr   r+   r   r;   rQ  r<   basenamer   
change_cwdno_chdirabspathr   r   r   rS  tarfile
is_tarfiler=   assertCountEqualgetnames)	r   root_dirr  r  work_dirrel_base_name	base_nametarballtfs	            r%   test_make_tarballzTestArchives.test_make_tarball  s;    "//3(,,.
77??7+RWW%5%5g%>	J!!(+ 	JX 	J6I"='8SIG	J 	J
 	)i"78w/0**734\\'6* 	Ib!!"++-#HI	I !!(+ 	HX 	H"=%3GG	H 	H)f"45w/0**734\\'3' 	H2!!"++-#GH	H 	H'	J 	J 	J 	J	I 	I	H 	H 	H 	H
	H 	Hs`   +J	2.I< J	-#J-J/4J#J/#J;<J	J		JJ #J,	(J//J8;Kc                     t        j                  |      5 }|j                         }|j                          t	        |      cd d d        S # 1 sw Y   y xY wr*   )rd  r=   rg  sortr:   )r   r;   r]  ry  s       r%   _tarinfozTestArchives._tarinfo  s@    \\$ 	 3LLNEJJL<	  	  	 s   +AAc                    | j                         }t        j                  j                  ||      }t        j                  |d       t        |dfd       t        |dfd       t        j                  t        j                  j                  |d             t        |ddfd       t        j                  t        j                  j                  |d             |rt        |d	fd       ||fS )
NT)exist_okr   r  r  r_  file3sub2outer)r   r+   r;   r<   r  rC   r   )r   r  rh  dists       r%   r_  zTestArchives._create_files  s    <<>ww||Hh/
D4(D'?E*D'?E*
dE*+D%)51
dF+,'*E2!!r'   r]  zNeed the tar command to runc                 h   | j                         \  }}t        j                  j                  | j	                         d      }t
        5  t        |d||      }d d d        | j                  |dz          | j                  t        j                  j                  |             t        j                  j                  |d      }ddd|g}t        j                  ||t        j                         | j                  t        j                  j                  |             | j                  | j                  |      | j                  |             t
        5  t        |d||      }d d d        | j                  ||dz          | j                  t        j                  j                  |             t
        5  t        |d||d	
      }d d d        | j                  ||dz          | j                  t        j                  j                  |             y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   fxY w)NrY  rZ  r\  zarchive2.tarr]  z-cfcwdstdoutr^  Tdry_run)r_  r+   r;   r<   r   rb  r   r   r   rS  r   
check_callDEVNULLrq  )r   rh  r  rk  rl  tarball2tar_cmds          r%   test_tarfile_vs_tarz TestArchives.test_tarfile_vs_tar$  s    "//1(GGLL;	 	K"9gxJG	K 	)i"78w/0 77<<.9%:g8%/%7%7	9 	x01w/x1HI  	I"9eXxHG	I)f"45w/0  	1"9eXx+/1G	1 	)f"45w/09	K 	K$	I 	I	1 	1s$   HH2H(HH%(H1c                    | j                         \  }}| j                         }t        j                  |       t        j                  j                  |      }t        j                  j                  t        j                  j                  |      d      }t        j                  |      5  t        5  t        j                  j                  |      }t        |d|      }d d d        d d d        | j                  dz          | j                  t        j                  j                  |             | j                  t!        j"                  |             t!        j$                  |      5 }| j'                  |j)                         g d       d d d        t        j                  |      5  t        5  t        j                  j                  |      }t        |d||      }d d d        d d d        | j                  ||dz          | j                  t        j                  j                  |             | j                  t!        j"                  |             t!        j$                  |      5 }| j'                  |j)                         g d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   &xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrY  zip.zip)dist/	dist/sub/
dist/sub2/
dist/file1
dist/file2dist/sub/file3rv  )r  r  r  r  r  r  )r_  r   r+   r   r;   rQ  r<   r`  r   ra  rb  rc  r   r   r   rS  zipfile
is_zipfileZipFilerf  namelist)	r   rh  r  r  ri  rj  rk  re   zfs	            r%   test_make_zipfilezTestArchives.test_make_zipfileH  s9    "//1(,,.
77??7+RWW%5%5g%>	J!!(+ 	?X 	?6I}eX>C	? 	? 	i&01s+,**3/0__S! 	R!!"++-	 !!(+ 	IX 	I6I}eXxHC	I 	I 	i&01s+,**3/0__S! 	DR!!"++-CD	D 	D)	? 	? 	? 	?	 		I 	I 	I 	I	D 	Ds`   *J$1-JJ$*#J1*K
1.J>K
+#KJ!	J$$J.1J;>K	K

KKr  zNeed the zip command to runc                    | j                         \  }}t        j                  j                  | j	                         d      }t
        5  t        |d||      }d d d        | j                  |dz          | j                  t        j                  j                  |             t        j                  j                  |d      }dddd|g}t        j                  ||t        j                         | j                  t        j                  j                  |             t        j                  |      5 }|j                         }d d d        t        j                  |      5 }|j                         }	d d d        | j                  t!              t!        	             y # 1 sw Y   IxY w# 1 sw Y   ixY w# 1 sw Y   GxY w)NrY  r  r  zarchive2.zipz-qz-rry  )r_  r+   r;   r<   r   rb  r   r   r   rS  r   r~  r  r  r  r  r_   )
r   rh  r  rk  rY  archive2zip_cmdr  ry  names2s
             r%   test_zipfile_vs_zipz TestArchives.test_zipfile_vs_zipm  s]    "//1(GGLL;	 	I"9eXxHG	I 	)f"45w/0 77<<.9$nh?g8%/%7%7	9 	x01__W% 	"KKME	"__X& 	#"[[]F	#v7'	I 	I	" 	"	# 	#s$   F2F+ F7F(+F47G unzipzNeed the unzip command to runc                    | j                         \  }}t        j                  j                  | j	                         d      }t
        5  t        |d||      }d d d        | j                  |dz          | j                  t        j                  j                  |             dd|g}t        j                  |      5  	 t        j                  |t        j                         d d d        y # 1 sw Y   xY w# t        j                  $ r^}|j                   j#                  d      }d	|v r| j%                  d
       d}| j'                  |j)                  ||             Y d }~d }~ww xY w# 1 sw Y   y xY w)NrY  r  r  r  z-t)stderrreplace)r   zunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})r_  r+   r;   r<   r   rb  r   r   r   rS  r   ra  r   check_outputSTDOUTCalledProcessErroroutputdecoder  r  format)	r   rh  r  rk  rY  r  r  detailsmsgs	            r%   test_unzip_zipfilezTestArchives.test_unzip_zipfile  s@    "//1(GGLL;	 	I"9eXxHG	I 	)f"45w/0 D'*!!(+ 	44''
8I8IJ	4 	4	I 	I 00 4**++9+=+w6MM"<=2		#**S'2334	4 	4s=   C,<E,>%C8,C58E)AE$E,$E))E,,E5c                     | j                         }t        j                  j                  |d      }| j	                  t
        t        |d       y )NrY  r  )r   r+   r;   r<   r   
ValueErrorr   )r   r   rk  s      r%   test_make_archivezTestArchives.test_make_archive  s5    GGLL3	*lIuEr'   c                    t         r1t        j                  d      d   }t        j                  d      d   }ndx}}| j                         \  }}t        j                  j                  | j                         d      }t        |d||||      }| j                  t        j                  j                  |             t        |d||      }| j                  t        j                  j                  |             t        |d||||      }| j                  t        j                  j                  |             t        |d||dd      }| j                  t        j                  j                  |             y )	Nr   r  rY  r  ownergroupr]  	kjhkjhkjgoihohoh)UID_GID_SUPPORTgrpgetgrgidpwdgetpwuidr_  r+   r;   r<   r   r   r   rS  )r   r  r  rh  r  rk  re   s          r%   test_make_archive_owner_groupz*TestArchives.test_make_archive_owner_group  s    LLOA&ELLOA&E""EE!//1(GGLL;	9eXxu!&(s+,9eXx@s+,9eXx!&e5s+,9eXx!,I?s+,r'   Requires grp and pwd supportc           
          | j                         \  }}t        j                  j                  | j	                         d      }t        j                  d      d   }t        j                  d      d   }t        j                  |      5  t        5  t        |d|d||      }d d d        d d d        | j                  t        j                  j                               t        j                   |      }	 |j#                         D ]:  }| j%                  |j&                  d       | j%                  |j(                  d       < 	 |j+                          y # 1 sw Y   xY w# 1 sw Y   xY w# |j+                          w xY w)NrY  r   rZ  rw  r  )r_  r+   r;   r<   r   r  r  r  r  r   ra  rb  r   r   rS  rd  r=   
getmembersr   uidgidr.  )	r   rh  r  rk  r  r  archive_namerY  members	            r%   test_tarfile_root_ownerz$TestArchives.test_tarfile_root_owner  s6    "//1(GGLL;	Q"Q"!!(+ 	BX 	B'	7Hf.35BL	B 	B
 	|45 ,,|,	!,,. 0  Q/  Q/0 MMO	B 	B 	B 	B MMOs1   EE E4AE+ E	EE(+E=c                 z    t        j                          fd}t        d|g d       	 t        5   j	                  t
              5  t        dd       d d d        d d d         j                  t        j                                t        d       y # 1 sw Y   AxY w# 1 sw Y   ExY w# t        d       w xY w)Nc                     j                  d|       j                  | d       j                  t        j                                t	               Nrh  r`  )r  r   r+   rr   RuntimeError)rk  r  kwcurrent_dirr   s      r%   archiverz<TestArchives.test_make_archive_cwd_default.<locals>.archiver  sA    Z,Y
3RYY[+6. r'   r  xxx filer`  )	r+   rr   r   rb  r   r  r   r   r   )r   r  r  s   ` @r%   test_make_archive_cwd_defaultz*TestArchives.test_make_archive_cwd_default  s    iik	! 	 xZ@	- 4&&|4 4 U344 RYY[+6%e,	4 44 4
 &e,s:   B- B!BB!,B- B	B!!B*&B- -B:c                     t        j                          j                          fd}g fd}t        d|g d       	 t	        j
                  t         d|      5  j                  t              5  t        dd       d d d        d d d         j                  t        j                                 j                  g       t        d       y # 1 sw Y   UxY w# 1 sw Y   YxY w# t        d       w xY w)Nc                     j                  d|       j                  | t        j                  j	                  d             j                  t        j
                                t               r  )r  r   r+   r;   r<   rr   r  rk  r  r  r  rh  r   s      r%   r  z4TestArchives.test_make_archive_cwd.<locals>.archiver  sP    Z,Y[*(MNRYY[(3. r'   c                 8    j                  |         |        y r*   r   )r;   r  
orig_chdirs    r%   _chdirz2TestArchives.test_make_archive_cwd.<locals>._chdir  s    KKtr'   r  r  chdirr`  rh  )r+   rr   r   r   r   	swap_attrr   r  r   r   r   )r   r  r  r  r  r  rh  s   `  @@@@r%   test_make_archive_cwdz"TestArchives.test_make_archive_cwd  s    iik<<>	!
 	 	 xZ@	-""2w7 G:&&|4 G UXFGG RYY[+6THk#:;%e,G GG G &e,s=   C4 #C(9CC(A C4 C%	!C((C1-C4 4Dc                     t        j                          j                          fd}d|_        t	        d|g d       	 t
        5   j                  t              5  t        dd       d d d        d d d         j                  t        j                                t        d       y # 1 sw Y   AxY w# 1 sw Y   ExY w# t        d       w xY w)Nc                     j                  | d       j                  |d          j                  t        j                                t               )Nr`  rh  )r   r+   rr   r  r  s      r%   r  zFTestArchives.test_make_archive_cwd_supports_root_dir.<locals>.archiver  sE    Y
3R
^X6RYY[+6. r'   Tr  r  r`  r  )r+   rr   r   supports_root_dirr   rb  r   r  r   r   r   )r   r  r  rh  s   ` @@r%   'test_make_archive_cwd_supports_root_dirz4TestArchives.test_make_archive_cwd_supports_root_dir  s    iik<<>	!
 &*"xZ@	- G&&|4 G UXFGG RYY[+6%e,	G GG G
 &e,s<   C B<!B00B<8,C 0B9	5B<<CC Cc                 B   | j                         }t        j                  |      5  t        5  | j	                  t        dd      d       | j                  t        j                  j                  d             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ntestr]  ztest.tar
r   r   ra  rb  r   r   r   r+   r;   rS  r   rh  s     r%   test_make_tarfile_in_curdirz(TestArchives.test_make_tarfile_in_curdir  sw    <<>!!(+ 	8X 	8\&%8*EOOBGGNN:67	8 	8 	8 	8 	8 	8#   BAB	8B	B	BBc                 B   | j                         }t        j                  |      5  t        5  | j	                  t        dd      d       | j                  t        j                  j                  d             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  ztest.zipr  r  s     r%   test_make_zipfile_in_curdirz(TestArchives.test_make_zipfile_in_curdir  sy     <<>!!(+ 	8X 	8\&%8*EOOBGGNN:67	8 	8 	8 	8 	8 	8r  c                    | j                  t        t        dd       | j                  t        t        dd d       | j                  t        t        dd ddg       t        dd dgd       t               D cg c]  \  }}|	 }}}| j	                  d|       t        d       t               D cg c]  \  }}|	 }}}| j                  d|       y c c}}w c c}}w )	Nr  r   c                      t         S r*   xrF   r'   r%   <lambda>z;TestArchives.test_register_archive_format.<locals>.<lambda>&      Q r'   c                      t         S r*   r  rF   r'   r%   r  z;TestArchives.test_register_archive_format.<locals>.<lambda>(  r  r'   )r   rn   )r   rn   r   c                      t         S r*   r  rF   r'   r%   r  z;TestArchives.test_register_archive_format.<locals>.<lambda>+  s    q r'   r  )r   	TypeErrorr   r   r  r   r  )r   rf   paramsformatss       r%   test_register_archive_formatz)TestArchives.test_register_archive_format#  s    )%<eQG)%<eY	)%<eY!9-	/ 	 y6(JG,?,ABLD&4BBeW%!%(,?,ABLD&4BB( C Cs   8C1Cc           	         | j                  t        j                  t         d       dD ]  }| j	                  |      5  | j                         }t        j                  j                  |d      }| j                  t              5 }t        t        d||       d d d        | j                  j                  j                  t        j                         | j                  |j                  j                   |       | j#                  t        j                  j%                  t         d             t'        j(                  |      \  }}t        j*                  |       | j                  t,              5 }t        t        d||       d d d        | j                  |j                  j                  t        j.                         | j                  |j                  j                   |       | j#                  t        j                  j%                  t         d             d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   $xY w)Nr^  FTr|  nonexistingr]  r   r   r   rt   r   subTestr   r+   r;   r<   r   r   r   r   r   r"   ENOENTr   r   r   rp   r6  r.  r   ENOTDIRr   r}  r&  nonexisting_filer   tmp_fdtmp_files          r%   test_make_tarfile_rootdir_nodirz,TestArchives.test_make_tarfile_rootdir_nodir3  s   	((VHD/:$ 	BGg. B,,.#%77<<#G &&'89 SR 0@'RS  !3!3U\\B  !6!68HI  6($!@A#+#3#3#@  &&'9: Kb 'JK  !3!3U]]C  !6!6A  6($!@AB B	BS SK KB B?    AIH+CI4H8BI+H50I8I=II	c           	         | j                  t        j                  t         d       dD ]  }| j	                  |      5  | j                         }t        j                  j                  |d      }| j                  t              5 }t        t        d||       d d d        | j                  j                  j                  t        j                         | j                  |j                  j                   |       | j#                  t        j                  j%                  t         d             t'        j(                  |      \  }}t        j*                  |       | j                  t,              5 }t        t        d||       d d d        | j                  |j                  j                  t        j.                         | j                  |j                  j                   |       | j#                  t        j                  j%                  t         d             d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   $xY w)Nr  r  r|  r  r  r   r  r  s          r%   test_make_zipfile_rootdir_nodirz,TestArchives.test_make_zipfile_rootdir_nodirH  s    		((VHD/:$ 	BGg. B,,.#%77<<#G &&'89 SR 0@'RS  !3!3U\\B  !6!68HI  6($!@A#+#3#3#@  &&'9: Kb 'JK  !3!3U]]C  !6!6A  6($!@AB B	BS SK KB Br  c                      | j                   |d fi |  | j                   |t        j                  fi |  | j                   |t        fi | y )Nc                     | S r*   rF   r;   s    r%   r  z3TestArchives.check_unpack_archive.<locals>.<lambda>b  s     r'   )#check_unpack_archive_with_converterr  r  r   )r   r  r$   s      r%   check_unpack_archivez!TestArchives.check_unpack_archive`  sX    000%	1)/	1000GLL	,$*	,000LVLr'   c                    | j                         \  }}t        |      }|j                  d       t        j                  j                  | j                         d      }t        ||||      }| j                         }	t         ||       ||	      fi | | j                  t        |	      |       | j                         }
t         ||       ||
      fd|i| | j                  t        |
      |       | j                  t        j                        5  t         |t              fi | d d d        | j                  t              5  t         |t              fddi| d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)Nrv  rY  r  r  )r_  rd   r7  r+   r;   r<   r   r   r   r   r   r   	ReadErrorr   r  )r   r  	converterr$   rh  r  expectedrk  r   r  tmpdir3s              r%   r  z0TestArchives.check_unpack_archive_with_converterg  sV   !//1(H% GGLL;		68XF ,,.y*Ig,>I&I'*H5 ,,.y*Ig,> 	!v 	!	!'*H5v//0 	89V,77	8z* 	F9V,EUEfE	F 	F	8 	8	F 	Fs   E+	E7+E47F c                     | j                  |d       | j                  |d       t        j                  dt        f      5  | j                  |       d d d        y # 1 sw Y   y xY w)Nfully_trustedfilterdatazPython 3.14)r  r   check_warningsr   )r   r  s     r%   check_unpack_tarballz!TestArchives.check_unpack_tarball  sb    !!&!A!!&!8++ 235 	.%%f-	. 	. 	.s   AA&c                 &    | j                  d       y )Nr]  r  r2  s    r%   test_unpack_archive_tarz$TestArchives.test_unpack_archive_tar  s    !!%(r'   c                 &    | j                  d       y )NrZ  r  r2  s    r%   test_unpack_archive_gztarz&TestArchives.test_unpack_archive_gztar      !!'*r'   c                 &    | j                  d       y )Nbztarr  r2  s    r%   test_unpack_archive_bztarz&TestArchives.test_unpack_archive_bztar  r  r'   z(AIX MAXDATA must be 0x20000000 or largerc                 &    | j                  d       y )Nxztarr  r2  s    r%   test_unpack_archive_xztarz&TestArchives.test_unpack_archive_xztar  s     	!!'*r'   c                     | j                  d       | j                  t              5  | j                  dd       d d d        y # 1 sw Y   y xY w)Nr  r  r  )r  r   r  r2  s    r%   test_unpack_archive_zipz$TestArchives.test_unpack_archive_zip  sF    !!%(y) 	<%%eF%;	< 	< 	<s   AAc                     t               } fd}t        dddg|dg       t        dd        j                  t        t        ddg|       t        d       t        ddg|        j                  ddgd	ft                       j                  ddgd	ft                      t        d        j                  t               |       y )
Nc                 r    j                  |d       j                  | d       j                  |d       y )Nr   	stuff.booxx)r   )r   extract_dirextrar   s      r%   _booz/TestArchives.test_unpack_registry.<locals>._boo  s3    UA&X{3[$/r'   Booz.booz.b2)r  r   r  r  Boo2r   )	r   r	   r   r   r
   r   r  r  r   )r   r  r  s   `  r%   test_unpack_registryz!TestArchives.test_unpack_registry  s    $&	0
 	uvuotl^L{D) 	-)?!(D	* 	!'vx6vx,.@.BC%&2.0B0DE 	!(+-w7r'   N)rw  )*r   r   r   r   requires_zlibrn  rq  r_  rC  rD  r   whichr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  requires_bz2r  requires_lzmarE  r   r   r  r  r  rF   r'   r%   rW  rW    s    W!H !HF " WXe,6818 1B W"D "DH WXe,6888 80 WXg.8:4: 4,F
 W- -6 WX*HI J *-"-.-&8 W8 8) B* WB B.MF0.) W+ + W+ + WX__S--/YZ+ [ + W< <
8r'   rW  c                       e Zd Z ej                   eed      d      d        Z ej                  ed       ej                   ee	d      d      d               Z
y)	TestMisc
disk_usagez)disk_usage not available on this platformc                 0   t        j                  t        j                  j	                  t
                    }dD ]"  }| j                  t        ||      t               $ | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  |j                         | j                  |j                  |j                         t        j                  t
               y )N)rG   usedfreer   )r   r$  r+   r;   rQ  rG  r   r!   r   assertGreaterrG   r&  assertGreaterEqualr'  )r   usager  s      r%   test_disk_usagezTestMisc.test_disk_usage  s     !!"''//(";<- 	=D!!'%"6<	=5;;*5::q)

A.UZZ85;;

3 	(#r'   r  chownzrequires os.chownc                 ^     j                         }t        j                  |      t        d        j	                  t
              5  t        j                         d d d         j	                  t              5  t        j                  d       d d d         j	                  t              5  t        j                  d       d d d         j	                  t              5  t        j                  d       d d d         j	                  t              5  t        j                  d       d d d        t        j                         }t        j                         }d fd		}t        j                  ||        |||       t        j                  |        ||       t        j                  |        ||       t        j                  |        ||
       t        j                  |||        ||||       t        j                  ||        |||       t        j                  ||        |||       t        j                  ||        |||
       	 t        j                  |      d   }t        j                   |      d   }t        j                  ||        |||       t        j                  |||        ||||       y # 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   1xY w# 1 sw Y   
xY w# 1 sw Y   xY w# t"        $ r Y y w xY w)Nr   ztesting chown functionznon-existing username)userznon-existing groupname)r     spamgQ	@c                     t        j                        }|j                  ||j                         |j                  ||j                         y y r*   )r+   r   r   st_uidst_gid)r;   r  r  sr   r   s       r%   check_chownz(TestMisc.test_chown.<locals>.check_chown  sH    !A  ahh/  ahh/ r'   )r  r   )NN)r   rp   r   rC   r   r  r   r,  LookupErrorr  r+   getuidgetgidr  r  r  r  KeyError)r   rQ  r  r  r4  r.  r  r   s   `      @r%   
test_chownzTestMisc.test_chown  s    ,,.??w/856z* 	#LL"	# {+ 	ALL(?@	A {+ 	CLL)AB	C y) 	,LL7+	, y) 	)LL4(	) iikiik	0 	XsC(Hc3'Xs#Hc"XC(Hc"XS)H#&Wc3'GS#&Wc"GS!W3'GS!WC(G%
	+<<$Q'DLL%a(E
 LL4/#s+LL$.c*k	# 	#	A 	A	C 	C	, 	,	) 	)D  		sN   
K=K,2K9'LL,0L  K),K69LLL 	L,+L,N)r   r   r   rC  rD  ro   r   r+  r  r+   r9  rF   r'   r%   r#  r#    st    X6DF$F$ X*HIXW-/BC:+ D J:+r'   r#  c                   $   e Zd Zd Zd Zd Zd Z ej                  e	j                  dk7  d      d        Z ej                  e	j                  dk(  d      d	        Z ej                  e	j                  dk(  d      d
        Z ej                  e	j                  dk(  d      d        Zej                   d        Zd Zd Z ej                  e	j                  dk(  d      d        Zd Zd Zd Zd Zd Zd Z ej                  e	j                  dk(  d      d        Z ej                  e	j                  dk(  d      d        Z ej                  e	j                  dk(  d      d        Z ej                  e	j                  dk(  d      d        Zy)	TestWhichc                    | j                  d      | _        t        j                  | j                  dd      | _        t        j                  | j                  j                  t        j                         | j                  | j                  j                         t
        j                  j                  | j                  j                        \  | _        | _        | j                  | _        t
        j"                  | _        d| _        y )NTmp)r   z.Exerl   r   suffixz.EXE)r   temp_dirrp   rq   	temp_filer+   r   rf   r   S_IXUSRr   r.  r;   r   rl   fileenv_pathcurdirextr2  s    r%   setUpzTestWhich.setUp	  s    E2 "44<A<BD 	$$dll3,,- ggmmDNN,?,?@$)iir'   c                     t        j                  | j                  | j                        }| j	                  || j
                  j                         y Nr  )r   r  rC  rl   r   rA  rf   r   r  s     r%   
test_basiczTestWhich.test_basic  s4    \\$))$((3T^^001r'   c                     t        j                  | j                  j                  | j                        }| j                  || j                  j                         y rI  )r   r  rA  rf   r@  r   rJ  s     r%   test_absolute_cmdzTestWhich.test_absolute_cmd  s<     \\$..--DMMBT^^001r'   c                 &   t         j                  j                  | j                        \  }}t         j                  j	                  || j
                        }t        j                  |      5  t        j                  || j                        }| j                  ||       d d d        t        j                  | j                        5  t        j                  ||      }| j                  |       d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY wrI  )r+   r;   r   rl   r<   rC  r   ra  r   r  r@  r   assertIsNone)r   r  tail_dirrelpathr  s        r%   test_relative_cmdzTestWhich.test_relative_cmd"  s      WW]]4884('',,x3!!x0 	*gDMM:BR)	* !!txx0 	"gH5Bb!	" 	"		* 	*	" 	"s   -4C;	)D;DDr9  ztest is for non win32c                 $   t         j                  j                  | j                        }t	        j
                  | j                        5  t        j                  | j                  |      }| j                  |       d d d        y # 1 sw Y   y xY wrI  )
r+   r;   rQ  rl   r   ra  r   r  rC  rO  r   r  r  s      r%   test_cwd_non_win32zTestWhich.test_cwd_non_win32/  sc     77??488,!!txx0 	"diih7Bb!	" 	" 	"s   
3BBztest is for win32c           	         t         j                  j                  | j                        }t	        j
                  | j                        5  t        j                  j                  dd      5  t        j                  | j                  |      }| j                  |t         j                  j                  | j                  | j                               d d d        t        j                  j                  dd      5  t        j                  | j                  |      }| j                  |       d d d        d d d        y # 1 sw Y   nxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  shutil._win_path_needs_curdirTreturn_valueF)r+   r;   rQ  rl   r   ra  rC  r  r  r   r  rC  r   r<   rE  rO  rT  s      r%   test_cwd_win32zTestWhich.test_cwd_win329  s    77??488,!!txx0 	&$$%DSW$X K\\$))(;  RWW\\$++tyy%IJK $$%DSX$Y &\\$))(;!!"%&	& 	&K K& &	& 	&s=   
"E,A&D?)E;3E.E?E	EE	EE c                 n   t        j                  t        j                  | j                              }|dz  }|j                          |dz  }|j                          |dz  }|j                          t        j                  |      5  t        j                  j                  dd      5  t        j                  d|      }d d d        | j                  t        j                  j!                        t        j                  j!                  |             d d d        y # 1 sw Y   ^xY w# 1 sw Y   y xY w)Nr   z	hello.exer  rW  TrX  )r  r  r+   fsdecoderl   r   touchr   ra  rC  r  r  r   r  r   r;   rc  )r   r  elsewhere_in_path_dirmatch_elsewhere_in_path
exe_in_cwdr  s         r%   *test_cwd_win32_added_before_all_other_pathz4TestWhich.test_cwd_win32_added_before_all_other_pathG  s     <<DHH 56 (6 1##%"7+"E%%'+
!!x0 	O$$%DSW$X K\\+4IJK RWW__R0"''//*2MN		O 	OK K	O 	Os%   "D+*DAD+D(	$D++D4c                 v   t        j                  t        j                  | j                              }|dz  }|dz  }|j                          |j                          |dz  }|dz  }|j                          |j                          t        j                  j                  t        |      t        |      g      }y )Nr   r   zhello.com.exez	hello.com)
r  r  r+   r\  rl   r   r]  pathsepr<   r  )r   r  r   r   pathext_match
path_match	test_paths          r%   )test_pathext_match_before_path_full_matchz3TestWhich.test_pathext_match_before_path_full_matchZ  s     <<DHH 56& & 



.K'
JJOOSYD	$:;	r'   c                    t        j                  | j                  j                  t        j
                         t        j                  | j                  j                  t         j                        r| j                  d       t        j                  | j                  | j                  t         j                        }| j                  |       y )Nzcan't set the file read-only)r;   rA   )r+   r   rA  rf   r   r   accessW_OKr  r   r  rC  rl   rO  rJ  s     r%   test_non_matching_modez TestWhich.test_non_matching_modem  su     	$$dll399T^^(("''2MM89\\$))$((A"r'   c                 h   t         j                  j                  | j                        \  }}t	        j
                  |      5  t        j                  | j                  |      }| j                  |t         j                  j                  || j                               d d d        y # 1 sw Y   y xY wrI  )r+   r;   r   rl   r   ra  r   r  rC  r   r<   )r   r  rP  r  s       r%   test_relative_pathzTestWhich.test_relative_pathv  s{    WW]]4884(!!x0 	Ddiih7BRh		!BC	D 	D 	Ds   AB((B1c                 h    t        j                  d| j                        }| j                  |       y )Nzfoo.exer  )r   r  rl   rO  rJ  s     r%   test_nonexistent_filezTestWhich.test_nonexistent_file|  s$    \\)$((3"r'   zpathext check is Windows-onlyc                     t        j                  | j                  d d | j                        }| j	                  || j
                  j                  d d | j                  z          y )Nr  )r   r  rC  rl   r   rA  rf   rF  rJ  s     r%   test_pathext_checkingzTestWhich.test_pathext_checking  sL    
 \\$))CR.txx8T^^00"5@Ar'   c                     t        j                         5 }| j                  |d<   t        j                  | j
                        }| j                  || j                  j                         d d d        y # 1 sw Y   y xY wNPATH)	r   EnvironmentVarGuardrD  r   r  rC  r   rA  rf   r   envr  s      r%   test_environ_pathzTestWhich.test_environ_path  s^    **, 	6--CKdii(BR!4!45	6 	6 	6s   AA33A<c           	         t        j                         5 }d|d<   t        j                  j	                  d| j
                  d      5  t        j                  t        d| j
                        5  t        j                  | j
                        5  t        j                  | j                        }| j                  |       d d d        d d d        d d d        d d d        y # 1 sw Y   "xY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr   ru  
os.confstrTrY  createdefpath)r   rv  rC  r  r  rl   r   r  r+   ra  r   r  rC  rO  rw  s      r%   test_environ_path_emptyz!TestWhich.test_environ_path_empty  s    **, 	&CK$$\,0 % 2 &""2y$((;& %%dhh/& \\$)),!!"%& & &	& 	&& & & & & &	& 	&sS   2D&C7- C+1C	>C+C7DC($C++C40C77D 	<DDc           	         t         j                  j                  | j                  j                        }t
        j                  dk(  rUt         j                  }t        |t              rt        j                  |      }t         j                  j                  ||      }t        j                         5 }t         j                  |d<   t        j                   j#                  d| j$                  d      5  t'        j(                  t         d| j$                        5  t+        j,                  | j.                        }| j1                  |       t        j2                  | j$                        5  t+        j,                  | j.                        }| j5                  ||       d d d        d d d        d d d        d d d        y # 1 sw Y   "xY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr9  ru  r{  Tr|  r~  )r+   r;   r`  rA  rf   r   rF  rE  r9   r   r   r<   r   rv  rc  rC  r  r  rl   r   r  r   r  rC  rO  ra  r   )r   expected_cwdrE  rx  r  s        r%   test_environ_path_cwdzTestWhich.test_environ_path_cwd  sg   ww''(;(;<<<7"YYF,.V,77<<=L **, 	7**CK$$\,0 % 2 	7""2y$((;	7 \\$)),!!"% ))$((3 7dii0B$$R67	7 	7	7 	77 7	7 	7 	7 	7	7 	7sV   0A G0&GAG&2F9	G G(G9G>GG
GG	GG&c                 Z   t        j                         5 }|j                  dd        t        j                  j                  dt        d      5  t        j                  t        d| j                        5  t        j                  | j                        }d d d        d d d        | j                  | j                  j                          t        j                  j                  d| j                  d      5  t        j                  t        dd      5  t        j                  | j                        }d d d        d d d        | j                  || j                  j                          d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   \xY w# 1 sw Y   y xY w)Nru  r{  T)r   r}  r~  r|  r   )r   rv  poprC  r  r  r  r   r  r+   rl   r   r  rC  r   rA  rf   rw  s      r%   test_environ_path_missingz#TestWhich.test_environ_path_missing  sX   **, 	6GGFD! $$\z,0 % 2 -""2y$((;- \\$)),- - R!4!45 $$\,0 % 2 -""2y"5- \\$)),- - R!4!45	6 	6- - - -- - - -	6 	6sl   9F!&E=4 E1E=AF!6F F	2F:.F!1E:6E==F	F!	FFF	F!!F*c                    t         j                  j                  | j                        }t	        j
                  | j                        5  t	        j                         5 }| j                  |d<   t        j                  | j                  d      }| j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  ru  r   )r+   r;   rQ  rl   r   ra  rv  rD  r   r  rC  rO  )r   r  rx  r  s       r%   test_empty_pathzTestWhich.test_empty_path  s    77??488,!!txx0 	"**,	"03--CKdiib1Bb!		" 	" 	" 	" 	" 	"s%   
B>AB2!B>2B;	7B>>Cc                     t        j                         5 }|j                  dd        t        j                  | j
                        }| j                  |       d d d        y # 1 sw Y   y xY wrt  )r   rv  r  r   r  rC  rO  rw  s      r%   test_empty_path_no_PATHz!TestWhich.test_empty_path_no_PATH  sS    **, 	"GGFD!dii(Bb!	" 	" 	"s   AA!!A*ztest specific to Windowsc                 J   d}t        j                  | j                  d|      }t        j                  |j
                  t        j                         | j                  |j                         t        j                  j                  |j
                        }t        j                  j                  |      d   }t        j                         5 }||d<   t        j                   || j                        }| j#                  ||j
                         d d d        y # 1 sw Y   y xY w)N.xyzTmp2r>  r   PATHEXTr  )rp   rq   r@  r+   r   rf   r   rB  r   r.  r;   r`  rx  r   rv  r   r  r   r   rF  temp_filexyzprogramrx  r  s         r%   test_pathextzTestWhich.test_pathext  s    22t}}:@N
""DLL1**+ ''""<#4#45''""7+A.**, 	4 C	NgDMM:BR!2!23	4 	4 	4s   ADD"c                    d}t        j                  | j                  d|      }| j                  |j                         t
        j                  j                  |j                        }t
        j                  j                  |      d   }t        j                         5 }| d|d<   t        j                  || j                        }| j                  ||j                         d d d        y # 1 sw Y   y xY w)Nr  r  r>  r   ;r  r  )rp   rq   r@  r   r.  r+   r;   r`  rf   rx  r   rv  r   r  r   r  s         r%   test_pathext_with_empty_strz%TestWhich.test_pathext_with_empty_str  s    22t}}:@N**+ ''""<#4#45''""7+A.**, 	4 #uAYC	NgDMM:BR!2!23	4 	4 	4s   AC..C7c                 B   t        j                         5 }| j                  |d<   d|d<   t        j                  | j                        dz  }|j                  d       | j                  t        j                  d      t        |             d d d        y # 1 sw Y   y xY w)Nru  z.testr  ztest_program.testi  )rA   test_program)
r   rv  r@  r  r  r]  r   r   r  r  )r   rx  rf  s      r%   %test_pathext_applied_on_files_in_pathz/TestWhich.test_pathext_applied_on_files_in_path  s    **, 	K--CK$C	NT]]36IIIOOO'V\\.93y>J	K 	K 	Ks   A7BBc                 v   t         j                  j                  dd      5 }| j                  t	        j
                  dt        j                               |j                  d       |j                          | j                  t	        j
                  dd             |j                          d d d        t         j                  j                  dd      5 }| j                  t	        j
                  dt        j                               |j                  d       d d d        y # 1 sw Y   xxY w# 1 sw Y   y xY w)Nz&_winapi.NeedCurrentDirectoryForExePathTrX  dontcarer   F)rC  r  r  r   r   _win_path_needs_curdirr+   X_OKassert_called_once_with
reset_mockassert_not_calledr   )r   need_curdir_mocks     r%   test_win_path_needs_curdirz$TestWhich.test_win_path_needs_curdir  s    ]]  !IX\ ] 	1aqOOF99*bggNO44Z@'')OOF99*aHI..0	1 ]]  !IX] ^ 	AbrV:::rwwOP44Z@	A 	A	1 	1	A 	As   B
D#AD/#D,/D8N)r   r   r   rG  rK  rM  rR  rC  rD  r   rF  rU  rZ  ra  rg  r   rG  rk  rm  ro  rr  ry  r  r  r  r  r  r  r  r  r  rF   r'   r%   r;  r;    s   2
2" X002"2" X0,.
&.
& X0,.O.O" X0,.&.&" ## $D
 X08:B:B6	&7,6$"" X02LM4 N4" X02LM4 N4  X02LMK NK X02LM
A N
Ar'   r;  c                       e Zd Zd Zy)TestWhichBytesc                    t         j                  |        t        j                  | j                        | _        t        j                  | j
                        | _        t        j                  | j                  j                        | j                  _        t        j                  | j                        | _        t        j                  | j                        | _	        y r*   )
r;  rG  r+   r   rl   rC  rA  rf   rE  rF  r2  s    r%   rG  zTestWhichBytes.setUp	  s}    ;;txx(KK		*	 kk$..*=*=>kk$++.;;txx(r'   N)r   r   r   rG  rF   r'   r%   r  r  	  s    )r'   r  c                   n   e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
d        Ze
d	        Zd
 Ze
d        Zd Ze
d        Zd Z ej&                  ej*                  j,                  d      d        Zd Zd Zd Zd Zej:                  e
d               Zej:                  e
d               Zej:                  e
d               Z ej:                  e
d               Z!d Z"d Z#e
d        Z$e
d        Z%d Z&ejN                   ej&                   e(ed      xr  e(e)d      xr	  e(e)d       d!      d"               Z*y#)$TestMovec                    d}| j                         | _        | j                         | _        t        j                  j                  | j                  |      | _        t        j                  j                  | j                  |      | _        t        | j                  d      5 }|j                  d       d d d        y # 1 sw Y   y xY w)Nr   r4   r/  )
r   rU  rV  r+   r;   r<   r<  rJ  r=   r>   )r   r   rU   s      r%   rG  zTestMove.setUp	  s    ||~||~T\\8<T\\8<$--& 	!GGG	 	 	s   !B<<Cc                 p   t        |d      5 }|j                         }d d d        t        j                  ||       t        |d      5 }| j	                  |j                                d d d        | j                  t        j                  j                  |             y # 1 sw Y   xY w# 1 sw Y   DxY wNrY   )	r=   r[   r   mover   r   r+   r;   r   )r   rw   rx   real_dstrU   contentss         r%   _check_move_filezTestMove._check_move_file"	  s    #t_ 	 vvxH	 C(D! 	1QXqvvx0	1,-	  	 	1 	1s   B !B, B),B5c                 $   t        t        j                  |            }t        j                  ||       | j                  |t        t        j                  |                   | j                  t        j                  j                  |             y r*   )	r_   r+   r`   r   r  r   r   r;   r   )r   rw   rx   r  r  s        r%   _check_move_dirzTestMove._check_move_dir*	  s[    "**S/*C6"**X*>#?@,-r'   c                 f    | j                  | j                  | j                  | j                         y r*   )r  r<  rJ  r2  s    r%   test_move_filezTestMove.test_move_file0	  s     dmmT]]DMMJr'   c                 f    | j                  | j                  | j                  | j                         y r*   )r  r<  rV  rJ  r2  s    r%   test_move_file_to_dirzTestMove.test_move_file_to_dir4	  s     dmmT\\4==Ir'   c                     t        j                  | j                        }| j                  || j                  | j
                         y r*   )r  r  r<  r  rV  rJ  )r   rw   s     r%   "test_move_file_to_dir_pathlike_srcz+TestMove.test_move_file_to_dir_pathlike_src8	  s.    ll4==)c4<<?r'   c                     t        j                  | j                        }| j                  | j                  || j
                         y r*   )r  r  rV  r  r<  rJ  r   rx   s     r%   "test_move_file_to_dir_pathlike_dstz+TestMove.test_move_file_to_dir_pathlike_dst=	  s.    ll4<<(dmmS$--@r'   c                 $    | j                          y r*   )r  r2  s    r%   test_move_file_other_fsz TestMove.test_move_file_other_fsB	  s     	r'   c                 $    | j                          y r*   )r  r2  s    r%   test_move_file_to_dir_other_fsz'TestMove.test_move_file_to_dir_other_fsG	  s     	""$r'   c                     t        j                  | j                               }	 | j                  | j                  ||       t        j                  |       y # t        j                  |       w xY wr5  )rp   r   r   r  rU  r   r   r   rV  s     r%   test_move_dirzTestMove.test_move_dirL	  sN    //dlln5	&  w@W%IW%s   A A0c                 $    | j                          y r*   )r  r2  s    r%   test_move_dir_other_fszTestMove.test_move_dir_other_fsT	  s     	r'   c           
          | j                  | j                  | j                  t        j                  j                  | j                  t        j                  j                  | j                                     y r*   )r  rU  rV  r+   r;   r<   r`  r2  s    r%   test_move_dir_to_dirzTestMove.test_move_dir_to_dirY	  sF    T\\4<<GGLLrww'7'7'EF	Hr'   c                 $    | j                          y r*   )r  r2  s    r%   test_move_dir_to_dir_other_fsz&TestMove.test_move_dir_to_dir_other_fs^	  s     	!!#r'   c           
      &   | j                  | j                  t        j                  j                  z   | j
                  t        j                  j                  | j
                  t        j                  j                  | j                                     y r*   )r  rU  r+   r;   seprV  r<   r`  r2  s    r%   test_move_dir_sep_to_dirz!TestMove.test_move_dir_sep_to_dirc	  sS    T\\BGGKK7GGLLrww'7'7'EF	Hr'   zrequires os.path.altsepc           
      &   | j                  | j                  t        j                  j                  z   | j
                  t        j                  j                  | j
                  t        j                  j                  | j                                     y r*   )r  rU  r+   r;   altseprV  r<   r`  r2  s    r%   test_move_dir_altsep_to_dirz$TestMove.test_move_dir_altsep_to_dirg	  sS    T\\BGGNN:DLLGGLLrww'7'7'EF	Hr'   c                     t        | j                  d      5  	 d d d        | j                  t        j                  t        j
                  | j                  | j                         y # 1 sw Y   NxY w)Nr4   )r=   rJ  r   r   r   r  r<  rV  r2  s    r%   "test_existing_file_inside_dest_dirz+TestMove.test_existing_file_inside_dest_dirl	  sL    $--& 		&,,T]]DLLQ	 	s   A&&A/c                     t         j                  j                  | j                  d      }| j	                  t
        j                  t
        j                  | j                  |       y Nr  )r+   r;   r<   rU  r   r   r   r  r  s     r%   test_dont_move_dir_in_itselfz%TestMove.test_dont_move_dir_in_itselfr	  s:    ggll4<</&,,T\\3Gr'   c           	         t        j                  t               	 dD ]{  \  }}t         j                  j	                  t        |      }t         j                  j	                  t        |      }| j                  t        j                  ||      d|d|d       } 	 t        j                  t               y # t        j                  t               w xY w)N))srcdirzsrcdir/dest)_destinsrc() wrongly concluded that dst (z) is not in src ()r  )
r+   r   r   r;   r<   r   r   
_destinsrcr   r   r=  s      r%   test_destinsrc_false_negativez&TestMove.test_destinsrc_false_negativew	  s    
	%7 ISggll63/ggll63/ 1 1#s ;>A3"H   II V$IV$   B B6 6Cc           	         t        j                  t               	 dD ]{  \  }}t         j                  j	                  t        |      }t         j                  j	                  t        |      }| j                  t        j                  ||      d|d|d       } 	 t        j                  t               y # t        j                  t               w xY w)N))r  zsrc/dest)r  z
srcdir.newr  z) is in src (r  r  )
r+   r   r   r;   r<   r   r   r  r   r   r=  s      r%   test_destinsrc_false_positivez&TestMove.test_destinsrc_false_positive	  s    
	%N DSggll63/ggll63/  !2!23!<9<c!C ! DD V$IV$r  c                    t         j                  j                  | j                  d      }t        j                  | j
                  |       t        j                  || j                         | j                  t         j                  j                  | j                               | j                  t         j                  j                  | j
                  | j                               y r  )r+   r;   r<   rU  r   r<  r   r  rJ  r   rb   samefiler  s     r%   test_move_file_symlinkzTestMove.test_move_file_symlink	  s     ggll4<</


4==#&C't}}56((FGr'   c                    d}t         j                  j                  | j                  |      }t        j                  | j
                  |       t        j                  || j                         t         j                  j                  | j                  |      }| j                  t         j                  j                  |             | j                  t         j                  j                  | j
                  |             y r  )r+   r;   r<   rU  r   r<  r   r  rV  r   rb   r  )r   r   rx   
final_links       r%   test_move_file_symlink_to_dirz&TestMove.test_move_file_symlink_to_dir	  s     ggll4<<2


4==#&C&WW\\$,,9
z23((
CDr'   c                 L   t         j                  j                  | j                  d      }t         j                  j                  | j                  d      }t        j                  ||       t         j                  j                  | j
                  d      }t        j                  ||       | j                  t         j                  j                  |             | j                  t         j                  j                  |      t         j                  j                  |             y Nr  r  r  )r+   r;   r<   rU  r   rV  r   r  r   rb   r   realpathr   rw   rx   rn  s       r%   test_move_dangling_symlinkz#TestMove.test_move_dangling_symlink	  s     ggll4<</ggll4<</


377<<f5C"x01))#.0@0@0JKr'   c                 <   t         j                  j                  | j                  d      }t         j                  j                  | j                  d      }t        j                  |       t        j
                  ||       t         j                  j                  | j                  d      }t        j                  ||       | j                  t         j                  j                  |             | j                  t         j                  j                  ||             y r  )r+   r;   r<   rU  r   r   rV  r   r  r   rb   r  r  s       r%   test_move_dir_symlinkzTestMove.test_move_dir_symlink	  s     ggll4<</ggll4<</



377<<f5C"x01((h78r'   c           	         t        j                  | j                  | j                        }| j	                  |t
        j                  j                  | j                  t
        j                  j                  | j                                     y r*   )	r   r  r<  rV  r   r+   r;   r<   r`  rJ  s     r%   test_move_return_valuezTestMove.test_move_return_value	  sT    [[5T\\277+;+;DMM+JK	Mr'   c                    t        j                  | j                  t        j                  j                  | j                  d            }| j                  |t        j                  j                  | j                  d             y r  )r   r  r<  r+   r;   r<   rV  r   rJ  s     r%    test_move_as_rename_return_valuez)TestMove.test_move_as_rename_return_value	  sL    [[T\\5(IJRWW\\$,,>?r'   c                     g fd}t        j                  | j                  | j                  |       | j	                  t              d       y )Nc                 ,    j                  | |f       y r*   r   rw   rx   moveds     r%   r  z7TestMove.test_move_file_special_function.<locals>._copy	      LL#s$r'   r  r   )r   r  r<  rV  r   r   r   r  r  s     @r%   test_move_file_special_functionz(TestMove.test_move_file_special_function	  s9    	%DMM4<<uEUQ'r'   c                    g fd}t        j                  t        j                  j	                  | j
                  d             t        j                  t        j                  j	                  | j
                  d             t        j                  | j
                  | j                  |       | j                  t              d       y )Nc                 ,    j                  | |f       y r*   r   r  s     r%   r  z6TestMove.test_move_dir_special_function.<locals>._copy	  r  r'   childchild1r  r   )r   r   r+   r;   r<   rU  r   r  rV  r   r   r  s     @r%   test_move_dir_special_functionz'TestMove.test_move_dir_special_function	  s{    	%##BGGLLw$GH##BGGLLx$HIDLL$,,eDUQ'r'   c                 Z   | j                         | _        t        j                  j	                  t        j                  j                  | j                        t        j                  j                  | j                        j                               }| j                  | j                  |       	 t        j                  | j                  |       | j                  t        j                  j                  |             t        j                  |       y # t        j                  |       w xY wr*   )r   rU  r+   r;   r<   rQ  r`  upperr  r   r  r   ra   r   r  s     r%   test_move_dir_caseinsensitivez&TestMove.test_move_dir_caseinsensitive	  s     ||~'',,-  .4468 	DLL'2	KKg.OOBGGMM'23HHWBHHWs   /AD D*ra  SF_IMMUTABLE	UF_OPAQUEzrequires lchflagsc                     	 t        j                  t               t        j                  t        t        j
                         | j                  t        t        j                  t        t               | j                  t        t        j                         v        t        j                  t        t        j                         t        j                  t         j                   j#                  t        d             t        j                  t        t        j
                         | j                  t        t        j                  t        t               | j                  t        t        j                         v        t         j                   j%                  t              rAt        j                  t        t        j                         t        j&                  t               t         j                   j%                  t              rBt        j                  t        t        j                         t        j&                  t               y y # t         j                   j%                  t              rAt        j                  t        t        j                         t        j&                  t               t         j                   j%                  t              rBt        j                  t        t        j                         t        j&                  t               w w xY w)Nr  )r+   r   
TESTFN_SRCra  r   r  r   r  r   r  
TESTFN_DSTr   r`   r  r   r   r;   r<   r   r   r2  s    r%   test_move_dir_permission_deniedz(TestMove.test_move_dir_permission_denied	  s   	-HHZ KK
D$5$56 ov{{J
SZ2::<78 KK
DNN3''Z(IJKK
D$5$56 ov{{J
SZ2::<78ww~~j)J7  ,ww~~j)J7  , * ww~~j)J7  ,ww~~j)J7  , *s   E6I CLN)+r   r   r   rG  r  r  r  r  r  r  r2   r  r  r  r  r  r  r  rC  rD  r+   r;   r  r  r  r  r  r  r   rB  r  r  r  r  r  r  r  r  r  rS  ro   r   r  rF   r'   r%   r  r  	  s   ..KJ@
A
   % %&  H
 $ $H X)BCH DHRH

%
% ""H  #H ""E  #E ""L  #L ""9  #9M
@ ( ( ( (" ''XZ0 8$T>:8$T;7,.-	. (
-r'   r  c                       e Zd Z G d de      Zd Z ej                  ed      d        Z	 ej                  ed      d        Z
 ej                  ed      d        Zy)	TestCopyFilec                   2    e Zd ZdZdZdZddZd Zd Zd Z	y)TestCopyFile.FauxFNc                      || _         || _        y r*   )_raise_in_exit_suppress_at_exit)r   raise_in_exitsuppress_at_exits      r%   __init__zTestCopyFile.Faux.__init__
  s    "/D%5D"r'   c                      y)Nr   rF   )r   r#   s     r%   r[   zTestCopyFile.Faux.read
  s    r'   c                     d| _         y r  )_enteredr2  s    r%   	__enter__zTestCopyFile.Faux.__enter__
  s	     DMr'   c                 j    |||f| _         | j                  rd| _        t        d      | j                  S )NTCannot close)_exited_withr  _raisedr    r  )r   exc_typeexc_valexc_tbs       r%   __exit__zTestCopyFile.Faux.__exit__
  s8     ('6 9D""#n--)))r'   r  )
r   r   r   r  r  r  r	  r[   r  r  rF   r'   r%   Fauxr  
  s%    	6		!	*r'   r  c                     dd}t        j                  t        d|      5  | j                  t              5  t        j
                  dd       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 $    | dk(  rt        d      y )NsrcfilezCannot open "srcfile"r  )r   rA   s     r%   _openz4TestCopyFile.test_w_source_open_fails.<locals>._open
  s    9$566 %r'   r=   r  destfilerZ   )r   r  r   r   r    r>  )r   r  s     r%   test_w_source_open_failsz%TestCopyFile.test_w_source_open_fails
  sf    	
 vvu5 	7""7+ 7	:67	7 	77 7	7 	7s"   A*AA*A'	#A**A3zskipped on macOSc                    | j                         dfd	}t        j                  t        d|      5  t        j                  dd       d d d        | j                  j                         | j                  j                  d   t        u        | j                  j                  d   j                  d       y # 1 sw Y   rxY w)	Nc                 4    | dk(  rS | dk(  rt        d      y )Nr  r  Cannot open "destfile"r  )r   rA   r  s     r%   r  z2TestCopyFile.test_w_dest_open_fails.<locals>._open+
  s)    9$:%677 &r'   r=   r  r  r   r   )r   r  )r  r   r  r   r>  r   r  r  r    r   r#   )r   r  r  s     @r%   test_w_dest_open_failsz#TestCopyFile.test_w_dest_open_fails'
  s    ))+	 vvu5 	3OOIz2	3((),,Q/7:;--a0554	6		3 	3s   B;;Cc                     | j                         | j                  d      d	fd	}t        j                  t        d|      5  t        j                  dd       d d d        | j                  j                         | j                  j                         | j                  j                         | j                  j                  d   t        u        | j                  j                  d   j                  d       y # 1 sw Y   xY w)
NTc                 "    | dk(  rS | dk(  rS y Nr  r  rF   r   rA   r  r  s     r%   r  z3TestCopyFile.test_w_dest_close_fails.<locals>._open>
  "    9$:% &r'   r=   r  r  r   r   )r  r  )r  r   r  r   r>  r   r  r  r  r    r   r#   r   r  r  r  s     @@r%   test_w_dest_close_failsz$TestCopyFile.test_w_dest_close_fails9
  s    ))+99T?	 vvu5 	3OOIz2	3(()))*((),,Q/7:;--a055*	,	3 	3s   DDc                 P   | j                  d      | j                         dfd	}t        j                  t        d|      5  | j	                  t
              5  t        j                  dd       d d d        d d d        | j                  j                         | j                  j                         | j                  j                         | j                  j                  d   d u        | j                  j                         y # 1 sw Y   xY w# 1 sw Y   xY w)NTc                 "    | dk(  rS | dk(  rS y r$  rF   r%  s     r%   r  z5TestCopyFile.test_w_source_close_fails.<locals>._openT
  r&  r'   r=   r  r  r   r  )r  r   r  r   r   r    r>  r   r  r   r  r  r'  s     @@r%   test_w_source_close_failsz&TestCopyFile.test_w_source_close_failsN
  s     ))D/99;	 vvu5 	7""7+ 7	:67	7 	(()))*))*,,Q/478(7 7	7 	7s$   DD3DD	DD%N)r   r   r   objectr  r  rC  rE  rT  r!  r(  r+  rF   r'   r%   r  r  	
  sy    *v *$7 X__U./6 06" X__U./, 0,( X__U./) 0)r'   r  c                       e Zd ZdZed        Zed        Zd Zej                  d        Z
d Zd Zd Zd	 Z ej                   ej$                  d
k7  d      d        Zy)TestCopyFileObji    c                 8    t        t        | j                         y r*   )rW   r   FILESIZEclss    r%   
setUpClasszTestCopyFileObj.setUpClassh
  s    -r'   c                 h    t        j                  t               t        j                  t               y r*   )r   rt   r   r  r1  s    r%   tearDownClasszTestCopyFileObj.tearDownClassl
  s     !r'   c                 6    t        j                  t               y r*   r   rt   r  r2  s    r%   tearDownzTestCopyFileObj.tearDownq
      !r'   c              #      K   t        t        d      5 }t        t        d      5 }||f d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wwNrY   r4   r=   r   r  r=  s      r%   	get_fileszTestCopyFileObj.get_filest
  V     &$ 	!3gt$ !Cj !	! 	!! !	! 	!/   AA<A	AA	AAAc                     t        |d      5 }t        |d      5 }| j                  |j                         |j                                d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )r=   r   r[   )r   rw   rx   fsrcfdsts        r%   assert_files_eqzTestCopyFileObj.assert_files_eqz
  sc    #t_ 	;c4 ;D  diik:;	; 	;; ;	; 	;s"   A&/A	A&A#	A&&A/c                     | j                         5 \  }}t        j                  ||       d d d        | j                  t        t
               y # 1 sw Y   $xY wr*   )r=  r   copyfileobjrC  r   r  r=  s      r%   test_contentzTestCopyFileObj.test_content
  sG    ^^ 	)#ssC(	)VW-	) 	)s   AAc                     | j                         5 \  }}t        j                  ||       d d d        y # 1 sw Y   y xY wr*   )r=  r   rE  r=  s      r%   test_file_not_closedz$TestCopyFileObj.test_file_not_closed
  s7    ^^ 	"#ssC(	" 	" 	"s   4=c                 (   | j                         5 \  }}t        j                  ||       | j                  |j	                         | j
                         | j                  |j	                         | j
                         d d d        y # 1 sw Y   y xY wr*   )r=  r   rE  r   tellr0  r=  s      r%   test_file_offsetz TestCopyFileObj.test_file_offset
  sk    ^^ 	8#ssC(SXXZ7SXXZ7	8 	8 	8s   A.BBre  zWindows onlyc                 d   t         j                  j                  d      5 }t        j                  t
        t               d d d        | j                  j                  d   d   d       t        j                  t        j                         d      5 }|j                  d       d d d        j                  }| j                  t         j"                  |       t         j                  j                  d      5 }t        j                  |t               d d d        | j                  |j                  d   d   d       t        j                  t        j                         d      5 }	 d d d        |j                  }| j                  t         j"                  |       t         j                  j                  d      5 }t        j                  |t               d d d        | j%                  |t               y # 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   RxY w)	Nzshutil._copyfileobj_readintor   rn   i   Frk   s   foor   )rC  r  r  r   r>  r   r  r   	call_argsrp   rq   r+   rr   r>   rf   r   r   rt   rC  )r   mrU   r  s       r%   test_win_implzTestCopyFileObj.test_win_impl
  s    ]]  !?@ 	-AOOFG,	-
 	Q*O< ((RYY[G 	1GGFO		((%0]]  !?@ 	,AOOE7+	,Q*A. ((RYY[G 	1		((%0]]  !?@ 	,AOOE7+	, 	UG,3	- 	-	 		, 	,
	 		, 	,s;   G4H7H%H:H&4G>HHH#&H/N)r   r   r   r0  classmethodr3  r5  r8  
contextlibcontextmanagerr=  rC  rF  rH  rK  rC  rE  r+   rf   rO  rF   r'   r%   r.  r.  e
  s    H. . " "" ! !
;
.
"8 X__RWW_n5- 6-r'   r.  c                       e Zd Z	 dZdZdZed        Zed        Zd Z	e
j                  d        Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)_ZeroCopyFileTesti   r'   r   c                     t        t        | j                         t        t        d      5 }|j	                         | _        d d d        y # 1 sw Y   y xY wr  )rW   r   r0  r=   r[   FILEDATA)r2  rU   s     r%   r3  z_ZeroCopyFileTest.setUpClass
  s>    -&$ 	51668CL	5 	5 	5s   A

Ac                 6    t        j                  t               y r*   )r   rt   r   r1  s    r%   r5  z_ZeroCopyFileTest.tearDownClass
  s     r'   c                 6    t        j                  t               y r*   r7  r2  s    r%   r8  z_ZeroCopyFileTest.tearDown
  r9  r'   c              #      K   t        t        d      5 }t        t        d      5 }||f d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wwr;  r<  r=  s      r%   r=  z_ZeroCopyFileTest.get_files
  r>  r?  c                     t        d      )Nzmust be implemented in subclass)r2  )r   r#   r$   s      r%   zerocopy_funz_ZeroCopyFileTest.zerocopy_fun
  s    !"CDDr'   c                     | j                          | j                          | j                          | j                          y r*   )r8  r5  r3  rG  r2  s    r%   resetz_ZeroCopyFileTest.reset
  s*    

r'   c                    | j                         5 \  }}| j                  ||       d d d        | j                  t        t        d      | j
                         | j                         5 \  }}t        j                  j                  d      5 }t        j                  t        t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NTr@   zshutil.copyfileobj)r=  r[  r   r\   r  rV  rC  r  r  r   r>  r   )r   rw   rx   rN  s       r%   test_regular_copyz#_ZeroCopyFileTest.test_regular_copy
  s    ^^ 	(#sc3'	(748$--H^^ 	 #s$$%9: 1a01	  	 		( 	(
1 1	  	 s/   B=*#CC	,C=C	C	CCc                 d   | j                  | j                         | j                         5 \  }}| j                  t        t
        f      5  | j                  ||       d d d        d d d        | j                  t        t        d      | j                         y # 1 sw Y   =xY w# 1 sw Y   AxY w)NTr_  )r   r]  r=  r   r    r   r[  r   r\   r   rV  r=  s      r%   test_same_filez _ZeroCopyFileTest.test_same_file
  s    

#^^ 	,#s""G->#?@ ,!!#s+,	, 	6$7G, ,	, 	,s#   B&BB&B#	B&&B/c                     t        j                  t        j                               }| j	                  t
              5 }t        j                  |d       d d d        | j                  j                  j                  |       y # 1 sw Y   0xY w)Nr   new)rp   r   r+   rr   r   r   r   r>  r   r   r   )r   rf   r   s      r%   test_non_existent_srcz'_ZeroCopyFileTest.test_non_existent_src
  sd    299;/01 	)ROOD%(	)..5	) 	)s   BBc                    t         dz   t         dz   | j                  fd       | j                  fd       t        d      5  	 d d d        t        d      5 }t        d      5 }| j                  ||       d d d        d d d        | j	                  t        d      d	       y # 1 sw Y   cxY w# 1 sw Y   ;xY w# 1 sw Y   ?xY w)
Nrw   rx   c                  .    t        j                         S r*   r   rt   )ru   s   r%   r  z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>
      	 0 0 9 r'   c                  .    t        j                         S r*   rh  )rv   s   r%   r  z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>
  ri  r'   r4   rY   Tr_  r'   )r   r   r=   r[  r   r\   )r   rw   rx   rv   ru   s      @@r%   test_empty_filez!_ZeroCopyFileTest.test_empty_file
  s    5.5.9:9:'4  		 '4  	,Cgt$ ,!!#s+,	, 	748#>	 	, ,	, 	,s0   	B-C,B9?C-B69C	>CCc                     t         j                  j                  | j                  t              5  | j                  t        t        j                  t        t               d d d        y # 1 sw Y   y xY w)Nr   )
rC  r  r  
PATCHPOINTZeroDivisionErrorr   r   r>  r   r  r2  s    r%   test_unhandled_exceptionz*_ZeroCopyFileTest.test_unhandled_exception
  sY    ]]  -> ! @ 	@/$oovw@	@ 	@ 	@s   /A((A1c                 |   t         j                  j                  | j                  t	        t
        j                  d            5  | j                         5 \  }}| j                  t              5  | j                  ||       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY wNyor   )rC  r  r  rm  r    r"   EINVALr=  r   r   r[  r=  s      r%   test_exception_on_first_callz._ZeroCopyFileTest.test_exception_on_first_call   s     ]]  -4U\\4-H ! J 	0! 0Zc3&&'89 0%%c3/00	0 	00 00 0	0 	0s<   B2B&.BB&	B2B#B&&B/	+B22B;c                 H   t         j                  j                  | j                  t	        t
        j                  d            5  | j                         5 \  }}| j                  t        | j                  ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wrq  )
rC  r  r  rm  r    r"   ENOSPCr=  r   r[  r=  s      r%   test_filesystem_fullz&_ZeroCopyFileTest.test_filesystem_full
  s     ]]  -4U\\4-H ! J 	H! HZc3!!'4+<+<c3GH	H 	HH H	H 	Hs$   B&B;BB	BB!N)r   r   r   r0  rV  rm  rP  r3  r5  r8  rQ  rR  r=  r[  r]  r`  rb  re  rk  ro  rt  rw  rF   r'   r%   rT  rT  
  s    - HHJ5 5 ! !" ! !
E H6?@0Hr'   rT  zos.sendfile() not supportedc                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestZeroCopySendfileos.sendfilec                 .    t        j                  ||      S r*   )r   _fastcopy_sendfile)r   rA  rB  s      r%   r[  z!TestZeroCopySendfile.zerocopy_fun  s    ((t44r'   c                    t        j                  | j                        5 }t        t        d      5 }| j                  t              5  | j                  ||       d d d        t        j                  ||       d d d        d d d        | j                  t        t        d      | j                         y # 1 sw Y   [xY w# 1 sw Y   IxY w# 1 sw Y   MxY w)Nr4   Tr_  )ioBytesIOrV  r=   r  r   r   r[  r   rE  r   r\   r=  s      r%   test_non_regular_file_srcz.TestZeroCopySendfile.test_non_regular_file_src  s    ZZ& 	-#gt$ -&&'89 0%%c3/0""3,-	- 	748$--H	0 0- -	- 	-s:   CC B4C 8C4B=9C  C		CCc                    t        t        d      5 }t        j                         5 }| j	                  t
              5  | j                  ||       d d d        t        j                  ||       |j                  d       | j                  |j                         | j                         d d d        d d d        y # 1 sw Y   kxY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrY   r   )r=   r   r~  r  r   r   r[  r   rE  seekr   r[   rV  r=  s      r%   test_non_regular_file_dstz.TestZeroCopySendfile.test_non_regular_file_dst#  s    &$ 	<3 <&&'89 0%%c3/0""3,  T]];<	< 	<0 0< <	< 	<s:   CCB9AC(C9C>CC	
CCc                    fd}g t         j                  t        j                  j	                  dd|      5  | j                         5 \  }}| j                  t              5 }t        j                  ||       d d d        d d d        d d d        | j                  j                  j                  t        j                         y # 1 sw Y   NxY w# 1 sw Y   RxY w# 1 sw Y   VxY w)Nc                  n    sj                  d         | i |S t        t        j                  d      )Nrr  )rc   r    r"   EBADF)r#   r$   r  orig_sendfiles     r%   rj   zDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfile-  s3    D!$d5f55ekk400r'   rz  T)r}  r   )r+   rj   rC  r  r  r=  r   r    r   r|  r   r   r"   r  )r   rj   rw   rx   r   r  r  s        @@r%   test_exception_on_second_callz2TestZeroCopySendfile.test_exception_on_second_call,  s    	1 ]]  t-5 ! 7 	8! 8Zc3&&w/ 82--c3788	8 	++U[[98 88 8	8 	8s;   C#C'C>CC#CCC 	C##C,c                 J   t         j                  j                  dt              5 }| j	                         5 \  }}t        j                  ||       d d d        d d d        | j                  t        t        d      | j                         y # 1 sw Y   =xY w# 1 sw Y   AxY w)Nos.fstatr   Tr_  )rC  r  r  r    r=  r   r|  r   r\   r  rV  r   rN  rw   rx   s       r%   test_cant_get_sizez'TestZeroCopySendfile.test_cant_get_size>  s     ]]   A 	 Q!  Zc3))#s3 	  	748$--H   	  	 s"   BBBB	BB"c                    t         j                  j                         }d|_        t         j                  j	                  d|      5 }| j                         5 \  }}t        j                  ||       d d d        d d d        | j                  t        t        d      | j                         y # 1 sw Y   =xY w# 1 sw Y   AxY w)Ni  r  rX  Tr_  )rC  r  Mockst_sizer  r=  r   r|  r   r\   r  rV  r   r  rN  rw   rx   s        r%   test_small_chunksz&TestZeroCopySendfile.test_small_chunksH  s    
 }}!!# ]]  $ ? 	 1!  Zc3))#s3 	  	748$--H   	  	 s$   B:B.2B:.B7	3B::Cc                    t         j                  j                         }| j                  dz   |_        t         j                  j                  d|      5 }| j                         5 \  }}t        j                  ||       d d d        d d d        | j                  t        t        d      | j                         y # 1 sw Y   =xY w# 1 sw Y   AxY w)Ni  @r  rX  Tr_  )rC  r  r  r0  r  r  r=  r   r|  r   r\   r  rV  r  s        r%   test_big_chunkz#TestZeroCopySendfile.test_big_chunkU  s    
 }}!!#}}(9:]]  $ ? 	 1!  Zc3))#s3 	  	748$--H   	  	 s$   C%B;?C;C	 CCc                    t         j                  j                  dt              5 }| j	                  t        t
        j                  t        t               |j                  d   d   }| j                  |t        j                  j                  t                     t        j                  t               t!        t        dd       | j#                  t        j                  t        dz          | j	                  t        t
        j                  t        t        dz          |j                  d   d   }| j                  |d	       d d d        y # 1 sw Y   y xY w)
Nrz  r   r   r   s   helloTr_  3i   )rC  r  r  rn  r   r   r>  r   r  rM  r   r+   r;   getsizer   rt   rC   r   )r   rN  	blocksizes      r%   test_blocksize_argz'TestZeroCopySendfile.test_blocksize_argb  s    ]]  -> ! @ 	1CD/$oovw@Aq)I Y(?@W%w6OOI,,gm</$oow#GAq)IY0	1 	1 	1s   DE

Ec                 t   	 t         j                  j                  | j                  t	        t
        j                  d            5 }| j                         5 \  }}| j                  t              5  t        j                  ||       d d d        d d d        d d d        t         j                  j                  | j                        5 }t        j                  t        t               d d d        dt        _        y # 1 sw Y   uxY w# 1 sw Y   yxY w# 1 sw Y   }xY w# 1 sw Y   9xY w# dt        _        w xY w)Nrr  r   T)rC  r  r  rm  r    r"   ENOTSOCKr=  r   r   r   r|  r>  r   r  _USE_CP_SENDFILEr  s       r%   test_file2file_not_supportedz1TestZeroCopySendfile.test_file2file_not_supportedt  s    
	+$$OO ' = % ?  BC^^% <#s**+<= <11#s;<<  $$T__5 $0$ '+F#< << <   $ $ '+F#sl   AD* DD/C:DD1D* D&D* :D?DD	DDD* D'#D* *D7N)r   r   r   rm  r[  r  r  r  r  r  r  r  r  rF   r'   r%   ry  ry    s8    J5I<:$III1$+r'   ry  z
macOS onlyc                       e Zd ZdZd Zy)TestZeroCopyMACOSzposix._fcopyfilec                 L    t        j                  ||t        j                        S r*   )r   _fastcopy_fcopyfileposix_COPYFILE_DATAr=  s      r%   r[  zTestZeroCopyMACOS.zerocopy_fun  s    ))#sE4H4HIIr'   N)r   r   r   rm  r[  rF   r'   r%   r  r    s    #JJr'   r  c                       e Zd Zd Zd Zd Z ej                   ej                  e
j                  j                               d       ej                   eed      d      d               Z ej                  ej"                  d      d	        Zy
)TestGetTerminalSizec                     	 t        j                         }| j                  |j                  d       | j                  |j                  d       y )Nr   )r   get_terminal_sizer)  columnslines)r   rQ   s     r%   test_does_not_crashz'TestGetTerminalSize.test_does_not_crash  s?    	
 '')a0

A.r'   c                    	 t        j                         5 }d|d<   |d= t        j                         }d d d        | j	                  j
                  d       t        j                         5 }|d= d|d<   t        j                         }d d d        | j	                  |j                  d       y # 1 sw Y   {xY w# 1 sw Y   2xY w)N777COLUMNSLINESi	  888ix  )r   rv  r   r  r   r  r  r   rx  rQ   s      r%   test_os_environ_firstz)TestGetTerminalSize.test_os_environ_first  s    8**, 	."C	NG++-D	. 	s+**, 	.I CL++-D	. 	S)	. 	.	. 	.s   B-+B9-B69Cc                    t        j                         5 }d|d<   d|d<   t        j                         }d d d        | j	                  j
                  d       | j	                  |j                  d       y # 1 sw Y   BxY w)Nr  r  yyyr  r   )r   rv  r   r  r)  r  r  r  s      r%   test_bad_environz$TestGetTerminalSize.test_bad_environ  so    **, 	."C	N CL++-D	. 	a0

A.	. 	.s   A55A>z
not on ttyr  zneed os.get_terminal_size()c                    	 	 t        j                  ddg      j                         j                         }t        d         t        |d         f}t        j                         5 }|d= |d= t        j                         }d d d        | j                  |       y # t        t
        t         j                  f$ r | j                  d       Y w xY w# 1 sw Y   QxY w)NsttyrQ   zstty invocation failedr   r   r  r  )r   r  r  r   r   r  r  r  r   r   rv  r   r  r   )r   rQ   r  rx  rW  s        r%   test_stty_matchz#TestGetTerminalSize.test_stty_match  s    		4**FF+;<CCEKKMD QL#d1g,/**, 	0GI--/F	0
 	6* "?--/ 	4MM23	4
	0 	0s   3B &C/CCCzWASI has no /dev/nullc                    t        j                         5 }|d= |d= t        j                  t        dd       5  t        j                  d      }d d d        | j                  j                  d       | j                  |j                  d       t        t        j                  dd	
      5 }t        j                  t        d|      5  t        j                  d      }d d d        d d d        | j                  |j                  d       | j                  |j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   bxY w# 1 sw Y   y xY w)Nr  r  
__stdout__)
      )fallbackr  r  r5   r6   r7   )   (   r  r  )r   rv  r   r  r   r   r  r   r  r  r=   r+   devnull)r   rx  rQ   rU   s       r%   test_fallbackz!TestGetTerminalSize.test_fallback  s/   **, 	-GI ""3d; C//BCT\\2.TZZ, bjj#8 CA""3a8C//BC C T\\2.TZZ,!	- 	-
C CC C C C	- 	-sT   "ED.AE*ED:E%A E.D7	3E:E?EE	EEN)r   r   r   r  r  r  rC  rD  r+   isattyr   r  rs   ro   r  rE  r   is_wasir  rF   r'   r%   r  r    s    /*/ X3>>#8#8#:;\JX%8968+8 K+* X__W__&=>- ?-r'   r  c                       e Zd Z	 d Zy)PublicAPITestsc                    | j                  t        t        d             g d}t        t        d      st        j                  dk(  r|j                  d       | j                  t        t        j                        t        |             y )N__all__)rE  r>  r  r  r!  r&  rR  r  r   r   rF  	ExecErrorr   r   r   r   r   r	   r   r   r{  r,  r  r  r   statvfsre  r$  )	r   ro   r   r+   rf   rc   r   r  r  )r   
target_apis     r%   test_module_all_attributez(PublicAPITests.test_module_all_attribute  s]    	23<
 2y!RWW_l+V^^,c*o>r'   N)r   r   r   r  rF   r'   r%   r  r    s
    H?r'   r  __main__)F)WrC  unittest.mockr   rp   r   r   r+   os.pathr"   r0   r  r   rL   rN   rQ  r~  r   r   r   r   r   r   r	   r
   r   r   r   r   rd  warningsr  r  ImportErrorr  r   test.supportr   test.support.os_helperr   r   r   r  r  r  rF  rj  rT  rU  r   r  r  r  r   r  r  AssertionErrorrb  r&   r2   rC   rW   r\   rd   r{   SUPPORTS_SENDFILEr   r   TestCaser   rJ  r  rW  r#  r;  r  r  r  r.  r,  rT  rE  ry  r  r  r  r   mainrF   r'   r%   <module>r     s       
  	         	6 6 6 6     " 3 (
3,f_
f_
)
,,
!
!'
*	ll2A%O ==z"#>?  AL	)$
&: 01 	 	D68,, D6N`28X.. `2D@?x** @?FL88X.. L8^M+x** M+`CA(++ CAL)Y )o-x** o-dY)8$$ Y)xG-h'' G-TaH aHH &&(EFs+,h.?.? s+ Gs+l UL)J)8+<+< J *JL-(++ L-^?X&& ?$ zHMMO k^  E$  O
  Gs6   *J3  
K +K 3J>=J>KKKK