
H/\c           @` 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 e Z e Z d e j f d     YZ i d d 6d	 d	 6d d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d d! 6d d" 6d# d$ 6Z dS dT dU dV g Z i d  d	 6d  d 6d+ d, 6d- d 6d. d 6d/ d0 6d/ d1 6d2 d3 6d4 d 6d5 d 6d6 d7 6d6 d8 6d6 d9 6Z d:   Z d;   Z d d<  Z d=   Z d>   Z d?   Z d@   Z dA   Z d d dB  Z  e dC  Z! dD e" f dE     YZ# dF   Z$ e j%   Z& dG   Z' dH   Z( dI e) f dJ     YZ* dK   Z+ d d d e, dL  Z- dM e" f dN     YZ. dO e. e
 j/ f dP     YZ0 dQ e j1 f dR     YZ2 d S(W   i    (   t   print_functiont   absolute_importt   divisionNi   (   t   sixg      ?t   Popenc           B` s   e  Z d    Z d   Z RS(   c         C` s   |  S(   N(    (   t   self(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt	   __enter__   s    c         G` s   t  |   d  S(   N(   t   kill(   R   t   args(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   __exit__   s    (   t   __name__t
   __module__R   R	   (    (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR      s   	t   normalt   defaultt   infot   magentas   suboptimal-behaviourt	   brightredt   errort   greent   numbert   brightmagentas	   slow-tests	   ok-numbers   error-numbert	   lightbluet   filenamet   lightredt   linenot	   lightcyant   testnamet   cyans   failed-examples   expected-outputt   reds   actual-outputs   character-diffss
   diff-chunkt	   exceptiont   brightyellowt   skippedt   darks   0;t   lights   1;t   brightt   boldi   t   blacki   i    i!   t   brownt   yellowi"   t   bluei#   i$   i%   t   greyt   grayt   whitec         C` s^   d } x= t  D]5 \ } } |  j |  r |  t |  }  | } Pq q Wt |  } d | | f S(   Nt    s   [%s%sm(   t	   _prefixest
   startswitht   lent   _colorcodes(   t   colort   prefix_codet   prefixt   codet
   color_code(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   _color_codeK   s    
c         C` s   t  t |   S(   N(   R5   t   _colorscheme(   t   what(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   _colorU   s    c         C` s   t  |   | t  |  S(   N(   R8   (   R7   t   messageR   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt	   _colorizeX   s    c         O` s   | j  d d  } y | r( |  | } n |  } Wn t k
 r t j   y d |  | f } Wn t k
 rp n Xy# t d |  } t j j |  Wq t k
 r t j   q Xn$ Xt | |  } t j j | d  d  S(   NR0   R   s
   %r %% %r

R   s   
(   t   popt	   Exceptiont	   tracebackt	   print_excR:   t   syst   stderrt   write(   R9   R   t   kwargsR0   t   string(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   log[   s$    

c         C` s   t  t d  s d  Sy t j |  d  SWno t k
 rj } | j d k r t d |  t |  j |  q n/ t k
 r } t d |  t |  j |  n Xd  S(   Nt   killpgi	   i   s   killpg(%r, 9) failed: %s: %s(	   t   hasattrt   osRE   t   OSErrort   errnoRD   t   typeR
   R<   (   t   pidt   ex(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyRE   r   s    "c         C` sb   d |  } t  j d |  d t  j j   d } | r^ | j   | d g k r^ t d |  n  d  S(   Ns"   ERROR: The process "%s" not found.s   taskkill /F /PID %s /TR@   i   R+   s   %r(   t
   subprocessR   t   PIPEt   communicatet   stripRD   (   RK   t
   ignore_msgt   err(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   kill_processtree~   s    
&c         C` s   t  |  d  r_ y |  j   Wq t k
 r[ } | j d k rB d  S| j d k rU d  S  q Xn+ y t j |  j d  Wn t k
 r n Xd  S(   NR   i   i   i	   (   RF   R   RH   RI   RG   RK   t   EnvironmentError(   t   popenRL   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   _kill   s    
c         C` s   |  j  d  k	 r |  j  j   n  |  j   d  k	 r5 d  St |  _ yH t |  d d   rc t |  j  n" t	 j
 j d  r t |  j  n  Wn t k
 r t j   n Xy t |   Wn t k
 r t j   n Xy |  j   Wn t k
 r t j   n Xd  S(   Nt   setpgrp_enabledt   win(   t   timert   Nonet   cancelt   pollt   Truet
   was_killedt   getattrRE   RK   R?   t   platformR-   RS   R<   R=   R>   RV   t   wait(   RU   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR      s(    	c         C` s   g  } | p t  j j   } | j | p* i   xI t | j    D]5 \ } } | j d  rA | j d | | f  qA qA Wt |  t	 j
  r | j |   n | j |   d j |  S(   Nt   GEVENTs   %s=%st    (   RG   t   environt   copyt   updatet   sortedt   itemsR-   t   appendt
   isinstanceR   t   string_typest   extendt   join(   t   commandt   envt   setenvt   resultt   keyt   value(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   getname   s    c   
      K` s}  | j  d d   } d  } t j j d  s? t t d d   } n  | j  d d   } | j  d d   pf i  } t |  d | d | } | d  k	 r d | d <n  | r | r | j   } n t j j   } | j |  n  | s t	 d |  n  t
 |  d | d | | } | | _ | d  k	 | _ t | _ d  | _ | d  k	 ryt j | t d	 | f }	 |	 j t  |	 j   |	 | _ n  | S(
   Nt   timeoutt   DO_NOT_SETPGRPt   setpgrpRo   Rp   t   1s   + %st
   preexec_fnR   (   R;   RZ   RG   Rd   t   getR_   Rt   Re   Rf   RD   R   t   nameRW   t   FalseR^   RY   t	   threadingt   TimerR   t	   setDaemonR]   t   start(
   Rn   t   quietRB   Ru   Ry   Ro   Rp   R{   RU   t   t(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR      s6    			
t	   RunResultc           B` s5   e  Z d d d  d  d  Z d   Z e Z d   Z RS(   i    c         C` s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   R3   t   outputR{   t	   run_countt   skipped_count(   R   R3   R   R{   R   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   __init__   s
    				c         C` s   t  |  j  S(   N(   t   boolR3   (   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   __bool__   s    c         C` s   |  j  S(   N(   R3   (   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   __int__   s    N(   R
   R   RZ   R   R   t   __nonzero__R   (    (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR      s
   	c         C` ss   d |  k ri |  j  d d  }  |  j  d d  }  |  j  d d  }  |  j  d d  }  |  j  d d  }  n  d |  k S(   Nt   Warnings   Warning -- reap_childrent   NADAs   Warning -- threading_cleanups/   DeprecationWarning: Using or importing the ABCss    UserWarning: libuv only supportss&   ImportWarning: Not importing directory(   t   replace(   t   out(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   _should_show_warning_output   s    c         C` s)  d } d } d } d } | r t  j d |  } | r | | j   | j   !} | j d |  } t | | j d  | j d  ! } n  t  j d |  } | r t d | | j   | j   ! } t | | j d  | j d  ! } q n  | |  | f } |  d	 k rt d
 |  } n  | | | f S(   Ns   [took %.1fs%s]R+   i    s   Ran (\d+) tests int   tooki   s    \(skipped=(\d+)\)$R   i
   s	   slow-test(   t   ret   searchR   t   endR   t   intR:   (   R   R   t   statusR   R   R   t   mRq   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   _find_test_status
  s$    ("+c         K` sf  | j  d t  } | j  d t  } | } | j  d t  } | r d | k r[ d | k sg t |   t j | d <t j | d <n  t |  d | | } | j	 } zb t
 j
   } | j   \ }	 }
 t
 j
   | } | j s | j   d  k r d } n | j   } Wd  t |  X|
 st  t t |  } |	 rn|	 j   }	 t |	 t  rY|	 n |	 j d d  }	 n  |	 r| s| st |	  r|	 rd	 |	 j d
 d  }	 |	 j   }	 |	 d
 7}	 t d | |	  qn  t | |	  \ } } } | rt d | | | d d n | s't d | |  n  Wd  QX| t k rPt j | | f  n  t | |	 | | |  S(   Nt   buffer_outputR   t   nestedt   stdoutR@   t   TIMEOUTs   utf-8t   ignores     s   
