B
    2*™\.Ï  ã               @   s2  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 eedƒr”d dlZdZnd Ze je jkZeedƒZej d¡rÀd	Znd
ZG dd„ de
jƒZG dd„ de
jƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!ej"dd„ ƒZ#dd„ Z$G dd„ dƒZ%G dd „ d e%eƒZ&G d!d"„ d"eƒZ'G d#d$„ d$eƒZ(G d%d&„ d&eƒZ)G d'd(„ d(e%eƒZ*G d)d*„ d*eƒZ+G d+d,„ d,eƒZ,G d-d.„ d.eƒZ-e j.e j/k	rþG d/d0„ d0eƒZ0G d1d2„ d2ƒZ1G d3d4„ d4eƒZ2e3d5kr.e
 4¡  dS )6é    N)Úmock)Úsupport)Úscript_helperÚstaté   ÚspawnlZopenbsdé0   éd   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestLowLevelInternalsc             C   s:   |   tt d¡¡ |   tt d¡¡ |   tt d ¡¡ d S )NÚ ó    )ÚassertIsÚstrÚtempfileÚ_infer_return_typeÚbytes)Úself© r   ú=C:\ALexclude\prg\programme\Python37\Lib\test\test_tempfile.pyÚtest_infer_return_type_singles(   s    z4TestLowLevelInternals.test_infer_return_type_singlesc          	   C   sp   |   tt dd¡¡ |   tt dd¡¡ |  t¡ t dd¡ W d Q R X |  t¡ t dd¡ W d Q R X d S )Nr   r   )r   r   r   r   r   ÚassertRaisesÚ	TypeError)r   r   r   r   Ú test_infer_return_type_multiples-   s    z6TestLowLevelInternals.test_infer_return_type_multiplesc          	   C   s°   |   tt d d¡¡ |   tt dd ¡¡ |   tt d d ¡¡ |   tt dd ¡¡ |   tt d d¡¡ |  t¡ t dd d¡ W d Q R X |  t¡ t dd d¡ W d Q R X d S )Nr   r   )r   r   r   r   r   r   r   )r   r   r   r   Ú)test_infer_return_type_multiples_and_none5   s    z?TestLowLevelInternals.test_infer_return_type_multiples_and_noneN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r
   '   s   r
   c               @   s8   e Zd Ze d¡Ze d¡Zdd„ Zdd„ Zdd„ Z	d	S )
ÚBaseTestCasez^[a-z0-9_-]{8}$s   ^[a-z0-9_-]{8}$c             C   s*   t  ¡ | _| j ¡  tjdtdtd d S )NÚignoreÚmktemp)ÚcategoryÚmessageÚmodule)r   Úcheck_warningsÚ_warnings_managerÚ	__enter__ÚwarningsÚfilterwarningsÚRuntimeWarningr   )r   r   r   r   ÚsetUpH   s    

zBaseTestCase.setUpc             C   s   | j  d d d ¡ d S )N)r$   Ú__exit__)r   r   r   r   ÚtearDownN   s    zBaseTestCase.tearDownc       
      C   s|  t j |¡\}}|d t|ƒ… }|t|ƒt|ƒ d … }|d k	rb|  t|ƒt|ƒtkrZtntd¡ |d k	rŒ|  t|ƒt|ƒtkr„tntd¡ |d k	r¶|  t|ƒt|ƒtkr®tntd¡ |||fdkrÖ|  t|ƒtd¡ |  t j 	|¡t j 	|¡d||f ¡ |  ||d||f ¡ |  ||d||f ¡ |t|ƒt|ƒt|ƒ … }t
|tƒrV| jn| j}	|  |	 |¡d||	jf ¡ d S )Nzunexpected return type)NNNzdefault return type must be strzfile %r not in directory %rzfile %r does not begin with %rzfile %r does not end with %rz$random characters %r do not match %r)ÚosÚpathÚsplitÚlenr   Útyper   r   ÚassertEqualÚabspathÚ
isinstanceÚ	str_checkÚb_checkÚ
assertTrueÚmatchÚpattern)
r   ÚnameÚdirÚpreÚsufÚndirÚnbaseZnpreZnsufZcheckr   r   r   Ú	nameCheckQ   s2    zBaseTestCase.nameCheckN)
r   r   r   ÚreÚcompiler4   r5   r)   r+   r?   r   r   r   r   r   C   s
   

r   c               @   s   e Zd Zdd„ ZdS )ÚTestExportsc             C   st   t j}dddddddddddddddœ}g }x*|D ]"}|d dkr2||kr2| |¡ q2W |  t|ƒdkd| ¡ d S )Nr   )ÚNamedTemporaryFileÚTemporaryFileÚmkstempÚmkdtempr   ÚTMP_MAXÚgettempprefixÚgettempprefixbÚ
gettempdirÚgettempdirbÚtempdirÚtemplateÚSpooledTemporaryFileÚTemporaryDirectoryr   Ú_zunexpected keys: %s)r   Ú__dict__Úappendr6   r/   )r   ÚdictÚexpectedZunexpÚkeyr   r   r   Útest_exportsr   s*    
zTestExports.test_exportsN)r   r   r   rV   r   r   r   r   rB   q   s   rB   c                   sN   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Ze e	e
d	ƒd
¡dd„ ƒZ‡  ZS )ÚTestRandomNameSequencec                s   t  ¡ | _tƒ  ¡  d S )N)r   Ú_RandomNameSequenceÚrÚsuperr)   )r   )Ú	__class__r   r   r)   ’   s    
zTestRandomNameSequence.setUpc             C   s   t | jƒ}|  |ddd¡ d S )Nr   )ÚnextrY   r?   )r   Úsr   r   r   Útest_get_six_char_str–   s    
z,TestRandomNameSequence.test_get_six_char_strc             C   sL   i }| j }x<ttƒD ]0}t|ƒ}|  |ddd¡ |  ||¡ d||< qW d S )Nr   r   )rY   ÚrangeÚ
TEST_FILESr\   r?   ÚassertNotIn)r   rS   rY   Úir]   r   r   r   Ú	test_many›   s    z TestRandomNameSequence.test_manyc             C   s.   d}| j }x|D ]}|d7 }|dkrP qW d S )Nr   r   é   )rY   )r   rb   rY   r]   r   r   r   Úsupports_iter¦   s    
z$TestRandomNameSequence.supports_iterÚforkz!os.fork is required for this testc             C   sÖ   t  ¡ \}}d }zft  ¡ }|sTt  |¡ t  |t| jƒ d¡¡ t  |¡ t  d¡ t| jƒ}t  	|t
|ƒ¡ d¡}W d |r°yt  |tj¡ W n tk
r¢   Y nX t  |d¡ t  |¡ t  |¡ X |  ||¡ d S )NÚasciir   )r,   Úpiperf   ÚcloseÚwriter\   rY   ÚencodeÚ_exitÚreadr/   ÚdecodeÚkillÚsignalZSIGKILLÚOSErrorÚwaitpidÚassertNotEqual)r   Zread_fdZwrite_fdZpidZparent_valueZchild_valuer   r   r   Útest_process_awareness°   s(    




z-TestRandomNameSequence.test_process_awareness)r   r   r   r)   r^   rc   re   ÚunittestÚ
skipUnlessÚhasattrr,   rt   Ú__classcell__r   r   )r[   r   rW      s   
rW   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCandidateTempdirListc             C   s8   t  ¡ }|  t|ƒdk¡ x|D ]}|  |t¡ q W d S )Nr   )r   Ú_candidate_tempdir_listÚassertFalser/   ÚassertIsInstancer   )r   ÚcandÚcr   r   r   Útest_nonempty_listÚ   s    
z+TestCandidateTempdirList.test_nonempty_listc          
   C   s°   t  ¡ ž}x*dD ]"}t |¡}|stj |¡||< qW t ¡ }x*dD ]"}t |¡}|sZt‚|  	||¡ qDW yt 
