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                       sP   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                    ó   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#   r0   rn   rs   ru   ÚunittestÚ
skipUnlessÚhasattrr5   r‚   Ú__classcell__r   r   rh   r   rc   •   s    
ÿrc   c                   @   ó   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Ú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ˆ   Õ   s    	rˆ   c                   @   s   e Zd Z	 dd„ ZdS )ÚTestGetDefaultTempdirc                    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Ÿ   ÿ   s    rŸ   c                   @   r‡   )ÚTestGetCandidateNamesc                 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°   $  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	 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 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„   Ú
has_spawnlr  Úhas_textmoder  rÊ   r!  r"  r   r   r   r   rÕ   d  s     
	


%

rÕ   c                   @   r‡   )ÚTestGetTempPrefixc                 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%    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   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#   r2  r3  r¶   r5  r   r   r   r   r.  2  s    		
r.  c                   @   s8   e Zd Z	 ddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestMkstempNc           
   	   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¸   r9  rê   rë   )r   rW   rå   r   r   r1  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ë   ©r8  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   r6  `  s    
		r6  c                   @   s`   e Zd Z	 dd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestMkdtempc                 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 |¡ ‚ )Nr7  )	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   r1  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   rB  r!  r"  r?  r   r   r   r   r@  ¾  s    
	
r@  c                       sR   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                    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 )Nr7  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
    rE  r   c                 C   s(   |   | j||¡}|  |j| j||¡ |S r1   )rE  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 rA  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#   r0   r3   rE  rå   rì   rs   r†   r   r   rh   r   rD  D  s    
rD  c                   @   sh   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)rD   r)  r8  rC  )r   rV   rO   rJ   rC   )r   rD   rE   rF   rC  rÑ   r   r   r   rå   ƒ  s   
ÿz TestNamedTemporaryFile.do_createc                 C   rF  rA  r:  r   r   r   r   rì     rG  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   rT  rr   Úlr   rR  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   rX  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   rC  ræ   z)NamedTemporaryFile %s missing after close)r   rR   rO   rC   r{   rz   r@   r5   r6   rX  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   rQ  r   r   Ú
use_closedà  ó   "ÿz?TestNamedTemporaryFile.test_context_manager.<locals>.use_closed)
r   rO   r@   r5   r6   rX  rC   r‹   r   r•   ©r   rd  r   rQ  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   rl  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 )NrL  )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ì   rM  rW  rY  r[  r]  ra  rg  rt  rw  r   r   r   r   rH  €  s    


