U
    çÑÙgv`  ã                   @   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 ejZG dd„ dejƒZdd„ Zedkr¶eƒ  dS )	é    N)Úsupport)Úscript_helperc                   @   sÌ  e Z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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)G dHdI„ dIƒZ*G dJdK„ dKƒZ+dLdM„ Z,dNdO„ Z-dPdQ„ Z.e eedRƒo€eedSƒdT¡dUdV„ ƒZ/dfdXdY„Z0dZd[„ Z1d\d]„ Z2d^d_„ Z3d`da„ Z4dbdc„ Z5ddde„ Z6dWS )gÚTestSupportc                 C   s    t  d¡ |  tjt jd¡ d S )NÚftplibÚfoo)r   Úimport_moduleÚassertRaisesÚunittestÚSkipTest©Úself© r   ú'/usr/lib/python3.8/test/test_support.pyÚtest_import_module   s    
zTestSupport.test_import_modulec                 C   s   t  d¡ d S )Nr   )r   Zimport_fresh_moduler   r   r   r   Útest_import_fresh_module   s    z$TestSupport.test_import_fresh_modulec                 C   s.   |   t | d¡| j¡ |  tjtj| d¡ d S )NÚtest_get_attributer   )ÚassertEqualr   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 ©N)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)r   ÚassertInr   Úmodulesr   ZunloadÚassertNotIn)r   r   r   r   r   Útest_unload'   s    
zTestSupport.test_unloadc              	   C   s@   t tdƒ}W 5 Q R X t t¡ |  tj t¡¡ t t¡ d S )NÚw)ÚopenÚTESTFNr   ÚunlinkÚassertFalseÚosÚpathÚexists)r   Úfr   r   r   Útest_unlink-   s
    

zTestSupport.test_unlinkc              	   C   s$  t jd }tj |d¡}t |¡ t |¡ t  |¡ |  tj |¡¡ t  	t dd¡ t  |¡ W 5 Q R X t |¡ t |¡ t 
|tjtjB ¡ t  	t dd¡ t  |¡ W 5 Q R X |  tj |¡¡ t |¡ t |¡ t 
|d¡ t  	t dd¡ t  |¡ W 5 Q R X |  tj |¡¡ d S )NÚdZsubdirÚverboser   )r   r   r!   r"   ÚjoinÚmkdirÚrmtreer    r#   Ú	swap_attrÚchmodÚstatÚS_IRUSRÚS_IXUSR)r   ÚdirpathZ
subdirpathr   r   r   Útest_rmtree4   s(    







zTestSupport.test_rmtreec              	   C   s˜   t d }t|dƒ}td|d W 5 Q R X tj dtj¡ t 	¡  z2tt ƒ}|  t tj¡ t
 t ¡ |  t tj¡ W 5 tjd= t
 |¡ t
 d¡ X d S )Nz.pyr   zfoo = 1©Úfiler   Ú__pycache__)r   r   Úprintr   r"   Úinsertr!   ÚcurdirÚ	importlibÚinvalidate_cachesr   r   r*   Ú