¡ }W n ttfk
r”   tj}Y nX |  	||¡ W d Q R X d S )N)ÚTMPDIRZTEMPZTMP)r   ÚEnvironmentVarGuardr,   Úgetenvr-   r2   r   rz   Ú
ValueErrorÚassertInÚgetcwdÚAttributeErrorrq   Úcurdir)r   ÚenvZenvnameÚdirnamer}   r   r   r   Útest_wanted_dirsã   s     




 z)TestCandidateTempdirList.test_wanted_dirsN)r   r   r   r   rŠ   r   r   r   r   ry   ×   s   	ry   c               @   s   e Zd Zdd„ ZdS )ÚTestGetDefaultTempdirc                s  t  ¡ ð‰‡fdd„}t t d|¡Ê t  ¡  |  t ˆ¡g ¡ dd„ ‰t tdˆ¡6 |  	t
¡ t  ¡  W d Q R X |  t ˆ¡g ¡ W d Q R X ‡ ‡fdd„}t td|¡6‰ |  	t
¡ t  ¡  W d Q R X |  t ˆ¡g ¡ W d Q R X W d Q R X W d Q R X d S )	Nc                  s   ˆ gS )Nr   r   )Úour_temp_directoryr   r   Úour_candidate_list  s    zKTestGetDefaultTempdir.test_no_files_left_behind.<locals>.our_candidate_listrz   c              _   s
   t ƒ ‚d S )N)rq   )ÚargsÚkwargsr   r   r   Úraise_OSError  s    zFTestGetDefaultTempdir.test_no_files_left_behind.<locals>.raise_OSErrorÚopenc                 s   ˆ | |Ž}ˆ|_ |S )N)rj   )rŽ   r   Úfp)Ú	orig_openr   r   r   Ú
bad_writer  s    
zCTestGetDefaultTempdir.test_no_files_left_behind.<locals>.bad_writer)r   rO   r   Ú	swap_attrZ_get_default_tempdirr1   r,   ÚlistdirÚior   ÚFileNotFoundError)r   r   r”   r   )r“   rŒ   r   r   Útest_no_files_left_behind  s     
z/TestGetDefaultTempdir.test_no_files_left_behindN)r   r   r   r™   r   r   r   r   r‹     s   r‹   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestGetCandidateNamesc             C   s   t  ¡ }|  |t j¡ d S )N)r   Ú_get_candidate_namesr|   rX   )r   Úobjr   r   r   Útest_retval)  s    z!TestGetCandidateNames.test_retvalc             C   s"   t  ¡ }t  ¡ }|  ||k¡ d S )N)r   r›   r6   )r   ÚaÚbr   r   r   Útest_same_thing.  s    z%TestGetCandidateNames.test_same_thingN)r   r   r   r   r    r   r   r   r   rš   &  s   rš   c           	   c   s>   t  ¡ } z$t t d| ¡ d V  W d Q R X W d t | ¡ X d S )NrL   )r   rF   r   r•   Úrmtree)r:   r   r   r   Ú_inside_empty_temp_dir6  s
    r¢   c                 s   t  td‡ fdd„¡S )Nr›   c                  s   t ˆ ƒS )N)Úiterr   )Únamesr   r   Ú<lambda>C  r   z'_mock_candidate_names.<locals>.<lambda>)r   r•   r   )r¤   r   )r¤   r   Ú_mock_candidate_names@  s    r¦   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestBadTempdirc             C   s°   t ƒ   t tj¡j }}|tjtjB tjB  M }t 	tj|¡ zPt 
