a
    äzezÕ  ã                   @   s&  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlZd dlmZ d dlmZ 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/uròG d-d.„ d.eƒZ0G d/d0„ d0ƒZ1G d1d2„ d2eƒZ2e3d3kr"e 4¡  dS )4é    N)Úmock)Úsupport)Úscript_helperÚspawnlZopenbsdé0   éd   c                   @   s4   e Zd Zdd„ Zd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.9/test/test_tempfile.pyÚtest_infer_return_type_singles$   s    z4TestLowLevelInternals.test_infer_return_type_singlesc                 C   s˜   |   tt dd¡¡ |   tt dd¡¡ |  t¡ t dd¡ W d   ƒ n1 sT0    Y  |  t¡ t dd¡ W d   ƒ n1 sŠ0    Y  d S r	   ©r   r   r   r   r   ÚassertRaisesÚ	TypeErrorr   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   ƒ n1 s’0    Y  |  t¡ t dd d¡ W d   ƒ n1 sÊ0    Y  d S r	   r   r   r   r   r   Ú)test_infer_return_type_multiples_and_none1   s    ,z?TestLowLevelInternals.test_infer_return_type_multiples_and_nonec                 C   s   |   tt t d¡¡¡ d S )Nú/)r   r   r   r   ÚpathlibÚPathr   r   r   r   Útest_infer_return_type_pathlib<   s    z4TestLowLevelInternals.test_infer_return_type_pathlibc                 C   s  G dd„ dƒ}|   tt |dƒ¡¡ |   tt |dƒ¡¡ |   tt d|dƒ¡¡ |   tt d|dƒ¡¡ |   tt d |dƒ¡¡ |   tt d |dƒ¡¡ |  t¡  t d|dƒ¡ W d   ƒ n1 sÊ0    Y  |  t¡  t d|dƒ¡ W d   ƒ n1 s0    Y  d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )zCTestLowLevelInternals.test_infer_return_type_pathlike.<locals>.Pathc                 S   s
   || _ d S ©N©Úpath)r   r!   r   r   r   Ú__init__A   s    zLTestLowLevelInternals.test_infer_return_type_pathlike.<locals>.Path.__init__c                 S   s   | j S r   r    r   r   r   r   Ú
__fspath__D   s    zNTestLowLevelInternals.test_infer_return_type_pathlike.<locals>.Path.__fspath__N)Ú__name__Ú
__module__Ú__qualname__r"   r#   r   r   r   r   r   @   s   r   r   ó   /r
   r   r   )r   r   r   r   r   Útest_infer_return_type_pathlike?   s    .z5TestLowLevelInternals.test_infer_return_type_pathlikeN)r$   r%   r&   r   r   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   ÚsetUpZ   s
    

