
    daf+                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ e j.                  e j0                  k7  Z eed      Zej8                  j;                  d      rd	Znd
Z G d dej>                        Z  G d dej>                        Z! G d de!      Z" G d de!      Z# G d de!      Z$ G d de!      Z% G d de!      Z&ejN                  d        Z(d Z) G d d      Z* G d de*e!      Z+ G d d e!      Z, G d! d"e!      Z- G d# d$e!      Z. G d% d&e*e!      Z/ G d' d(e!      Z0 G d) d*e!      Z1 G d+ d,e!      Z2e jf                  e jh                  ur G d- d.e!      Z5 G d/ d0      Z6 G d1 d2e!      Z7e8d3k(  r ejr                          yy)4    N)mock)support)	os_helper)script_helper)warnings_helperspawnlopenbsd0   d   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestLowLevelInternalsc                     | j                  t        t        j                  d             | j                  t        t        j                  d             | j                  t        t        j                  d              y N     )assertIsstrtempfile_infer_return_typebytesselfs    -/root/Python-3.12.4/Lib/test/test_tempfile.pytest_infer_return_type_singlesz4TestLowLevelInternals.test_infer_return_type_singles)   sM    c866r:;eX88=>c866t<=r   c                    | j                  t        t        j                  dd             | j                  t        t        j                  dd             | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  dd       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY wr   r   r   r   r   r   assertRaises	TypeErrorr   s    r    test_infer_return_type_multiplesz6TestLowLevelInternals.test_infer_return_type_multiples.   s    c866r2>?eX88cBCy) 	1''C0	1y) 	1''R0	1 	1	1 	1	1 	1s   *B>C
>C
Cc                    | j                  t        t        j                  d d             | j                  t        t        j                  dd              | j                  t        t        j                  d d              | j                  t        t        j                  dd              | j                  t        t        j                  d d             | j                  t              5  t        j                  dd d       d d d        | j                  t              5  t        j                  dd d       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY wr   r   r   s    r   )test_infer_return_type_multiples_and_nonez?TestLowLevelInternals.test_infer_return_type_multiples_and_none6   s    c866tR@Ac866r4@Ac866tTBCeX88dCDeX88sCDy) 	7''D#6	7y) 	7''T26	7 	7	7 	7	7 	7s   (D>E
>E
Ec                 |    | j                  t        t        j                  t	        j
                  d                   y )N/)r   r   r   r   r   FakePathr   s    r   test_infer_return_type_pathlibz4TestLowLevelInternals.test_infer_return_type_pathlibA   s&    c866y7I7I#7NOPr   c           	      x   t         j                  }| j                  t        t	        j
                   |d                   | j                  t        t	        j
                   |d                   | j                  t        t	        j
                  d |d                   | j                  t        t	        j
                  d |d                   | j                  t        t	        j
                  d  |d                   | j                  t        t	        j
                  d  |d                   | j                  t              5  t	        j
                  d |d             d d d        | j                  t              5  t	        j
                  d |d             d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)Nr#      /r   r   )	r   r$   r   r   r   r   r   r   r   )r   Paths     r   test_infer_return_type_pathlikez5TestLowLevelInternals.test_infer_return_type_pathlikeD   s6   !!c866tCyABeX88dDEc866r48DEeX88d3iHIeX88tCyIJc866tT"XFGy) 	7''DI6	7y) 	7''T"X6	7 	7	7 	7	7 	7s   F$>F0$F-0F9N)__name__
__module____qualname__r   r   r!   r%   r)    r   r   r   r   (   s    >
1	7Q7r   r   c                   `    e Zd Z ej                  d      Z ej                  d      Zd Zd Zy)BaseTestCasez^[a-z0-9_-]{8}$s   ^[a-z0-9_-]{8}$c                     | j                  t        j                                t        j                  dt
        dt               y )Nignoremktemp)categorymessagemodule)enterContextr   check_warningswarningsfilterwarningsRuntimeWarningr*   r   s    r   setUpzBaseTestCase.setUpY   s1    /88:;>(0	Cr   c                 t   t         j                  j                  |      \  }}|d t        |       }|t        |      t        |      z
  d  }|Q| j	                  t        |      t        |      t        u st        |t         j                        rt        nt        d       |7| j	                  t        |      t        |      t        u rt        nt        d       |7| j	                  t        |      t        |      t        u rt        nt        d       |||fdk(  r | j	                  t        |      t        d       | j                  t         j                  j                  |      t         j                  j                  |      d|d|       | j                  ||d|d|       | j                  ||d|d|       |t        |      t        |      t        |      z
   }t        |t              r| j                  n| j                  }	| j                  |	j                  |      d|d	|	j                          y )
Nzunexpected return typeNNNzdefault return type must be strzfile z not in directory z does not begin with z does not end with zrandom characters z do not match )ospathsplitlenr   typer   
isinstancePathLiker   assertEqualabspath	str_checkb_check
assertTruematchpattern)
r   namedirpresufndirnbasenprensufchecks
             r   	nameCheckzBaseTestCase.nameCheck^   s   d+uis3x c%jS)*+?MMT
9#z#r{{'C ( ?MM$t*T#Y#-=c524?MM$t*T#Y#-=c524c?00MM$t*c+LM 	.0D:>D	Fs=BCH	Js;@#F	H c#hs5z#c(23",UC"8dllE* %--1	2r   N)	r*   r+   r,   recompilerG   rH   r;   rU   r-   r   r   r/   r/   T   s/    

-.Ibjj,-GC
"2r   r/   c                       e Zd Zd Zy)TestExportsc                     t         j                  }ddddddddddddddd}g }|D ]!  }|d   dk7  s||vs|j                  |       # | j                  t	        |      dk(  d|z         y )N   )NamedTemporaryFileTemporaryFilemkstempmkdtempr2   TMP_MAXgettempprefixgettempprefixb
gettempdirgettempdirbtempdirtemplateSpooledTemporaryFileTemporaryDirectoryr   _zunexpected keys: %s)r   __dict__appendrI   rA   )r   dictexpectedunexpkeys        r   test_exportszTestExports.test_exports   s       $% %&#$
"  	"C1v}H!4S!	" 	E
a-5	7r   N)r*   r+   r,   rp   r-   r   r   rY   rY      s    7r   rY   c                   b     e Zd ZdZ fdZd Zd Zd Z ej                         d        Z
 xZS )TestRandomNameSequencez6Test the internal iterator object _RandomNameSequence.c                 T    t        j                         | _        t        |           y N)r   _RandomNameSequencersuperr;   r   	__class__s    r   r;   zTestRandomNameSequence.setUp   s    --/r   c                 V    t        | j                        }| j                  |ddd       y Nr   )nextrv   rU   )r   ss     r   test_get_eight_char_strz.TestRandomNameSequence.test_get_eight_char_str   s!    Lq"b"%r   c                     i }| j                   }t        t              D ]8  }t        |      }| j	                  |ddd       | j                  ||       d||<   : y )Nr   r[   )rv   range
TEST_FILESr|   rU   assertNotIn)r   rl   rv   ir}   s        r   	test_manyz TestRandomNameSequence.test_many   sZ     FFz" 	AQANN1b"b)Q%DG		r   c                 F    d}| j                   }|D ]  }|dz  }|dk(  s y  y )Nr   r[      )rv   )r   r   rv   r}   s       r   supports_iterz$TestRandomNameSequence.supports_iter   s4     FF 	AFABw	r   c                    t        j                         \  }}d }	 t        j                         }|swt        j                  |       t        j                  |t        | j                        j                  d             t        j                  |       t        j                  d       t        | j                        }t        j                  |t        |            j                  d      }|rt        j                  |d       t        j                  |       t        j                  |       | j                  ||       y # |rt        j                  |d       t        j                  |       t        j                  |       w xY w)Nasciir   )exitcode)r>   pipeforkclosewriter|   rv   encode_exitreadrA   decoder   wait_processassertNotEqual)r   read_fdwrite_fdpidparent_valuechild_values         r   test_process_awarenessz-TestRandomNameSequence.test_process_awareness   s    GGI	'')C!4<#6#6w#?@"   <L'''3|+<=DDWMK$$S15HHWHHXK6 $$S15HHWHHXs   CE AF)r*   r+   r,   __doc__r;   r~   r   r   r   requires_forkr   __classcell__ry   s   @r   rr   rr      s9    @&
	 W7 7r   rr   c                       e Zd ZdZd Zd Zy)TestCandidateTempdirListz3Test the internal function _candidate_tempdir_list.c                     t        j                         }| j                  t        |      dk(         |D ]  }| j	                  |t
                y Nr   )r   _candidate_tempdir_listassertFalserA   assertIsInstancer   )r   candcs      r   test_nonempty_listz+TestCandidateTempdirList.test_nonempty_list   sG     //1Ta( 	*A!!!S)	*r   c                    t        j                         5 }dD ]<  }t        j                  |      }|rt        j                  j                  |      ||<   > t        j                         }dD ]1  }t        j                  |      }|st        | j                  ||       3 	 t        j                         }| j                  ||       d d d        y # t        t        f$ r t        j                  }Y <w xY w# 1 sw Y   y xY w)N)TMPDIRTEMPTMP)r   EnvironmentVarGuardr>   getenvr?   rF   r   r   
ValueErrorassertIngetcwdAttributeErrorOSErrorcurdir)r   envenvnamedirnamer   s        r   test_wanted_dirsz)TestCandidateTempdirList.test_wanted_dirs   s     **, 	)2 <))G,#%77??7#;CL<
 335D2 -))G,j 0gt,-
$))+ MM'4(%	) 	) #G, $))$	) 	)s5   C6A.C6"C6C6C30C62C33C66C?N)r*   r+   r,   r   r   r   r-   r   r   r   r      s    =*)r   r   c                       e Zd ZdZd Zy)TestGetDefaultTempdirzTest _get_default_tempdir().c           	         t        j                         5 fd}t        j                  t         d|      5  t        j                          | j                  t        j                        g        d }t        j                  t        d|      5  | j                  t              5  t        j                          d d d        | j                  t        j                        g        d d d        t        j                  t        d|      5  | j                  t              5  t        j                          d d d        | j                  t        j                        g        d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   >xY w# 1 sw Y   BxY w# 1 sw Y   y xY w)Nc                  
     gS rt   r-   )our_temp_directorys   r   our_candidate_listzKTestGetDefaultTempdir.test_no_files_left_behind.<locals>.our_candidate_list  s    *++r   r   c                      t               rt   )r   )argskwargss     r   raise_OSErrorzFTestGetDefaultTempdir.test_no_files_left_behind.<locals>.raise_OSError  s	    !)Or   openr   )
r   rh   r   	swap_attr_get_default_tempdirrE   r>   listdirr   FileNotFoundError)r   r   r   r   s      @r   test_no_files_left_behindz/TestGetDefaultTempdir.test_no_files_left_behind  s   ((* 	I.@, ""8-F#57 I --/  ,>!?D$ &&r6=A I**+<= 8 5578$$RZZ0B%CRH	I &&r7MB I**+<= 8 5578$$RZZ0B%CRH	II	I 	I 8 8I I8 8I II I	I 	Is   !F7AF+F%E;	:-F'#F+
F F	5-F"F+*F7;F FFF+FFF($F++F4	0F77G N)r*   r+   r,   r   r   r-   r   r   r   r   
  s    &Ir   r   c                       e Zd ZdZd Zd Zy)TestGetCandidateNamesz0Test the internal function _get_candidate_names.c                 l    t        j                         }| j                  |t         j                         y rt   )r   _get_candidate_namesr   ru   )r   objs     r   test_retvalz!TestGetCandidateNames.test_retval-  s&    ++-c8#?#?@r   c                 z    t        j                         }t        j                         }| j                  ||u        y rt   )r   r   rI   )r   abs      r   test_same_thingz%TestGetCandidateNames.test_same_thing2  s.    ))+))+Qr   N)r*   r+   r,   r   r   r   r-   r   r   r   r   *  s    :A
 r   r   c               #      K   t        j                         } 	 t        j                  t         d|       5  d  d d d        t	        j
                  |        y # 1 sw Y   xY w# t	        j
                  |        w xY ww)Nre   )r   r_   r   r   r   rmtreerM   s    r   _inside_empty_temp_dirr   :  sc     



CxC8 		 		 	 	s2   A<A" AA"  A<AA" "A99A<c                  @     t        j                  t        d fd      S )Nr   c                      t               S rt   )iternamess   r   <lambda>z'_mock_candidate_names.<locals>.<lambda>G  s    T%[ r   )r   r   r   r   s   `r   _mock_candidate_namesr   D  s    X302 2r   c                   ^    e Zd Z ej                  ej                  d      d        Zd Zd Z	y)TestBadTempdirz$Emscripten cannot remove write bits.c                 R   t               5  t        j                  t        j                        j
                  x}}|t        j                  t        j                  z  t        j                  z   z  }t        j                  t        j                  |       	 t        j                  t        j                  t        j                        r| j                  d       | j                  t              5  | j                          d d d        | j!                  t        j"                  t        j                        g        t        j                  t        j                  |       	 d d d        y # 1 sw Y   jxY w# t        j                  t        j                  |       w xY w# 1 sw Y   y xY w)Nz!can't set the directory read-only)r   r>   statr   re   st_modeS_IWUSRS_IWGRPS_IWOTHchmodaccessW_OKskipTestr   PermissionError	make_temprE   r   )r   oldmodemodes      r   test_read_only_directoryz'TestBadTempdir.test_read_only_directoryL  s    $% 	4WWX%5%56>>>GddllT\\1DLL@AADHHX%%t,499X--rww7MM"EF&&7 %NN$%  H,<,<!=rB))73	4 	4% % ))73	4 	4s=   B
