o
    ±ó®gFì  ã                   @   sB  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 d dlmZ d dlmZ e je jkZeedƒZej d¡rfd	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 j0e j1urG d/d0„ d0eƒZ2G d1d2„ d2ƒZ3G d3d4„ d4eƒZ4e5d5kre 6¡  dS dS )6é    N)Úmock)Úsupport)Ú	os_helper)Úscript_helper)Úwarnings_helperÚspawnlZopenbsdé0   éd   c                   @   s,   e Z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   úH/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/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 s*w   Y  |  t¡ t dd¡ W d   ƒ d S 1 sFw   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 sIw   Y  |  t¡ t dd d¡ W d   ƒ d S 1 sfw   Y  d S r   r   r   r   r   r   Ú)test_infer_return_type_multiples_and_none3   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_pathlibN)Ú__name__Ú
__module__Ú__qualname__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   ÚsetUpI   s
   


ÿzBaseTestCase.setUpc                 C   s   | j  d d d ¡ d S ©N)r+   Ú__exit__r   r   r   r   ÚtearDownO   s   zBaseTestCase.tearDownc           
      C   s†  t j |¡\}}|d t|ƒ… }|t|ƒt|ƒ d … }|d ur7|  t|ƒt|ƒtu s1t|t jƒr3tnt	d¡ |d urL|  t|ƒt|ƒtu rHtnt	d¡ |d ura|  t|ƒt|ƒtu r]tnt	d¡ |||fdkrq|  t|ƒtd¡ |  
t j |¡t j |¡d||f ¡ |  
||d||f ¡ |  
||d||f ¡ |t|ƒt|ƒt|ƒ … }t|tƒr°| jn| j}	|  |	 |¡d||	jf ¡ d S )Nzunexpected return type©NNNzdefault return type must be strzfile %r not in directory %rzfile %r does not begin with %rzfile %r does not end with %rz$random characters %r do not match %r)ÚosÚpathÚsplitÚlenr   Útyper   Ú
isinstanceÚPathLiker   ÚassertEqualÚabspathÚ	str_checkÚb_checkÚ
assertTrueÚmatchÚpattern)
r   ÚnameÚdirÚpreÚsufÚndirÚnbaseZnpreZnsufÚcheckr   r   r   Ú	nameCheckR   sN   
ÿ
ÿûÿÿ
ÿ
ÿ
ÿÿÿzBaseTestCase.nameCheckN)
r!   r"   r#   ÚreÚcompiler>   r?   r0   r3   rJ   r   r   r   r   r$   D   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r)||vr)| |¡ q|  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__Úappendr@   r8   )r   ÚdictÚexpectedZunexpÚkeyr   r   r   Útest_exportsx   s0   ò
€ÿzTestExports.test_exportsN)r!   r"   r#   rb   r   r   r   r   rM   w   s    rM   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                    ó   t  ¡ | _tƒ  ¡  d S r1   )r   Ú_RandomNameSequenceÚrÚsuperr0   r   ©Ú	__class__r   r   r0   ˜   ó   
zTestRandomNameSequence.setUpc                 C   s   t | jƒ}|  |ddd¡ d S ©Nr   )Únextrf   rJ   )r   Úsr   r   r   Útest_get_eight_char_strœ   s   
z.TestRandomNameSequence.test_get_eight_char_strc                 C   sH   i }| j }ttƒD ]}t|ƒ}|  |ddd¡ |  ||¡ d||< q	d S )Nr   rN   )rf   ÚrangeÚ
TEST_FILESrl   rJ   ÚassertNotIn)r   r_   rf   Úirm   r   r   r   Ú	test_many¡   s   
üz TestRandomNameSequence.test_manyc                 C   s.   d}| j }|D ]}|d7 }|dkr d S qd S )Nr   rN   é   )rf   )r   rr   rf   rm   r   r   r   Úsupports_iter¬   s   ÿþz$TestRandomNameSequence.supports_iterÚforkz!os.fork is required for this testc              
   C   sÖ   t  ¡ \}}d }zFt  ¡ }|s*t  |¡ t  |t| jƒ d¡¡ t  |¡ t  d¡ t| jƒ}t  	|t
|ƒ¡ d¡}W |rDtj|dd t  |¡ t  |¡ n|rXtj|dd t  |¡ t  |¡ w |  ||¡ d S )NÚasciir   )Úexitcode)r5   Úpiperv   ÚcloseÚwriterl   rf   ÚencodeÚ_exitÚreadr8   Ú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__r0   rn   rs   ru   ÚunittestÚ
skipUnlessÚhasattrr5   r‚   Ú__classcell__r   r   rh   r   rc   •   s    
ÿrc   c                   @   ó    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ÚassertFalser8   ÚassertIsInstancer   )r   ÚcandÚcr   r   r   Útest_nonempty_listØ   s
   ÿz+TestCandidateTempdirList.test_nonempty_listc              
   C   s¼   t  ¡ P}dD ]}t |¡}|stj |¡||< qt ¡ }dD ]}t |¡}|s*t‚|  	||¡ qzt 
