
    i`7                        d dl mZ d dl mZ d dl mZ d dl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 d dlmZ d d	lmZ d d
lmZ eez   Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d dej                  Z G d dej                  Z G d de          Z G d dej                  Z G d d ej                  Z  G d! d"e           Z! G d# d$e           Z" G d% d&ej                  Z# G d' d(e#          Z$ G d) d*e#          Z% G d+ d,e#          Z& G d- d.ej                  Z'[[e(d/k    r ej)                     dS dS )0    )absolute_import)print_function)divisionN)EventAsyncResult)xrange)AbstractGenericGetTestCase)AbstractGenericWaitTestCase)
SMALL_TICK)SMALL_TICK_MAX_ADJc                       e Zd Zd Zd ZdS )TestEventWaitc                 J    t                                          |           d S Ntimeout)r   waitselfr   s     C/usr/local/lib/python3.11/dist-packages/gevent/tests/test__event.pyr   zTestEventWait.wait   s     W%%%%%    c                 <    t          t                                 d S N)strr   r   s    r   
test_coverzTestEventWait.test_cover   s    EGGr   N)__name__
__module____qualname__r   r    r   r   r   r      s2        & & &    r   r   c                       e Zd Zd Zd ZdS )TestGeventWaitOnEventc                 L    t          j        t                      g|           d S r   )geventr   r   r   s     r   r   zTestGeventWaitOnEvent.wait    s#    UWWIw//////r   c                      t                      fd fd}t          j        |                                           d S )Nc                  0                                       d S r   set)events   r   setterz:TestGeventWaitOnEvent.test_set_during_wait.<locals>.setter*   s    IIKKKKKr   c                     t          j                  }                                 }                    |                                                                          |                                                                                                                                  t          j        fd          }                                                                                   |           d S )Ng{Gz?r   )	r$   spawnr   
assertTruereadyjoinclearassertFalseassertNotIn)sresor)   r   r*   s      r   waiterz:TestGeventWaitOnEvent.test_set_during_wait.<locals>.waiter-   s    V$$A **,,COOC   OOEKKMM***FFHHH KKMMMU[[]]+++
 UHd333AU[[]]+++UA&&&&&r   )r   r$   r,   r/   )r   r6   r)   r*   s   ` @@r   test_set_during_waitz*TestGeventWaitOnEvent.test_set_during_wait#   sp    
 	 	 	 	 		' 	' 	' 	' 	' 	' 	'* 	V!!#####r   N)r   r   r   r   r7   r    r   r   r"   r"      s2        0 0 0$ $ $ $ $r   r"   c                       e Zd Zd ZdS )TestAsyncResultWaitc                 J    t                                          |           d S r   )r   r   r   s     r   r   zTestAsyncResultWait.waitG   s#    7+++++r   Nr   r   r   r   r    r   r   r9   r9   E   s#        , , , , ,r   r9   c                       e Zd Zd ZdS )TestWaitAsyncResultc                 L    t          j        t                      g|           d S r   )r$   r   r   r   s     r   r   zTestWaitAsyncResult.waitM   s#    []]OW555555r   Nr;   r    r   r   r=   r=   K   s#        6 6 6 6 6r   r=   c                       e Zd Zd ZdS )TestAsyncResultGetc                 J    t                                          |           d S r   )r   getr   s     r   r   zTestAsyncResultGet.waitS   s#    '*****r   Nr;   r    r   r   r@   r@   Q   s#        + + + + +r   r@   c                       e Zd ZdS )MyExceptionN)r   r   r   r    r   r   rD   rD   V   s        Dr   rD   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestAsyncResultc                     t                      }|                     t          |j        d            |                    d            |                    d            t          |           d S r   )r   assertRaises	TypeErrorrawlinkunlinkr   r   ars     r   	test_linkzTestAsyncResult.test_link[   sR    ]])RZ666
		$
		$Br   c                 n    g t                                           j        d                                j        d             fd}t	          j        |           t                      }                    |           t	          j        d                                d|fg           d S )Nr    c                                           t                    5 }                                  d d d            n# 1 swxY w Y                       d| j        f           d S )Ncaught)rH   rD   rB   append	exception)excelogr   s    r   r6   z,TestAsyncResult.test_set_exc.<locals>.waiterh   s    "";// 3              JJ#-011111s   =AAr   rQ   )	r   assertEqualexc_inforS   r$   r,   rD   set_exceptionsleep)r   r6   objrU   rV   s   `  @@r   test_set_exczTestAsyncResult.test_set_excb   s    MMR(((d+++	2 	2 	2 	2 	2 	2 	2 	Vmm	Q#/00000r   c                    t                      }t          d          }t          j        t          |j        d          }|                     |j                   t          j        	                    d|          5  | 
                    t                    5 }|                                 d d d            n# 1 swxY w Y   |                     ||j                   d d d            d S # 1 swxY w Y   d S )Ninterruptedzhello event1r   )r   rD   r$   spawn_laterDELAYr(   _close_on_teardownkillTimeout	start_newrH   rB   assertIsrS   )r   event1	timer_excgrT   s        r   test_setzTestAsyncResult.test_setr   sK   ..	 ufj.AA'''^%%a33 	4 	4"";// 3

              MM)S]333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s6   8C'B4(C'4B8	8C';B8	<C''C+.C+c                     t                      }t                      }t          j        t          |j        |          }|                     ||d|           d S )Ntimeout_valuez/Nobody sent anything to event2 yet it received )r   objectr$   with_timeoutr`   rB   re   )r   event2Xresults       r   test_set_with_timeoutz%TestAsyncResult.test_set_with_timeout   sa    HH$UFJaHHHAACI6L	N 	N 	N 	N 	Nr   c                     t                      }|                     t          j        |j        d           |                     t          j        |j                   d S )NF)block)r   rH   r$   rc   rB   