FAE4.E(?;E4:$F(E1	-E44&FFF&c                 r   t               5  t        j                  j                  t        j
                  d      }t        j                  t        d|      5  | j                  t              5  | j                          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nnonexistentre   )r   r>   r?   joinr   re   r   r   r   r   r   r   re   s     r   test_nonexisting_directoryz)TestBadTempdir.test_nonexisting_directory]  s    #% 	%ggll8#3#3]CG""8Y@ %&&'89 %NN$%%	% 	%% %% %	% 	%s<   A
B-B!+B<B!B-BB!!B*	&B--B6c                    t               5  t        j                  j                  t        j
                  d      }t        |d      j                          t        j                  t        d|      5  | j                  t        t        f      5  | j                          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nfilewbre   )r   r>   r?   r   r   re   r   r   r   r   r   NotADirectoryErrorr   r   r   s     r   test_non_directoryz!TestBadTempdir.test_non_directoryd  s    #% 	%ggll8#3#3V<G$%%'""8Y@ %&&(:<M'NO %NN$%%	% 	%% %% %	% 	%s<   A$C/CB5C$C5B>:CC
	CCN)
r*   r+   r,   unittestskipIfr   is_emscriptenr   r   r   r-   r   r   r   r   J  s5    X__E44%%r   r   c                      e Zd ZdZ G d d      ZddZd Zd Zd Zd	 Z	e
j                  d
        Z ej                  ed       ej"                         d               Z ej                  ed      d        Zd Zd Zd Zy)TestMkstempInnerz*Test the internal function _mkstemp_inner.c                   ~    e Zd Zej                  Zej                  Zej                  Z
ej                  Zd Zd Zd Zy)TestMkstempInner.mkstempedc                     |r| j                   }n| j                  }t        j                  |||      }t        j                  |||||      \  | _        | _        y rt   )_bflags_tflagsr   r   _mkstemp_innerfdrL   )r   rM   rN   rO   binflagsoutput_types          r   __init__z#TestMkstempInner.mkstemped.__init__v  sL    DLLE LLE"55c3DK#+#:#:3S%Q\#] TWdir   c                 D    t        j                  | j                  |       y rt   )r>   r   r  )r   r   s     r   r   z TestMkstempInner.mkstemped.write}  s    HHTWWc"r   c                 p    | j                  | j                         | j                  | j                         y rt   )_closer  _unlinkrL   r   s    r   __del__z"TestMkstempInner.mkstemped.__del__  s"    KK LL#r   N)r*   r+   r,   r   _bin_openflagsr  _text_openflagsr  r>   r   r  unlinkr  r  r   r  r-   r   r   	mkstempedr   p  s:    ))**))	^	#	$r   r  Nc                 "   t        j                  |||      }|1|t        u rt        j                         }nt        j                         }| |       }| |       }| j                  ||||      }| j                  |j                  |||       |S rt   )r   r   r   rc   rd   r  rU   rL   )r   rM   rN   rO   r  r  r   s          r   	do_createzTestMkstempInner.do_create  s    11#sC@;c!))+**,;-C;-C~~c3S1tyy#sC0r   c                 N   | j                         j                  d       | j                  d      j                  d       | j                  d      j                  d       | j                  dd      j                  d       | j                  dd      j                  d       y )	N   blatr   rN   r   rO   rN   rO   aa.txt)r  r   r   s    r   
test_basiczTestMkstempInner.test_basic  s    w'3%%g.3%%g.3C(..w74V,227;r   c                 N   t        j                         }| j                  |d      j                  d       | j                  |d      j                  d       | j                  |d      j                  d       | j                  |dd      j                  d       | j                  |dd	      j                  d       | j	                  t
              5  | j                  d
d      j                  d       d d d        | j	                  t
              5  | j                  |d
      j                  d       d d d        | j	                  t
              5  | j                  |dd
      j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)Nr   rM   rO   r     arM   rN      brM   rN   rO      aa   .txtr   )r   rd   r  r   r   r   )r   dir_bs     r   test_basic_with_bytes_namesz,TestMkstempInner.test_basic_with_bytes_names  sc    $$&5c*0095d+11':5d+11':5d5;;GD5e9??Hy) 	;NNrsN+11':	;y) 	=NNu"N-33G<	=y) 	FNNu#2N6<<WE	F 	F		; 	;	= 	=	F 	Fs$   #F#F$FFFF$c                 l    t        t        t                    }|D ]  }| j                  d      ||<    y Nr  r  )listr   r   r  r   extantr   s      r   test_basic_manyz TestMkstempInner.test_basic_many  s4    eJ'( 	1A40F1I	1r   c                    t        j                         }	 | j                  |      j                  d       | j                  t	        j
                  |            j                  d       t        j                          t        j                  |       y # t        j                          t        j                  |       w xY wNr   r  )
r   r_   r  r   r   r$   r   
gc_collectr>   rmdirr   rM   s     r   test_choose_directoryz&TestMkstempInner.test_choose_directory  s     	NNsN#))'2NNy11#6N7==gF HHSM  HHSMs   AB +C c                     | j                         }t        j                  t        j                  |j                        j
                        }d}t        j                  dk(  r
|dz	  }|dz  }| j                  ||       y )N  win32   I   )	r  r   S_IMODEr>   rL   r   sysplatformrE   )r   r   r   rm   users        r   test_file_modezTestMkstempInner.test_file_mode  sg     ~~||BGGDII.667<<7" q=Dz*Hx(r   zos.spawnl not availablec                    t         j                  rd}nd}| j                         }| j                  t	        j
                  |j                        d       d|j                  z  }	 t        }t        j                  j                  t        j                  j                  t        j                  j                  |            d      }t        j                  dk(  rdt        j                   z  }d|z  }nt        j                   }t	        j"                  t        j$                  t        j                   ||||      }| j'                  |dk  d	| z         | j'                  |dkD  d
|z         y # t        $ r t        j                  d   }Y w xY w)NvqFz%dr   ztf_inherit_check.pyr4  z"%s"z$child process caught fatal signal %dz child process reports failure %d)r   verboser  rE   r>   get_inheritabler  __file__	NameErrorr8  argvr?   r   r   rF   r9  
executabler   P_WAITr   )r   r=  r   r  metester	decoratedretvals           r   test_noinheritzTestMkstempInner.test_noinherit  s/   
 ??AA~~++DGG4e<DGG^	B bggoobggoob.AB35 <<7"/If_FI299cnniBO!:fWD	F!%G%NO+  	!B	s   %E) )F	F	ztext mode not availablec                 *   | j                  d      }|j                  d       |j                  d       t        j                  |j                  dt        j
                         | j                  t        j                  |j                  d      d       y )Nr   )r  s   blats   extra
r   r  )r  r   r>   lseekr  SEEK_SETrE   r   r   fs     r   test_textmodezTestMkstempInner.test_textmode  sc    
 NNqN!		

q"++&r*G4r   c                     t        j                  t        j                         t        j                         dt         j                  t
              S r{   )r   r  rc   ra   r  r   r   s    r   r   zTestMkstempInner.make_temp  s;    &&x':':'<'/'='='?')'/'>'>'*	, 	,r   c                    t               5  t        ddd      5  | j                         \  }}t        j                  |       | j                  |j                  d             | j                         \  }}t        j                  |       | j                  |j                  d             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wNaaabbb)r   r   r   r>   r   rI   endswith)r   fd1name1fd2name2s        r   !test_collision_with_existing_filez2TestMkstempInner.test_collision_with_existing_file  s     $% 	3"5%7	3>>+LS%HHSMOOENN512>>+LS%HHSMOOENN512	3 	3 	3 	3 	3 	3s#   CBB;*C;C	 CCc                 ~   t               5  t        ddd      5  t        j                         }| j	                  |j                  d             | j                         \  }}t        j                  |       | j	                  |j                  d             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wrS  )	r   r   r   r_   rI   rV  r   r>   r   )r   rM   r  rL   s       r   &test_collision_with_existing_directoryz7TestMkstempInner.test_collision_with_existing_directory  s     $% 	2"5%7	2""$COOCLL/0)JRHHRLOODMM%01	2 	2 	2 	2 	2 	2s#   B3A=B'B3'B0	,B33B<)NNNr[   )r*   r+   r,   r   r  r  r  r%  r+  r1  r   skip_unless_working_chmodr;  r   
