a
     RîhDí  ã                   @   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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 j0urúG d-d.„ d.eƒZ1G d/d0„ d0ƒZ2G d1d2„ d2eƒZ3e4d3kr*e 5¡  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   ú:/opt/python-3.9.24/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_none2   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__B   s    zLTestLowLevelInternals.test_infer_return_type_pathlike.<locals>.Path.__init__c                 S   s   | j S r   r    r   r   r   r   Ú
__fspath__E   s    zNTestLowLevelInternals.test_infer_return_type_pathlike.<locals>.Path.__fspath__N)Ú__name__Ú
__module__Ú__qualname__r"   r#   r   r   r   r   r   A   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   ÚsetUp[   s
    

ÿzBaseTestCase.setUpc                 C   s   | j  d d d ¡ d S r   )r0   Ú__exit__r   r   r   r   ÚtearDowna   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   Ú	nameCheckd   sN    
ÿ
ÿûÿÿ
ÿ
ÿ
ÿÿÿzBaseTestCase.nameCheckN)
r$   r%   r&   ÚreÚcompiler@   rA   r5   r7   rL   r   r   r   r   r)   V   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                       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 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&   Ú__doc__r5   rn   rs   ru   ÚunittestÚ
skipUnlessÚhasattrr8   r‚   Ú__classcell__r   r   ri   r   re   §   s   
ÿre   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   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   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‰‡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   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 r   )r   Ú_get_candidate_namesrŒ   rf   )r   Úobjr   r   r   Útest_retval9  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   r¯   6  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_dirF  s
    &r¸   c                     s   t  td‡ fdd„¡S )Nr°   c                      s   t ˆ ƒS r   )Úiterr   ©Únamesr   r   Ú<lambda>S  r   z'_mock_candidate_names.<locals>.<lambda>)r   r©   r   rº   r   rº   r   Ú_mock_candidate_namesP  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_OKÚskipTestr   ÚPermissionErrorÚ	make_tempr>   r«   )r   ZoldmodeÚmoder   r   r   Útest_read_only_directoryX  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_directoryf  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_directorym  s    z!TestBadTempdir.test_non_directoryN)r$   r%   r&   rË   rÏ   rÓ   r   r   r   r   r¾   V  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	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 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   Ú	mkstempedy  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„   r…   Ú
has_spawnlr  Úhas_textmoder  rÉ   r  r  r   r   r   r   rÔ   v  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 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_template4  s    
z&TestGetTempPrefix.test_usable_templateN)r$   r%   r&   rƒ   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   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_existsH  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_writableQ  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µ   Z  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_sensitived  s    

0ÿz"TestGetTempDir.test_case_sensitiveN)r$   r%   r&   rƒ   r+  r,  rµ   r.  r   r   r   r   r'  E  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 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ã   v  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·   r2  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  s
   
	r/  c                   @   st   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	dd„ Z
e ejdkd¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestMkdtempzTest mkdtemp().c                 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 ©Nr0  )	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 r5  )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_modeÚntzOnly on Windows.c              	   C   sÄ   |   ¡ }z$tjd|gdd ¡ }W t |¡ nt |¡ 0 | ¡ }tƒ }d}| ¡  ¡ D ]V}d }| 	|¡rz| 
|¡ ¡ }n|r–|d d…  ¡ r–| ¡ }|rX| | d¡d ¡ qX|  d ¡ |¡ d S )	Nz
icacls.exeZoem©ÚencodingFrP   ú:r   zBUILTIN\Users)rã   Ú
subprocessÚcheck_outputÚcasefoldr8   rù   ÚsetÚstripÚ
splitlinesÚ
startswithÚremoveprefixÚisspaceÚaddÚ	partitionrq   )r   rF   ÚoutZusersZ
found_userÚlineZaclr   r   r   Útest_mode_win32  s     
zTestMkdtemp.test_mode_win32c              	   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   Údir1Zdir2r   r   r   r  .  s    
ÿz2TestMkdtemp.test_collision_with_existing_directory)NNN)r$   r%   r&   rƒ   rÉ   rã   rê   rò   rö   rû   r9  r„   r…   r8   rE   rK  r  r  r   r   r   r   r6  ²  s   
	