¡ }W n ttfyE   tj}Y nw |  	||¡ W d   ƒ d S 1 sWw   Y  d S )N)ÚTMPDIRÚTEMPÚTMP)r   ÚEnvironmentVarGuardr5   Úgetenvr6   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dd„}t t d|¡’ t  ¡  |  t ˆ¡g ¡ dd„ ‰t tdˆ¡* |  	t
¡ t  ¡  W d   ƒ n1 s@w   Y  |  t ˆ¡g ¡ W d   ƒ n1 sXw   Y  ‡ ‡fdd„}t td|¡*‰ |  	t
¡ t  ¡  W d   ƒ n1 s€w   Y  |  t ˆ¡g ¡ W d   ƒ n1 s˜w   Y  W d   ƒ n1 s§w   Y  W d   ƒ d S W d   ƒ d S 1 s¿w   Y  d S )	Nc                      s   ˆ gS r1   r   r   )Úour_temp_directoryr   r   Úour_candidate_list  ó   zKTestGetDefaultTempdir.test_no_files_left_behind.<locals>.our_candidate_listr‹   c                  _   s   t ƒ ‚r1   )rš   )ÚargsÚkwargsr   r   r   Úraise_OSError  r£   zFTestGetDefaultTempdir.test_no_files_left_behind.<locals>.raise_OSErrorÚopenc                     s   ˆ | i |¤Ž}ˆ|_ |S r1   )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<   r5   ÚlistdirÚior   ÚFileNotFoundError)r   r¢   rª   r   )r©   r¡   r¦   r   Útest_no_files_left_behind  s4   
ÿ
ÿü
ÿü€ìû"ûz/TestGetDefaultTempdir.test_no_files_left_behindN)r!   r"   r#   rƒ   r°   r   r   r   r   r    ÿ   s    r    c                   @   rˆ   )ÚTestGetCandidateNamesz0Test the internal function _get_candidate_names.c                 C   s   t  ¡ }|  |t j¡ d S r1   )r   Ú_get_candidate_namesr   re   )r   Úobjr   r   r   Útest_retval'  s   z!TestGetCandidateNames.test_retvalc                 C   s"   t  ¡ }t  ¡ }|  ||u ¡ d S r1   )r   r²   r@   )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±   $  s    r±   c               	   c   sl    t  ¡ } z*t t d| ¡ d V  W d   ƒ n1 sw   Y  W t | ¡ d S W t | ¡ d S t | ¡ w )NrX   )r   rR   r   r«   r   Úrmtree©rD   r   r   r   Ú_inside_empty_temp_dir4  s   €ÿýrº   c                     s   t  td‡ fdd„¡S )Nr²   c                      s   t ˆ ƒS r1   )Úiterr   ©Únamesr   r   Ú<lambda>A  s    z'_mock_candidate_names.<locals>.<lambda>)r   r«   r   r¼   r   r¼   r   Ú_mock_candidate_names>  s   
þr¿   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestBadTempdirc                 C   sè   t ƒ g t tj¡j }}|tjtjB tjB  M }t 	tj|¡ z9t 
tjtj¡r.|  d¡ |  t¡ |  ¡  W d   ƒ n1 sBw   Y  |  t tj¡g ¡ W t 	tj|¡ nt 	tj|¡ w W d   ƒ d S 1 smw   Y  d S )Nz!can't set the directory read-only)rº   r5   Ústatr   rX   Úst_modeÚS_IWUSRÚS_IWGRPÚS_IWOTHÚchmodÚaccessÚW_OKZskipTestr   ÚPermissionErrorÚ	make_tempr<   r­   )r   ZoldmodeÚmoder   r   r   Útest_read_only_directoryF  s   

ÿ""õz'TestBadTempdir.test_read_only_directoryc              
   C   s¬   t ƒ I tj tjd¡}t td|¡! |  t	¡ |  
¡  W d   ƒ n1 s(w   Y  W d   ƒ n1 s7w   Y  W d   ƒ d S W d   ƒ d S 1 sOw   Y  d S )NÚnonexistentrX   )rº   r5   r6   Újoinr   rX   r   r«   r   r¯   rË   ©r   rX   r   r   r   Útest_nonexisting_directoryT  s   
ÿ€ÿþ"þz)TestBadTempdir.test_nonexisting_directoryc              
   C   s¾   t ƒ R tj tjd¡}t|dƒ ¡  t 	td|¡# |  