tjtj¡r\|  d¡ |  t¡ |  ¡  W d Q R X |  t tj¡g ¡ W d t 	tj|¡ X W d Q R X d S )Nz!can't set the directory read-only)r¢   r,   r   r   rL   Úst_modeÚS_IWUSRÚS_IWGRPÚS_IWOTHÚchmodÚaccessÚW_OKZskipTestr   ÚPermissionErrorÚ	make_tempr1   r–   )r   ZoldmodeÚmoder   r   r   Útest_read_only_directoryH  s    
z'TestBadTempdir.test_read_only_directoryc             C   s^   t ƒ N tj tjd¡}t td|¡$ |  t	¡ |  
¡  W d Q R X W d Q R X W d Q R X d S )NÚnonexistentrL   )r¢   r,   r-   Újoinr   rL   r   r•   r   r˜   r°   )r   rL   r   r   r   Útest_nonexisting_directoryV  s
    z)TestBadTempdir.test_nonexisting_directoryc             C   sp   t ƒ ` tj tjd¡}t|dƒ ¡  t 	td|¡( |  
ttf¡ |  ¡  W d Q R X W d Q R X W d Q R X d S )NÚfileÚwbrL   )r¢   r,   r-   r´   r   rL   r‘   ri   r   r•   r   ÚNotADirectoryErrorr˜   r°   )r   rL   r   r   r   Útest_non_directory]  s    z!TestBadTempdir.test_non_directoryN)r   r   r   r²   rµ   r¹   r   r   r   r   r§   F  s   r§   c               @   s˜   e Zd ZG dd„ dƒZddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Ze	 
ed¡dd„ ƒZe	 
ed¡dd„ ƒZe	 
ed¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestMkstempInnerc               @   s<   e Zd ZejZejZej	Z
ejZdd„ Zdd„ Zdd„ ZdS )zTestMkstempInner.mkstempedc             C   s>   |r| j }n| j}t |||¡}t |||||¡\| _| _d S )N)Ú_bflagsÚ_tflagsr   r   Ú_mkstemp_innerÚfdr9   )r   r:   r;   r<   ÚbinÚflagsÚoutput_typer   r   r   Ú__init__o  s
     z#TestMkstempInner.mkstemped.__init__c             C   s   t  | j|¡ d S )N)r,   rj   r¾   )r   r   r   r   r   rj   v  s    z TestMkstempInner.mkstemped.writec             C   s   |   | j¡ |  | j¡ d S )N)Ú_closer¾   Ú_unlinkr9   )r   r   r   r   Ú__del__y  s    z"TestMkstempInner.mkstemped.__del__N)r   r   r   r   Ú_bin_openflagsr»   Ú_text_openflagsr¼   r,   ri   rÃ   ÚunlinkrÄ   rÂ   rj   rÅ   r   r   r   r   Ú	mkstempedi  s   rÉ   Nr   c             C   sr   t  |||¡}|d kr0|tkr(t  ¡ }nt  ¡ }|d kr>|ƒ }|d krL|ƒ }|  ||||¡}|  |j|||¡ |S )N)r   r   r   rJ   rK   rÉ   r?   r9   )r   r:   r;   r<   r¿   rÁ   r¶   r   r   r   Ú	do_create}  s    
zTestMkstempInner.do_createc             C   s^   |   ¡  d¡ | j dd d¡ | j dd d¡ | j ddd d¡ | j ddd d¡ d S )	Ns   blatrž   )r;   rŸ   )r<   )r;   r<   Úaaz.txt)rÊ   rj   )r   r   r   r   Ú
test_basic  s
    zTestMkstempInner.test_basicc          	   C   sô   t  ¡ }| j|dd d¡ | j|dd d¡ | j|dd d¡ | j|ddd d¡ | j|dd	d d¡ |  t¡ | jd
dd d¡ W d Q R X |  t¡ | j|d
d d¡ W d Q R X |  t¡ | j|dd
d d¡ W d Q R X d S )Nr   )r:   r<   s   blató   a)r:   r;   ó   b)r:   r;   r<   s   aas   .txtr   )r   rK   rÊ   rj   r   r   )r   Zdir_br   r   r   Útest_basic_with_bytes_names•  s    z,TestMkstempInner.test_basic_with_bytes_namesc             C   s.   t ttƒƒ}x|D ]}| jdd||< qW d S )NrË   )r;   )Úlistr_   r`   rÊ   )r   Úextantrb   r   r   r   Útest_basic_many¦  s    
z TestMkstempInner.test_basic_manyc          	   C   s0   t  ¡ }z| j|d d¡ W d t |¡ X d S )N)r:   s   blat)r   rF   rÊ   rj   r,   Úrmdir)r   r:   r   r   r   Útest_choose_directory¬  s    z&TestMkstempInner.test_choose_directoryzos.stat not availablec             C   sJ   |   ¡ }t t |j¡j¡}d}tjdkr:|d? }|d }|  ||¡ d S )Ni€  Úwin32é   éI   )	rÊ   r   ÚS_IMODEr,   r9   r¨   ÚsysÚplatformr1   )r   r¶   r±   rT   Úuserr   r   r   Útest_file_mode´  s    
zTestMkstempInner.test_file_modezos.spawnl not availablec             C   sæ   t jrd}nd}|  ¡ }|  t |j¡d¡ d|j }yt}W n tk
r\   t	j
d }Y nX tj tj tj |¡¡d¡}t	jdkršdt	j }d| }nt	j}t tjt	j||||¡}|  |dk d	|  ¡ |  |dkd
| ¡ d S )NÚvÚqFz%dr   ztf_inherit_check.pyrÕ   z"%s"z$child process caught fatal signal %dz child process reports failure %d)r   ÚverboserÊ   r1   r,   Úget_inheritabler¾   Ú__file__Ú	NameErrorrÙ   Úargvr-   r´   r‰   r2   rÚ   Ú
executabler   ÚP_WAITr{   )r   rÝ   r¶   r¾   ÚmeZtesterZ	decoratedZretvalr   r   r   Útest_noinheritÂ  s(    




zTestMkstempInner.test_noinheritztext mode not availablec             C   sL   | j dd}| d¡ | d¡ t |jdtj¡ |  t |jd¡d¡ d S )Nr   )r¿   s   blats   extra
rd   s   blat)rÊ   rj   r,   Úlseekr¾   ÚSEEK_SETr1   rm   )r   Úfr   r   r   Útest_textmodeè  s
    

zTestMkstempInner.test_textmodec             C   s   t  t  ¡ t  ¡ dt jt¡S )Nr   )r   r½   rJ   rH   rÆ   r   )r   r   r   r   r°   ó  s
    
zTestMkstempInner.make_tempc          
   C   sz   t ƒ j tdddƒR |  ¡ \}}t |¡ |  | d¡¡ |  ¡ \}}t |¡ |  | d¡¡ W d Q R X W d Q R X d S )NÚaaaÚbbb)r¢   r¦   r°   r,   ri   r6   Úendswith)r   Zfd1Zname1Zfd2Zname2r   r   r   Ú!test_collision_with_existing_fileú  s    

z2TestMkstempInner.test_collision_with_existing_filec          
   C   sl   t ƒ \ tdddƒD t ¡ }|  | d¡¡ |  ¡ \}}t |¡ |  | d¡¡ W d Q R X W d Q R X d S )Nrì   rí   )	r¢   r¦   r   rF   r6   rî   r°   r,   ri   )r   r:   r¾   r9   r   r   r   Ú&test_collision_with_existing_directory  s    
z7TestMkstempInner.test_collision_with_existing_directory)NNNr   )r   r   r   rÉ   rÊ   rÌ   rÏ   rÒ   rÔ   ru   rv   Úhas_statrÜ   Ú
has_spawnlrç   Úhas_textmoderë   r°   rï   rð   r   r   r   r   rº   f  s   
&rº   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestGetTempPrefixc             C   sL   t  ¡ }|  |t¡ |  t|ƒd¡ t  ¡ }|  |t¡ |  t|ƒd¡ d S )Nr   )r   rH   r|   r   ZassertGreaterr/   rI   r   )r   ÚpZpbr   r   r   Útest_sane_template  s    z$TestGetTempPrefix.test_sane_templatec          	   C   sd   t  ¡ d }t jdd}z:tj ||¡}t |tjtjB ¡}t 	|¡ t 
|¡ W d t |¡ X d S )Nz
xxxxxx.xxxr   )Úprefix)r   rH   rF   r,   r-   r´   r‘   ÚO_RDWRÚO_CREATri   rÈ   rÓ   )r   rõ   Údr¾   r   r   r   Útest_usable_template#  s    
z&TestGetTempPrefix.test_usable_templateN)r   r   r   rö   rû   r   r   r   r   rô     s   rô   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestGetTempDirc             C   sX   xRt  ¡ t  ¡ fD ]>}|  tj |¡p.|tjkd| ¡ |  tj |¡d| ¡ qW d S )Nz%r is not an absolute pathz%r is not a directory)	r   rJ   rK   r6   r,   r-   Úisabsr‡   Úisdir)r   rú   r   r   r   Útest_directory_exists7  s
    
