o
    U˟iC                     @   s  d dl Z d dlmZ d dlmZ d dlZd dlmZmZ d dlm	Z	 d dlm
Z
 d dlmZmZ d dlmZ d dlmZ G d	d
 d
ZG dd dZG dd deeeZG dd deeeZG dd deZG dd deeZG dd deeZG dd deZG dd deeZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZ G d%d& d&e Z!G d'd( d(e Z"G d)d* d*e Z#G d+d, d,e Z$G d-d. d.eZ%[e&d/kre'  dS dS )0    N)TestCase)get_hubLoopExit)utilqueue)EmptyFullAsyncResult)AbstractGenericGetTestCasec                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )UsesOnlyOneItemMixinTc                    s   g  |  d} fdd}t jj}||tt|jd ||tt|jd t	d | 
t d | jrA|  d   n
|  d tj  |  d tj  d S )N   c                         | |  d S Nappendfuncargsresult `/var/www/apps/myagent/mysuperagent/venv/lib/python3.10/site-packages/gevent/tests/test__queue.pystore_result      zAUsesOnlyOneItemMixin.test_put_nowait_simple.<locals>.store_result      r   )_makeOner   looprun_callbackr   wrap_errorsr	   
put_nowaitgeventsleepassertEquallen SUPPORTS_PUTTING_WITHOUT_GETTINGassertIsNoneassertIsInstancer   selfqr   r    r   r   r   test_put_nowait_simple   s   


z+UsesOnlyOneItemMixin.test_put_nowait_simplec                    s   g  |   }t|j} fdd}| | | | jr!| j}n| j}|| | t	d | | | || | t
 j||jd | | | t	d |  d g | | | || | | | | d S )Nc                    r   r   r   r   r   r   r   r   .   r   zAUsesOnlyOneItemMixin.test_put_nowait_unlock.<locals>.store_resultMbP?
   )r   r#   spawnget
assertTrueemptyr'   assertFalsefullr$   r   r   r    r"   readyr%   )r+   r,   pr   
assertFullr   r   r   test_put_nowait_unlock)   s&   

z+UsesOnlyOneItemMixin.test_put_nowait_unlockc                    sV      } fdd}t||}td |d td |jdddks)J d S )Nc                    sJ   t tjsdnd  |  d W d    dS 1 sw   Y  dS )N皙?g      ?hi2OK)r#   Timeout	greentestRUNNING_ON_APPVEYORr%   r1   r,   r+   r   r   waiterJ   s   
z3UsesOnlyOneItemMixin.test_send_last.<locals>.waiter{Gz?r;   r   timeoutr<   )r   r#   r0   r$   putr1   )r+   r,   rB   r7   r   rA   r   test_send_lastG   s   


z#UsesOnlyOneItemMixin.test_send_lastc                 C   sp   | j s| d G dd d|  }| }|d | | d | |jd | |jd | |j	 d S )NzNeeds to be able to put and getc                       s@   e Zd ZdZdZdZ fddZ fddZ fddZ  Z	S )	z@UsesOnlyOneItemMixin.test_init_and_bottleneck_methods.<locals>.XNr   c                    s   t  | d| _d S NT)super_initinitted)r+   maxsize	__class__r   r   rJ   `   s   
zFUsesOnlyOneItemMixin.test_init_and_bottleneck_methods.<locals>.X._initc                    s   |  j d7  _ t  S Nr   )	get_countrI   _getrA   rM   r   r   rQ   d   s   
zEUsesOnlyOneItemMixin.test_init_and_bottleneck_methods.<locals>.X._getc                    s   |  j d7  _ t |S rO   )	put_countrI   _put)r+   itemrM   r   r   rS   h   s   zEUsesOnlyOneItemMixin.test_init_and_bottleneck_methods.<locals>.X._put)
__name__
__module____qualname__rK   rP   rR   rJ   rQ   rS   __classcell__r   r   rM   r   X[   s    rY   hir   )
r'   skipTest_getFUTrF   r%   r1   rR   rP   r2   rK   )r+   rY   xr   r   r    test_init_and_bottleneck_methodsV   s   

