
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    Œ=Ý_D,  ã                   @   sÊ  d Z ddlm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	zddl
Z
W n ek
rl   dZ
Y nX zddlZW n ek
r’   dZY nX ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ dZdZe ¡ �pdZe �o*eƒ Zej  ej !e"¡¡Z#e	j$j%Z%d$dd„Z&G dd„ dƒZ'G dd„ de	j(ƒZ)G dd„ de	j*ƒZ+G dd„ de+ƒZ,d%dd„Z-dd„ Z.dd „ Z/d!d"„ Z0e1d#k�rÆe0ƒ  dS )&aA  
Unit test runner, providing new features on top of unittest module:
- colourized output
- parallel run (UNIX only)
- print failures/tracebacks on CTRL+C
- re-run failed tests only (make test-failed)

Invocation examples:
- make test
- make test-failed

Parallel:
- make test-parallel
- make test-process ARGS=--parallel
é    )Úprint_functionN)Úhilite)Úprint_color)Úterm_supports_colors)Úsuper)Ú
CI_TESTING)Úimport_module_by_path)Úprint_sysinfo)Úreap_children)Úsafe_rmpathé   z.failed-tests.txté   Fc                 C   sB   |d kr|dkrt jnt j}tr2t| |||d� nt| |d� d S )NÚred)ÚboldÚfile)r   )ÚsysÚstderrÚstdoutÚ
USE_COLORSr   Úprint)ÚmsgÚcolorr   r   © r   úF/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/runner.pyÚcprint>   s
    r   c                   @   sX   e Zd ZeZdgZdejkr,e dddg¡ dd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ ZdS )Ú
TestLoaderztest_memleaks.pyZWHEELHOUSE_UPLOADER_USERNAMEztest_osx.pyztest_linux.pyztest_posix.pyc                    s   ‡ fdd„t  ˆ j¡D ƒS )Nc                    s:   g | ]2}|  d ¡r| d¡r|ˆ jkrtj ˆ j|¡‘qS )Ztest_ú.py)Ú
startswithÚendswithÚ
skip_filesÚosÚpathÚjoinÚtestdir)Ú.0Úx©Úselfr   r   Ú
<listcomp>O   s
   
 

ýz,TestLoader._get_testmods.<locals>.<listcomp>)r    Úlistdirr#   r&   r   r&   r   Ú_get_testmodsN   s    

ÿzTestLoader._get_testmodsc                 c   sN   |   ¡ D ]@}t|ƒ}t|ƒD ]*}t||ƒ}t|tƒrt|tjƒr|V  qqdS )zgIterate over all test files in this directory and return
        all TestCase classes in them.
        N)	r*   r   ÚdirÚgetattrÚ
isinstanceÚtypeÚ
issubclassÚunittestÚTestCase)r'   r!   ÚmodÚnameÚobjr   r   r   Ú_iter_testmod_classesT   s    


ÿz TestLoader._iter_testmod_classesc                 C   s,   t  ¡ }|  ¡ D ]}t|ƒ}| |¡ q|S ©N)r0   Ú	TestSuiter5   ÚloadTestsFromTestCaseÚaddTest)r'   Úsuiter4   Útestr   r   r   Úall`   s
    zTestLoader.allc              	   C   s^   t  ¡ }tj t¡s|S ttdƒ�}| ¡  ¡ }W 5 Q R X |D ]}t j	 
|¡}| |¡ q>|S )NÚrt)r0   r7   r    r!   ÚisfileÚFAILED_TESTS_FNAMEÚopenÚreadÚsplitÚdefaultTestLoaderÚloadTestsFromNamer9   )r'   r:   ÚfÚnamesÚnr;   r   r   r   Úlast_failedg   s    zTestLoader.last_failedc                 C   s.   |  d¡r"tj tj |¡¡d }tj |¡S )Nr   r   )r   r    r!   ÚsplitextÚbasenamer0   rC   rD   )r'   r3   r   r   r   Ú	from_names   s    
zTestLoader.from_nameN)Ú__name__Ú
__module__Ú__qualname__ÚHEREr#   r   r    ÚenvironÚextendr*   r5   r<   rH   rK   r   r   r   r   r   G   s   
r   c                       s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Z‡ fd	d
„Z‡  ZS )ÚColouredResultc                 C   s   t j | |¡ tddƒ d S )NZOKÚgreen)r0   Ú
TestResultÚ
addSuccessr   )r'   r;   r   r   r   rU   {   s    zColouredResult.addSuccessc                 C   s"   t j | ||¡ tdddd� d S )NÚERRORr   T©r   )r0   rT   ÚaddErrorr   ©r'   r;   Úerrr   r   r   rX      s    zColouredResult.addErrorc                 C   s   t j | ||¡ tddƒ d S )NZFAILr   )r0   rT   Ú
addFailurer   rY   r   r   r   r[   ƒ   s    zColouredResult.addFailurec                 C   s&   t j | ||¡ td| ¡  dƒ d S )Nzskipped: %sÚbrown)r0   rT   ÚaddSkipr   Ústrip)r'   r;   Úreasonr   r   r   r]   ‡   s    zColouredResult.addSkipc                    s$   t |d|dkd�}tƒ  ||¡ d S )Nr   rV   rW   )r   r   ÚprintErrorList)r'   ZflavourÚerrors©Ú	__class__r   r   r`   ‹   s    zColouredResult.printErrorList)	rL   rM   rN   rU   rX   r[   r]   r`   Ú__classcell__r   r   rb   r   rR   y   s
   rR   c                       sf   e Zd ZdZerenejZ‡ fdd„Z	‡ fdd„Z