ttf¡ |  ¡  W d   ƒ n1 s1w   Y  W d   ƒ n1 s@w   Y  W d   ƒ d S W d   ƒ d S 1 sXw   Y  d S )NÚfileÚwbrX   )rº   r5   r6   rÏ   r   rX   r§   rz   r   r«   r   ÚNotADirectoryErrorr¯   rË   rÐ   r   r   r   Útest_non_directory[  s   
ÿ€ÿý"ýz!TestBadTempdir.test_non_directoryN)r!   r"   r#   rÍ   rÑ   rÕ   r   r   r   r   rÁ   D  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 r1   )Ú_bflagsÚ_tflagsr   r   Ú_mkstemp_innerÚfdrC   )r   rD   rE   rF   ÚbinÚflagsÚoutput_typer   r   r   Ú__init__m  s   z#TestMkstempInner.mkstemped.__init__c                 C   s   t  | j|¡ d S r1   )r5   r{   rÚ   )r   r   r   r   r   r{   t  s   z TestMkstempInner.mkstemped.writec                 C   s   |   | j¡ |  | j¡ d S r1   )Ú_closerÚ   Ú_unlinkrC   r   r   r   r   Ú__del__w  s   z"TestMkstempInner.mkstemped.__del__N)r!   r"   r#   r   Ú_bin_openflagsr×   Ú_text_openflagsrØ   r5   rz   rß   Úunlinkrà   rÞ   r{   rá   r   r   r   r   Ú	mkstempedg  s    rå   NrN   c                 C   sr   t  |||¡}|d u r|tu rt  ¡ }nt  ¡ }|d u r|ƒ }|d u r&|ƒ }|  ||||¡}|  |j|||¡ |S r1   )r   r   r   rV   rW   rå   rJ   rC   )r   rD   rE   rF   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µ   ©rE   r¶   ©rF   ©rE   rF   Úaaú.txt)ræ   r{   r   r   r   r   Ú
test_basic‹  ó
   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 sRw   Y  |  t¡ | j|d
d d¡ W d   ƒ n1 sqw   Y  |  t¡ | j|dd
d d¡ W d   ƒ d S 1 s’w   Y  d S )Nr   ©rD   rF   rç   ó   a©rD   rE   ó   b©rD   rE   rF   ó   aaó   .txtr   )r   rW   ræ   r{   r   r   )r   Zdir_br   r   r   Útest_basic_with_bytes_names“  s   ÿÿ"ÿz,TestMkstempInner.test_basic_with_bytes_namesc                 C   ó*   t ttƒƒ}|D ]
}| jdd||< qd S ©Nrë   rè   ©Úlistro   rp   ræ   ©r   Zextantrr   r   r   r   Útest_basic_many¤  ó   ÿz TestMkstempInner.test_basic_manyc              	   C   sP   t  ¡ }z| j|d d¡ | jt |¡d d¡ W t |¡ d S t |¡ w ©Nr¹   rç   )r   rR   ræ   r{   r   r   r5   Úrmdir©r   rD   r   r   r   Útest_choose_directoryª  ó
   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_IMODEr5   rC   rÃ   ÚsysÚplatformr<   )r   rÒ   rÌ   r`   Ú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y-   t	j
d }Y nw tj tj tj |¡¡d¡}t	jdkrLd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<   r5   Úget_inheritablerÚ   Ú__file__Ú	NameErrorr  Úargvr6   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{   r5   Ú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Ù   rV   rT   râ   r   r   r   r   r   rË   ñ  s   
üzTestMkstempInner.make_tempc              	   C   s´   t ƒ M tdddƒ. |  ¡ \}}t |¡ |  | d¡¡ |  ¡ \}}t |¡ |  | d¡¡ W d   ƒ n1 s;w   Y  W d   ƒ d S W d   ƒ d S 1 sSw   Y  d S ©NÚaaaÚbbb)rº   r¿   rË   r5   rz   r@   Úendswith)r   Úfd1Zname1Úfd2Zname2r   r   r   Ú!test_collision_with_existing_fileø  s   
ÿ

Pøz2TestMkstempInner.test_collision_with_existing_filec              	   C   s¦   t ƒ F tdddƒ' t ¡ }|  | d¡¡ |  ¡ \}}t |¡ |  | d¡¡ W d   ƒ n1 s4w   Y  W d   ƒ d S W d   ƒ d S 1 sLw   Y  d S r  )	rº   r¿   r   rR   r@   r  rË   r5   rz   )r   rD   rÚ   rC   r   r   r   Ú&test_collision_with_existing_directory  s   
ÿ
Pùz7TestMkstempInner.test_collision_with_existing_directory)NNNrN   )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Ö   d  s     
	


%

rÖ   c                   @   rˆ   )ÚTestGetTempPrefixzTest gettempprefix().c                 C   sL   t  ¡ }|  |t¡ |  t|ƒd¡ t  ¡ }|  |t¡ |  t|ƒd¡ d S rŠ   )r   rT   r   r   ZassertGreaterr8   rU   r   )r   ÚpZpbr   r   r   Útest_sane_template  s   z$TestGetTempPrefix.test_sane_templatec              	   C   sl   t  ¡ d }t jdd}z#tj ||¡}t |tjtjB ¡}t 	|¡ t 
|¡ W t |¡ d S t |¡ w )Nz
xxxxxx.xxxr   ©Úprefix)r   rT   rR   r5   r6   rÏ   r§   ÚO_RDWRÚO_CREATrz   rä   rÿ   )r   r'  ÚdrÚ   r   r   r   Útest_usable_template!  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   rV   rW   r@   r5   r6   Úisabsr›   Úisdir©r   r-  r   r   r   Útest_directory_exists5  s   ÿÿýz$TestGetTempDir.test_directory_existsc                 C   s8   t  ¡ }| d¡ W d   ƒ d S 1 sw   Y  d S )Nrç   )r   rO   r{   )r   rÒ   r   r   r   Útest_directory_writable>  s   
"ÿz&TestGetTempDir.test_directory_writablec                 C   sP   t  ¡ }t  ¡ }t  ¡ }|  ||u ¡ |  t|ƒt|ƒ¡ |  |t |¡¡ d S r1   )	r   rV   rW   r@   r€   r9   r<   r5   Úfsdecode)r   rµ   r¶   r   r   r   r   r·   G  s   zTestGetTempDir.test_same_thingc              	   C   s˜   t  d¡}t jd }t _z6t ¡ }||d< |  t  ¡ |¡ W d   ƒ n1 s(w   Y  W |t _t |¡ d S W |t _t |¡ d S |t _t |¡ w )Nz-Tempr‘   )r   rR   rX   r   r”   r<   rV   rÿ   )r   Zcase_sensitive_tempdirZ_tempdirrœ   r   r   r   Útest_case_sensitiveQ  s   

ýúÿz"TestGetTempDir.test_case_sensitiveN)r!   r"   r#   rƒ   r3  r4  r·   r6  r   r   r   r   r/  2  s    		
r/  c                   @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestMkstempzTest mkstemp().Nc           
   	   C   sÔ   t  |||¡}|d u r|tu rt  ¡ }nt  ¡ }|d u r|ƒ }|d u r&|ƒ }t j|||d\}}tj |¡\}}tj 	|¡}	|  
|	|d|	|f ¡ z|  ||||¡ W t |¡ t |¡ d S t |¡ t |¡ w )N©rD   r*  Úsuffixz+Directory '%s' incorrectly returned as '%s')r   r   r   rV   rW   rQ   r5   r6   r7   r=   r<   rJ   rz   rä   )
r   rD   rE   rF   rÝ   rÚ   rC   rG   rH   Zadirr   r   r   ræ   c  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í   z  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 sGw   Y  |  t¡ | jd	ddd W d   ƒ n1 sdw   Y  |  t¡ | jd	ddd W d   ƒ d S 1 s‚w   Y  d S )Nr   rï   rð   rñ   rò   ró   rô   rõ   ó   .r¹   r:  rë   rì   )r   rW   ræ   r   r   r2  r   r   r   rö   ƒ  s    ÿÿ"ÿz'TestMkstemp.test_basic_with_bytes_namesc              	   C   sD   t  ¡ }z| j|d | jt |¡d W t |¡ d S t |¡ w ©Nr¹   )r   rR   ræ   r   r   r5   rÿ   r   r   r   r   r  •  s
   z!TestMkstemp.test_choose_directoryc                 C   sV  t j}|  t jttd ƒf¡ z˜t  ¡ \}}t |¡ t |¡ |  |t¡ t  	¡ t _|  t jt
¡ |  t  ¡ t¡ |  t  	¡ t
¡ t  ¡ \}}t |¡ t |¡ |  |t
¡ t jdd\}}t |¡ t |¡ |  |t¡ t jdd\}}t |¡ t |¡ |  |t¡ t jt  ¡ d\}}t |¡ t |¡ |  |t¡ W |t _d S |t _w )Nrì   ©r9  z
test-temp-r)  r¹   )r   rX   r   r   r9   rQ   r5   rz   rä   rW   r   rV   )r   Úorig_tempdirrÚ   r6   r   r   r   Ú.test_for_tempdir_is_bytes_issue40701_api_wartsž  s8   










z:TestMkstemp.test_for_tempdir_is_bytes_issue40701_api_wartsr4   )	r!   r"   r#   rƒ   ræ   rí   rö   r  r@  r   r   r   r   r7  `  s    
		r7  c                   @   sb   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