skipUnless
has_spawnlr   requires_subprocessrJ  has_textmoderP  r   r[  r]  r-   r   r   r   r   m  s    4$ $( <F"1 (() )) X%>? W  "#P # @#PJ X'@A5 B5,3
2r   r   c                       e Zd ZdZd Zd Zy)TestGetTempPrefixzTest gettempprefix().c                    t        j                         }| j                  |t               | j	                  t        |      d       t        j                         }| j                  |t               | j	                  t        |      d       y r   )r   ra   r   r   assertGreaterrA   rb   r   )r   ppbs      r   test_sane_templatez$TestGetTempPrefix.test_sane_template!  sf    ""$a%3q61%$$&b%(3r7A&r   c                    t        j                         dz   }t        j                  d      }	 t        j                  j                  ||      }t        j                  |t        j                  t        j                  z        }t        j                  |       t        j                  |       t        j                  |       y # t        j                  |       w xY w)Nz
xxxxxx.xxxr   prefix)r   ra   r_   r>   r?   r   r   O_RDWRO_CREATr   r  r/  )r   rg  dr  s       r   test_usable_templatez&TestGetTempPrefix.test_usable_template-  s     ""$|3B'	Q"ABII

23BHHRLIIaLHHQKBHHQKs   A?C CN)r*   r+   r,   r   ri  rp  r-   r   r   rd  rd    s    
'r   rd  c                   (    e Zd ZdZd Zd Zd Zd Zy)TestGetTempDirzTest gettempdir().c                 P   t        j                         t        j                         fD ]{  }| j                  t        j
                  j                  |      xs |t        j                  k(  d|z         | j                  t        j
                  j                  |      d|z         } y )Nz%r is not an absolute pathz%r is not a directory)	r   rc   rd   rI   r>   r?   isabsr   isdirr   ro  s     r   test_directory_existsz$TestGetTempDir.test_directory_existsA  s}     %%')=)=)?@ 	9AOOBGGMM!,>RYY81<>OOBGGMM!,3a79	9r   c                 x    t        j                         5 }|j                  d       d d d        y # 1 sw Y   y xY w)Nr  )r   r\   r   )r   r   s     r   test_directory_writablez&TestGetTempDir.test_directory_writableJ  s3     ((* 	 dJJw	  	  	 s   09c                 4   t        j                         }t        j                         }t        j                         }| j                  ||u        | j	                  t        |      t        |             | j                  |t        j                  |             y rt   )	r   rc   rd   rI   r   rB   rE   r>   fsdecode)r   r   r   r   s       r   r   zTestGetTempDir.test_same_thingS  sl    !!  "QDGT!W-BKKN+r   c                    t        j                  d      }t         j                  d c}t         _        	 t        j                         5 }||d<   | j                  t        j                         |       d d d        |t         _        t        j                  |       y # 1 sw Y   *xY w# |t         _        t        j                  |       w xY w)Nz-Tempr   )r   r_   re   r   r   rE   rc   r/  )r   case_sensitive_tempdir_tempdirr   s       r   test_case_sensitivez"TestGetTempDir.test_case_sensitive]  s     "*!1!1'!:%-%5%5t"("	4..0 PC 6H  !4!4!68NOP
  (HOO23P P
  (HOO23s#   B& *B1B& B#B& &"CN)r*   r+   r,   r   rw  ry  r   r  r-   r   r   rr  rr  >  s    9 ,4r   rr  c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	TestMkstempzTest mkstemp().Nc           	         t        j                  |||      }|1|t        u rt        j                         }nt        j                         }| |       }| |       }t        j
                  |||      \  }}t        j                  j                  |      \  }}t        j                  j                  |      }	| j                  |	|d|	d|d       	 | j                  ||||       t        j                  |       t        j                  |       y # t        j                  |       t        j                  |       w xY w)NrM   rl  suffixzDirectory 'z' incorrectly returned as '')r   r   r   rc   rd   r^   r>   r?   r@   rF   rE   rU   r   r  )
r   rM   rN   rO   r  r  rL   rP   rQ   adirs
             r   r  zTestMkstemp.do_createo  s    11#sC@;c!))+**,;-C;-C%%#c#F
Td+uwws#t=A4H	J	NN4c3/HHRLIIdO HHRLIIdOs   D ,D?c                     | j                          | j                  d       | j                  d       | j                  dd       | j                  dd       | j                  d	       y )
Nr   r  r   r  r  r  r  .r   r  r   s    r   r  zTestMkstemp.test_basic  sV    333C(4V,3r   c                    t        j                         }| j                  |d       | j                  |d       | j                  |d       | j                  |dd       | j                  |dd       | j                  d	
       | j                  t              5  | j                  ddd       d d d        | j                  t              5  | j                  d	dd       d d d        | j                  t              5  | j                  d	dd       d d d        y # 1 sw Y   nxY w# 1 sw Y   HxY w# 1 sw Y   y xY w)Nr   r  r  r  r   r!  r"  r#     .r   r  r  r  )r   rd   r  r   r   rv  s     r   r%  z'TestMkstemp.test_basic_with_bytes_names  s      "1#&1$'1$'1$D11%W54 y) 	<NNs7N;	<y) 	<NNt7N;	<y) 	<NNtFN;	< 	<		< 	<	< 	<	< 	<s$   DD+D7D(+D47E c                     t        j                         }	 | j                  |       | j                  t        j                  |             t        j                  |       y # t        j                  |       w xY wNr   )r   r_   r  r   r$   r>   r/  r0  s     r   r1  z!TestMkstemp.test_choose_directory  sS     	NNsN#NNy11#6N7HHSMBHHSMs   7A# #A:c                 r   t         j                  }| j                  t         j                  t        t	        d       f       	 t        j
                         \  }}t        j                  |       t        j                  |       | j                  |t               t        j                         t         _        | j                  t         j                  t               | j                  t        j                         t               | j                  t        j                         t               t        j
                         \  }}t        j                  |       t        j                  |       | j                  |t               t        j
                  d      \  }}t        j                  |       t        j                  |       | j                  |t               t        j
                  d      \  }}t        j                  |       t        j                  |       | j                  |t               t        j
                  t        j                               \  }}t        j                  |       t        j                  |       | j                  |t               |t         _        y # |t         _        w xY w)Nr  r  z
test-temp-rk  r   )r   re   r   r   rB   r^   r>   r   r  rd   r   rc   )r   orig_tempdirr  r?   s       r   .test_for_tempdir_is_bytes_issue40701_api_wartsz:TestMkstemp.test_for_tempdir_is_bytes_issue40701_api_warts  s   ''h..d4j0AB	,'')HBHHRLIIdO!!$,'335H!!("2"2E:!!("5"5"7=!!("6"6"8%@'')HBHHRLIIdO!!$.''v6HBHHRLIIdO!!$,''|<HBHHRLIIdO!!$,''H,?,?,ABHBHHRLIIdO!!$,+H|Hs   IJ) )J6r=   )	r*   r+   r,   r   r  r  r%  r1  r  r-   r   r   r  r  l  s    . <$,r   r  c                       e Zd ZdZd ZddZd Zd Zd Zd Z	e
j                  d	        Z ej                  ej                   d
k(  d      d        Zd Zd Zd Zd Zy)TestMkdtempzTest mkdtemp().c                 *    t        j                         S rt   )r   r_   r   s    r   r   zTestMkdtemp.make_temp  s    !!r   Nc                 N   t        j                  |||      }|1|t        u rt        j                         }nt        j                         }| |       }| |       }t        j
                  |||      }	 | j                  ||||       |S #  t        j                  |        xY w)Nr  )	r   r   r   rc   rd   r_   rU   r>   r/  )r   rM   rN   rO   r  rL   s         r   r  zTestMkdtemp.do_create  s    11#sC@;c!))+**,;-C;-CCC@	NN4c3/K	HHTNs   6B B$c                 v   t        j                  | j                                t        j                  | j                  d             t        j                  | j                  d             t        j                  | j                  dd             t        j                  | j                  dd             y Nr   r  r   r  r  r  r  )r>   r/  r  r   s    r   r  zTestMkdtemp.test_basic  su    
!"
C()
C()
CS12
Df56r   c                    t        j                         }t        j                  | j	                  |             t        j                  | j	                  |d             t        j                  | j	                  |d             t        j                  | j	                  |dd             t        j                  | j	                  |dd             | j                  t              5  t        j                  | j	                  |d	d             d d d        | j                  t              5  t        j                  | j	                  |dd
             d d d        | j                  t              5  t        j                  | j	                  ddd             d d d        y # 1 sw Y   xY w# 1 sw Y   [xY w# 1 sw Y   y xY w)Nr   r  r  r   r  r!  r"  r#  r  r  r   )r   rd   r>   r/  r  r   r   rv  s     r   r%  z'TestMkdtemp.test_basic_with_bytes_names  s[     "
A&'
A401
A401
A4T:;
A5g>?y) 	CHHT^^t^AB	Cy) 	CHHT^^u&^AB	Cy) 	EHHT^^7^CD	E 	E		C 	C	C 	C	E 	Es$   )(F$.(F03(F<$F-0F9<Gc                 .   t        t        t                    }	 |D ]  }| j                  d      ||<    	 |D ](  }t	        |t
              st        j                  |       * y # |D ](  }t	        |t
              st        j                  |       * w xY wr'  )r(  r   r   r  rC   r   r>   r/  r)  s      r   r+  zTestMkdtemp.test_basic_many  s    eJ'(	  5 NNtN4q	5   a%HHQK V  a%HHQK s   A% %B<Bc                 F   t        j                         }	 t        j                  | j	                  |             t        j                  | j	                  t        j                  |                   t        j                  |       y # t        j                  |       w xY wr  )r   r_   r>   r/  r  r   r$   r0  s     r   r1  z!TestMkdtemp.test_choose_directory  se     	HHT^^^,-HHT^^	(:(:3(?^@AHHSMBHHSMs   AB	 	B c                 T   | j                         }	 t        j                  t        j                  |      j                        }|dz  }d}t
        j                  dk(  r
|dz	  }|dz  }| j                  ||       t        j                  |       y # t        j                  |       w xY w)Ni  i  r4  r5  r6  )	r  r   r7  r>   r   r8  r9  rE   r/  )r   rM   r   rm   r:  s        r   	test_modezTestMkdtemp.test_mode  s     nn	<< 4 45DEMDH||w&  1}:.T8,HHSMBHHSMs   A(B B'ntOnly on Windows.c                    | j                         }	 t        j                  d|gd      j                         }t	        j
                  |       |j                         }t               }d}|j                         j                         D ]  }d }|j                  |      r |j                  |      j                         }n%|r#|d d j                         r|j                         }|s^|j                  |j                  d      d           | j                  dj                         |       y # t	        j
                  |       w xY w)	Nz