z5UsesOnlyOneItemMixin.test_init_and_bottleneck_methodsN)rU   rV   rW   r'   r-   r9   rG   r^   r   r   r   r   r      s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )SubscriptMixinc                 C   s   t r   )NotImplementedErrorrA   r   r   r   r\   u   s   zSubscriptMixin._getFUTc                 O   s   |   |i |S r   )r\   )r+   r   kwargsr   r   r   r   x   r   zSubscriptMixin._makeOnec                 C   s   dd l }|  }zt||j}W n ty.   |jdksJ dd l}| |t |j Y d S w | 	|| | |t t
|t  d S )Nr   Channel)r   r\   getattrrU   AttributeErrortypesr)   intGenericAliasassertIsNottype)r+   stdlib_queuekindstdlib_kindre   r   r   r   test_subscript{   s   zSubscriptMixin.test_subscriptN)rU   rV   rW   r\   r   rm   r   r   r   r   r_   t   s    r_   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestSimpleQueuec                 C      t jS r   )r   SimpleQueuerA   r   r   r   r\         zTestSimpleQueue._getFUTc                    s   g  |  d}|d  fdd}t jj}||tt|j ||tt|j t	
d | t d |  d d |  d t d S )Nr      c                    r   r   r   r   r   r   r   r      r   z<TestSimpleQueue.test_get_nowait_simple.<locals>.store_resultr   r   )r   rF   r   r   r    r   r!   r   
get_nowaitr#   r$   r%   r&   r)   r*   r   r   r   test_get_nowait_simple   s   



z&TestSimpleQueue.test_get_nowait_simplec                    s   g  |  d}t|jd} fdd}| sJ |td | s)J |t j	||j
 td | s?J | dgksHJ  | sPJ ||jsWJ || s_J |d S )Nr      c                    r   r   r   r   r   r   r   r      r   z<TestSimpleQueue.test_get_nowait_unlock.<locals>.store_resultr   )r   r#   r0   rF   r3   r$   r5   r   r   r    rs   r6   deadr+   r,   r7   r   r   r   r   test_get_nowait_unlock   s   


z&TestSimpleQueue.test_get_nowait_unlockc                 C   s<   d| _ |  }|d | | d | | d d S )NFrZ   )switch_expectedr   rF   r%   peekr1   r+   r,   r   r   r   test_send_first   s
   
zTestSimpleQueue.test_send_firstc                    sh      } t |  W d    n1 sw   Y   fdd}t||}td |  d S )Nc                    s    j t| jdd d S )NrC   rD   )assertRaisesr   rz   r@   rA   r   r   rB      s   z/TestSimpleQueue.test_peek_empty.<locals>.waiterr:   )r   r}   r   rz   r#   r0   r$   join)r+   r,   rB   gr   rA   r   test_peek_empty   s   

zTestSimpleQueue.test_peek_emptyc                 C   s\   |   }t|j}|  td |d |  | |j	d u  | 
| d d S )Nr   r   )r   r#   r0   rz   startr$   rF   r~   r2   	exceptionr%   )r+   r,   r   r   r   r   test_peek_multi_greenlet   s   

z(TestSimpleQueue.test_peek_multi_greenletc                    s   |  d}g   fdd}t||}td |  ddg | | d td |  g d | | d | | d |jdd	d
ksOJ d S )Nr   c                    s@   |  d  d |  d  d |  d  d dS )Nabcr<   )rF   r   r@   resultsr   r   putter   s   





z-TestSimpleQueue.test_max_size.<locals>.putterr   r   r   )r   r   r   r   rD   r<   )r   r#   r0   r$   r%   r1   )r+   r,   r   r7   r   r   r   test_max_size   s   
	

zTestSimpleQueue.test_max_sizec                    s   |   }dd }g d}dd |D  t|D ]\}}t|| |  qtd t  fdd}||d	  | | d
 ||d
  | | d ||d  ||d  | | d d S )Nc                 S      | |   d S r   setr1   r,   evtr   r   r   rB      r   z5TestSimpleQueue.test_multiple_waiters.<locals>.waiter)1234c                 S   s   g | ]}t  qS r   r
   ).0r]   r   r   r   