ÿzBaseTestCase.setUpc                 C   s   | j  d d d ¡ d S r   )r0   Ú__exit__r   r   r   r   ÚtearDown`   s    zBaseTestCase.tearDownc           
      C   sˆ  t j |¡\}}|d t|ƒ… }|t|ƒt|ƒ d … }|d urn|  t|ƒt|ƒtu sbt|t jƒrftnt	d¡ |d ur˜|  t|ƒt|ƒtu rtnt	d¡ |d urÂ|  t|ƒt|ƒtu 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ƒrb| 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)Úosr!   ÚsplitÚlenr   Útyper   Ú
isinstanceÚPathLiker   ÚassertEqualÚabspathÚ	str_checkÚb_checkÚ
assertTrueÚmatchÚpattern)
r   ÚnameÚdirÚpreÚsufÚndirÚnbaseZnpreZnsufÚcheckr   r   r   Ú	nameCheckc   sN    
ÿ
ÿûÿÿ
ÿ
ÿ
ÿÿÿzBaseTestCase.nameCheckN)
r$   r%   r&   ÚreÚcompiler@   rA   r5   r7   rL   r   r   r   r   r)   U   s
   

r)   c                   @   s   e Zd Zdd„ ZdS )ÚTestExportsc                 C   sp   t j}dddddddddddddddœ}g }|D ]"}|d dkr0||vr0| |¡ q0|  t|ƒdkd| ¡ d S )Né   )ÚNamedTemporaryFileÚTemporaryFileÚmkstempÚmkdtempr+   ÚTMP_MAXÚgettempprefixÚgettempprefixbÚ
gettempdirÚgettempdirbÚtempdirÚtemplateÚSpooledTemporaryFileÚTemporaryDirectoryr   Ú_zunexpected keys: %s)r   Ú__dict__ÚappendrB   r:   )r   ÚdictÚexpectedZunexpÚkeyr   r   r   Útest_exports‰   s.    òÿzTestExports.test_exportsN)r$   r%   r&   rd   r   r   r   r   rO   ˆ   s   rO   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 r   )r   Ú_RandomNameSequenceÚrÚsuperr5   r   ©Ú	__class__r   r   r5   ©   s    
zTestRandomNameSequence.setUpc                 C   s   t | jƒ}|  |ddd¡ d S ©Nr
   )Únextrg   rL   )r   Úsr   r   r   Útest_get_six_char_str­   s    
z,TestRandomNameSequence.test_get_six_char_strc                 C   sH   i }| j }ttƒD ]0}t|ƒ}|  |ddd¡ |  ||¡ d||< qd S )Nr
   rP   )rg   ÚrangeÚ
TEST_FILESrl   rL   ÚassertNotIn)r   ra   rg   Úirm   r   r   r   Ú	test_many²   s    z TestRandomNameSequence.test_manyc                 C   s,   d}| j }|D ]}|d7 }|dkr q(qd S )Nr   rP   é   )rg   )r   rr   rg   rm   r   r   r   Úsupports_iter½   s    z$TestRandomNameSequence.supports_iterÚforkz!os.fork is required for this testc              
   C   sÖ   t  ¡ \}}d }zŒt  ¡ }|sTt  |¡ t  |t| jƒ d¡¡ t  |¡ t  d¡ t| jƒ}t  	|t
|ƒ¡ d¡}W |rˆtj|dd t  |¡ t  |¡ n(|r°tj|dd t  |¡ t  |¡ 0 |  ||¡ d S )NÚasciir   )Úexitcode)r8   Úpiperv   ÚcloseÚwriterl   rg   ÚencodeÚ_exitÚreadr:   Údecoder   Zwait_processÚ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&   r5   rn   rs   ru   ÚunittestÚ
skipUnlessÚhasattrr8   r‚   Ú__classcell__r   r   ri   r   re   ¦   s   
ÿre   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCandidateTempdirListc                 C   s4   t  ¡ }|  t|ƒdk¡ |D ]}|  |t¡ q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  ¡ ž}dD ]"}t |¡}|stj |¡||< qt ¡ }dD ]"}t |¡}|sTt‚|  	||¡ q>zt 
¡ }W n ttfyŠ   tj}Y n0 |  	||¡ W d   ƒ n1 s¬0    Y  d S )N)ÚTMPDIRÚTEMPÚTMP)r   ÚEnvironmentVarGuardr8   Úgetenvr!   r?   r   r‰   Ú
ValueErrorÚassertInÚgetcwdÚAttributeErrorÚOSErrorÚcurdir)r   ÚenvÚenvnameÚdirnamerŒ   r   r   r   Útest_wanted_dirsò   s    


z)TestCandidateTempdirList.test_wanted_dirsN)r$   r%   r&   rŽ   r   r   r   r   r   r‡   æ   s   	r‡   c                   @   s   e Zd Zdd„ ZdS )ÚTestGetDefaultTempdirc                    s†  t  ¡ f‰‡fdd„}t t d|¡( t  ¡  |  t ˆ¡g ¡ dd„ ‰t tdˆ¡T |  	t
¡ t  ¡  W d   ƒ n1 s„0    Y  |  t ˆ¡g ¡ W d   ƒ n1 s´0    Y  ‡ ‡fdd„}t td|¡V‰ |  	t
¡ t  ¡  W d   ƒ n1 s0    Y  |  t ˆ¡g ¡ W d   ƒ n1 s80    Y  W d   ƒ n1 sX0    Y  W d   ƒ n1 sx0    Y  d S )	Nc                      s   ˆ gS r   r   r   )Úour_temp_directoryr   r   Úour_candidate_list  s    zKTestGetDefaultTempdir.test_no_files_left_behind.<locals>.our_candidate_listr‰   c                  _   s
   t ƒ ‚d S r   )r˜   )ÚargsÚkwargsr   r   r   Úraise_OSError   s    zFTestGetDefaultTempdir.test_no_files_left_behind.<locals>.raise_OSErrorÚopenc                     s   ˆ | i |¤Ž}ˆ|_ |S r   )r{   )r¡   r¢   Úfp)Ú	orig_openr£   r   r   Ú
bad_writer)  s    zCTestGetDefaultTempdir.test_no_files_left_behind.<locals>.bad_writer)r   r]   r   Ú	swap_attrÚ_get_default_tempdirr>   r8   ÚlistdirÚior   ÚFileNotFoundError)r   r    r§   r   )r¦   rŸ   r£   r   Útest_no_files_left_behind  s"    ÿ&0(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 r   )r   Ú_get_candidate_namesr‹   rf   )r   Úobjr   r   r   Útest_retval8  s    z!TestGetCandidateNames.test_retvalc                 C   s"   t  ¡ }t  ¡ }|  ||u ¡ d S r   )r   r¯   rB   )r   ÚaÚbr   r   r   Útest_same_thing=  s    z%TestGetCandidateNames.test_same_thingN)r$   r%   r&   r±   r´   r   r   r   r   r®   5  s   r®   c               	   c   s\   t  ¡ } zBt t d| ¡ d V  W d   ƒ n1 s40    Y  W t | ¡ nt | ¡ 0 d S )NrZ   )r   rT   r   r¨   Úrmtree©rF   r   r   r   Ú_inside_empty_temp_dirE  s
    &r·   c                     s   t  td‡ fdd„¡S )Nr¯   c                      s   t ˆ ƒS r   )Úiterr   ©Únamesr   r   Ú<lambda>R  r   z'_mock_candidate_names.<locals>.<lambda>)r   r¨   r   r¹   r   r¹   r   Ú_mock_candidate_namesO  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|¡ zrt 
tjtj¡r\|  d¡ |  t¡ |  ¡  W d   ƒ n1 s„0    Y  |  t tj¡g ¡ W t 	tj|¡ nt 	tj|¡ 0 W d   ƒ n1 sØ0    Y  d S )Nz!can't set the directory read-only)r·   r8   Ústatr   rZ   Úst_modeÚS_IWUSRÚS_IWGRPÚS_IWOTHÚchmodÚaccessÚW_OKZskipTestr   ÚPermissionErrorÚ	make_tempr>   rª   )r   ZoldmodeÚmoder   r   r   Útest_read_only_directoryW  s    
&z'TestBadTempdir.test_read_only_directoryc              
   C   sš   t ƒ € tj tjd¡}t td|¡B |  t	¡ |  
¡  W d   ƒ n1 sP0    Y  W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )NÚnonexistentrZ   )r·   r8   r!   Újoinr   rZ   r   r¨   r   r¬   rÇ   ©r   rZ   r   r   r   Útest_nonexisting_directorye  s
    z)TestBadTempdir.test_nonexisting_directoryc              
   C   s¬   t ƒ ’ tj tjd¡}t|dƒ ¡  t 	td|¡F |  
ttf¡ |  ¡  W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  W d   ƒ n1 sž0    Y  d S )NÚfileÚwbrZ   )r·   r8   r!   rË   r   rZ   r¤   rz   r   r¨   r   ÚNotADirectoryErrorr¬   rÇ   rÌ   r   r   r   Útest_non_directoryl  s    z!TestBadTempdir.test_non_directoryN)r$   r%   r&   rÉ   rÍ   rÑ   r   r   r   r   r½   U  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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 r   )Ú_bflagsÚ_tflagsr   r   Ú_mkstemp_innerÚfdrE   )r   rF   rG   rH   ÚbinÚflagsÚoutput_typer   r   r   r"   ~  s    z#TestMkstempInner.mkstemped.__init__c                 C   s   t  | j|¡ d S r   )r8   r{   rÖ   )r   r   r   r   r   r{   …  s    z TestMkstempInner.mkstemped.writec                 C   s   |   | j¡ |  | j¡ d S r   )Ú_closerÖ   Ú_unlinkrE   r   r   r   r   Ú__del__ˆ  s    z"TestMkstempInner.mkstemped.__del__N)r$   r%   r&   r   Ú_bin_openflagsrÓ   Ú_text_openflagsrÔ   r8   rz   rÚ   ÚunlinkrÛ   r"   r{   rÜ   r   r   r   r   Ú	mkstempedx  s   rà   NrP   c                 C   sr   t  |||¡}|d u r0|tu r(t  ¡ }nt  ¡ }|d u r>|ƒ }|d u rL|ƒ }|  ||||¡}|  |j|||¡ |S r   )r   r   r   rX   rY   rà   rL   rE   )r   rF   rG   rH   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 )	Nó   blatr²   ©rG   r³   ©rH   ©rG   rH   Úaaú.txt)rá   r{   r   r   r   r   Ú
test_basicœ  s
    zTestMkstempInner.test_basicc                 C   s2  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   ƒ n1 s¤0    Y  |  t¡$ | j|d
d d¡ W d   ƒ n1 sâ0    Y  |  t¡& | j|dd
d d¡ W d   ƒ n1 s$0    Y  d S )Nr   ©rF   rH   râ   ó   a©rF   rG   ó   b©rF   rG   rH   ó   aaó   .txtr
   )r   rY   rá   r{   r   r   )r   Zdir_br   r   r   Útest_basic_with_bytes_names¤  s    22z,TestMkstempInner.test_basic_with_bytes_namesc                 C   s*   t ttƒƒ}|D ]}| jdd||< qd S ©Nræ   rã   )Úlistro   rp   rá   ©r   Zextantrr   r   r   r   Útest_basic_manyµ  s    z TestMkstempInner.test_basic_manyc              	   C   sb   t  ¡ }z@| j|d d¡ | jt |¡d d¡ W t ¡  t 	|¡ nt ¡  t 	|¡ 0 d S ©Nr¶   râ   )
r   rT   rá   r{   r   r   r   Ú
gc_collectr8   Úrmdir©r   rF   r   r   r   Útest_choose_directory»  s    ÿz&TestMkstempInner.test_choose_directoryc                 C   sJ   |   ¡ }t t |j¡j¡}d}tjdkr:|d? }|d }|  ||¡ d S )Né€  Úwin32é   éI   )	rá   r¾   ÚS_IMODEr8   rE   r¿   ÚsysÚplatformr>   )r   rÎ   rÈ   rb   Ú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 }zt}W n tyZ   t	j
d }Y n0 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á   r>   r8   Úget_inheritablerÖ   Ú__file__Ú	NameErrorrÿ   Úargvr!   rË   rœ   r?   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
rt   râ   )rá   r{   r8   ÚlseekrÖ   ÚSEEK_SETr>   r~   ©r   Úfr   r   r   Útest_textmodeø  s
    

zTestMkstempInner.test_textmodec                 C   s   t  t  ¡ t  ¡ dt jt¡S rk   )r   rÕ   rX   rV   rÝ   r   r   r   r   r   rÇ     s    
üzTestMkstempInner.make_tempc              	   C   s¢   t ƒ ˆ tdddƒ\ |  ¡ \}}t |¡ |  | d¡¡ |  ¡ \}}t |¡ |  | d¡¡ W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  d S ©NÚaaaÚbbb)r·   r¼   rÇ   r8   rz   rB   Úendswith)r   Úfd1Zname1Úfd2Zname2r   r   r   Ú!test_collision_with_existing_file
  s    
ÿ

z2TestMkstempInner.test_collision_with_existing_filec              	   C   s”   t ƒ z tdddƒN t ¡ }|  | d¡¡ |  ¡ \}}t |¡ |  | d¡¡ W d   ƒ n1 sh0    Y  W d   ƒ n1 s†0    Y  d S r  )	r·   r¼   r   rT   rB   r  rÇ   r8   rz   )r   rF   rÖ   rE   r   r   r   Ú&test_collision_with_existing_directory  s    
ÿ
z7TestMkstempInner.test_collision_with_existing_directory)NNNrP   )r$   r%   r&   rà   rá   rè   rð   rô   rù   r  rƒ   r„   Ú
has_spawnlr  Úhas_textmoder  rÇ   r  r  r   r   r   r   rÒ   u  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 rˆ   )r   rV   r‹   r   ZassertGreaterr:   rW   r   )r   ÚpZpbr   r   r   Útest_sane_template'  s    z$TestGetTempPrefix.test_sane_templatec              	   C   sn   t  ¡ d }t jdd}zDtj ||¡}t |tjtjB ¡}t 	|¡ t 
|¡ W t |¡ nt |¡ 0 d S )Nz
xxxxxx.xxxr
   )Úprefix)r   rV   rT   r8   r!   rË   r¤   ÚO_RDWRÚO_CREATrz   rß   r÷   )r   r  ÚdrÖ   r   r   r   Útest_usable_template3  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   sT   t  ¡ t  ¡ fD ]>}|  tj |¡p,|tjkd| ¡ |  tj |¡d| ¡ qd S )Nz%r is not an absolute pathz%r is not a directory)	r   rX   rY   rB   r8   r!   Úisabsr™   Úisdir©r   r#  r   r   r   Útest_directory_existsG  s    ÿÿz$TestGetTempDir.test_directory_existsc                 C   s6   t  ¡ }| d¡ W d   ƒ n1 s(0    Y  d S )Nrâ   )r   rQ   r{   )r   rÎ   r   r   r   Útest_directory_writableP  s    
z&TestGetTempDir.test_directory_writablec                 C   sP   t  ¡ }t  ¡ }t  ¡ }|  ||u ¡ |  t|ƒt|ƒ¡ |  |t |¡¡ d S r   )	r   rX   rY   rB   r€   r;   r>   r8   Úfsdecode)r   r²   r³   r   r   r   r   r´   Y  s    zTestGetTempDir.test_same_thingc              	   C   s„   t  d¡}t jd  }t _zTt ¡ (}||d< |  t  ¡ |¡ W d   ƒ n1 sP0    Y  W |t _t |¡ n|t _t |¡ 0 d S )Nz-Tempr   )r   rT   rZ   r   r’   r>   rX   r÷   )r   Zcase_sensitive_tempdirZ_tempdirrš   r   r   r   Útest_case_sensitivec  s    

0ÿz"TestGetTempDir.test_case_sensitiveN)r$   r%   r&   r)  r*  r´   r,  r   r   r   r   r%  D  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 u r0|tu r(t  ¡ }nt  ¡ }|d u r>|ƒ }|d u rL|ƒ }t j|||d\}}tj |¡\}}tj 	|¡}	|  
|	|d|	|f ¡ z(|  ||||¡ W t |¡ t |¡ nt |¡ t |¡ 0 d S )N©rF   r   Úsuffixz+Directory '%s' incorrectly returned as '%s')r   r   r   rX   rY   rS   r8   r!   r9   r?   r>   rL   rz   rß   )
r   rF   rG   rH   rÙ   rÖ   rE   rI   rJ   Zadirr   r   r   rá   u  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ç   Ú.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   ƒ n1 sŽ0    Y  |  t¡  | jd	ddd W d   ƒ n1 sÈ0    Y  |  t¡  | jd	ddd W d   ƒ n1 s0    Y  d S )Nr   ré   rê   rë   rì   rí   rî   rï   ó   .r¶   r0  ræ   rç   )r   rY   rá   r   r   r(  r   r   r   rð   •  s    ..z'TestMkstemp.test_basic_with_bytes_namesc              	   C   sF   t  ¡ }z,| j|d | jt |¡d W t |¡ nt |¡ 0 d S ©Nr¶   )r   rT   rá   r   r   r8   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-  r  s   
	r-  c                   @   sV   e Zd Zd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S )ÚTestMkdtempc                 C   s   t  ¡ S r   )r   rT   r   r   r   r   rÇ   ´  s    zTestMkdtemp.make_tempNc                 C   s   t  |||¡}|d u r0|tu r(t  ¡ }nt  ¡ }|d u r>|ƒ }|d u rL|ƒ }t j|||d}z|  ||||¡ |W S    t |¡ ‚ Y n0 d S ©Nr.  )	r   r   r   rX   rY   rT   rL   r8   r÷   )r   rF   rG   rH   rÙ   rE   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ç   )r8   r÷   rá   r   r   r   r   rè   Ë  s
    zTestMkdtemp.test_basicc                 C   s4  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   ƒ n1 s¤0    Y  |  t¡& t | j|dd
d¡ W d   ƒ n1 sä0    Y  |  t¡& t | jdddd¡ W d   ƒ n1 s&0    Y  d S )Nr¶   rê   rë   rì   ré   rí   rî   rï   ræ   rç   r
   )r   rY   r8   r÷   rá   r   r   r(  r   r   r   rð   Ó  s    44z'TestMkdtemp.test_basic_with_bytes_namesc              
   C   sn   t ttƒƒ}z<|D ]}| jdd||< qW |D ]}t|tƒr.t |¡ q.n |D ]}t|tƒrNt |¡ qN0 d S rñ   )rò   ro   rp   rá   r<   r   r8   r÷   ró   r   r   r   rô   â  s    
þ
zTestMkdtemp.test_basic_manyc              	   C   sR   t  ¡ }z8t | j|d¡ t | jt |¡d¡ W t |¡ nt |¡ 0 d S r3  )r   rT   r8   r÷   rá   r   r   rø   r   r   r   rù   í  s
    z!TestMkdtemp.test_choose_directoryc              	   C   sl   |   ¡ }zRt t |¡j¡}|dM }d}tjdkrB|d? }|d }|  ||¡ W t |¡ nt |¡ 0 d S )Niÿ  iÀ  rû   rü   rý   )	rá   r¾   rþ   r8   r¿   rÿ   r   r>   r÷   )r   rF   rÈ   rb   r  r   r   r   Ú	test_modeö  s    
zTestMkdtemp.test_modec              	   C   s”   t ƒ z tdddƒN tjdd}| ¡  |  |j d¡¡ t ¡ }|  | d¡¡ W d   ƒ n1 sh0    Y  W d   ƒ n1 s†0    Y  d S )Nr  r  F)Údelete)	r·   r¼   r   rQ   rz   rB   rE   r  rT   )r   rÎ   rF   r   r   r   r    s    
ÿz-TestMkdtemp.test_collision_with_existing_filec              	   C   s†   t ƒ l tdddƒ@ t ¡ }|  | d¡¡ t ¡ }|  | d¡¡ W d   ƒ n1 sZ0    Y  W d   ƒ n1 sx0    Y  d S r  )r·   r¼   r   rT   rB   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ù   r7  r  r  r   r   r   r   r4  ±  s   
	r4  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 r   )r   rT   rF   rh   r5   r   ri   r   r   r5   "  s    
zTestMktemp.setUpc                    s&   | j rt | j ¡ d | _ tƒ  ¡  d S r   )rF   r8   r÷   rh   r7   r   ri   r   r   r7   &  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 )Nr.  rú   )r   r+   rE   r8   rz   r¤   rÓ   )r   rF   rG   rH   r   r   r   r"   0  s    zTestMktemp.mktemped.__init__c                 C   s   |   | j¡ d S r   )rÛ   rE   r   r   r   r   rÜ   6  s    zTestMktemp.mktemped.__del__N)r$   r%   r&   r8   rß   rÛ   r   rÝ   rÓ   r"   rÜ   r   r   r   r   Úmktemped,  s   r:  r
   c                 C   s(   |   | j||¡}|  |j| j||¡ |S r   )r:  rF   rL   rE   )r   rG   rH   rÎ   r   r   r   rá   9  s    zTestMktemp.do_createc                 C   s@   |   ¡  | j dd | j dd | j ddd | j ddd d S r6  r1  r   r   r   r   rè   ?  s
    zTestMktemp.test_basicc                 C   s4   t ttƒƒ}|D ]}| jdd||< q~t ¡  d S rñ   )rò   ro   rp   rá   r   rö   ró   r   r   r   rs   G  s
    zTestMktemp.test_many)r
   r
   )
r$   r%   r&   r5   r7   r:  rá   rè   rs   r†   r   r   ri   r   r9    s   
r9  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 u rt  ¡ }t j||||d}|  |j|||¡ |S )N)rF   r   r/  r8  )r   rX   rQ   rL   rE   )r   rF   rG   rH   r8  rÎ   r   r   r   rá   ^  s    
ÿz TestNamedTemporaryFile.do_createc                 C   s@   |   ¡  | j dd | j dd | j ddd | j ddd d S r6  r1  r   r   r   r   rè   h  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Úrefr{   r   Zcheck_impl_detailÚassertIsNone)r   r  Úwrr{   Zwrite2r   r   r   Útest_method_lookupp  s    
z)TestNamedTemporaryFile.test_method_lookupc                    sP   g d¢‰ ‡ fdd„}t |ƒ ƒD ]\}}|  |ˆ | ¡ q|  |tˆ ƒd ¡ d S )N)s   spam
s   eggs
s   beans
c                     s*   t jdd} |  d ˆ ¡¡ |  d¡ | S )Núw+b©rÈ   r   r   )r   rQ   r{   rË   Úseek©r  ©Úlinesr   r   Ú	make_file„  s    
z3TestNamedTemporaryFile.test_iter.<locals>.make_filerP   )Ú	enumerater>   r:   )r   rG  rr   Úlr   rE  r   Ú	test_iter€  s
    z TestNamedTemporaryFile.test_iterc                 C   s(   t  ¡ }|  tj |j¡d|j ¡ d S )Nz$NamedTemporaryFile %s does not exist)r   rQ   rB   r8   r!   ÚexistsrE   r  r   r   r   Útest_creates_named  s    ÿz)TestNamedTemporaryFile.test_creates_namedc              	   C   sz   t  ¡ }z`t j|d}| d¡ W d   ƒ n1 s60    Y  |  tj |j¡d|j ¡ W t 	|¡ nt 	|¡ 0 d S )Nr¶   râ   z(NamedTemporaryFile %s exists after close)