r6  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 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   B  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 )Nr0  rü   )r   r+   rE   r8   rz   r¥   rÕ   )r   rF   rG   rH   r   r   r   r"   L  s    zTestMktemp.mktemped.__init__c                 C   s   |   | j¡ d S r   )rÝ   rE   r   r   r   r   rÞ   R  s    zTestMktemp.mktemped.__del__N)r$   r%   r&   r8   rá   rÝ   r   rß   rÕ   r"   rÞ   r   r   r   r   ÚmktempedH  s   rO  r
   c                 C   s(   |   | j||¡}|  |j| j||¡ |S r   )rO  rF   rL   rE   )r   rG   rH   rÐ   r   r   r   rã   U  s    zTestMktemp.do_createc                 C   s@   |   ¡  | j dd | j dd | j ddd | j ddd d S r8  r3  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   c  s
    zTestMktemp.test_many)r
   r
   )r$   r%   r&   rƒ   r5   r7   rO  rã   rê   rs   r‡   r   r   ri   r   rN  9  s   
rN  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 u rt  ¡ }t j||||d}|  |j|||¡ |S )N)rF   r"  r1  rL  )r   rX   rQ   rL   rE   )r   rF   rG   rH   rL  rÐ   r   r   r   rã   z  s    
ÿz TestNamedTemporaryFile.do_createc                 C   s@   |   ¡  | j dd | j dd | j ddd | j ddd d S r8  r3  r   r   r   r   rê   „  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_lookupŒ  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   r\  rr   Úlr   rZ  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!   r`  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   rL  rä   z)NamedTemporaryFile %s missing after close)r   rT   rQ   rE   r{   rz   rB   r8   r!   r`  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   rY  r   r   Ú
use_closed×  s    z?TestNamedTemporaryFile.test_context_manager.<locals>.use_closed)
r   rQ   rB   r8   r!   r`  rE   r‹   r   r•   ©r   ri  r   rY  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   rn  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 )NrT  )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ê   rU  r_  ra  rc  re  rh  rk  ru  rw  r   r   r   r   rP  w  s   


rP  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+d,„ ZdS ).ÚTestSpooledTemporaryFilezTest SpooledTemporaryFile().r   Nr
   c                 C   s&   |d u rt  ¡ }t j||||d}|S )N)Úmax_sizerF   r"  r1  )r   rX   r\   )r   ry  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é   )ry  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é
   )ry  rF   s   blat blat blat blat blat z*SpooledTemporaryFile %s exists after close)r   rT   r\   r‹   rz  r{   rB   rE   rz   r<   r   r8   r!   r`  rù   )r   rF   r  Úfilenamer   r   r   rc    s    
ÿz*TestSpooledTemporaryFile.test_del_on_closec                 C   sL   | j dd}|  |j¡ tdƒD ]}| dd¡ | d¡ q |  |j¡ d S )Né   ©ry  é   r   ó   xxxxxxxxxxxxxxxxxxxx)rã   r‹   rz  ro   rX  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 )Nr}  r~  r€  ó
   xxxxxxxxxxó   x)rã   r‹   rz  r{   rB   r  r   r   r   Útest_write_sequential  s    


z.TestSpooledTemporaryFile.test_write_sequentialc                 C   s@   |   ¡ }| d¡ | d¡}|  |d¡ | ¡ }|  |d¡ d S )N)rƒ  ó   yó   zr   s   xyz)rã   Ú
writelinesrX  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é#   r~  )r€  r‚  s   xxxxxrƒ  )rã   r‡  r‹   rz  r{   rB   r  r   r   r   Útest_writelines_sequential3  s
    