z$TestGetTempDir.test_directory_existsc             C   s   t  ¡ }| d¡ | ¡  d S )Ns   blat)r   rC   rj   ri   )r   r¶   r   r   r   Útest_directory_writable@  s    
z&TestGetTempDir.test_directory_writablec             C   sP   t  ¡ }t  ¡ }t  ¡ }|  ||k¡ |  t|ƒt|ƒ¡ |  |t |¡¡ d S )N)	r   rJ   rK   r6   rs   r0   r1   r,   Úfsdecode)r   rž   rŸ   r~   r   r   r   r    J  s    zTestGetTempDir.test_same_thingc          	   C   s`   t  d¡}t jd  }t _z0t ¡ }||d< |  t  ¡ |¡ W d Q R X W d |t _t |¡ X d S )Nz-Tempr€   )r   rF   rL   r   r   r1   rJ   rÓ   )r   Zcase_sensitive_tempdirZ_tempdirrˆ   r   r   r   Útest_case_sensitiveT  s    

z"TestGetTempDir.test_case_sensitiveN)r   r   r   rÿ   r   r    r  r   r   r   r   rü   4  s   	

rü   c               @   s.   e Zd Zd
dd„Zdd„ Zdd„ Zdd	„ ZdS )ÚTestMkstempNc       
   	   C   sÂ   t  |||¡}|d kr0|tkr(t  ¡ }nt  ¡ }|d kr>|ƒ }|d krL|ƒ }t j|||d\}}tj |¡\}}tj 	|¡}	|  
|	|d|	|f ¡ z|  ||||¡ W d t |¡ t |¡ X d S )N)r:   r÷   Úsuffixz+Directory '%s' incorrectly returned as '%s')r   r   r   rJ   rK   rE   r,   r-   r.   r2   r1   r?   ri   rÈ   )
r   r:   r;   r<   rÁ   r¾   r9   r=   r>   Zadirr   r   r   rÊ   f  s$    

zTestMkstemp.do_createc             C   sL   |   ¡  | j dd | j dd | j ddd | j ddd | j dd	 d S )
Nrž   )r;   rŸ   )r<   )r;   r<   rË   z.txtÚ.)r:   )rÊ   )r   r   r   r   rÌ   }  s    zTestMkstemp.test_basicc          	   C   sÔ   t  ¡ }| j|dd | j|dd | j|dd | j|ddd | j|ddd | jd	d
 |  t¡ | jdddd W d Q R X |  t¡ | jd	ddd W d Q R X |  t¡ | jd	ddd W d Q R X d S )Nr   )r:   r<   rÍ   )r:   r;   rÎ   )r:   r;   r<   s   aas   .txtó   .)r:   r  rË   z.txt)r   rK   rÊ   r   r   )r   rú   r   r   r   rÏ   †  s    z'TestMkstemp.test_basic_with_bytes_namesc          	   C   s*   t  ¡ }z| j|d W d t |¡ X d S )N)r:   )r   rF   rÊ   r,   rÓ   )r   r:   r   r   r   rÔ   ˜  s    z!TestMkstemp.test_choose_directory)NNN)r   r   r   rÊ   rÌ   rÏ   rÔ   r   r   r   r   r  c  s   
	r  c               @   sb   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Ze	 
ed¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestMkdtempc             C   s   t  ¡ S )N)r   rF   )r   r   r   r   r°   ¤  s    zTestMkdtemp.make_tempNc             C   sŽ   t  |||¡}|d kr0|tkr(t  ¡ }nt  ¡ }|d kr>|ƒ }|d krL|ƒ }t j|||d}y|  ||||¡ |S    t |¡ ‚ Y nX d S )N)r:   r÷   r  )	r   r   r   rJ   rK   rF   r?   r,   rÓ   )r   r:   r;   r<   rÁ   r9   r   r   r   rÊ   §  s     

zTestMkdtemp.do_createc             C   s^   t  |  ¡ ¡ t  | jdd¡ t  | jdd¡ t  | jddd¡ t  | jddd¡ d S )Nrž   )r;   rŸ   )r<   )r;   r<   rË   z.txt)r,   rÓ   rÊ   )r   r   r   r   rÌ   »  s
    zTestMkdtemp.test_basicc          	   C   sö   t  ¡ }t | j|d¡ t | j|dd¡ t | j|dd¡ t | j|ddd¡ t | j|ddd¡ |  t¡ t | j|d	dd¡ W d Q R X |  t¡ t | j|dd
d¡ W d Q R X |  t¡ t | jdddd¡ W d Q R X d S )N)r:   rÍ   )r:   r;   rÎ   )r:   r<   )r:   r;   r<   s   aas   .txtrË   z.txtr   )r   rK   r,   rÓ   rÊ   r   r   )r   rú   r   r   r   rÏ   Ã  s      z'TestMkdtemp.test_basic_with_bytes_namesc          
   C   sX   t ttƒƒ}z"x|D ]}| jdd||< qW W d x |D ]}t|tƒr6t |¡ q6W X d S )NrË   )r;   )rÐ   r_   r`   rÊ   r3   r   r,   rÓ   )r   rÑ   rb   r   r   r   rÒ   Ò  s    


zTestMkdtemp.test_basic_manyc          	   C   s0   t  ¡ }zt | j|d¡ W d t |¡ X d S )N)r:   )r   rF   r,   rÓ   rÊ   )r   r:   r   r   r   rÔ   Ý  s    z!TestMkdtemp.test_choose_directoryzos.stat not availablec          	   C   sb   |   ¡ }zHt t |¡j¡}|dM }d}tjdkrB|d? }|d }|  ||¡ W d t |¡ X d S )Niÿ  iÀ  rÕ   rÖ   r×   )	rÊ   r   rØ   r,   r¨   rÙ   rÚ   r1   rÓ   )r   r:   r±   rT   rÛ   r   r   r   Ú	test_modeå  s    
zTestMkdtemp.test_modec          
   C   sl   t ƒ \ tdddƒD tjdd}| ¡  |  |j d¡¡ t ¡ }|  | d¡¡ W d Q R X W d Q R X d S )Nrì   rí   F)Údelete)	r¢   r¦   r   rC   ri   r6   r9   rî   rF   )r   r¶   r:   r   r   r   rï   ÷  s    z-TestMkdtemp.test_collision_with_existing_filec          
   C   s^   t ƒ N tdddƒ6 t ¡ }|  | d¡¡ t ¡ }|  | d¡¡ W d Q R X W d Q R X d S )Nrì   rí   )r¢   r¦   r   rF   r6   rî   )r   Zdir1Zdir2r   r   r   rð     s    z2TestMkdtemp.test_collision_with_existing_directory)NNN)r   r   r   r°   rÊ   rÌ   rÏ   rÒ   rÔ   ru   rv   rñ   r  rï   rð   r   r   r   r   r  ¡  s   
