B
    18™\|É  ã               @   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   úV/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/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nsufÚ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   rW   r   r   r   r   rC   q   s   rC   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   )ÚnextrZ   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   )rZ   ÚrangeÚ
TEST_FILESr]   r@   ÚassertNotIn)r   rT   rZ   Ú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   é   )rZ   )r   rc   rZ   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,   Úpiperg   ÚcloseÚwriter]   rZ   Ú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_   rd   rf   ÚunittestÚ
skipUnlessÚhasattrr,   rw   Ú__classcell__r   r   )r\   r   rX      s   
rX   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)ÚTMPDIRÚTEMPÚTMP)r   ÚEnvironmentVarGuardr,   Úgetenvr-   r2   r   r~   Ú
ValueErrorÚassertInÚgetcwdÚAttributeErrorrs   Úcurdir)r   ÚenvÚenvnameÚdirnamer   r   r   r   Útest_wanted_dirsã   s     




 z)TestCandidateTempdirList.test_wanted_dirsN)r   r   r   rx   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)rs   )ÚargsÚkwargsr   r   r   Úraise_OSError  s    zFTestGetDefaultTempdir.test_no_files_left_behind.<locals>.raise_OSErrorÚopenc                 s   ˆ | |Ž}ˆ|_ |S )N)rk   )r•   r–   Úfp)Ú	orig_openr—   r   r   Ú
