B
    u9a|É  ã               @   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   ú#/usr/lib/python3.7/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                   sR   e Zd 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 )ÚTestRandomNameSequencez6Test the internal iterator object _RandomNameSequence.c                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ÚsignalÚSIGKILLÚOSErrorÚwaitpidÚassertNotEqual)r   Zread_fdZwrite_fdÚpidZparent_valueZchild_valuer   r   r   Útest_process_awareness°   s(    




z-TestRandomNameSequence.test_process_awareness)r   r   r   Ú__doc__r)   r^   rc   re   ÚunittestÚ
skipUnlessÚhasattrr,   rv   Ú__classcell__r   r   )r[   r   rW      s   
rW   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestCandidateTempdirListz3Test the internal function _candidate_tempdir_list.c             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   r}   Ú
ValueErrorÚassertInÚgetcwdÚAttributeErrorrr   Úcurdir)r   ÚenvZenvnameÚdirnamer€   r   r   r   Útest_wanted_dirsã   s     




 z)TestCandidateTempdirList.test_wanted_dirsN)r   r   r   rw   r‚   r   r   r   r   r   r|   ×   s   	r|   c               @   s   e Zd ZdZdd„ ZdS )ÚTestGetDefaultTempdirzTest _get_default_tempdir().c                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_listr}   c              _   s
   t ƒ ‚d S )N)rr   )Ú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   rw   rœ   r   r   r   r   rŽ     s   rŽ   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestGetCandidateNamesz0Test the internal function _get_candidate_names.c             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   rw   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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 ) ÚTestMkstempInnerz*Test the internal function _mkstemp_inner.c               @   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   rw   rÌ   rÍ   rÏ   rÒ   rÕ   r×   rx   ry   Úhas_statrß   Ú
has_spawnlrê   Úhas_textmoderî   r³   rò   ró   r   r   r   r   r½   f  s   
&r½   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestGetTempPrefixzTest gettempprefix().c             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   rw   rù   rþ   r   r   r   r   r÷     s   r÷   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestGetTempDirzTest gettempdir().c             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   rt   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   rw   r  r  r£   r  r   r   r   r   rÿ   4  s
   	

rÿ   c               @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestMkstempzTest mkstemp().Nc       
   	   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   rw   rÍ   rÏ   rÒ   r×   r   r   r   r   r  c  s
   
	r  c               @   sf   e Zd 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 )ÚTestMkdtempzTest mkdtemp().c             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   rw   r³   rÍ   rÏ   rÒ   rÕ   r×   rx   ry   rô   r  rò   ró   r   r   r   r   r
  ¡  s   
r
  c                   sT   e Zd 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 )Ú
TestMktempzTest mktemp().c                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   rw   r)   r+   r  rÍ   rÏ   rc   r{   r   r   )r[   r   r    s   
r  c               @   sj   e Zd 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 )ÚTestNamedTemporaryFilezTest NamedTemporaryFile().Nr   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   rw   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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 ),ÚTestSpooledTemporaryFilezTest SpooledTemporaryFile().r   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)r2  ó   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   xxxxxr2  )rÍ   r6  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   r2  )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+br2  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   rB  rC  r6   rD  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+  ÚnewlinerC  u   Î›
r   u*   Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›
u.   Î›
Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›
)r   rN   rj   r  r1   rm   r~   r,  r´   r  r9   rB  rC  r6   rD  )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   rK  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,   Úfstatr<  Ú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   rw   rÍ   rÏ   r  r1  r3  r8  r:  r;  r=  r>  r?  rA  rE  rG  rI  rJ  rL  rM  rS  r   r   r   r   r*  Ç  s(   
		
		r*  c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestTemporaryFilezTest TemporaryFile().c             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)rC  zfoo
r   )rH  r   )r   rW  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   rw   rÏ   rU  r   rX  r'  r   r   r   r   rT  Å  s   	rT  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)rZ  r  r   r   r   r\    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   rY    s   rY  c               @   sn   e Zd 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 )ÚTestTemporaryDirectoryzTest TemporaryDirectory().Nr   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   )rf  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·   rl  r~   r  r6   r1   r™   )r   rg  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:   r[  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:   r[  Ú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-8rr  z
Exception z'ResourceWarning: Implicitly cleaning up)rÍ   rs  r   rt  rn   ru  r~   r,   r-   r  ra   r‡   )r   r:   rv  rw  rx  ry  rz  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:   rf  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Í   rl  )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   rw   rÍ   rk  rm  r   Zskip_unless_symlinkro  Zcpython_onlyrp  r{  r|  r  r   r"  r   r   r   r   re    s   

 re  Ú__main__)5r   rh  rš   r,   rp   rÜ   r@   r&   Ú
contextlibr  rx   r   Ztestr   Ztest.supportr   rz   r   rô   rÊ   rÉ   rö   rõ   rÝ   Ú
startswithr`   ZTestCaser
   r   rB   rW   r|   rŽ   r   Úcontextmanagerr¥   r©   rª   r½   r÷   rÿ   r  r
  r  r  r*  rC   rD   rT  rY  re  r   Úmainr   r   r   r   Ú<module>   sb   

.H*%
  / />l<~ }>  