rH  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_sizerD   r)  r8  )r   rV   rZ   )r   ry  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ë   )ry  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é
   )ry  rD   s   blat blat blat blat blat z*SpooledTemporaryFile %s exists after close)r   rR   rZ   r‹   rz  r{   r@   rC   rz   r:   r   r5   r6   rX  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é   ©ry  é   r   ó   xxxxxxxxxxxxxxxxxxxx)rå   r‹   rz  ro   rP  r{   )r   r  rr   r   r   r   Útest_rewrite_small  s   z+TestSpooledTemporaryFile.test_rewrite_smallc                 C   s^   | j dd}|  |j¡ | d¡ |  |j¡ | d¡ |  |j¡ | d¡ |  |j¡ d S )Nr}  r~  r€  ó
   xxxxxxxxxxó   x)rå   r‹   rz  r{   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å   Ú
writelinesrP  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‹   rz  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‹   rz  rP  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‹   rz  r@   Úfilenor  r   r   r   Útest_filenoP  s   z$TestSpooledTemporaryFile.test_filenoc                 C   s:   t  ¡ }| d¡ |  |j¡ | ¡  | ¡  | ¡  d S r_  )r   rZ   r{   r‹   rz  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~  r`  )r   rZ   r{   r@   rz  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{   rP  r<   )r   r  r~   r{   rP  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‚  rN  rƒ  zrb+)r   rZ   r{   r‹   rz  r<   rË   rK  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Ë   ry  r•  zabc
r   zdef
zabc
def
Ústrictzxyzzy
zabc
def
xyzzy
zfoobar
zabc
def
xyzzy
foobar
)r   rZ   r{   rP  r<   r~   r‹   rz  rË   rK  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Ë   ry  Únewliner•  r–  u   Î›
r   u   ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
u(   ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎuB   Î›
ÎœÎœÎœÎœÎœÎœÎœÎœÎœÎœ
ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ)r   rZ   r{   rP  r<   r~   r‹   rz  rË   rK  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                      rc  r1   r   r   rQ  r   r   rd  Ï  re  zQTestSpooledTemporaryFile.test_context_manager_before_rollover.<locals>.use_closed)r   rZ   r‹   rz  rm  r@   r   r•   rf  r   rQ  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~  r`  c                      rc  r1   r   r   rQ  r   r   rd  Ý  re  zQTestSpooledTemporaryFile.test_context_manager_during_rollover.<locals>.use_closed)
r   rZ   r‹   rz  r{   Úflushr@   rm  r   r•   rf  r   rQ  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~  r`  c                      rc  r1   r   r   rQ  r   r   rd  ë  re  zPTestSpooledTemporaryFile.test_context_manager_after_rollover.<locals>.use_closed)
r   rZ   r{   r¡  r@   rz  r‹   rm  r   r•   rf  r   rQ  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{   rP  Útruncater‹   rz  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   rx  ý  s,    
					 rx  c                   @   s6   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 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   rZ  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   ra  #  rb  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{   rP  r<   r~   )Úinputr£   r¤   Úfileobjr   r   r   Ú	roundtrip.  s
   

"ýz;TestTemporaryFile.test_mode_and_encoding.<locals>.roundtrips   1234rN  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              	      rh  )Nc                    ri  r1   rj  rk  rl  r   r   rz   =  rn  z0TestTemporaryFile.test_no_leak_fd.<locals>.closero  rp  rq  rN   )
r5   rz   r   rr  r•   r   r   rP   r<   r8   rs  r   rl  r   rt  9  ru  z!TestTemporaryFile.test_no_leak_fdN)r!   r"   r#   rì   r¯  ra  r³  rt  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µ  rJ  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'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 ))ÚTestTemporaryDirectoryNr   rN   Fc           	      C   sJ   |d u rt  ¡ }t j||||d}|  |j|||¡ |  |j|||¡ |S )N)rD   r)  r8  Ú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   rX  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 s:w   Y  |  tt| d¡ƒƒttj d	¡ƒd
|›¡ |  | ¡ tj d	¡d|›d¡ | 
¡  |  | ¡ d|›d¡ W d   ƒ d S 1 s‚w   Y  d S )NT©rD   rÁ  úTemporaryDirectory ú does not existú
a_file.txtúw+túHello world!
Ú*Úwinú1Unexpected number of files in TemporaryDirectory ú existance state unexpectedz exists after cleanup)r   r[   rå   r   r   rC   r@   rX  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‹   rX  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   rX  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 s7w   Y  |  
tt| d¡ƒƒttj d	¡ƒd
|›¡ |  
| ¡ tj d	¡d|›d¡ W d   ƒ d S 1 sow   Y  d S )NTrÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  )r   r[   rå   r   r   rC   r@   rX  r¦   r{   r<   r8   rù   rÙ  rÚ  r  r  rÛ  rÜ  r   r   r   Ú$test_del_on_collection_ignore_errorsÃ  s2   
ÿ

ÿ
þÿþ

ý"ó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   rX  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 siw   Y  d S )Na÷  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ë  )r   r[   rí  r   rî  r   r   r   rï  r<   r8   rù   rÙ  rÚ  r  r  rÛ  rX  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   rX  rã  r   r   r   Útest_warnings_on_cleanup5  s    
ÿþ
ûÿ"õz/TestTemporaryDirectory.test_warnings_on_cleanupc                 C   s$   |   ¡ }| ¡  | ¡  | ¡  d S r1   )rå   rÍ  r1  r   r   r   ra  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   rX  r<   rC   r‹   )r   r,  rC   r   r   r   rg  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03orO  rû  rv  ©rÃ  rÄ  rÅ  F©Útopdown)ro   ZsubTestrí  rå   r5   ÚwalkrC   rÆ   r6   rÎ   rÍ  r‹   rX  )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û  rv  r  Fr  )rÁ   ÚUF_IMMUTABLEÚUF_NOUNLINKrå   r5   r  rC   r  r6   rÎ   rÍ  r‹   rX  )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   Zskip_unless_symlinkrá  r   Zcpython_onlyrä  rå  rõ  rù  rú  r   ra  rg  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«  rI  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.  r6  r@  rD  rH  rx  rO   rP   r®  r´  rÀ  r!   Úmainr   r   r   r   Ú<module>   sn   
3@*%
	  / .^ <}  >  
ÿ