£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    =_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	yddl
Z
W n ek
rl   dZ
Y nX y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re0  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/python37/lib64/python3.7/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_z.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   sV   xP|   D ]D}t|}x6t|D ]*}t||}t|tr t|tjr |V  q W q
W 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   s0   t  }x"|  D ]}t|}|| qW |S )N)r.   	TestSuiter3   loadTestsFromTestCaseaddTest)r%   suiter2   testr   r   r   all`   s
    zTestLoader.allc          	   C   sb   t  }tjts|S ttd}|  }W d Q R X x"|D ]}t j	
|}|| q@W |S )Nrt)r.   r4   r   r    isfileFAILED_TESTS_FNAMEopenreadsplitdefaultTestLoaderloadTestsFromNamer6   )r%   r7   fnamesnr8   r   r   r   last_failedg   s    
zTestLoader.last_failedc             C   s.   | dr"tjtj|d }tj|S )Nz.pyr   )r   r   r    splitextbasenamer.   r@   rA   )r%   r1   r   r   r   	from_names   s    
zTestLoader.from_nameN)__name__
__module____qualname__HEREr"   r   r   environextendr(   r3   r9   rE   rH   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)r.   
TestResult
addSuccessr   )r%   r8   r   r   r   rR   {   s    zColouredResult.addSuccessc             C   s"   t j| || tdddd d S )NERRORr   T)r   )r.   rQ   addErrorr   )r%   r8   errr   r   r   rT      s    zColouredResult.addErrorc             C   s   t j| || tdd d S )NZFAILr   )r.   rQ   
addFailurer   )r%   r8   rU   r   r   r   rV      s    zColouredResult.addFailurec             C   s&   t j| || td|  d d S )Nzskipped: %sbrown)r.   rQ   addSkipr   strip)r%   r8   reasonr   r   r   rX      s    zColouredResult.addSkipc                s$   t |d|dkd}t || d S )Nr   rS   )r   )r   r   printErrorList)r%   Zflavourerrors)	__class__r   r   r[      s    zColouredResult.printErrorList)	rI   rJ   rK   rR   rT   rV   rX   r[   __classcell__r   r   )r]   r   rO   y   s
   rO   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 )N)r   __init__setfailed_tnames)r%   argskwargs)r]   r   r   r`      s    zColouredTextRunner.__init__c                s   t   | _| jS )N)r   _makeResultresult)r%   )r]   r   r   re      s    zColouredTextRunner._makeResultc          	   C   s>   | j r:ttd$}x| j D ]}||d  qW W d Q R X d S )Nwt
)rb   r=   r<   write)r%   rB   tnamer   r   r   _write_last_failed   s    z%ColouredTextRunner._write_last_failedc             C   s:   |  s6x,|j|j D ]}|d  }| j| qW d S )Nr   )wasSuccessfulr\   failuresidrb   add)r%   rf   trj   r   r   r   _save_result   s    zColouredTextRunner._save_resultc          	      sV   yt  |}W n2 ttfk
rB   | jj}|  tdY nX | 	| |S d S )Nr   )
r   runKeyboardInterrupt
SystemExitrunnerrf   printErrorsr   exitrq   )r%   r7   rf   )r]   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SUCCESSrP   T)r   r   ZFAILEDr   r   )r   r   r<   r   rw   rk   )r%   successr   r   r   _exit   s    zColouredTextRunner._exitc             C   s   |  |}| |  d S )N)rx   r{   rl   )r%   r7   rf   r   r   r   rr      s    
zColouredTextRunner.run)rI   rJ   rK   __doc__r   rO   r.   TextTestResultZresultclassr`   re   rk   rq   rx   r{   rr   r^   r   r   )r]   r   r_      s   
r_   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 )N)atexitregisterclose)fdmodekwdsstream)orig_fdopenr   r   fdopen   s    
z+ParallelRunner._parallelize.<locals>.fdopen)r   r   concurrencytestZfork_for_testsNWORKERSZConcurrentTestSuite)r7   r   Zforkerr   )r   r   _parallelize   s
    
zParallelRunner._parallelizec             C   s   t  }t  }xv| D ]n}| dkr*qn8t|t jrD|jd j}nt|t jrV|}ntd| t|ddrz|	| q|	| qW ||fS )Nr   zcan't recognize type %rZ
_serialrunF)
r.   r4   countTestCasesr+   Z_testsr]   r/   	TypeErrorr*   r6   )r7   serialparallelr8   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 workersrP   T)r   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   timerx   psutilZProcesschildrenZ
wait_procsr
   rl   r   rv   maplenrm   r\   Zskippedr   textwrapdedentZtestsRunr{   )r%   r7   Z	ser_suiteZ	par_suiterp   parZpar_elapsedZorphansZgonealiveZserZser_elapsedZ	par_failsZpar_errsZ	par_skipsZ	ser_failsZser_errsZ	ser_skipsokr   r   r   rr      s<    



zParallelRunner.runN)rI   rJ   rK   staticmethodr   r   rr   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~   	VERBOSITYr_   )r   r   r   r   r   
get_runner  s    



r   c             C   s    t  | }t }|| d S )N)r   rH   r   rr   )r1   r7   ru   r   r   r   run_from_name,  s    r   c               C   s   t jj  d S )N)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 }|rt	|dkr~|
  tdS ||d }n|jr| }n| }trt  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_argsrE   r   r<   r   r   Zprint_usager   rw   rH   r9   r   r	   r   r   rr   )r   parseroptsrc   loaderr7   ru   r   r   r   main9  s2    


r   __main__)FN)F)2r|   
__future__r   r   r   r   r   r   r   r.   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__rL   r@   r5   r   r   r}   rO   ZTextTestRunnerr_   r~   r   r   r   r   rI   r   r   r   r   <module>   sV   


	27U
"