dd„ Zdd„ Zdd„ ZdS )ÚTestMkdtempzTest mkdtemp().c                 C   s   t  ¡ S r1   )r   rR   r   r   r   r   rË   Á  s   zTestMkdtemp.make_tempNc                 C   s†   t  |||¡}|d u r|tu rt  ¡ }nt  ¡ }|d u r|ƒ }|d u r&|ƒ }t j|||d}z|  ||||¡ |W S    t |¡ ‚ )Nr8  )	r   r   r   rV   rW   rR   rJ   r5   rÿ   )r   rD   rE   rF   rÝ   rC   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ì   )r5   rÿ   ræ   r   r   r   r   rí   Ø  rî   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 sRw   Y  |  t¡ t | j|dd
d¡ W d   ƒ n1 srw   Y  |  t¡ t | jdddd¡ W d   ƒ d S 1 s“w   Y  d S )Nr¹   rð   rñ   rò   rï   ró   rô   rõ   rë   rì   r   )r   rW   r5   rÿ   ræ   r   r   r2  r   r   r   rö   à  s   ÿÿ"ÿz'TestMkdtemp.test_basic_with_bytes_namesc              
   C   sl   t ttƒƒ}z|D ]
}| jdd||< q	W |D ]}t|tƒr#t |¡ qd S |D ]}t|tƒr4t |¡ q(w rø   )rú   ro   rp   ræ   r:   r   r5   rÿ   rû   r   r   r   rü   ï  s   ÿ

€þ

€þzTestMkdtemp.test_basic_manyc              	   C   sP   t  ¡ }zt | j|d¡ t | jt |¡d¡ W t |¡ d S t |¡ w r=  )r   rR   r5   rÿ   ræ   r   r   r   r   r   r   r  ú  r  z!TestMkdtemp.test_choose_directoryc              	   C   sj   |   ¡ }z*t t |¡j¡}|dM }d}tjdkr!|d? }|d }|  ||¡ W t |¡ d S t |¡ w )Niÿ  iÀ  r  r  r  )	ræ   rÂ   r  r5   rÃ   r  r	  r<   rÿ   )r   rD   rÌ   r`   r
  r   r   r   Ú	test_mode  s   
zTestMkdtemp.test_modec              	   C   s¦   t ƒ F tdddƒ' tjdd}| ¡  |  |j d¡¡ t ¡ }|  | d¡¡ W d   ƒ n1 s4w   Y  W d   ƒ d S W d   ƒ d S 1 sLw   Y  d S )Nr  r  F)Údelete)	rº   r¿   r   rO   rz   r@   rC   r  rR   )r   rÒ   rD   r   r   r   r"    s   
ÿPúz-TestMkdtemp.test_collision_with_existing_filec              	   C   s˜   t ƒ ? tdddƒ  t ¡ }|  | d¡¡ t ¡ }|  | d¡¡ W d   ƒ n1 s-w   Y  W d   ƒ d S W d   ƒ d S 1 sEw   Y  d S r  )rº   r¿   r   rR   r@   r  )r   Zdir1Zdir2r   r   r   r#    s   
ÿPûz2TestMkdtemp.test_collision_with_existing_directoryc                 C   s  t j}|  t jttd ƒf¡ zut  ¡ }t |¡ |  |t¡ t  ¡ t _|  t jt	¡ |  t  
¡ t¡ |  t  ¡ t	¡ t  ¡ }t |¡ |  |t	¡ t jdd}t |¡ |  |t¡ t jdd}t |¡ |  |t¡ t jt  
¡ d}t |¡ |  |t¡ W |t _d S |t _w )Nz-dirr>  ztest-mkdtemp-r)  r¹   )r   rX   r   r   r9   rR   r5   rÿ   rW   r   rV   )r   r?  r6   r   r   r   r@  )  s.   





z:TestMkdtemp.test_for_tempdir_is_bytes_issue40701_api_wartsr4   )r!   r"   r#   rƒ   rË   ræ   rí   rö   rü   r  rC  r"  r#  r@  r   r   r   r   rA  ¾  s    
	
rA  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                    rd   r1   )r   rR   rD   rg   r0   r   rh   r   r   r0   I  rj   zTestMktemp.setUpc                    s&   | j rt | j ¡ d | _ tƒ  ¡  d S r1   )rD   r5   rÿ   rg   r3   r   rh   r   r   r3   M  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 )Nr8  r  )r   r&   rC   r5   rz   r§   r×   )r   rD   rE   rF   r   r   r   rÞ   W  s   zTestMktemp.mktemped.__init__c                 C   s   |   | j¡ d S r1   )rà   rC   r   r   r   r   rá   ]  s   zTestMktemp.mktemped.__del__N)r!   r"   r#   r5   rä   rà   r   râ   r×   rÞ   rá   r   r   r   r   ÚmktempedS  s
    rF  r   c                 C   s(   |   | j||¡}|  |j| j||¡ |S r1   )rF  rD   rJ   rC   )r   rE   rF   rÒ   r   r   r   ræ   `  s   zTestMktemp.do_createc                 C   ó@   |   ¡  | j dd | j dd | j ddd | j ddd d S rB  r;  r   r   r   r   rí   f  ó
   zTestMktemp.test_basicc                 C   r÷   rø   rù   rû   r   r   r   rs   n  rý   zTestMktemp.test_many)r   r   )r!   r"   r#   rƒ   r0   r3   rF  ræ   rí   rs   r‡   r   r   rh   r   rE  D  s    