__import__r   r   Zforgetr   )r   Zmod_filenamer$   Úmodr   r   r   Útest_forgetL   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_HOST]   s    zTestSupport.test_HOSTc                 C   s$   t  ¡ }t t j|f¡}| ¡  d S r   )r   Zfind_unused_portr=   r>   r?   r@   )r   ZportrB   r   r   r   Útest_find_unused_porta   s    z!TestSupport.test_find_unused_portc                 C   s&   t   ¡ }t |¡ | ¡  | ¡  d S r   )r=   r   Z	bind_portZlistenr@   rA   r   r   r   Útest_bind_portf   s    
zTestSupport.test_bind_portc              	   C   s   t  ¡ }tj |¡}zjtj |d¡}|  tj 	|¡¡ t 
|¡$}|  ||¡ |  tj 	|¡¡ W 5 Q R X |  tj 	|¡¡ W 5 t |¡ X dS )z8Test that temp_dir() creates and destroys its directory.ZtempN)ÚtempfileÚmkdtempr!   r"   Úrealpathr   r*   r(   r    ÚisdirÚtemp_dirr   Ú
assertTrue)r   Ú
parent_dirr"   Ú	temp_pathr   r   r   Útest_temp_dirn   s    zTestSupport.test_temp_dirc              	   C   s<   t  ¡ }|  tj |¡¡ W 5 Q R X |  tj |¡¡ dS )zTest passing no path.N)r   rJ   rK   r!   r"   rI   r    )r   rM   r   r   r   Útest_temp_dir__path_none}   s    
z$TestSupport.test_temp_dir__path_nonec              	   C   sd   dd„ }t  ¡ }tj |¡}z6|  tj |¡¡ |  	t
||¡ |  tj |¡¡ W 5 t |¡ X dS )z-Test passing a directory that already exists.c              	   S   s"   t  | ¡}tdƒ‚W 5 Q R X d S ©Nzshould not get here)r   rJ   Ú	Exception)r"   rM   r   r   r   Úcall_temp_dir…   s    zMTestSupport.test_temp_dir__existing_dir__quiet_default.<locals>.call_temp_dirN)rF   rG   r!   r"   rH   Úshutilr*   rK   rI   r   ÚFileExistsError)r   rR   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 ¡ <}tj	|dd}|  
||¡ W 5 Q R X dd„ |jD ƒ}W 5 Q R X |  tj |¡¡ W 5 t |¡ X |  
t|ƒd|¡ |d }|  | d|›d¡|¡ d	S )
z=Test passing a directory that already exists with quiet=True.T©Úquietc                 S   s   g | ]}t |jƒ‘qS r   ©ÚstrÚmessage©Ú.0r   r   r   r   Ú
<listcomp>œ   s     zGTestSupport.test_temp_dir__existing_dir__quiet_true.<locals>.<listcomp>é   r   z5tests may fail, unable to create temporary directory ú: N)rF   rG   r!   r"   rH   rS   r*   r   Úcheck_warningsrJ   r   ÚwarningsrK   rI   ÚlenÚ
startswith)r   r"   ÚrecorderrM   ra   Úwarnr   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 )z?Test that a forked child process does not remove the directory.ú-ca§  
            import os
            from test import support
            with support.temp_cwd() as temp_path:
                pid = os.fork()
                if pid != 0:
                    # parent process (child has pid == 0)

                    # wait for the child to terminate
                    (pid, status) = os.waitpid(pid, 0)
                    if status != 0:
                        raise AssertionError(f"Child process failed with exit "
                                             f"status indication 0x{status:x}.")

                    # 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.")
        N)r   Zassert_python_okÚtextwrapZdedentr   r   r   r   Útest_temp_dir__forked_child¨   s    z'TestSupport.test_temp_dir__forked_childc              
   C   sb   t  ¡ }t ¡ 8}t |¡"}|  ||¡ |  t  ¡ |¡ W 5 Q R X W 5 Q R X |  t  ¡ |¡ d S r   )r!   Úgetcwdr   rJ   Ú
change_cwdr   )r   Úoriginal_cwdrM   Únew_cwdr   r   r   Útest_change_cwdÅ   s    
$zTestSupport.test_change_cwdc              	   C   sT   t  ¡ }dd„ }t ¡ "}t j |d¡}|  t||¡ W 5 Q R X |  t  ¡ |¡ dS )z&Test passing a non-existent directory.c              	   S   s"   t  | ¡}tdƒ‚W 5 Q R X d S rP   )r   rl   rQ   )r"   rn   r   r   r   Úcall_change_cwdÓ   s    zFTestSupport.test_change_cwd__non_existent_dir.<locals>.call_change_cwdÚdoes_not_existN)	r!   rk   r   rJ   r"   r(   r   ÚFileNotFoundErrorr   )r   rm   rp   rL   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 ¡ n}t j |d¡}t ¡ L}tj|dd"}|  ||¡ |  t  ¡ |¡ W 5 Q R X dd„ |j	D ƒ}W 5 Q R X W 5 Q R X |  t
|ƒd|¡ |d }|  | d|›d	¡|¡ d
S )z6Test passing a non-existent directory with quiet=True.rq   TrV   c                 S   s   g | ]}t |jƒ‘qS r   rX   r[   r   r   r   r]   è   s     zMTestSupport.test_change_cwd__non_existent_dir__quiet_true.<locals>.<listcomp>r^   r   úBtests may fail, unable to change the current working directory to r_   N)r!   rk   r   rJ   r"   r(   r`   rl   r   ra   rb   rK   rc   )r   rm   rL   Zbad_dirrd   rn   ra   re   r   r   r   Ú-test_change_cwd__non_existent_dir__quiet_trueÞ   s    

$ýz9TestSupport.test_change_cwd__non_existent_dir__quiet_truec              
   C   s~   t d }t ¡ 0}tj|dd W 5 Q R X dd„ |jD ƒ}W 5 Q R X |  t|ƒd|¡ |d }|  | d|›d	¡|¡ d
S )z0Check the warning message when os.chdir() fails.Z_does_not_existT)r"   rW   c                 S   s   g | ]}t |jƒ‘qS r   rX   r[   r   r   r   r]   ù   s     z>TestSupport.test_change_cwd__chdir_warning.<locals>.<listcomp>r^   r   rt   r_   N)	r   r   r`   rl   ra   r   rb   rK   rc   )r   r"   rd   ZmessagesÚmsgr   r   r   Útest_change_cwd__chdir_warningó   s    