r  c                   sP   e Zd Z‡ fdd„Z‡ fdd„ZG dd„ dƒZddd	„Zd
d„ Zdd„ Z‡  Z	S )Ú
TestMktempc                s   t  ¡ | _tƒ  ¡  d S )N)r   rF   r:   rZ   r)   )r   )r[   r   r   r)     s    
zTestMktemp.setUpc                s&   | j rt | j ¡ d | _ tƒ  ¡  d S )N)r:   r,   rÓ   rZ   r+   )r   )r[   r   r   r+     s    zTestMktemp.tearDownc               @   s(   e Zd ZejZejZdd„ Z	dd„ Z
dS )zTestMktemp.mktempedc             C   s.   t j|||d| _t t | j| jd¡¡ d S )N)r:   r÷   r  i€  )r   r   r9   r,   ri   r‘   r»   )r   r:   r;   r<   r   r   r   rÂ      s    zTestMktemp.mktemped.__init__c             C   s   |   | j¡ d S )N)rÄ   r9   )r   r   r   r   rÅ   &  s    zTestMktemp.mktemped.__del__N)r   r   r   r,   rÈ   rÄ   r   rÆ   r»   rÂ   rÅ   r   r   r   r   Úmktemped  s   r  r   c             C   s(   |   | j||¡}|  |j| j||¡ |S )N)r  r:   r?   r9   )r   r;   r<   r¶   r   r   r   rÊ   )  s    zTestMktemp.do_createc             C   s@   |   ¡  | j dd | j dd | j ddd | j ddd d S )Nrž   )r;   rŸ   )r<   )r;   r<   rË   z.txt)rÊ   )r   r   r   r   rÌ   /  s
    zTestMktemp.test_basicc             C   s.   t ttƒƒ}x|D ]}| jdd||< qW d S )NrË   )r;   )rÐ   r_   r`   rÊ   )r   rÑ   rb   r   r   r   rc   7  s    
zTestMktemp.test_many)r   r   )
r   r   r   r)   r+   r  rÊ   rÌ   rc   rx   r   r   )r[   r   r
    s   
r
  c               @   sf   e Zd Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestNamedTemporaryFileNr   Tc             C   s8   |d krt  ¡ }t j||||d}|  |j|||¡ |S )N)r:   r÷   r  r	  )r   rJ   rC   r?   r9   )r   r:   r;   r<   r	  r¶   r   r   r   rÊ   L  s    
z TestNamedTemporaryFile.do_createc             C   s@   |   ¡  | j dd | j dd | j ddd | j ddd d S )Nrž   )r;   rŸ   )r<   )r;   r<   rË   z.txt)rÊ   )r   r   r   r   rÌ   V  s
    z!TestNamedTemporaryFile.test_basicc             C   sP   |   ¡ }t |¡}|j}|j}~|dƒ ~|dƒ ~tjddrL|  |ƒ ¡ d S )Ns   foos   barT)Zcpython)rÊ   ÚweakrefÚrefrj   r   Zcheck_impl_detailÚassertIsNone)r   rê   Úwrrj   Zwrite2r   r   r   Útest_method_lookup^  s    
z)TestNamedTemporaryFile.test_method_lookupc                sV   dddg‰ ‡ fdd„}x&t |ƒ ƒD ]\}}|  |ˆ | ¡ q"W |  |tˆ ƒd ¡ d S )Ns   spam
s   eggs
s   beans
c                 s*   t jdd} |  d ˆ ¡¡ |  d¡ | S )Nzw+b)r±   r   r   )r   rC   rj   r´   Úseek)rê   )Úlinesr   r   Ú	make_filer  s    
z3TestNamedTemporaryFile.test_iter.<locals>.make_filer   )Ú	enumerater1   r/   )r   r  rb   Úlr   )r  r   Ú	test_itern  s
    
z TestNamedTemporaryFile.test_iterc             C   s(   t  ¡ }|  tj |j¡d|j ¡ d S )Nz$NamedTemporaryFile %s does not exist)r   rC   r6   r,   r-   Úexistsr9   )r   rê   r   r   r   Útest_creates_named{  s    z)TestNamedTemporaryFile.test_creates_namedc          	   C   sX   t  ¡ }z>t j|d}| d¡ | ¡  |  tj |j	¡d|j	 ¡ W d t 
|¡ X d S )N)r:   s   blatz(NamedTemporaryFile %s exists after close)r   rF   rC   rj   ri   r{   r,   r-   r  r9   rÓ   )r   r:   rê   r   r   r   Útest_del_on_close  s    
z(TestNamedTemporaryFile.test_del_on_closec          	   C   sv   t  ¡ }d }zFt j|dd}|j}| d¡ | ¡  |  tj 	|j¡d|j ¡ W d |d k	rft 
|¡ t |¡ X d S )NF)r:   r	  s   blatz)NamedTemporaryFile %s missing after close)r   rF   rC   r9   rj   ri   r6   r,   r-   r  rÈ   rÓ   )r   r:   Útmprê   r   r   r   Útest_dis_del_on_close  s    

z,TestNamedTemporaryFile.test_dis_del_on_closec             C   s.   t  ¡ }| d¡ | ¡  | ¡  | ¡  d S )Ns   abc
)r   rC   rj   ri   )r   rê   r   r   r   Útest_multiple_close  s
    
z*TestNamedTemporaryFile.test_multiple_closec          	      sX   t  ¡ ‰ |  tj ˆ j¡¡ W d Q R X |  tj ˆ j¡¡ ‡ fdd„}|  t	|¡ d S )Nc            	      s   ˆ  W d Q R X d S )Nr   r   )rê   r   r   Ú
use_closedª  s    z?TestNamedTemporaryFile.test_context_manager.<locals>.use_closed)
r   rC   r6   r,   r-   r  r9   r{   r   rƒ   )r   r  r   )rê   r   Útest_context_manager¥  s
    
z+TestNamedTemporaryFile.test_context_managerc          
      sn   g ‰ t j‰‡ ‡fdd„}tjd|d> tjdtd$ |  ttj¡ |  t	ˆ ƒd¡ W d Q R X W d Q R X d S )Nc                s   ˆ   | ¡ ˆ| ƒ d S )N)rR   )r¾   )ÚclosedÚos_closer   r   ri   ³  s    
z5TestNamedTemporaryFile.test_no_leak_fd.<locals>.closezos.close)Úside_effectzio.openr   )
r,   ri   r   Úpatchrƒ   r   r   rC   r1   r/   )r   ri   r   )r   r!  r   Útest_no_leak_fd¯  s    z&TestNamedTemporaryFile.test_no_leak_fdc          	   C   st   t  ¡ }|  tj|¡ |  t¡ t jd|d W d Q R X |  t¡ t jd|d W d Q R X |  	t
 |¡g ¡ d S )Nr  )r±   r:   é   )r   rF   Z
addCleanupr   r¡   r   rƒ   rC   r   r1   r,   r–   )r   r:   r   r   r   Útest_bad_mode¼  s    z$TestNamedTemporaryFile.test_bad_mode)Nr   r   T)r   r   r   rÊ   rÌ   r  r  r  r  r  r  r  r$  r&  r   r   r   r   r  I  s   


r  c               @   s¦   e Zd Zd*dd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ ZdS )+ÚTestSpooledTemporaryFiler   Nr   c             C   s&   |d krt  ¡ }t j||||d}|S )N)Úmax_sizer:   r÷   r  )r   rJ   rN   )r   r(  r:   r;   r<   r¶   r   r   r   rÊ   Ê  s    z"TestSpooledTemporaryFile.do_createc             C   s4   |   ¡ }|  |j¡ | j dddd}|  |j¡ d S )Nr	   rž   z.txt)r(  r;   r<   )rÊ   r{   Ú_rolled)r   rê   r   r   r   rÌ   Ò  s    z#TestSpooledTemporaryFile.test_basicc          	   C   s~   t  ¡ }zdt jd|d}|  |j¡ | d¡ |  |j¡ |j}| ¡  |  t	|t
ƒo`tj |¡d| ¡ W d t |¡ X d S )Né
   )r(  r:   s   blat blat blat blat blat z*SpooledTemporaryFile %s exists after close)r   rF   rN   r{   r)  rj   r6   r9   ri   r3   r   r,   r-   r  rÓ   )r   r:   rê   Úfilenamer   r   r   r  Ù  s    