s   
  s   | %s
%ss   ! %s [code %s] %sR0   R   s   - %s %s(   R;   t   BUFFER_OUTPUTt   QUIETR|   t   AssertionErrorRM   t   STDOUTRN   R   R{   t   timeRO   R^   R\   RZ   R   t   output_lockR   RP   Rj   t   strt   decodeR   R   t   rstripRD   R   t   MIN_RUNTIMEt
   runtimelogRi   R   (   Rn   RB   R   R   t   verboseR   RU   R{   t
   time_startR   RR   R   Rq   t   failedR   R   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   run   sL    $		*
t   NoSetupPyFoundc           B` s   e  Z d  Z RS(   s   Raised by find_setup_py_above(   R
   R   t   __doc__(    (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR   K  s   c         C` s   t  j j t  j j |    } x` t  j j t  j j | d   s | t  j j |  } } | | k r! t d |  f   q! q! W| S(   sA   Return the directory containing setup.py somewhere above *a_file*s   setup.pys#   could not find my setup.py above %r(   RG   t   patht   dirnamet   abspatht   existsRm   R   (   t   a_filet   roott   prev(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   find_setup_py_aboveN  s    $c         C` s   |  d  k	 r1 y t |   SWq1 t k
 r- q1 Xn  | d  k	 ro y t t j | j j  SWqo t k
 rk qo Xn  | d  k	 r y t t j | j  SWq t k
 r q Xn  | r t d  St d t   f   d  S(   Ns   ./dnes   After checking %r(   RZ   R   R   R?   t   modulesR   t   __file__t   locals(   R   t   a_module_namet   a_classt	   climb_cwd(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   search_for_setup_pyX  s$    
t   ExampleMixinc           B` s&   e  Z d  Z d   Z e d    Z RS(   s+   Something that uses the examples/ directoryc         C` s   t  d t d t |    S(   s(   Return the directory containing setup.pyR   R   (   R   R   RJ   (   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   find_setup_pyt  s    c         C` sO   y |  j    } Wn) t k
 r; } t j d | f   n Xt j j | d  S(   Ns$   Unable to locate file/dir to run: %st   examples(   R   R   t   unittestt   SkipTestRG   R   Rm   (   R   R   t   e(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   cwd{  s
    (   R
   R   R   R   t   propertyR   (    (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR   q  s   	t
   TestServerc           B` sb   e  Z g  Z d  Z d Z d Z d Z d Z d   Z	 d   Z
 d   Z d   Z d   Z d   Z RS(	   i   g      ?c         C` so   y? |  j  p i  } t t j d |  j g |  j d |  j | SWn) t k
 rj } t j	 d | f   n Xd  S(   Ns   -uR   s$   Unable to locate file/dir to run: %s(
   t   start_kwargsR   R?   t
   executablet   serverR   R   R   R   R   (   R   RB   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s
    0c         ` s,   d d l  m } |   f d    } |   S(   Ni    (   t   contextmanagerc          3` s;     j    ) }  |    _   j   d  V  j   Wd  QXd  S(   N(   R   RU   t   beforet   after(   RU   (   R   (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   running_server  s
    	
(   t
   contextlibR   (   R   R   R   (    (   R   s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s    c         C` s!   |  j     |  j   Wd  QXd  S(   N(   R   t   _run_all_tests(   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   test  s    c         C` s]   |  j  d  k	 r" t j |  j   n  |  j j   d  k sY t d |  j |  j j   f   d  S(   Ns   %s died with code %s(   t   before_delayRZ   R   t   sleepRU   R\   R   R   (   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s    c         C` s]   |  j  d  k	 rY t j |  j   |  j j   d  k sY t d |  j |  j j   f   n  d  S(   Ns   %s died with code %s(   t   after_delayRZ   R   R   RU   R\   R   R   (   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s    c         C` sp   t  } xW t t |    D]C } | j d  r t |  |  } t |  r\ |   t } q\ q q W| sl t  d  S(   Nt   _test(   R|   Rg   t   dirR-   R_   t   callableR]   R   (   R   t   rant   methodt   function(    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s    N(   R
   R   R   R   R   RZ   RU   R   R   R   R   R   R   R   R   (    (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s   					t   alarmc           B` s   e  Z d    Z d   Z RS(   c         C` s4   t  j j |   |  j t  | |  _ |  j   d  S(   N(   R}   t   ThreadR   R   R]   Ru   R   (   R   Ru   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s    	c         C` s1   t  j |  j  t j j d  t j d  d  S(   Ns	   Timeout.
i   (   R   R   Ru   R?   R@   RA   RG   t   _exit(   R   (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s    (   R
   R   R   R   (    (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyR     s   	(   R    s   0;(   R!   s   1;(   R"   s   1;(   R#   s   1;(3   t
   __future__R    R   R   R   R?   RG   R+   R   R=   R   R}   RM   R   R   R   R|   R   R   R   R6   R,   R/   R5   R8   R:   RD   RE   RS   RV   R   RZ   Rt   R   t   objectR   R   t   LockR   R   R   R<   R   R   R]   R   R   t   TestCaseR   R   R   (    (    (    s2   lib/python2.7/site-packages/gevent/testing/util.pyt   <module>   s   
		
						 			+	
4