ýz*TestSupport.test_change_cwd__chdir_warningc              	   C   s^   t  ¡ }tjtd |  t j t  ¡ ¡t¡ W 5 Q R X |  t j 	t¡¡ |  t  ¡ |¡ d S )N©Úname)
r!   rk   r   Útemp_cwdr   r   r"   Úbasenamer    r#   )r   Úherer   r   r   Útest_temp_cwd  s
    "zTestSupport.test_temp_cwdc              	   C   sb   t  ¡ }tjdd4}|  ||¡ |  t j |¡¡ |  t  ¡ |¡ W 5 Q R X |  t  ¡ |¡ dS )z Test passing None to temp_cwd().Nrx   )	r!   rk   r   rz   ZassertNotEqualrK   r"   rI   r   )r   rm   rn   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é   é   r^   )r   r€   r^   z{1: 1, 2: 2, 3: 3})r   r   Zsortdictr   r   r   r   Útest_sortdict  s    zTestSupport.test_sortdictc              	   C   s@   t  ¡ }|  t¡}t |d¡ W 5 Q R X |  |jjtj	¡ d S )Ns   foo)
r   Zmake_bad_fdr   ÚOSErrorr!   Úwriter   Z	exceptionÚerrnoZEBADF)r   ÚfdÚcmr   r   r   Útest_make_bad_fd  s    zTestSupport.test_make_bad_fdc              	   C   s8   t j| dddd |  t¡ t  | d¡ W 5 Q R X d S )Nz	def classr^   é   )ÚlinenoÚoffsetzx=1)r   Zcheck_syntax_errorr   ÚAssertionErrorr   r   r   r   Útest_check_syntax_error  s    z#TestSupport.test_check_syntax_errorc              	   C   s,   dd l }t d¡ | d¡ W 5 Q R X d S )Nr   Zasyncore)r8   r   ZCleanImportr   )r   r8   r   r   r   Útest_CleanImport#  s    zTestSupport.test_CleanImportc              	   C   sT   t  dd¡" |  dtj¡ |  dtj¡ W 5 Q R X |  dtj¡ |  dtj¡ d S )Nr   Zbar)r   ZDirsOnSysPathr   r   r"   r   r   r   r   r   Útest_DirsOnSysPath(  s
    zTestSupport.test_DirsOnSysPathc              	   C   s0   t  ¡ }tdƒ W 5 Q R X |  | ¡ d¡ d S )NÚhelloúhello
)r   Zcaptured_stdoutr5   r   Úgetvalue)r   r   r   r   r   Útest_captured_stdout/  s    
z TestSupport.test_captured_stdoutc              	   C   s6   t  ¡ }tdtjd W 5 Q R X |  | ¡ d¡ d S )Nr   r2   r   )r   Zcaptured_stderrr5   r   Ústderrr   r‘   )r   r“   r   r   r   Útest_captured_stderr4  s    
z TestSupport.test_captured_stderrc              	   C   s>   t  ¡  }| d¡ | d¡ tƒ }W 5 Q R X |  |d¡ d S )Nr   r   r   )r   Zcaptured_stdinrƒ   ÚseekÚinputr   )r   ÚstdinZcapturedr   r   r   Útest_captured_stdin9  s
    


