U
    +-e+                     @   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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   T/var/www/html/Darija-Ai-Train/env/lib/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>Q   s
   
 

z,TestLoader._get_testmods.<locals>.<listcomp>)r    listdirr#   r&   r   r&   r   _get_testmodsP   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_classesV   s    


z TestLoader._iter_testmod_classesc                 C   s,   t  }|  D ]}t|}|| q|S N)r0   	TestSuiter5   loadTestsFromTestCaseaddTest)r'   suiter4   testr   r   r   allb   s
    zTestLoader.allc              	   C   s\   t  }tjts|S tt}|  }W 5 Q R X |D ]}t j	
|}|| q<|S r6   )r0   r7   r    r!   isfileFAILED_TESTS_FNAMEopenreadsplitdefaultTestLoaderloadTestsFromNamer9   )r'   r:   fnamesnr;   r   r   r   last_failedi   s    
zTestLoader.last_failedc                 C   s.   | dr"tjtj|d }tj|S )Nr   r   )r   r    r!   splitextbasenamer0   rB   rC   )r'   r3   r   r   r   	from_nameu   s    
zTestLoader.from_nameN)__name__
__module____qualname__HEREr#   r   r    environextendr*   r5   r<   rG   rJ   r   r   r   r   r   I   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 )N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 )NFAILr   )r0   rT   
addFailurer   rY   r   r   r   r\      s    zColouredResult.addFailurec                 C   s&   t j| || td|  d d S )Nzskipped: %sZ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'   flavourerrors	__class__r   r   r`      s    zColouredResult.printErrorList)	rK   rL   rM   rU   rX   r\   r]   r`   __classcell__r   r   rc   r   rQ   {   s
   rQ   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 )ColouredTextRunnerzA 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kwargsrc   r   r   rg      s    zColouredTextRunner.__init__c                    s   t   | _| jS r6   )r   _makeResultresultr&   rc   r   r   rl      s    zColouredTextRunner._makeResultc              	   C   s:   | j r6ttd }| j D ]}||d  qW 5 Q R X d S )Nw
)ri   r?   r>   write)r'   rD   tnamer   r   r   _write_last_failed   s    
z%ColouredTextRunner._write_last_failedc                 C   s6   |  s2|j|j D ]}|d  }| j| qd S )Nr   )wasSuccessfulrb   failuresidri   add)r'   rm   trq   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runnerrm   printErrorsr   exitrx   r'   r:   rm   rc   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~   rr   )r'   successr   r   r   _exit   s    zColouredTextRunner._exitc                 C   s   |  |}| |  d S r6   )r   r   rs   r   r   r   r   ry      s    
zColouredTextRunner.run)rK   rL   rM   __doc__r   rQ   r0   TextTestResultZresultclassrg   rl   rr   rx   r   r   ry   re   r   r   rc   r   rf      s   
rf   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_testsrd   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   psutilProcesschildrenZ
wait_procsr
   rs   r   r}   maplenrt   rb   Zskippedr   textwrapdedentZtestsRunr   )r'   r:   Z	ser_suiteZ	par_suiterw   parZpar_elapsedZorphansgonealiveZserZser_elapsedZ	par_failsZpar_errsZ	par_skipsZ	ser_failsZser_errsZ	ser_skipsokr   r   r   ry      sV    
 

    

  zParallelRunner.runN)rK   rL   rM   staticmethodr   r   ry   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   	VERBOSITYrf   )r   r   r   r   r   
get_runner  s    



r   c                 C   s*   t r
t  t | }t }|| d S r6   )r   r	   r   rJ   r   ry   )r3   r:   r|   r   r   r   run_from_name/  s
    r   c                   C   s   t d d S )NT)r   Z
_set_debugr   r   r   r   setup7  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_argsrG   r   r>   r   r   print_usager   r~   rJ   r<   r   r	   r   r   ry   )r   parseroptsrj   loaderr:   r|   r   r   r   main;  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__rN   rB   r8   r   r   r   rQ   ZTextTestRunnerrf   r   r   r   r   r   rK   r   r   r   r   <module>   sV   


	28U
"