<listcomp>   s    z9TestSimpleQueue.test_multiple_waiters.<locals>.<listcomp>rC   c               	      sP    D ]!} t dd |  }| W d    n1 sw   Y  qtS )Nr.   F)r#   r=   r1   addr&   )er]   evtsr   r   r   collect_pending_results   s   zFTestSimpleQueue.test_multiple_waiters.<locals>.collect_pending_resultsr   r   r   r   rr   )r   	enumerater#   r0   r$   r   rF   r%   )r+   r,   rB   sendingsi_r   r   r   r   test_multiple_waiters   s    
z%TestSimpleQueue.test_multiple_waitersc                 C   sR   |   }dd }t }t||| | | d |d | | d d S )Nc              	   S   x   t dt + z|  }|| W n ty!   |d Y n	w W d    d S W d    d S 1 s5w   Y  d S Nr   	timed outr#   r=   RuntimeErrorr1   r   r,   r   r   r   r   r   
do_receive	     "z<TestSimpleQueue.test_waiters_that_cancel.<locals>.do_receiver   rZ   )r   r   r#   r0   r%   r1   rF   )r+   r,   r   r   r   r   r   test_waiters_that_cancel  s   
z(TestSimpleQueue.test_waiters_that_cancelc                 C   s0   |   }dd }t|| | | d d S )Nc                 S   s   |  d d S )Nsent)rF   r@   r   r   r   do_send  s   z6TestSimpleQueue.test_senders_that_die.<locals>.do_sendr   )r   r#   r0   r%   r1   )r+   r,   r   r   r   r   test_senders_that_die  s   z%TestSimpleQueue.test_senders_that_diec                 C   sx   dd }dd }|   }t }t }t||| t||| td |d | | d | | d d S )Nc                 S   r   r   r   r   r   r   r   rB   #  r   z9TestSimpleQueue.test_two_waiters_one_dies.<locals>.waiterc              	   S   r   r   r   r   r   r   r   r   &  r   z=TestSimpleQueue.test_two_waiters_one_dies.<locals>.do_receiver:   rZ   r   r   r   r#   r0   r$   rF   r%   r1   )r+   rB   r   r,   	dying_evtwaiting_evtr   r   r   test_two_waiters_one_dies!  s   

z)TestSimpleQueue.test_two_waiters_one_diesc                 C   s   dd }|   }t }t }t||| t||| td |d | | d | | d | | d d S )Nc              	   S   r   r   r   r   r   r   r   r   9  r   z:TestSimpleQueue.test_two_bogus_waiters.<locals>.do_receiver:   r   r   r   )r+   r   r,   e1e2r   r   r   test_two_bogus_waiters8  s   

z&TestSimpleQueue.test_two_bogus_waitersc                    sH   |  t|  d g  G  fddd|  }| }| |j  d S )Nr   c                       s   e Zd Z fddZdS )z5TestSimpleQueue.test_subclass_assign_queue.<locals>.Qc                    s
    | _ d S r   r   )r+   _maxsizemy_queuer   r   rJ   S     
z;TestSimpleQueue.test_subclass_assign_queue.<locals>.Q._initN)rU   rV   rW   rJ   r   r   r   r   QR  s    r   )r2   hasattrr   r\   assertIsr   )r+   r   r,   r   r   r   test_subclass_assign_queueL  s
   z*TestSimpleQueue.test_subclass_assign_queueN)rU   rV   rW   r\   rt   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   rn      s    
	rn   c                   @   s@   e 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 )TestChannelFc                 C   ro   r   )r   rb   rA   r   r   r   r\   ]  rq   zTestChannel._getFUTc                    s   g  |   }t|jd} fdd}| |  | |  td | |  | |  t j	