z*TestSpooledTemporaryFile.test_del_on_closec             C   sP   | j dd}|  |j¡ x&tdƒD ]}| dd¡ | d¡ q"W |  |j¡ d S )Né   )r(  é   r   s   xxxxxxxxxxxxxxxxxxxx)rÊ   r{   r)  r_   r  rj   )r   rê   rb   r   r   r   Útest_rewrite_smallè  s    z+TestSpooledTemporaryFile.test_rewrite_smallc             C   s^   | j dd}|  |j¡ | d¡ |  |j¡ | d¡ |  |j¡ | d¡ |  |j¡ d S )Nr,  )r(  s   xxxxxxxxxxxxxxxxxxxxs
   xxxxxxxxxxó   x)rÊ   r{   r)  rj   r6   )r   rê   r   r   r   Útest_write_sequentialñ  s    


z.TestSpooledTemporaryFile.test_write_sequentialc             C   s4   |   ¡ }| d¡ | d¡ | ¡ }|  |d¡ d S )N)r/  ó   yó   zr   s   xyz)rÊ   Ú
writelinesr  rm   r1   )r   rê   Úbufr   r   r   Útest_writelinesý  s
    

z(TestSpooledTemporaryFile.test_writelinesc             C   s<   | j dd}| d¡ |  |j¡ | d¡ |  |j¡ d S )Né#   )r(  )s   xxxxxxxxxxxxxxxxxxxxs
   xxxxxxxxxxs   xxxxxr/  )rÊ   r3  r{   r)  rj   r6   )r   rê   r   r   r   Útest_writelines_sequential  s
    

z3TestSpooledTemporaryFile.test_writelines_sequentialc             C   sJ   | j dd}|  |j¡ | dd¡ |  |j¡ | d¡ |  |j¡ d S )Nr,  )r(  r	   r   r/  )rÊ   r{   r)  r  rj   r6   )r   rê   r   r   r   Útest_sparse  s    
z$TestSpooledTemporaryFile.test_sparsec             C   s:   | j dd}|  |j¡ |  | ¡ dk¡ |  |j¡ d S )Nr,  )r(  r   )rÊ   r{   r)  r6   Úfileno)r   rê   r   r   r   Útest_fileno  s    z$TestSpooledTemporaryFile.test_filenoc             C   s:   t  ¡ }| d¡ |  |j¡ | ¡  | ¡  | ¡  d S )Ns   abc
)r   rN   rj   r{   r)  ri   )r   rê   r   r   r   Ú#test_multiple_close_before_rollover  s    
z<TestSpooledTemporaryFile.test_multiple_close_before_rolloverc             C   s>   t jdd}| d¡ |  |j¡ | ¡  | ¡  | ¡  d S )Nr   )r(  s   abc
)r   rN   rj   r6   r)  ri   )r   rê   r   r   r   Ú"test_multiple_close_after_rollover(  s    
z;TestSpooledTemporaryFile.test_multiple_close_after_rolloverc             C   sL   | j dd}|j}|j}|j}|dƒ |dƒ |ddƒ |  |dƒd¡ d S )Nr,  )r(  s#   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas#   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   éF   sF   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)rÊ   rm   rj   r  r1   )r   rê   rm   rj   r  r   r   r   Útest_bound_methods1  s    
z+TestSpooledTemporaryFile.test_bound_methodsc          	   C   sà   t jdd}| d¡ |  |j¡ |  |jd¡ |  |j¡ |  	t
¡ |j W d Q R X |  	t
¡ |j W d Q R X | d¡ |  |j¡ |  |jd¡ |  |j¡ |  	t
¡ |j W d Q R X |  	t
¡ |j W d Q R X d S )Nr*  )r(  s
   xxxxxxxxxxzw+br/  zrb+)r   rN   rj   r{   r)  r1   r±   r  r9   r   r†   ÚnewlinesÚencodingr6   ÚassertIsNotNone)r   rê   r   r   r   Útest_properties?  s"    

z(TestSpooledTemporaryFile.test_propertiesc             C   s"  t jddd}| d¡ | d¡ |  | ¡ d¡ | d¡ | d¡ |  | ¡ d¡ |  |j¡ |  |jd¡ |  	|j
¡ |  	|j¡ |  	|j¡ | d¡ | d¡ |  | ¡ d	¡ | d
¡ | d¡ |  | ¡ d¡ |  |j¡ |  |jd¡ |  |j
¡ |  |jtj¡ |  |j¡ d S )Nzw+r*  )r±   r(  zabc
r   zdef
zabc
def
zxyzzy
zabc
def
xyzzy
zfoobar
zabc
def
xyzzy
foobar
)r   rN   rj   r  r1   rm   r{   r)  r±   r  r9   r?  r@  r6   rA  r,   Úlinesep)r   rê   r   r   r   Útest_text_modeS  s.    







