a
    òñ"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.21/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                       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_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®   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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   Ú	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„   Ú
has_spawnlr  Úhas_textmoder  rÈ   r  r  r   r   r   r   rÓ   v  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_template4  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_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&  E  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â   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¶   r1  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.  s  s   
	r.  c                   @   sp   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	e
 ejdkd¡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 r4  )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ú   r8  rƒ   r„   r8   rE   rJ  r  r  r   r   r   r   r5  ²  s   
	
r5  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   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 )Nr/  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   rN  r
   c                 C   s(   |   | j||¡}|  |j| j||¡ |S r   )rN  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 r7  r2  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&   r5   r7   rN  râ   ré   rs   r†   r   r   ri   r   rM  9  s   
rM  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!  r0  rK  )r   rX   rQ   rL   rE   )r   rF   rG   rH   rK  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 r7  r2  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   rY  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   rK  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   rX  r   r   Ú
use_closed×  s    z?TestNamedTemporaryFile.test_context_manager.<locals>.use_closed)
r   rQ   rB   r8   r!   r_  rE   rŠ   r   r”   ©r   rh  r   rX  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   rm  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 )NrS  )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é   rT  r^  r`  rb  rd  rg  rj  rt  rv  r   r   r   r   rO  w  s   


rO  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!  r0  )r   rX   r\   )r   rx  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è   )rx  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é
   )rx  rF   s   blat blat blat blat blat z*SpooledTemporaryFile %s exists after close)r   rT   r\   rŠ   ry  r{   rB   rE   rz   r<   r   r8   r!   r_  rø   )r   rF   r  Úfilenamer   r   r   rb    s    
ÿz*TestSpooledTemporaryFile.test_del_on_closec                 C   sL   | j dd}|  |j¡ tdƒD ]}| dd¡ | d¡ q |  |j¡ d S )Né   ©rx  é   r   ó   xxxxxxxxxxxxxxxxxxxx)râ   rŠ   ry  ro   rW  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Š   ry  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â   Ú
writelinesrW  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Š   ry  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Š   ry  rW  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Š   ry  rB   Úfilenor  r   r   r   Útest_filenoG  s    z$TestSpooledTemporaryFile.test_filenoc                 C   s:   t  ¡ }| d¡ |  |j¡ | ¡  | ¡  | ¡  d S re  )r   r\   r{   rŠ   ry  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}  rf  )r   r\   r{   rB   ry  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{   rW  r>   )r   r  r~   r{   rW  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 )Nrz  r}  r  rU  r‚  zrb+)r   r\   r{   rŠ   ry  r>   rÉ   rR  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+rz  úutf-8)rÉ   rx  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{   rW  r>   r~   rŠ   ry  rÉ   rR  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—  rz  r
   r˜  r*   )rÉ   rx  Únewliner;  r”  u   Î›
r   u   ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
u(   ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎuB   Î›
ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ)r   r\   r{   rW  r>   r~   rŠ   ry  rÉ   rR  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   rX  r   r   rh  Æ  s    zQTestSpooledTemporaryFile.test_context_manager_before_rollover.<locals>.use_closed)r   r\   rŠ   ry  rn  rB   r   r”   ri  r   rX  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}  rf  c                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rX  r   r   rh  Ô  s    zQTestSpooledTemporaryFile.test_context_manager_during_rollover.<locals>.use_closed)
r   r\   rŠ   ry  r{   ÚflushrB   rn  r   r”   ri  r   rX  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}  rf  c                      s(   ˆ  W d   ƒ n1 s0    Y  d S r   r   r   rX  r   r   rh  â  s    zPTestSpooledTemporaryFile.test_context_manager_after_rollover.<locals>.use_closed)
r   r\   r{   rŸ  rB   ry  rŠ   rn  r   r”   ri  r   rX  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 )	Nrz  r}  s   abcdefg
r   r   é   s   abcdrt   )r   r\   r{   rW  ÚtruncaterŠ   ry  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é   rb  r€  rƒ  r‰  r‹  rŒ  rŽ  r  r  r’  r–  r›  r  rž  r   r¡  r¨  r«  r   r   r   r   rw  ô  s(   
					 rw  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   ra  r   r   r   Útest_has_no_name
  s    

z"TestTemporaryFile.test_has_no_namec                 C   s.   t  ¡ }| d¡ | ¡  | ¡  | ¡  d S re  )r   rR   r{   rz   r  r   r   r   rg    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{   rW  r>   r~   )Úinputr¡   r¢   Úfileobjr   r   r   Ú	roundtrip%  s    

z;TestTemporaryFile.test_mode_and_encoding.<locals>.roundtrips   1234rU  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   rk  rl  rm  r   r   rz   4  s    
z0TestTemporaryFile.test_no_leak_fd.<locals>.closero  rp  rq  rP   )
r8   rz   r   rr  r”   r   r   rR   r>   r:   rs  r   rm  r   rt  0  s    z!TestTemporaryFile.test_no_leak_fdN)r$   r%   r&   ré   r­  rg  r±  rt  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³  rQ  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&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 )(ÚTestTemporaryDirectoryNr
   rP   c                 C   sH   |d u rt  ¡ }t j|||d}|  |j|||¡ |  |j|||¡ |S r6  )r   rX   r]   rL   rE   Ú
do_create2)r   rF   rG   rH   ÚrecurseÚdirsÚfilesrc  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 r4  )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Ð   rL  é   rý   Ú03orV  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Ñ  rL  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Ð   rL  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Ñ  rL  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   rA  rŠ   r8   r!   r_  rq   r•   )r   rF   r´  ÚcodeÚrcrH  Ú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÷  rH  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   rg  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   rj  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Ó  rV  rü  ru  ©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ü  ru  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   Zskip_unless_symlinkrÐ  rä  rƒ   r„   r…   r8   rë  Zcpython_onlyrî  rú  rû  r   rg  rj  r  ré  r	  r   r   r   r   r¾  O  s,   




0.
 r¾  Ú__main__)6r   rÅ  r«   r8   r   r   rM   r2   Ú
contextlibr¾   r©  rP  r=  rƒ   r   rÜ  r   Ztest.supportr   rß   rÞ   r  r…   r  r  rC  rp   ZTestCaser   r)   rO   re   r‡   rž   r®   Úcontextmanagerr·   r¼   r½   rÓ   r  r&  r.  r5  rM  rO  rw  rQ   rR   r¬  r²  r¾  r$   Úmainr   r   r   r   Ú<module>   sh   
23@*%
	  0 .? >}  >  5
