ó
ÐH/\c           @   s3  d  d l  m Z e j ƒ  d  d l  m Z d  d l Z d  d l Z d  d l Z d Z d e j	 f d „  ƒ  YZ
 d e f d „  ƒ  YZ d	 e j e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j e f d „  ƒ  YZ e d k r/e j ƒ  n  d S(   iÿÿÿÿ(   t   monkey(   t   queueNi   t   _TriggerThreadc           B   s   e  Z d  „  Z d „  Z RS(   c         C   sB   | |  _  | |  _ d d l m } | ƒ  |  _ t j j |  ƒ d  S(   Niÿÿÿÿ(   t   Event(   t   fnt   argst   gevent.eventR   t   startedEventt	   threadingt   Threadt   __init__(   t   selfR   R   R   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyR
      s
    		c         C   s.   t  j d ƒ |  j j ƒ  |  j |  j Œ  d  S(   Ng{®Gáz„?(   t   timet   sleepR   t   setR   R   (   R   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   run   s    	(   t   __name__t
   __module__R
   R   (    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyR      s   	t   BlockingTestMixinc           B   s   e  Z d  „  Z d „  Z RS(   c         C   sŽ   t  | | ƒ |  _ |  j j ƒ  | | Œ  |  _ |  j j j ƒ  sT |  j d | ƒ n  |  j j d ƒ |  j j ƒ  r‡ |  j d | ƒ n  |  j S(   Ns,   blocking function '%r' appeared not to blocki
   s,   trigger function '%r' appeared to not return(	   R   t   tt   startt   resultR   t   isSett   failt   joint   isAlive(   R   t
   block_funct
   block_argst   trigger_funct   trigger_args(    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   do_blocking_test3   s    		c         C   s    t  | | ƒ |  _ |  j j ƒ  z$ |  j | ƒ  | | Œ  Wd  QXWd  |  j j d ƒ |  j j ƒ  ry |  j d | ƒ n  |  j j j ƒ  s› |  j d ƒ n  Xd  S(   Ni
   s,   trigger function '%r' appeared to not returns(   trigger thread ended but event never set(	   R   R   R   t   assertRaisesR   R   R   R   R   (   R   R   R   R   R   t   expected_exception_class(    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   do_exceptional_blocking_testB   s    	(   R   R   R   R!   (    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyR   1   s   	t   BaseQueueTestc           B   sY   e  Z e j Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(   c         C   s   d |  _  t j ƒ  |  _ d  S(   Ni    (   t   cumR   t   Lockt   cumlock(   R   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   setUpU   s    	c      	   C   sP  | j  ƒ  s t d ƒ ‚ n  | j d ƒ | j d ƒ | j d ƒ | j d ƒ t d d d d d d ƒ } | j ƒ  | j ƒ  f } |  j | | | j j | | j j f d	 ƒ t d d d d g d d d d g d d d d g ƒ } | j ƒ  | j ƒ  | j ƒ  g } |  j | | | j j d
 ƒ x; t	 t
 d ƒ D]) } | j | ƒ |  j | j  ƒ  d ƒ q4W|  j | j ƒ  d ƒ | j d ƒ |  j | j ƒ  d ƒ y$ | j d d d ƒ|  j d ƒ Wn t j k
 rÔn Xy$ | j d d d ƒ|  j d ƒ Wn t j k
 rn X|  j | j ƒ  t
 ƒ |  j | j d | j d ƒ |  j | j d t d f | j d ƒ x t	 t
 ƒ D] } | j ƒ  qtW|  j | j  ƒ  d ƒ y! | j d d ƒ |  j d ƒ Wn t j k
 rÕn Xy! | j d d ƒ |  j d ƒ Wn t j k
 rn X|  j | j d | j d  ƒ |  j | j t d f | j d! ƒ d  S("   Ns&   Call this function with an empty queueio   iM  iÞ   i¼  t   Queuet	   LifoQueuet   PriorityQueues#   q.peek() and q.get() are not equal!s&   Didn't seem to queue the correct data!i   s   Queue should not be emptys   Queue should not be fulliç  s   Queue should be fullix  t   blocki    s(   Didn't appear to block with a full queuet   timeoutg{®Gáz„?s+   Didn't appear to time-out with a full queuei
   s   Queue should be emptys*   Didn't appear to block with an empty queues-   Didn't appear to time-out with an empty queuet   empty(   ix  (    (    (    (   R,   (   R,   (   R,   t   RuntimeErrort   putt   dictt   peekt   gett   assertEqualt	   __class__R   t   ranget
   QUEUE_SIZEt   assertFalset   fullt
   assertTrueR   R'   t   Fullt   qsizeR   t   Truet   Empty(   R   t   qt   target_first_itemst   actual_first_itemt   target_ordert   actual_ordert   i(    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   simple_queue_testY   sn    		!%c         C   sP   xI t  rK | j ƒ  } | d  k r/ | j ƒ  d  S|  j | 7_ | j ƒ  q Wd  S(   N(   R;   R1   t   Nonet	   task_doneR#   (   R   R=   t   x(    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   worker–   s    	
c         C   s¸   d |  _  x0 d D]( } t j d |  j d | f ƒ j ƒ  q Wx! t d ƒ D] } | j | ƒ qI W| j ƒ  |  j |  j  t	 t d ƒ ƒ d ƒ x d D] } | j d  ƒ q“ W| j ƒ  d  S(	   Ni    i   t   targetR   id   s0   q.join() did not block until all tasks were done(   i    i   (   i    i   (   R#   R   R	   RG   R   R4   R.   R   R2   t   sumRD   (   R   R=   RB   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   queue_join_test    s    	&
c         C   s?   t  j ƒ  } y | j ƒ  Wn t k
 r- n X|  j d ƒ d  S(   Ns(   Did not detect task count going negative(   R'   t   JoinableQueueRE   t
   ValueErrorR   (   R   R=   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   test_queue_task_done­   s    c         C   sY   t  j ƒ  } |  j | ƒ |  j | ƒ y | j ƒ  Wn t k
 rG n X|  j d ƒ d  S(   Ns(   Did not detect task count going negative(   R'   RK   RJ   RE   RL   R   (   R   R=   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   test_queue_join¸   s    c         C   s·   d d d g } t  j d | ƒ } xG | D]? } |  j | j d d ƒ ƒ |  j | | j ƒ  ƒ | j ƒ  q( Wy | j ƒ  Wn t k
 rŒ n X|  j d ƒ |  j	 | j d d ƒ ƒ d  S(   Ni   i   i   t   itemsR+   gü©ñÒMbP?s(   Did not detect task count going negative(
   R'   RK   R6   R   R2   R1   RE   RL   R   R8   (   R   t   lR=   RB   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   test_queue_task_done_with_itemsÆ   s    c         C   s-   |  j  t ƒ } |  j | ƒ |  j | ƒ d  S(   N(   t	   type2testR5   RC   (   R   R=   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   test_simple_queueÚ   s    (   R   R   R'   RR   R&   RC   RG   RJ   RM   RN   RQ   RS   (    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyR"   R   s   			=	
				t   LifoQueueTestc           B   s   e  Z e j Z RS(    (   R   R   R'   R(   RR   (    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyRT   á   s   t   PriorityQueueTestc           B   s   e  Z e j Z d  „  Z RS(   c         C   sT   d } d } |  j  d | | g ƒ } |  j | | j ƒ  ƒ |  j | | j ƒ  ƒ d  S(   Ni   t   bi   t   aRO   (   i   RV   (   i   RW   (   RR   t   assertTupleEqualt
   get_nowait(   R   t   item1t   item2R=   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt
   test__initç   s
    (   R   R   R'   R)   RR   R\   (    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyRU   ä   s   	t   FailingQueueExceptionc           B   s   e  Z RS(    (   R   R   (    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyR]   ð   s   t   FailingQueuec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         G   s)   t  |  _ t  |  _ t j j |  | Œ d  S(   N(   t   Falset   fail_next_putt   fail_next_getR'   R
   (   R   R   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyR
   ô   s    		c         C   s4   |  j  r! t |  _  t d ƒ ‚ n  t j j |  | ƒ S(   Ns   You Lose(   R`   R_   R]   R'   t   _put(   R   t   item(    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyRb   ø   s    		c         C   s1   |  j  r! t |  _  t d ƒ ‚ n  t j j |  ƒ S(   Ns   You Lose(   Ra   R_   R]   R'   t   _get(   R   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyRd   ý   s    		(   R   R   R
   Rb   Rd   (    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyR^   ó   s   		t   FailingQueueTestc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s  | j  ƒ  s t d ƒ ‚ n  x% t t d ƒ D] } | j | ƒ q, Wt | _ |  j t ƒ  | j d d d ƒWd  QXt | _ |  j t ƒ  | j d d d ƒWd  QX| j d ƒ |  j	 | j
 ƒ  d	 ƒ t | _ |  j t ƒ ! |  j | j d | j d ƒ Wd  QX| j d ƒ t | _ |  j | j d
 t d f | j d t ƒ | j d ƒ |  j	 | j
 ƒ  d	 ƒ | j ƒ  |  j | j
 ƒ  d ƒ | j d ƒ |  j	 | j
 ƒ  d	 ƒ |  j | j d | j d ƒ x t t ƒ D] } | j ƒ  qÒW|  j	 | j  ƒ  d ƒ | j d ƒ t | _ |  j t ƒ  | j ƒ  Wd  QX|  j | j  ƒ  d ƒ t | _ |  j t ƒ  | j d d ƒ Wd  QX|  j | j  ƒ  d ƒ | j ƒ  |  j	 | j  ƒ  d ƒ t | _ |  j | j d | j d t ƒ |  j | j  ƒ  d ƒ | j ƒ  |  j	 | j  ƒ  d ƒ d  S(   Ns&   Call this function with an empty queuei   t   oopsR*   i    R+   gš™™™™™¹?iç  s   Queue should be fullix  i
   s   Queue should not be fulls   Queue should be emptyt   firsts   Queue should not be emptyR,   (   ix  (    (    (   ix  (    (    (   R,   (   R,   R-   R4   R5   R.   R;   R`   R   R]   R8   R7   R   R1   R!   R6   Ra   (   R   R=   RB   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   failing_queue_test  s\    			"	!
		
	
c         C   s*   t  t ƒ } |  j | ƒ |  j | ƒ d  S(   N(   R^   R5   Rh   (   R   R=   (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   test_failing_queueB  s    (   R   R   Rh   Ri   (    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyRe     s   	=t   __main__(   t   geventR    t	   patch_allR   R'   R   R   t   unittestR5   R	   R   t   objectR   t   TestCaseR"   RT   RU   t	   ExceptionR]   R^   Re   R   t   main(    (    (    s>   lib/python2.7/site-packages/gevent/tests/test__monkey_queue.pyt   <module>   s    
"!G