B
    H/\s2                 @   s  d dl mZmZmZ d dlZd dlZd dl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g ZdZdZdZG dd dejZd	d
d	dddddddddddddddddZddddgZd d dddddddd d!d!d!d"Zd#d$ Zd%d& ZdLd'd(Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 ZdMd3d4ZdNd5d6ZG d7d8 d8e Z!d9d: Z"e# Z$d;d< Z%d=d> Z&G d?d@ d@e'Z(dAdB Z)dOdDdEZ*G dFdG dGe Z+G dHdI dIe+e
j,Z-G dJdK dKej.Z/dS )P    )print_functionabsolute_importdivisionN   )sixg      ?Fc               @   s   e Zd Zdd Zdd ZdS )Popenc             C   s   | S )N )selfr   r   2lib/python3.7/site-packages/gevent/testing/util.py	__enter__   s    zPopen.__enter__c             G   s   t |  d S )N)kill)r	   argsr   r   r
   __exit__   s    zPopen.__exit__N)__name__
__module____qualname__r   r   r   r   r   r
   r      s   r   normaldefaultmagentaZ	brightredgreenZbrightmagentaZ	lightblueZlightredZ	lightcyancyanredZbrightyellow)r   r   infozsuboptimal-behaviourerrorZnumberz	slow-testz	ok-numberzerror-numberfilenamelinenoZtestnamezfailed-examplezexpected-outputzactual-outputzcharacter-diffsz
diff-chunk	exceptionskipped)Zdarkz0;)Zlightz1;)Zbrightz1;)Zboldz1;          !   "   #   $   %   )r   r   Zblackr   r   ZbrownZyellowZbluer   r   ZgreyZgrayZwhitec             C   sJ   d}x0t D ](\}}| |r
| t|d  } |}P q
W t|  }d||f S )N z[%s%sm)	_prefixes
startswithlen_colorcodes)colorZprefix_codeprefixcodeZ
color_coder   r   r
   _color_codeK   s    
r.   c             C   s   t t|  S )N)r.   _colorscheme)whatr   r   r
   _colorU   s    r1   c             C   s   t | | t | S )N)r1   )r0   messager   r   r   r
   	_colorizeX   s    r3   c             O   s   | dd}y|r| | }n| }W nz tk
r   t  yd| |f }W n tk
r^   Y nX ytd|}tj| W n tk
r   t  Y nX Y nX t||}tj|d  d S )Nr+   r   z
%r %% %r

r   
)pop	Exception	traceback	print_excr3   sysstderrwrite)r2   r   kwargsr+   stringr   r   r
   log[   s$    


r>   c          
   C   s   t tdsd S yt| dS  tk
rZ } z"|jdkrJtd| t|j| W d d }~X Y n6 tk
r } ztd| t|j| W d d }~X Y nX d S )Nkillpg	      zkillpg(%r, 9) failed: %s: %s)	hasattrosr?   OSErrorerrnor>   typer   r6   )pidexr   r   r
   r?   r   s    

$r?   c             C   sF   d|  }t jd|  t jd d }|rB| |dgkrBtd| d S )Nz"ERROR: The process "%s" not found.ztaskkill /F /PID %s /T)r:   r   r&   z%r)
subprocessr   PIPEcommunicatestripr>   )rG   Z
ignore_msgerrr   r   r
   kill_processtree~   s    rN   c          
   C   s   t | drZy|   W q tk
rV } z"|jdkr6d S |jdkrDd S  W d d }~X Y qX n(yt| jd W n tk
r   Y nX d S )Nr   rA      r@   )rB   r   rD   rE   rC   rG   EnvironmentError)popenrH   r   r   r
   _kill   s    


rR   c             C   s   | j d k	r| j   |  d k	r$d S d| _y2t| dd rDt| j ntj	drZt
| j W n tk
rx   t  Y nX yt|  W n tk
r   t  Y nX y|   W n tk
r   t  Y nX d S )NTsetpgrp_enabledwin)timerZcancelpoll
was_killedgetattrr?   rG   r9   platformr(   rN   r6   r7   r8   rR   wait)rQ   r   r   r
   r      s(    

r   c             C   s   g }|pt j }||pi  x4t| D ]$\}}|dr.|d||f  q.W t| t	j
rn||  n
||  d|S )NZGEVENTz%s=%s )rC   environcopyupdatesorteditemsr(   append
isinstancer   Zstring_typesextendjoin)commandenvsetenvresultkeyvaluer   r   r
   getname   s    