get_nowaitrL   s     r   test_nonblocking_getz$TestAsyncResult.test_nonblocking_get   sJ    ]]&."&>>>&."-88888r   N)r   r   r   rN   r\   ri   rr   rv   r    r   r   rF   rF   Y   sb          1 1 1 4 4 4N N N9 9 9 9 9r   rF   c                       e Zd Zd Zd ZdZd Zej        dd            Z	d Z
d Zd	 Zd
 Zej        d             Zej        d             ZdS )TestAsyncResultCrossThreadc                     t                      S r   r   r   s    r   _makeOnez#TestAsyncResultCrossThread._makeOne   s    }}r   c                 0    |                     d           d S Nz	from mainr'   r   ones     r   _setOnez"TestAsyncResultCrossThread._setOne   s    r   <   c                 ~    t           j        r.dd l}|j        d d         dk    r|                     d           d S d S d S )Nr      )   r   r   z;PyPy bug: https://foss.heptapod.net/pypy/pypy/-/issues/3381)	greentestPYPYsyspypy_version_infoskipTest)r   r   s     r   _check_pypy_switchz-TestAsyncResultCrossThread._check_pypy_switch   sZ    
 > 	]JJJ$RaR(I55[\\\\\	] 	]55r   Fc                 D   |                                   ddlm ddlm s|                                  |  G fdd          } |            }|                                 	 |j                                         |                     |j	                   |j
                            t          dz             |                    t          dz             n"# |                    t          dz             w xY w|                     |j                   d S )Nr   Threadr   c                   ,    e Zd Z fdZfdZdS )@TestAsyncResultCrossThread.test_cross_thread_use.<locals>.Threadc                                          |            d| _                     | _                     | _                                        | _        d| _        d S NTz<never set>__init__daemonrunning_eventfinished_eventr{   async_resultrq   r   NativeEventNativeThreadtests    r   r   zITestAsyncResultCrossThread.test_cross_thread_use.<locals>.Thread.__init__   U    %%d+++"%0[]]"&1kmm#$(MMOO!+r   c                     t                      fd}t          j        |          } fd}r*t          j        |          }|                                 ~n
 |                                              |                                 ~ j                                         t          j                                        d           d S )Nc                                                        s3                     t          dz                                               1d S d S )N   )is_setr   r`   )g_events   r   spinzRTestAsyncResultCrossThread.test_cross_thread_use.<locals>.Thread.run.<locals>.spin   sS    %nn.. 0UQY/// &nn.. 0 0 0 0 0r   c                       j                                          r& j                            j                   _        d S  j                                         _        d S r   )r   r(   r   r   BG_WAIT_DELAYrq   )r   r   
timed_waits   r   workzRTestAsyncResultCrossThread.test_cross_thread_use.<locals>.Thread.run.<locals>.work   s[    &**,,,
 " ?&*&7&<&<T=O&P&P&*&7&<&<&>&>r   Tdestroy_loop)r   r$   r,   r/   r(   r   get_hubdestroy)	r   r   gletr   workerr   r   r   
wait_in_bgs	   `    @r   runzDTestAsyncResultCrossThread.test_cross_thread_use.<locals>.Thread.run   s    ''0 0 0 0 0 |D))	? 	? 	? 	? 	? 	? 	?  #\$//FKKMMMDFFF		#'')))  ((d(;;;;;r   Nr   r   r   r   r   )r   r   r   r   r   s   r   r   r      s[        , , , , , , ,< < < < < < < < <r   r         )assertNotMonkeyPatched	threadingr   r   r   startr   r   r   r   r   r`   r/   _check_resultrq   )r   r   r   r   threadr   r   r   s    ``  @@@r   test_cross_thread_usez0TestAsyncResultCrossThread.test_cross_thread_use   s\    	##%%%444444222222 	&##%%%)	< )	< )	< )	< )	< )	< )	< )	< )	< )	< )	<\ )	< )	< )	<V 	$ %%'''LL,---!&&uqy111KK
####FKK
####6=)))))s   1AC$ $Dc                 2    |                      |d           d S r}   )rW   r   rq   s     r   r   z(TestAsyncResultCrossThread._check_result   s    -----r   c                 4    |                      dd           d S )NFTr   r   r   r   s    r   test_cross_thread_use_bgz3TestAsyncResultCrossThread.test_cross_thread_use_bg   s!    ""e"EEEEEr   c                 4    |                      dd           d S )NTFr   r   r   s    r   test_cross_thread_use_timedz6TestAsyncResultCrossThread.test_cross_thread_use_timed   s!    ""du"EEEEEr   c                 4    |                      dd           d S )NTr   r   r   s    r   test_cross_thread_use_timed_bgz9TestAsyncResultCrossThread.test_cross_thread_use_timed_bg   s!    ""dt"DDDDDr   c                 B   |                                   ddlm ddlm |                                  |  G fdd          } |            }d }	 t          j        |j                  }|j        	                    | j
                  }|                    t          dz             ||                    t                     n?# |                    t          dz             ||                    t                     w w xY w|                     |           d S )Nr   r   r   c                   (    e Zd Z fdZfdZdS )JTestAsyncResultCrossThread.test_cross_thread_use_set_in_bg.<locals>.Threadc                                          |            d| _                     | _                     | _                                        | _        d| _        d S r   r   r   s    r   r   zSTestAsyncResultCrossThread.test_cross_thread_use_set_in_bg.<locals>.Thread.__init__   r   r   c                     | j                                                              | j                   | j                                         t          j                                        d           d S )NTr   )r   r(   r   r   r   r$   r   r   )r   r   s    r   r   zNTestAsyncResultCrossThread.test_cross_thread_use_set_in_bg.<locals>.Thread.run  sg    "&&(((T.///#'')))  ((d(;;;;;r   Nr   )r   r   r   s   r   r   r      sQ        , , , , , , ,< < < < < < <r   r   r   )r   r   r   r   r   r$   r,   r   r   r   r   r/   r`   r   )r   r   r   r   rq   r   r   r   s        @@@r   test_cross_thread_use_set_in_bgz:TestAsyncResultCrossThread.test_cross_thread_use_set_in_bg   sV   ##%%%444444222222!!!	< 	< 	< 	< 	< 	< 	< 	< 	<\ 	< 	< 	<" 	!<--D(--d.@AAFKK
