
    0hh0                       S SK r S SKr S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKJrJrJrJrJrJrJrJrJrJrJrJr  S SKrS SKr S SKrS SK J!r!  S SK"J#r#  S SK$J%r%J&r&  S SK"J'r'  \%S-   r(\%S-   r)\%S	-   r*\RV                  RY                  S
5      r-\RV                  RY                  S5      r.\RV                  SS S:H  r/ S SK0r0S SK1r1Sr2 S SK3r3\ Rh                  Rk                  S\6" S5      S9r7S r8S r9S>S jr:S r;S?S jr<S r=S r>\>" 5       r?S r@ " S S5      rA " S S\A\ R                  5      rC " S S \A\ R                  5      rD " S! S"\A\ R                  5      rE " S# S$\A\ R                  5      rF " S% S&\A\ R                  5      rG\!R                  " 5        " S' S(\A\ R                  5      5       rI " S) S*\I5      rJ " S+ S,\A\ R                  5      rK " S- S.\ R                  5      rL " S/ S0\ R                  5      rM " S1 S2\N5      rO\ R                  " \?(       + S35       " S4 S5\O\ R                  5      5       rQ\ R                  " \-(       + S65       " S7 S8\O\ R                  5      5       rR " S9 S:\ R                  5      rS " S; S<\ R                  5      rT\US=:X  a  \ R                  " 5         gg! \ a    Sr GNlf = f! \ a    Sr2 GNf = f! \ a    Sr3 GN	f = f)@    N)make_archiveregister_archive_formatunregister_archive_formatget_archive_formatsErrorunpack_archiveregister_unpack_formatRegistryErrorunregister_unpack_formatget_unpack_formatsSameFileError_GiveupOnFastCopy)support)	os_helper)TESTFNFakePath)warnings_helper2_SRC_DSTdarwinsunos   aixTFzos.chdirzshouldn't call os.chdir()side_effectc                  8    [        [        [        SS5      S5      e)NEXDEV   zInvalid cross-device link)OSErrorgetattrerrno)argskwargss     9/opt/python-3.13.8/usr/lib/python3.13/test/test_shutil.py_fake_renamer&   :   s    
'%"-/J
KK    c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                     >  [         R                  n[        [         l        T" U 0 UD6U[         l        $ ! W[         l        f = fN)osrenamer&   )r#   r$   builtin_renamefuncs      r%   wrapmock_rename.<locals>.wrap?   s4    	'YYN$BI((&BIBIs	   &5 A)	functoolswraps)r.   r/   s   ` r%   mock_renamer3   >   s%    __T' ' Kr'   c                     [        U [        5      (       a  [        R                  R                  " U 6 n [        U[
        5      (       a  UR                  5       n[        U S5       nUR                  U5        SSS5        g! , (       d  f       g= f)zWrite *content* to a file located at *path*.

If *path* is a tuple instead of a string, os.path.join will be used to
make a path.
xbN)	
isinstancetupler+   pathjoinstrencodeopenwrite)r8   contentfps      r%   create_filer@   I   s`     $ww||T"'3.."	dD	R
 
		s   $A??
Bc                    S n[        US5      nSR                  [        U5       Vs/ s H5  n[        R                  " [
        R                  5      R                  5       PM7     sn5      n[        U S5       nU" X5       H  nUR                  U5        M     SSS5        [        R                  R                  U 5      U:X  d   egs  snf ! , (       d  f       N9= f)zBCreate a test file with an arbitrary size and random text content.c              3   Z   #    X:  d   eX:  a  Uv   X-  n X:  a  M  U (       a  U v   g g 7fr*    )totalsteps     r%   chunkswrite_test_file.<locals>.chunksX   s6     }}lJME l K s   ++i    r'   wbN)minr9   rangerandomchoicestringascii_lettersr;   r<   r=   r+   r8   getsize)r8   sizerF   bufsizeichunkfcsizes           r%   write_test_filerV   V   s     $oGHH$W~/-! mmF$8$89@@B-/ 0E	dD	QD*EGGEN + 
 77??4 D(((/		s   <C7!C
Cc                     [        U [        5      (       a  [        R                  R                  " U 6 n U(       a  SOSnU(       a  SOSn[        XUS9 nUR                  5       sSSS5        $ ! , (       d  f       g= f)zReturn contents from a file located at *path*.

If *path* is a tuple instead of a string, os.path.join will be used to
make a path.  If *binary* is true, the file will be opened in binary
mode.
rbrNutf-8encoding)r6   r7   r+   r8   r9   r<   read)r8   binarymoder\   r?   s        r%   	read_filer`   h   sV     $ww||T"4sDt7H	d8	,wwy 
-	,	,s   A--
A;c                    / n[        [        R                  " U 5      5       H  n[        R                  R	                  X5      n[        R                  R                  U5      (       ac  [        R                  R                  U5      (       d?  UR                  US-   5        [        U5       H  nUR                  US-   U-   5        M     M  UR                  U5        M     U$ )N/)	sortedr+   listdirr8   r9   isdirislinkappendrlistdir)r8   resnamepns        r%   rh   rh   v   s    
Crzz$'(GGLL$77==BGGNN1$5$5JJtcz"a[

4#:>* ! JJt ) Jr'   c                  P   [        [        S5      (       d  gS n S n [        R                  " S[        R                  " 5       SS9 nUR
                  n UR                  S5        S S S 5        [        U S5       n[        R                  " S[        R                  " 5       SS9 nUR
                  nUR                  5       nUR                  5       n [        R                  " XeSS5         S S S 5        S S S 5        U b  [        R                  " U 5        Ub  [        R                  " U5        g	g	! , (       d  f       N= f! [         aF     S S S 5        S S S 5        U b  [        R                  " U 5        Ub  [        R                  " U5        ggf = f! , (       d  f       O= f S S S 5        O! , (       d  f       O= fU b  [        R                  " U 5        Ub  [        R                  " U5        g g ! U b  [        R                  " U 5        Ub  [        R                  " U5        f f = f)
NsendfileFrH   dirdeletes
   0123456789rX   r      T)hasattrr+   tempfileNamedTemporaryFilegetcwdrj   r=   r<   filenorn   r   unlinkr    )srcnamedstnamerT   srcdstinfdoutfds          r%   supports_file2file_sendfiler      s   2z""GG&((299;uMQRffGGGM" N '4 C,,Tryy{5QUX((zz|

 KKQ2   R ! W%W% % NM  !  R ! W%W% ! RQQ !   W%W%  W%W% s   )G0 D,#G0 7*F+!-FD='F(F+0G0 ,
D:6G0 =
FFF+G0 FF
F	F+"	G0 +
F95G0 05H%c                      [         (       ao  [        R                  S:X  a[  [        R                  " S[        R
                  -  5      n U R                  S5      S   R                  5       S   n[        US5      S:  $ g)	Niz/usr/bin/dump -o %s
      i    T)AIXsysmaxsize
subprocess	getoutput
executablesplitint)hdrsmaxdatas     r%   
_maxdataOKr      sa    
ss{{j(!!"7#.."HI

4 $**,Q/72*,,r'   c                       \ rS rSrSS jrSrg)BaseTest   Nc                     [         R                  " U[        R                  " 5       S9nU R	                  [
        R                  U5        U$ )zZCreate a temporary directory that will be cleaned up.

Returns the path of the directory.
)prefixrp   )rt   mkdtempr+   rv   
addCleanupr   rmtree)selfr   ds      r%   r   BaseTest.mkdtemp   s5    
 F		<	((!,r'   rC   r*   )__name__
__module____qualname____firstlineno__r   __static_attributes__rC   r'   r%   r   r      s    r'   r   c                   8   \ rS rSrS r\R                  S 5       r\R                  S 5       r\R                  S 5       r	\
R                  " \S5      S 5       r\
R                  " \S5      S 5       r\
R                  " \S5      S	 5       rS
 rS rS r\
R&                  " \R*                  SS S:H  S5      \R,                  \R.                  S 5       5       5       rS r\
R&                  " \R*                  SS S:H  S5      \R,                  \R.                  S 5       5       5       rS r\
R&                  " \R*                  SS S:H  S5      \R,                  \R.                  S 5       5       5       rS rS r\
R                  " \R@                  S5      S 5       r!\
R                  " \R@                  S5      S 5       r"\
R&                  " \R@                  S5      S 5       r#S r$\R                  S 5       r%\
R                  " \S5      S  5       r&\
R                  " \'" \(S!5      S"5      \
R&                  " \R*                  S#:H  S$5      S% 5       5       r)\
R&                  " \R*                  SS S:H  S5      \R,                  \R.                  S& 5       5       5       r*S' r+S(r,g))
TestRmTree   c                 h   U R                  5       n[        R                  R                  US5      n[        R                  " U5        [        [        R                  R                  US5      S5        [        R                  " U5      nU R                  U[        5        [        R                  " U5        g )Nkillmesomefilefoo)r   r+   r8   r9   mkdirr@   fsencodeassertIsInstancebytesshutilr   )r   tmpvictims      r%   test_rmtree_works_on_bytes%TestRmTree.test_rmtree_works_on_bytes   sp    llnc8,
BGGLL4e<V$fe,fr'   c                 <  ^ U R                  5       n[        R                  R                  US5      n[        R                  " U5        [        R                  R                  US5      n[        R
                  " X#5        U R                  [        [        R                  U5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  U5      5        / mU4S jn[        R                  " X4S9  U R                  [        T5      S5        U R                  TS   S   [        R                  R                   5        U R                  TS   S   U5        U R#                  TS   S   S   [        5        g )Nrp   linkc                  (   > TR                  U 5        g r*   rg   r#   errorss    r%   onerror@TestRmTree.test_rmtree_fails_on_symlink_onerror.<locals>.onerror       MM$r'   r   r   r   rr   r   r+   r8   r9   r   symlinkassertRaisesr    r   r   
assertTrueexistslexistsassertEquallenassertIsrf   r   r   r   dir_r   r   r   s        @r%   $test_rmtree_fails_on_symlink_onerror/TestRmTree.test_rmtree_fails_on_symlink_onerror   s   llnww||C'
ww||C(


4'6==$7t,--.	 d,Va(fQilBGGNN31t,fQil1ow7r'   c                 6  ^ U R                  5       n[        R                  R                  US5      n[        R                  " U5        [        R                  R                  US5      n[        R
                  " X#5        U R                  [        [        R                  U5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  U5      5        / mU4S jn[        R                  " X4S9  U R                  [        T5      S5        U R                  TS   S   [        R                  R                   5        U R                  TS   S   U5        U R#                  TS   S   [        5        g )Nrp   r   c                  (   > TR                  U 5        g r*   r   r   s    r%   onexc<TestRmTree.test_rmtree_fails_on_symlink_onexc.<locals>.onexc   r   r'   r   r   r   rr   r   r   r   r   r   r   r   s        @r%   "test_rmtree_fails_on_symlink_onexc-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                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      nX#U4 H  n[        R                  " U5        M     [        R                  R                  US5      n[        US5        [        R                  R                  US5      n[        R                  " X75        [        R                  R                  US5      n[        R                  " XH5        [        R                  R                  US5      n	[        R                  " Xi5        [        R                  " U5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  U5      5        g 	Ndir1dir2dir3file1r   link1link2link3)r   r+   r8   r9   r   r@   r   r   r   assertFalser   r   
r   r   r   r   r   r   r   r   r   r   s
             r%   test_rmtree_works_on_symlinks(TestRmTree.test_rmtree_works_on_symlinks   s:   llnww||C(ww||D&)ww||C(T!AHHQK "S'*E5!T7+


4T7+


4T7+


5 d-.t,-u-.r'   zonly relevant on Windowsc                 |  ^ U R                  5       n[        R                  R                  US5      n[        R                  " U5        [        R                  R                  US5      n[
        R                  " X#5        U R                  [        R                  U5        U R                  [        [        R                  U5        U R                  [        R                  R                  U5      5        U R                  [        R                  R!                  U5      5        / mU4S jn[        R                  " X4S9  U R#                  [%        T5      S5        U R'                  TS   S   [        R                  R(                  5        U R#                  TS   S   U5        U R+                  TS   S   S   [        5        g )Nrp   r   c                  (   > TR                  U 5        g r*   r   r   s    r%   r   BTestRmTree.test_rmtree_fails_on_junctions_onerror.<locals>.onerror  r   r'   r   r   r   rr   r   r+   r8   r9   r   _winapiCreateJunctionr   r   rx   r   r    r   r   r   r   r   r   r   r   rf   r   r   s        @r%   &test_rmtree_fails_on_junctions_onerror1TestRmTree.test_rmtree_fails_on_junctions_onerror  s'   llnww||C'
ww||C(t*	(($/'6==$7t,--.	 d,Va(fQilBGGNN31t,fQil1ow7r'   c                 v  ^ U R                  5       n[        R                  R                  US5      n[        R                  " U5        [        R                  R                  US5      n[
        R                  " X#5        U R                  [        R                  U5        U R                  [        [        R                  U5        U R                  [        R                  R                  U5      5        U R                  [        R                  R!                  U5      5        / mU4S jn[        R                  " X4S9  U R#                  [%        T5      S5        U R'                  TS   S   [        R                  R(                  5        U R#                  TS   S   U5        U R+                  TS   S   [        5        g )Nrp   r   c                  (   > TR                  U 5        g r*   r   r   s    r%   r   >TestRmTree.test_rmtree_fails_on_junctions_onexc.<locals>.onexc!  r   r'   r   r   r   rr   r   r   s        @r%   $test_rmtree_fails_on_junctions_onexc/TestRmTree.test_rmtree_fails_on_junctions_onexc  s#   llnww||C'
ww||C(t*	(($/'6==$7t,--.	 d(Va(fQilBGGNN31t,fQilG4r'   c                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      nX#U4 H  n[        R                  " U5        M     [        R                  R                  US5      n[        US5        [        R                  R                  US5      n[        R                  " X75        [        R                  R                  US5      n[        R                  " XH5        [        R                  R                  US5      n	[        R                  " Xi5        [        R                  " U5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  U5      5        U R                  [        R                  R                  U5      5        g r   )r   r+   r8   r9   r   r@   r   r   r   r   r   r   r   r   s
             r%   test_rmtree_works_on_junctions)TestRmTree.test_rmtree_works_on_junctions)  s@   llnww||C(ww||D&)ww||C(T!AHHQK "S'*E5!T7+t+T7+t+T7+u,d-.t,-u-.r'   c                    [         R                  " U R                  5       S9nU R                  [        [
        R                  U5        [
        R                  " USS9  U R                  5       n[        R                  R                  US5      n[        U5        U R                  [        5       n[
        R                  " U5        S S S 5        U R                  WR                  R                  U5        U R                  [        R                  R!                  U5      5        [
        R                  " USS9  U R                  [        R                  R!                  U5      5        U R                  ["        [
        R                  S 5        U R                  ["        [
        R                  S SS9  [
        R                  R$                  (       a  ["        O[&        nU R                  U5         [
        R                  " USS9  S S S 5        U R                  U5         [
        R                  " USSS9  S S S 5        g ! , (       d  f       GNz= f! , (       d  f       NQ= f! , (       d  f       g = f)Nrp   Tignore_errorststfileinvaliddir_fd)r   r   )rt   mktempr   r   FileNotFoundErrorr   r   r+   r8   r9   r@   NotADirectoryErrorr   	exceptionfilenamer   r   	TypeErroravoids_symlink_attacksNotImplementedError)r   r   tmpdircmexcs        r%   test_rmtree_errorsTestRmTree.test_rmtree_errors?  s   ??t||~6+V]]HEhd3 77<<	2H12bMM(# 3..9x01hd3x01)V]]D9)V]]DM!==??iEXs#MM(95 $s#MM(9DI $# 32 $###s$   -H7(I	I7
I	
I
I(c                   ^ U R                  5       n[        R                  R                  US5      n[	        U5        / mU4S jn[
        R                  " X#S9  U R                  [        T5      S5        U R                  TS   S   [        R                  5        U R                  TS   S   U5        U R                  TS   S   S   [        5        U R                  TS   S   S   R                  U5        U R                  TS   S   [        R                  5        U R                  TS   S   U5        U R                  TS   S   S   [        5        U R                  TS   S   S   R                  U5        g )Nr   c                  (   > TR                  U 5        g r*   r   r   s    r%   r   6TestRmTree.test_rmtree_errors_onerror.<locals>.onerror_  r   r'   r   rr   r   r   r   r+   r8   r9   r@   r   r   r   r   r   scandirr   r   r   rmdir)r   r   r   r   r   s       @r%   test_rmtree_errors_onerror%TestRmTree.test_rmtree_errors_onerrorZ  s6   77<<	2H	 h0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<r'   c                   ^ U R                  5       n[        R                  R                  US5      n[	        U5        / mU4S jn[
        R                  " X#S9  U R                  [        T5      S5        U R                  TS   S   [        R                  5        U R                  TS   S   U5        U R                  TS   S   [        5        U R                  TS   S   R                  U5        U R                  TS   S   [        R                  5        U R                  TS   S   U5        U R                  TS   S   [        5        U R                  TS   S   R                  U5        g )Nr   c                  (   > TR                  U 5        g r*   r   r   s    r%   r   2TestRmTree.test_rmtree_errors_onexc.<locals>.onexcq  r   r'   r   rr   r   r   r  )r   r   r   r   r   s       @r%   test_rmtree_errors_onexc#TestRmTree.test_rmtree_errors_onexcl  s&   77<<	2H	 h,Va(fQilBJJ/1x0fQil,>?1..9fQilBHH-1x0fQil,>?1..9r'   N   cygwinz2This test can't be run on Cygwin (issue #1071513).c                    SU l         [        R                  " [        5        U R	                  [
        R                  [        5        [        R                  R                  [        S5      U l	        [        R                  R                  [        S5      U l
        [        R                  " U R                  5        [        R                  " U R                  5        [        R                  " [        5      R                  n[        R                  " U R                  5      R                  n[        R                  " U R                  5      R                  n[        R                  [        R                   -  n[        R"                  " U R                  U5        [        R"                  " U R                  U5        [        R"                  " [        U5        U R	                  [        R"                  [        U5        U R	                  [        R"                  U R                  U5        U R	                  [        R"                  U R                  U5        [
        R                  " [        U R$                  S9  U R'                  U R                   SS5        g )Nr   abr   r   z1Expected call to onerror function did not happen.)
errorStater+   r   r   r   r   r   r8   r9   child_file_pathchild_dir_pathr   create_empty_filestatst_modeS_IREADS_IEXECchmodcheck_args_to_onerrorr   r   old_dir_modeold_child_file_modeold_child_dir_modenew_modes        r%   test_on_errorTestRmTree.test_on_error~  s   
 
v.!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&@&@A!L	Nr'   c                    U R                   S:  a  U[        R                  L a  U R                  X R                  5        OqU[        R
                  L a  U R                  X R                  5        OBU R                  U[        R                  5        U R                  U[        U R                  /5        U R                  [        US   [        5      5        U =R                   S-  sl         g U R                  U[        R
                  5        U R                  U[        5        U R                  [        US   [        5      5        SU l         g )Nrr   r   r   r   )r  r+   rx   r   r  r  r  r   rd   assertInr   r   
issubclassr    r   r.   argr   s       r%   r   TestRmTree.check_args_to_onerror  s     ??Qryy   &:&:;!  &9&9:dBJJ/cFD,?,?#@AOOJs1vw78OOq OT288,S&)OOJs1vw78DOr'   c                    SU l         [        R                  " [        5        U R	                  [
        R                  [        5        [        R                  R                  [        S5      U l	        [        R                  R                  [        S5      U l
        [        R                  " U R                  5        [        R                  " U R                  5        [        R                  " [        5      R                  n[        R                  " U R                  5      R                  n[        R                  " U R                  5      R                  n[        R                  [        R                   -  n[        R"                  " U R                  U5        [        R"                  " U R                  U5        [        R"                  " [        U5        U R	                  [        R"                  [        U5        U R	                  [        R"                  U R                  U5        U R	                  [        R"                  U R                  U5        [
        R                  " [        U R$                  S9  U R'                  U R                   SS5        g )Nr   r  r  r   r   z/Expected call to onexc function did not happen.)r  r+   r   r   r   r   r   r8   r9   r  r  r   r  r  r  r  r  r  check_args_to_onexcr   r  s        r%   test_on_exc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                    U R                   S:  a  U[        R                  L a  U R                  X R                  5        OqU[        R
                  L a  U R                  X R                  5        OBU R                  U[        R                  5        U R                  U[        U R                  /5        U R                  [        U[        5      5        U =R                   S-  sl         g U R                  U[        R
                  5        U R                  U[        5        U R                  [        U[        5      5        SU l         g )Nrr   r   r   )r  r+   rx   r   r  r  r  r   rd   r%  r   r   r6   r    r'  s       r%   r+  TestRmTree.check_args_to_onexc  s     ??Qryy   &:&:;!  &9&9:dBJJ/cFD,?,?#@AOOJsG45OOq OT288,S&)OOJsG45DOr'   c                    ^^ SmSmU4S jnU4S jn[         R                  " [        5        U R                  [        R
                  [        5        [         R                  R                  [        S5      U l        [         R                  R                  [        S5      U l	        [        R                  " U R                  5        [         R                  " U R                  5        [         R                  " [        5      R                  n[         R                  " U R                  5      R                  n[         R                  " U R                  5      R                  n[        R                  [        R                  -  n[         R                   " U R                  U5        [         R                   " U R                  U5        [         R                   " [        U5        U R                  [         R                   [        U5        U R                  [         R                   U R                  U5        U R                  [         R                   U R                  U5        [        R
                  " [        XS9  U R#                  T5        U R%                  T5        g )NFc                  
   > Smg NTrC   )r#   onerror_calleds    r%   r   7TestRmTree.test_both_onerror_and_onexc.<locals>.onerror  s    !Nr'   c                  
   > Smg r2  rC   )r#   onexc_calleds    r%   r   5TestRmTree.test_both_onerror_and_onexc.<locals>.onexc  s    Lr'   r  r  )r   r   )r+   r   r   r   r   r   r8   r9   r  r  r   r  r  r  r  r  r  r   r   )	r   r   r   r  r  r   r!  r3  r6  s	          @@r%   test_both_onerror_and_onexc&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fg;%(r'   c                   ^  [         R                  mU4S jnU[         l        [         R                  " [        5        [	        [        S4S5        [
        R                  " [        5        T[         l        g ! T[         l        f = f)Nc                 <   > U [         :w  a
  [        5       eT" U 5      $ r*   )r   r    )fnr#   r$   
orig_lstats      r%   raiserFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiser  s    <!)O%b>)r'   r   )r+   lstatr   r   r@   r   r   )r   r>  r=  s     @r%   +test_rmtree_does_not_choke_on_failing_lstat6TestRmTree.test_rmtree_does_not_choke_on_failing_lstat  sT    	"J*
 BHHHV/MM&!!BHzBHs   A'A6 6Bc                   ^ [         R                  [         R                  [         R                  [         R                  1[         R
                  :*  =(       aI    [         R                  [         R                  ;   =(       a!    [         R                  [         R                  ;   nU(       a  U R                  [        R                  5        U R                  [        R                  R                  5        U R                  5       n[         R                  R!                  US5      n[         R"                  " U5         [        R$                  n " S S[&        5      mU4S jnU[        l        U R)                  T[        R                  U5        U[        l        g U R+                  [        R                  5        U R+                  [        R                  R                  5        g ! W[        l        f = f)Nr  c                       \ rS rSrSrg)HTestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>.Calledi7  rC   N)r   r   r   r   r   rC   r'   r%   CalledrE  7  s    r'   rF  c                     > Ter*   rC   )r#   r$   rF  s     r%   _raiserITestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser8  s     Lr'   )r+   r<   r  rx   r  supports_dir_fdrd   supports_fdsupports_follow_symlinksr   r   _use_fd_functionsr   r   r   r8   r9   r   _rmtree_safe_fd	Exceptionr   r   )r   rM  tmp_dirr   real_rmtreerH  rF  s         @r%   -test_rmtree_uses_safe_fd_version_if_available8TestRmTree.test_rmtree_uses_safe_fd_version_if_available*  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   7AG G*zrequires safe rmtreec                 P  ^^^ U R                  5       n[        R                  R                  US5      n[        R                  " U5        [        R                  R                  US5      n[        R                  " U5        UU4S jnSm[
        R                  " [        SU5       mU R                  [        5         [        R                  " U5        S S S 5        S S S 5        U R                  [        R                  R                  U5      5        U R                  TS5        Sm/ mU4S jn[
        R                  " [        SU5       m[        R                  " X%S9  S S S 5        U R                  [        T5      S5        U R                  TS   S   U5        U R                  TS   S	   U5        U R                  TS	   S   U5        U R                  TS	   S	   U5        U R                  TS5        g ! , (       d  f       GN(= f! , (       d  f       GN2= f! , (       d  f       N= f)
Nr   r   c                 *   > T" U 5        TS-  m[         e)Nr   r    )fdclose_count
orig_closes    r%   close4TestRmTree.test_rmtree_fails_on_close.<locals>.closeK  s    rN1KMr'   r   rZ  rr   c                  (   > TR                  U 5        g r*   r   r   s    r%   r   4TestRmTree.test_rmtree_fails_on_close.<locals>.onexcZ  r   r'   r   r   )r   r+   r8   r9   r   r   	swap_attrr   r    r   r   r   re   r   r   r   )	r   r   r   r   rZ  r   rX  r   rY  s	         @@@r%   test_rmtree_fails_on_close%TestRmTree.test_rmtree_fails_on_closeB  s    llnww||C(
ww||D&)
	 r7E2j""7+d# , 3 	d+,a(	 r7E2jMM$, 3Va(fQilE*1t,fQilE*1t,a(! ,+ 32 32s0   %H;G3HH3
H	=H
H
H%zdir_fd is not supportedc                    U R                  5       nSn[        R                  R                  X5      n[        R                  " U[        R
                  5      nU R                  [        R                  U5        [        R                  " U5        [        R                  " [        R                  R                  US5      5        [        [        R                  R                  USS5      S5        U R                  [        R                  R                  U5      5        [        R                  " X$S9  U R                  [        R                  R                  U5      5        g )Nr   subdirr   r   r   )r   r+   r8   r9   r<   O_RDONLYr   rZ  r   r@   r   r   r   r   r   )r   rP  r   fullnamer   s        r%   test_rmtree_with_dir_fd"TestRmTree.test_rmtree_with_dir_fde  s    ,,.77<<0"++.&)

h12BGGLL8Z@%Hx01f,12r'   zdir_fd is supportedc                    U R                  5       nU R                  [        5         [        R                  " USS9  S S S 5        U R                  [        R                  R                  U5      5        g ! , (       d  f       N== f)Nr   r   )	r   r   r   r   r   r   r+   r8   r   )r   rP  s     r%   #test_rmtree_with_dir_fd_unsupported.TestRmTree.test_rmtree_with_dir_fd_unsupporteds  sQ    ,,.23MM'!, 4w/0 43s   A33
Bc                     [         R                  " U R                  5       S9u  p[        R                  " U5        U R                  [        [        R                  U5        [        R                  " U5        g Nr   )
rt   mkstempr   r+   rZ  r   r   r   r   remove)r   handler8   s      r%   test_rmtree_dont_delete_file'TestRmTree.test_rmtree_dont_delete_filez  sH    ''DLLN;
,fmmTB
		$r'   c                    [         R                  " [        5         [         R                  R	                  [        S5      n[         R                  R	                  [        S5      n[         R                  " U5        [         R
                  " X5        U R                  [        [        R                  U5        [        R                  " USS9  [        R                  " [        SS9  g ! [        R                  " [        SS9  f = f)NcheeseshopTr   )
r+   r   r   r8   r9   r   r   r    r   r   r   r{   r|   s      r%   test_rmtree_on_symlink!TestRmTree.test_rmtree_on_symlink  s     		6'',,vx0C'',,vv.CHHSMJJs gv}}c:MM#T2MM&5FMM&5s   B.C$ $C?c                 V   [         R                  " [        5         [         R                  R	                  [        S5      n[         R                  R	                  [        S5      n[         R                  " U5        [        [         R                  R	                  US5      5        [        R                  " X5        U R                  [        [        R                  U5        [        R                  " USS9  [        R                  " [        SS9  g ! [        R                  " [        SS9  f = f)Nrr  rs  spamTr   )r+   r   r   r8   r9   r@   r   r   r   r    r   r   rt  s      r%   test_rmtree_on_junction"TestRmTree.test_rmtree_on_junction  s    
		6'',,vx0C'',,vv.CHHSMS&12""3,gv}}c:MM#T2MM&5FMM&5s   CD D(mkfiforequires os.mkfifo()vxworks%fifo requires special path on VxWorksc                    [         R                  " [        5         U R                  [        5         [
        R                  " [        5        S S S 5        U R                  [         R                  R                  [        5      5        [         R                  " [        5        [         R                  " [        5        [         R                  " [         R                  R                  [        S5      5        [
        R                  " [        5        U R                  [         R                  R                  [        5      5        g ! , (       d  f       N= f! [         R                  " [        5        f = f)Nmypipe)r+   r{  r   r   r   r   r   r   r8   r   rx   r   r9   r   r   s    r%   test_rmtree_on_named_pipe$TestRmTree.test_rmtree_on_named_pipe  s     			&	""#56f% 7OOBGGNN623IIf

		"'',,vx01f/0 76 IIfs"   E D?:E ?
E	E E,c           	      `  ^^^^	 UUUU	4S jn[         R                  " [        5        [        /[        S5       Vs/ s H*  n[         R                  R                  [        SU 35      PM,     sn-   m	T	SS S2   mT	SS S2   mT H  n[         R                  " U5        M     T H  n[        U5        M     T	 Vs/ s H#  n[         R                  " U5      R                  PM%     snm[        R                  [        R                  -  n[        T	5       H  n[         R                  " X45        M      [        R                  " [        US9  g s  snf s  snf !   [        T	T5       H-  u  p5 [         R                  " X55        M  ! [          a     M+  f = f   [        R                  " [        5        e = f)Nc                   >^ U [         R                  [         R                  4;   d   e[        U[        5      (       d  e [        T	T5       H  u  p4[         R                  " X45        M     [        U4S jT 5       5      nT H   nX5:w  d  M
  [         R                  " U5        M"     [        U4S jT 5       5      nT H   nX5:w  d  M
  [         R                  " U5        M"     g )Nc              3   6   >#    U  H  oT:w  d  M
  Uv   M     g 7fr*   rC   .0rk   r8   s     r%   	<genexpr>PTestRmTree.test_rmtree_deleted_race_condition.<locals>._onexc.<locals>.<genexpr>  s     54a94   		c              3   6   >#    U  H  oT:w  d  M
  Uv   M     g 7fr*   rC   r  s     r%   r  r    s     65aI5r  )r+   r  rx   r6   PermissionErrorzipr  next)
r<  r8   r   rk   r_   keepdirsfiles	old_modespathss
    `    r%   _onexc=TestRmTree.test_rmtree_deleted_race_condition.<locals>._onexc  s    "((BII....c?33ui0! 1 5455D9HHQK  6566D9IIaL r'   r  childr   rr   r   )r+   r   r   rJ   r8   r9   r@   r  r  r  r  reversedr  r   r   r  r    )
r   r  rR   r8   r!  r_   r  r  r  r  s
         @@@@r%   "test_rmtree_deleted_race_condition-TestRmTree.test_rmtree_deleted_race_condition  s]   	! 	!$ 	%*1X/%- GGLL5=%-/ /QTT{addDHHTN D  8==utRWWT]**u=	 <<,UODHHT$ $
	MM&/#/ >	!%3
HHT(  4
 MM&!s;   1E	8*E/E F-'E?=F-?
F	F-F F-c                 $   SnUS-   n[         R                  R                  " [        /S/U-  Q76 n[         R                  " U5        [
        R                  " U5         [        R                  " [        5        S S S 5        g ! , (       d  f       g = f)N(   
   r   )	r+   r8   r9   r   makedirsr   infinite_recursionr   r   )r   recursion_limitdirectory_depthbases       r%   !test_rmtree_above_recursion_limit,TestRmTree.test_rmtree_above_recursion_limit  sa    )B.ww||F?seo&=?
D''8MM&! 988s   B
B)r  r  r  )-r   r   r   r   r   r   skip_unless_symlinkr   r   r   unittest
skipUnlessr   r   r   r   r   r  r  skipIfr   platformskip_if_dac_overrideskip_unless_working_chmodr"  r  r,  r+  r8  rA  rR  r   rM  r_  re  rh  ro  ru  ry  rs   r+   r  r  r  r   rC   r'   r%   r   r      s/    ""8 #8$ ""5 #5$ ""/ #/* "<=8 >8& "<=5 >5& "<=/ >/*J6=$:$ __S\\"1%1IK##((N ) $KN6 6 __S\\"1%1IK##((L ) $KL6 6 __S\\"1%1IK##((") ) $K")H" C0 113IJ ) K )D 113LM3 N3 __V--/DE1 F1 ""6 #6 "<=6 >6 X.0FG__S\\Y.;=1= H1 __S\\"1%1IK##((3 ) $K3j"r'   r   c                      \ rS rSrS rS r\R                  S 5       rS r	S r
S r\R                  R                  S5      S	 5       rS
 r\R"                  " \" \S5      S5      \R                  \R(                  " \R,                  S:H  S5      S 5       5       5       rS r\R                  S 5       r\R                  S 5       rS rS rSrg)TestCopyTreei  c           	      P   U R                  5       n[        R                  R                  U R                  5       S5      nU R	                  [
        R                  U5        U R	                  [
        R                  [        R                  R                  U5      5        [        US4S5        [        R                  " [        R                  R                  US5      5        [        USS4S5        [
        R                  " X5        U R                  [        R                  R                  [        R                  R                  US5      5      5        U R                  [        R                  R                  [        R                  R                  US5      5      5        U R                  [        R                  R                  [        R                  R                  USS5      5      5        [        US45      nU R                  US5        [        USS45      nU R                  US5        g )Ndestinationtest.txt123test_dir456)r   r+   r8   r9   r   r   r   dirnamer@   r   copytreer   isfilere   r`   r   r   src_dirdst_diractuals       r%   test_copytree_simple!TestCopyTree.test_copytree_simple  sc   ,,.'',,t||~}=w/rwww'?@Wj)51
gz23Wj*5u=)rww||GZ'HIJbggll7J&GHIrww||GZ4>(@ A 	BGZ01'GZ<='r'   c           	         U R                  5       nU R                  5       nU R                  [        R                  U5        U R                  [        R                  U5        [	        US4S5        [
        R                  " [
        R                  R                  US5      5        [
        R                  " [
        R                  R                  US5      5        [	        USS4S5        [	        USS4S5        [        R                  " XSS9  U R                  [
        R                  R                  [
        R                  R                  US5      5      5        U R                  [
        R                  R                  [
        R                  R                  US5      5      5        U R                  [
        R                  R                  [
        R                  R                  USS5      5      5        [        US45      nU R                  US5        [        USS45      nU R                  US5        U R                  [         5         [        R                  " XS	S9  S S S 5        g ! , (       d  f       g = f)
Nznonexisting.txtr  existing_dirzexisting.txtzwill be replacedzhas been replacedT)dirs_exist_okF)r   r   r   r   r@   r+   r   r8   r9   r  r   r  re   r`   r   r   FileExistsErrorr  s       r%   test_copytree_dirs_exist_ok(TestCopyTree.test_copytree_dirs_exist_ok  s   ,,.,,.w/w/W/0%8
g~67
g~67Wnn=?QRWnn=?RS=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/OOGEB 0//s   I""
I0c           	         U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  " U5        [        R                  " U5        [        US4S5        [        R                  R                  US5      n[        R                  R                  US5      n[        R                  " [        R                  R                  US5      U5        [        [        S5      (       a6  [        R                  " U[        R                  [        R                  -  5        [        [        S	5      (       a:  [        [        S
5      (       a%  [        R                  " U[        R                  5        [        R                  " U5      n[        R                   " X#SS9  U R#                  [        R                  R%                  [        R                  R                  USS5      5      5        [        R&                  " [        R                  R                  USS5      5      n[        R(                  S:X  a  UR+                  S5      (       a  USS  nU R-                  U[        R                  R                  US5      5        [        R                  " U5      n	[        [        S5      (       a&  U R-                  U	R.                  UR.                  5        [        [        S	5      (       a'  U R-                  U	R0                  UR0                  5        g g )Nr{   r|   subzfile.txtr   r   zsub/linklchmodlchflags	UF_NODUMPTsymlinksntz\\?\   )r   r+   r8   r9   r   r@   r   rs   r  r  S_IRWXUS_IRWXOr  r  r@  r   r  r   rf   readlinkrj   
startswithr   r  st_flags)
r   rP  r  r  sub_dirsrc_linkdst_linksrc_statr  dst_stats
             r%   test_copytree_symlinks#TestCopyTree.test_copytree_symlinks   s   ,,.'',,w.'',,w.'',,w.

Wj)5177<<077<<4


277<<4	2x  IIht|| ;<2z""wt['A'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           
         [         R                  R                  n[         R                  R                  nU R	                  5       n U" U R	                  5       S5      n[        US4S5        [        US4S5        [         R                  " U" US5      5        [        USS4S5        [         R                  " U" US5      5        [        USS4S5        [         R                  " U" USS5      5        [         R                  " U" USS	5      5        [        USSS4S5        [        USS	S
4S5         [        R                  " SS5      n[        R                  " X4US9  U R                  U" U" US5      5      5        U R                  U" U" US5      5      5        U R                  U" U" US5      5      5        [        R                  " U5         [        R                  " SS5      n[        R                  " X4US9  U R                  U" U" US5      5      5        U R                  U" U" USS	5      5      5        U R                  U" U" USS5      5      5        [        R                  " U5         S n[        R                  " X4US9  U R                  U" U" USS	S
5      5      5        U R                  U" U" USS5      5      5        [        R                  " U5         [        R                  " U5        [        R                  " [         R                  R                  U5      5        g ! [        R                  " U5        f = f! [        R                  " U5        f = f! [        R                  " U5        f = f! [        R                  " U5        [        R                  " [         R                  R                  W5      5        f = f)Nr  r  r  ztest.tmpr  r  	test_dir2rb  subdir2ztest.pyz*.tmpignorezsubdir*c                 h   / nU H  n[         R                  R                  X5      n[         R                  R                  U5      (       a*  UR	                  5       S   S:X  a  UR                  U5        Mp  [         R                  R                  U5      S   S;   d  M  UR                  U5        M     U$ )Nr   rb  z.py)r+   r8   r9   re   r   rg   splitext)r{   namesri   rj   r8   s        r%   _filter8TestCopyTree.test_copytree_with_exclude.<locals>._filterh  s    C %!ww||C6GGMM$// JJL,8JJt,WW--d3B7EBJJt, !& Jr'   )r+   r8   r9   r   r   r@   r   r   ignore_patternsr  r   r   r   r  )r   r9   r   r  r  patternsr  s          r%   test_copytree_with_exclude'TestCopyTree.test_copytree_with_exclude@  s   ww||,,.:	44<<>=9G*-u5*-u5HHT':./*j95AHHT';/0+z:EBHHT';9:HHT';	:;+xDeL+y)DeL'!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'M3 .BL" 4M3 BL= M3 *AM M3 "L::M3 =MM3 M00M3 3AN>c           
      D  ^ ^ [         R                  R                  n[         R                  R                  nT R	                  5       nU" US5      n[         R
                  " U" U5      5        [         R
                  " U" US5      5        [         R
                  " [         R                  R                  USS5      5        [        USSS4S5        / mUU 4S jnU" T R	                  5       S5      n[        R                  " XFUS9  T R                  U" U" USSS5      5      5        U" T R	                  5       S5      n[        R                  " [        U5      XeS9  T R                  U" U" USSS5      5      5        U" T R	                  5       S5      n[        [         R                  " U5      5      S	   nT R                  U[         R                  5        [        R                  " XvUS9  T R                  U" U" USSS5      5      5        T R                  [!        T5      S
5        g )Nsourcer  rb  r  r  c                   > TR                  U 5        TR                  U [        5        TR                  U[        5        TR	                  [        U5      [        [        U5      5      5        U H  nTR                  U[        5        M     / $ r*   )rg   r   r:   listr   r   set)r{   r  rj   invokationsr   s      r%   _ignore?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignore  sl    s#!!#s+!!%.SZSZ9%%dC0 Ir'   r  r  r   	   )r+   r8   r9   r   r   r   r@   r   r  r   r   r  r  r   DirEntryr   r   )	r   r9   r   rP  r  r  r  src_dir_entryr  s	   `       @r%   !test_copytree_arg_types_of_ignore.TestCopyTree.test_copytree_arg_types_of_ignore  s   ww||,,.w)
g
gz*+
gz8<=Wj(J?G	 t||~}59tGZ$. 0 1 	2 t||~}5)7CtGZ$. 0 1 	2 t||~}5RZZ01!4mR[[9w?tGZ$. 0 1 	2 	[)1-r'   c           	         U R                  5       n[        R                  R                  US5      n[        R                  " U5        [        R                  R                  US5      nU R                  [        R                  U5        [        R                  " US5        [        US4S5        [        R                  " [        R                  R                  US5      S5        [        US4S5        [        R                  " [        R                  R                  US5      S5        [        R                   " US	9nU R                  [        R                  U5        [        R                  " US5        [        R                  " X#5        U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        U R                  [        R                  " [        R                  R                  US5      5      R                  [        R                  " [        R                  R                  US5      5      R                  5        U R                  [        R                  " [        R                  R                  US5      5      R                  [        R                  " [        R                  R                  US5      5      R                  5        [        R                  R                  U[        R                  R!                  U5      S
   5      nU R                  [        R                  " U5      R                  [        R                  " U5      R                  5        g )Nr  r  i  zpermissive.txtr  zrestrictive.txtr  i  r   r   )r   r+   r8   r9   r   r   r   r   r  r@   rt   r   r  r   r  r  r   )r   rP  r  r  restrictive_subdirrestrictive_subdir_dsts         r%   !test_copytree_retains_permissions.TestCopyTree.test_copytree_retains_permissions  s1   ,,.'',,w1
'',,w6w/
% W./7
g'78%@W/0%8
g'8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                    U R                  5       n[        R                  R                  U R                  5       S5      nU R	                  [
        R                  U5        U R	                  [
        R                  [        R                  R                  U5      5        [        S5      Ul	        U R                  [
        R                  5         [
        R                  " X#5        S S S 5        g ! , (       d  f       g = f)Nr  zka-boom)r   r+   r8   r9   r   r   r   r  r  r   r   r   r  )r   
mock_patchr  r  s       r%   test_copytree_winerror#TestCopyTree.test_copytree_winerror  s    
 ,,.'',,t||~}=w/rwww'?@!0!;
v||,OOG- -,,s   C++
C9c                 :  ^ ^^^ UUU U4S jn/ mT R                  5       m[        R                  " T R                  5       S9m[        [        R
                  R                  TS5      5        [        R                  " TTUS9  T R                  [        T5      S5        g )Nc                 @  > TR                  S 5        TR                  U [        5        TR                  U[        5        TR                  U [        R
                  R                  TS5      5        TR                  U[        R
                  R                  TS5      5        g Nr   )rg   r   r:   r   r+   r8   r9   )r  r  r|   flagr   r{   s     r%   custom_cpfunETestCopyTree.test_copytree_custom_copy_function.<locals>.custom_cpfun  sm    KK!!!S)!!!S)QS% 89QS% 89r'   r   r   copy_functionr   )r   rt   r   r@   r+   r8   r9   r   r  r   r   )r   r   r|   r  r{   s   ` @@@r%   "test_copytree_custom_copy_function/TestCopyTree.test_copytree_custom_copy_function  sn    	: 	: llnoo$,,.1BGGLLe,-S=TA&r'   r{  r|  r}  r~  c                 v   [         R                  " [        5         [         R                  R	                  [        S5      n[         R                  " U5        [         R                  R	                  US5      n [         R
                  " U5         [        R                  " [        [        5        U R                  S5        [        R                   " [        SS	9  [        R                   " [        SS	9  g ! [         a  nU R                  SU-  5         S nANS nAff = f! [        R                   aQ  nUR                  S   nU R                  [        U5      S5        US   u  pVnU R                  SU-  U5         S nANS nAff = f! [        R                   " [        SS	9  [        R                   " [        SS	9  f = f)
Nrb  r  os.mkfifo(): %sz$shutil.Error should have been raisedr   r   z`%s` is a named pipeTr   )r+   r   r   r8   r9   r{  r  skipTestr   r  TESTFN2failr   r#   r   r   r   )r   rb  pipeer   r{   r|   	error_msgs           r%   test_copytree_named_pipe%TestCopyTree.test_copytree_named_pipe  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#)  !7$!>	JJ	K MM&5MM'6s[   AF 7C1 D -F 1
D;DF DF F0AE<7F <FF 4F8c                   ^ U R                  5       n[        R                  R                  U R                  5       S5      n[	        US4S5        [        R
                  " [        R                  R                  US5      5        [	        USS4S5        / mU4S jn[        R                  " XUS9  U R                  [        T5      S5        g )	Nr  r  r  r  r  c                 *   > TR                  X45        g r*   r   )r{   r|   copieds     r%   _copy6TestCopyTree.test_copytree_special_func.<locals>._copy  s    MM3*%r'   r  rr   )
r   r+   r8   r9   r@   r   r   r  r   r   )r   r  r  r  r  s       @r%   test_copytree_special_func'TestCopyTree.test_copytree_special_func   s    ,,.'',,t||~}=Wj)51
gz23Wj*5u=	& 	>Va(r'   c                 V   U R                  5       n[        R                  R                  US5      n[	        US5        [        R                  R                  US5      n[        R
                  " U5        X4 Hm  n[        R                  " S[        R                  R                  US5      5        [        R                  " U[        R                  R                  US5      5        Mo     [        R                  R                  U R                  5       S5      nU R                  [        [        R                  X5        [        R                  R                  U R                  5       S5      n[        R                  " XS	S
9  [        R                  " U5       H*  u  pgnU R                  SU5        U R                  SU5        M,     [        R                  R                  U R                  5       S5      n[        R                  " XS	S9  U R                  S[        R                  " U5      5        g )Nr  abcdir_a
IDONTEXISTbrokenvalidr  destination2T)ignore_dangling_symlinksdestination3r  )r   r+   r8   r9   r@   r   r   r   r   r   r  walkassertNotInr%  rd   )	r   r  
valid_filer  r   r  rootr  r  s	            r%   test_copytree_dangling_symlinks,TestCopyTree.test_copytree_dangling_symlinks  sc   ,,.WW\\':6
J&Wg.
AJJ|RWW\\!X%>?JJz277<<7#;<  
 '',,t||~}=%'C '',,t||~~>4H!#!1DXu-MM'5) "2
 '',,t||~~>48j"**W"56r'   c           	         U R                  5       n[        R                  R                  U R                  5       S5      n[        R                  " [        R                  R                  US5      5        [        [        R                  R                  USS5      5        [        R                  " [        R                  R                  US5      [        R                  R                  US5      SS9  [        R                  " XSS9  U R                  [        R                  R                  [        R                  R                  US5      5      5        U R                  S[        R                  " [        R                  R                  US5      5      5        [        R                  R                  U R                  5       S	5      n[        R                  " XSS9  U R                  [        R                  R                  [        R                  R                  US5      5      5        U R                  S[        R                  " [        R                  R                  US5      5      5        g )
Nr  real_dirr  link_to_dirTtarget_is_directoryFr  r  )r   r+   r8   r9   r   r@   r   r   r  r   rf   r%  rd   r   )r   r  r  s      r%   test_copytree_symlink_dir&TestCopyTree.test_copytree_symlink_dir)  sc   ,,.'',,t||~}=
gz23BGGLL*jAB


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Sr'   c                 B   U R                  5       nUS-   nU R                  [        R                  US5        [        R
                  R                  US5      n[        US5        [        R                  " X5      nU R                  S/[        R                  " U5      5        g )NdestTr   )r   r   r   r   r+   r8   r9   r@   r  r   rd   )r   r  r  r{   rvs        r%   test_copytree_return_value'TestCopyTree.test_copytree_return_value<  sq    ,,.F"w5ggll7E*C__W.%"**R.1r'   c                    U R                  5       nU R                  [        R                  USS9  [        R
                  R                  USS5      n[        R
                  R                  USS5      n[        R                  " U5        [        R
                  R                  US5      n[        US5        [        R                  " X#5      nU R                  S/[        R                  " U5      5        g )NTr   tpg
somevendorz1.0pol)r   r   r   r   r+   r8   r9   r  r@   r  r   rd   )r   base_dirr  r  r{   r/  s         r%   test_copytree_subdirectory'TestCopyTree.test_copytree_subdirectoryF  s    <<>xtD'',,xd3'',,we<
Gggll7E*C__W.%"**R.1r'   rC   N)r   r   r   r   r  r  r   r  r  r  r  r  r  mockpatchr  r  r  rs   r+   r  r   r  r  r  r$  r+  r0  r8  r   rC   r'   r%   r  r    s    (&C2 ""C #C>?4B(.TC6 ]]$. %.'" X.0FG""__S\\Y.;=7= # H7.) ""7 #74 ""T #T$2
2r'   r  c                      \ rS rSr\R
                  S 5       r\R                  " \	" \
S5      S5      \R
                  S 5       5       r\R                  " \	" \
S5      S5      \R
                  S 5       5       r\R
                  S 5       r\R                  " \	" \
S	5      =(       a    \	" \S
5      =(       a	    \	" \S5      S5      S 5       r\R"                  S 5       r\R
                  \R"                  \R&                  S 5       5       5       rS rS r\R
                  S 5       r\R                  " \	" \
S5      S5      S 5       r\R
                  S 5       r\R"                  S 5       rS rS rS rS r\R
                  S 5       r\R                  " \	" \
S5      S5      S 5       r \R
                  S  5       r!\R                  " \	" \
S!5      S"5      \R                  " \"RF                  S#:H  S$5      S% 5       5       r$S& r%S' r&\R                  " \'=(       d    \(=(       d    \)S(5      \R                  " \*S)5      S* 5       5       r+S+ r,S,r-g-).TestCopyiR  c                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [	        US5        [        R
                  " X$5        [        R
                  " X55        [        R                  " U[        R                  [        R                  -  5        [        R                  " U[        R                  5        U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        [        R                  " X#5        U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        [        R                  " U[        R                  5        [        R                  " XC5        U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        [        R                  " U[        R                  5        [        R                  " X%5        U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        [        R                  " U[        R                  5        [        R                  " XE5        U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        g )Nr   barbazquux)r   r+   r8   r9   r@   r   r  r  r  S_IRWXGr  assertNotEqualr  r   copymoder   r   rP  r{   r|   r  r  s         r%   test_copymode_follow_symlinks&TestCopy.test_copymode_follow_symlinksV  s   ,,.ggll7E*ggll7E*77<</77<<0CC


3!


3!
dll4<</0
dll#BGGCL00"''#,2F2FG!--rwws|/C/CD 	dll#&--rwws|/C/CD
dll#&--rwws|/C/CD
dll#+--rwws|/C/CDr'   r  zrequires os.lchmodc                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [	        US5        [        R
                  " X$5        [        R
                  " X55        [        R                  " U[        R                  [        R                  -  5        [        R                  " U[        R                  5        [        R                  " U[        R                  [        R                  -  5        [        R                  " U[        R                  5        [        R                  " U5      R                  n[        R                  " XESS9  U R                  [        R                   " U5      R                  [        R                   " U5      R                  5        U R                  [        R                  " U5      R                  U5        [        R                  " U[        R                  5        [        R                  " XCSS9  U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        [        R                  " U[        R                  5        [        R                  " X%SS9  U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        g Nr   r?  r@  rA  Ffollow_symlinks)r   r+   r8   r9   r@   r   r  r  r  rB  r  r  r  r   rD  r   r@  )r   rP  r{   r|   r  r  old_modes          r%    test_copymode_symlink_to_symlink)TestCopy.test_copymode_symlink_to_symlinku  s    ,,.ggll7E*ggll7E*77<</77<<0CC


3!


3!
dll4<</0
dll#
		(DLL56
		(DLL)773<''EB(+33(+33	5--x8
		(DLL)u=--rwws|/C/CD
		(DLL)u=--rwws|/C/CDr'   z requires os.lchmod to be missingc                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [	        US5        [        R
                  " X$5        [        R
                  " X55        [        R                  " XESS9  g rI  )r   r+   r8   r9   r@   r   r   rD  rE  s         r%   *test_copymode_symlink_to_symlink_wo_lchmod3TestCopy.test_copymode_symlink_to_symlink_wo_lchmod  s     ,,.ggll7E*ggll7E*77<</77<<0CC


3!


3!EBr'   c                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [        R
                  " U5      n[        R                  " X&R                  UR                  S-
  45        [	        US5        U R                  [        R
                  " U5      R                  [        R
                  " U5      R                  5        [        R                  " X$5        [        R                  " X55        [        [        S5      (       a%  [        R                  " U[
        R                  5        [        [        S5      (       a:  [        [
        S5      (       a%  [        R                  " U[
        R                  5        [        R                   " U5      n[        [        S5      (       aO  ["        R$                  " XES	S
9  U R                  UR&                  [        R
                  " U5      R&                  5        ["        R$                  " XESS
9  [        R                   " U5      n[        R                  [        R(                  ;   a0  S H*  n	U R+                  [-        Xy5      [-        X5      S-   5        M,     [        [        S5      (       a&  U R/                  UR&                  UR&                  5        [        [        S5      (       a7  [        US5      (       a&  U R/                  UR0                  UR0                  5        ["        R$                  " XCSS
9  U R3                  [5        [        R
                  " U5      R                  [        R
                  " U5      R                  -
  5      S:  5        g )Nr   r?  r@  quxg      E@r  r  r  TrJ  Fst_atimest_mtimer   r  g?)r   r+   r8   r9   r@   r  utimerU  rV  rC  r   rs   r  r  r  r  r@  r   copystatr  rL  assertLessEqualr!   r   r  r   abs)
r   rP  r{   r|   r  r  r  src_link_statdst_link_statattrs
             r%   test_copystat_symlinksTestCopy.test_copystat_symlinks  s   ,,.ggll7E*ggll7E*77<</77<</C773<
((((4/1 	2CBGGCL112773<3H3HI


3!


3!2x  IIh-2z""wt['A'AKK$..1*2x  OOHE 5 5rwws|7K7KLEB*88r222.$$W]%A%,]%AA%EG / 2x  ]22M4I4IJ2z""w}j'I'I]33]5K5KLu=BGGCL11BGGCL4I4IIJ  	!r'   chflags
EOPNOTSUPPENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPc                 x   U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [	        US5        S n[        R
                  n [        R                  [        R                  4 H*  nU" U5      [        l        [        R                  " X#5        M,     U" [        R                  [        R                  -   5      [        l        U R                  [        [        R                  X#5        U[        l        g ! U[        l        f = f)Nr   file2xxxc                 4   ^ ^ [        5       mSS.U U4S jjnU$ )NTrJ  c                   > TTl         Ter*   )r"   )r8   flagsrK  errexs      r%   _chflags_raiserlTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser  s    r'   rV  )ri  rk  rj  s   ` @r%   make_chflags_raiserSTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser  s    B@D   #"r'   )r   r+   r8   r9   r@   r`  r"   ra  rb  r   rX  r   r    )r   r   r   rd  rm  old_chflagsri  s          r%   -test_copystat_handles_harmless_chflags_errors6TestCopy.test_copystat_handles_harmless_chflags_errors  s    
 VW-VW-E5!E5!	# jj	%''605
- 7 -U-=-=-MNBJgvE$BJBJs   =B#D, ,D9c                   ^^^	^
 U R                  5       n[        R                  R                  US5      m
[	        T
S5        [        R                  R                  US5      n[	        US5        [
        R                  " T
U5        [        R                  " T
SS5        [        R                  " T
SS5        [
        R                  " T
U5        U R                  [        [        R                  " T
5      5      [        [        R                  " U5      5      5        U R                  [        R                  " T
S5      [        R                  " US5      5        [        R                  " U5        [	        US5        [        [        R                  S5      m	UU	4S jn [        R                  mU[        l        [
        R                  " T
U5        U R!                  S[        R                  " U5      5        T[        l        S	S
.UU
4S jjn [        R                  mU[        l
        [
        R                  " T
U5        T[        l
        [        R                  R                  US5      m
[        R                  R                  US5      n[	        T
T
5        [	        XU5        [        R                  " T
SS5        [        R                  " USS5        [        R"                  " US5        [        R                  R                  US5      n[        R                  R                  US5      n[	        X"5        [	        Xf5        [
        R$                  " T
U5        [
        R$                  " XV5        U R                  [        R                  " US5      S5        U R                  [        R                  " US5      S5        g ! T[        l        f = f! T[        l
        f = f)Nr   r?  user.foo   42zuser.bar   43EPERMc                 *   > US:X  a  TeT" XU40 UD6  g )Nrs  rC   )fnamer]  valr$   orig_setxattros_errors       r%   _raise_on_user_foo3TestCopy.test_copyxattr.<locals>._raise_on_user_foo  s    z!e39&9r'   TrJ  c                P   > U T:X  a  [        [        R                  S5      eT" XS9$ )NzOperation not supportedrJ  )r    r"   rb  )rx  rK  orig_listxattrr{   s     r%   _raise_on_src.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+   r8   r9   r@   r   
_copyxattrsetxattrr   rc   	listxattrgetxattrrm  r    r"   rv  r%  r  rX  )r   rP  r|   r|  r  srcrodstror  rz  r{  r{   s          @@@@r%   test_copyxattrTestCopy.test_copyxattr  s   ,,.ggll7E*Cggll7E*C 	#s#
CU+
CU+#s#S 12F2<<;L4MNC,C,	. 			#C5;;0	:
	(KKM,BKc3'MM*bll3&78'BK48 	J 	J	*\\N(BLc3')BL ggll7N3W&78CE!
C)95
E+Y7
ggll7J/Wm4CE!S!%S*:;YGU,<=yI9 (BK *BLs   AN3 2O 3O Oc                 D   U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [        R
                  " X#5        [        R                  " USS5        [        R                  " USSSS9  [        R                  R                  US5      n[        R                  R                  US	5      n[	        US5        [        R
                  " XE5        [        R                  " X5SS9  U R                  [        R                  " USSS9S5        U R                  [        [        R                  US5        [        R                  " X4SS9  U R                  [        R                  " US5      S5        g )
Nr   r@  ztrusted.foort  ru  FrJ  r?  rS  )r   r+   r8   r9   r@   r   r  r   r  r   r  r   r    )r   rP  r{   r  r|   r  s         r%   test_copyxattr_symlinks TestCopy.test_copyxattr_symlinks,  s    ,,.ggll7E*77<</C


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


3!(eDX}eTV[\'2;;]C(?S-8%@r'   c                     SnU R                  5       n[        X24S5        [        R                  R	                  X25      nU R                  5       nU" XE5        [        R                  R	                  XR5      nXF4$ )Nr  re  )r   r@   r+   r8   r9   )r   methodrx  r   r   tmpdir2rd  s          r%   
_copy_fileTestCopy._copy_fileF  s]    VOU+V+,,.uW,~r'   c                 >   U R                  [        R                  5      u  pU R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      R                  [        R                  " U5      R                  5        g r*   )
r  r   copyr   r+   r8   r   r   r  r  )r   r   rd  s      r%   	test_copyTestCopy.test_copyP  s[    v{{3u-.//1G1GHr'   c                 z   U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [        R
                  " X$5        [        [        S5      (       a6  [        R                  " U[        R                  [        R                  -  5        [        R                  " XCSS9  U R                  [        R                  R                  U5      5        U R                  [!        U5      [!        U5      5        [        R"                  " U5        [        R                  " XCSS9  U R%                  [        R                  R                  U5      5        U R                  [        R&                  " U5      [        R&                  " U5      5        [        [        S5      (       aO  U R                  [        R(                  " U5      R*                  [        R(                  " U5      R*                  5        g g )Nr   r?  r@  r  TrJ  F)r   r+   r8   r9   r@   r   rs   r  r  r  r  r   r  r   rf   r   r`   rm  r   r  r@  r  )r   rP  r{   r|   r  s        r%   test_copy_symlinksTestCopy.test_copy_symlinksV  s^   ,,.ggll7E*ggll7E*77<</C


3!2x  IIht|| ;<H48,-338
		#H59s+,S)2;;x+@A2x  RXXh/77XXc]224 !r'   rW  zrequires os.utimec                 B   U R                  [        R                  5      u  pU R                  [        R
                  R                  U5      5        [        R                  " U5      n[        R                  " U5      nU R                  UR                  UR                  5        S H*  nU R                  [        X55      [        XE5      S-   5        M,     [        [        S5      (       a9  [        US5      (       a'  U R                  [        US5      [        US5      5        g g g )NrT  r   r`  r  )r  r   copy2r   r+   r8   r   r  r   r  rY  r!   rs   )r   r   rd  
file1_stat
file2_statr]  s         r%   
test_copy2TestCopy.test_copy2o  s     v||4u-.WWU^
WWU^
++Z-?-?@*D  !:!(!:Q!>@ + 2y!!gj*&E&EWZ<$Z<> 'F!r'   c                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [        R
                  " X$5        [        [        S5      (       a6  [        R                  " U[        R                  [        R                  -  5        [        [        S5      (       a:  [        [        S5      (       a%  [        R                  " U[        R                  5        [        R                  " U5      n[        R                  " U5      n[        R                  " XCSS9  U R!                  [        R                  R#                  U5      5        U R%                  ['        U5      ['        U5      5        [        R(                  " U5        [        R                  " XCS	S9  U R+                  [        R                  R#                  U5      5        U R%                  [        R,                  " U5      [        R,                  " U5      5        [        R                  " U5      n[        R.                  [        R0                  ;   a0  S
 H*  nU R3                  [5        Xh5      [5        Xx5      S-   5        M,     [        [        S5      (       aL  U R%                  UR6                  UR6                  5        U R9                  UR6                  UR6                  5        [        [        S5      (       a9  [        US5      (       a'  U R%                  UR:                  UR:                  5        g g g )Nr   r?  r@  r  r  r  TrJ  FrT  r   r  )r   r+   r8   r9   r@   r   rs   r  r  r  r  r  r  r@  r   r  r   rf   r   r`   rm  r   r  rW  rL  rY  r!   r  rC  r  )	r   rP  r{   r|   r  r  r[  r  r]  s	            r%   test_copy2_symlinksTestCopy.test_copy2_symlinks  s3   ,,.ggll7E*ggll7E*77<</C


3!2x  IIht|| ;<2z""wt['A'AKK$..1773<*XD9,-338
		#XE:s+,S)2;;x+@A88C=88r222.$$W]%A%,X%<q%@B / 2x  ]22H4D4DE 0 0(2B2BC2z""w}j'I'I]33X5F5FG (J"r'   c                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [        R
                  " USS5        [        R                  " X#5        U R                  [        R                  " US5      [        R                  " US5      5        [        R                  " U5        g )Nr   r?  rs  rt  )r   r+   r8   r9   r@   r  r   r  r   r  rm  )r   rP  r{   r|   s       r%   test_copy2_xattrTestCopy.test_copy2_xattr  s    ,,.ggll7E*ggll7E*C
CU+SC,C,	. 			#r'   c                    [         R                  [         R                  4 H  nU R                  5       nU R                  5       n[        R
                  R                  US5      n[        US5        U" XC5      nU R                  U[        R
                  R                  US5      5        U" U[        R
                  R                  US5      5      nU R                  U[        R
                  R                  US5      5        M     g )Nr   r?  )	r   r  r  r   r+   r8   r9   r@   r   )r   r<  r  r  r{   r/  s         r%   test_copy_return_valueTestCopy.test_copy_return_value  s    ;;-BllnGllnG'',,w.CU#C!BRgu!=>Cgu56BRgu!=> .r'   c                 B    U R                  [        R                  5        g r*   )_test_copy_dirr   r  r  s    r%   test_copy_dirTestCopy.test_copy_dir  s    FKK(r'   c                 B    U R                  [        R                  5        g r*   )r  r   r  r  s    r%   test_copy2_dirTestCopy.test_copy2_dir  s    FLL)r'   c                 v   U R                  5       n[        R                  R                  US5      nU R                  5       n[        R                  R                  US5      n[	        US5        [
        R                  S:X  a  [        nO[        nU R                  XaXB5        U R                  XaXE5        U" X45        g Nr   does_not_exist/win32)
r   r+   r8   r9   r@   r   r  r  IsADirectoryErrorr   )r   	copy_funcr  src_filer   r|   ri  s          r%   r  TestCopy._test_copy_dir  s    ,,.77<</||~ggll7$56He$<<7"!C#C#$8 	#$4(!r'   c                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [        R
                  " X%5        [        R                  " XTSS9  U R                  [        R                  R                  U5      5        U R                  [        R                  " U5      [        R                  " U5      5        [        R                  " XS5        U R                  [        R                  R                  U5      5        g )Nr{   r|   r  r   r   FrJ  )r   r+   r8   r9   r@   r   r   copyfiler   rf   r   r  r   )r   rP  r{   r|   r  r   s         r%   test_copyfile_symlinksTestCopy.test_copyfile_symlinks  s    ,,.ggll7E*ggll7E*77<<4ww||GV,C


3>x01T*BKK,AB",-r'   r   zrequires os.linkc                    [         R                  " [        5        [         R                  R	                  [        S5      n[         R                  R	                  [        S5      n [        US5         [         R                  " X5        U R                  [        R                  [        R                  X5        [        USSS9 nU R                  UR                  5       S5        S S S 5        [         R                   " U5        [        R"                  " [        SS	9  g ! [         a  nU R                  SU-  5         S nANS nAff = f! , (       d  f       Ni= f! [        R"                  " [        SS	9  f = f)
Nrr  rs  cheddarzos.link(): %srY   rZ   r[   Tr   )r+   r   r   r8   r9   r@   r   r  r  r   r   r   r  r<   r   r]   rm  r   )r   r{   r|   r  rT   s        r%   'test_dont_copy_file_onto_link_to_itself0TestCopy.test_dont_copy_file_onto_link_to_itself  s     	ggll68,ggll66*	6Y'3! f22FOOSNc31Q  95 2IIcNMM&5 # 3o1223 21 MM&5sN   $E 1D :E !E"E 
E$D=8E =EE 
EE E1c                    [         R                  " [        5        [         R                  R	                  [        S5      n[         R                  R	                  [        S5      n [        US5        [         R                  " SU5        U R                  [        R                  [        R                  X5        [        USSS9 nU R                  UR                  5       S5        S S S 5        [         R                  " U5        [        R                  " [        SS9  g ! , (       d  f       N>= f! [        R                  " [        SS9  f = f)	Nrr  rs  r  rY   rZ   r[   Tr   )r+   r   r   r8   r9   r@   r   r   r   r   r  r<   r   r]   rm  r   )r   r{   r|   rT   s       r%   *test_dont_copy_file_onto_symlink_to_itself3TestCopy.test_dont_copy_file_onto_symlink_to_itself  s     	ggll68,ggll66*	6Y' JJx%f22FOOSNc31Q  95 2IIcNMM&5	 21 MM&5s%   $AD+ !D"D+ 
D($D+ +Er{  r|  r}  r~  c                     [         R                  " [        5         U R                  [        R                  [        R                  [        [        5        U R                  [        R                  [        R                  [        [        5        [         R                  " [        5        g ! [         a  nU R	                  SU-  5         S nANS nAff = f! [         R                  " [        5        f = f)Nr  )r+   r{  r   r  r  r   r   SpecialFileErrorr  r	  __file__rm  )r   r  s     r%   test_copyfile_named_pipe!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2CCC/c                    U R                  5       nU R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        [
        R                  " XC5      nU R                  [        R                  R                  U5      5        U R                  [        U5      [        U5      5        g )Nr?  r   )r   r+   r8   r9   r@   r   r  r   r   r   r`   )r   r  r  dst_filer  r/  s         r%   test_copyfile_return_value#TestCopy.test_copyfile_return_value  s    ,,.,,.77<</77<</He$__X0r*+8,i.ABr'   c                 F   U R                  5       n[        R                  R                  US5      n[	        US5        U R                  [        [        R                  X"5        U R                  [        [        R                  X"5        U R                  [        U5      S5        g r  )r   r+   r8   r9   r@   r   r   r   r  r   r   r`   )r   r  r  s      r%   test_copyfile_same_file TestCopy.test_copyfile_same_file'  sn     ,,.77<</He$-(M%(E8,e4r'   zMOn MACOS, Solaris and Windows the errors are not confusing (though different)zNot valid on AIX, see gh-92670c                    U R                  5       n[        R                  R                  US5      n[        R                  R                  US5      n[	        US5        U R                  [        [        R                  X#5        g )Nr   r  )	r   r+   r8   r9   r@   r   r   r   r  )r   r  r  r|   s       r%   test_copyfile_nonexistent_dir&TestCopy.test_copyfile_nonexistent_dir3  sY     ,,.77<</ggll7$56He$+V__hLr'   c                    U R                  5       n[        R                  R                  US5      nU R                  5       n[        R                  R                  US5      n[	        US5        [
        R                  S:X  a  [        nO[        nU R                  U[        R                  X5        U R                  U[        R                  X!5        U R                  U[        R                  X15        g r  )r   r+   r8   r9   r@   r   r  r  r  r   r   r  )r   r  r  r   r|   ri  s         r%   test_copyfile_copy_dirTestCopy.test_copyfile_copy_dir@  s     ,,.77<</||~ggll7$56He$<<7"!C#C#v=#vB#v>r'   rC   N).r   r   r   r   r   r  rF  r  r  rs   r+   rM  r  rP  r^  r"   rp  skip_unless_xattrr  skip_unless_dac_overrider  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  MACOSSOLARISr   r   r  r  r   rC   r'   r%   r=  r=  R  s    ""E #E< X.0DE""E # FE: __WR*,NO""
C # P
C ""&! #&!P Y/ 3 53 	2DF%	F%6   =J !=J~ ""  ''A ( ! #A.I ""4 #40 W-/BC> D>  "" H # HD   
 !

?)*"$ "". #.  V,.@A6 B6$ ""6 #6& X.0FG__S\\Y.;== H	C
5 __U0g0  3B  C __S:;M <	 C
M?r'   r=  c                      \ rS rSrS rS+S jr\R                  " 5       S 5       r\R                  " 5       S 5       r	S r
\R                  " 5       \R                  " \R                  " S5      S5      S	 5       5       r\R                  " 5       S
 5       r\R                  " 5       S 5       r\R                  " 5       S 5       r\R                  " 5       \R                  " \R                  " S5      S5      S 5       5       r\R                  " 5       \R                  " \R                  " S5      S5      S 5       5       rS r\R                  " 5       S 5       r\R                  " 5       \R                  " \S5      S 5       5       rS rS rS rS r\R                  " 5       S 5       rS rS r\R                  " 5       S 5       r S r!S  r"S! r#S" r$\R                  " 5       S# 5       r%\RL                  " 5       S$ 5       r'\RP                  " 5       \RR                  " \*=(       a    \+" 5       (       + S%5      S& 5       5       r,\R                  " 5       S' 5       r-S( r.S)r/g*),TestArchivesiS  c                     [         R                  " U5       nUR                  5       nUR                  5         [	        U5      sS S S 5        $ ! , (       d  f       g = fr*   )tarfiler<   getnamessortr7   )r   r8   tarr  s       r%   _tarinfoTestArchives._tarinfoW  s7    \\$3LLNEJJL<  s   +A
Ac                    U R                  5       n[        R                  R                  X!5      n[        R                  " USS9  [        US4S5        [        US4S5        [        R                  " [        R                  R                  US5      5        [        USS4S5        [        R                  " [        R                  R                  US5      5        U(       a  [        US	4S5        X!4$ )
NT)exist_okr   re  rd  r  file3sub2outer)r   r+   r8   r9   r  r@   r   )r   r7  root_dirdists       r%   _create_filesTestArchives._create_files]  s    <<>ww||H/
D4(T7OU+T7OU+
dE*+T5'*E2
dF+,7+U3!!r'   c                 j   U R                  5       u  p[        R                  " 5          [           [        R
                  R                  SS5      n[        USU5      nU R                  U[        R
                  R                  U5      S-   5        U R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " US5       nU R                  UR!                  5       / SQ5        S S S 5        S S S 5        S S S 5        [        R                  " 5          [           [        R
                  R                  SS5      n[        USX5      nU R                  U[        R
                  R                  U5      S-   5        U R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " US5       nU R                  UR!                  5       / SQ5        S S S 5        S S S 5        S S S 5        [        R                  " 5          [           [        R
                  R                  S	S5      n[        USU[        R
                  R                  US
5      5      nU R                  U[        R
                  R                  U5      S-   5        U R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " US5       nU R                  UR!                  5       SS/5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr|   archiver  .tarrY   .z./distz
./dist/subz./dist/sub2z./dist/file1z./dist/file2z./dist/sub/file3z./outerdst2r  dist/subz	dist/sub2
dist/file1
dist/file2dist/sub/file3dst3r  r  r  )r  r   temp_cwdno_chdirr+   r8   r9   r   r   abspathr   r  r  
is_tarfiler<   assertCountEqualr  r   r  r7  	base_namer  tfs         r%   test_make_tarfileTestArchives.test_make_tarfilek  s   !//1!8UI6I"9eX>GWbggooi&@6&IJOOBGGNN734OOG..w78gs+r%%bkkm$% , $,! !8VY7I"9eXHGWbggooi&@6&IJOOBGGNN734OOG..w78gs+r%%bkkmGH , $,! !8VY7I"9eX#%77<<%#@BGWbggooi&@6&IJOOBGGNN734OOG..w78gs+r%%bkkm#%568 , $,!!) ,+ $,8!!* ,+ $,8!!( ,+ $,8!!s   N:C
N(9#NN($N:	O0C
O#O=OO0*P$1C)P#P=PP$
N% N((
N7	2N::
O	
OO
O-	(O00
O?
PP
P!	P$$
P2c                 `   U R                  5       u  p[        R                  R                  U R	                  5       SS5      n[        R                  R                  X15      n[        R                  " U5         [           [        US5      nU R                  XCS-   5        U R                  [        R                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " US5       nU R!                  UR#                  5       / SQ5        S S S 5        S S S 5        S S S 5        [        R                  " U5         [           [        R                  R                  SS5      n[        USUS9nU R                  XCS	-   5        U R                  [        R                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " US
5       nU R!                  UR#                  5       / SQ5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       GN"= f! , (       d  f       GN,= f! , (       d  f       GN6= f! , (       d  f       NU= f! , (       d  f       N^= f! , (       d  f       g = f)Nr|   r  gztar.tar.gzzr:gzr  r  r7  r  rY   r  )r  r+   r8   r9   r   relpathr   
change_cwdr  r   r   r   r  r  r  r<   r  r  r  s         r%   !test_make_tarfile_without_rootdir.TestArchives.test_make_tarfile_without_rootdir  s   !//1GGLL	B	GGOOI8	!!(+X"9g6GW)&;<OOBGGNN734OOG..w78gv."%%bkkm$% / .6+ !!(+XUI6I"9ehGGW&&89OOBGGNN734OOG..w78gs+r%%bkkmGH , .6++ /. .6X++$ ,+ .6X++sz   7I+>BI	#I,I4I+J!B*J#I=.J6J
II
I(	#I++
I:=
JJ
J	J
J-c                    U R                  5       u  p[        R                  " 5          [           [        R
                  R                  SS5      n[        USU[        R                  5      nU R                  U[        R
                  R                  U5      S-   5        U R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " US5       nU R!                  UR#                  5       / SQ5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Nr|   r  r  r  rY   r  )r  r   r  r  r+   r8   r9   r   curdirr   r  r   r  r  r  r<   r  r  r  s         r%   &test_make_tarfile_with_explicit_curdir3TestArchives.test_make_tarfile_with_explicit_curdir  s    !//1!8UI6I"9eXryyIGWbggooi&@6&IJOOBGGNN734OOG..w78gs+r%%bkkm$% , $,!! ,+ $,8!!s;   E&CE#E+E3E&
EE
E#	E&&
E4r  zNeed the tar command to runc           	      &   U R                  5       u  p[        R                  R                  U R	                  5       S5      n[
           [        USX5      nS S S 5        U R                  WUS-   5        U R                  [        R                  R                  U5      5        [        R                  R                  US5      nSSSU/n[        R                  S:X  aH  SS Kn[        UR                  5       S   R                  S	5      S   5      S
:  a  UR                  SS5        [         R"                  " Xa[         R$                  S9  U R                  [        R                  R                  U5      5        U R                  U R'                  U5      U R'                  U5      5        [
           [        USX5      nS S S 5        U R                  XCS-   5        U R                  [        R                  R                  U5      5        [
           [        USXSS9nS S S 5        U R                  XCS-   5        U R                  [        R                  R                  U5      5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       Nt= f)Nr  r  r  zarchive2.tarr  z-cfr   r   r     r   z--no-mac-metadatacwdstdoutr  Tdry_run)r  r+   r8   r9   r   r  r   r   r   r  r   r  r   mac_verr   insertr   
check_callDEVNULLr  )r   r  r7  r   tarballtarball2tar_cmdr  s           r%   test_tarfile_vs_tar TestArchives.test_tarfile_vs_tar  s    "//1GGLL;	"9gxJG  	)i"78w/0 77<<.9%:<<8# 8##%a(..s3A672=q"56g%/%7%7	9 	x01w/x1HI "9eXHG f"45w/0 "9eX+/1G  	f"45w/0O X: X Xs$   I)I1J
I.1
I?
Jc                 d   U R                  5       u  p[        R                  " 5          [           [        R
                  R                  SS5      n[        USU5      nU R                  U[        R
                  R                  U5      S-   5        U R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " U5       nU R                  UR!                  5       / SQ5        S S S 5        S S S 5        S S S 5        [        R                  " 5          [           [        R
                  R                  SS5      n[        USX5      nU R                  U[        R
                  R                  U5      S-   5        U R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " U5       nU R                  UR!                  5       / SQ5        S S S 5        S S S 5        S S S 5        [        R                  " 5          [           [        R
                  R                  SS5      n[        USU[        R
                  R                  US	5      5      nU R                  U[        R
                  R                  U5      S-   5        U R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " U5       nU R                  UR!                  5       S
S/5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr|   r  r  .zipdist/	dist/sub/
dist/sub2/r  r  r  r  r  r#  r$  r%  r  r  r  r  r  r$  r  )r  r   r  r  r+   r8   r9   r   r   r  r   r  zipfile
is_zipfileZipFiler  namelistr   r  r7  r   r  zfs         r%   test_make_zipfileTestArchives.test_make_zipfile  s   !//1!8UI6I"9eX>GWbggooi&@6&IJOOBGGNN734OOG..w78)R%%bkkm"# * $,! !8VY7I"9eXHGWbggooi&@6&IJOOBGGNN734OOG..w78)R%%bkkmGH * $,! !8VY7I"9eX#%77<<%#@BGWbggooi&@6&IJOOBGGNN734OOG..w78)R%%bkkm$&679 * $,!!' *) $,8!!& *) $,8!!& *) $,8!!s   N7C	N%8#NN%#N7O-C	O#O	;OO-(P!/C(P#O?:PP!
N"N%%
N4	/N77
O	
OO
O*	%O--
O<?
P	P
P	P!!
P/c                    U R                  5       u  p[        R                  R                  U R	                  5       SS5      n[        R                  R                  X15      n[        R                  " U5         [           [        US5      nU R                  XCS-   5        U R                  [        R                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " U5       nU R!                  UR#                  5       / SQ5        S S S 5        S S S 5        S S S 5        U R                  5       u  p[        R                  " U5         [           [        R                  R                  SS5      n[        USUS9nU R                  XCS-   5        U R                  [        R                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " U5       nU R!                  UR#                  5       / SQ5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       GN3= f! , (       d  f       GN== f! , (       d  f       GNG= f! , (       d  f       NU= f! , (       d  f       N^= f! , (       d  f       g = f)Nr|   r  r  r!  r"  r  r&  )r  r+   r8   r9   r   r  r   r	  r  r   r   r   r  r'  r(  r)  r  r*  r+  s         r%   !test_make_zipfile_without_rootdir.TestArchives.test_make_zipfile_without_rootdir  s   !//1GGLL	B	GGOOI8	!!(+X"9e4GW&&89OOBGGNN734OOG..w78)R%%bkkm"# * .6+ "//1!!(+XUI6I"9ehGGW&&89OOBGGNN734OOG..w78)R%%bkkmGH * .6++ *) .6X++& *) .6X++sz   7I;>B
I)#I+I)3I;+J/2B)J#J>JJ/
I&!I))
I8	3I;;
J

JJ
J,	(J//
J=c                    U R                  5       u  p[        R                  " 5          [           [        R
                  R                  SS5      n[        USU[        R                  5      nU R                  U[        R
                  R                  U5      S-   5        U R                  [        R
                  R                  U5      5        U R                  [        R                  " U5      5        [        R                  " U5       nU R!                  UR#                  5       / SQ5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Nr|   r  r  r!  r"  )r  r   r  r  r+   r8   r9   r   r  r   r  r   r  r'  r(  r)  r  r*  r+  s         r%   &test_make_zipfile_with_explicit_curdir3TestArchives.test_make_zipfile_with_explicit_curdir6  s     "//1!8UI6I"9eXryyIGWbggooi&@6&IJOOBGGNN734OOG..w78)R%%bkkm"# * $,!! *) $,8!!s;   E%CE#E*E2E%
EE
E"	E%%
E3r  zNeed the zip command to runc                    U R                  5       u  p[        R                  R                  U R	                  5       S5      n[
           [        USX5      nS S S 5        U R                  WUS-   5        U R                  [        R                  R                  U5      5        [        R                  R                  US5      nSSSSU/n[        R                  " Xa[        R                  S9  U R                  [        R                  R                  U5      5        [        R                  " U5       nUR                  5       nS S S 5        [        R                  " U5       nUR                  5       n	S S S 5        U R                  [!        W5      [!        W	5      5        g ! , (       d  f       GNM= f! , (       d  f       Nt= f! , (       d  f       NV= f)Nr  r  r!  zarchive2.zipz-qz-rr  )r  r+   r8   r9   r   r  r   r   r   r  r   r  r  r'  r)  r*  rc   )
r   r  r7  r   r  archive2zip_cmdr,  r  names2s
             r%   test_zipfile_vs_zip TestArchives.test_zipfile_vs_zipF  s;    "//1GGLL;	"9eXHG  	)f"45w/0 77<<.9$nh?g%/%7%7	9 	x01__W%KKME &__X&"[[]F 'v7' X &%&&s$   F.F-F>
F*-
F;>
GunzipzNeed the unzip command to runc                 (  ^ U R                  5       u  p[        R                  R                  U R	                  5       S5      n[
           [        USX5      nS S S 5        U R                  WUS-   5        U R                  [        R                  R                  U5      5        SSU/n[        R                  " U5          [        R                  " U[        R                  S9  S S S 5        g ! , (       d  f       N= f! [        R                   aq  nUR                   R#                  SS9m[%        U4S	 jS
 5       5      (       a  U R'                  S5        SnU R)                  UR+                  UT5      5         S nANS nAff = f! , (       d  f       g = f)Nr  r  r!  r;  z-t)stderrreplace)r   c              3   ,   >#    U  H	  oT;   v   M     g 7fr*   rC   )r  messagedetailss     r%   r  2TestArchives.test_unzip_zipfile.<locals>.<genexpr>u  s       :g') :s   )zunrecognized option: tzinvalid option -- tzunzip doesn't support -tz{}

**Unzip Output**
{})r  r+   r8   r9   r   r  r   r   r   r  r   r	  r   check_outputSTDOUTCalledProcessErroroutputdecodeanyr  r
  format)	r   r  r7  r   r  r7  r   msgrA  s	           @r%   test_unzip_zipfileTestArchives.test_unzip_zipfilea  s>    "//1GGLL;	"9eXHG  	)f"45w/0 D'*!!(+
4''
8I8IJ ,+ X 00 4**++9+=  :    MM"<=2		#**S'2334 ,+s=   C*<F>#C;*
C8;F A'E;6F;F  F
Fc                     U R                  5       n[        R                  R                  US5      nU R	                  [
        [        US5        g )Nr  re  )r   r+   r8   r9   r   
ValueErrorr   )r   r   r   s      r%   test_make_archiveTestArchives.test_make_archive}  s5    GGLL3	*lIuEr'   c           	         [         (       a3  [        R                  " S5      S   n[        R                  " S5      S   nOS=pU R                  5       u  p4[        R                  R                  U R                  5       S5      n[        USX4UUS9nU R                  [        R                  R                  U5      5        [        USX45      nU R                  [        R                  R                  U5      5        [        USX4X!S9nU R                  [        R                  R                  U5      5        [        USX4SSS9nU R                  [        R                  R                  U5      5        g )	Nr   r#  r  r  ownergroupr  	kjhkjhkjgoihohoh)UID_GID_SUPPORTgrpgetgrgidpwdgetpwuidr  r+   r8   r9   r   r   r   r  )r   rT  rS  r  r7  r   ri   s          r%   test_make_archive_owner_group*TestArchives.test_make_archive_owner_group  s    ?LLOA&ELLOA&E""E!//1GGLL;	9eXu!&(s+,9eX@s+,9eX!&5s+,9eX!,I?s+,r'   Requires grp and pwd supportc                    U R                  5       u  p[        R                  R                  U R	                  5       S5      n[
        R                  " S5      S   n[        R                  " S5      S   n[        R                  " U5         [           [        USUSXTS9nS S S 5        S S S 5        U R                  [        R                  R                  W5      5        [        R                   " U5      n UR#                  5        H;  nU R%                  UR&                  S5        U R%                  UR(                  S5        M=     UR+                  5         g ! , (       d  f       N= f! , (       d  f       N= f! UR+                  5         f = f)Nr  r   r  r  rR  )r  r+   r8   r9   r   rX  rY  rZ  r[  r   r	  r  r   r   r  r  r<   
getmembersr   uidgidrZ  )	r   r  r7  r   rT  rS  archive_namer  members	            r%   test_tarfile_root_owner$TestArchives.test_tarfile_root_owner  s    "//1GGLL;	Q"Q"!!(+X'	7Hf.3BL .6+
 	|45 ,,|,	!,,.  Q/  Q/ / MMO .6X++ MMOs1   	E$EE$3AE5 
E!	E$$
E25Fc                   ^ ^ [         R                  " 5       mUU 4S jn[        SU/ S5         [           T R	                  [
        5         [        SS5        S S S 5        S S S 5        T R                  [         R                  " 5       T5        [        S5        g ! , (       d  f       NG= f! , (       d  f       NP= f! [        S5        f = f)Nc                    > TR                  SU5        TR                  U S5        TR                  [        R                  " 5       T5        [	        5       eNr  basename)r!  r   r+   rv   RuntimeError)r   r7  kwcurrent_dirr   s      r%   archiver<TestArchives.test_make_archive_cwd_default.<locals>.archiver  sA    Z,Y
3RYY[+6. r'   re  xxx filerj  )	r+   rv   r   r  r   rk  r   r   r   )r   rn  rm  s   ` @r%   test_make_archive_cwd_default*TestArchives.test_make_archive_cwd_default  s    iik	! 	 xZ@	-&&|4 U3 5  RYY[+6%e,	 54 
 &e,s:   B: B)
BB)-B: 
B&	"B))
B73B: :Cc                    ^ ^^^^ [         R                  " 5       mT R                  5       mUUU 4S jn/ mUU4S jn[        SU/ S5         [        R
                  " [         SU5       mT R                  [        5         [        SSTS9  S S S 5        S S S 5        T R                  [         R                  " 5       T5        T R                  TTT/5        [        S5        g ! , (       d  f       N[= f! , (       d  f       Nd= f! [        S5        f = f)Nc                    > TR                  SU5        TR                  U [        R                  R	                  TS5      5        TR                  [        R
                  " 5       T5        [        5       eri  )r!  r   r+   r8   r9   rv   rk  r   r7  rl  rm  r  r   s      r%   rn  4TestArchives.test_make_archive_cwd.<locals>.archiver  sP    Z,Y[*(MNRYY[(3. r'   c                 8   > TR                  U 5        T" U 5        g r*   r   )r8   r  
orig_chdirs    r%   _chdir2TestArchives.test_make_archive_cwd.<locals>._chdir  s    KKtr'   re  rp  chdirrj  r  )r+   rv   r   r   r   r^  r   rk  r   r   r   )r   rn  ry  rm  r  rx  r  s   `  @@@@r%   test_make_archive_cwd"TestArchives.test_make_archive_cwd  s    iik<<>	!
 	 	 xZ@	-""2w7:&&|4 UXF 5 8 RYY[+6THk#:;%e, 54 87 &e,s=   D  'C/=C	C/AD  
C,	(C//
C=9D   Dc                   ^ ^^ [         R                  " 5       mT R                  5       mUUU 4S jnSUl        [	        SU/ S5         [
           T R                  [        5         [        SSTS9  S S S 5        S S S 5        T R                  [         R                  " 5       T5        [        S5        g ! , (       d  f       NG= f! , (       d  f       NP= f! [        S5        f = f)Nc                    > TR                  U S5        TR                  US   T5        TR                  [        R                  " 5       T5        [        5       e)Nrj  r  )r   r+   rv   rk  ru  s      r%   rn  FTestArchives.test_make_archive_cwd_supports_root_dir.<locals>.archiver  sE    Y
3R
^X6RYY[+6. r'   Tre  rp  rj  r|  )r+   rv   r   supports_root_dirr   r  r   rk  r   r   r   )r   rn  rm  r  s   ` @@r%   'test_make_archive_cwd_supports_root_dir4TestArchives.test_make_archive_cwd_supports_root_dir  s    iik<<>	!
 &*"xZ@	-&&|4 UXF 5  RYY[+6%e,	 54 
 &e,s<   C C#B0/C7-C 0
B>	:C
CC Cc                 X   U R                  5       n[        R                  " U5         [           U R	                  [        SS5      S5        U R                  [        R                  R                  S5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Ntestr  ztest.tar
r   r   r	  r  r   r   r   r+   r8   r  r   r  s     r%   test_make_tarfile_in_curdir(TestArchives.test_make_tarfile_in_curdir  sd    <<>!!(+X\&%8*EOOBGGNN:67 .6++XX++#   BAB
9B

B	B
B)c                 X   U R                  5       n[        R                  " U5         [           U R	                  [        SS5      S5        U R                  [        R                  R                  S5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  r  ztest.zipr  r  s     r%   test_make_zipfile_in_curdir(TestArchives.test_make_zipfile_in_curdir  sf     <<>!!(+X\&%8*EOOBGGNN:67 .6++XX++r  c                    U R                  [        [        SS5        U R                  [        [        SS S5        U R                  [        [        SS SS/5        [        SS S/S5        [        5        VVs/ s H  u  pUPM	     nnnU R	                  SU5        [        S5        [        5        VVs/ s H  u  pUPM	     nnnU R                  SU5        g s  snnf s  snnf )	Nre  r   c                      [         $ r*   xrC   r'   r%   <lambda>;TestArchives.test_register_archive_format.<locals>.<lambda>      Qr'   c                      [         $ r*   r  rC   r'   r%   r  r    r  r'   )r   rr   )r   rr   r   c                      [         $ r*   r  rC   r'   r%   r  r  	  s    qr'   rp  )r   r   r   r   r%  r   r!  )r   rj   paramsformatss       r%   test_register_archive_format)TestArchives.test_register_archive_format  s    )%<eQG)%<eY	)%<eY!9-	/ 	 y6(JG,?,AB,ALD4,ABeW%!%(,?,AB,ALD4,AB( C Cs   8C3Cc           
         U R                  [        R                  [         S35        S GH  nU R	                  US9   U R                  5       n[        R                  R                  US5      nU R                  [        5       n[        [        SX1S9  S S S 5        U R                  WR                  R                  [        R                  5        U R                  UR                  R                   U5        U R#                  [        R                  R%                  [         S35      5        [&        R(                  " US9u  pV[        R*                  " U5        U R                  [,        5       n[        [        SXaS9  S S S 5        U R                  UR                  R                  [        R.                  5        U R                  UR                  R                   U5        U R#                  [        R                  R%                  [         S35      5        S S S 5        GM     g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       GM)  = f)Nr  FTr  nonexistingr  r   r   r   rx   r   subTestr   r+   r8   r9   r   r   r   r   r   r"   ENOENTr   r   r   rt   rl  rZ  r   ENOTDIRr   r  rP  nonexisting_filer   tmp_fdtmp_files          r%   test_make_tarfile_rootdir_nodir,TestArchives.test_make_tarfile_rootdir_nodir  s   	((VHD/:$Gg.,,.#%77<<#G &&'89R 0@R :  !3!3U\\B  !6!68HI  6($!@A $,#3#3#@  &&'9:b J ;  !3!3U]]C  !6!6A  6($!@A# /. %
 :9 ;: /.>   AIH CI+H2;BI 
H/*I2
I <I
I	c           
         U R                  [        R                  [         S35        S GH  nU R	                  US9   U R                  5       n[        R                  R                  US5      nU R                  [        5       n[        [        SX1S9  S S S 5        U R                  WR                  R                  [        R                  5        U R                  UR                  R                   U5        U R#                  [        R                  R%                  [         S35      5        [&        R(                  " US9u  pV[        R*                  " U5        U R                  [,        5       n[        [        SXaS9  S S S 5        U R                  UR                  R                  [        R.                  5        U R                  UR                  R                   U5        U R#                  [        R                  R%                  [         S35      5        S S S 5        GM     g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       GM)  = f)Nr!  r  r  r  r  r   r  r  s          r%   test_make_zipfile_rootdir_nodir,TestArchives.test_make_zipfile_rootdir_nodir(  s    		((VHD/:$Gg.,,.#%77<<#G &&'89R 0@R :  !3!3U\\B  !6!68HI  6($!@A $,#3#3#@  &&'9:b J ;  !3!3U]]C  !6!6A  6($!@A# /. %
 :9 ;: /.r  c                     U R                   " US 40 UD6  U R                   " U[        40 UD6  U R                   " U[        40 UD6  g )Nc                     U $ r*   rC   r8   s    r%   r  3TestArchives.check_unpack_archive.<locals>.<lambda>D  s    r'   )#check_unpack_archive_with_converterr   )r   rI  r$   s      r%   check_unpack_archive!TestArchives.check_unpack_archiveB  sN    00%	1)/	100H	( &	(00LVLr'   c                    U R                  5       u  pE[        U5      nUR                  S5        [        R                  R                  U R                  5       S5      n[        XqXE5      nU R                  5       n	[        U" U5      U" U	5      40 UD6  U R                  [        U	5      U5        U R                  5       n
[        U" U5      U" U
5      4SU0UD6  U R                  [        U
5      U5        U R                  [        R                  5         [        U" [        5      40 UD6  S S S 5        U R                  [        5         [        U" [        5      4SS0UD6  S S S 5        g ! , (       d  f       NE= f! , (       d  f       g = f)Nr  r  rI  re  )r  rh   rm  r+   r8   r9   r   r   r   r   r   r   	ReadErrorr   rN  )r   rI  	converterr$   r  r7  expectedr   r   r  tmpdir3s              r%   r  0TestArchives.check_unpack_archive_with_converterI  s9   !//1H% GGLL;		8F ,,.y*Ig,>I&I'*H5 ,,.y*Ig,> 	!v 	!	!'*H5v//09V,77 1z*9V,EUEfE +* 10**s   E(E9(
E69
Fc                     U R                  USS9  U R                  USS9  [        R                  " S[        45         U R                  U5        S S S 5        g ! , (       d  f       g = f)Nfully_trustedfilterdatazPython 3.14)r  r   check_warningsDeprecationWarning)r   rI  s     r%   check_unpack_tarball!TestArchives.check_unpack_tarballa  s]    !!&!A!!&!8++ 235%%f-5 5 5s   A
A&c                 &    U R                  S5        g )Nr  r  r  s    r%   test_unpack_archive_tar$TestArchives.test_unpack_archive_tarh  s    !!%(r'   c                 &    U R                  S5        g )Nr  r  r  s    r%   test_unpack_archive_gztar&TestArchives.test_unpack_archive_gztark      !!'*r'   c                 &    U R                  S5        g )Nbztarr  r  s    r%   test_unpack_archive_bztar&TestArchives.test_unpack_archive_bztaro  r  r'   z(AIX MAXDATA must be 0x20000000 or largerc                 &    U R                  S5        g )Nxztarr  r  s    r%   test_unpack_archive_xztar&TestArchives.test_unpack_archive_xztars  s     	!!'*r'   c                     U R                  S5        U R                  [        5         U R                  SSS9  S S S 5        g ! , (       d  f       g = f)Nr  r  r  )r  r   r   r  s    r%   test_unpack_archive_zip$TestArchives.test_unpack_archive_zipx  s=    !!%(y)%%eF%; *))s   A
Ac                   ^  [        5       nU 4S jn[        SSS/US/5        [        SS5        T R                  [        [        SS/U5        [        S5        [        SS/U5        T R                  SS/S	4[        5       5        T R                  SS/S	4[        5       5        [        S5        T R                  [        5       U5        g )
Nc                 r   > TR                  US5        TR                  U S5        TR                  US5        g )Nr   	stuff.booxx)r   )r   extract_dirextrar   s      r%   _boo/TestArchives.test_unpack_registry.<locals>._boo  s3    UA&X{3[$/r'   Booz.booz.b2)r  r   r  r  Boo2 )	r   r	   r   r   r
   r   r%  r!  r   )r   r  r  s   `  r%   test_unpack_registry!TestArchives.test_unpack_registry~  s    $&	0
 	uvuotl^L{D) 	-)?!(D	* 	!'vx6vx,.@.BC%&2.0B0DE 	!(+-w7r'   rC   N)r  )0r   r   r   r   r  r  r   requires_zlibr  r
  r  r  r  r   whichr  r-  r0  r3  r9  rK  rO  r\  rW  re  rq  r}  r  r  r  r  r  r  r  r  r  r  r  requires_bz2r  requires_lzmar  r   r   r  r  r  r   rC   r'   r%   r  r  S  s    " '8 '8R H H8% e,68*18 *1X %9 %9N H H: # # e,6888 80 g.8:4: 42F
 - -6 *HI J *-"-.-&8 8 8) B. B B2MF0.) + + + + __S--/YZ+ [ + < <
8r'   r  c                       \ rS rSr\R
                  " \" \S5      S5      S 5       r\R
                  " \	S5      \R
                  " \" \
S5      S5      S 5       5       rS	rg
)TestMisci  
disk_usagez)disk_usage not available on this platformc                 6   [         R                  " [        R                  R	                  [
        5      5      nS H"  nU R                  [        X5      [        5        M$     U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        [         R                  " [
        5        g )N)rD   usedfreer   )r   r  r+   r8   r  r  r   r!   r   assertGreaterrD   r  assertGreaterEqualr  )r   usager]  s      r%   test_disk_usageTestMisc.test_disk_usage  s     !!"''//(";<-D!!'%"6< .5;;*5::q)

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

3 	(#r'   r^  chownzrequires os.chownc                 @  ^  T R                  5       n[        R                  " US9n[        R                  R                  US5      n[        US5        [        R                  " X#5        T R                  [        5         [        R                  " U5        S S S 5        T R                  [        5         [        R                  " USS9  S S S 5        T R                  [        5         [        R                  " USS9  S S S 5        T R                  [        5         [        R                  " US5        S S S 5        T R                  [        5         [        R                  " US	5        S S S 5        [        R                  " 5       n[        R                  " 5       nSU 4S
 jjn[        R                  " X$U5        U" X$U5        [        R                  " X$5        U" X$5        [        R                  " X$S9  U" X$5        [        R                  " X%S9  U" X%S9  [        R                  " XU5        U" XU5        [        R                  " X5        U" X5        [        R                  " XS9  U" X5        [        R                  " XS9  U" XS9   [         R"                  " U5      S   n[$        R&                  " U5      S   n[        R                  " X'U5        U" X$U5        [        R                  " XU5        U" XU5        [        R*                  " U[        R,                  5      n	T R/                  [        R0                  U	5        [        R                  R3                  U5      n
[        R                  R3                  U5      n[        R                  " XXYS9  U" X$U5        [        R                  " XU	S9  U" X$5        [        R                  " XU	S9  U" X%S9  [        R                  " XXYSS9  U" X$U5        [        R                  " XXYSS9  U" X$U5        [        R                  " X4SS9  U" X$5        [        R                  " XU	SS9  U" X%S9  [        R                  " XXYSS9  U" X$U5        T R                  [        5         [        R                  " X$US9  S S S 5        T R                  [4        5         [        R                  " SXEU	S9  S S S 5        T R                  [        5         [        R                  " X)S9  S S S 5        g ! , (       d  f       GNu= f! , (       d  f       GNT= f! , (       d  f       GN3= f! , (       d  f       GN= f! , (       d  f       GN= f! [(         a     GNpf = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   
chown_linkztesting chown functionznon-existing username)userznon-existing groupname)rT     spamgQ	@c                    > [         R                  " U 5      nUb  TR                  XR                  5        Ub  TR                  X#R                  5        g g r*   )r+   r  r   st_uidst_gid)r8   ra  rb  sr   s       r%   check_chown(TestMisc.test_chown.<locals>.check_chown  sC    A  hh/  hh/ r'   )rb  r   r   )rT  r   T)r   rK  FrJ  )rT  r   rK  missingfile)NN)r   rt   r   r+   r8   r9   r@   r   r   rN  r   r  LookupErrorr   getuidgetgidrZ  r[  rX  rY  KeyErrorr<   rc  r   rZ  rj  r   )r   r  r   linknamera  rb  r  r  rT  dirfdrj  baselinknames   `           r%   
test_chownTestMisc.test_chown  s    ,,.??w/77<<6H67


8&z*LL" + {+LL(?@ , {+LL)AB , y)LL7+ * y)LL4( * iikiik	0 	XC(H3'X#H"X(H"X)H&W3'G#&W"G!W'G!W(G%
	+<<$Q'DLL%a(E
 LL/s+LL.c*-%(77##H-ww''1XC6H3'X51H"X7H&XCtLH3'XCuMH3'XD9H"\UERH&\4PH3'y)LLw7 * 01LL? 2 z*LL0 +*e +* ,+ ,+ *) *)D  		< *) 21 +*sr   =T1T$T&T8U
2U =U-0U>$V
T
T#&
T58
U

U
U*)U*-
U;>
V
VrC   N)r   r   r   r   r  r  rs   r   r  rW  r+   r  r   rC   r'   r%   r  r    sp    6DF$F$ *HIW-/BCZ1 D JZ1r'   r  c                   $   \ rS rSrS r\" \R                  5      rS r	S r
S rS rS r\R                  " \R"                  S:g  S	5      S
 5       r\R                  " \R"                  S:H  S5      S 5       r\R                  " \R"                  S:H  S5      S 5       r\R,                  S 5       rS rS r\R                  " \R"                  S:H  S5      S 5       rS rS rS rS rS rS r \R                  " \R"                  S:H  S5      S 5       r!\R                  " \R"                  S:H  S5      S 5       r"\R                  " \R"                  S:H  S5      S 5       r#\R                  " \R"                  S:H  S5      S 5       r$\R                  " \R"                  S:H  S5      S 5       r%\R                  " \R"                  S:H  S5      S 5       r&\R                  " \R"                  S:H  S5      S  5       r'\R                  " \R"                  S:H  S5      S! 5       r(\R                  " \R"                  S:H  S5      S" 5       r)\R                  " \R"                  S:H  S5      S# 5       r*\R                  " \R"                  S:H  S5      S$ 5       r+S%r,g&)'	TestWhichi		  c                    U R                  SS9n[        R                  R                  U[        S-   5      n[        R
                  " U5        [        R                  R                  U[        S-   5      U l        [        R
                  " U R                  5        [        R                  R                  U[        S-   5      U l        [        R
                  " U R                  5        [        S-   U l        [        R                  R                  U R                  U R                  5      U l	        U R                  U R                  5        U R                  U l        [        R                  U l        SU l        g )NTmp)r   z-basedirz-dirz-dir2z.Exez.EXE)r   r+   r8   r9   r   r   rp   	other_dirfilefilepathr@   env_pathr  ext)r   temp_dirr7  s      r%   setUpTestWhich.setUp	  s    <<u<-77<<&:*=>
77<<&6/:
h0@A
  VO	TXXtyy9'iir'   c                 H    [        U5        [        R                  " US5        g )Ni  )r@   r+   r  )r   r8   s     r%   r@   TestWhich.create_file	  s    D
ur'   c                     U R                  [        R                  R                  U5      [        R                  R                  U5      5        g r*   )r   r+   r8   normcase)r   r  r  s      r%   assertNormEqualTestWhich.assertNormEqual#	  s0    ))&12773C3CH3MNr'   c                     [         R                  " U R                  U R                  S9nU R	                  XR
                  5        g Nr  )r   r  r  rp   r   r  r   r/  s     r%   
test_basicTestWhich.test_basic&	  s,    \\$))$((3]]+r'   c                     [         R                  " U R                  U R                  S9nU R	                  XR                  5        g r  )r   r  r  r  r   r  s     r%   test_absolute_cmdTestWhich.test_absolute_cmd+	  s.     \\$--dnn=]]+r'   c                     [         R                  R                  U R                  5      u  p[         R                  R	                  X R
                  5      n[        R                  " US9   [        R                  " X0R                  S9nU R                  XC5        S S S 5        [        R                  " U R                  S9   [        R                  " X1S9nU R                  U5        S S S 5        g ! , (       d  f       N[= f! , (       d  f       g = fr  )r+   r8   r   rp   r9   r  r   r	  r   r  r  r   assertIsNone)r   r7  tail_dirr  r/  s        r%   test_relative_cmdTestWhich.test_relative_cmd1	  s      WW]]4884'',,x3!!x0gNN;BR) 1 !!txx0g5Bb! 10	 10 10s   )0C.?&C?.
C<?
Dr  ztest is for non win32c                     [         R                  " U R                  S9   [        R                  " U R
                  U R                  S9nU R                  U5        S S S 5        g ! , (       d  f       g = fr  )r   r	  rp   r   r  r  r  r"  r  s     r%   test_cwd_non_win32TestWhich.test_cwd_non_win32>	  sH     !!txx0diidnn=Bb! 100s   ;A##
A1ztest is for win32c           	         [         R                  R                  U R                  5      n[        R
                  " U R                  S9   [        R                  R                  SSS9   [        R                  " U R                  U R                  S9nU R                  U[         R                  R                  U R                  U R                  5      5        S S S 5        [        R                  R                  SSS9   [        R                  " U R                  U R                  S9nU R!                  U5        S S S 5        S S S 5        g ! , (       d  f       Nx= f! , (       d  f       N(= f! , (       d  f       g = f)Nr  shutil._win_path_needs_curdirTreturn_valueF)r+   r8   r  rp   r   r	  r  r:  r;  r   r  r  r  r   r9   r  r"  )r   r7  r/  s      r%   test_cwd_win32TestWhich.test_cwd_win32G	  s     77??488,!!txx0$$%DSW$X\\$))$..A  RWW\\$++tyy%IJ Y $$%DSX$Y\\$))$..A!!"% Z 10XX ZY 10s=   E)'A.E&E);;E6E)
E	E)
E&	"E))
E7c           	         [         R                  R                  U R                  U R                  5      nU R                  U5        [        R                  R                  SSS9   [        R                  " U R                  S9   [        R                  " U R                  U R                  S9nU R                  U[         R                  R                  U R                  U R                  5      5        S S S 5        [        R                  " U R                  S9   [        R                  " U R                  U R                  S9nU R                  U[         R                  R                  U R                  U R                  5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Nr*  Tr+  r  )r+   r8   r9   r  r  r@   r  r:  r;  r   r	  rp   r   r  r   r  )r   other_file_pathr/  s      r%   *test_cwd_win32_added_before_all_other_path4TestWhich.test_cwd_win32_added_before_all_other_pathU	  s    '',,t~~tyyA)]]  !@t T%%4884\\$))$..A  RWW\\$++tyy%IJ 5 %%4>>:\\$))$((;  RWW\\$++tyy%IJ ;	 UT44 ;:	 UTs>   $F8A.F1&F8A.F'F8
F$	 F8'
F5	1F88
Gc                 ~   [         R                  " U R                  [        R                  5        [         R
                  " U R                  [         R                  5      (       a  U R                  S5        [        R                  " U R                  U R                  [         R                  S9nU R                  U5        g )Nzcan't set the file read-onlyr8   r_   )r+   r  r  r  r  accessW_OKr  r   r  r  rp   r"  r  s     r%   test_non_matching_mode TestWhich.test_non_matching_modeb	  sl     	-99T]]BGG,,MM89\\$))$((A"r'   c                 f   [         R                  R                  U R                  5      u  p[        R
                  " US9   [        R                  " U R                  US9nU R                  U[         R                  R                  X R                  5      5        S S S 5        g ! , (       d  f       g = fr  )r+   r8   r   rp   r   r	  r   r  r  r   r9   )r   r7  r#  r/  s       r%   test_relative_pathTestWhich.test_relative_pathk	  sj    WW]]4884!!x0diih7BRh		!BC 100s    AB""
B0c                 d    [         R                  " SU R                  S9nU R                  U5        g )Nzfoo.exer  )r   r  rp   r"  r  s     r%   test_nonexistent_fileTestWhich.test_nonexistent_fileq	  s$    \\)$((3"r'   zpathext check is Windows-onlyc                     [         R                  " U R                  S S U R                  S9nU R	                  XR
                  S S U R                  -   5        g )Nr  )r   r  r  rp   r   r  r  r  s     r%   test_pathext_checkingTestWhich.test_pathext_checkingv	  sD    
 \\$))CR.txx8]]3B/$((:;r'   c                     [         R                  " 5        nU R                  US'   [        R                  " U R
                  5      nU R                  X R                  5        S S S 5        g ! , (       d  f       g = fNPATH)r   EnvironmentVarGuardr  r   r  r  r   r  r   envr/  s      r%   test_environ_pathTestWhich.test_environ_path~	  sM    **,--CKdii(BR/ -,,s   AA**
A8c           	      H   [         R                  " 5        nSUS'   [        R                  R	                  SU R
                  SS9   [        R                  " [        SU R
                  5         [         R                  " U R
                  5         [        R                  " U R                  5      nU R                  U5        S S S 5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N'= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = f)Nr  rE  
os.confstrTr,  createdefpath)r   rF  r  r:  r;  rp   r   r^  r+   r	  r   r  r  r"  rG  s      r%   test_environ_path_empty!TestWhich.test_environ_path_empty	  s    **,CK$$\,0 % 2""2y$((;%%dhh/\\$)),!!"% 0 <2 -,
 0/ <;2 2 -,sS   /D'D,!C12C 	?C1DD 
C.*C11
C?;D
D	D
D!c           	      Z   U R                   n[        R                  S:X  a*  [        R                  R                  U R                  U5      n[        R                  " 5        n[        R                  US'   [        R                  R                  SU R                  SS9   [        R                  " [        SU R                  5         [         R"                  " U R                   5      nU R%                  U5        [        R&                  " U R                  5         [         R"                  " U R                   5      nU R)                  X15        S S S 5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N'= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = f)Nr  rE  rL  TrM  rO  )r  r   r  r+   r8   r9   r  r   rF  pathsepr  r:  r;  rp   r   r^  r   r  r"  r	  r   )r   expected_cwdrH  r/  s       r%   test_environ_path_cwdTestWhich.test_environ_path_cwd	  s   yy<<7"77<<\BL **,**CK$$\,0 % 2""2y$((;\\$)),!!"% ))$((3dii0B$$R6 4 <2 -, 43 <;2 2 -,sU    =F'FAE:2E)	E:FF)
E73E::
FF
F	F
F*c                 B   [         R                  " 5        nUS	 [        R                  R	                  S[
        SS9   [        R                  " [        SU R                  5         [        R                  " U R                  5      nS S S 5        S S S 5        U R                  WU R                  5        [        R                  R	                  SU R                  SS9   [        R                  " [        SS5         [        R                  " U R                  5      nS S S 5        S S S 5        U R                  X R                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N\= f! , (       d  f       Ne= f! , (       d  f       g = f)NrE  rL  T)r   rN  rO  rM  r  )r   rF  r  r:  r;  rN  r   r^  r+   rp   r   r  r  r   r  rG  s      r%   test_environ_path_missing#TestWhich.test_environ_path_missing	  s   **,F $$\z,0 % 2""2y$((;\\$)), <2 R/ $$\,0 % 2""2y"5\\$)), 62 R/ -, <;2 2 652 2 -,sk   'F'E$!EEAFE?7!E.E? #F
EE
E+	'F.
E<8E??
F		F
Fc                    [         R                  R                  U R                  5      n[        R
                  " U R                  S9   [        R                  " 5        nU R                  US'   [        R                  " U R                  SS9nU R                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  rE  r  )r+   r8   r  rp   r   r	  rF  r  r   r  r  r"  )r   r7  rH  r/  s       r%   test_empty_pathTestWhich.test_empty_path	  s    77??488,!!txx0**,--CKdiib1Bb! - 10,, 10s%   C A B/C /
B=	9C  
Cc                     [         R                  " 5        nUS	 [        R                  " U R                  5      nU R                  U5        S S S 5        g ! , (       d  f       g = frD  )r   rF  r   r  r  r"  rG  s      r%   test_empty_path_no_PATH!TestWhich.test_empty_path_no_PATH	  sC    **,Fdii(Bb! -,,s   5A
A"ztest specific to Windowsc                    SnU R                  [        5      nX R                  U5      -   n[        R                  R	                  U R
                  U5      nU R                  U5        [        R                  " 5        nXS'   U R                  [        R                  " X R
                  S9U5        U R                  [        R                  " X0R
                  S9U5        S S S 5        g ! , (       d  f       g = f)N.xyzPATHEXTr  to_text_typer	  r+   r8   r9   rp   r@   r   rF  r   r   r  r   r  cmdcmdextr  rH  s         r%   test_pathextTestWhich.test_pathext	  s    (((--77<<&1"**, 	NV\\#HH=xHV\\&xx@(K -,,   ;A!C%%
C3c                    SnU R                  [        5      nX R                  U5      -   n[        R                  R	                  U R
                  U5      nU R                  U5        [        R                  " 5        nUS-   US'   U R                  [        R                  " X R
                  S9U5        U R                  [        R                  " X0R
                  S9U5        S S S 5        g ! , (       d  f       g = f)Nra  ;rb  r  rc  re  s         r%   test_pathext_with_empty_str%TestWhich.test_pathext_with_empty_str	  s    (((--77<<&1"**, 3YC	NV\\#HH=xHV\\&xx@(K -,,s   ;A%C))
C7c                    SnU R                  [        5      nX R                  U5      -   n[        R                  R	                  U R
                  U5      nU R                  U5        [        R                  " 5        nXS'   U R                  [        R                  " X R
                  S9U5        U R                  [        R                  " X0R
                  S9U5        S S S 5        g ! , (       d  f       g = f)Nz.foo.barrb  r  rc  re  s         r%   $test_pathext_with_multidot_extension.TestWhich.test_pathext_with_multidot_extension	  s    (((--77<<&1"**, 	NV\\#HH=xHV\\&xx@(K -,,rj  c                    U R                  [        5      nXR                  S5      -   n[        R                  R	                  U R
                  U5      nU R                  U5        [        R                  " 5        nSUS'   U R                  [        R                  " XR
                  S95        U R                  [        R                  " X R
                  S95        SUS'   U R                  [        R                  " XR
                  S9U5        U R                  [        R                  " X R
                  S9X0R                  S5      -   5        SUS'   U R                  [        R                  " XR
                  S9U5        U R                  [        R                  " X R
                  S9X0R                  S5      -   5        S S S 5        g ! , (       d  f       g = f)Nr  ra  rb  r  z.xyz;.z.xyz;..)rd  r	  r+   r8   r9   rp   r@   r   rF  r"  r   r  r   )r   rf  cmddotr  rH  s        r%    test_pathext_with_null_extension*TestWhich.test_pathext_with_null_extension	  sN   (((--77<<#."**,#C	Nfll3XX>?fll6AB%C	NV\\#HH=xHV\\&xx@%(9(9#(>>@&C	NV\\#HH=xHV\\&xx@%(9(9#(>>@ -,,s   9EG
Gc                    SnU R                  [        5      nX R                  U5      -   nU R                  S5      n[        R                  R	                  U R
                  U5      nU R                  U5        [        R                  " 5        nUS-   US'   U R                  [        R                  " X R
                  S9U5        U R                  [        R                  " X0R
                  S9U5        U R                  [        R                  " X$-   U R
                  S95        U R                  [        R                  " X4-   U R
                  S95        S S S 5        g ! , (       d  f       g = f)Nra  r  rb  r  )rd  r	  r+   r8   r9   rp   r@   r   rF  r   r   r  r"  )r   r  rf  rg  dotr  rH  s          r%   $test_pathext_extension_ends_with_dot.TestWhich.test_pathext_extension_ends_with_dot	  s    (((--$77<<&1"**, 3YC	NV\\#HH=xHV\\&xx@(Kfll39488DEfll6<dhhGH -,,s   CE
E(c                    SnU R                  [        5      nX R                  U5      -   n[        R                  R	                  U R
                  U5      nU R                  U5        [        R                  " 5        n[        R                  " U R
                  5      US'   XS'   U R                  [        R                  " U5      U5        U R                  [        R                  " U5      U5        S S S 5        g ! , (       d  f       g = f)Nra  rE  rb  )rd  r	  r+   r8   r9   rp   r@   r   rF  fsdecoder   r   r  re  s         r%   %test_pathext_applied_on_files_in_path/TestWhich.test_pathext_applied_on_files_in_path

  s    (((--77<<&1"**,++dhh/CK 	NV\\#.9V\\&18<	 -,,s   ;A4C88
Dc                    [         R                  R                  SSS9 nU R                  [        R
                  " S[        R                  5      5        UR                  S5        UR                  5         U R                  [        R
                  " SS5      5        UR                  5         S S S 5        [         R                  R                  SSS9 nU R                  [        R
                  " S[        R                  5      5        UR                  S5        S S S 5        g ! , (       d  f       N{= f! , (       d  f       g = f)Nz&_winapi.NeedCurrentDirectoryForExePathTr+  dontcarer   F)r  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_curdir$TestWhich.test_win_path_needs_curdir
  s    ]]  !IX\ ]aqOOF99*bggNO44Z@'')OOF99*aHI..0 ^ ]]  !IX] ^brV:::rwwOP44Z@ _^ ^] _^s   BD AD1 
D.1
D?c                    U R                   nU R                  [        R                  " XR                  S9U R
                  5        U R                  [        R                  " XR                  [        R                  S9U R
                  5        XR                  S5      -   n[        R                  R                  U R                  U5      nU R                  U5        U R                  [        R                  " XR                  S9U R
                  5        U R                  [        R                  " XR                  [        R                  S9U R
                  5        U R                  [        R                  " X R                  S9U5        U R                  [        R                  " X R                  [        R                  S9U5        g Nr  r4  z.com)r  r  r   r  rp   r  r+   F_OKrd  r8   r9   r@   )r   rf  cmd2r0  s       r%   $test_same_dir_with_pathext_extension.TestWhich.test_same_dir_with_pathext_extension%
  s!   iiV\\#HH=t}}MV\\#HH277K!]]	, &&v..'',,txx6) 	V\\#HH=t}}MV\\#HH277K!]]	,V\\$XX>PV\\$XXBGGL,	.r'   c                    U R                   S S nU R                  [        R                  " XR                  S9U R
                  5        U R                  [        R                  " XR                  [        R                  S9U R
                  5        [        R                  R                  U R                  U5      nU R                  U5        U R                  [        R                  " XR                  S9U R
                  5        U R                  [        R                  " XR                  [        R                  S9U5        U R                  [        R                  " U R                   U R                  S9U R
                  5        U R                  [        R                  " U R                   U R                  [        R                  S9U R
                  5        g Nr@  r  r4  )r  r  r   r  rp   r  r+   r  r8   r9   r@   )r   rf  r0  s      r%   'test_same_dir_without_pathext_extension1TestWhich.test_same_dir_without_pathext_extension9
  s$   iinV\\#HH=t}}MV\\#HH277K!]]	, '',,txx5) 	V\\#HH=t}}MV\\#HH277K,	.V\\$))$((CT]]SV\\$))$((Q!]]	,r'   c                 4   U R                   n[        R                  R                  [        R                  " U R
                  5      [        R                  " U R                  5      /5      nU R                  [        R                  " XS9U R                  5        U R                  [        R                  " X[        R                  S9U R                  5        XR                  S5      -   n[        R                  R                  U R
                  U5      nU R                  U5        U R                  [        R                  " XS9U5        U R                  [        R                  " X[        R                  S9U5        U R                  [        R                  " X2S9U5        U R                  [        R                  " X2[        R                  S9U5        [        R                  R                  [        R                  " U R                  5      [        R                  " U R
                  5      /5      nU R                  [        R                  " XS9U R                  5        U R                  [        R                  " X[        R                  S9U R                  5        g r  )r  r+   rS  r9   r{  r  rp   r  r   r  r  r  rd  r8   r@   r   )r   rf  search_pathr  r0  s        r%   %test_dir_order_with_pathext_extension/TestWhich.test_dir_order_with_pathext_extensionN
  s   iijjoor{{4>>'B'){{488'<'> ? 	V\\#@$--PV\\#bggN!]]	, &&v..'',,t~~t<) 	V\\#@/RV\\#bggN,	. 	V\\$A?SV\\$rwwO,	. jjoor{{488'<'){{4>>'B'D Ec<dmmLc"''J	(r'   c                 |   U R                   S S n[        R                  R                  [        R                  " U R
                  5      [        R                  " U R                  5      /5      nU R                  [        R                  " XS9U R                  5        U R                  [        R                  " X[        R                  S9U R                  5        [        R                  R                  U R
                  U5      nU R                  U5        U R                  [        R                  " XS9U R                  5        U R                  [        R                  " X[        R                  S9U5        U R                  [        R                  " U R                   US9U R                  5        U R                  [        R                  " U R                   U[        R                  S9U R                  5        [        R                  R                  [        R                  " U R                  5      [        R                  " U R
                  5      /5      nU R                  [        R                  " XS9U R                  5        U R                  [        R                  " X[        R                  S9U R                  5        g r  )r  r+   rS  r9   r{  r  rp   r  r   r  r  r  r8   r@   )r   rf  r  r0  s       r%   (test_dir_order_without_pathext_extension2TestWhich.test_dir_order_without_pathext_extensionl
  s   iinjjoor{{4>>'B'){{488'<'> ? 	V\\#@$--PV\\#bggN!]]	, '',,t~~s;) 	V\\#@$--PV\\#bggN,	. 	V\\$))+FVV\\$))+BGGT!]]	, jjoor{{488'<'){{4>>'B'D EV\\#@$--PV\\#bggN!]]	,r'   )r  rp   r  r  r  r  r  N)-r   r   r   r   r  staticmethodr+   r{  rd  r@   r  r  r  r$  r  r  r   r  r'  r-  r1  r   r  r7  r:  r=  rA  rI  rP  rU  rX  r[  r^  rh  rm  rp  rt  rx  r|  r  r  r  r  r  r   rC   r'   r%   r  r  		  s   "  ,LO,
," 002"2" 0,.
&.
& 0,.	K.	K ## $D
 08:<:<0	&7&0$"" 02LM	L N	L 02LM	L N	L 02LM	L N	L 02LM@ N@$ 02LMI NI 02LM
= N
= 02LM
A N
A 02LM. N.& 02LM, N,( 02LM( N(: 02LM, N,r'   r  c                   >    \ rS rSrS r\" \R                  5      rSr	g)TestWhichBytesi
  c                    [         R                  U 5        [        R                  " U R                  5      U l        [        R                  " U R
                  5      U l        [        R                  " U R                  5      U l        [        R                  " U R                  5      U l        [        R                  " U R                  5      U l        [        R                  " U R                  5      U l	        g r*   )
r  r  r+   r   rp   r  r  r  r  r  r  s    r%   r  TestWhichBytes.setUp
  s    ;;txx(KK		*	DMM2T^^4kk$++.;;txx(r'   )r  rp   r  r  r  r  N)
r   r   r   r   r  r  r+   r   rd  r   rC   r'   r%   r  r  
  s    )  ,Lr'   r  c                      \ rS rSrS rS rS rS rS rS r	S r
\S	 5       r\S
 5       rS r\S 5       rS r\S 5       rS r\R(                  " \R,                  R.                  S5      S 5       rS rS rS rS r\R<                  \S 5       5       r\R<                  \S 5       5       r \R<                  \S 5       5       r!\R<                  \S 5       5       r"S r#S r$\S 5       r%\S 5       r&S r'\S 5       r(\R<                  S  5       r)\R<                  S! 5       r*\RV                  \R(                  " \," \S"5      =(       a    \," \-S#5      =(       a	    \," \-S$5      S%5      S& 5       5       r.S'r/g())TestMovei
  c                 D   SnU R                  5       U l        U R                  5       U l        [        R                  R                  U R                  U5      U l        [        R                  R                  U R                  U5      U l        [        U R                  S5        g )Nr   r  )	r   r  r  r+   r8   r9   r  r  r@   )r   r   s     r%   r  TestMove.setUp
  sc    ||~||~T\\8<T\\8<DMM7+r'   c                    [        US5       nUR                  5       nS S S 5        [        R                  " X5        [        US5       nU R	                  WUR                  5       5        S S S 5        U R                  [        R                  R                  U5      5        g ! , (       d  f       N= f! , (       d  f       NN= fNrX   )	r<   r]   r   mover   r   r+   r8   r   )r   r{   r|   real_dstrT   contentss         r%   _check_move_fileTestMove._check_move_file
  s|    #t_vvxH C(D!QXqvvx0 ",- _ "!s   B !B1 
B.1
B?c                 (   [        [        R                  " U5      5      n[        R                  " X5        U R                  U[        [        R                  " U5      5      5        U R                  [        R                  R                  U5      5        g r*   )	rc   r+   rd   r   r  r   r   r8   r   )r   r{   r|   r  r  s        r%   _check_move_dirTestMove._check_move_dir
  sY    "**S/*C6"**X*>#?@,-r'   c                 f    U R                  U R                  U R                  U R                  5        g r*   )r  r  r  r  s    r%   test_move_fileTestMove.test_move_file
  s     dmmT]]DMMJr'   c                 f    U R                  U R                  U R                  U R                  5        g r*   )r  r  r  r  r  s    r%   test_move_file_to_dirTestMove.test_move_file_to_dir
  s     dmmT\\4==Ir'   c                 z    [        U R                  5      nU R                  XR                  U R                  5        g r*   )r   r  r  r  r  )r   r{   s     r%   "test_move_file_to_dir_pathlike_src+TestMove.test_move_file_to_dir_pathlike_src
  s(    t}}%c<<?r'   c                 z    [        U R                  5      nU R                  U R                  XR                  5        g r*   )r   r  r  r  r  r   r|   s     r%   "test_move_file_to_dir_pathlike_dst+TestMove.test_move_file_to_dir_pathlike_dst
  s(    t||$dmmS--@r'   c                 $    U R                  5         g r*   )r  r  s    r%   test_move_file_other_fs TestMove.test_move_file_other_fs
  s     	r'   c                 $    U R                  5         g r*   )r  r  s    r%   test_move_file_to_dir_other_fs'TestMove.test_move_file_to_dir_other_fs
  s     	""$r'   c                     [         R                  " U R                  5       S9n U R                  U R                  X5        [
        R                  " U5        g ! [
        R                  " U5        f = frk  )rt   r   r   r  r  r   r   r   r  s     r%   test_move_dirTestMove.test_move_dir
  sL    //dlln5	&  w@W%IW%s   A A/c                 $    U R                  5         g r*   )r  r  s    r%   test_move_dir_other_fsTestMove.test_move_dir_other_fs
  s     	r'   c           
          U R                  U R                  U R                  [        R                  R                  U R                  [        R                  R                  U R                  5      5      5        g r*   )r  r  r  r+   r8   r9   rj  r  s    r%   test_move_dir_to_dirTestMove.test_move_dir_to_dir
  sF    T\\4<<GGLLrww'7'7'EF	Hr'   c                 $    U R                  5         g r*   )r  r  s    r%   test_move_dir_to_dir_other_fs&TestMove.test_move_dir_to_dir_other_fs
  s     	!!#r'   c           
      &   U R                  U R                  [        R                  R                  -   U R
                  [        R                  R                  U R
                  [        R                  R                  U R                  5      5      5        g r*   )r  r  r+   r8   sepr  r9   rj  r  s    r%   test_move_dir_sep_to_dir!TestMove.test_move_dir_sep_to_dir
  sS    T\\BGGKK7GGLLrww'7'7'EF	Hr'   zrequires os.path.altsepc           
      &   U R                  U R                  [        R                  R                  -   U R
                  [        R                  R                  U R
                  [        R                  R                  U R                  5      5      5        g r*   )r  r  r+   r8   altsepr  r9   rj  r  s    r%   test_move_dir_altsep_to_dir$TestMove.test_move_dir_altsep_to_dir
  sS    T\\BGGNN:DLLGGLLrww'7'7'EF	Hr'   c                     [        U R                  5        U R                  [        R                  [        R
                  U R                  U R                  5        g r*   )r@   r  r   r   r   r  r  r  r  s    r%   "test_existing_file_inside_dest_dir+TestMove.test_existing_file_inside_dest_dir
  s2    DMM"&,,T]]DLLQr'   c                     [         R                  R                  U R                  S5      nU R	                  [
        R                  [
        R                  U R                  U5        g Nr?  )r+   r8   r9   r  r   r   r   r  r  s     r%   test_dont_move_dir_in_itself%TestMove.test_dont_move_dir_in_itself
  s:    ggll4<</&,,T\\3Gr'   c           	         [         R                  " [        5         S Hz  u  p[         R                  R	                  [        U5      n[         R                  R	                  [        U5      nU R                  [        R                  " X5      SU< SU< S3S9  M|     [        R                  " [        5        g ! [        R                  " [        5        f = f)N))srcdirzsrcdir/dest)_destinsrc() wrongly concluded that dst (z) is not in src ()rJ  )
r+   r   r   r8   r9   r   r   
_destinsrcr   r   rt  s      r%   test_destinsrc_false_negative&TestMove.test_destinsrc_false_negative
  s    
	%7ggll63/ggll63/ 1 1# ;>A3"H   I 8 V$IV$   B B7 7Cc           	         [         R                  " [        5         S Hz  u  p[         R                  R	                  [        U5      n[         R                  R	                  [        U5      nU R                  [        R                  " X5      SU< SU< S3S9  M|     [        R                  " [        5        g ! [        R                  " [        5        f = f)N))r  zsrc/dest)r  z
srcdir.newr  z) is in src (r  r  )
r+   r   r   r8   r9   r   r   r  r   r   rt  s      r%   test_destinsrc_false_positive&TestMove.test_destinsrc_false_positive  s    
	%Nggll63/ggll63/  !2!23!<9<c!C ! D O V$IV$r  c                    [         R                  R                  U R                  S5      n[         R                  " U R
                  U5        [        R                  " XR                  5        U R                  [         R                  R                  U R                  5      5        U R                  [         R                  R                  U R
                  U R                  5      5        g r  )r+   r8   r9   r  r   r  r   r  r  r   rf   samefiler  s     r%   test_move_file_symlinkTestMove.test_move_file_symlink  s     ggll4<</


4==#&C't}}56((FGr'   c                     Sn[         R                  R                  U R                  U5      n[         R                  " U R
                  U5        [        R                  " X R                  5        [         R                  R                  U R                  U5      nU R                  [         R                  R                  U5      5        U R                  [         R                  R                  U R
                  U5      5        g r  )r+   r8   r9   r  r   r  r   r  r  r   rf   r  )r   r   r|   
final_links       r%   test_move_file_symlink_to_dir&TestMove.test_move_file_symlink_to_dir  s     ggll4<<2


4==#&C&WW\\$,,9
z23((
CDr'   c                 L   [         R                  R                  U R                  S5      n[         R                  R                  U R                  S5      n[         R                  " X5        [         R                  R                  U R
                  S5      n[        R                  " X#5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  U5      [         R                  R                  U5      5        g Nr@  r?  rA  )r+   r8   r9   r  r   r  r   r  r   rf   r   realpathr   r{   r|   r  s       r%   test_move_dangling_symlink#TestMove.test_move_dangling_symlink#  s     ggll4<</ggll4<</


377<<f5C"x01))#.0@0@0JKr'   c                 <   [         R                  R                  U R                  S5      n[         R                  R                  U R                  S5      n[         R                  " U5        [         R
                  " X5        [         R                  R                  U R                  S5      n[        R                  " X#5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  X5      5        g r  )r+   r8   r9   r  r   r   r  r   r  r   rf   r  r  s       r%   test_move_dir_symlinkTestMove.test_move_dir_symlink.  s     ggll4<</ggll4<</



377<<f5C"x01((78r'   c           	         [         R                  " U R                  U R                  5      nU R	                  U[
        R                  R                  U R                  [
        R                  R                  U R                  5      5      5        g r*   )	r   r  r  r  r   r+   r8   r9   rj  r  s     r%   test_move_return_valueTestMove.test_move_return_value:  sT    [[5T\\277+;+;DMM+JK	Mr'   c                 
   [         R                  " U R                  [        R                  R                  U R                  S5      5      nU R                  U[        R                  R                  U R                  S5      5        g r  )r   r  r  r+   r8   r9   r  r   r  s     r%    test_move_as_rename_return_value)TestMove.test_move_as_rename_return_value?  sL    [[T\\5(IJRWW\\$,,>?r'   c                    ^ / mU4S jn[         R                  " U R                  U R                  US9  U R	                  [        T5      S5        g )Nc                 *   > TR                  X45        g r*   r   r{   r|   moveds     r%   r  7TestMove.test_move_file_special_function.<locals>._copyF      LL#$r'   r  r   )r   r  r  r  r   r   r   r  r  s     @r%   test_move_file_special_function(TestMove.test_move_file_special_functionC  s9    	%DMM4<<uEUQ'r'   c                   ^ / mU4S jn[         R                  " [        R                  R	                  U R
                  S5      5        [         R                  " [        R                  R	                  U R
                  S5      5        [        R                  " U R
                  U R                  US9  U R                  [        T5      S5        g )Nc                 *   > TR                  X45        g r*   r   r   s     r%   r  6TestMove.test_move_dir_special_function.<locals>._copyN  r  r'   r  child1r  r   )r   r  r+   r8   r9   r  r   r  r  r   r   r  s     @r%   test_move_dir_special_function'TestMove.test_move_dir_special_functionK  s{    	%##BGGLLw$GH##BGGLLx$HIDLL$,,eDUQ'r'   c                 `   U R                  5       U l        [        R                  R	                  [        R                  R                  U R                  5      [        R                  R                  U R                  5      R                  5       5      nU R                  U R                  U5         [        R                  " U R                  U5        U R                  [        R                  R                  U5      5        [        R                  " U5        g ! [        R                  " U5        f = fr*   )r   r  r+   r8   r9   r  rj  upperrC  r   r  r   re   r  r  s     r%   test_move_dir_caseinsensitive&TestMove.test_move_dir_caseinsensitiveU  s     ||~'',,-  .4468 	DLL'2	KKg.OOBGGMM'23HHWBHHWs   /AD D-c                    [         R                  R                  U R                  S5      n[         R                  R                  U R                  S5      n[         R
                  " U R                  USS9  [        R                  " X!5        U R                  [         R                  R                  U5      5        U R                  [         R                  R                  U R                  U5      5        U R                  [         R                  R                  U5      5        [         R
                  " U R                  USS9  U R                  [        R                  5         [        R                  " X!5        S S S 5        U R                  [         R                  R                  U R                  U5      5        U R                  [         R                  R                  U5      5        g ! , (       d  f       Nv= f)N	linktodirTr)  )r+   r8   r9   r  r  r   r   r  r   rf   r  r   r   r   r   )r   r|   r{   r  s       r%   "_test_move_symlink_to_dir_into_dir+TestMove._test_move_symlink_to_dir_into_dirg  s#   ggll4<<577<<k:


4<<$?Cx01((x@A,- 	

4<<$?v||,KK! -((x@As+, -,s   G&&
G4c                 :    U R                  U R                  5        g r*   )r  r  r  s    r%   !test_move_symlink_to_dir_into_dir*TestMove.test_move_symlink_to_dir_into_diry  s    //=r'   c                     [         R                  R                  U R                  S5      n[         R                  " U R
                  USS9  U R                  U5        g )NotherlinktodirTr)  )r+   r8   r9   r  r   r  r  r  s     r%   ,test_move_symlink_to_dir_into_symlink_to_dir5TestMove.test_move_symlink_to_dir_into_symlink_to_dir}  s=    ggll4<<)9:


4<<$?//4r'   r  SF_IMMUTABLE	UF_OPAQUEzrequires lchflagsc                 j    [         R                  " [        5        [         R                  " [        [        R
                  5        U R                  [        [        R                  [        [        5        U R                  [        [         R                  " 5       ;   5        [         R                  " [        [        R                  5        [        R                  " [         R                   R#                  [        S5      5        [         R                  " [        [        R
                  5        U R                  [        [        R                  [        [        5        U R                  [        [         R                  " 5       ;   5        [         R                   R%                  [        5      (       aC  [         R                  " [        [        R                  5        [        R&                  " [        5        [         R                   R%                  [        5      (       aD  [         R                  " [        [        R                  5        [        R&                  " [        5        g g ! [         R                   R%                  [        5      (       aC  [         R                  " [        [        R                  5        [        R&                  " [        5        [         R                   R%                  [        5      (       aD  [         R                  " [        [        R                  5        [        R&                  " [        5        f f = f)Nr  )r+   r   
TESTFN_SRCr  r  r  r   r  r   r  
TESTFN_DSTr   rd   r  r   r  r8   r9   r   r   r  s    r%   test_move_dir_permission_denied(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   E?I CL2)r  r  r  r  N)0r   r   r   r   r  r  r  r  r  r  r  r3   r  r  r  r  r  r  r  r  r  r+   r8   r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rs   r  r!  r   rC   r'   r%   r  r  
  s3   ,..KJ@
A
   % %&  H
 $ $H )BCH DHR
H

%
% ""H  #H ""E  #E ""L  #L ""9  #9M
@ ( ( ( ($ - -" ""> #> ""5 #5
 ''Z0 8$T>:8$T;7,.-	. (
-r'   r  c                       \ rS rSr " S S\5      rS r\R                  " \	S5      S 5       r
\R                  " \	S5      S 5       r\R                  " \	S5      S 5       rS	rg
)TestCopyFilei  c                   <    \ rS rSrSrSrSrS	S jrS rS r	S r
Srg)
TestCopyFile.Fauxi  FNc                     Xl         X l        g r*   )_raise_in_exit_suppress_at_exit)r   raise_in_exitsuppress_at_exits      r%   __init__TestCopyFile.Faux.__init__  s    "/%5"r'   c                     g)Nr  rC   )r   r#   s     r%   r]   TestCopyFile.Faux.read  s    r'   c                     SU l         g r2  )_enteredr  s    r%   	__enter__TestCopyFile.Faux.__enter__  s	     DMr'   c                 r    XU4U l         U R                  (       a  SU l        [        S5      eU R                  $ )NTCannot close)_exited_withr(  _raisedr    r)  )r   exc_typeexc_valexc_tbs       r%   __exit__TestCopyFile.Faux.__exit__  s6     (6 9D""#n--)))r'   )r1  r6  r(  r7  r)  r  )r   r   r   r   r1  r6  r7  r,  r]   r2  r;  r   rC   r'   r%   Fauxr&    s%    	6		!	*r'   r=  c                    SS jn[         R                  " [        SU5         U R                  [        5         [        R
                  " SS5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nc                 (    U S:X  a  [        S5      e e)NsrcfilezCannot open "srcfile"rV  )r   r_   s     r%   _open4TestCopyFile.test_w_source_open_fails.<locals>._open  s    9$5661r'   r<   r@  destfilerY   )r   r^  r   r   r    r  )r   rA  s     r%   test_w_source_open_fails%TestCopyFile.test_w_source_open_fails  sT    	
 vvu5""7+	:6 , 65++ 65s"   A2A!A2!
A/	+A22
B zskipped on macOSc                   ^ U R                  5       mSU4S jjn[        R                  " [        SU5         [        R                  " SS5        S S S 5        U R                  TR                  5        U R                  TR                  S   [        L 5        U R                  TR                  S   R                  S5        g ! , (       d  f       Nw= f)	Nc                 :   > U S:X  a  T$ U S:X  a  [        S5      e e)Nr@  rC  Cannot open "destfile"rV  )r   r_   r@  s     r%   rA  2TestCopyFile.test_w_dest_open_fails.<locals>._open  s)    9$:%6771r'   r<   r@  rC  r   r   )rI  rD  )r=  r   r^  r   r  r   r1  r6  r    r   r#   )r   rA  r@  s     @r%   test_w_dest_open_fails#TestCopyFile.test_w_dest_open_fails  s    ))+	 vvu5OOIz2 6((),,Q/7:;--a0554	6	 65s   B??
Cc                 2  ^^ U R                  5       mU R                  S5      mS	UU4S jjn[        R                  " [        SU5         [        R                  " SS5        S S S 5        U R                  TR                  5        U R                  TR                  5        U R                  TR                  5        U R                  TR                  S   [        L 5        U R                  TR                  S   R                  S5        g ! , (       d  f       N= f)
NTc                 (   > U S:X  a  T$ U S:X  a  T$  eNr@  rC  rC   r   r_   rC  r@  s     r%   rA  3TestCopyFile.test_w_dest_close_fails.<locals>._open  "    9$:%1r'   r<   r@  rC  r   r   )r5  rD  )r=  r   r^  r   r  r   r1  r7  r6  r    r   r#   r   rA  rC  r@  s     @@r%   test_w_dest_close_fails$TestCopyFile.test_w_dest_close_fails  s    ))+99T?	 	 vvu5OOIz2 6(()))*((),,Q/7:;--a055*	, 65s   	D
Dc                 l  ^^ U R                  S5      mU R                  5       mSUU4S jjn[        R                  " [        SU5         U R	                  [
        5         [        R                  " SS5        S S S 5        S S S 5        U R                  TR                  5        U R                  TR                  5        U R                  TR                  5        U R                  TR                  S   S L 5        U R                  TR                  5        g ! , (       d  f       N= f! , (       d  f       N= f)NTc                 (   > U S:X  a  T$ U S:X  a  T$  erO  rC   rP  s     r%   rA  5TestCopyFile.test_w_source_close_fails.<locals>._open  rR  r'   r<   r@  rC  r   rD  )r=  r   r^  r   r   r    r  r   r1  r   r7  r6  rS  s     @@r%   test_w_source_close_fails&TestCopyFile.test_w_source_close_fails  s     ))D/99;	 	 vvu5""7+	:6 , 6 	(()))*))*,,Q/478( ,+ 65s$   	D%D7D%
D"	D%%
D3rC   N)r   r   r   r   objectr=  rE  r  r  r  rK  rT  rY  r   rC   r'   r%   r$  r$    ss    *v *$7 __U./6 06" __U./, 0,( __U./) 0)r'   r$  c                       \ rS rSrSr\S 5       r\S 5       rS r\	R                  S 5       rS rS rS	 rS
 r\R"                  " \R&                  S:g  S5      S 5       rSrg)TestCopyFileObji  i    c                 8    [        [        U R                  5        g r*   )rV   r   FILESIZEclss    r%   
setUpClassTestCopyFileObj.setUpClass  s    -r'   c                 l    [         R                  " [        5        [         R                  " [        5        g r*   )r   rx   r   r	  r`  s    r%   tearDownClassTestCopyFileObj.tearDownClass	  s     !r'   c                 8    [         R                  " [        5        g r*   r   rx   r	  r  s    r%   tearDownTestCopyFileObj.tearDown      !r'   c              #      #    [        [        S5       n[        [        S5       nX4v   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7fNrX   rH   r<   r   r	  rt  s      r%   	get_filesTestCopyFileObj.get_files  A     &$3gt$j  %  $$  /   AA;A	A
A		A
AAc                     [        US5       n[        US5       nU R                  UR                  5       UR                  5       5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr  )r<   r   r]   )r   r{   r|   fsrcfdsts        r%   assert_files_eqTestCopyFileObj.assert_files_eq  sN    #t_c4D  diik: ! _  _s"   A+/A	A+
A(	$A++
A9c                     U R                  5        u  p[        R                  " X5        S S S 5        U R                  [        [
        5        g ! , (       d  f       N)= fr*   )ro  r   copyfileobjrv  r   r	  rt  s      r%   test_contentTestCopyFileObj.test_content  s<    ^^#s( VW- s   A
Ac                     U R                  5        u  p[        R                  " X5        UR                  (       a   eUR                  (       a   e S S S 5        g ! , (       d  f       g = fr*   )ro  r   ry  closedrt  s      r%   test_file_not_closed$TestCopyFileObj.test_file_not_closed!  sD    ^^#s(zz!>zz!>z s   ?A
A(c                 0   U R                  5        u  p[        R                  " X5        U R                  UR	                  5       U R
                  5        U R                  UR	                  5       U R
                  5        S S S 5        g ! , (       d  f       g = fr*   )ro  r   ry  r   tellr_  rt  s      r%   test_file_offset TestCopyFileObj.test_file_offset'  s^    ^^#s(SXXZ7SXXZ7 s   A-B
Br  zWindows onlyc                    [         R                  R                  S5       n[        R                  " [
        [        5        S S S 5        WR                  (       d   eU R                  UR                  S   S   S5        [        R                  " [        R                  " 5       SS9 nUR                  S5        S S S 5        WR                  nU R!                  ["        R$                  U5        [         R                  R                  S5       n[        R                  " U[        5        S S S 5        U R                  UR                  S   S   S5        [        R                  " [        R                  " 5       SS9 n S S S 5        UR                  nU R!                  ["        R$                  U5        [         R                  R                  S5       n[        R                  " U[        5        S S S 5        UR                  (       a   eU R'                  U[        5        g ! , (       d  f       GN= f! , (       d  f       GN}= f! , (       d  f       GN = f! , (       d  f       N= f! , (       d  f       N= f)	Nzshutil._copyfileobj_readintor   rr   i   Fro   s   foor   )r  r:  r;  r   r  r   r	  calledr   	call_argsrt   ru   r+   rv   r=   rj   r   r   rx   rv  )r   mrT   rx  s       r%   test_win_implTestCopyFileObj.test_win_impl-  s    ]]  !?@AOOFG, Axxx 	Q*O< ((RYY[G1GGFO H	((%0]]  !?@AOOE7+ AQ*A. ((RYY[G1 H	((%0]]  !?@AOOE7+ A88|UG,3 A@ HG A@
 HG A@s;    H%H-
H?8II"
H*-
H<?
I
I"
I0rC   N)r   r   r   r   r_  classmethodrb  re  ri  
contextlibcontextmanagerro  rv  rz  r~  r  r  r  r+   rj   r  r   rC   r'   r%   r]  r]    s    H. . " "" ! !
;
.
"8 __RWW_n5- 6-r'   r]  c                       \ rS rSrSrSrSrSr\S 5       r	\S 5       r
S r\R                  S	 5       rS
 rS rS rS rS rS rS rS rS rSrg)_ZeroCopyFileTestiL  z#Tests common to all zero-copy APIs.i   r'   r  c                    [        [        U R                  5        [        [        S5       nUR	                  5       U l        [        U R
                  5      U R                  :X  d   e S S S 5        g ! , (       d  f       g = fr  )rV   r   r_  r<   r]   FILEDATAr   )ra  rT   s     r%   rb  _ZeroCopyFileTest.setUpClassR  sP    -&$1668CLs||$444  s   ;A00
A>c                 8    [         R                  " [        5        g r*   )r   rx   r   r`  s    r%   re  _ZeroCopyFileTest.tearDownClassY  s     r'   c                 8    [         R                  " [        5        g r*   rh  r  s    r%   ri  _ZeroCopyFileTest.tearDown]  rk  r'   c              #      #    [        [        S5       n[        [        S5       nX4v   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7frm  rn  rt  s      r%   ro  _ZeroCopyFileTest.get_files`  rq  rr  c                     [        S5      e)Nzmust be implemented in subclass)r   )r   r#   r$   s      r%   zerocopy_fun_ZeroCopyFileTest.zerocopy_funf  s    !"CDDr'   c                     U R                  5         U R                  5         U R                  5         U R                  5         g r*   )ri  re  rb  r  r  s    r%   reset_ZeroCopyFileTest.reseti  s*    

r'   c                    U R                  5        u  pU R                  X5        S S S 5        U R                  [        [        SS9U R
                  5        U R                  5        u  p[        R                  R                  S5       n[        R                  " [        [        5        S S S 5        WR                  (       a   e S S S 5        g ! , (       d  f       N= f! , (       d  f       N<= f! , (       d  f       g = f)NTr^   zshutil.copyfileobj)ro  r  r   r`   r	  r  r  r:  r;  r   r  r   r  )r   r{   r|   r  s       r%   test_regular_copy#_ZeroCopyFileTest.test_regular_copyq  s    ^^#c' 748$--H^^#$$%9:a0 ;xx<x 	 
 ;: s/   C%"C. C'C.
C
C+	'C..
C<c                 n   U R                  U R                  5        U R                  5        u  pU R                  [        [
        45         U R                  X5        S S S 5        S S S 5        U R                  [        [        SS9U R                  5        g ! , (       d  f       N?= f! , (       d  f       NH= f)NTr  )r   r  ro  r   r    r   r  r   r`   r   r  rt  s      r%   test_same_file _ZeroCopyFileTest.test_same_file{  s}    

#^^#""G->#?@!!#+ A  	6$7G A@ s#   B&
BB&
B#	B&&
B4c                 *   [         R                  " [        R                  " 5       S9nU R	                  [
        5       n[        R                  " US5        S S S 5        U R                  WR                  R                  U5        g ! , (       d  f       N5= f)Nr   new)rt   r   r+   rv   r   r   r   r  r   r   r   )r   rj   r   s      r%   test_non_existent_src'_ZeroCopyFileTest.test_non_existent_src  s]    299;/01ROOD%( 2..5 21s   B
Bc                   ^^ [         S-   m[         S-   mU R                  U4S j5        U R                  U4S j5        [        T5        [        TS5       n[        TS5       nU R	                  X5        S S S 5        S S S 5        U R                  [        TSS9S	5        g ! , (       d  f       N1= f! , (       d  f       N:= f)
Nr{   r|   c                  0   > [         R                  " T 5      $ r*   r   rx   )ry   s   r%   r  3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>      	 0 0 9r'   c                  0   > [         R                  " T 5      $ r*   r  )rz   s   r%   r  r    r  r'   rX   rH   Tr  r'   )r   r   r@   r<   r  r   r`   )r   r{   r|   rz   ry   s      @@r%   test_empty_file!_ZeroCopyFileTest.test_empty_file  s    5.5.9:9:G'4 Cgt$!!#+ % ! 	748#> %$ ! s$   B1#B 5B1 
B.	*B11
B?c                     [         R                  R                  U R                  [        S9   U R                  [        [        R                  [        [        5        S S S 5        g ! , (       d  f       g = f)Nr   )
r  r:  r;  
PATCHPOINTZeroDivisionErrorr   r   r  r   r	  r  s    r%   test_unhandled_exception*_ZeroCopyFileTest.test_unhandled_exception  sS    ]]  -> ! @/$oovw@@ @ @s   /A%%
A3c                    [         R                  R                  U R                  [	        [
        R                  S5      S9   U R                  5        u  pU R                  [        5         U R                  X5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = fNyor   )r  r:  r;  r  r    r"   EINVALro  r   r   r  rt  s      r%   test_exception_on_first_call._ZeroCopyFileTest.test_exception_on_first_call  s     ]]  -4U\\4-H ! J!Zc&&'89%%c/ : "J J :9 "!J Js<   B7B&*B<B&B7
B#B&&
B4	0B77
Cc                 R   [         R                  R                  U R                  [	        [
        R                  S5      S9   U R                  5        u  pU R                  [        U R                  X5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr  )
r  r:  r;  r  r    r"   ENOSPCro  r   r  rt  s      r%   test_filesystem_full&_ZeroCopyFileTest.test_filesystem_full  s{     ]]  -4U\\4-H ! J!Zc!!'4+<+<cG "J J!!J Js$   B$B6B
B	B
B&rC   N)r   r   r   r   __doc__r_  r  r  r  rb  re  ri  r  r  ro  r  r  r  r  r  r  r  r  r  r   rC   r'   r%   r  r  L  s    - HHJ5 5 ! !" ! !
E H6?@0Hr'   r  zos.sendfile() not supportedc                   N    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rSrg)TestZeroCopySendfilei  os.sendfilec                 .    [         R                  " X5      $ r*   )r   _fastcopy_sendfile)r   rt  ru  s      r%   r  !TestZeroCopySendfile.zerocopy_fun  s    ((44r'   c                    [         R                  " U R                  5       n[        [        S5       nU R                  [        5         U R                  X5        S S S 5        [        R                  " X5        S S S 5        S S S 5        U R                  [        [        SS9U R                  5        g ! , (       d  f       N]= f! , (       d  f       NP= f! , (       d  f       NY= f)NrH   Tr  )ioBytesIOr  r<   r	  r   r   r  r   ry  r   r`   rt  s      r%   test_non_regular_file_src.TestZeroCopySendfile.test_non_regular_file_src  s    ZZ&#gt$&&'89%%c/ :""3, % ' 	748$--H	 :9 %$ '&s:   CCB1C8C1
B?;C
C	C
C!c                    [        [        S5       n[        R                  " 5        nU R	                  [
        5         U R                  X5        S S S 5        [        R                  " X5        UR                  S5        U R                  UR                  5       U R                  5        S S S 5        S S S 5        g ! , (       d  f       Np= f! , (       d  f       N(= f! , (       d  f       g = f)NrX   r   )r<   r   r  r  r   r   r  r   ry  seekr   r]   r  rt  s      r%   test_non_regular_file_dst.TestZeroCopySendfile.test_non_regular_file_dst  s    &$3&&'89%%c/ :""3,  T]];   99   s:   CC
B9AC
(C9
CC


C	C
C)c                   ^^ UU4S jn/ m[         R                  m[        R                  R	                  SSUS9   U R                  5        u  p#U R                  [        5       n[        R                  " X#5        S S S 5        S S S 5        S S S 5        T(       d   eU R                  WR                  R                  [        R                  5        g ! , (       d  f       N\= f! , (       d  f       Ne= f! , (       d  f       Nn= f)Nc                  x   > T(       d  TR                  S 5        T" U 0 UD6$ [        [        R                  S5      e)Nr  )rg   r    r"   EBADF)r#   r$   r  orig_sendfiles     r%   rn   DTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfile  s3    D!$d5f55ekk400r'   r  T)rN  r   )r+   rn   r  r:  r;  ro  r   r    r   r  r   r   r"   r  )r   rn   r{   r|   r   r  r  s        @@r%   test_exception_on_second_call2TestZeroCopySendfile.test_exception_on_second_call  s    	1 ]]  t-5 ! 7!Zc&&w/2--c7 0 "7
 t++U[[9 0/ "!7 7s;   C3C"$C;C"C3
CC""
C0	,C33
Dc                 x   [         R                  R                  S[        S9 nU R	                  5        u  p#[
        R                  " X#5        UR                  (       d   e S S S 5        S S S 5        U R                  [        [        SS9U R                  5        g ! , (       d  f       N?= f! , (       d  f       NH= f)Nos.fstatr   Tr  )r  r:  r;  r    ro  r   r  r  r   r`   r	  r  r   r  r{   r|   s       r%   test_cant_get_size'TestZeroCopySendfile.test_cant_get_size  s     ]]   AQ!Zc))#3xxx " B 	748$--H "! BAs"   B+,B!B+
B(	$B++
B9c                    [         R                  R                  5       nSUl        [         R                  R	                  SUS9 nU R                  5        u  p4[        R                  " X45        UR                  (       d   e S S S 5        S S S 5        U R                  [        [        SS9U R                  5        g ! , (       d  f       N?= f! , (       d  f       NH= f)Ni  r  r+  Tr  )r  r:  Mockst_sizer;  ro  r   r  r  r   r`   r	  r  r   r:  r  r{   r|   s        r%   test_small_chunks&TestZeroCopySendfile.test_small_chunks  s    
 }}!!# ]]  $ ?1!Zc))#3xxx " @ 	748$--H "! @?s$   C,B;C;
C		C
Cc                    [         R                  R                  5       nU R                  S-   Ul        [         R                  R                  SUS9 nU R                  5        u  p4[        R                  " X45        UR                  (       d   e S S S 5        S S S 5        U R                  [        [        SS9U R                  5        g ! , (       d  f       N?= f! , (       d  f       NH= f)Ni  @r  r+  Tr  )r  r:  r  r_  r  r;  ro  r   r  r  r   r`   r	  r  r  s        r%   test_big_chunk#TestZeroCopySendfile.test_big_chunk  s    
 }}!!#}}(9:]]  $ ?1!Zc))#3xxx " @ 	748$--H "! @?s$   C",CC
C	C
C'c                    [         R                  R                  S[        S9 nU R	                  [        [
        R                  [        [        5        UR                  S   S   nU R                  U[        R                  R                  [        5      5        [        R                  " [        5        [!        [        S5        U R#                  [        R                  [        S-   5        U R	                  [        [
        R                  [        [        S-   5        UR                  S   S   nU R                  US5        S S S 5        g ! , (       d  f       g = f)Nr  r   r   r   s   hello3i   )r  r:  r;  r  r   r   r  r   r	  r  r   r+   r8   rO   r   rx   r@   r   )r   r  	blocksizes      r%   test_blocksize_arg'TestZeroCopySendfile.test_blocksize_arg  s    ]]  -> ! @CD/$oovw@Aq)I Y(?@W%*OOI,,gm</$oow#GAq)IY0@ @ @s   DE
Ec                 B   [         R                  (       d   e [        R                  R	                  U R
                  [        [        R                  S5      S9 nU R                  5        u  p#U R                  [        5         [         R                  " X#5        S S S 5        S S S 5        UR                  (       d   e S S S 5        [         R                  (       a   e[        R                  R	                  U R
                  5       n[         R                  " [        [         5        UR                  (       a   e S S S 5        S[         l        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NM= f! S[         l        f = f)Nr  r   T)r   _USE_CP_SENDFILEr  r:  r;  r  r    r"   ENOTSOCKro  r   r   r  r  r  r   r	  r  s       r%   test_file2file_not_supported1TestZeroCopySendfile.test_file2file_not_supported  s    &&&&	+$$OO ' = % ?BC^^%#**+<=11#; > & xxx? ....$$T__5088#|8 6 '+F# >= &%? ? 65 '+F#sm   A F E/*EEE!E/=AF 3F 9F 
EE
E,	(E//
E=9F  
F
F FrC   N)r   r   r   r   r  r  r  r  r  r  r  r  r  r  r   rC   r'   r%   r  r    s8    J5I<:$III1$+r'   r  z
macOS onlyc                       \ rS rSrSrS rSrg)TestZeroCopyMACOSi&  zposix._fcopyfilec                 L    [         R                  " X[        R                  5      $ r*   )r   _fastcopy_fcopyfileposix_COPYFILE_DATArt  s      r%   r  TestZeroCopyMACOS.zerocopy_fun*  s    ))#E4H4HIIr'   rC   N)r   r   r   r   r  r  r   rC   r'   r%   r  r  &  s    #JJr'   r  c                   P   \ rS rSrS rS rS r\R                  " \	R                  " \R                  R                  5       5      S5      \R                  " 5       \R                  " \" \	S5      S5      S 5       5       5       r\R$                  " \R&                  S	5      S
 5       rSrg)TestGetTerminalSizei.  c                     [         R                  " 5       nU R                  UR                  S5        U R                  UR                  S5        g)zCheck if get_terminal_size() returns a meaningful value.

There's no easy portable way to actually check the size of the
terminal, so let's check if it returns something sensible instead.
r   N)r   get_terminal_sizer  columnslines)r   rP   s     r%   test_does_not_crash'TestGetTerminalSize.test_does_not_crash/  s:     '')a0

A.r'   c                    [         R                  " 5        nSUS'   US	 [        R                  " 5       nSSS5        U R	                  WR
                  S5        [         R                  " 5        nUS	 SUS'   [        R                  " 5       nSSS5        U R	                  UR                  S5        g! , (       d  f       N= f! , (       d  f       N<= f)z.Check if environment variables have precedence777COLUMNSLINESNi	  888ix  )r   rF  r   r  r   r  r  r   rH  rP   s      r%   test_os_environ_first)TestGetTerminalSize.test_os_environ_first9  s     **,"C	NG++-D - 	s+**,I CL++-D - 	S) -, -,s   B0-C0
B>
Cc                    [         R                  " 5        nSUS'   SUS'   [        R                  " 5       nS S S 5        U R	                  WR
                  S5        U R	                  UR                  S5        g ! , (       d  f       NG= f)Nre  r   yyyr  r   )r   rF  r   r  r  r  r  r  s      r%   test_bad_environ$TestGetTerminalSize.test_bad_environH  sh    **,"C	N CL++-D - 	a0

A. -,s    A77
Bz
not on ttyr  zneed os.get_terminal_size()c                     [         R                  " SS/5      R                  5       R                  5       n[        WS   5      [        US   5      4n[        R                  " 5        nUR                  SS5        [        R                  " 5       nSSS5        U R                  UW5        g! [        [
        [         R                  4 a    U R                  S5         Nf = f! , (       d  f       NW= f)	zCheck if stty returns the same results ignoring env

This test will fail if stdin and stdout are connected to
different terminals with different sizes. Nevertheless, such
situations should be pretty rare.
sttyrP   zstty invocation failedr   r   r  r   N)r   rC  rG  r   r   r  rE  r  r   r   rF  unsetr   r  r   )r   rP   r  rH  r  s        r%   test_stty_match#TestGetTerminalSize.test_stty_matchP  s    	4**FF+;<CCEKKMD QL#d1g,/**,IIgy)--/F - 	6* "?--/ 	4MM23	4
 -,s   4B* '(C *0CC 
C.zWASI has no /dev/nullc                    [         R                  " 5        nUR                  SS5        [        R                  " [
        SS 5         [        R                  " SS9nS S S 5        U R                  WR                  S5        U R                  UR                  S5        [        [        R                  SS	S
9 n[        R                  " [
        SU5         [        R                  " SS9nS S S 5        S S S 5        U R                  UR                  S5        U R                  UR                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       Nh= f! , (       d  f       Nq= f! , (       d  f       g = f)Nr  r   
__stdout__)r     )fallbackr  r  wrZ   r[   )   r  r  r  )r   rF  r  r   r^  r   r   r  r   r  r  r<   r+   devnull)r   rH  rP   rT   s       r%   test_fallback!TestGetTerminalSize.test_fallbackh  s   **,IIgy) ""3d;//B <T\\2.TZZ, bjj#8A""3a8//B 9 9 T\\2.TZZ, -, <; 98 98 -,sU   /E)D6AE)3EE%E-A E)6
E	 E)
EE
E&	"E))
E7rC   N)r   r   r   r   r  r  r  r  r  r+   isattyr   r  rw   r   requires_subprocessrs   r  r  is_wasir  r   rC   r'   r%   r  r  .  s    /*/ 3>>#8#8#:;\J  "%8968+8 # K+( __W__&=>- ?-r'   r  c                       \ rS rSrSrS rSrg)PublicAPITestsi|  z>Ensures that the correct values are exposed in the public API.c                 "   U R                  [        [        S5      5        / SQn[        [        S5      (       d  [        R                  S:X  a  UR                  S5        U R                  [        [        R                  5      [        U5      5        g )N__all__)ry  r  rD  rX  r  r  r  r  r   r   r  	ExecErrorr   r   r   r   r   r	   r   r   r  r  r  r  r   statvfsr  r  )	r   rs   r   r+   rj   rg   r   r  r  )r   
target_apis     r%   test_module_all_attribute(PublicAPITests.test_module_all_attribute  s`    	23<
 2y!!RWW_l+V^^,c*o>r'   rC   N)r   r   r   r   r  r"  r   rC   r'   r%   r  r  |  s
    H?r'   r  __main__)r'   )F)Wr  unittest.mockr   rt   r   r  r+   os.pathr"   r1   pathlibr   rK   rM   r  r  r   r   r   r   r   r   r	   r
   r   r   r   r   r  r'  r  ImportErrorr  r   test.supportr   test.support.os_helperr   r   r   r	  r  r   r  r  r  r  r   rX  rZ  rW  r   r:  r;  AssertionErrorr  r&   r3   r@   rV   r`   rh   r   SUPPORTS_SENDFILEr   r   TestCaser   r  r=  r  r  r  r  r  r  r$  r]  r[  r  r  r  r  r  r  r   mainrC   r'   r%   <module>r/     s-       
  	         	6 6 6 6    " 3 (
3,f_
f_
)
,,
!
!'
*	ll2A%O ==z"#>?  AL	)$
&: 01 	 	u"8,, u"p^28X.. ^2@~?x** ~?BC	88X.. C	8Lm1x** m1` 	,(++ , ,D
-Y 
-J-x** J-ZY)8$$ Y)xG-h'' G-T`H `HF 
&&(EFs+,h.?.? s+ Gs+l 
UL)J)8+<+< J *JK-(++ K-\?X&& ?$ zMMO ck  E$  O
  Gs6   &K 
K 'K) KKK&%K&)K54K5