icacls.exeoemencodingFr[   :r   zBUILTIN\Users)r  
subprocesscheck_outputcasefoldr>   r/  setstrip
splitlines
startswithremoveprefixisspaceadd	partitionr   )r   rM   outusers
found_userlineacls          r   test_mode_win32zTestMkdtemp.test_mode_win32!  s    nn	))<*=NWWYCHHSMlln
IIK**, 	1DCs#'',224$r(**,jjl		#--,Q/0	1 	)224e< HHSMs   'D, ,Ec                    t               5  t        ddd      5  t        j                  d      }|j	                          | j                  |j                  j                  d             t        j                         }| j                  |j                  d             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrT  rU  Fdelete)	r   r   r   r\   r   rI   rL   rV  r_   )r   r   rM   s      r   r[  z-TestMkdtemp.test_collision_with_existing_file<  s     $% 	1"5%7	1..e<DJJLOODII..u56""$COOCLL/0	1 	1 	1 	1 	1 	1s#   B;BB/B;/B8	4B;;Cc                 V   t               5  t        ddd      5  t        j                         }| j	                  |j                  d             t        j                         }| j	                  |j                  d             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wrS  )r   r   r   r_   rI   rV  )r   dir1dir2s      r   r]  z2TestMkdtemp.test_collision_with_existing_directoryG  s     $% 	2"5%7	2##%DOODMM%01##%DOODMM%01	2 	2 	2 	2 	2 	2s#   BA)BBB	BB(c                    t         j                  }| j                  t         j                  t        t	        d       f       	 t        j
                         }t        j                  |       | j                  |t               t        j                         t         _        | j                  t         j                  t               | j                  t        j                         t               | j                  t        j                         t               t        j
                         }t        j                  |       | j                  |t               t        j
                  d      }t        j                  |       | j                  |t               t        j
                  d      }t        j                  |       | j                  |t               t        j
                  t        j                               }t        j                  |       | j                  |t               |t         _        y # |t         _        w xY w)Nz-dirr  ztest-mkdtemp-rk  r   )r   re   r   r   rB   r_   r>   r/  rd   r   rc   )r   r  r?   s      r   r  z:TestMkdtemp.test_for_tempdir_is_bytes_issue40701_api_wartsQ  sw   ''h..d4j0AB	,##%DHHTN!!$,'335H!!("2"2E:!!("5"5"7=!!("6"6"8%@##%DHHTN!!$.##62DHHTN!!$,##?;DHHTN!!$,##(;(;(=>DHHTN!!$,+H|Hs   G$H1 1H>c                     	 t        j                  d      }| j                  t        j                  j                  |             t        j                  |       y # t        j                         w xY w)Nr  r   )r   r_   rI   r>   r?   rt  r/  )r   r?   s     r   test_path_is_absolutez!TestMkdtemp.test_path_is_absolutek  sG    	##,DOOBGGMM$/0HHTNBHHTNs   AA A3r=   )r*   r+   r,   r   r   r  r  r%  r+  r1  r   r^  r  r   r_  r>   rL   r  r[  r]  r  r  r-   r   r   r  r    s~    "(7E	  (( )" XD*<== >=4	12,4r   r  c                   T     e Zd ZdZ fdZ fdZ G d d      Zd	dZd Zd Z	 xZ
S )

TestMktempzTest mktemp().c                 T    t        j                         | _        t        |           y rt   )r   r_   rM   rw   r;   rx   s    r   r;   zTestMktemp.setUpz  s    ##%r   c                     | j                   r&t        j                  | j                          d | _         t        |           y rt   )rM   r>   r/  rw   tearDownrx   s    r   r  zTestMktemp.tearDown~  s,    88HHTXXDHr   c                   H    e Zd Zej                  Zej                  Zd Z	d Z
y)TestMktemp.mktempedc                     t        j                  |||      | _        t        j                  t        j
                  | j                  | j                  d             y )Nr  r3  )r   r2   rL   r>   r   r   r  )r   rM   rN   rO   s       r   r  zTestMktemp.mktemped.__init__  s9     CCHDI HHRWWTYYe<=r   c                 :    | j                  | j                         y rt   )r  rL   r   s    r   r  zTestMktemp.mktemped.__del__  s    LL#r   N)r*   r+   r,   r>   r  r  r   r  r  r  r  r-   r   r   mktempedr    s     ))))	>	$r   r  c                     | j                  | j                  ||      }| j                  |j                  | j                  ||       |S rt   )r  rM   rU   rL   )r   rN   rO   r   s       r   r  zTestMktemp.do_create  s7    }}TXXsC0tyy$((C5r   c                     | j                          | j                  d       | j                  d       | j                  dd       | j                  dd       y r  r  r   s    r   r  zTestMktemp.test_basic  H    333C(4V,r   c                     t        t        t                    }|D ]  }| j                  d      ||<    ~t	        j
                          y r'  )r(  r   r   r  r   r.  r)  s      r   r   zTestMktemp.test_many  sC    eJ'( 	1A40F1I	1r   )r   r   )r*   r+   r,   r   r;   r  r  r  r  r   r   r   s   @r   r  r  u  s)    $ $-r   r  c                   x    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestNamedTemporaryFilezTest NamedTemporaryFile().Nc                     |t        j                         }t        j                  ||||      }| j                  |j                  |||       |S )N)rM   rl  r  r  )r   rc   r\   rU   rL   )r   rM   rN   rO   r  r   s         r   r  z TestNamedTemporaryFile.do_create  sK    ;%%'C**s3s28: 	tyy#sC0r   c                     | j                          | j                  d       | j                  d       | j                  dd       | j                  dd       y r  r  r   s    r   r  z!TestNamedTemporaryFile.test_basic  r  r   c                     | j                         }t        j                  |      }|j                  }|j                  }~ |d       ~ |d       ~t	        j
                  d      r| j                   |              y y )N   foos   barT)cpython)r  weakrefrefr   r   check_impl_detailassertIsNone)r   rO  wrr   write2s        r   test_method_lookupz)TestNamedTemporaryFile.test_method_lookup  si     NN[[^fv$$T2bd# 3r   c                     g dfd}t         |             D ]  \  }}| j                  ||           | j                  t              dz
         y )N)s   spam
s   eggs
s   beans
c                      t        j                  d      } | j                  dj                               | j	                  d       | S )Nw+br   r   r   )r   r\   r   r   seek)rO  liness    r   	make_filez3TestNamedTemporaryFile.test_iter.<locals>.make_file  s7    ++7AGGCHHUO$FF1IHr   r[   )	enumeraterE   rA   )r   r  r   lr  s       @r   	test_iterz TestNamedTemporaryFile.test_iter  sW     3	
 ik* 	*DAqQa)	*CJN+r   c                     t        j                         }| j                  t        j                  j                  |j                        d|j                  z         y )Nz$NamedTemporaryFile %s does not exist)r   r\   rI   r>   r?   existsrL   rN  s     r   test_creates_namedz)TestNamedTemporaryFile.test_creates_named  s<    '')qvv.>G	Ir   c                    t        j                         }	 t        j                  |      5 }|j                  d       d d d        | j	                  t        j                  |      g        | j                  t
        j                  j                  j                        d|j                  z         t        j                  |       y # 1 sw Y   xY w# t        j                  |       w xY w)Nr   r  z(NamedTemporaryFile %s exists after close)r   r_   r\   r   rE   r>   r   r   r?   r  rL   r/  r   rM   rO  s      r   test_del_on_closez(TestNamedTemporaryFile.test_del_on_close  s     	,,5 ! !RZZ_b1RWW^^AFF3BQVVKM HHSM! ! HHSMs"   C CA3C CC C*c                     t        j                         }d }	 t        j                  |d      }|j                  }|j	                  d       |j                          | j                  t        j                  j                  |j                        d|j                  z         |t        j                  |       t        j                  |       y # |t        j                  |       t        j                  |       w xY w)NF)rM   r  r  z)NamedTemporaryFile %s missing after close)r   r_   r\   rL   r   r   rI   r>   r?   r  r  r/  )r   rM   tmprO  s       r   test_dis_del_on_closez,TestNamedTemporaryFile.test_dis_del_on_close  s     
	++EBA&&CGGGGGIOOBGGNN1662CaffLN 		#HHSM 		#HHSMs   B
C .C=c                     t        j                         }|j                  d       |j                          |j                          |j                          y N   abc
)r   r\   r   r   rN  s     r   test_multiple_closez*TestNamedTemporaryFile.test_multiple_close  s7    '')							r   c                 n   t        j                         5 | j                  t        j                  j                  j                               d d d        | j                  t        j                  j                  j                               fd}| j                  t        |       y # 1 sw Y   ]xY w)Nc                  6     5  	 d d d        y # 1 sw Y   y xY wrt   r-   rO  s   r   
use_closedz?TestNamedTemporaryFile.test_context_manager.<locals>.use_closed            )
r   r\   rI   r>   r?   r  rL   r   r   r   r   r  rO  s     @r   test_context_managerz+TestNamedTemporaryFile.test_context_manager  sy    ((* 	4aOOBGGNN16623	4/0	 	*j1	4 	4s   9B++B4c                    t        j                         }	 t        j                  |dd      5 }|j                  d       |j                  }|j                          | j                         5  | j                  t        j                  j                  |j                        d|j                  d       d d d        d d d        | j                         5  | j                  t        j                  j                  j                        d|j                  d       d d d        t        j                  |       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   7xY w# t        j                  |       w xY w)NTFrM   r  delete_on_closer  NamedTemporaryFile z= is incorrectly deleted on closure when delete_on_close=Falsez" exists after context manager exit)r   r_   r\   r   rL   r   subTestrI   r>   r?   r  r   r/  )r   rM   rO  f_names       r   :test_context_man_not_del_on_close_if_delete_on_close_falsezQTestNamedTemporaryFile.test_context_man_not_del_on_close_if_delete_on_close_false  s8   
  	,,48=BD 