zTestSupport.test_captured_stdinc                 C   s   t  ¡  d S r   )r   Z
gc_collectr   r   r   r   Útest_gc_collectA  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_optimizedD  s    z$TestSupport.test_python_is_optimizedc              	   C   sÐ   G dd„ dƒ}|ƒ }d|_ t |dd¡ }|  |j d¡ |  |d¡ W 5 Q R X |  |j d¡ t |dd¡}|  |jd¡ |  |¡ W 5 Q R X |  t|dƒ¡ t |dd¡
 |`W 5 Q R X |  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   ÚObjH  s   rŸ   r^   Úxrˆ   Úy)r    r   r+   r   r¡   ÚassertIsNoner    Úhasattr)r   rŸ   Úobjr    r¡   r   r   r   Útest_swap_attrG  s    zTestSupport.test_swap_attrc              	   C   s¾   ddi}t  |dd¡"}|  |d d¡ |  |d¡ W 5 Q R X |  |d d¡ t  |dd¡ }|  |d d¡ |  |¡ W 5 Q R X |  d|¡ t  |dd¡ |d= W 5 Q R X |  d|¡ d S )Nr    r^   rˆ   r¡   )r   Z	swap_itemr   r¢   r   )r   ÚDr    r¡   r   r   r   Útest_swap_itemX  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   ÚRefClassf  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   Ú
OtherClassl  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_mismatchr  s    ÿÿz$TestSupport.test_detect_api_mismatchc                 C   sT   ddddg}t j| j| j|d}|  tƒ |¡ t j| j| j|d}|  tƒ |¡ d S )Nr¨   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   sZ   dh}dh}t j| t||d ddh}dddh}t j| td	||d |  tt j| t¡ d S )
NZtempdirÚtemplate)ÚextraÚ	blacklistZTextTestResultZinstallHandlerZ
load_testsZTestProgramZBaseTestSuite)zunittest.resultzunittest.casezunittest.suitezunittest.loaderzunittest.mainzunittest.runnerzunittest.signalszunittest.async_case)r   Zcheck__all__rF   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 ¡ d }t j}z‚dt _t 	¡ }t ¡ |krb|  
d¡ tj}z|t_t  ¡  W 5 |t_X t jrŒq˜t d¡ qLd| }|  || ¡ ¡ |  t j¡ W 5 |t _X t  ¡  d S )Nr   g      N@FZtimeoutgš™™™™™¹?z2Warning -- reap_children() reaped child process %s)r   Zreap_childrenr!   rg   Ú_exitÚtimeÚ	monotonicZenvironment_alteredÚioÚStringIOZfailr   Ú
__stderr__Úsleepr   r‘   rK   )r   ÚpidZt0ZdeadlineZwas_alteredr“   Ú
old_stderrrv   r   r   r   Útest_reap_childrenœ  s2    

zTestSupport.test_reap_childrenNc                 C   s„   d|› d|› d}t jf|d|f•}dd„ tj ¡ D ƒ}tj|tjtjd|d}|d kr\|}|  	|j
 ¡ t|ƒ¡ |  	|jd	¡ d S )
Nzfrom test.support import z; print(repr(z()))rh   c                 S   s    i | ]\}}|  d ¡s||“qS )ZPYTHON)rc   )r\   ÚkeyÚvaluer   r   r   Ú
<dictcomp>Ð  s    
ÿ z-TestSupport.check_options.<locals>.<dictcomp>T)r   r“   Zuniversal_newlinesÚenvr   )r   Ú
executabler!   ÚenvironÚitemsÚ
subprocessÚrunÚPIPEZ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dddgddgddgddgddgddgddgfD ](}| j |d |  |d¡ W 5 Q R X qd|  dddgddg¡ d S )Nz-Bz-sz-Sz-Ez-vz-bz-qz-Iz-bbz-vvvz-Wignorez-XZdevZfaulthandlerZ
importtimeZshowalloccountZshowrefcountÚtracemallocztracemalloc=3©ÚoptsZargs_from_interpreter_flags©ZsubTestrØ   ©r   rÛ   r   r   r   Ú test_args_from_interpreter_flagsÜ  s4    çÿz,TestSupport.test_args_from_interpreter_flagsc              
   C   s@   g dgdgdgfD ](}| j |d |  |d¡ W 5 Q R X 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 5 Q R X 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 5 Q R X 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)Zignore_patterns)r   r+   Zset_match_testsrK   Z
match_testrã   r    )r   rä   rå   Z
test_chdirr   r   r   Útest_match_test  sz    
zTestSupport.test_match_testc              	   C   sD   t  ¡ }t ttj¡}zt  ¡ }W 5 t |¡ X |  || d¡ d S )Nr^   )r   Zfd_countr!   r   Ú__file__ÚO_RDONLYr@   r   )r   Ústartr…   Zmorer   r   r   Útest_fd_countt  s    zTestSupport.test_fd_countc                 C   s@   t  ¡ }tj}z|t_t |¡ W 5 |t_X |  | ¡ |¡ d S r   )r¾   r¿   r   rÀ   r   Zprint_warningr   r‘   )r   rv   rÔ   r“   rÃ   r   r   r   Úcheck_print_warning€  s    zTestSupport.check_print_warningc                 C   s   |   dd¡ |   dd¡ d S )Nrv   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)7rœ   r   rž   r   r   r   r	   Úskipr   r   r%   r1   r<   rC   rD   rE   rN   rO   rU   rf   Z
skipUnlessr£   r!   rj   ro   rs   ru   rw   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      sh   


		ÿ
/
#ir   c                  C   s   t g} tj| Ž  d S r   )r   r   Zrun_unittest)Ztestsr   r   r   Ú	test_main¬  s    rî   Ú__main__)Ú
contextlibr„   r8   r¾   r!   rS   r=   r-   rÌ   r   rF   ri   r¼   r	   Ztestr   Ztest.supportr   r   ZTestCaser   rî   rœ   r   r   r   r   Ú<module>   s2        