a
    äze3e  ã                   @   sÈ   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ ejZG dd„ dejƒZdd„ Zed	krÄe ¡  dS )
é    N)Úsupport)Úscript_helper)Úsocket_helperc                   @   sì  e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	e
 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e
 eed&ƒd'¡d(d)„ ƒZd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Z d4d5„ Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(dDdE„ Z)dFdG„ Z*dHdI„ Z+dJdK„ Z,dLdM„ Z-G dNdO„ dOƒZ.G dPdQ„ dQƒZ/dRdS„ Z0dTdU„ Z1dVdW„ Z2e
 eedXƒo eedYƒdZ¡d[d\„ ƒZ3dld^d_„Z4d`da„ Z5dbdc„ Z6ddde„ Z7dfdg„ Z8dhdi„ Z9djdk„ Z:d]S )mÚTestSupportc                 C   s.   t tjƒ}tjddd| _tjddd| _d S )Nztest.test_supportz.*used in test_support.*)Zlikez!.*You should NOT be seeing this.*)ÚlenÚwarningsÚfiltersr   Zignore_deprecations_fromÚ_warnings_helper_tokenÚ_test_support_token©ÚclsZorig_filter_len© r   ú'/usr/lib/python3.9/test/test_support.pyÚ
setUpClass   s    
ÿÿzTestSupport.setUpClassc                 C   s   t tjƒ}t | j| j¡ d S ©N)r   r   r   r   Zclear_ignored_deprecationsr	   r
   r   r   r   r   ÚtearDownClass#   s    
þzTestSupport.tearDownClassc                 C   sb   t jdd0}tƒ  t  dt¡ dd„ |D ƒ}W d   ƒ n1 sB0    Y  |  t|ƒd|¡ d S )NT)ÚrecordzYou should NOT be seeing this.c                 S   s   g | ]}t |jƒ‘qS r   ©ÚstrÚmessage©Ú.0Úwr   r   r   Ú
<listcomp>1   ó    zDTestSupport.test_ignored_deprecations_are_silent.<locals>.<listcomp>r   )r   Úcatch_warningsÚ_warn_about_deprecationÚwarnÚDeprecationWarningÚassertEqualr   )ÚselfZwarning_objsÚmessagesr   r   r   Ú$test_ignored_deprecations_are_silent,   s
    ,z0TestSupport.test_ignored_deprecations_are_silentc                 C   s    t  d¡ |  tjt jd¡ d S )NÚftplibÚfoo)r   Úimport_moduleÚassertRaisesÚunittestÚSkipTest©r    r   r   r   Útest_import_module4   s    
zTestSupport.test_import_modulec                 C   s   t  d¡ d S )Nr#   )r   Zimport_fresh_moduler)   r   r   r   Útest_import_fresh_module8   s    z$TestSupport.test_import_fresh_modulec                 C   s.   |   t | d¡| j¡ |  tjtj| d¡ d S )NÚtest_get_attributer$   )r   r   Zget_attributer,   r&   r'   r(   r)   r   r   r   r,   ;   s    ÿzTestSupport.test_get_attributezfailing buildbotsc                 C   s   |   t ¡ tj¡ d S r   )r   r   Zget_original_stdoutÚsysÚstdoutr)   r   r   r   Útest_get_original_stdout@   s    z$TestSupport.test_get_original_stdoutc                 C   s2   dd l }|  dtj¡ t d¡ |  dtj¡ d S )Nr   Úsched)r0   ÚassertInr-   Úmodulesr   ZunloadÚassertNotIn)r    r0   r   r   r   Útest_unloadD   s    
zTestSupport.test_unloadc                 C   sT   t tdƒ}W d   ƒ n1 s 0    Y  t t¡ |  tj t¡¡ t t¡ d S )Nr   )ÚopenÚTESTFNr   ÚunlinkÚassertFalseÚosÚpathÚexists)r    Úfr   r   r   Útest_unlinkJ   s
    
zTestSupport.test_unlinkc                 C   sb  t jd }tj |d¡}t |¡ t |¡ t  |¡ |  tj |¡¡ t  	t dd¡ t  |¡ W d   ƒ n1 sv0    Y  t |¡ t |¡ t 
|tjtjB ¡ t  	t dd¡ t  |¡ W d   ƒ n1 sÖ0    Y  |  tj |¡¡ t |¡ t |¡ t 
|d¡ t  	t dd¡ t  |¡ W d   ƒ n1 sB0    Y  |  tj |¡¡ d S )NÚdZsubdirÚverboser   )r   r6   r9   r:   ÚjoinÚmkdirÚrmtreer8   r;   Ú	swap_attrÚchmodÚstatÚS_IRUSRÚS_IXUSR)r    ÚdirpathZ
subdirpathr   r   r   Útest_rmtreeQ   s(    



(

(

*zTestSupport.test_rmtreec              	   C   sÈ   t d }t|dƒ}td|d W d   ƒ n1 s40    Y  tj dtj¡ t 	¡  zNt
t ƒ}|  t tj¡ t t ¡ |  t tj¡ W tjd= t |¡ t d¡ ntjd= t |¡ t d¡ 0 d S )Nz.pyr   zfoo = 1©Úfiler   Ú__pycache__)r6   r5   Úprintr-   r:   Úinsertr9   ÚcurdirÚ	importlibÚinvalidate_cachesÚ
__import__r1   r2   r   Zforgetr3   r7   rB   )r    Zmod_filenamer<   Úmodr   r   r   Útest_forgeti   s     *

þ
zTestSupport.test_forgetc                 C   s   t  tjdf¡}| ¡  d S )Nr   )ÚsocketÚcreate_serverr   ÚHOSTÚclose©r    Úsr   r   r   Ú	test_HOSTz   s    zTestSupport.test_HOSTc                 C   s$   t  ¡ }t t j|f¡}| ¡  d S r   )r   Zfind_unused_portrU   rV   rW   rX   )r    ÚportrZ   r   r   r   Útest_find_unused_port~   s    z!TestSupport.test_find_unused_portc                 C   s&   t   ¡ }t |¡ | ¡  | ¡  d S r   )rU   r   Z	bind_portÚlistenrX   rY   r   r   r   Útest_bind_portƒ   s    
zTestSupport.test_bind_portc              	   C   s®   t  ¡ }tj |¡}zˆtj |d¡}|  tj |¡¡ t 	|¡.}|  
||¡ |  tj |¡¡ W d   ƒ n1 st0    Y  |  tj |¡¡ W t |¡ nt |¡ 0 d S )NZtemp)ÚtempfileÚmkdtempr9   r:   Úrealpathr@   r8   Úisdirr   Útemp_dirr   Ú
assertTruerB   )r    Ú
parent_dirr:   Ú	temp_pathr   r   r   Útest_temp_dir‹   s    0zTestSupport.test_temp_dirc                 C   sP   t  ¡ "}|  tj |¡¡ W d   ƒ n1 s00    Y  |  tj |¡¡ d S r   )r   rd   re   r9   r:   rc   r8   )r    rg   r   r   r   Útest_temp_dir__path_noneš   s    
0z$TestSupport.test_temp_dir__path_nonec              	   C   sn   dd„ }t  ¡ }tj |¡}z@|  tj |¡¡ |  t||¡ |  tj |¡¡ W t	 
|¡ nt	 
|¡ 0 d S )Nc                 S   s6   t  | ¡}tdƒ‚W d   ƒ n1 s(0    Y  d S ©Nzshould not get here)r   rd   Ú	Exception)r:   rg   r   r   r   Úcall_temp_dir¢   s    zMTestSupport.test_temp_dir__existing_dir__quiet_default.<locals>.call_temp_dir)r`   ra   r9   r:   rb   re   rc   r&   ÚFileExistsErrorÚshutilrB   )r    rl   r:   r   r   r   Ú*test_temp_dir__existing_dir__quiet_default    s    z6TestSupport.test_temp_dir__existing_dir__quiet_defaultc              	   C   sì   t  ¡ }tj |¡}z’t ¡ Z}tj|dd}|  ||¡ W d   ƒ n1 sP0    Y  dd„ |j	D ƒ}W d   ƒ n1 s~0    Y  |  
tj |¡¡ W t |¡ nt |¡ 0 |  t|ƒd|¡ |d }|  
| d|›d¡|¡ d S )	NT©Úquietc                 S   s   g | ]}t |jƒ‘qS r   r   r   r   r   r   r   ¹   r   zGTestSupport.test_temp_dir__existing_dir__quiet_true.<locals>.<listcomp>é   r   z5tests may fail, unable to create temporary directory ú: )r`   ra   r9   r:   rb   r   Úcheck_warningsrd   r   r   re   rc   rn   rB   r   Ú
startswith)r    r:   Úrecorderrg   r   r   r   r   r   Ú'test_temp_dir__existing_dir__quiet_true°   s     
*.
ÿþz3TestSupport.test_temp_dir__existing_dir__quiet_trueÚforkztest requires os.forkc                 C   s   t  dt d¡¡ d S )Nú-caÐ  
            import os
            from test import support
            with support.temp_cwd() as temp_path:
                pid = os.fork()
                if pid != 0:
                    # parent process

                    # wait for the child to terminate
                    support.wait_process(pid, exitcode=0)

                    # Make sure that temp_path is still present. When the child
                    # process leaves the 'temp_cwd'-context, the __exit__()-
                    # method of the context must not remove the temporary
                    # directory.
                    if not os.path.isdir(temp_path):
                        raise AssertionError("Child removed temp_path.")
        )r   Zassert_python_okÚtextwrapÚdedentr)   r   r   r   Útest_temp_dir__forked_childÅ   s    z'TestSupport.test_temp_dir__forked_childc              	   C   sŠ   t  ¡ }t ¡ V}t |¡,}|  ||¡ |  t  ¡ |¡ W d   ƒ n1 sN0    Y  W d   ƒ n1 sl0    Y  |  t  ¡ |¡ d S r   )r9   Úgetcwdr   rd   Ú
change_cwdr   )r    Úoriginal_cwdrg   Únew_cwdr   r   r   Útest_change_cwdß   s    
LzTestSupport.test_change_cwdc                 C   sh   t  ¡ }dd„ }t ¡ ,}t j |d¡}|  t||¡ W d   ƒ n1 sJ0    Y  |  t  ¡ |¡ d S )Nc                 S   s6   t  | ¡}tdƒ‚W d   ƒ n1 s(0    Y  d S rj   )r   r~   rk   )r:   r€   r   r   r   Úcall_change_cwdí   s    zFTestSupport.test_change_cwd__non_existent_dir.<locals>.call_change_cwdÚdoes_not_exist)	r9   r}   r   rd   r:   r@   r&   ÚFileNotFoundErrorr   )r    r   r‚   rf   Znon_existent_dirr   r   r   Ú!test_change_cwd__non_existent_diré   s    
ÿ"z-TestSupport.test_change_cwd__non_existent_dirc              
   C   sø   t  ¡ }t ¡  }t j |d¡}t ¡ j}tj|dd,}|  ||¡ |  t  ¡ |¡ W d   ƒ n1 sj0    Y  dd„ |j	D ƒ}W d   ƒ n1 s˜0    Y  W d   ƒ n1 s¶0    Y  |  t
|ƒd|¡ |d }|  | d|›d	¡|¡ d S )
Nrƒ   Trp   c                 S   s   g | ]}t |jƒ‘qS r   r   r   r   r   r   r     r   zMTestSupport.test_change_cwd__non_existent_dir__quiet_true.<locals>.<listcomp>rr   r   úBtests may fail, unable to change the current working directory to rs   )r9   r}   r   rd   r:   r@   rt   r~   r   r   r   re   ru   )r    r   rf   Zbad_dirrv   r€   r   r   r   r   r   Ú-test_change_cwd__non_existent_dir__quiet_trueø   s    

.L
þýz9TestSupport.test_change_cwd__non_existent_dir__quiet_truec              	   C   s¦   t d }t ¡ N}tj|dd W d   ƒ n1 s60    Y  dd„ |jD ƒ}W d   ƒ n1 sd0    Y  |  t|ƒd|¡ |d }|  | d|›d	¡|¡ d S )
NZ_does_not_existT)r:   rq   c                 S   s   g | ]}t |jƒ‘qS r   r   r   r   r   r   r     r   z>TestSupport.test_change_cwd__chdir_warning.<locals>.<listcomp>rr   r   r†   rs   )	r6   r   rt   r~   r   r   r   re   ru   )r    r:   rv   r!   Úmsgr   r   r   Útest_change_cwd__chdir_warning  s    
.
þýz*TestSupport.test_change_cwd__chdir_warningc                 C   sr   t  ¡ }tjtd( |  t j t  ¡ ¡t¡ W d   ƒ n1 sB0    Y  |  t j 	t¡¡ |  t  ¡ |¡ d S ©N)Úname)
r9   r}   r   Útemp_cwdr6   r   r:   Úbasenamer8   r;   )r    Úherer   r   r   Útest_temp_cwd  s
    6zTestSupport.test_temp_cwdc                 C   sv   t  ¡ }tjd d>}|  ||¡ |  t j |¡¡ |  t  ¡ |¡ W d   ƒ n1 sX0    Y  |  t  ¡ |¡ d S rŠ   )	r9   r}   r   rŒ   ZassertNotEqualre   r:   rc   r   )r    r   r€   r   r   r   Útest_temp_cwd__name_none&  s    .z$TestSupport.test_temp_cwd__name_nonec                 C   s   |   t ddddœ¡d¡ d S )Né   é   rr   )r‘   r’   rr   z{1: 1, 2: 2, 3: 3})r   r   Zsortdictr)   r   r   r   Útest_sortdict/  s    zTestSupport.test_sortdictc                 C   sT   t  ¡ }|  t¡}t |d¡ W d   ƒ n1 s40    Y  |  |jjtj	¡ d S )Ns   foo)
r   Zmake_bad_fdr&   ÚOSErrorr9   Úwriter   Ú	exceptionÚerrnoÚEBADF)r    ÚfdÚcmr   r   r   Útest_make_bad_fd2  s    *zTestSupport.test_make_bad_fdc                 C   sL   t j| dddd |  t¡ t  | d¡ W d   ƒ n1 s>0    Y  d S )Nz	def classrr   é   )ÚlinenoÚoffsetzx=1)r   Zcheck_syntax_errorr&   ÚAssertionErrorr)   r   r   r   Útest_check_syntax_error8  s    z#TestSupport.test_check_syntax_errorc                 C   s@   dd l }t d¡ | d¡ W d   ƒ n1 s20    Y  d S )Nr   Zasyncore)rP   r   ZCleanImportr%   )r    rP   r   r   r   Útest_CleanImport=  s    zTestSupport.test_CleanImportc                 C   sh   t  dd¡, |  dtj¡ |  dtj¡ W d   ƒ n1 s>0    Y  |  dtj¡ |  dtj¡ d S )Nr$   Zbar)r   ZDirsOnSysPathr1   r-   r:   r3   r)   r   r   r   Útest_DirsOnSysPathB  s
    ,zTestSupport.test_DirsOnSysPathc                 C   sD   t  ¡ }tdƒ W d   ƒ n1 s&0    Y  |  | ¡ d¡ d S )NÚhelloúhello
)r   Zcaptured_stdoutrM   r   Úgetvalue)r    r.   r   r   r   Útest_captured_stdoutI  s    
&z TestSupport.test_captured_stdoutc                 C   sJ   t  ¡ }tdtjd W d   ƒ n1 s,0    Y  |  | ¡ d¡ d S )Nr£   rJ   r¤   )r   Zcaptured_stderrrM   r-   Ústderrr   r¥   )r    r§   r   r   r   Útest_captured_stderrN  s    
,z TestSupport.test_captured_stderrc                 C   sR   t  ¡ *}| d¡ | d¡ tƒ }W d   ƒ n1 s80    Y  |  |d¡ d S )Nr¤   r   r£   )r   Zcaptured_stdinr•   ÚseekÚinputr   )r    ÚstdinZcapturedr   r   r   Útest_captured_stdinS  s
    


$zTestSupport.test_captured_stdinc                 C   s   t  ¡  d S r   )r   Ú
gc_collectr)   r   r   r   Útest_gc_collect[  s    zTestSupport.test_gc_collectc                 C   s   |   t ¡ t¡ d S r   )ZassertIsInstancer   Zpython_is_optimizedÚboolr)   r   r   r   Útest_python_is_optimized^  s    z$TestSupport.test_python_is_optimizedc                 C   s  G dd„ dƒ}|ƒ }d|_ t |dd¡*}|  |j d¡ |  |d¡ W d   ƒ n1 sX0    Y  |  |j d¡ t |dd¡(}|  |jd¡ |  |¡ W d   ƒ n1 s¬0    Y  |  t|dƒ¡ t |dd¡ |`W d   ƒ n1 sî0    Y  |  t|dƒ¡ d S )Nc                   @   s   e Zd ZdS )z'TestSupport.test_swap_attr.<locals>.ObjN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚObjb  s   r´   rr   Úxrœ   Úy)rµ   r   rC   r   r¶   ÚassertIsNoner8   Úhasattr)r    r´   Úobjrµ   r¶   r   r   r   Útest_swap_attra  s    *("zTestSupport.test_swap_attrc                 C   sú   ddi}t  |dd¡,}|  |d d¡ |  |d¡ W d   ƒ n1 sH0    Y  |  |d d¡ t  |dd¡*}|  |d d¡ |  |¡ W d   ƒ n1 s 0    Y  |  d|¡ t  |dd¡ |d= W d   ƒ n1 sà0    Y  |  d|¡ d S )Nrµ   rr   rœ   r¶   )r   Z	swap_itemr   r·   r3   )r    ÚDrµ   r¶   r   r   r   Útest_swap_itemr  s    *($zTestSupport.test_swap_itemc                   @   s   e Zd ZdZdZdZdZdS )zTestSupport.RefClassN)r±   r²   r³   Ú
attribute1Ú
attribute2Z_hidden_attribute1Ú__magic_1__r   r   r   r   ÚRefClass€  s   rÀ   c                   @   s   e Zd ZdZdZdZdZdS )zTestSupport.OtherClassN)r±   r²   r³   r¾   Ú
attribute3r¿   Ú__magic_2__r   r   r   r   Ú
OtherClass†  s   rÃ   c                 C   sB   t  | j| j¡}|  dh|¡ t  | j| j¡}|  ddh|¡ d S )Nr½   rÁ   rÂ   )r   Údetect_api_mismatchrÀ   rÃ   r   )r    Úmissing_itemsr   r   r   Útest_detect_api_mismatchŒ  s    ÿÿz$TestSupport.test_detect_api_mismatchc                 C   sP   g d¢}t j| j| j|d}|  tƒ |¡ t j| j| j|d}|  tƒ |¡ d S )N)r½   rÁ   rÂ   Znot_in_either)Úignore)r   rÄ   rÀ   rÃ   r   Úset)r    rÇ   rÅ   r   r   r   Ú test_detect_api_mismatch__ignore•  s    
ÿ
ÿz,TestSupport.test_detect_api_mismatch__ignorec                 C   sX   dh}dh}t j| t||d ddh}h d£}t j| td||d |  tt j| t¡ d S )NÚtempdirÚtemplate)ÚextraÚ	blacklistZTextTestResultZinstallHandler>   ZTestProgramZBaseTestSuiteZ
load_tests)zunittest.resultzunittest.casezunittest.suitezunittest.loaderzunittest.mainzunittest.runnerzunittest.signalszunittest.async_case)r   Zcheck__all__r`   r'   r&   rŸ   )r    rÌ   rÍ   r   r   r   Útest_check__all__   s     ýù	zTestSupport.test_check__all__ÚwaitpidÚWNOHANGz need os.waitpid() and os.WNOHANGc                 C   sâ   t  ¡  t ¡ }|dkr"t d¡ t ¡ }t ¡ t j }t j}zŽdt _t	 
¡ }t ¡ |krd|  d¡ tj}z|t_t  ¡  W |t_n|t_0 t jr”q t d¡ qNd| }|  || ¡ ¡ |  t j¡ W |t _n|t _0 t  ¡  d S )Nr   FÚtimeoutgš™™™™™¹?z2Warning -- reap_children() reaped child process %s)r   Úreap_childrenr9   rx   Ú_exitÚtimeÚ	monotonicZSHORT_TIMEOUTZenvironment_alteredÚioÚStringIOZfailr-   Ú
__stderr__Úsleepr1   r¥   re   )r    ÚpidÚt0ÚdeadlineZwas_alteredr§   Ú
old_stderrrˆ   r   r   r   Útest_reap_children¶  s2    


zTestSupport.test_reap_childrenNc                 C   s†   d|› d|› d}t jg|¢d‘|‘}dd„ tj ¡ D ƒ}tj|tjtjd|d}|d u r^|}|  	|j
 ¡ t|ƒ¡ |  	|jd	¡ d S )
Nzfrom test.support import z; print(repr(z()))ry   c                 S   s    i | ]\}}|  d ¡s||“qS )ZPYTHON)ru   )r   ÚkeyÚvaluer   r   r   Ú
<dictcomp>ê  s   
ÿz-TestSupport.check_options.<locals>.<dictcomp>T)r.   r§   Úuniversal_newlinesÚenvr   )r-   Ú
executabler9   ÚenvironÚitemsÚ
subprocessÚrunÚPIPEÚDEVNULLr   r.   ÚrstripÚreprÚ
returncode)r    ÚargsÚfuncÚexpectedÚcodeÚcmdrã   Úprocr   r   r   Úcheck_optionsç  s    üzTestSupport.check_optionsc                 C   s²   g dgdgdgdgdgdgdgdgd	gd
gdgddgg d¢ddgddgddgddgddgfD ]<}| j |d |  |d¡ W d   ƒ q\1 sŽ0    Y  q\|  g d¢ddg¡ d S )Nz-Bú-sz-Sú-Ez-vz-bz-qú-Iz-bbz-vvvú-Wignoreú-XÚdev)rø   rù   rú   ÚfaulthandlerÚ
importtimeÚshowrefcountÚtracemallocztracemalloc=3©ÚoptsZargs_from_interpreter_flags)r÷   rö   rõ   ©ZsubTestrô   ©r    r   r   r   r   Ú test_args_from_interpreter_flagsö  s2    è,ÿz,TestSupport.test_args_from_interpreter_flagsc              	   C   sT   g dgdgdgfD ]<}| j |d |  |d¡ W d   ƒ q1 sD0    Y  qd S )Nz-Oz-OOz-OOOOrÿ   Z!optim_args_from_interpreter_flagsr  r  r   r   r   Ú&test_optim_args_from_interpreter_flags  s    ûz2TestSupport.test_optim_args_from_interpreter_flagsc                 C   sô  G dd„ dƒ}|dƒ}|dƒ}t  t dd ¡Æ t  g ¡ |  t  |¡¡ |  t  |¡¡ t  d d ¡ |  t  |¡¡ |  t  |¡¡ t  | ¡ gd ¡ |  t  |¡¡ |  t  |¡¡ t  dgd ¡ |  t  |¡¡ |  t  |¡¡ t  dgd ¡ |  t  |¡¡ |  t  |¡¡ t  dgd ¡ |  t  |¡¡ t  d	gd ¡ |  t  |¡¡ t  d
gd ¡ |  t  |¡¡ |  t  |¡¡ t  | ¡ | ¡ gd ¡ |  t  |¡¡ |  t  |¡¡ t  ddgd ¡ |  t  |¡¡ |  t  |¡¡ W d   ƒ n1 sü0    Y  t  t dd ¡È t jg d |  t  |¡¡ |  t  |¡¡ t  d d ¡ |  t  |¡¡ |  t  |¡¡ t  d | ¡ g¡ |  t  |¡¡ |  t  |¡¡ t  d dg¡ |  t  |¡¡ |  t  |¡¡ t  d dg¡ |  t  |¡¡ |  t  |¡¡ t  d dg¡ |  t  |¡¡ t  d d	g¡ |  t  |¡¡ t  d d
g¡ |  t  |¡¡ |  t  |¡¡ t  d | ¡ | ¡ g¡ |  t  |¡¡ |  t  |¡¡ t  d ddg¡ |  t  |¡¡ |  t  |¡¡ W d   ƒ n1 sæ0    Y  d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z)TestSupport.test_match_test.<locals>.Testc                 S   s
   || _ d S r   ©Útest_id)r    r  r   r   r   Ú__init__&  s    z2TestSupport.test_match_test.<locals>.Test.__init__c                 S   s   | j S r   r  r)   r   r   r   Úid)  s    z,TestSupport.test_match_test.<locals>.Test.idN)r±   r²   r³   r  r  r   r   r   r   ÚTest%  s   r	  z"test.test_os.FileTests.test_accessz'test.test_os.Win32ErrorTests.test_chdirZ_match_test_funcZtest_osztest_*Z	filetestsZ	FileTestsz*test_os.*.test_*Útest_accessZ	DONTMATCH)Úignore_patterns)r   rC   Zset_match_testsre   Z
match_testr  r8   )r    r	  r
  Z
test_chdirr   r   r   Útest_match_test$  sz    
0zTestSupport.test_match_testc              	   C   sN   t  ¡ }t ttj¡}zt  ¡ }W t |¡ nt |¡ 0 |  || d¡ d S )Nrr   )r   Zfd_countr9   r5   Ú__file__ÚO_RDONLYrX   r   )r    Ústartr™   Zmorer   r   r   Útest_fd_count  s    
zTestSupport.test_fd_countc                 C   sF   t  ¡ }tj}z|t_t |¡ W |t_n|t_0 |  | ¡ |¡ d S r   )rÖ   r×   r-   rØ   r   Zprint_warningr   r¥   )r    rˆ   rð   r§   rÝ   r   r   r   Úcheck_print_warning™  s    zTestSupport.check_print_warningc                 C   s   |   dd¡ |   dd¡ d S )Nrˆ   zWarning -- msg
za
bzWarning -- a
Warning -- b
)r  r)   r   r   r   Útest_print_warning¥  s    ÿÿzTestSupport.test_print_warning)N);r±   r²   r³   Úclassmethodr   r   r"   r*   r+   r,   r'   Úskipr/   r4   r=   rI   rT   r[   r]   r_   rh   ri   ro   rw   Z
skipUnlessr¸   r9   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  r  r  r  r   r   r   r   r      sr   





		ÿ
/
"ir   c                   C   s   t jdtdd d S )Nz€This is used in test_support test to ensure support.ignore_deprecations_from() works as expected. You should not be seeing this.r   )Ú
stacklevel)r   r   r   r   r   r   r   r   Ä  s
    ûr   Ú__main__)r—   rP   rÖ   r9   rn   rU   rE   rç   r-   r`   rz   rÔ   r'   r   Útestr   Ztest.supportr   r   r6   ZTestCaser   r   r±   Úmainr   r   r   r   Ú<module>   s4        2