NGH 	\\^ NOOBGGNN166$:1!&& <L MNN
N  @  !7#6qvvj A> "?@@ HHSMN N
N 
N@ @ HHSMsT   E >E,AD:4E<E AEE :E	?EEE EE E5c                 f   t        j                         }	 t        j                  |dd      5 }|j                  d       |j	                          t        j                  |j                         d d d        t        j                  |       y # 1 sw Y   xY w# t        j                  |       w xY wNTFr  r  )	r   r_   r\   r   r   r>   r  rL   r/  r  s      r   &test_context_man_ok_to_delete_manuallyz=TestNamedTemporaryFile.test_context_man_ok_to_delete_manually5  s      		,,48=BD "GH 			!&&!" HHSM" " HHSMs#   B AB/B BB B0c                    t        j                         }d}	 t        j                  |dd      5 }|j                  d       |j                  }d d d        | j                  t        j                  j                  j                        d|j                  d       t        j                  |       t        j                  |       y # 1 sw Y   {xY w# t        j                  |       t        j                  |       w xY w)Nr   FTr  r  r  z exists after close)r   r_   r\   r   rL   rI   r>   r?   r  r  r/  )r   rM   r  rO  s       r   (test_context_man_not_del_if_delete_falsez?TestNamedTemporaryFile.test_context_man_not_del_if_delete_falseD  s     
	,,U=AC  FG   OOBGGNN1662-affZ7JKM IIfHHSM    IIfHHSMs#   C CAC CC ,D c                 0   d }t        j                          t        j                         }	  ||      }| j	                  t
        j                  j                  |      d|d       t        j                  |       y # t        j                  |       w xY w)Nc                 p    t        j                  | dd      }|j                  }|j                  d       |S r  )r   r\   rL   r   rM   rO  tmp_names      r   my_funcz=TestNamedTemporaryFile.test_del_by_finalizer.<locals>.my_funcW  s6    ++D<ACAvvHGGG Or   r  z exists after finalizer )	gccollectr   r_   r   r>   r?   r  r/  )r   r	  rM   r  s       r   test_del_by_finalizerz,TestNamedTemporaryFile.test_del_by_finalizerT  su    	 	

 	s|HRWW^^H5-h\ :2 34 HHSMBHHSMs   ;A> >Bc                 @    dt         fd}t        j                          y )Nreturnc                     t        j                  | dd      }|j                  }|j                  d       |j	                          t        j                  |       |S r  )r   r\   rL   r   r   r>   r  r  s      r   r	  zVTestNamedTemporaryFile.test_correct_finalizer_work_if_already_deleted.<locals>.my_funcn  sI    ++D<ACAvvHGGGGGIIIhOr   )r   r
  r  )r   r	  s     r   .test_correct_finalizer_work_if_already_deletedzETestNamedTemporaryFile.test_correct_finalizer_work_if_already_deletedj  s    	# 	 	

r   c                    t        j                         }| j                  t        j                  |       | j                  t              5  t        j                  d|       d d d        | j                  t              5  t        j                  d|       d d d        | j                  t        j                  |      g        y # 1 sw Y   dxY w# 1 sw Y   ;xY wNr  )r   rM      )r   r_   
addCleanupr   r   r   r   r\   r   rE   r>   r   r0  s     r   test_bad_modez$TestNamedTemporaryFile.test_bad_modey  s     	((#.z* 	<''Ts;	<y) 	9''QC8	9C"-		< 	<	9 	9   
C?CCCc                 :   t        j                         }| j                  t        j                  |       | j                  t              5  t        j                  dd|       d d d        | j                  t        j                  |      g        y # 1 sw Y   /xY wNwzbad-encoding)r  rM   )r   r_   r  r   r   r   LookupErrorr\   rE   r>   r   r0  s     r   test_bad_encodingz(TestNamedTemporaryFile.test_bad_encoding  su     	((#.{+ 	O''n#N	OC"-	O 	O   
BBc                 `   t        j                         }| j                  t        j                  |       t        j                  d      5 }t        j                  dt        j                               5 }t               |_	        | j                  t              5  t        j                  |       d d d        d d d        d d d                j                  j                          | j                  t        j                   |      g        y # 1 sw Y   ^xY w# 1 sw Y   bxY w# 1 sw Y   fxY w)Nztempfile._TemporaryFileWrapperzio.openr   )r   r_   r  r   r   r   patch	mock_openKeyboardInterruptside_effectr   r\   r   assert_calledrE   r>   r   )r   rM   mock_ntfr  s       r   test_unexpected_errorz,TestNamedTemporaryFile.test_unexpected_error  s     	((#.ZZ89 	5XZZ	4>>#34	58A#4#6H ""#45 5++45	5 	5
 	'')C"-5 5	5 	5 	5 	5s<   
)D$3%DD/D7D$DDD!	D$$D-)Nr   r   T)r*   r+   r,   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r-   r   r   r  r    s[    $-$ ,I
 28 ,..	.r   r  c                   "   e Zd ZdZddZd Zd Zd Zd Zd Z	 e
j                  ej                  d	      d
        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z e
j                  ej                  d	      d        Zd Zy)TestSpooledTemporaryFilezTest SpooledTemporaryFile().Nc                 d    |t        j                         }t        j                  ||||      }|S )N)max_sizerM   rl  r  )r   rc   rg   )r   r(  rM   rN   rO   r   s         r   r  z"TestSpooledTemporaryFile.do_create  s2    ;%%'C,,hCPS\_`r   c                     | j                         }| j                  |j                         | j                  ddd      }| j                  |j                         y )Nr   r   r  )r(  rN   rO   )r  r   _rolledrN  s     r   r  z#TestSpooledTemporaryFile.test_basic  sF    NN#NNCSfN=#r   c                 `    | j                  | j                         t        j                         y rt   )r   r  ioIOBaser   s    r   test_is_iobasez'TestSpooledTemporaryFile.test_is_iobase  s    dnn.		:r   c                 ~    h d}t        t        t        j                              }||z
  }| j	                  |d       y )N>   r   r  tellr   flushread1r   closeddetacherrorsfilenoisatty__exit____iter____next__r  newlinesreadablereadintoreadlineseekabletruncatewritable	__enter__	readinto1	readlines
writelineszMSpooledTemporaryFile missing attributes from IOBase/BufferedIOBase/TextIOBase)r  rM   r   rg   r   )r   iobase_attrsspooledtempfile_attrsmissing_attrss       r   test_iobase_interfacez.TestSpooledTemporaryFile.test_iobase_interface  sB    	
 !$C(E(E$F G$'<</	
r   c                 N   t        j                         }	 t        j                  d|      }| j                  |j                         |j                  d       | j                  |j                         |j                  }|j                          | j                  t        j                  |      g        t        |t              s2| j                  t        j                  j                  |      d|z         t        j                   |       y # t        j                   |       w xY w)N
   )r(  rM   s   blat blat blat blat blat z*SpooledTemporaryFile %s exists after close)r   r_   rg   r   r*  r   rI   rL   r   rE   r>   r   rC   intr?   r  r/  )r   rM   rO  filenames       r   r  z*TestSpooledTemporaryFile.test_del_on_close  s     	--rsCAQYY'GGL!OOAII&vvHGGIRZZ_b1h,  !9@8KM HHSMBHHSMs   C!D D$c                     | j                  d      }|j                  d       | j                  |j                  d        | j	                  t
              5  |j                          d d d        y # 1 sw Y   y xY w)NrK  r(  r  )r  r   rE   rL   assertWarnsResourceWarningr  rN  s     r   test_del_unrolled_filez/TestSpooledTemporaryFile.test_del_unrolled_file  s_     NNBN'	&o. 	IIK	 	 	s   A//A8z&Emscripten cannot fstat renamed files.c                    | j                  d      }|j                  d       |j                  }| j                  t        j
                  j                  |             | j                  t              5  |j                          d d d        | j                  t        j
                  j                  |      d|z         y # 1 sw Y   <xY w)Nr  rO  r  z9Rolled SpooledTemporaryFile (name=%s) exists after delete)r  r   rL   rI   r>   r?   r  rP  rQ  r  r   )r   rO  rL   s      r   test_del_rolled_filez-TestSpooledTemporaryFile.test_del_rolled_file  s     NNAN&	vvt,-o. 	IIK	GGNN4 G$N	
	 	s   3B??Cc                     | j                  d      }| j                  |j                         t        d      D ]%  }|j	                  dd       |j                  d       ' | j                  |j                         y )N   rO     r      xxxxxxxxxxxxxxxxxxxx)r  r   r*  r   r  r   )r   rO  r   s      r   test_rewrite_smallz+TestSpooledTemporaryFile.test_rewrite_small  sd    NNBN'#q 	AFF1aLGGI	 	#r   c                 f   | j                  d      }| j                  |j                         |j                  d       | j                  |j                         |j                  d       | j                  |j                         |j                  d       | j	                  |j                         y )NrV  rO  rX  
   xxxxxxxxxx   x)r  r   r*  r   rI   rN  s     r   test_write_sequentialz.TestSpooledTemporaryFile.test_write_sequential  s}     NNBN'#		#		#			"r   c                     | j                         }|j                  d       |j                  d      }| j                  |d       |j	                         }| j                  |d       y )N)r\     y   zr   s   xyz)r  rE  r  rE   r   )r   rO  posbufs       r   test_writelinesz(TestSpooledTemporaryFile.test_writelines  sS    NN	'(ffQia ffhf%r   c                     | j                  d      }|j                  d       | j                  |j                         |j	                  d       | j                  |j                         y )N#   rO  )rX  r[  s   xxxxxr\  )r  rE  r   r*  r   rI   rN  s     r   test_writelines_sequentialz3TestSpooledTemporaryFile.test_writelines_sequential  sN     NNBN'	56#			"r   c                 4   | j                  d      }| j                  |j                         |j                  dd      }| j	                  |d       | j                  |j                         |j                  d       | j                  |j                         y )NrV  rO  r   r   r\  )r  r   r*  r  rE   r   rI   )r   rO  ra  s      r   test_sparsez$TestSpooledTemporaryFile.test_sparse  sr     NNBN'#ffS!nc"#			"r   c                     | j                  d      }| j                  |j                         | j                  |j	                         dkD         | j                  |j                         y )NrV  rO  r   )r  r   r*  rI   r6  rN  s     r   test_filenoz$TestSpooledTemporaryFile.test_fileno  sJ    NNBN'#