bad_writer  s    
zCTestGetDefaultTempdir.test_no_files_left_behind.<locals>.bad_writer)r   rP   r   Ú	swap_attrÚ_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   rx   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€   rY   )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   rx   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 )NrM   )r   rG   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   rM   Úst_modeÚS_IWUSRÚS_IWGRPÚS_IWOTHÚchmodÚaccessÚW_OKÚ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ÚnonexistentrM   )rª   r,   r-   Újoinr   rM   r   rœ   r   r    r¹   )r   rM   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ÚwbrM   )rª   r,   r-   r½   r   rM   r˜   rj   r   rœ   r   ÚNotADirectoryErrorr    r¹   )r   rM   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,   rk   rÇ   )r   r   r   r   r   rk   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,   rj   rÌ   ÚunlinkrÍ   rË   rk   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   rK   rL   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Ó   rk   )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   rL   rÓ   rk   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`   ra   rÓ   )r   Úextantrc   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   rG   rÓ   rk   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º   rU   Ú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
re   s   blat)rÓ   rk   r,   ÚlseekrÇ   ÚSEEK_SETr1   rn   )r   Úfr   r   r   Útest_textmodeè  s
    

zTestMkstempInner.test_textmodec             C   s   t  t  ¡ t  ¡ dt jt¡S )Nr   )r   rÆ   rK   rI   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,   rj   r6   Úendswith)r   Zfd1Zname1Ú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   rG   r6   r÷   r¹   r,   rj   )r   r:   rÇ   r9   r   r   r   Ú&test_collision_with_existing_directory  s    
z7TestMkstempInner.test_collision_with_existing_directory)NNNr   )r   r   r   rx   rÒ   rÓ   rÕ   rØ   rÛ   rÝ   ry   rz   Ú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   rI   r€   r   ÚassertGreaterr/   rJ   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   rI   rG   r,   r-   r½   r˜   ÚO_RDWRÚO_CREATrj   rÑ   rÜ   )r   r   ÚdrÇ   r   r   r   Útest_usable_template#  s    
z&TestGetTempPrefix.test_usable_templateN)r   r   r   rx   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   rK   rL   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   rD   rk   rj   )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   rK   rL   r6   ru   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   rG   rM   r   r‡   r1   rK   rÜ   )r   Zcase_sensitive_tempdirZ_tempdirrŽ   r   r   r   Útest_case_sensitiveT  s    

z"TestGetTempDir.test_case_sensitiveN)r   r   r   rx   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   rK   rL   rF   r,   r-   r.   r2   r1   r@   rj   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   rL   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   rG   rÓ   r,   rÜ   )r   r:   r   r   r   rÝ   ˜  s    z!TestMkstemp.test_choose_directory)NNN)r   r   r   rx   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   rG   )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   rK   rL   rG   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   rL   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`   ra   rÓ   r3   r   r,   rÜ   )r   rÚ   rc   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   rG   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º   rU   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   rD   rj   r6   r9   r÷   rG   )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   rG   r6   r÷   )r   Zdir1Zdir2r   r   r   rú     s    z2TestMkdtemp.test_collision_with_existing_directory)NNN)r   r   r   rx   r¹   rÓ   rÕ   rØ   rÛ   rÝ   ry   rz   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   rG   r:   r[   r)   )r   )r\   r   r   r)     s    
zTestMktemp.setUpc                s&   | j rt | j ¡ d | _ tƒ  ¡  d S )N)r:   r,   rÜ   r[   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,   rj   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`   ra   rÓ   )r   rÚ   rc   r   r   r   rd   7  s    
zTestMktemp.test_many)r   r   )r   r   r   rx   r)   r+   r  rÓ   rÕ   rd   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   rK   rD   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)Úcpython)rÓ   ÚweakrefÚrefrk   r   Úcheck_impl_detailÚassertIsNone)r   ró   Úwrrk   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   rD   rk   r½   Úseek)ró   )Úlinesr   r   Ú	make_filer  s    
z3TestNamedTemporaryFile.test_iter.<locals>.make_filer   )Ú	enumerater1   r/   )r   r!  rc   Ú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   rD   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   rG   rD   rk   rj   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   rG   rD   r9   rk   rj   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   rD   rk   rj   )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   rD   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)rS   )rÇ   )ÚclosedÚos_closer   r   rj   ³  s    
z5TestNamedTemporaryFile.test_no_leak_fd.<locals>.closezos.close)Úside_effectzio.openr   )
r,   rj   r   Úpatchr‰   r   r   rD   r1   r/   )r   rj   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   rG   Ú
addCleanupr   r©   r   r‰   rD   r   r1   r,   rž   )r   r:   r   r   r   Útest_bad_mode¼  s    z$TestNamedTemporaryFile.test_bad_mode)Nr   r   T)r   r   r   rx   rÓ   rÕ   r  r$  r&  r'  r)  r*  r,  r1  r4  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   rK   rO   )r   r6  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)r6  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é
   )r6  r:   s   blat blat blat blat blat z*SpooledTemporaryFile %s exists after close)r   rG   rO   r   r7  rk   r6   r9   rj   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é   )r6  é   r   s   xxxxxxxxxxxxxxxxxxxx)rÓ   r   r7  r`   r  rk   )r   ró   rc   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:  )r6  s   xxxxxxxxxxxxxxxxxxxxs
   xxxxxxxxxxó   x)rÓ   r   r7  rk   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  rn   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é#   )r6  )s   xxxxxxxxxxxxxxxxxxxxs
   xxxxxxxxxxs   xxxxxr=  )rÓ   rA  r   r7  rk   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:  )r6  r	   r   r=  )rÓ   r   r7  r  rk   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:  )r6  r   )rÓ   r   r7  r6   Úfileno)r   ró   r   r   r   Útest_fileno  s    z$TestSpooledTemporaryFile.test_filenoc             C   s:   t  ¡ }| d¡ |  |j¡ | ¡  | ¡  | ¡  d S )Ns   abc
)r   rO   rk   r   r7  rj   )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   )r6  s   abc
)r   rO   rk   r6   r7  rj   )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:  )r6  s#   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas#   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   éF   sF   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)rÓ   rn   rk   r  r1   )r   ró   rn   rk   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 )Nr8  )r6  s
   xxxxxxxxxxzw+br=  zrb+)r   rO   rk   r   r7  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+r8  )rº   r6  zabc