rE  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)rD   r*  r9  rD  )r   rV   rO   rJ   rC   )r   rD   rE   rF   rD  rÒ   r   r   r   ræ   ƒ  s   
ÿz TestNamedTemporaryFile.do_createc                 C   rG  rB  r;  r   r   r   r   rí     rH  z!TestNamedTemporaryFile.test_basicc                 C   sT   |   ¡ }t |¡}|j}|j}~|dƒ ~|dƒ ~tjddr(|  |ƒ ¡ d S 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   rO   r{   rÏ   Úseek©r  ©Úlinesr   r   Ú	make_file©  s   
z3TestNamedTemporaryFile.test_iter.<locals>.make_filerN   )Ú	enumerater<   r8   )r   rU  rr   Úlr   rS  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   rO   r@   r5   r6   ÚexistsrC   r  r   r   r   Útest_creates_named²  s   ÿz)TestNamedTemporaryFile.test_creates_namedc              	   C   sx   t  ¡ }z1t j|d}| d¡ W d   ƒ n1 sw   Y  |  tj |j¡d|j ¡ W t 	|¡ d S t 	|¡ w )Nr¹   rç   z(NamedTemporaryFile %s exists after close)
r   rR   rO   r{   rŒ   r5   r6   rY  rC   rÿ   ©r   rD   r  r   r   r   Útest_del_on_close¸  s   ÿÿz(TestNamedTemporaryFile.test_del_on_closec              	   C   s   t  ¡ }d }z2t j|dd}|j}| d¡ | ¡  |  tj 	|j¡d|j ¡ W |d ur2t 
|¡ t |¡ d S |d urBt 
|¡ t |¡ w )NF)rD   rD  rç   z)NamedTemporaryFile %s missing after close)r   rR   rO   rC   r{   rz   r@   r5   r6   rY  rä   rÿ   )r   rD   Útmpr  r   r   r   Útest_dis_del_on_closeÃ  s    
ÿ
þ
z,TestNamedTemporaryFile.test_dis_del_on_closec                 C   ó.   t  ¡ }| d¡ | ¡  | ¡  | ¡  d S ©Nó   abc
)r   rO   r{   rz   r  r   r   r   Útest_multiple_closeÓ  ó
   
z*TestNamedTemporaryFile.test_multiple_closec                    sl   t  ¡ ‰ |  tj ˆ j¡¡ W d   ƒ n1 sw   Y  |  tj ˆ j¡¡ ‡ fdd„}|  t	|¡ d S )Nc                      ó*   ˆ 	 W d   ƒ d S 1 sw   Y  d S r1   r   r   rR  r   r   Ú
use_closedà  ó   "ÿz?TestNamedTemporaryFile.test_context_manager.<locals>.use_closed)
r   rO   r@   r5   r6   rY  rC   rŒ   r   r–   ©r   re  r   rR  r   Útest_context_managerÛ  s   
ÿz+TestNamedTemporaryFile.test_context_managerc              	      ó¨   g ‰ t j‰‡ ‡fdd„}tjd|d7 tjdtd |  ttj¡ |  t	ˆ ƒd¡ W d   ƒ n1 s5w   Y  W d   ƒ d S W d   ƒ d S 1 sMw   Y  d S )Nc                    ó   ˆ   | ¡ ˆ| ƒ d S r1   ©r^   ©rÚ   ©ÚclosedZos_closer   r   rz   é  ó   
z5TestNamedTemporaryFile.test_no_leak_fd.<locals>.closeúos.close©Zside_effectúio.openrN   )
r5   rz   r   Úpatchr–   r   r   rO   r<   r8   ©r   rz   r   rm  r   Útest_no_leak_fdå  ó   þÿ"ÿz&TestNamedTemporaryFile.test_no_leak_fdc                 C   sœ   t  ¡ }|  tj|¡ |  t¡ t jd|d W d   ƒ n1 s"w   Y  |  t¡ t jd|d W d   ƒ n1 s>w   Y  |  	t
 |¡g ¡ d S )NrM  )rÌ   rD   é   )r   rR   Z
addCleanupr   r¸   r   r–   rO   r   r<   r5   r­   r   r   r   r   Útest_bad_modeò  s   ÿÿz$TestNamedTemporaryFile.test_bad_mode)Nr   r   T)r!   r"   r#   rƒ   ræ   rí   rN  rX  rZ  r\  r^  rb  rh  ru  rx  r   r   r   r   rI  €  s    