Q'		"r   c                     t        j                         }|j                  d       | j                  |j                         |j                          |j                          |j                          y r  )r   rg   r   r   r*  r   rN  s     r   #test_multiple_close_before_rolloverz<TestSpooledTemporaryFile.test_multiple_close_before_rollover&  sI    ))+	#						r   c                     t        j                  d      }|j                  d       | j                  |j                         |j                          |j                          |j                          y )Nr[   rO  r  )r   rg   r   rI   r*  r   rN  s     r   "test_multiple_close_after_rolloverz;TestSpooledTemporaryFile.test_multiple_close_after_rollover/  sI    ))15			"						r   c                     | j                  d      }|j                  }|j                  }|j                  } |d        |d        |dd       | j	                   |d      d       y )NrV  rO  s#   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas#   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   F   sF   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)r  r   r   r  rE   )r   rO  r   r   r  s        r   test_bound_methodsz+TestSpooledTemporaryFile.test_bound_methods8  s]     NNBN'vvvviiQ
b#45r   c                 J   t        j                  d      }|j                  d       | j                  |j                         | j                  |j                  d       | j                  |j                         | j                  t              5  |j                   d d d        | j                  t              5  |j                   d d d        | j                  t              5  |j                   d d d        |j                  d       | j                  |j                         | j                  |j                  d       | j                  |j                         | j                  t              5  |j                   d d d        | j                  t              5  |j                   d d d        | j                  t              5  |j                   d d d        y # 1 sw Y   @xY w# 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   y xY w)NrK  rO  r[  r  r\  zrb+)r   rg   r   r   r*  rE   r   r  rL   r   r   r;  r  r5  rI   assertIsNotNonerN  s     r   test_propertiesz(TestSpooledTemporaryFile.test_propertiesF  s   ))26		#'!&&!~. 	JJ	~. 	JJ	~. 	HH	 	
		"'QVV$~. 	JJ	~. 	JJ	~. 	HH	 		 		 		 		 		 		 	sH   G9G'#G40HHHG$'G14G>H
HH"c                    t        j                  ddd      }|j                  d       |j                  d       | j	                  |j                         d       |j                  d       |j                  d       | j	                  |j                         d       | j                  |j                         | j	                  |j                  d       | j                  |j                         | j	                  |j                  t        j                         | j	                  |j                  d       | j	                  |j                  d	       |j                  d
       |j                  d       | j	                  |j                         d       |j                  d       |j                  d       | j	                  |j                         d       | j!                  |j                         | j	                  |j                  d       | j#                  |j                         | j	                  |j                  t        j                         | j	                  |j                  d       | j	                  |j                  d	       y )Nw+rK  utf-8)r   r(  r  zabc
r   zdef
zabc
def
strictzxyzzy
zabc
def
xyzzy
zfoobar
zabc
def
xyzzy
foobar
)r   rg   r   r  rE   r   r   r*  r   r  rL   r;  r>   linesepr  r5  rI   rs  rN  s     r   test_text_modez'TestSpooledTemporaryFile.test_text_mode^  s    ))tb3:<		q	7+		q	<0#&!&&!RZZ0W-8,			q	#67		q	#BC		"&QVV$RZZ0W-8,r   c                    t        j                  ddddd      }|j                  d       |j                  d       | j	                  |j                         d       | j                  |j                         | j	                  |j                  d       | j                  |j                         | j                  |j                         | j	                  |j                  d       | j	                  |j                  d       |j                  d	       |j                  d
       |j                  d       | j	                  |j                         d       | j                  |j                         | j	                  |j                  d       | j                  |j                         | j                  |j                         | j	                  |j                  d       | j	                  |j                  d       y )Nrv  rK  r   rw  r1   )r   r(  newliner  r5  u   Λ
r   u   ΜΜΜΜΜΜΜΜΜΜ
u(   ΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝuB   Λ
ΜΜΜΜΜΜΜΜΜΜ
ΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ)r   rg   r   r  rE   r   r   r*  r   r  rL   rs  r;  r  r5  rI   rN  s     r   test_text_newline_and_encodingz7TestSpooledTemporaryFile.test_text_newline_and_encoding~  sm   ))tb24w19; 	
	q	<0#&!&&!QZZ(W-8,	&'		q	I	K		"&QVV$QZZ(W-8,r   c                 4   t        j                  d      5 | j                  j                         | j                  j                         d d d        | j                  j                         fd}| j                  t        |       y # 1 sw Y   @xY w)Nr[   rO  c                  6     5  	 d d d        y # 1 sw Y   y xY wrt   r-   r  s   r   r  zQTestSpooledTemporaryFile.test_context_manager_before_rollover.<locals>.use_closed  r  r  )r   rg   r   r*  r3  rI   r   r   r  s     @r   $test_context_manager_before_rolloverz=TestSpooledTemporaryFile.test_context_manager_before_rollover  su    **A6 	'!QYY'QXX&	' 	!	 	*j1	' 	's   7BBc                    t        j                  d      5 | j                  j                         j	                  d       j                          | j                  j                         | j                  j                         d d d        | j                  j                         fd}| j                  t        |       y # 1 sw Y   @xY w)Nr[   rO  r  c                  6     5  	 d d d        y # 1 sw Y   y xY wrt   r-   r  s   r   r  zQTestSpooledTemporaryFile.test_context_manager_during_rollover.<locals>.use_closed  r  r  )
r   rg   r   r*  r   r1  rI   r3  r   r   r  s     @r   $test_context_manager_during_rolloverz=TestSpooledTemporaryFile.test_context_manager_during_rollover  s    **A6 	'!QYY'GGHGGIOOAII&QXX&	' 	!	 	*j1	' 	's   A3C

Cc                 z   t        j                  d      j                  d       j                          | j	                  j
                         5  | j                  j                         d d d        | j	                  j                         fd}| j                  t        |       y # 1 sw Y   @xY w)Nr[   rO  r  c                  6     5  	 d d d        y # 1 sw Y   y xY wrt   r-   r  s   r   r  zPTestSpooledTemporaryFile.test_context_manager_after_rollover.<locals>.use_closed  r  r  )
r   rg   r   r1  rI   r*  r   r3  r   r   r  s     @r   #test_context_manager_after_rolloverz<TestSpooledTemporaryFile.test_context_manager_after_rollover  s    ))15					" 	'QXX&	'!	 	*j1	' 	's   B11B:c                 8   t        j                  d      }|j                  d       |j                  d       |j	                          | j                  |j                         | j                  |j                  j                         d       t        j                  d      }|j                  d       |j	                  d       | j                  |j                         | j                  |j                  j                         d       t        j                  d      }|j                  d       |j	                  d       | j                  |j                         | j                  t        j                  |j                               j                  d       y )	NrK  rO  s   abcdefg
r   r      s   abcdr   )r   rg   r   r  r@  r   r*  rE   _filegetvaluerI   r>   fstatr6  st_sizerN  s     r   !test_truncate_with_size_parameterz:TestSpooledTemporaryFile.test_truncate_with_size_parameter  s   
 ))26		q		

#))+S1))26		

1#))+W5))26		

2		"!((*-55r:r   c                 n    | j                  t        j                  t           t        j
                         y rt   )r   r   rg   r   typesGenericAliasr   s    r   test_class_getitemz+TestSpooledTemporaryFile.test_class_getitem  s&    h;;EB((	*r   )r   Nr   r   ) r*   r+   r,   r   r  r  r.  rI  r  rR  r   r   r   r   rT  rY  r]  rc  rf  rh  rj  rl  rn  rq  rt  rz  r}  r  r  r  r  r  r-   r   r   r&  r&    s    &$;
*" X__G

$
#&#	##60-@-4	222 X__G;;**r   r&  c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
TestTemporaryFilezTest TemporaryFile().c                 ,    t        j                          y rt   )r   r]   r   s    r   r  zTestTemporaryFile.test_basic  s     ""$r   c                     t        j                         }t        j                  |      }|j                  d       	 t	        j
                  |       y #  |j                          t	        j
                  |        xY wr-  )r   r_   r]   r   r>   r/  r   r  s      r   test_has_no_namez"TestTemporaryFile.test_has_no_name  sZ    ""$C&&3/AGGG	s   A (A;c                     t        j                         }|j                  d       |j                          |j                          |j                          y r  )r   r]   r   r   rN  s     r   r  z%TestTemporaryFile.test_multiple_close  s7    &&(AGGHGGIGGIGGIr   c                 `      fd} |dd        |dd        |ddd        |d	dd
       y )Nc                     t        j                  |i |5 }|j                  |        |j                  d       j	                  | |j                                d d d        y # 1 sw Y   y xY wr   )r   r]   r   r  rE   r   )inputr   r   fileobjr   s       r   	roundtripz;TestTemporaryFile.test_mode_and_encoding.<locals>.roundtrip   sZ    ++T<V< <MM%(LLO$$UGLLN;< < <s   AA##A,s   1234r  zabdc