z'TestSpooledTemporaryFile.test_text_modec             C   sÜ   t jddddd}| d¡ | d¡ |  | ¡ d¡ |  |j¡ |  |jd¡ |  	|j
¡ |  	|j¡ |  	|j¡ | d¡ | d¡ |  | ¡ d	¡ |  |j¡ |  |jd¡ |  |j
¡ |  |j¡ |  |jd¡ d S )
Nzw+r*  r   zutf-8)r±   r(  Únewliner@  u   Î›
r   u*   Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›
u.   Î›
Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›
)r   rN   rj   r  r1   rm   r{   r)  r±   r  r9   r?  r@  r6   rA  )r   rê   r   r   r   Útest_text_newline_and_encodingp  s$    




z7TestSpooledTemporaryFile.test_text_newline_and_encodingc          	      sX   t jdd‰ |  ˆ j¡ |  ˆ j¡ W d Q R X |  ˆ j¡ ‡ fdd„}|  t|¡ d S )Nr   )r(  c            	      s   ˆ  W d Q R X d S )Nr   r   )rê   r   r   r  ‹  s    zQTestSpooledTemporaryFile.test_context_manager_before_rollover.<locals>.use_closed)r   rN   r{   r)  r   r6   r   rƒ   )r   r  r   )rê   r   Ú$test_context_manager_before_rollover…  s    z=TestSpooledTemporaryFile.test_context_manager_before_rolloverc          	      sv   t jdd<‰ |  ˆ j¡ ˆ  d¡ ˆ  ¡  |  ˆ j¡ |  ˆ j¡ W d Q R X |  ˆ j¡ ‡ fdd„}|  t	|¡ d S )Nr   )r(  s   abc
c            	      s   ˆ  W d Q R X d S )Nr   r   )rê   r   r   r  ™  s    zQTestSpooledTemporaryFile.test_context_manager_during_rollover.<locals>.use_closed)
r   rN   r{   r)  rj   Úflushr6   r   r   rƒ   )r   r  r   )rê   r   Ú$test_context_manager_during_rollover  s    
z=TestSpooledTemporaryFile.test_context_manager_during_rolloverc          	      sn   t jdd‰ ˆ  d¡ ˆ  ¡  |  ˆ j¡ ˆ  |  ˆ j¡ W d Q R X |  ˆ j¡ ‡ fdd„}|  t	|¡ d S )Nr   )r(  s   abc
c            	      s   ˆ  W d Q R X d S )Nr   r   )rê   r   r   r  §  s    zPTestSpooledTemporaryFile.test_context_manager_after_rollover.<locals>.use_closed)
r   rN   rj   rH  r6   r)  r{   r   r   rƒ   )r   r  r   )rê   r   Ú#test_context_manager_after_rolloverž  s    
z<TestSpooledTemporaryFile.test_context_manager_after_rolloverc             C   sÐ   t jdd}| d¡ | d¡ | ¡  |  |j¡ |  |j 	¡ d¡ t jdd}| d¡ | d¡ |  |j¡ |  |j 	¡ d¡ t jdd}| d¡ | d¡ |  
|j¡ trÌ|  t | ¡ ¡jd¡ d S )	Nr*  )r(  s   abcdefg
r   r   é   s   abcdrd   )r   rN   rj   r  Útruncater{   r)  r1   Z_fileÚgetvaluer6   rñ   r,   Úfstatr9  Úst_size)r   rê   r   r   r   Ú!test_truncate_with_size_parameter¬  s"    





z:TestSpooledTemporaryFile.test_truncate_with_size_parameter)r   Nr   r   )r   r   r   rÊ   rÌ   r  r.  r0  r5  r7  r8  r:  r;  r<  r>  rB  rD  rF  rG  rI  rJ  rP  r   r   r   r   r'  Ç  s&   
		
		r'  c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestTemporaryFilec             C   s   t  ¡  d S )N)r   rD   )r   r   r   r   rÌ   È  s    zTestTemporaryFile.test_basicc             C   sR   t  ¡ }t j|d}| d¡ yt |¡ W n    | ¡  t |¡ ‚ Y nX d S )N)r:   s   blat)r   rF   rD   rj   r,   rÓ   ri   )r   r:   rê   r   r   r   Útest_has_no_nameÍ  s    

z"TestTemporaryFile.test_has_no_namec             C   s.   t  ¡ }| d¡ | ¡  | ¡  | ¡  d S )Ns   abc
)r   rD   rj   ri   )r   rê   r   r   r   r  Ý  s
    
z%TestTemporaryFile.test_multiple_closec                s@   ‡ fdd„}|ddƒ |ddƒ |dddd	 |d
ddd d S )Nc          	      s@   t j||Ž*}| | ¡ | d¡ ˆ  | | ¡ ¡ W d Q R X d S )Nr   )r   rD   rj   r  r1   rm   )ÚinputrŽ   r   Zfileobj)r   r   r   Ú	roundtripè  s    

z;TestTemporaryFile.test_mode_and_encoding.<locals>.roundtrips   1234zw+bzabdc
zw+u   Î›zutf-16)r@  zfoo
r   )rE  r   )r   rT  r   )r   r   Útest_mode_and_encodingæ  s
    

z(TestTemporaryFile.test_mode_and_encodingc          
      sn   g ‰ t j‰‡ ‡fdd„}tjd|d> tjdtd$ |  ttj¡ |  t	ˆ ƒd¡ W d Q R X W d Q R X d S )Nc                s   ˆ   | ¡ ˆ| ƒ d S )N)rR   )r¾   )r   r!  r   r   ri   ÷  s    