||j td | |  | |  |  dg | |  | |j | |  d S )Nru   c                    r   r   r   r   r   r   r   r   g  r   z@TestChannel.test_get_nowait_unlock_channel.<locals>.store_resultr.   )r   r#   r0   rF   r2   r3   r5   r$   r   r   r    rs   r%   r6   rv   rw   r   r   r   test_get_nowait_unlock_channel`  s"   

z*TestChannel.test_get_nowait_unlock_channelc                 C   s   |   }dd }dd }t }t }t|||}td | |   t|||}| | d | | d t	d t
||g W d    d S 1 sUw   Y  d S )	Nc                 S   s   | d | d d S )NrZ   done)rF   r   )r   r,   r   r   r   sender}  s   
z.TestChannel.test_zero_max_size.<locals>.senderc                 S   s   |  }| | d S r   )r1   r   )r   r,   r]   r   r   r   receiver  s   z0TestChannel.test_zero_max_size.<locals>.receiverr.   rZ   r   r   )r   r   r#   r0   r$   r2   r6   r%   r1   r=   joinall)r+   r,   r   r   r   r   p1p2r   r   r   test_zero_max_sizez  s   
"zTestChannel.test_zero_max_sizec                    sr   |    g  fdd}t|}d  d d  d d | g d |  d S )	Nc                      s            d S r   )r   r1   r   channeleventsr   r   another_greenlet  s   z/TestChannel.test_send.<locals>.another_greenletsendinghello
sent helloworld
sent world)r   r   r   r   r   )r   r#   r0   r   rF   r%   r1   r+   r   r   r   r   r   	test_send  s   





zTestChannel.test_sendc                    s   |    g  fdd}t|}d       | g d td | g d |  d S )Nc                      s6    d  d  d  d  d d S )Nsending hellor   sending worldr   r   )r   rF   r   r   r   r   r     s
   



z/TestChannel.test_wait.<locals>.another_greenletwaiting)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r#   r0   r   r1   r%   r$   r   r   r   r   	test_wait  s   


zTestChannel.test_waitc                 C   s.   |   }t|jt t|}| |g  d S r   )r   r#   r0   rF   StopIterationlistr%   )r+   r   rr   r   r   test_iterable  s   zTestChannel.test_iterableN)
rU   rV   rW   r'   r\   r   r   r   r   r   r   r   r   r   r   Z  s    r   c                   @   s@   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Zdd Z	dS )	TestQueuec                 C   ro   r   )r   QueuerA   r   r   r   r\     rq   zTestQueue._getFUTc                 C   sX   |   }t }t|j| | }| || | d|j |	  | d|j d S )Nr   r   )
r   objectr#   r0   rF   r1   r   r%   unfinished_tasks	task_done)r+   r   rY   r   r   r   r   test_task_done  s   zTestQueue.test_task_donec                 C   s*  |   }|d |d || | | jj |d W d    n1 s*w   Y  | | jj |d W d    n1 sFw   Y  |r| | jj |  W d    n1 scw   Y  | | jj |  W d    n1 s~w   Y  | t	 |
  W d    n1 sw   Y  |  d S | | d |
  | | d |
  |  | | jj |  W d    n1 sw   Y  | | jj |  W d    n1 sw   Y  | | jj |dd W d    d S 1 sw   Y  d S )NLOEWLOTg      ?)r   rF   r"   shutdownr}   r   ShutDownr1   rs   
ValueErrorr   r~   assertIn)r+   	immediater,   r   r   r   #_shutdown_all_methods_in_one_thread  sF   







$z-TestQueue._shutdown_all_methods_in_one_threadc                 C   
   |  dS )NFr   rA   r   r   r   'test_shutdown_all_methods_in_one_thread  r   z1TestQueue.test_shutdown_all_methods_in_one_threadc                 C   r   rH   r   rA   r   r   r   1test_shutdown_immediate_all_methods_in_one_thread  r   z;TestQueue.test_shutdown_immediate_all_methods_in_one_threadc                 C   s   d| _ |  }|  dS )zFTest that join() exits immediately if not jobs were put into the queueFN)ry   r   r~   r{   r   r   r   test_issue_45  s   zTestQueue.test_issue_45N)