z3TestSpooledTemporaryFile.test_writelines_sequentialc                 C   sV   | j dd}|  |j¡ | dd¡}|  |d¡ |  |j¡ | d¡ |  |j¡ d S )Nr}  r~  r   r   rƒ  )rã   r‹   rz  rX  r>   r{   rB   )r   r  rˆ  r   r   r   Útest_sparse<  s    
z$TestSpooledTemporaryFile.test_sparsec                 C   s:   | j dd}|  |j¡ |  | ¡ dk¡ |  |j¡ d S )Nr}  r~  r   )rã   r‹   rz  rB   Úfilenor  r   r   r   Útest_filenoG  s    z$TestSpooledTemporaryFile.test_filenoc                 C   s:   t  ¡ }| d¡ |  |j¡ | ¡  | ¡  | ¡  d S rf  )r   r\   r{   r‹   rz  rz   r  r   r   r   Ú#test_multiple_close_before_rolloverN  s    
z<TestSpooledTemporaryFile.test_multiple_close_before_rolloverc                 C   s>   t jdd}| d¡ |  |j¡ | ¡  | ¡  | ¡  d S )NrP   r~  rg  )r   r\   r{   rB   rz  rz   r  r   r   r   Ú"test_multiple_close_after_rolloverW  s    
z;TestSpooledTemporaryFile.test_multiple_close_after_rolloverc                 C   sL   | j dd}|j}|j}|j}|dƒ |dƒ |ddƒ |  |dƒd¡ d S )Nr}  r~  s#   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas#   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   éF   sF   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)rã   r~   r{   rX  r>   )r   r  r~   r{   rX  r   r   r   Útest_bound_methods`  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 )Nr{  r~  r‚  rV  rƒ  zrb+)r   r\   r{   r‹   rz  r>   rÊ   rS  rE   r   r˜   Únewlinesr<  ÚerrorsrB   ÚassertIsNotNoner  r   r   r   Útest_propertiesn  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+r{  úutf-8)rÊ   ry  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{   rX  r>   r~   r‹   rz  rÊ   rS  rE   r”  r8   Úlinesepr<  r•  rB   r–  r  r   r   r   Útest_text_mode†  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˜  r{  r
   r™  r*   )rÊ   ry  Únewliner<  r•  u   Î›
r   u   ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
u(   ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎuB   Î›
ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ)r   r\   r{   rX  r>   r~   r‹   rz  rÊ   rS  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   r~  c                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rY  r   r   ri  Æ  s    zQTestSpooledTemporaryFile.test_context_manager_before_rollover.<locals>.use_closed)r   r\   r‹   rz  ro  rB   r   r•   rj  r   rY  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   r~  rg  c                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rY  r   r   ri  Ô  s    zQTestSpooledTemporaryFile.test_context_manager_during_rollover.<locals>.use_closed)
r   r\   r‹   rz  r{   ÚflushrB   ro  r   r•   rj  r   rY  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   r~  rg  c                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rY  r   r   ri  â  s    zPTestSpooledTemporaryFile.test_context_manager_after_rollover.<locals>.use_closed)
r   r\   r{   r   rB   rz  r‹   ro  r   r•   rj  r   rY  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 )	Nr{  r~  s   abcdefg
r   r   é   s   abcdrt   )r   r\   r{   rX  Útruncater‹   rz  r>   Ú_fileÚgetvaluerB   r8   ÚfstatrŽ  Ú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ã   rê   rc  r  r„  rŠ  rŒ  r  r  r  r‘  r“  r—  rœ  rž  rŸ  r¡  r¢  r©  r¬  r   r   r   r   rx  ô  s*   
					 rx  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 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   rb  r   r   r   Útest_has_no_name
  s    

z"TestTemporaryFile.test_has_no_namec                 C   s.   t  ¡ }| d¡ | ¡  | ¡  | ¡  d S rf  )r   rR   r{   rz   r  r   r   r   rh    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{   rX  r>   r~   )Úinputr¢   r£   Úfileobjr   r   r   Ú	roundtrip%  s    

z;TestTemporaryFile.test_mode_and_encoding.<locals>.roundtrips   1234rV  zabdc
r˜  u   Î›zutf-16r;  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   rl  rm  rn  r   r   rz   4  s    
z0TestTemporaryFile.test_no_leak_fd.<locals>.closerp  rq  rr  rP   )
r8   rz   r   rs  r•   r   r   rR   r>   r:   rt  r   rn  r   ru  0  s    z!TestTemporaryFile.test_no_leak_fdN)	r$   r%   r&   rƒ   rê   r®  rh  r²  ru  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>B  r   z*NulledModules.__init__.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r   )Úcopy)r´  rR  r   r   r   r¶  C  r   )ÚrefsÚcontents)r   Úmodulesr   r   r   r"   A  s    zNulledModules.__init__c                 C   s"   | j D ]}|D ]}d ||< qqd S r   )r¸  )r   r%  rc   r   r   r   r1   E  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   J  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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e eedƒd¡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d#d$„ Ze eedƒd¡d%d&„ ƒZdS ))ÚTestTemporaryDirectoryzTest TemporaryDirectory().Nr
   rP   c                 C   sH   |d u rt  ¡ }t j|||d}|  |j|||¡ |  |j|||¡ |S r7  )r   rX   r]   rL   rE   Ú