rk   c       
      K   s   | dd }d }tjds(ttdd }| dd }| dd pBi }t| ||d}|d k	rbd|d< |r|rt| }n
tj }|| |std| t	| f||d	|}||_
|d k	|_d
|_d |_|d k	rtj|t|fd}	|	d |	  |	|_|S )NtimeoutZDO_NOT_SETPGRPsetpgrprf   rg   )rf   rg   1z+ %s)
preexec_fnrf   F)r   T)r5   rC   r\   getrX   rk   r]   r^   r>   r   namerS   rW   rU   	threadingZTimerr   	setDaemonstart)
re   quietr<   rl   ro   rf   rg   rq   rQ   tr   r   r
   rt      s6    





rt   c               @   s*   e Zd Zd	ddZdd ZeZdd ZdS )
	RunResultNr   c             C   s"   || _ || _|| _|| _|| _d S )N)r-   outputrq   	run_countskipped_count)r	   r-   rx   rq   ry   rz   r   r   r
   __init__   s
    zRunResult.__init__c             C   s
   t | jS )N)boolr-   )r	   r   r   r
   __bool__   s    zRunResult.__bool__c             C   s   | j S )N)r-   )r	   r   r   r
   __int__   s    zRunResult.__int__)NNr   r   )r   r   r   r{   r}   Z__nonzero__r~   r   r   r   r
   rw      s
    