rU   rV   rW   r   r\   r   r   r   r   r   r   r   r   r   r     s    !r   c                   @      e Zd Zdd ZdS )TestLifoQueuec                 C   ro   r   )r   	LifoQueuerA   r   r   r   r\     rq   zTestLifoQueue._getFUTNrU   rV   rW   r\   r   r   r   r   r         r   c                   @   r   )TestPriorityQueuec                 C   ro   r   )r   PriorityQueuerA   r   r   r   r\     rq   zTestPriorityQueue._getFUTNr   r   r   r   r   r     r   r   c                   @   r   )AbstractTestWeakRefMixinc                 C   s,   dd l }|  }||}| ||  d S )Nr   )weakrefr   refr   )r+   r   oner   r   r   r   test_weak_reference  s   
z,AbstractTestWeakRefMixin.test_weak_referenceN)rU   rV   rW   r   r   r   r   r   r     s    r   c                   @   s&   e Zd ZeZejZdd Zdd Z	dS )TestGetInterruptc                 C   s   |   j|dS )NrD   )r   r1   r+   rE   r   r   r   wait  s   zTestGetInterrupt.waitc                 C      |   S r   rk   rA   r   r   r   r        zTestGetInterrupt._makeOneN)
rU   rV   rW   r   r=   r   rp   rk   r   r   r   r   r   r   r     s
    r   c                   @      e Zd ZejZdS )TestGetInterruptJoinableQueueNrU   rV   rW   r   r   rk   r   r   r   r   r   !      
r   c                   @   r   )TestGetInterruptLifoQueueNrU   rV   rW   r   r   rk   r   r   r   r   r  $  r  r  c                   @   r   )TestGetInterruptPriorityQueueNrU   rV   rW   r   r   rk   r   r   r   r   r  '  r  r  c                   @   r   )TestGetInterruptChannelN)rU   rV   rW   r   rb   rk   r   r   r   r   r  *  r  r  c                       s6   e Zd ZejZeZ fddZdd Z	dd Z
  ZS )TestPutInterruptc                    s   t t|   |  | _d S r   )rI   r  setUpr   r   rA   rM   r   r   r	  2  s   zTestPutInterrupt.setUpc                 C   s0   | j  s| j d | j  r| j jd|dS )Nr   r   rD   )r   r5   rF   r   r   r   r   r   6  s   

zTestPutInterrupt.waitc                 C   r   rO   r   rA   r   r   r   r   ;  r   zTestPutInterrupt._makeOne)rU   rV   rW   r   rp   rk   r	   r=   r	  r   r   rX   r   r   rM   r   r  .  s    r  c                   @   r   )TestPutInterruptJoinableQueueNr  r   r   r   r   r
  ?  r  r
  c                   @   r   )TestPutInterruptLifoQueueNr  r   r   r   r   r  B  r  r  c                   @   r   )TestPutInterruptPriorityQueueNr  r   r   r   r   r  E  r  r  c                   @   s   e Zd ZejZdd ZdS )TestPutInterruptChannelc                 C   r   r   r   rA   r   r   r   r   K  r   z TestPutInterruptChannel._makeOneN)rU   rV   rW   r   rb   rk   r   r   r   r   r   r  H  s    r  c                   @   s"   e Zd ZejZdd ZeZeZdS )TestGetInterruptSimpleQueuec                 C   s
   t d)NzNot supported)unittestSkipTestrA   r   r   r   test_raises_timeout_TimeoutT  r   z7TestGetInterruptSimpleQueue.test_raises_timeout_TimeoutN)	rU   rV   rW   r   rp   rk   r  *test_raises_timeout_Timeout_exc_customizedtest_outer_timeout_is_not_lostr   r   r   r   r  Q  s
    r  __main__)(r  gevent.testingtestingr>   r   r#   
gevent.hubr   r   r   r   gevent.queuer   r	   gevent.eventr   gevent.testing.timingr   r   r_   rn   r   r   r   r   r   r   r   r   r  r  r  r  r
  r  r  r  r  rU   mainr   r   r   r   <module>   sD    f Rh@		