rv  u   Λzutf-16r  zfoo
r   )r|  r-   )r   r  s   ` r   test_mode_and_encodingz(TestTemporaryFile.test_mode_and_encoding  s6    < gu%h%hx8ir2r   c                    t        j                         }| j                  t        j                  |       | j                  t              5  t        j                  d|       d d d        | j                  t              5  t        j                  d|       d d d        | j                  t        j                  |      g        y # 1 sw Y   dxY w# 1 sw Y   ;xY wr  )r   r_   r  r   r   r   r   r]   r   rE   r>   r   r0  s     r   r  zTestTemporaryFile.test_bad_mode  s    ""$COOI,,c2"":. ;&&Dc:;""9- 8&&A378RZZ_b1	; ;8 8r  c                 :   t        j                         }| j                  t        j                  |       | j                  t              5  t        j                  dd|       d d d        | j                  t        j                  |      g        y # 1 sw Y   /xY wr  )r   r_   r  r   r   r   r  r]   rE   r>   r   r0  s     r   r  z#TestTemporaryFile.test_bad_encoding  su    ""$COOI,,c2"";/ N&&s^MNRZZ_b1N Nr  c           
         t        j                         }| j                  t        j                  |       t        j                  dd      5  t        j                  d      5 }t        j                  d      5 }t        j                  d      5 }t               |_        | j                  t              5  t        j                  |       d d d        d d d        d d d        d d d        d d d        j                          | j                  t        j                  |      g        y # 1 sw Y   _xY w# 1 sw Y   cxY w# 1 sw Y   gxY w# 1 sw Y   kxY w# 1 sw Y   oxY w)Nztempfile._O_TMPFILE_WORKSFz	os.unlinkzos.openzos.closer   )r   r_   r  r   r   r   r  r   r!  r   r]   r"  rE   r>   r   )r   rM   mock_unlinkr  
mock_closes        r   r$  z'TestTemporaryFile.test_unexpected_error  s   ""$COOI,,c27? 4K(4,7I&4*3J'4 ,6*;*='&&'89 4**s344 4 4 4 $$&RZZ_b14 44 4 4 4 4 4 4 4sl   E!E7D?%D3	2D'	D3	D?E!E'D0,D3	3D<8D??EEE	EE N)r*   r+   r,   r   r  r  r  r  r  r  r$  r-   r   r   r  r    s(    #	%
	 		3	2	2	2r   r  c                       e Zd Zd Zd Zd Zy)NulledModulesc                     |D cg c]  }|j                    c}| _        | j                  D cg c]  }|j                          c}| _        y c c}w c c}w rt   )rj   refscopycontents)r   modulesmodr  s       r   r  zNulledModules.__init__+  s<    -45cS\\5	/3yy99 69s
   AAc                 >    | j                   D ]  }|D ]  }d ||<   	  y rt   )r  )r   ro  ro   s      r   rB  zNulledModules.__enter__/  s-     	A #	r   c                     t        | j                  | j                        D ]&  \  }}|j                          |j	                  |       ( y rt   )zipr  r  clearupdate)r   exc_inforo  r   s       r   r8  zNulledModules.__exit__4  s8    		4==1 	DAqGGIHHQK	r   N)r*   r+   r,   r  rB  r8  r-   r   r   r  r  *  s    :
r   r  c                   2   e Zd ZdZ	 	 ddZddZd Zd Zd Z e	j                  ej                  dk(  d	      d
        Z e	j                  ej                  dk(  d	      d        Zej                   d        Zej                   d        Z e	j                   eed      d      ej                   d               Zej,                  d        Zej,                  d        Zd Zd Zd Zd Zd Zd Zd Zd Z  e	j                   eed      d      d        Z!d Z"y)TestTemporaryDirectoryzTest TemporaryDirectory().Nc                     |t        j                         }t        j                  ||||      }| j                  |j                  |||       | j                  |j                  |||       |S )N)rM   rl  r  ignore_cleanup_errors)r   rc   rh   rU   rL   
do_create2)	r   rM   rN   rO   recursedirsfilesr  r  s	            r   r  z TestTemporaryDirectory.do_create=  sb    ;%%'C))C"79 	sxxc3/'47
r   c                    |r_t        |      D ]Q  }t        j                  j                  |d|z        }t        j                  |       | j                  ||dz
  ||       S t        |      D ]I  }t        t        j                  j                  |d|z        d      5 }|j                  d       d d d        K y # 1 sw Y   VxY w)Nzdir%dr[   z
test%d.txtr   s   Hello world!)r   r>   r?   r   mkdirr  r   r   )r   r?   r  r  r  r   rL   rO  s           r   r  z!TestTemporaryDirectory.do_create2H  s    4[ >ww||D'A+6gaiu=> u 	)Abggll4)9:DA )Q() )	)) )s   B::C	c                 @   t        j                         5 }	 d d d        | j                  t              5 }t        j                         d d d        | j	                  j
                  j                  t        j                         y # 1 sw Y   rxY w# 1 sw Y   JxY wr  )r   rh   r   r   rE   	exceptionerrnoENOENT)r   r   cms      r   test_mkdtemp_failurez+TestTemporaryDirectory.test_mkdtemp_failureS  s|     ((* 	k	01 	9R''K8	9++U\\:		 		9 	9s   BBBBc                    t        j                         }	 | j                  |      }| j                  t        j
                  j                  |j                        d|j                  z         |j                          | j                  t        j
                  j                  |j                        d|j                  z         t	        j                  |       y # t	        j                  |       w xY w)Nr   z$TemporaryDirectory %s does not exist*TemporaryDirectory %s exists after cleanup)r   r_   r  rI   r>   r?   r  rL   cleanupr   r/  )r   rM   ro  s      r   test_explicit_cleanupz,TestTemporaryDirectory.test_explicit_cleanup]  s     	3'AOOBGGNN1662BQVVKMIIKRWW^^AFF3DqvvMO HHSMBHHSMs   B.C C1c           
      2   t        j                         5 }| j                  |d      }t        j                  |j
                        }| j                  |j                         d|d       t        |dz  d      5 }|j                  d       |j                          ddd       | j                  t        t        |j                  d	                  t        t         j"                  j%                  d
            d|       | j                  |j                         t         j"                  j%                  d
      d|d       |j                          | j'                  |j                         d|d       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z=Test that cleanup doesn't return an error when ignoring them.TrM   r  TemporaryDirectory  does not exist
a_file.txtw+tHello world!
N*win1Unexpected number of files in TemporaryDirectory  existence state unexpectedz exists after cleanup)r   rh   r  pathlibr(   rL   rI   r  r   r   r  rE   rA   r(  globrL  r8  r9  r  r   r   working_dirtemp_dir	temp_path	open_files        r   #test_explicit_cleanup_ignore_errorsz:TestTemporaryDirectory.test_explicit_cleanup_ignore_errorsj  s{   ((* 	Jk~~t & =HX]]3IOOI,,.1)oNPi,.6 #) 01  "# SinnS&9!:; !8!8!?@33<-AB   "''.%i]2MNP   "%i]2GHJ%	J 	J# #	J 	Js%   A&F;"FCFF
	FFr  r  c                    t        j                         5 }| j                  |      }t        t        j
                  j                  |j                  d      d      5  | j                  t              5  |j                          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   zexample.txtr   )r   rh   r  r   r>   r?   r   rL   r   r   r  )r   r  r  s      r   #test_explicit_cleanup_correct_errorz:TestTemporaryDirectory.test_explicit_cleanup_correct_error  s    ((* 	'k~~+~6Hbggll8==-@$G ' &&7 '$$&''	' 	'
' '' '	' 	's<   AB4B(2BB(B4B%!B((B1	-B44B=c                    t        j                         5 }| j                  |      }t        j                  j                  |j                  d      }t        j                  |       t        j                  |      5  | j                  t              5  |j                          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   subdir)r   rh   r  r>   r?   r   rL   r  r   
change_cwdr   r   r  )r   r  r  r  s       r    test_cleanup_with_used_directoryz7TestTemporaryDirectory.test_cleanup_with_used_directory  s    ((* 	'k~~+~6HWW\\(--:FHHV%%f- ' &&7 '$$&''		' 	'' '' '		' 	's<   A'C<CB<#C+C<CCC	CCc                 x   | j                         }| j                  d      }t        j                  |j                  t        j                  j                  |j                  d             |j                          | j                  t        j                  j                  |j                        d|j                  z         | j                  t        j                  j                  |j                        d       | j                  t        j                  |j                        dgd       |j                          y )Nr   r  foor  z-Directory pointed to by a symlink was deletedz	test0.txtz>Contents of the directory pointed to by a symlink were deleted)r  r>   symlinkrL   r?   r   r  r   r  rI   rE   r   )r   d1d2s      r   (test_cleanup_with_symlink_to_a_directoryz?TestTemporaryDirectory.test_cleanup_with_symlink_to_a_directory  s     ^^^^A^& 	

277BGGLL%89 	

0EO	Qrww/G	IBGG,{m(	) 	

r   c                      j                  d      5 }t        j                  j                  |d      }t	        |d      j                          t        j                  j                  |d      }t        j                  |       t        d      D ]  dz   j                  t        d      	      5   fd
} j                  d      5   |dd       d d d         j                  d      5   |dd       d d d         j                  d      5  t        j                  |       t        j                  |      j                  } ||d       t        j                  |      j                  } j                  ||d||fz         d d d         j                  d      5  t        j                  |       t        j                  |      j                  } ||d       t        j                  |      j                  } j                  ||d||fz         d d d        d d d         	 d d d        y # 1 sw Y   cxY w# 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   DxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  file1r   r     r5  03or  c                    j                  d      }t        j                  j                  |j                  d      }t        j
                  | ||       	 t        j                  |d       	 t        j                  |       t        j                  |j                         |j                          j                  t        j                  j                  |j                               y # t        $ r Y w xY w# t        $ r Y w xY wNr   r  r  target_is_directoryF)follow_symlinks)r  r>   r?   r   rL   r  r   NotImplementedErrorr   r  r   r  )targetr  r  r  r   r   s       r   testzDTestTemporaryDirectory.test_cleanup_with_symlink_modes.<locals>.test  s    !^^A^6"$'',,rww	"B

674GI!HHWdEJ!HHWd3 $/

(()@A  3 ! !  1 ! !$   C/ 0C> /	C;:C;>	D
	D
nonexisting filenonexistingFr  nonexisting dirTexisting filez%03o != %03oexisting dir)r  r>   r?   r   r   r   r  r   r  formatr   r   r   rE   )r   r  r  r  r  old_modenew_moder   s   `      @r   test_cleanup_with_symlink_modesz6TestTemporaryDirectory.test_cleanup_with_symlink_modes  s>    ^^A^& ,	P"GGLLW-E##%77<<F+DHHTNa 'P
\\vdE':\; %PB" &89 G]FG&78 F]EF o6 P-#%775>#9#9U>#%775>#9#9((8)78X:N)NPP n5 Pt,#%774=#8#8Tt<#%774=#8#8((8)78X:N)NPP?%P %P'P,	P ,	P2G GF FP PP P?%P %P,	P ,	Ps   B I85I+H9	I+1I	<I+A7I	I+%A7I	I+$I89I>I+II+II+I($I++I50I88Jchflagszrequires os.chflagsc                     t         j                  t         j                  z   j                          j	                  d      5 }t
        j                  j                  |d      }t        |d      j                          t
        j                  j                  |d      }t        j                  |        fd} j                  d      5   |dd	
       d d d         j                  d      5   |dd
       d d d         j                  d      5  t        j                  |       t        j                   |      j                  } ||d	
       t        j                   |      j                  } j                  ||       d d d         j                  d      5  t        j                  |       t        j                   |      j                  } ||d
       t        j                   |      j                  } j                  ||       d d d        d d d        y # 1 sw Y   KxY w# 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   8xY w# 1 sw Y   y xY w)Nr   r  r  r   r  c                    j                  d      }t        j                  j                  |j                  d      }t        j
                  | ||       	 t        j                  |d       	 t        j                  |       t        j                  |j                         |j                          j                  t        j                  j                  |j                               y # t        $ r Y w xY w# t        $ r Y w xY wr  )r  r>   r?   r   rL   r  r  r  r   r  r   r  )r  r  r  r  r  r   s       r   r  zDTestTemporaryDirectory.test_cleanup_with_symlink_flags.<locals>.test  s    ^^A^.'',,rww	:

67/BDJJwuEJJw. 