rw   c             C   sL   d| krD|  dd} |  dd} |  dd} |  dd} |  dd} d| kS )NWarningzWarning -- reap_childrenZNADAzWarning -- threading_cleanupz/DeprecationWarning: Using or importing the ABCsz UserWarning: libuv only supportsz&ImportWarning: Not importing directory)replace)outr   r   r
   _should_show_warning_output   s    r   c             C   s   d}d}d}d}|rt d|}|r`|| |  }|d|}t||d|d }t d|}|rtd|| |  }t||d|d }|| |f }| d	krtd
|}|||fS )Nz[took %.1fs%s]r&   r   zRan (\d+) tests intookr   z \(skipped=(\d+)\)$r   
   z	slow-test)researchrt   endr   intr3   )r   r   statusr   ry   rz   mrh   r   r   r
   _find_test_status
  s$    
r   c          	   K   s  | dt}| dt}| }| dd}|rZd|kr>d|ksFt|tj|d< tj|d< t| fd|i|}|j}zDt		 }|
 \}	}
t		 | }|js| d krd}n| }W d t| X |
rtt t|}|	r|	 }	t|	tr|	n
|	dd	}	|	rP|s|st|	rP|	rPd
|	dd }	|	 }	|	d7 }	td||	 t||	\}}}|rztd|||dd n|std|| W d Q R X |tkrt| |f t||	|||S )Nbuffer_outputru   nestedFstdoutr:   ZTIMEOUTzutf-8ignorez  r4   z
  z| %s
%sz! %s [code %s] %sr   )r+   z- %s %s)r5   BUFFER_OUTPUTQUIETAssertionErrorrI   ZSTDOUTrJ   rt   rq   timerK   rW   rV   r   output_lockr|   rL   rb   strdecoder   r   rstripr>   r   MIN_RUNTIME
runtimelogra   rw   )re   r<   r   ru   verboser   rQ   rq   Z
time_startr   rM   r   rh   Zfailedr   ry   rz   r   r   r
   run   sL    



r   c               @   s   e Zd ZdZdS )NoSetupPyFoundzRaised by find_setup_py_aboveN)r   r   r   __doc__r   r   r   r
   r   K  s   r   c             C   s\   t jt j| }xBt jt j|dsV|t j| }}||krtd| f qW |S )zAReturn the directory containing setup.py somewhere above *a_file*zsetup.pyz#could not find my setup.py above %r)rC   pathdirnameabspathexistsrd   r   )a_filerootprevr   r   r
   find_setup_py_aboveN  s    r   Tc             C   s   | d k	r&yt | S  tk
r$   Y nX |d k	rVyt tj|j jS  tk
rT   Y nX |d k	ryt tj| jS  tk
r   Y nX |rt dS tdt f d S )Nz./dnezAfter checking %r)r   r   r9   modulesr   __file__locals)r   Za_module_namea_classZ	climb_cwdr   r   r
   search_for_setup_pyX  s$    r   c               @   s$   e Zd ZdZdd Zedd ZdS )ExampleMixinz+Something that uses the examples/ directoryc             C   s   t tt| dS )z(Return the directory containing setup.py)r   r   )r   r   rF   )r	   r   r   r
   find_setup_pyt  s    zExampleMixin.find_setup_pyc          
   C   sN   y|   }W n2 tk
r> } ztd|f W d d }~X Y nX tj|dS )Nz$Unable to locate file/dir to run: %sZexamples)r   r   unittestSkipTestrC   r   rd   )r	   r   er   r   r
   cwd{  s
    "zExampleMixin.cwdN)r   r   r   r   r   propertyr   r   r   r   r
   r   q  s   r   c               @   sT   e Zd Zg ZdZdZdZdZdZdd Z	dd Z
dd	 Zd
d Zdd Zdd ZdS )
TestServerrA   g      ?Nc          
   C   sh   y0| j p
i }ttjd| jg| j fd| ji|S  tk
rb } zt	d|f W d d }~X Y nX d S )Nz-ur   z$Unable to locate file/dir to run: %s)
start_kwargsrt   r9   
executableserverr   r   r   r   r   )r	   r<   r   r   r   r
   rt     s
    
&zTestServer.startc                s"   ddl m} | fdd}| S )Nr   )contextmanagerc           	   3   s4      "} |  _   d V     W d Q R X d S )N)rt   rQ   beforeafter)rQ   )r	   r   r
   running_server  s
    
z1TestServer.running_server.<locals>.running_server)
contextlibr   )r	   r   r   r   )r	   r
   r     s    zTestServer.running_serverc          	   C   s    |    |   W d Q R X d S )N)r   _run_all_tests)r	   r   r   r
   test  s    
zTestServer.testc             C   s@   | j d k	rt| j  | j d ks<td| j| j f d S )Nz%s died with code %s)before_delayr   sleeprQ   rV   r   r   )r	   r   r   r
   r     s    
zTestServer.beforec             C   s@   | j d k	r<t| j  | j d ks<td| j| j f d S )Nz%s died with code %s)after_delayr   r   rQ   rV   r   r   )r	   r   r   r
   r     s    
zTestServer.afterc             C   sL   d}x:t t| D ]*}|drt| |}t|r|  d}qW |sHtd S )NFZ_testT)r_   dirr(   rX   callabler   )r	   ZranmethodZfunctionr   r   r
   r     s    

zTestServer._run_all_tests)r   r   r   r   r   r   rQ   r   r   rt   r   r   r   r   r   r   r   r   r
   r     s   r   c               @   s   e Zd Zdd Zdd ZdS )alarmc             C   s(   t j|  | d || _|   d S )NT)rr   Threadr{   rs   rl   rt   )r	   rl   r   r   r
   r{     s    
zalarm.__init__c             C   s&   t | j tjd td d S )Nz	Timeout.
   )r   r   rl   r9   r:   r;   rC   _exit)r	   r   r   r
   r     s    z	alarm.runN)r   r   r   r{   r   r   r   r   r
   r     s   r   )r   )NN)F)NNNT)0Z
__future__r   r   r   r   r9   rC   r&   r   r7   r   rr   rI   r   r   r   r   r   r   r/   r'   r*   r.   r1   r3   r>   r?   rN   rR   r   rk   rt   objectrw   r   ZLockr   r   r   r6   r   r   r   r   ZTestCaser   r   r   r   r   r   r
   <module>   s   



 +

4