r   rT   rQ   r{   rŠ   r8   r!   rK  rE   r÷   ©r   rF   r  r   r   r   Útest_del_on_close“  s    (ÿz(TestNamedTemporaryFile.test_del_on_closec              	   C   s’   t  ¡ }d }zbt j|dd}|j}| d¡ | ¡  |  tj 	|j¡d|j ¡ W |d urdt 
|¡ t |¡ n|d ur‚t 
|¡ t |¡ 0 d S )NF)rF   r8  râ   z)NamedTemporaryFile %s missing after close)r   rT   rQ   rE   r{   rz   rB   r8   r!   rK  rß   r÷   )r   rF   Útmpr  r   r   r   Útest_dis_del_on_closež  s     
ÿ
þ
z,TestNamedTemporaryFile.test_dis_del_on_closec                 C   s.   t  ¡ }| d¡ | ¡  | ¡  | ¡  d S ©Nó   abc
)r   rQ   r{   rz   r  r   r   r   Útest_multiple_close®  s
    
z*TestNamedTemporaryFile.test_multiple_closec                    sl   t  ¡ $‰ |  tj ˆ j¡¡ W d   ƒ n1 s20    Y  |  tj ˆ j¡¡ ‡ fdd„}|  t	|¡ d S )Nc                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rD  r   r   Ú
use_closed»  s    z?TestNamedTemporaryFile.test_context_manager.<locals>.use_closed)
r   rQ   rB   r8   r!   rK  rE   rŠ   r   r”   ©r   rT  r   rD  r   Útest_context_manager¶  s
    