###		%    KK
###		%      6"""""s   8C <Dc                 .    |                                   d S r   )r   r   s    r    test_cross_thread_use_set_in_bg2z;TestAsyncResultCrossThread.test_cross_thread_use_set_in_bg2  s     	,,.....r   N)FF)r   r   r   r{   r   r   r   r   ignores_leakcheckr   r   r   r   r   r   r   r    r   r   rx   rx      s             M] ] ]  D* D* D* ! D*L. . .F F FF F FE E E  !# !# ! !#F  / / ! / / /r   rx   c                        e Zd Zd Zd Zd ZdS )TestEventCrossThreadc                     t                      S r   r   r   s    r   r{   zTestEventCrossThread._makeOne!  s    wwr   c                 .    |                                  d S r   r'   r~   s     r   r   zTestEventCrossThread._setOne$  s    					r   c                 0    |                      |           d S r   )r-   r   s     r   r   z"TestEventCrossThread._check_result'  s    r   N)r   r   r   r{   r   r   r    r   r   r   r     sA                     r   r   c                       e Zd ZdZd Zd ZdS )TestAsyncResultAsLinkTargetFc                 ,   t          j        d           }t                      t                      t                      }}}|                    |           |                    |           |                    |           |                     |                                d           |                     |                                d           t                      }t          j	        t          |j        |          }|                     ||           d S )Nc                      dS )N   r    r    r   r   <lambda>z6TestAsyncResultAsLinkTarget.test_set.<locals>.<lambda>/  s     r   r   rk   )r$   r,   r   link
link_valuelink_exceptionrW   rB   rm   rn   r`   re   )r   rh   s1s2s3rp   rq   s          r   ri   z$TestAsyncResultAsLinkTarget.test_set.  s    L## ]]KMM;==B	r


	R	1%%%1%%%HH$UBF!DDDfa     r   c                 $   d }t          j        |          }t                      t                      t                      }}}|                    |           |                    |           |                    |           |                     t          j        |j	                   t                      }t          j        t          |j	        |          }|                     ||           |                     t          j        |j	                   d S )Nc                  *    t          j        d          )Nz.TestAsyncResultAsLinkTarget.test_set_exception)r   ExpectedExceptionr    r   r   funcz<TestAsyncResultAsLinkTarget.test_set_exception.<locals>.func;  s    -.^___r   rk   )r$   r,   r   r   r   r   rH   r   r   rB   rm   rn   r`   re   )r   r   rh   r   r   r   rp   rq   s           r   test_set_exceptionz.TestAsyncResultAsLinkTarget.test_set_exception:  s    	` 	` 	`L ]]KMM;==B	r


	R	)5rv>>>HH$UBF!DDDfa   )5rv>>>>>r   N)r   r   r   error_fatalri   r   r    r   r   r   r   +  s7        K
! 
! 
!? ? ? ? ?r   r   c                       e Zd ZdZd ZdS )TestEvent_SetThenClearr   c                    t                      fdt          | j                  D             }t          j        d                                                                             |D ]}|                                 d S )Nc                 B    g | ]}t          j        j                  S r    )r$   r,   r   ).0irU   s     r   
<listcomp>z/TestEvent_SetThenClear.test.<locals>.<listcomp>N  s%    ???A6<''???r   gMbP?)r   rangeNr$   rZ   r(   r0   r/   )r   waitersgreenletrU   s      @r   r   zTestEvent_SetThenClear.testL  s    GG????tv???U					 	 	HMMOOOO	 	r   N)r   r   r   r   r   r    r   r   r   r   I  s(        	A    r   r   c                       e Zd ZdZdS )TestEvent_SetThenClear100d   Nr   r   r   r   r    r   r   r   r   V  s        AAAr   r   c                       e Zd ZdZdS )TestEvent_SetThenClear1000i  Nr   r    r   r   r   r   Z  s        AAAr   r   c                   \    e Zd ZdZdZdZedz  Zd Z ej	        d          d             Z
dS )TestWaitr   Nr   g      Y@c                    |s|rt          j        | j                   |r&|                                                                 t          j        | j                   |r&|                                                                 ||d S d S r   )r$   rZ   periodpopr(   )r   eventsasyncss      r   _senderzTestWait._senderd  s     	# 	#L%%% #

  """L%%% #

  """  	# 	# 	# 	# 	# 	#r   z:Not all results have arrived sometimes due to timer issuesc                    d t          | j                  D             }d t          | j                  D             }t          |          t          |          z   }t          j        | j        ||          }t          j        ||z   | j        | j                  }| j        |}nt          || j        | j
        z            }| j        )|                     |                                |           nQt          | j        |          }|                     |                                |           |                                 |                     |t          |          |t          |          |f           d S )Nc                 *    g | ]}t                      S r    r   r   _s     r   r   z!TestWait.test.<locals>.<listcomp>o  s    222a%''222r   c                 *    g | ]}t                      S r    rz   r   s     r   r   z!TestWait.test.<locals>.<listcomp>p  s    888A+--888r   )countr   )r   r   lenr$   r,   r   r   r  r   minr   r-   r.   r1   rb   rW   )r   r   r   max_lensenderresultsexpected_lens          r   r   zTestWait.testm  s=   226$&>>22288888f++F+dlFF;;+fvoTZVVV<"LLwt{(BCCL:OOFLLNNF3333tz<88LV\\^^V444KKMMMs7||lCLLRY5Z[[[[[r   )r   r   r   r   r  r   r   r   r   skipOnAppVeyorr   r    r   r   r   r   ^  sk        	AEGu_F# # # YZ[[\ \ \[\ \ \r   r   c                       e Zd ZdZdS )TestWait_notimeoutN)r   r   r   r   r    r   r   r
  r
    s        GGGr   r
  c                       e Zd ZdZdS )TestWait_count1r   Nr   r   r   r  r    r   r   r  r            EEEr   r  c                       e Zd ZdZdS )TestWait_count2r   Nr  r    r   r   r  r    r  r   r  c                        e Zd Zd Zd Zd ZdS )TestEventBasicsc                     t                      }t          j        |          }|                     | |                       ~~d S r   )r   weakrefrefre   )r   rU   rs      r   test_weakrefzTestEventBasics.test_weakref  s<    GGKNNaAAr   c                 H   t                      g fd}t          j        |d           t          j        |d           t          j                     |                     d                                           t          j                    j                                        }|	                    j
        d                                             |d           |                     g d           |                                 |                                 d S )Nc                 Z                                                          |            d S r   )r   rR   )argr)   r  s    r   wait_then_appendzCTestEventBasics.test_wait_while_notifying.<locals>.wait_then_append  s(    JJLLLNN3r   r   r      r   )r   r   r   )r   r$   r,   idlerW   	linkcountr   loopcheckr   rR   r(   stopclose)r   r  r   r)   r  s      @@r   test_wait_while_notifyingz)TestEventBasics.test_wait_while_notifying  s    	  	  	  	  	  	  	%q)))%q)))EOO--...  %++--GNA&&&		))),,,

r   c                     t                      }|                                 t          j        |g          }|                     ||g           t          j        |g          }|                     ||g           d S r   )r   r(   r$   r   rW   )r   r)   rq   s      r   'test_gevent_wait_twice_when_already_setz7TestEventBasics.test_gevent_wait_twice_when_already_set  sr    		eW%%%))) eW%%%)))))r   N)r   r   r   r  r#  r%  r    r   r   r  r    sA            4	* 	* 	* 	* 	*r   r  __main__)*
__future__r   r   r   r  r$   gevent.eventr   r   gevent.testingtestingr   gevent.testing.sixr   gevent.testing.timingr	   r
   r   r   r`   r   r"   r9   r=   r@   	ExceptionrD   TestCaserF   rx   r   r   r   r   r   r   r
  r  r  r  r   mainr    r   r   <module>r0     s0   & & & & & & % % % % % %         + + + + + + + + " " " " " " % % % % % % < < < < < < = = = = = = , , , , , , 4 4 4 4 4 4''    /   $$ $$ $$ $$ $$7 $$ $$ $$N, , , , ,5 , , ,6 6 6 6 65 6 6 6+ + + + +3 + + +
	 	 	 	 	) 	 	 	49 49 49 49 49i( 49 49 49lN/ N/ N/ N/ N/!3 N/ N/ N/`	  	  	  	  	 5 	  	  	 ? ? ? ? ?)"4 ? ? ?<
 
 
 
 
Y/ 
 
 
     6       !7    \  \  \  \  \y!  \  \  \F           h       h   -* -* -* -* -*i( -* -* -*` zIN r   