ó
ÐH/\c           @` so  d  d l  m Z m Z m Z d  d l Z d  d l m Z d  d l Z d  d l m	 Z	 d  d l
 m Z d  d l m Z 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 e f d „  ƒ  YZ d „  Z e d „ Z d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ  d e d e  e e f i  ƒ f d „  ƒ  YZ d S(   i    (   t   absolute_importt   print_functiont   divisionN(   t   time(   t   contextmanager(   t   TestCase(   t   wrapsi   (   t   sysinfo(   t   params(   t	   leakcheck(   t   errorhandler(   t   flaky(   t   get_switch_expectedt   TimeAssertMixinc           B` s|   e  Z e j ƒ  d d d d  „ ƒ Z e j r9 d „  Z n	 d „  Z e	 d d „ ƒ Z
 e j rn e j rn d n d d „ Z RS(   c      	   C` sH   y& |  j  | | d | d | d | ƒWn t k
 rC t j ƒ  n Xd  S(   Nt   placest   msgt   delta(   t   assertAlmostEqualt   AssertionErrorR   t   reraiseFlakyTestTimeout(   t   selft   firstt   secondR   R   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   assertTimeoutAlmostEqual(   s    &c         C` s   d  S(   N(    (   R   t
   time_takent   min_timet   max_time(    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   assertTimeWithinRange2   s    c         C` s$   |  j  | | ƒ |  j | | ƒ d  S(   N(   t   assertLessEqualt   assertGreaterEqual(   R   R   R   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyR   5   s    c         c` s´   | d  k r8 t j s t j r+ | d } q8 | d } n  t ƒ  } d  Vt ƒ  | } y? |  j | | | k o{ | | k n d | | | f ƒ Wn t k
 r¯ t j ƒ  n Xd  S(   Ng      @g       @s#   Expected: %r; elapsed: %r; fuzzy %r(	   t   NoneR   t   EXPECT_POOR_TIMER_RESOLUTIONt   LIBUVR   t
   assertTrueR   R   t   reraiseFlakyTestRaceCondition(   R   t   expectedt   fuzzyt   startt   elapsed(    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   runs_in_given_time9   s    	!g{®Gáz„?g      ð?c         C` s   |  j  d | ƒ S(   Ng        (   R'   (   R   R$   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   runs_in_no_timeK   s    N(   t   __name__t
   __module__R   t   reraises_flaky_timeoutR   R   R   R   R   R   R'   R    R(   (    (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyR   '   s   			c         ` s2   ˆ d  k r ˆ  St ˆ  ƒ ‡  ‡ f d †  ƒ } | S(   Nc         ` s3   t  j ˆ d d t ƒ ˆ  |  | | Ž SWd  QXd  S(   Ns   test timed outt   ref(   t   geventt   Timeoutt   False(   R   t   argst   kwargs(   t   methodt   timeout(    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   wrapperU   s    (   R   R   (   R3   R2   R4   (    (   R2   R3   s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   _wrap_timeoutQ   s    c         C` sŠ   t  ƒ  } |  j | | ƒ } | | k	 r+ | Sx0 | D]( } t | | | ƒ } | | k	 r2 | Sq2 W| t k r† t d | |  | f ƒ ‚ n  | S(   Ns   Attribute %r not found
%s
%s
(   t   objectt   gett   getattrt   AttributeError(   t	   classDictt   basest   attrt   defaultt   NONEt   valuet   base(    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   _get_class_attr\   s    	t   TestCaseMetaClassc           B` s   e  Z d  „  Z RS(   c   
      C` sx  | j  d d ƒ } | d k rY t | d d d  ƒ } t j rY | d  k	 rY | d 9} qY n  t | | d t ƒ } t | | d t ƒ } t | | d t ƒ } xÇ t | j ƒ  ƒ D]³ \ } }	 | j	 d ƒ r« t
 |	 ƒ r« | j | ƒ t | |	 ƒ }	 t |	 d | ƒ } | rt j |	 ƒ }	 n  | r0t j |	 ƒ }	 n  | rQt j rQt j |	 ƒ }	 n  |	 | | <q« q« Wt j |  | | | ƒ S(	   Nt   __timeout__R>   i    i   t   check_totalrefcountt   error_fatalt   uses_handle_errort   test(   R7   R8   R   R   t   RUN_LEAKCHECKSRA   t   Truet   listt   itemst
   startswitht   callablet   popR5   R
   t   wrap_error_fatalt   wrap_restore_handle_errorR	   t   wrap_refcountt   typet   __new__(
   t   clst	   classnameR;   R:   R3   RD   RE   RF   t   keyR?   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyRS   p   s*    (   R)   R*   RS   (    (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyRB   j   s   c           C` s   d  S(   N(    (    (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   _noop‘   s    t   SubscriberCleanupMixinc           B` s   e  Z d  „  Z d „  Z RS(   c         C` s4   t  t |  ƒ j ƒ  d d l m } | j |  _ d  S(   Ni    (   t   events(   t   superRX   t   setUpR-   RY   t   subscriberst(   _SubscriberCleanupMixin__old_subscribers(   R   RY   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyR[   –   s    c         C` s4   d d l  m } |  j | j (t t |  ƒ j ƒ  d  S(   Ni    (   RY   (   R-   RY   R]   R\   RZ   RX   t   tearDown(   R   RY   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyR^   ›   s    (   R)   R*   R[   R^   (    (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyRX   ”   s   	R   t   NewBasec           B` s@  e  Z e j s e j n e j Z d  Z e	 Z
 e	 Z d Z d Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z d Z e Z d „  Z d „  Z d „  Z  d „  Z! d d d d d „ Z" d d d „ Z# d „  Z$ e% e& d e% e& d ƒ ƒ Z' RS(   R=   c         O` s7   |  j  d k r$ t |  j ƒ |  _  n  t j |  | | Ž S(   NR=   (   t   switch_expectedR   t   fullnamet   BaseTestCaset   run(   R   R0   R1   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyRc   ¬   s    c         C` s3   t  t |  ƒ j ƒ  t j ƒ  j j ƒ  g  |  _ d  S(   N(   RZ   R   R[   R-   t   get_hubt   loopt
   update_nowt   close_on_teardown(   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyR[   ²   s    c         C` se   t  |  d t ƒ r d  St  |  d t ƒ } | ƒ  |  j |  _ |  j ƒ  g  |  _ t t |  ƒ j	 ƒ  d  S(   Nt   skipTearDownt   cleanup(
   R8   R/   RW   t   _nonet   _errort   _tearDownCloseOnTearDownRg   RZ   R   R^   (   R   Ri   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyR^   ½   s    
	c         C` sI   xB |  j  D]7 } t | d | ƒ } y | ƒ  Wq
 t k
 r@ q
 Xq
 Wd  S(   Nt   close(   Rg   R8   t	   Exception(   R   t   xRm   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyRl   È   s    c         C` sX   d d  l  } | j ƒ  |  _ |  j j ƒ  t j sA | j d ƒ n  t t |  ƒ j	 ƒ  d  S(   Ni    R=   (
   t   warningst   catch_warningst   _warning_cmt	   __enter__t   syst   warnoptionst   simplefilterRZ   R   t
   setUpClass(   RT   Rp   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyRw   Ñ   s    	c         C` s-   |  j  j d  d  d  ƒ t t |  ƒ j ƒ  d  S(   N(   Rr   t   __exit__R   RZ   R   t   tearDownClass(   RT   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyRy   Ú   s    c         C` s   |  j  j | ƒ | S(   sU   
        *resource* either has a ``close`` method, or is a
        callable.
        (   Rg   t   append(   R   t   resource(    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   _close_on_teardownß   s    c         C` s   t  |  d d ƒ p t  |  d ƒ S(   Nt   _testMethodNamet    t   _TestCase__testMethodName(   R8   (   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   testnameç   s    c         C` s   |  j  j d |  j S(   Nt   .(   t	   __class__R)   R€   (   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   testcasenameë   s    c         C` s0   t  j j t j |  j j j ƒ j d d ƒ d S(   NR   i   i    (	   t   ost   patht   basenameRt   t   modulesR‚   R*   t   __file__t   rsplit(   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt
   modulenameï   s    c         C` s.   t  j j t  j j |  j ƒ ƒ d d |  j S(   Ni    R   (   R„   R…   t   splitextR†   RŠ   Rƒ   (   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyRa   ó   s    c         C` s,   |  j  |  j |  j ƒ |  j t j ƒ  _ d  S(   N(   t   assertEqualRk   Rj   t   _store_errorR-   Rd   t   handle_error(   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   expect_one_errorû   s    c         C` sG   ~ |  j  |  j k r1 t j ƒ  j j | | ƒ n | | | f |  _  d  S(   N(   Rk   Rj   R-   Rd   t   parentt   throw(   R   t   wheret   tR?   t   tb(    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyR   ÿ   s    c         C` s   |  j  S(   N(   Rk   (   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt
   peek_error  s    c         C` s   z |  j  SWd  |  j |  _  Xd  S(   N(   Rk   Rj   (   R   (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt	   get_error	  s    c         C` så   | d  k r |  j ƒ  } n  | \ } } } | d  k	 r{ |  j | t ƒ |  j | d | f ƒ t | | ƒ s{ t | ƒ ‚ n  | d  k	 rÂ t | t ƒ r¯ |  j	 t | ƒ | ƒ qÂ |  j
 | | ƒ n  | d  k	 rá |  j | | ƒ n  | S(   Ns   Error must not be none %r(   R   R–   t   assertIsInstanceRR   t   assertIsNotNonet
   issubclassR   t
   isinstancet   strRŒ   t   assertIs(   R   t   kindR?   t   errort
   where_typet   econtextt   ekindt   evalue(    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   assert_error  s     c         C` s¢  d d  l  } d d  l } d d l m } t t d | ƒ | ƒ } t | d | ƒ } t }	 | sw t }	 t | d ƒ } n  x$| D]}
 |
 | k r– q~ n  t | |
 ƒ } | j | ƒ rÂ |	 rÂ q~ n  | | |
 ƒ } yB | j	 ƒ  0 | j
 d ƒ | j | ƒ } | j | ƒ } Wd  QXWn  t k
 r5|	 r~ ‚  q~ q~ n X|  j | j | j |
 ƒ |  j | j | j |
 ƒ |  j | j | j |
 ƒ |  j | j | j |
 ƒ q~ Wd  S(   Ni    (   t   get_originals   gevent.t
   __target__t   __implements__t   ignore(   t   inspectRp   t   gevent.monkeyR¤   R8   t
   __import__RI   R/   t
   isfunctionRq   Rv   t
   getargspect	   TypeErrorRŒ   R0   t   varargst   keywordst   defaults(   R   t   mod_namet
   func_namest   excludeR¨   Rp   R¤   t   gevent_modulet   module_namet   funcs_givent	   func_namet   gevent_funct   funct
   gevent_sigt   sig(    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt!   assertMonkeyPatchedFuncSignatures"  s:    c         C` s6   y |  j  | | ƒ Wn t k
 r1 t j ƒ  n Xd  S(   N(   RŒ   R   R   R"   (   R   t   at   b(    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   assertEqualFlakyRaceConditionM  s    t   assertRaisesRegext   assertRaisesRegexp(    (    N(   NNN(    (    ((   R)   R*   R   t   RUNNING_ON_CIR   t   LOCAL_TIMEOUTt
   CI_TIMEOUTRC   R`   RI   RE   RF   Rg   t   _TestCase__old_subscribersRc   R[   R^   Rl   t   classmethodRw   Ry   R|   t   propertyR€   Rƒ   RŠ   Ra   R   Rj   Rk   R   R   R•   R–   R£   R¼   R¿   R8   Rb   RÀ   (    (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyR   ¡   s8   											+		(!   t
   __future__R    R   R   Rt   R   t   os.pathR„   t
   contextlibR   t   unittestR   Rb   t	   functoolsR   R-   R~   R   R   R	   R
   R   t   patched_tests_setupR   R6   R   R5   R9   RA   RR   RB   RW   RX   (    (    (    s6   lib/python2.7/site-packages/gevent/testing/testcase.pyt   <module>   s,   *	'		