2z+TestNamedTemporaryFile.test_context_managerc              	      s–   g ‰ t j‰‡ ‡fdd„}tjd|d\ tjdtd. |  ttj¡ |  t	ˆ ƒd¡ W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )Nc                    s   ˆ   | ¡ ˆ| ƒ d S r   ©r`   ©rÖ   ©ÚclosedZos_closer   r   rz   Ä  s    
z5TestNamedTemporaryFile.test_no_leak_fd.<locals>.closeúos.close©Zside_effectúio.openrP   )
r8   rz   r   Úpatchr”   r   r   rQ   r>   r:   ©r   rz   r   rY  r   Útest_no_leak_fdÀ  s    z&TestNamedTemporaryFile.test_no_leak_fdc                 C   sœ   t  ¡ }|  tj|¡ |  t¡ t jd|d W d   ƒ n1 sD0    Y  |  t¡ t jd|d W d   ƒ n1 s|0    Y  |  	t
 |¡g ¡ d S )Nr?  )rÈ   rF   é   )r   rT   Z
addCleanupr   rµ   r   r”   rQ   r   r>   r8   rª   rø   r   r   r   Útest_bad_modeÍ  s    ,,z$TestNamedTemporaryFile.test_bad_mode)Nr
   r
   T)r$   r%   r&   rá   rè   r@  rJ  rL  rN  rP  rS  rV  r`  rb  r   r   r   r   r;  [  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*d+„ ZdS )-ÚTestSpooledTemporaryFiler   Nr
   c                 C   s&   |d u rt  ¡ }t j||||d}|S )N)Úmax_sizerF   r   r/  )r   rX   r\   )r   rd  rF   rG   rH   rÎ   r   r   r   rá   Û  s    z"TestSpooledTemporaryFile.do_createc                 C   s4   |   ¡ }|  |j¡ | j dddd}|  |j¡ d S )Nr   r²   rç   )rd  rG   rH   )rá   rŠ   Ú_rolledr  r   r   r   rè   ã  s    z#TestSpooledTemporaryFile.test_basicc              	   C   sˆ   t  ¡ }znt jd|d}|  |j¡ | d¡ |  |j¡ |j}| ¡  |  t	|t