277E*

  !89 +  ) r  r  r  Fr  r  Tr  r  )r   UF_IMMUTABLEUF_NOUNLINKcheck_flagsr  r>   r?   r   r   r   r  r  r  st_flagsrE   )r   r  r  r  r  	old_flags	new_flagsr  s   `      @r   test_cleanup_with_symlink_flagsz6TestTemporaryDirectory.test_cleanup_with_symlink_flags  s    !!D$4$44^^A^& '	7"GGLLW-E##%77<<F+DHHTN:" 01 ?]>?/0 >]=> o. 7

5%(GGEN33	U6GGEN33	  I67 n- 7

4'GGDM22	Tt4GGDM22	  I67E'	7 '	7,? ?> >7 77 7E'	7 '	7so   BIH"I2H/=IA1H<I A1II"H,	'I/H9	4I<I	II	IIc                 .   t        j                         }	 | j                  |      }|j                  }~| j	                  t
        j                  j                  |      d|z         t        j                  |       y # t        j                  |       w xY w)Nr   *TemporaryDirectory %s exists after __del__)	r   r_   r  rL   r   r>   r?   r  r/  r   rM   ro  rL   s       r   test_del_on_collectionz-TestTemporaryDirectory.test_del_on_collection  sr      	3'A66DRWW^^D1DtKM HHSMBHHSMs   AA= =Bc           
         t        j                         5 }| j                  |d      }t        j                  |j
                        }| j                  |j                         d|d       t        |dz  d      5 }|j                  d       ~ddd       | j                  t        t        |j                  d	                  t        t        j                   j#                  d
            d|       | j                  |j                         t        j                   j#                  d
      d|d       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z@Test that ignoring errors works when TemporaryDirectory is gced.Tr  r  r  r  r  r  Nr  r  r  r  )r   rh   r  r  r(   rL   rI   r  r   r   rE   rA   r(  r  rL  r8  r9  r  r  s        r   $test_del_on_collection_ignore_errorsz;TestTemporaryDirectory.test_del_on_collection_ignore_errors  s>    ((* 	Pk~~t & =HX]]3IOOI,,.1)oNPi,.6 ) 01 SinnS&9!:; !8!8!?@33<-AB   "''.%i]2MNP	P 	P 	P 	Ps%   A&E
;D>B'E
>E	E

Ec                    | j                         5 }dD ]  }dj                  ||      }t        j                  d|      \  }}}|j	                         j                         }| j                  t        j                  j                  |      d|z         |j	                  dd      }| j                  d|       | j                  d	|        	 d d d        y # 1 sw Y   y xY w)
N)builtinsr>   shutilr8  r   r8   a  if True:
                    import builtins
                    import os
                    import shutil
                    import sys
                    import tempfile
                    import warnings

                    tmp = tempfile.TemporaryDirectory(dir={dir!r})
                    sys.stdout.buffer.write(tmp.name.encode())

                    tmp2 = os.path.join(tmp.name, 'test_dir')
                    os.mkdir(tmp2)
                    with open(os.path.join(tmp2, "test0.txt"), "w") as f:
                        f.write("Hello world!")

                    {mod}.tmp = tmp

                    warnings.filterwarnings("always", category=ResourceWarning)
                    )rM   r  -cr  rw  backslashreplace
Exception 'ResourceWarning: Implicitly cleaning upr  r  r   assert_python_okr   r  r   r>   r?   r  r   r   )r   rM   r  codercr  errr  s           r   test_del_on_shutdownz+TestTemporaryDirectory.test_del_on_shutdown0  s    ^^ 	NR N& 3C0' (  -==dDIC::<--/  !9H8SUjj*<=  s3GM7N	N 	N 	Ns   B;CCc           
         t        j                         5 }dj                  |      }t        j                  d|      \  }}}t        j                  |j                         j                               }| j                  t        t        |j                  d                  t        t        j                  j!                  d            d|       | j                  |j#                         t        j                  j!                  d      d|d       |j                  d	d
      }| j%                  d|       | j%                  d|       | j'                  d|       ddd       y# 1 sw Y   yxY w)z?Test ignoring errors works when a tempdir is gc'ed on shutdown.a  if True:
                import pathlib
                import sys
                import tempfile
                import warnings

                temp_dir = tempfile.TemporaryDirectory(
                    dir={working_dir!r}, ignore_cleanup_errors=True)
                sys.stdout.buffer.write(temp_dir.name.encode())

                temp_dir_2 = pathlib.Path(temp_dir.name) / "test_dir"
                temp_dir_2.mkdir()
                with open(temp_dir_2 / "test0.txt", "w") as test_file:
                    test_file.write("Hello world!")
                open_file = open(temp_dir_2 / "open_file.txt", "w")
                open_file.write("Hello world!")

                warnings.filterwarnings("always", category=ResourceWarning)
                )r  r  r  r  r  r  r  rw  r  	ExceptionErrorr  N)r   rh   r  r   r  r  r(   r   r  rE   rA   r(  r  rL  r8  r9  r  r  r   r   )r   r  r  __r  r  r  s          r   "test_del_on_shutdown_ignore_errorsz9TestTemporaryDirectory.test_del_on_shutdown_ignore_errorsP  sB   ((* !	Jk$ F{F3% & )99$ELBSSZZ\%7%7%9:ISinnS&9!:; !8!8!?@33<-AB   "''.%i]2MNP **W&89C[#.Wc*MMCSIC!	J !	J !	Js   EE##E,c                    | j                         5 }dj                  |      }t        j                  d|      \  }}}|j	                         j                         }| j                  t        j                  j                  |      d|z         |j	                  dd      }| j                  d|       | j                  d|       d d d        y # 1 sw Y   y xY w)	Na  if True:
                import sys
                import tempfile
                import warnings

                def generator():
                    with tempfile.TemporaryDirectory(dir={dir!r}) as tmp:
                        yield tmp
                g = generator()
                sys.stdout.buffer.write(next(g).encode())

                warnings.filterwarnings("always", category=ResourceWarning)
                r   r  r  rw  r  r  r  r  )r   rM   r  r  r  r  r  s          r   test_exit_on_shutdownz,TestTemporaryDirectory.test_exit_on_shutdownu  s    ^^ 	J FsFO  )99$ELBSzz|))+HRWW^^H5DxOQ**W&89C\3/MMCSI)	J 	J 	Js   B3CCc                    | j                         5 }| j                  |d      }|j                  }t        j                  dt        fd      5  t        j                  dt               ~t        j                          d d d        | j                  t        j                  j                  |      d|z         d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)	N   )rM   r  
ImplicitlyF)quietalways)r3   r  )r  rL   r   r7   rQ  r8   r9   r   r.  r   r>   r?   r  r  s       r   test_warnings_on_cleanupz/TestTemporaryDirectory.test_warnings_on_cleanup  s    ^^ 	M32A66D !//1@1B6;= % ''?K""$% RWW^^D1DtKM	M 	M
% %	M 	Ms#   =C1C?:CC	CCc                     | j                         }|j                          |j                          |j                          y rt   )r  r  rv  s     r   r  z*TestTemporaryDirectory.test_multiple_close  s)    NN									r   c                 B   | j                         }|5 }| j                  t        j                  j	                  |             | j                  ||j                         d d d        | j                  t        j                  j	                               y # 1 sw Y   8xY wrt   )r  rI   r>   r?   r  rE   rL   r   )r   ro  rL   s      r   r  z+TestTemporaryDirectory.test_context_manager  sr    NN 	+$OOBGGNN401T166*	+ 	-.	+ 	+s   ABBc                 r   t        d      D ]  }|dz  }| j                  t        |d            5  | j                  ddd      }|5  t	        j
                  |j                  d	      D ]W  \  }}}|D ]6  }t	        j                  t        j                  j                  ||      |       8 t	        j                  ||       Y |j                          d d d        | j                  t        j                  j                  |j                               d d d         y # 1 sw Y   MxY w# 1 sw Y   *xY w)
Nr  r5  r  r  r   r  r  r  r  Ftopdown)r   r  r  r  r>   walkrL   r   r?   r   r  r   r  )r   r   ro  rootr  r  rL   s          r   
test_modesz!TestTemporaryDirectory.test_modes  s   !H 	9DQJD6$#67 	9NN11AN>  -/WWQVVU-K -)dE$) EDHHRWW\\$%=tDEt,- IIK    !78	9 	9	9   	9 	9s%   D,BD A D, D)%D,,D6	c                 n   t         j                  }	 t        |d      j                          	 t	        j
                  ||       t	        j
                  |d       t        j                  |       y # t        $ r"}| j                  d|dd|        Y d }~<d }~ww xY w# t        j                  |       w xY w)Nr  r   z chflags() doesn't support flags z#bz: )	r   TESTFNr   r   r>   r  r   r   r  )r   r  rM  excs       r   r   z"TestTemporaryDirectory.check_flags  s    ##	'3%%'(

8U+ 

8Q'X&  4 @!&r
"SE3 4 44 X&s4   B A/ B /	B8BB BB B4c           	      D   t         j                  t         j                  z  }| j                  |       | j	                  ddd      }|5  t        j                  |j                  d      D ]W  \  }}}|D ]6  }t        j                  t
        j                  j                  ||      |       8 t        j                  ||       Y |j                          d d d        | j                  t
        j                  j                  |j                               y # 1 sw Y   BxY w)Nr   r  r(  Fr)  )r   r  r  r   r  r>   r+  rL   r  r?   r   r  r   r  )r   r  ro  r,  r  r  rL   s          r   
test_flagsz!TestTemporaryDirectory.test_flags  s    !!D$4$44NN11AN6 	%'WWQVVU%C (!dE! @DJJrww||D$7?@

4'( IIK	 	/0	 	s   	BDDc                     t        j                  d      5 }	 d d d        | j                  t        j                  j                               t        j                  |       y # 1 sw Y   MxY w)NFr  )r   rh   rI   r>   r?   r  r  r   )r   r  s     r   test_delete_falsez(TestTemporaryDirectory.test_delete_false  sO    ((6 	+	{34k"	 	s   A%%A.)Nr   r   r[   r[   r[   F)r[   r[   r[   )#r*   r+   r,   r   r  r  r  r  r  r   r_  r>   rL   r  r  r   skip_unless_symlinkr  r  hasattrr  r   cpython_onlyr  r
  r  r  r  r$  r  r  r-  r   r2  r4  r-   r   r   r  r  :  s   $KL(-		);J0 XD*<=' >' XD*<=	' >	' "" #( "".P #.P` XY/1FG"",7 # H,7\ 
 
 P P(N@#JJJ0M /9'  XY/1FG1 H1#r   r  __main__):r   r  r,  r>   r  r8  rV   r8   
contextlibr   r  r  r
  r  r  r   r   r  r   test.supportr   r   r   r  r  rb  r6  r`  r9  r  r   TestCaser   r/   rY   rr   r   r   r   contextmanagerr   r   r   r   rd  rr  r  r  r  r  r&  r\   r]   r  r  r  r*   mainr-   r   r   <module>r>     s     	 	  
 	      	      " & ( ((H,C,CCR"
 <<9%JJ(7H-- (7X,28$$ ,2^7, 7<;7\ ;7~")| ")TIL I@ L     2 %  %Fn2~| n2b @+4\ +4\[,, [,|h., hV0 0|_.\ _.FC*| C*J
 h&<&<<I2L I2Z  c#\ c#J zHMMO r   