do_create2)r   rF   rG   rH   ÚrecurseÚdirsÚfilesrd  r   r   r   rã   R  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À  Z  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 r5  )r   r]   r   r­   r>   Ú	exceptionÚerrnoÚENOENT)r   rÌ   Úcmr   r   r   Útest_mkdtemp_failuree  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!   r`  rE   Úcleanupr‹   rù   )r   rF   r%  r   r   r   Útest_explicit_cleanupo  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‹   r`  rB   r>   r«   )r   Úd1Úd2r   r   r   Ú(test_cleanup_with_symlink_to_a_directory|  s    ÿÿÿz?TestTemporaryDirectory.test_cleanup_with_symlink_to_a_directoryc                    s  ˆj ddð}tj |d¡}t|dƒ ¡  tj |d¡}t |¡ tdƒD ] ‰ ˆ dK ‰ ˆjt	ˆ dƒd	n ‡ ‡fd
d„}ˆ d¡ |ddd W d   ƒ n1 sª0    Y  ˆ d¡ |ddd W d   ƒ n1 sà0    Y  ˆ d¡V t 
|ˆ ¡ t |¡j}||dd t |¡j}ˆ ||d||f ¡ W d   ƒ n1 sR0    Y  ˆ d¡V t 
|ˆ ¡ t |¡j}||dd t |¡j}ˆ ||d||f ¡ W d   ƒ n1 sÄ0    Y  W d   ƒ qL1 sä0    Y  qLW d   ƒ n1 s0    Y  d S )Nr   rÍ  Úfile1rÑ   rM  é   rþ   Ú03orW  c                    s¦   ˆj dd}tj |jd¡}tj| ||d ztj|ˆ dd W n tyR   Y n0 zt |ˆ ¡ W n tyv   Y n0 t |jˆ ¡ | 	¡  ˆ 
tj |j¡¡ d S ©Nr   rÍ  rÎ  ©Útarget_is_directoryF)Úfollow_symlinks)rã   r8   r!   rÍ   rE   rÎ  rÄ   ÚNotImplementedErrorr­   rË  r‹   r`  ©Útargetr×  rÏ  rÎ  ©rÊ   r   r   r   Útestœ  s     ÿzDTestTemporaryDirectory.test_cleanup_with_symlink_modes.<locals>.testúnonexisting fileÚnonexistingFrÖ  únonexisting dirTúexisting filez%03o != %03oúexisting dir)rã   r8   r!   rÍ   r¥   rz   rÄ  ro   ÚsubTestÚformatrÄ   r¿   rÀ   r>   )r   rÐ  rÒ  rM  rÝ  Zold_modeZnew_moder   rÜ  r   Útest_cleanup_with_symlink_modes‘  s:    
**
ÿ$
ÿz6TestTemporaryDirectory.test_cleanup_with_symlink_modesÚchflagszrequires os.chflagsc              	      sÈ  t jt jB ‰ ˆ ˆ ¡ ˆjddŽ}tj |d¡}t|dƒ 	¡  tj |d¡}t 
|¡ ‡ ‡fdd„}ˆ d¡ |d	d
d W d   ƒ n1 s”0    Y  ˆ d¡ |d	dd W d   ƒ n1 sÊ0    Y  ˆ d¡L t |ˆ ¡ t  |¡j}||d
d t  |¡j}ˆ ||¡ W d   ƒ n1 s20    Y  ˆ d¡L t |ˆ ¡ t  |¡j}||dd t  |¡j}ˆ ||¡ W d   ƒ n1 sš0    Y  W d   ƒ n1 sº0    Y  d S )Nr   rÍ  rÒ  rÑ   rM  c                    s¦   ˆj dd}tj |jd¡}tj| ||d ztj|ˆ dd W n tyR   Y n0 zt |ˆ ¡ W n tyv   Y n0 t |jˆ ¡ | 	¡  ˆ 
tj |j¡¡ d S rÕ  )rã   r8   r!   rÍ   rE   rÎ  ræ  rÙ  r­   rË  r‹   r`  rÚ  ©rÚ   r   r   r   rÝ  Î  s     ÿzDTestTemporaryDirectory.test_cleanup_with_symlink_flags.<locals>.testrÞ  rß  FrÖ  rà  Trá  râ  )r¿   ÚUF_IMMUTABLEÚUF_NOUNLINKÚcheck_flagsrã   r8   r!   rÍ   r¥   rz   rÄ  rã  ræ  Úst_flagsr>   )r   rÐ  rÒ  rM  rÝ  Z	old_flagsZ	new_flagsr   rç  r   Útest_cleanup_with_symlink_flagsÂ  s0    