rI  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_sizerD   r*  r9  )r   rV   rZ   )r   rz  rD   rE   rF   rÒ   r   r   r   ræ      s   z"TestSpooledTemporaryFile.do_createc                 C   s4   |   ¡ }|  |j¡ | j dddd}|  |j¡ d S )Nr	   rµ   rì   )rz  rE   rF   )ræ   rŒ   Ú_rolledr  r   r   r   rí     s   z#TestSpooledTemporaryFile.test_basicc              	   C   s†   t  ¡ }z8t jd|d}|  |j¡ | d¡ |  |j¡ |j}| ¡  |  t	|t
ƒo0tj |¡d| ¡ W t |¡ d S t |¡ w )Né
   )rz  rD   s   blat blat blat blat blat z*SpooledTemporaryFile %s exists after close)r   rR   rZ   rŒ   r{  r{   r@   rC   rz   r:   r   r5   r6   rY  rÿ   )r   rD   r  Úfilenamer   r   r   r\    s   
ÿz*TestSpooledTemporaryFile.test_del_on_closec                 C   sL   | j dd}|  |j¡ tdƒD ]}| dd¡ | d¡ q|  |j¡ d S )Né   ©rz  é   r   ó   xxxxxxxxxxxxxxxxxxxx)ræ   rŒ   r{  ro   rQ  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Œ   r{  r{   r@   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æ   Ú
writelinesrQ  r<   r~   )r   r  ÚposÚbufr   r   r   Útest_writelines3  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Œ   r{  r{   r@   r  r   r   r   Útest_writelines_sequential<  s
   

z3TestSpooledTemporaryFile.test_writelines_sequentialc                 C   sV   | j dd}|  |j¡ | dd¡}|  |d¡ |  |j¡ | d¡ |  |j¡ d S )Nr~  r  r	   r   r„  )ræ   rŒ   r{  rQ  r<   r{   r@   )r   r  r‰  r   r   r   Útest_sparseE  s   
z$TestSpooledTemporaryFile.test_sparsec                 C   s:   | j dd}|  |j¡ |  | ¡ dk¡ |  |j¡ d S )Nr~  r  r   )ræ   rŒ   r{  r@   Úfilenor  r   r   r   Útest_filenoP  s   z$TestSpooledTemporaryFile.test_filenoc                 C   s:   t  ¡ }| d¡ |  |j¡ | ¡  | ¡  | ¡  d S r`  )r   rZ   r{   rŒ   r{  rz   r  r   r   r   Ú#test_multiple_close_before_rolloverW  s   
z<TestSpooledTemporaryFile.test_multiple_close_before_rolloverc                 C   s>   t jdd}| d¡ |  |j¡ | ¡  | ¡  | ¡  d S )NrN   r  ra  )r   rZ   r{   r@   r{  rz   r  r   r   r   Ú"test_multiple_close_after_rollover`  s   
z;TestSpooledTemporaryFile.test_multiple_close_after_rolloverc                 C   sL   | j dd}|j}|j}|j}|dƒ |dƒ |ddƒ |  |dƒd¡ d S )Nr~  r  s#   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas#   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbr   éF   sF   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)ræ   r~   r{   rQ  r<   )r   r  r~   r{   rQ  r   r   r   Útest_bound_methodsi  s   
z+TestSpooledTemporaryFile.test_bound_methodsc                 C   s’  t jdd}| d¡ |  |j¡ |  |jd¡ |  |j¡ |  	t
¡ |j W d   ƒ n1 s1w   Y  |  	t
¡ |j W d   ƒ n1 sIw   Y  |  	t
¡ |j W d   ƒ n1 saw   Y  | d¡ |  |j¡ |  |jd¡ |  |j¡ |  	t
¡ |j W d   ƒ n1 s‘w   Y  |  	t
¡ |j W d   ƒ n1 s©w   Y  |  	t
¡ |j W d   ƒ d S 1 sÂw   Y  d S )Nr|  r  rƒ  rO  r„  zrb+)r   rZ   r{   rŒ   r{  r<   rÌ   rL  rC   r   r™   ÚnewlinesÚencodingÚerrorsr@   ÚassertIsNotNoner  r   r   r   Útest_propertiesw  s6   
ÿÿÿ
ÿÿ"ÿ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Ì   rz  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   rZ   r{   rQ  r<   r~   rŒ   r{  rÌ   rL  rC   r•  r5   Úlinesepr–  r—  r@   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Ì   rz  Únewliner–  r—  u   Î›
r   u   ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
u(   ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎuB   Î›
ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ)r   rZ   r{   rQ  r<   r~   rŒ   r{  rÌ   rL  rC   r˜  r•  r–  r—  r@   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w   Y  |  ˆ j¡ ‡ fdd„}|  t|¡ d S )NrN   r  c                      rd  r1   r   r   rR  r   r   re  Ï  rf  zQTestSpooledTemporaryFile.test_context_manager_before_rollover.<locals>.use_closed)r   rZ   rŒ   r{  rn  r@   r   r–   rg  r   rR  r   Ú$test_context_manager_before_rolloverÉ  s   þz=TestSpooledTemporaryFile.test_context_manager_before_rolloverc                    sŠ   t jdd#‰ |  ˆ j¡ ˆ  d¡ ˆ  ¡  |  ˆ j¡ |  ˆ j¡ W d   ƒ n1 s,w   Y  |  ˆ j¡ ‡ fdd„}|  t	|¡ d S )NrN   r  ra  c                      rd  r1   r   r   rR  r   r   re  Ý  rf  zQTestSpooledTemporaryFile.test_context_manager_during_rollover.<locals>.use_closed)
r   rZ   rŒ   r{  r{   Úflushr@   rn  r   r–   rg  r   rR  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 s(w   Y  |  ˆ j¡ ‡ fdd„}|  t	|¡ d S )NrN   r  ra  c                      rd  r1   r   r   rR  r   r   re  ë  rf  zPTestSpooledTemporaryFile.test_context_manager_after_rollover.<locals>.use_closed)
r   rZ   r{   r¢  r@   r{  rŒ   rn  r   r–   rg  r   rR  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   rZ   r{   rQ  ÚtruncaterŒ   r{  r<   Ú_fileÚgetvaluer@   r5   Ú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 r1   )r   r   rZ   r   ÚtypesÚGenericAliasr   r   r   r   Útest_class_getitem  s   ÿz+TestSpooledTemporaryFile.test_class_getitem)r   Nr   r   )r!   r"   r#   rƒ   ræ   rí   r\  r‚  r…  r‹  r  rŽ  r  r‘  r’  r”  r™  rž  r   r¡  r£  r¤  r«  r®  r   r   r   r   ry  ý  s,    
					 ry  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 r1   )r   rP   r   r   r   r   rí     s   zTestTemporaryFile.test_basicc                 C   sJ   t  ¡ }t j|d}| d¡ zt |¡ W d S    | ¡  t |¡ ‚ rþ   )r   rR   rP   r{   r5   rÿ   rz   r[  r   r   r   Útest_has_no_name  s   

z"TestTemporaryFile.test_has_no_namec                 C   r_  r`  )r   rP   r{   rz   r  r   r   r   rb  #  rc  z%TestTemporaryFile.test_multiple_closec                    s@   ‡ fdd„}|ddƒ |ddƒ |dddd	 |d
ddd d S )Nc                    sZ   t j|i |¤Ž}| | ¡ | d¡ ˆ  | | ¡ ¡ W d   ƒ d S 1 s&w   Y  d S rŠ   )r   rP   r{   rQ  r<   r~   )Úinputr¤   r¥   Úfileobjr   r   r   Ú	roundtrip.  s
   

"ýz;TestTemporaryFile.test_mode_and_encoding.<locals>.roundtrips   1234rO  zabdc
rš  u   Î›zutf-16)r–  zfoo
r   )rŸ  r   )r   r³  r   r   r   Útest_mode_and_encoding,  s
   

z(TestTemporaryFile.test_mode_and_encodingc              	      ri  )Nc                    rj  r1   rk  rl  rm  r   r   rz   =  ro  z0TestTemporaryFile.test_no_leak_fd.<locals>.closerp  rq  rr  rN   )
r5   rz   r   rs  r–   r   r   rP   r<   r8   rt  r   rm  r   ru  9  rv  z!TestTemporaryFile.test_no_leak_fdN)	r!   r"   r#   rƒ   rí   r°  rb  r´  ru  r   r   r   r   r¯    s    	r¯  c                   @   rÀ   )Ú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>K  s    z*NulledModules.__init__.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r   )Úcopy)r¶  rK  r   r   r   r¸  L  s    )ÚrefsÚcontents)r   Úmodulesr   r   r   rÞ   J  s   zNulledModules.__init__c                 C   s"   | j D ]}|D ]}d ||< qqd S r1   )rº  )r   r-  ra   r   r   r   r,   N  s
   