dd„ Zdd	„ Z‡ fd
d„Zdd„ Zdd„ Z‡  ZS )ÚColouredTextRunnerz”
    A coloured text runner which also prints failed tests on KeyboardInterrupt
    and save failed tests in a file so that they can be re-run.
    c                    s   t ƒ j||Ž tƒ | _d S r6   )r   Ú__init__ÚsetÚfailed_tnames)r'   ÚargsÚkwargsrb   r   r   rf   —   s    zColouredTextRunner.__init__c                    s   t ƒ  ¡ | _| jS r6   )r   Ú_makeResultÚresultr&   rb   r   r   rk   ›   s    zColouredTextRunner._makeResultc              	   C   s:   | j r6ttdƒ� }| j D ]}| |d ¡ qW 5 Q R X d S )NÚwtÚ
)rh   r@   r?   Úwrite)r'   rE   Útnamer   r   r   Ú_write_last_failed¡   s    
z%ColouredTextRunner._write_last_failedc                 C   s6   |  ¡ s2|j|j D ]}|d  ¡ }| j |¡ qd S )Nr   )ÚwasSuccessfulra   ÚfailuresÚidrh   Úadd)r'   rl   Útrp   r   r   r   Ú_save_result§   s    zColouredTextRunner._save_resultc              	      sV   zt ƒ  |¡}W n2 ttfk
rB   | jj}| ¡  t d¡‚Y nX |  	|¡ |S d S )Nr   )
r   ÚrunÚKeyboardInterruptÚ
SystemExitÚrunnerrl   ÚprintErrorsr   Úexitrw   ©r'   r:   rl   rb   r   r   Ú_run­   s    
zColouredTextRunner._runc                 C   sJ   |r&t dddd� ttƒ t d¡ n t dddd� |  ¡  t d¡ d S )	NÚSUCCESSrS   TrW   r   ZFAILEDr   r   )r   r   r?   r   r}   rq   )r'   Úsuccessr   r   r   Ú_exit¸   s    zColouredTextRunner._exitc                 C   s   |   |¡}|  | ¡ ¡ d S r6   )r   r‚   rr   r~   r   r   r   rx   Â   s    
zColouredTextRunner.run)rL   rM   rN   Ú__doc__r   rR   r0   ÚTextTestResultZresultclassrf   rk   rq   rw   r   r‚   rx   rd   r   r   rb   r   re   �   s   
re   c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚParallelRunnerc                    s0   ‡ fdd„}t j‰ |tj _t t¡}t | |¡S )Nc                    s   ˆ | |ƒ}t  |j¡ |S r6   )ÚatexitÚregisterÚclose)ÚfdÚmodeÚkwdsÚstream©Zorig_fdopenr   r   ÚfdopenË   s    
z+ParallelRunner._parallelize.<locals>.fdopen)r    rŽ   ÚconcurrencytestZfork_for_testsÚNWORKERSZConcurrentTestSuite)r:   rŽ   Zforkerr   r�   r   Ú_parallelizeÉ   s
    