ƒo`tj |¡d| ¡ W t |¡ nt |¡ 0 d S )Né
   )rd  rF   s   blat blat blat blat blat z*SpooledTemporaryFile %s exists after close)r   rT   r\   rŠ   re  r{   rB   rE   rz   r<   r   r8   r!   rK  r÷   )r   rF   r  Úfilenamer   r   r   rN  ê  s    
ÿz*TestSpooledTemporaryFile.test_del_on_closec                 C   sL   | j dd}|  |j¡ tdƒD ]}| dd¡ | d¡ q |  |j¡ d S )Né   ©rd  é   r   ó   xxxxxxxxxxxxxxxxxxxx)rá   rŠ   re  ro   rC  r{   )r   r  rr   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 )Nrh  ri  rk  ó
   xxxxxxxxxxó   x)rá   rŠ   re  r{   rB   r  r   r   r   Útest_write_sequential  s    


z.TestSpooledTemporaryFile.test_write_sequentialc                 C   s@   |   ¡ }| d¡ | d¡}|  |d¡ | ¡ }|  |d¡ d S )N)rn  ó   yó   zr   s   xyz)rá   Ú
writelinesrC  r>   r~   )r   r  ÚposÚbufr   r   r   Útest_writelines  s    

z(TestSpooledTemporaryFile.test_writelinesc                 C   s<   | j dd}| d¡ |  |j¡ | d¡ |  |j¡ d S )Né#   ri  )rk  rm  s   xxxxxrn  )rá   rr  rŠ   re  r{   rB   r  r   r   r   Útest_writelines_sequential  s
    

z3TestSpooledTemporaryFile.test_writelines_sequentialc                 C   sV   | j dd}|  |j¡ | dd¡}|  |d¡ |  |j¡ | d¡ |  |j¡ d S )Nrh  ri  r   r   rn  )rá   rŠ   re  rC  r>   r{   rB   )r   r  rs  r   r   r   Útest_sparse   s    
z$TestSpooledTemporaryFile.test_sparsec                 C   s:   | j dd}|  |j¡ |  | ¡ dk¡ |  |j¡ d S )Nrh  ri  r   )rá   rŠ   re  rB   Úfilenor  r   r   r   Útest_fileno+  s    z$TestSpooledTemporaryFile.test_filenoc                 C   s:   t  ¡ }| d¡ |  |j¡ | ¡  | ¡  | ¡  d S rQ  )r   r\   r{   rŠ   re  rz   r  r   r   r   Ú#test_multiple_close_before_rollover2  s    
z<TestSpooledTemporaryFile.test_multiple_close_before_rolloverc                 C   s>   t jdd}| d¡ |  |j¡ | ¡  | ¡  | ¡  d S )NrP   ri  rR  )r   r\   r{   rB   re  rz   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 )Nrh  ri  s#   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas#   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   éF   sF   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)rá   r~   r{   rC  r>   )r   r  r~   r{   rC  r   r   r   Útest_bound_methodsD  s    
z+TestSpooledTemporaryFile.test_bound_methodsc                 C   s–  t jdd}| d¡ |  |j¡ |  |jd¡ |  |j¡ |  	t
¡ |j W d   ƒ n1 sb0    Y  |  	t
¡ |j W d   ƒ n1 s’0    Y  |  	t
¡ |j W d   ƒ n1 sÂ0    Y  | d¡ |  |j¡ |  |jd¡ |  |j¡ |  	t
¡ |j W d   ƒ n1 s$0    Y  |  	t
¡ |j W d   ƒ n1 sV0    Y  |  	t
¡ |j W d   ƒ n1 sˆ0    Y  d S )Nrf  ri  rm  rA  rn  zrb+)r   r\   r{   rŠ   re  r>   rÈ   r>  rE   r   r—   ÚnewlinesÚencodingÚerrorsrB   ÚassertIsNotNoner  r   r   r   Útest_propertiesR  s*    
$$$
&&z(TestSpooledTemporaryFile.test_propertiesc                 C   sH  t jdddd}| d¡ | d¡ |  | ¡ d¡ | d¡ | d¡ |  | ¡ d¡ |  |j¡ |  |jd¡ |  	|j
¡ |  |jtj¡ |  |jd¡ |  |jd	¡ | d
¡ | d¡ |  | ¡ d¡ | d¡ | d¡ |  | ¡ d¡ |  |j¡ |  |jd¡ |  |j
¡ |  |jtj¡ |  |jd¡ |  |jd	¡ d S )Núw+rf  úutf-8)rÈ   rd  r€  zabc
r   zdef
zabc
def
Ústrictzxyzzy
zabc
def
xyzzy
zfoobar
zabc
def
xyzzy
foobar
)r   r\   r{   rC  r>   r~   rŠ   re  rÈ   r>  rE   r  r8   Úlinesepr€  r  rB   r‚  r  r   r   r   Útest_text_modej  s6    ÿ







z'TestSpooledTemporaryFile.test_text_modec                 C   s  t jdddddd}| d¡ | d¡ |  | ¡ d¡ |  |j¡ |  |jd¡ |  	|j
¡ |  |j¡ |  |jd¡ |  |jd¡ | d	¡ | d
¡ | d¡ |  | ¡ d¡ |  |j¡ |  |jd¡ |  |j
¡ |  |j¡ |  |jd¡ |  |jd¡ d S )Nr„  rf  r
   r…  r*   )rÈ   rd  Únewliner€  r  u   Î›
r   u   ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
u(   ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎuB   Î›
ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ)r   r\   r{   rC  r>   r~   rŠ   re  rÈ   r>  rE   r‚  r  r€  r  rB   r  r   r   r   Útest_text_newline_and_encodingŠ  s2    þ





ÿz7TestSpooledTemporaryFile.test_text_newline_and_encodingc                    sl   t jdd(‰ |  ˆ j¡ |  ˆ j¡ W d   ƒ n1 s:0    Y  |  ˆ j¡ ‡ fdd„}|  t|¡ d S )NrP   ri  c                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rD  r   r   rT  ª  s    zQTestSpooledTemporaryFile.test_context_manager_before_rollover.<locals>.use_closed)r   r\   rŠ   re  rZ  rB   r   r”   rU  r   rD  r   Ú$test_context_manager_before_rollover¤  s    *z=TestSpooledTemporaryFile.test_context_manager_before_rolloverc                    sŠ   t jddF‰ |  ˆ j¡ ˆ  d¡ ˆ  ¡  |  ˆ j¡ |  ˆ j¡ W d   ƒ n1 sX0    Y  |  ˆ j¡ ‡ fdd„}|  t	|¡ d S )NrP   ri  rR  c                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rD  r   r   rT  ¸  s    zQTestSpooledTemporaryFile.test_context_manager_during_rollover.<locals>.use_closed)
r   r\   rŠ   re  r{   ÚflushrB   rZ  r   r”   rU  r   rD  r   Ú$test_context_manager_during_rollover¯  s    
*z=TestSpooledTemporaryFile.test_context_manager_during_rolloverc                    s‚   t jdd‰ ˆ  d¡ ˆ  ¡  |  ˆ j¡ ˆ  |  ˆ j¡ W d   ƒ n1 sP0    Y  |  ˆ j¡ ‡ fdd„}|  t	|¡ d S )NrP   ri  rR  c                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rD  r   r   rT  Æ  s    zPTestSpooledTemporaryFile.test_context_manager_after_rollover.<locals>.use_closed)
r   r\   r{   rŒ  rB   re  rŠ   rZ  r   r”   rU  r   rD  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 | ¡ ¡jd¡ d S )	Nrf  ri  s   abcdefg
r   r   é   s   abcdrt   )r   r\   r{   rC  ÚtruncaterŠ   re  r>   Ú_fileÚgetvaluerB   r8   Úfstatry  Úst_sizer  r   r   r   Ú!test_truncate_with_size_parameterË  s     





z:TestSpooledTemporaryFile.test_truncate_with_size_parameterc                 C   s   |   tjt tj¡ d S r   )r‹   r   r\   r   ÚtypesÚGenericAliasr   r   r   r   Útest_class_getitemà  s    ÿz+TestSpooledTemporaryFile.test_class_getitem)r   Nr
   r
   )r$   r%   r&   rá   rè   rN  rl  ro  ru  rw  rx  rz  r{  r|  r~  rƒ  rˆ  rŠ  r‹  r  rŽ  r•  r˜  r   r   r   r   rc  Ø  s(   
					 rc  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 r   )r   rR   r   r   r   r   rè   é  s    zTestTemporaryFile.test_basicc                 C   sR   t  ¡ }t j|d}| d¡ zt |¡ W n    | ¡  t |¡ ‚ Y n0 d S rõ   )r   rT   rR   r{   r8   r÷   rz   rM  r   r   r   Útest_has_no_nameî  s    

z"TestTemporaryFile.test_has_no_namec                 C   s.   t  ¡ }| d¡ | ¡  | ¡  | ¡  d S rQ  )r   rR   r{   rz   r  r   r   r   rS  þ  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                    sX   t j|i |¤Ž4}| | ¡ | d¡ ˆ  | | ¡ ¡ W d   ƒ n1 sJ0    Y  d S rˆ   )r   rR   r{   rC  r>   r~   )Úinputr¡   r¢   Úfileobjr   r   r   Ú	roundtrip	  s    

z;TestTemporaryFile.test_mode_and_encoding.<locals>.roundtrips   1234rA  zabdc
r„  u   Î›zutf-16)r€  zfoo
r
   )r‰  r   )r   r  r   r   r   Útest_mode_and_encoding  s
    

z(TestTemporaryFile.test_mode_and_encodingc              	      s–   g ‰ t j‰‡ ‡fdd„}tjd|d\ tjdtd. |  ttj¡ |  t	ˆ ƒd¡ W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )Nc                    s   ˆ   | ¡ ˆ| ƒ d S r   rW  rX  rY  r   r   rz     s    
z0TestTemporaryFile.test_no_leak_fd.<locals>.closer[  r\  r]  rP   )
r8   rz   r   r^  r”   r   r   rR   r>   r:   r_  r   rY  r   r`    s    z!TestTemporaryFile.test_no_leak_fdN)r$   r%   r&   rè   rš  rS  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S )ÚNulledModulesc                 G   s&   dd„ |D ƒ| _ dd„ | j D ƒ| _d S )Nc                 S   s   g | ]
}|j ‘qS r   )r_   )Ú.0Úmodr   r   r   Ú
<listcomp>&  r   z*NulledModules.__init__.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r   )Úcopy)r   r=  r   r   r   r¢  '  r   )ÚrefsÚcontents)r   Úmodulesr   r   r   r"   %  s    zNulledModules.__init__c                 C   s"   | j D ]}|D ]}d ||< qqd S r   )r¤  )r   r#  rc   r   r   r   r1   )  s    
zNulledModules.__enter__c                 G   s.   t | j| jƒD ]\}}| ¡  | |¡ qd S r   )Úzipr¤  r¥  ÚclearÚupdate)r   Úexc_infor#  r   r   r   r   r6   .  s    zNulledModules.__exit__N)r$   r%   r&   r"   r1   r6   r   r   r   r   rŸ  $  s   rŸ  c                   @   s–   e Zd Zd d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d„ Ze eedƒd¡dd„ ƒZdS )"ÚTestTemporaryDirectoryNr
   rP   c                 C   sH   |d u rt  ¡ }t j|||d}|  |j|||¡ |  |j|||¡ |S r5  )r   rX   r]   rL   rE   Ú