ÿÿzNulledModules.__enter__c                 G   s.   t | j| jƒD ]\}}| ¡  | |¡ qd S r1   )Úziprº  r»  ÚclearÚupdate)r   Úexc_infor-  r   r   r   r   r2   S  s   þzNulledModules.__exit__N)r!   r"   r#   rÞ   r,   r2   r   r   r   r   rµ  I  s    rµ  c                   @   s¼   e Zd ZdZ		d(dd„Zd)dd	„Zd
d„ Zdd„ Zdd„ Ze	j
dd„ ƒZejdd„ ƒZejdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Ze eed$ƒd%¡d&d'„ ƒZdS )*ÚTestTemporaryDirectoryzTest TemporaryDirectory().Nr   rN   Fc           	      C   sJ   |d u rt  ¡ }t j||||d}|  |j|||¡ |  |j|||¡ |S )N)rD   r*  r9  Úignore_cleanup_errors)r   rV   r[   rJ   rC   Ú
do_create2)	r   rD   rE   rF   ÚrecurseÚdirsÚfilesrÂ  r]  r   r   r   ræ   \  s   þz TestTemporaryDirectory.do_createc              	   C   s–   |r!t |ƒD ]}tj |d| ¡}t |¡ |  ||d ||¡ qt |ƒD ]#}ttj |d| ¡dƒ}| d¡ W d   ƒ q%1 sCw   Y  q%d S )Nzdir%drN   z
test%d.txtrÓ   s   Hello world!)ro   r5   r6   rÏ   ÚmkdirrÃ  r§   r{   )r   r6   rÄ  rÅ  rÆ  rr   rC   r  r   r   r   rÃ  g  s   
ÿÿz!TestTemporaryDirectory.do_create2c                 C   st   t  ¡ }W d   ƒ n1 sw   Y  |  t¡}t j|d W d   ƒ n1 s*w   Y  |  |jjtj¡ d S r=  )r   r[   r   r¯   r<   Ú	exceptionÚerrnoÚENOENT)r   rÎ   Úcmr   r   r   Útest_mkdtemp_failurer  s   
ÿÿz+TestTemporaryDirectory.test_mkdtemp_failurec              	   C   sr   t  ¡ }z.| j|d}|  tj |j¡d|j ¡ | ¡  |  	tj |j¡d|j ¡ W t 
|¡ d S t 
|¡ w )Nr¹   z$TemporaryDirectory %s does not existú*TemporaryDirectory %s exists after cleanup)r   rR   ræ   r@   r5   r6   rY  rC   ÚcleanuprŒ   rÿ   )r   rD   r-  r   r   r   Útest_explicit_cleanup|  s   ÿÿz,TestTemporaryDirectory.test_explicit_cleanupc              	   C   s  t  ¡ z}| j|dd}t |j¡}|  | ¡ d|›d¡ t|d dƒ}| 	d¡ | 
¡  W d  ƒ n1 s9w   Y  |  tt| d	¡ƒƒttj d
¡ƒd|›¡ |  | ¡ tj d
¡d|›d¡ | 
¡  |  | ¡ d|›d¡ W d  ƒ dS 1 sw   Y  dS )z=Test that cleanup doesn't return an error when ignoring them.T©rD   rÂ  úTemporaryDirectory ú does not existú
a_file.txtúw+túHello world!
NÚ*Úwinú1Unexpected number of files in TemporaryDirectory ú existance state unexpectedz exists after cleanup)r   r[   ræ   r   r   rC   r@   rY  r§   r{   rÎ  r<   r8   rú   ÚglobÚintr  r	  Ú
startswithrŒ   ©r   Úworking_dirZtemp_dirÚ	temp_pathZ	open_filer   r   r   Ú"test_explict_cleanup_ignore_errors‰  s:   
ÿ

ÿ

þÿþ

ý
þ"îz9TestTemporaryDirectory.test_explict_cleanup_ignore_errorsc                 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æ   r5   ÚsymlinkrC   r6   rÏ   rÎ  rŒ   rY  r@   r<   r­   )r   Zd1Zd2r   r   r   Ú(test_cleanup_with_symlink_to_a_directory¡  s   ÿÿÿz?TestTemporaryDirectory.test_cleanup_with_symlink_to_a_directoryc              	   C   sR   t  ¡ }z| j|d}|j}~|  tj |¡d| ¡ W t |¡ d S t |¡ w )Nr¹   ú*TemporaryDirectory %s exists after __del__)	r   rR   ræ   rC   rŒ   r5   r6   rY  rÿ   ©r   rD   r-  rC   r   r   r   Útest_del_on_collection¶  s   ÿz-TestTemporaryDirectory.test_del_on_collectionc              	   C   sê   t  ¡ g}| j|dd}t |j¡}|  | ¡ d|›d¡ t|d dƒ}| 	d¡ ~W d  ƒ n1 s6w   Y  |  
tt| d	¡ƒƒttj d
¡ƒd|›¡ |  
| ¡ tj d
¡d|›d¡ W d  ƒ dS 1 snw   Y  dS )z@Test that ignoring errors works when TemporaryDirectory is gced.TrÐ  rÑ  rÒ  rÓ  rÔ  rÕ  NrÖ  r×  rØ  rÙ  )r   r[   ræ   r   r   rC   r@   rY  r§   r{   r<   r8   rú   rÚ  rÛ  r  r	  rÜ  rÝ  r   r   r   Ú$test_del_on_collection_ignore_errorsÃ  s0   
ÿ

ÿ
þÿþ

ý"óz;TestTemporaryDirectory.test_del_on_collection_ignore_errorsc                 C   s    |   ¡ B}dD ]6}dj||d}t d|¡\}}}| ¡  ¡ }|  tj 	|¡d| ¡ | dd¡}|  
d|¡ |  d	|¡ qW d   ƒ d S 1 sIw   Y  d S )
N)Úbuiltinsr5   Úshutilr  r   r-   a½  if True:
                    import builtins
                    import os
                    import shutil
                    import sys
                    import tempfile
                    import warnings

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

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

                    {mod}.tmp = tmp

                    warnings.filterwarnings("always", category=ResourceWarning)
                    )rD   r·  ú-crÍ  r›  Úbackslashreplaceú