zParallelRunner._parallelizec                 C   sŒ   t  ¡ }t  ¡ }| D ]n}| ¡ dkr(qn8t|t jƒrB|jd j}nt|t jƒrT|}ntd| ƒ‚t|ddƒrx| 	|¡ q| 	|¡ q||fS )Nr   zcan't recognize type %rZ
_serialrunF)
r0   r7   ÚcountTestCasesr-   Z_testsrc   r1   Ú	TypeErrorr,   r9   )r:   ÚserialÚparallelr;   Z
test_classr   r   r   Ú_split_suite×   s    zParallelRunner._split_suitec                 C   sX  |   |¡\}}|  |¡}tdt ddd� t ¡ }|  |¡}t ¡ | }t ¡  ¡ }tj	|dd�\}}	|	r~td|	 dƒ t
ƒ  t ¡ }|  |¡}
t ¡ | }| ¡ s¸| ¡ d	kr¸| ¡  tt|j|j|jfƒ\}}}tt|
j|
j|
jfƒ\}}}tt d
|j|||||
j||||f
 ¡ƒ td|j|
j || tf ƒ | ¡ �oH|
 ¡ }|  |¡ d S )Nz(starting parallel tests using %s workersrS   TrW   r   )Útimeoutzalive processes %sr   r   a=  
            +----------+----------+----------+----------+----------+----------+
            |          |    total | failures |   errors |  skipped |     time |
            +----------+----------+----------+----------+----------+----------+
            | parallel |      %3s |      %3s |      %3s |      %3s |    %.2fs |
            +----------+----------+----------+----------+----------+----------+
            | serial   |      %3s |      %3s |      %3s |      %3s |    %.2fs |
            +----------+----------+----------+----------+----------+----------+
            z&Ran %s tests in %.3fs using %s workers)r–   r‘   r   r�   Útimer   ÚpsutilZProcessÚchildrenZ
wait_procsr
   rr   r’   r|   ÚmapÚlenrs   ra   Zskippedr   ÚtextwrapÚdedentZtestsRunr‚   )r'   r:   Z	ser_suiteZ	par_suiterv   ÚparZpar_elapsedZorphansZgoneÚaliveZserZser_elapsedZ	par_failsZpar_errsZ	par_skipsZ	ser_failsZser_errsZ	ser_skipsÚokr   r   r   rx   ë   sV    
 ÿ

þþ    ÿø

  ÿzParallelRunner.runN)rL   rM   rN   Ústaticmethodr‘   r–   rx   r   r   r   r   r…   Ç   s
   

r…   c                 C   sT   dd„ }| rJt jr|dƒ n.td kr.|dƒ ntdkr@|dƒ n
ttd�S ttd�S )Nc                 S   s   t | d dƒ d S )Nz Running serial tests instead.r   )r   )r   r   r   r   Úwarn  s    zget_runner.<locals>.warnz$Can't run parallel tests on Windows.z(concurrencytest module is not installed.r   zOnly 1 CPU available.)Ú	verbosity)r™   ÚWINDOWSr�   r�   r…   Ú	VERBOSITYre   )r•   r£   r   r   r   Ú
get_runner  s    



r§   c                 C   s    t ƒ  | ¡}tƒ }| |¡ d S r6   )r   rK   r§   rx   )r3   r:   r{   r   r   r   Úrun_from_name,  s    r¨   c                   C   s   t jj ¡  d S r6   )r™   Z_psplatformZcextZset_testingr   r   r   r   Úsetup2  s    r©   c                  C   sÈ   t ƒ  d} tj| dd�}|jddddd� |jd	ddd
d� | ¡ \}}|jsVttƒ tƒ }|rŽt	|ƒdkr~| 
¡  t d¡S | |d ¡}n|jrž| ¡ }n| ¡ }tr°tƒ  t|jƒ}| |¡ d S )Nz*python3 -m psutil.tests [opts] [test-name]zrun unit tests)ÚusageÚdescriptionz--last-failedÚ
store_trueFzonly run last failed tests)ÚactionÚdefaultÚhelpz
--parallelzrun tests in parallelr   r   )r©   ÚoptparseÚOptionParserÚ
add_optionÚ
parse_argsrH   r   r?   r   rœ   Zprint_usager   r}   rK   r<   r   r	   r§   r•   rx   )rª   ÚparserÚoptsri   Úloaderr:   r{   r   r   r   Úmain9  s:     þ þ


r·   Ú__main__)FN)F)2rƒ   Ú
__future__r   r†   r°   r    r   r�   r˜   r0   ÚctypesÚImportErrorr�   r™   Zpsutil._commonr   r   r   Zpsutil._compatr   Zpsutil.testsr   r   r	   r
   r   r¦   r?   Ú	cpu_countr�   r   r!   ÚabspathÚdirnameÚ__file__rO   rC   r8   r   r   r„   rR   ZTextTestRunnerre   r…   r§   r¨   r©   r·   rL   r   r   r   r   Ú<module>   sV   


	27U
"