**,z6TestTemporaryDirectory.test_cleanup_with_symlink_flagsc              	   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!   r`  rù   ©r   rF   r%  rE   r   r   r   Útest_del_on_collectionò  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ã   rä  r   Zassert_python_okr   rB  r‹   r8   r!   r`  rq   r–   )r   rF   rµ  ÚcodeÚrcrI  Ú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ø  rI  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!   r`  rî  r   r   r   Útest_warnings_on_cleanup7  s    
&ÿz/TestTemporaryDirectory.test_warnings_on_cleanupc                 C   s$   |   ¡ }| ¡  | ¡  | ¡  d S r   )rã   rË  r*  r   r   r   rh  E  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!   r`  r>   rE   r‹   )r   r%  rE   r   r   r   rk  L  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 )
NrÓ  rþ   rÔ  rW  rý  rv  ©rÁ  rÂ  rÃ  F©Útopdown)ro   rã  rä  rã   r8   ÚwalkrE   rÄ   r!   rÍ   rË  r‹   r`  )r   rÊ   r%  ÚrootrÂ  rÃ  rE   r   r   r   Ú
test_modesT  s    &z!TestTemporaryDirectory.test_modesc              
   C   sŽ   t j}zvt|dƒ ¡  zt ||¡ W n< tyb } z$|  d|d›d|› ¡ W Y d }~nd }~0 0 t |d¡ W t  |¡ nt  |¡ 0 d S )NÚwz chflags() doesn't support flags z#bz: r   )	r   ZTESTFNr¥   rz   r8   ræ  r™   rÇ   rá   )r   rÚ   r|  Úexcr   r   r   rê  b  s    ÿÿz"TestTemporaryDirectory.check_flagsc              	   C   s²   t jt jB }|  |¡ | jdddd}|` tj|jddD ]6\}}}|D ]}t tj	 
||¡|¡ qJt ||¡ q<| ¡  W d   ƒ n1 s0    Y  |  tj	 |j¡¡ d S )Nrý  rv  r  Fr  )r¿   rè  ré  rê  rã   r8   r  rE   ræ  r!   rÍ   rË  r‹   r`  )r   rÚ   r%  r  rÂ  rÃ  rE   r   r   r   Ú
test_flagsr  s    
&z!TestTemporaryDirectory.test_flags)Nr
   r
   rP   rP   rP   )rP   rP   rP   )r$   r%   r&   rƒ   rã   rÀ  rÉ  rÌ  r   Zskip_unless_symlinkrÑ  rå  r„   r…   r†   r8   rì  Zcpython_onlyrï  rû  rü  r  rh  rk  r  rê  r
  r   r   r   r   r¿  O  s.   




0.
 r¿  Ú__main__)6r   rÆ  r¬   r8   r   r  rM   r2   Ú
contextlibr¿   rª  rQ  r>  r„   r   rÝ  r   Ztest.supportr   rà   rß   r  r†   r  r  rD  rp   ZTestCaser   r)   rO   re   rˆ   rŸ   r¯   Úcontextmanagerr¸   r½   r¾   rÔ   r  r'  r/  r6  rN  rP  rx  rQ   rR   r­  r³  r¿  r$   Úmainr   r   r   r   Ú<module>   sh   
23@*%
	  0 .? >}  >  5