Exception ú'ResourceWarning: Implicitly cleaning up©ræ   Úformatr   Úassert_python_okr   ÚstriprŒ   r5   r6   rY  rq   r—   )r   rD   r·  ÚcodeÚrcÚoutÚerrÚtmp_namer   r   r   Útest_del_on_shutdownØ  s   
íÿå"ÿz+TestTemporaryDirectory.test_del_on_shutdownc                 C   sÞ   t  ¡ a}dj|d}t d|¡\}}}t | ¡  ¡ ¡}|  	t
t| d¡ƒƒttj d¡ƒd|›¡ |  	| ¡ tj d¡d|›d¡ | d	d
¡}|  d|¡ |  d|¡ |  d|¡ W d  ƒ dS 1 shw   Y  dS )z?Test ignoring errors works when a tempdir is gc'ed on shutdown.a÷  if True:
                import pathlib
                import sys
                import tempfile
                import warnings

                temp_dir = tempfile.TemporaryDirectory(
                    dir={working_dir!r}, ignore_cleanup_errors=True)
                sys.stdout.buffer.write(temp_dir.name.encode())

                temp_dir_2 = pathlib.Path(temp_dir.name) / "test_dir"
                temp_dir_2.mkdir()
                with open(temp_dir_2 / "test0.txt", "w") as test_file:
                    test_file.write("Hello world!")
                open_file = open(temp_dir_2 / "open_file.txt", "w")
                open_file.write("Hello world!")

                warnings.filterwarnings("always", category=ResourceWarning)
                )rÞ  ré  rÖ  r×  rØ  rÑ  rÙ  r›  rê  Ú	ExceptionÚErrorrì  N)r   r[   rî  r   rï  r   r   r   rð  r<   r8   rú   rÚ  rÛ  r  r	  rÜ  rY  rq   r—   )r   rÞ  rñ  Ú__ró  rô  rß  r   r   r   Ú"test_del_on_shutdown_ignore_errorsø  s,   
îÿþ

ý"ßz9TestTemporaryDirectory.test_del_on_shutdown_ignore_errorsc                 C   s”   |   ¡ <}dj|d}t d|¡\}}}| ¡  ¡ }|  tj 	|¡d| ¡ | dd¡}|  
d|¡ |  d|¡ W d   ƒ d S 1 sCw   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   rD   rñ  rò  ró  rô  rõ  r   r   r   Útest_exit_on_shutdown  s   
ôÿ"ìz,TestTemporaryDirectory.test_exit_on_shutdownc              	   C   s¤   |   ¡ D}| j |dd}|j}tjdtfdd tjdtd ~t ¡  W d   ƒ n1 s/w   Y  |  	t
j |¡d| ¡ W d   ƒ d S 1 sKw   Y  d S )	Né   )rD   rÄ  Z
ImplicitlyF)ÚquietÚalways)r'   rã  )ræ   rC   r   r*   ÚResourceWarningr-   r.   r   Ú
gc_collectrŒ   r5   r6   rY  rä  r   r   r   Útest_warnings_on_cleanup5  s    
ÿþ
ûÿ"õz/TestTemporaryDirectory.test_warnings_on_cleanupc                 C   s$   |   ¡ }| ¡  | ¡  | ¡  d S r1   )ræ   rÎ  r2  r   r   r   rb  E  s   z*TestTemporaryDirectory.test_multiple_closec                 C   sb   |   ¡ }|}|  tj |¡¡ |  ||j¡ W d   ƒ n1 s!w   Y  |  tj |¡¡ d S r1   )ræ   r@   r5   r6   rY  r<   rC   rŒ   )r   r-  rC   r   r   r   rh  L  s   þz+TestTemporaryDirectory.test_context_managerc                 C   sä   t dƒD ]k}|dK }| jt|dƒdT | jdddd}|0 tj|jdd	D ]\}}}|D ]}t tj 	||¡|¡ q.t ||¡ q'| 
¡  W d   ƒ n1 sQw   Y  |  tj |j¡¡ W d   ƒ q1 sjw   Y  qd S )
Né   r  Z03orP  rü  rw  ©rÄ  rÅ  rÆ  F©Útopdown)ro   ZsubTestrî  ræ   r5   ÚwalkrC   rÇ   r6   rÏ   rÎ  rŒ   rY  )r   rÌ   r-  ÚrootrÅ  rÆ  rC   r   r   r   Ú
test_modesT  s   
ú÷þz!TestTemporaryDirectory.test_modesÚchflagszrequires os.lchflagsc              	   C   s¨   t jt jB }| jdddd}|0 tj|jddD ]\}}}|D ]}t tj 	||¡|¡ q t ||¡ q| 
¡  W d   ƒ n1 sCw   Y  |  tj |j¡¡ d S )Nrü  rw  r  Fr  )rÂ   ÚUF_IMMUTABLEÚUF_NOUNLINKræ   r5   r  rC   r	  r6   rÏ   rÎ  rŒ   rY  )r   rÜ   r-  r  rÅ  rÆ  rC   r   r   r   Ú
test_flagsb  s   
úz!TestTemporaryDirectory.test_flags)Nr   r   rN   rN   rN   F)rN   rN   rN   )r!   r"   r#   rƒ   ræ   rÃ  rÌ  rÏ  rà  r   Zskip_unless_symlinkrâ  r   Zcpython_onlyrå  ræ  rö  rú  rû  r  rb  rh  r  r„   r…   r†   r5   r  r   r   r   r   rÁ  Y  s0    
ÿ




 %rÁ  Ú__main__)7r   rÉ  r®   r5   r   r  rK   r-   Ú
contextlibrÂ   r¬  rJ  r„   r   Útestr   Ztest.supportr   r   r   rã   râ   r%  r†   r$  r	  rÜ  rp   ZTestCaser
   r$   rM   rc   r‰   r    r±   Úcontextmanagerrº   r¿   rÁ   rÖ   r&  r/  r7  rA  rE  rI  ry  rO   rP   r¯  rµ  rÁ  r!   Úmainr   r   r   r   Ú<module>   sn   
3@*%
	  / .^ <}  >  
ÿ