r   zdef
zabc
def
zxyzzy
zabc
def
xyzzy
zfoobar
zabc
def
xyzzy
foobar
)r   rO   rk   r  r1   rn   r   r7  rº   r  r9   rM  rN  r6   rO  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+r8  r   zutf-8)rº   r6  ÚnewlinerN  u   Î›
r   u*   Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›
u.   Î›
Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›Î›
)r   rO   rk   r  r1   rn   r   r7  rº   r  r9   rM  rN  r6   rO  )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   )r6  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   rO   r   r7  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   )r6  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   rO   r   r7  rk   Ú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   )r6  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   rO   rk   rV  r6   r7  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 )	Nr8  )r6  s   abcdefg
r   r   é   s   abcdre   )r   rO   rk   r  Útruncater   r7  r1   Ú_fileÚgetvaluer6   rû   r,   ÚfstatrG  Ú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   rx   rÓ   rÕ   r'  r<  r>  rC  rE  rF  rH  rI  rJ  rL  rP  rR  rT  rU  rW  rX  r_  r   r   r   r   r5  Ç  s(   
		
		r5  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   rE   )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   rG   rE   rk   r,   rÜ   rj   )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   rE   rk   rj   )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   rE   rk   r  r1   rn   )Úinputr•   r–   Úfileobj)r   r   r   Ú	roundtripè  s    

z;TestTemporaryFile.test_mode_and_encoding.<locals>.roundtrips   1234zw+bzabdc
zw+u   Î›zutf-16)rN  zfoo
r   )rS  r   )r   rd  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)rS   )rÇ   )r-  r.  r   r   rj   ÷  s    
z0TestTemporaryFile.test_no_leak_fd.<locals>.closezos.close)r/  zio.openr   )
r,   rj   r   r0  r‰   r   r   rE   r1   r/   )r   rj   r   )r-  r.  r   r1  ó  s    z!TestTemporaryFile.test_no_leak_fdN)	r   r   r   rx   rÕ   ra  r*  re  r1  r   r   r   r   r`  Å  s   	r`  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   )rR   )Ú.0Úmodr   r   r   ú
<listcomp>  s    z*NulledModules.__init__.<locals>.<listcomp>c             S   s   g | ]}|  ¡ ‘qS r   )Úcopy)rg  r  r   r   r   ri    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)rk  )r   r  rV   r   r   r   r%     s    
zNulledModules.__enter__c             G   s2   x,t | j| jƒD ]\}}| ¡  | |¡ qW d S )N)Úziprk  rl  Ú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   rf    s   rf  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   rK   rP   r@   r9   rÓ   r˜   r,   r-   r½   rk   )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   rP   r   r    r1   Ú	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   rG   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   )rs  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½   rz  r   r%  r6   r1   rž   )r   rt  Ú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   rG   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,   Ú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:   rh  z-cz*TemporaryDirectory %s exists after cleanupzutf-8Úbackslashreplacez
Exception z'ResourceWarning: Implicitly cleaning up)rÓ   Úformatr   Úassert_python_okro   Ústripr   r,   r-   r%  rb   rŠ   )r   r:   rh  Ú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-8r‚  z
Exception z'ResourceWarning: Implicitly cleaning up)rÓ   rƒ  r   r„  ro   r…  r   r,   r-   r%  rb   rŠ   )r   r:   r†  r‡  rˆ  r‰  rŠ  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:   rs  Z
ImplicitlyF)ÚquietÚalways)r    z*TemporaryDirectory %s exists after __del__)rÓ   r9   r   r#   ÚResourceWarningr&   r'   Ú
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Ó   rz  )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   rx   rÓ   ry  r{  r   Úskip_unless_symlinkr~  Úcpython_onlyr  r‹  rŒ  r’  r*  r,  r   r   r   r   rr    s   

 rr  Ú__main__)5r   rv  rŸ   r,   rq   râ   rA   r&   Ú
contextlibr  ry   r   Útestr   Ztest.supportr   r{   r   rû   rÐ   rÏ   rý   rü   rã   Ú
startswithra   ÚTestCaser
   r   rC   rX   r}   r’   r¢   Úcontextmanagerrª   r®   r¯   rÃ   rþ   r  r  r  r  r  r5  rD   rE   r`  rf  rr  r   Úmainr   r   r   r   Ú<module>   sb   

.H*%
  / />l<~ }>  