do_create2)r   rF   rG   rH   ÚrecurseÚdirsÚfilesrO  r   r   r   rá   6  s    z TestTemporaryDirectory.do_createc              	   C   s–   |rBt |ƒD ]4}tj |d| ¡}t |¡ |  ||d ||¡ qt |ƒD ]F}ttj |d| ¡dƒ}| d¡ W d   ƒ qJ1 s†0    Y  qJd S )Nzdir%drP   z
test%d.txtrÏ   s   Hello world!)ro   r8   r!   rË   Úmkdirr¬  r¤   r{   )r   r!   r­  r®  r¯  rr   rE   r  r   r   r   r¬  >  s    
z!TestTemporaryDirectory.do_create2c                 C   st   t  ¡ }W d   ƒ n1 s0    Y  |  t¡}t j|d W d   ƒ n1 sT0    Y  |  |jjtj¡ d S r3  )r   r]   r   r¬   r>   Ú	exceptionÚerrnoÚENOENT)r   rÊ   Úcmr   r   r   Útest_mkdtemp_failureI  s
    
*z+TestTemporaryDirectory.test_mkdtemp_failurec              	   C   st   t  ¡ }zZ| j|d}|  tj |j¡d|j ¡ | ¡  |  	tj |j¡d|j ¡ W t 
|¡ nt 
|¡ 0 d S )Nr¶   z$TemporaryDirectory %s does not existú*TemporaryDirectory %s exists after cleanup)r   rT   rá   rB   r8   r!   rK  rE   ÚcleanuprŠ   r÷   )r   rF   r#  r   r   r   Útest_explicit_cleanupS  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   )r­  Zfoor¶  z-Directory pointed to by a symlink was deletedz	test0.txtz>Contents of the directory pointed to by a symlink were deleted)rá   r8   ÚsymlinkrE   r!   rË   r·  rŠ   rK  rB   r>   rª   )r   Zd1Zd2r   r   r   Ú(test_cleanup_with_symlink_to_a_directory`  s    ÿÿÿz?TestTemporaryDirectory.test_cleanup_with_symlink_to_a_directoryc              	   C   sT   t  ¡ }z:| j|d}|j}~|  tj |¡d| ¡ W t |¡ nt |¡ 0 d S )Nr¶   ú*TemporaryDirectory %s exists after __del__)	r   rT   rá   rE   rŠ   r8   r!   rK  r÷   ©r   rF   r#  rE   r   r   r   Útest_del_on_collectionu  s    ÿz-TestTemporaryDirectory.test_del_on_collectionc                 C   sž   |   ¡ ‚}dD ]l}dj||d}t d|¡\}}}| ¡  ¡ }|  tj 	|¡d| ¡ | dd¡}|  
d|¡ |  d	|¡ qW d   ƒ n1 s0    Y  d S )
N)Úbuiltinsr8   Úshutilrÿ   r   r2   a½  if True:
                    import builtins
                    import os
                    import shutil
                    import sys
                    import tempfile
                    import warnings

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

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

                    {mod}.tmp = tmp

                    warnings.filterwarnings("always", category=ResourceWarning)
                    )rF   r¡  ú-cr¶  r…  Úbackslashreplaceú