z0TestTemporaryFile.test_no_leak_fd.<locals>.closezos.close)r"  zio.openr   )
r,   ri   r   r#  rƒ   r   r   rD   r1   r/   )r   ri   r   )r   r!  r   r$  ó  s    z!TestTemporaryFile.test_no_leak_fdN)r   r   r   rÌ   rR  r  rU  r$  r   r   r   r   rQ  Å  s
   	rQ  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚNulledModulesc             G   s&   dd„ |D ƒ| _ dd„ | j D ƒ| _d S )Nc             S   s   g | ]
}|j ‘qS r   )rQ   )Ú.0Úmodr   r   r   ú
<listcomp>  s    z*NulledModules.__init__.<locals>.<listcomp>c             S   s   g | ]}|  ¡ ‘qS r   )Úcopy)rW  r  r   r   r   rY    s    )ÚrefsÚcontents)r   Úmodulesr   r   r   rÂ     s    zNulledModules.__init__c             C   s*   x$| j D ]}x|D ]}d ||< qW qW d S )N)r[  )r   rú   rU   r   r   r   r%     s    
zNulledModules.__enter__c             G   s2   x,t | j| jƒD ]\}}| ¡  | |¡ qW d S )N)Úzipr[  r\  ÚclearÚupdate)r   Úexc_inforú   r~   r   r   r   r*     s    zNulledModules.__exit__N)r   r   r   rÂ   r%   r*   r   r   r   r   rV    s   rV  c               @   sj   e Zd Zddd„Zdd„ Zdd	„ Zejd
d„ ƒZej	dd„ ƒZ
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestTemporaryDirectoryNr   r   c          	   C   s‚   |d krt  ¡ }t j|||d}|  |j|||¡ |rR|  |j|||d ¡}d |_ttj 	|jd¡dƒ}| 
d¡ W d Q R X |S )N)r:   r÷   r  r   ztest.txtr·   s   Hello world!)r   rJ   rO   r?   r9   rÊ   r‘   r,   r-   r´   rj   )r   r:   r;   r<   Úrecurser  Úd1rê   r   r   r   rÊ     s    z TestTemporaryDirectory.do_createc          	   C   sL   t  ¡ }W d Q R X |  t¡}t j|d W d Q R X |  |jjtj¡ d S )N)r:   )r   rO   r   r˜   r1   Z	exceptionÚerrnoÚENOENT)r   r³   Úcmr   r   r   Útest_mkdtemp_failure"  s
    

z+TestTemporaryDirectory.test_mkdtemp_failurec          	   C   sj   t  ¡ }zP| j|d}|  tj |j¡d|j ¡ | ¡  |  	tj |j¡d|j ¡ W d t 
|¡ X d S )N)r:   z$TemporaryDirectory %s does not existz*TemporaryDirectory %s exists after cleanup)r   rF   rÊ   r6   r,   r-   r  r9   Úcleanupr{   rÓ   )r   r:   rú   r   r   r   Útest_explicit_cleanup,  s    z,TestTemporaryDirectory.test_explicit_cleanupc             C   sŒ   |   ¡ }| j dd}t |jtj |jd¡¡ | ¡  |  tj |j¡d|j ¡ |  	tj |j¡d¡ |  
t |j¡dgd¡ | ¡  d S )Nr   )rc  Zfooz*TemporaryDirectory %s exists after cleanupz-Directory pointed to by a symlink was deletedztest.txtz>Contents of the directory pointed to by a symlink were deleted)rÊ   r,   Úsymlinkr9   r-   r´   ri  r{   r  r6   r1   r–   )r   rd  Zd2r   r   r   Ú(test_cleanup_with_symlink_to_a_directory9  s    z?TestTemporaryDirectory.test_cleanup_with_symlink_to_a_directoryc          	   C   sJ   t  ¡ }z0| j|d}|j}~|  tj |¡d| ¡ W d t |¡ X d S )N)r:   z*TemporaryDirectory %s exists after __del__)	r   rF   rÊ   r9   r{   r,   r-   r  rÓ   )r   r:   rú   r9   r   r   r   Útest_del_on_collectionN  s    z-TestTemporaryDirectory.test_del_on_collectionc          	   C   sŽ   |   ¡ |}xtdD ]l}dj||d}t d|¡\}}}| ¡  ¡ }|  tj 	|¡d| ¡ | dd¡}|  
d|¡ |  d	|¡ qW W d Q R X d S )
N)Úbuiltinsr,   ZshutilrÙ   r   r&   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, "test.txt"), "w") as f:
                        f.write("Hello world!")

                    {mod}.tmp = tmp

                    warnings.filterwarnings("always", category=ResourceWarning)
                    )r:   rX  z-cz*TemporaryDirectory %s exists after cleanupzutf-8Úbackslashreplacez
Exception z'ResourceWarning: Implicitly cleaning up)rÊ   Úformatr   Úassert_python_okrn   Ústripr{   r,   r-   r  ra   r„   )r   r:   rX  ÚcodeÚrcÚoutÚerrÚtmp_namer   r   r   Útest_del_on_shutdown[  s    


z+TestTemporaryDirectory.test_del_on_shutdownc          	   C   s~   |   ¡ l}dj|d}t d|¡\}}}| ¡  ¡ }|  tj 	|¡d| ¡ | dd¡}|  
d|¡ |  d|¡ W d Q R X d S )	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:   z-cz*TemporaryDirectory %s exists after cleanupzutf-8ro  z
Exception z'ResourceWarning: Implicitly cleaning up)rÊ   rp  r   rq  rn   rr  r{   r,   r-   r  ra   r„   )r   r:   rs  rt  ru  rv  rw  r   r   r   Útest_exit_on_shutdown{  s    

z,TestTemporaryDirectory.test_exit_on_shutdownc          
   C   sz   |   ¡ h}| j |dd}|j}tjdtfdd tjdtd ~t ¡  W d Q R X |  t	j
 |¡d| ¡ W d Q R X d S )	Né   )r:   rc  Z
ImplicitlyF)ÚquietÚalways)r    z*TemporaryDirectory %s exists after __del__)rÊ   r9   r   r#   ÚResourceWarningr&   r'   Z
gc_collectr{   r,   r-   r  )r   r:   rú   r9   r   r   r   Útest_warnings_on_cleanup“  s    
z/TestTemporaryDirectory.test_warnings_on_cleanupc             C   s$   |   ¡ }| ¡  | ¡  | ¡  d S )N)rÊ   ri  )r   rú   r   r   r   r  ¡  s    z*TestTemporaryDirectory.test_multiple_closec          	   C   sN   |   ¡ }|&}|  tj |¡¡ |  ||j¡ W d Q R X |  tj |¡¡ d S )N)rÊ   r6   r,   r-   r  r1   r9   r{   )r   rú   r9   r   r   r   r  ¨  s
    z+TestTemporaryDirectory.test_context_manager)Nr   r   r   )r   r   r   rÊ   rh  rj  r   Zskip_unless_symlinkrl  Zcpython_onlyrm  rx  ry  r~  r  r  r   r   r   r   rb    s   

 rb  Ú__main__)5r   re  r—   r,   rp   rÙ   r@   r&   Ú
contextlibr  ru   r   Ztestr   Ztest.supportr   rw   r   rñ   rÇ   rÆ   ró   rò   rÚ   Ú
startswithr`   ZTestCaser
   r   rB   rW   ry   r‹   rš   Úcontextmanagerr¢   r¦   r§   rº   rô   rü   r  r  r
  r  r'  rC   rD   rQ  rV  rb  r   Úmainr   r   r   r   Ú<module>   sb   

.H*%
  / />l<~ }>  