Exception ú'ResourceWarning: Implicitly cleaning up©rá   Úformatr   Zassert_python_okr   ÚstriprŠ   r8   r!   rK  rq   r•   )r   rF   r¡  ÚcodeÚrcÚoutÚerrÚtmp_namer   r   r   Útest_del_on_shutdown‚  s    
íÿz+TestTemporaryDirectory.test_del_on_shutdownc                 C   s’   |   ¡ v}dj|d}t d|¡\}}}| ¡  ¡ }|  tj 	|¡d| ¡ | dd¡}|  
d|¡ |  d|¡ W d   ƒ n1 s„0    Y  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¶   rÀ  r¶  r…  rÁ  rÂ  rÃ  rÄ  )r   rF   rÇ  rÈ  rÉ  rÊ  rË  r   r   r   Útest_exit_on_shutdown¢  s    
ôÿz,TestTemporaryDirectory.test_exit_on_shutdownc              	   C   s¢   |   ¡ †}| j |dd}|j}tjdtfdd( tjdtd ~t ¡  W d   ƒ n1 s^0    Y  |  t	j
 |¡d| ¡ W d   ƒ n1 s”0    Y  d S )	Né   )rF   r­  Z
ImplicitlyF)ÚquietÚalways)r,   r»  )rá   rE   r   r/   ÚResourceWarningr2   r3   rö   rŠ   r8   r!   rK  r¼  r   r   r   Útest_warnings_on_cleanupº  s    
&ÿz/TestTemporaryDirectory.test_warnings_on_cleanupc                 C   s$   |   ¡ }| ¡  | ¡  | ¡  d S r   )rá   r·  r(  r   r   r   rS  È  s    z*TestTemporaryDirectory.test_multiple_closec                 C   sb   |   ¡ }|0}|  tj |¡¡ |  ||j¡ W d   ƒ n1 sB0    Y  |  tj |¡¡ d S r   )rá   rB   r8   r!   rK  r>   rE   rŠ   )r   r#  rE   r   r   r   rV  Ï  s
    ,z+TestTemporaryDirectory.test_context_managerc                 C   sä   t dƒD ]Ö}|dK }| jt|dƒd¨ | jdddd}|` tj|jdd	D ]6\}}}|D ]}t tj 	||¡|¡ q\t ||¡ qN| 
¡  W d   ƒ n1 s¢0    Y  |  tj |j¡¡ W d   ƒ q1 sÔ0    Y  qd S )
Né   rü   Z03orB  rÎ  ra  ©r­  r®  r¯  F©Útopdown)ro   ZsubTestrÅ  rá   r8   ÚwalkrE   rÃ   r!   rË   r·  rŠ   rK  )r   rÈ   r#  Úrootr®  r¯  rE   r   r   r   Ú
test_modes×  s    &z!TestTemporaryDirectory.test_modesÚchflagszrequires os.lchflagsc              	   C   s¨   t jt jB }| jdddd}|` tj|jddD ]6\}}}|D ]}t tj 	||¡|¡ q@t ||¡ q2| 
¡  W d   ƒ n1 s†0    Y  |  tj |j¡¡ d S )NrÎ  ra  rÔ  FrÕ  )r¾   ÚUF_IMMUTABLEÚUF_NOUNLINKrá   r8   r×  rE   rÚ  r!   rË   r·  rŠ   rK  )r   rØ   r#  rØ  r®  r¯  rE   r   r   r   Ú
test_flagså  s    &z!TestTemporaryDirectory.test_flags)Nr
   r
   rP   rP   rP   )rP   rP   rP   )r$   r%   r&   rá   r¬  rµ  r¸  r   Zskip_unless_symlinkrº  Zcpython_onlyr½  rÌ  rÍ  rÒ  rS  rV  rÙ  rƒ   r„   r…   r8   rÝ  r   r   r   r   r«  3  s    




 r«  Ú__main__)5r   r²  r«   r8   r   rÿ   rM   r2   Ú
contextlibr¾   r–  r<  rƒ   r   Útestr   Ztest.supportr   rÞ   rÝ   r  r…   r  r   Ú
startswithrp   ZTestCaser   r)   rO   re   r‡   rž   r®   Úcontextmanagerr·   r¼   r½   rÒ   r  r%  r-  r4  r9  r;  rc  rQ   rR   r™  rŸ  r«  r$   Úmainr   r   r   r   Ú<module>   sb   
23@*%
	  0 .?l>}  > A
