
    <|h`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j6                        Z G d dej6                        Z G d de      Z G d dej6                        Z G d d ej6                        Z  G d! d"e       Z! G d# d$e       Z" G d% d&ej6                        Z# G d' d(e#      Z$ G d) d*e#      Z% G d+ d,e#      Z& G d- d.ej6                        Z'[[e(d/k(  r ejR                          yy)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y)TestEventWaitc                 8    t               j                  |       y Ntimeout)r   waitselfr   s     W/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/test__event.pyr   zTestEventWait.wait   s    W%    c                 *    t        t                      y N)strr   r   s    r   
test_coverzTestEventWait.test_cover   s    EGr   N)__name__
__module____qualname__r   r    r   r   r   r      s    &r   r   c                       e Zd Zd Zd Zy)TestGeventWaitOnEventc                 D    t        j                  t               g|       y r   )geventr   r   r   s     r   r   zTestGeventWaitOnEvent.wait    s    UWIw/r   c                 |     t               fd fd}t        j                  |      j                          y )Nc                  &     j                          y r   set)events   r   setterz:TestGeventWaitOnEvent.test_set_during_wait.<locals>.setter*   s    IIKr   c                     t        j                        } j                         }j                  |       j                  j	                                | j                          j                          j                  j	                                t        j                  fd      }j                  j	                                j                  |       y )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 OOEKKM*FFH KKMU[[]+
 UHd3AU[[]+UA&r   )r   r$   r,   r/   )r   r6   r)   r*   s   ` @@r   test_set_during_waitz*TestGeventWaitOnEvent.test_set_during_wait#   s-    
 		'* 	V!!#r   N)r   r   r   r   r7   r    r   r   r"   r"      s    0$r   r"   c                       e Zd Zd Zy)TestAsyncResultWaitc                 8    t               j                  |       y 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y)TestWaitAsyncResultc                 D    t        j                  t               g|       y r   )r$   r   r   r   s     r   r   zTestWaitAsyncResult.waitM   s    []OW5r   Nr;   r    r   r   r=   r=   K   s    6r   r=   c                       e Zd Zd Zy)TestAsyncResultGetc                 8    t               j                  |       y 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y)MyExceptionN)r   r   r   r    r   r   rD   rD   V   s    r   rD   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestAsyncResultc                     t               }| j                  t        |j                  d        |j	                  d        |j	                  d        t        |       y r   )r   assertRaises	TypeErrorrawlinkunlinkr   r   ars     r   	test_linkzTestAsyncResult.test_link[   s<    ])RZZ6
		$
		$Br   c                 T    g t                j                  j                  d        j                  j                  d         fd}t	        j
                  |       t               }j                  |       t	        j                  d        j                  d|fg       y )Nr    c                      j                  t              5 } j                          d d d        j                  d j                  f       y # 1 sw Y   'xY w)Ncaught)rH   rD   rB   append	exception)excelogr   s    r   r6   z,TestAsyncResult.test_set_exc.<locals>.waiterh   sF    "";/ 3JJ#--01 s   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    MR(d+	2 	Vm	Q#/0r   c                    t               }t        d      }t        j                  t        |j
                  d      }| j                  |j                         t        j                  j                  d|      5  | j                  t              5 }|j                          d d d        | j                  |j                         d d d        y # 1 sw Y   .xY w# 1 sw Y   y xY w)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   s    .	 ufjj.A'^^%%a3 	4"";/ 3

MM)S]]3	4 	4 	4 	4s$   6CC
$C
C	CCc                     t               }t               }t        j                  t        |j
                  |      }| j                  ||d|       y )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   s@    H$$UFJJaHACIL	Nr   c                     t               }| j                  t        j                  |j                  d       | j                  t        j                  |j
                         y )NF)block)r   rH   r$   rc   rB   
get_nowaitrL   s     r   test_nonblocking_getz$TestAsyncResult.test_nonblocking_get   s>    ]&.."&&>&.."--8r   N)r   r   r   rN   r\   ri   rr   rv   r    r   r   rF   rF   Y   s    1 4N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y)TestAsyncResultCrossThreadc                     t               S r   )r   r   s    r   _makeOnez#TestAsyncResultCrossThread._makeOne   s
    }r   c                 &    |j                  d       y Nz	from mainr'   r   ones     r   _setOnez"TestAsyncResultCrossThread._setOne   s    r   <   c                 v    t         j                  r)dd l}|j                  d d dk  r| j	                  d       y y y )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   s:    
 >>$$Ra(I5[\ 6 r   c                    | j                          ddlm ddlm s| j	                          |  G fdd      } |       }|j                          	 |j                  j                          | j                  |j                         |j                  j                  t        dz         |j                  t        dz         | j                  |j                         y # |j                  t        dz         w xY w)Nr   Threadr   c                   *    e Zd Z fdZfdZy)@TestAsyncResultCrossThread.test_cross_thread_use.<locals>.Threadc                     j                  |        d| _                | _                | _        j	                         | _        d| _        y NTz<never set>__init__daemonrunning_eventfinished_eventrz   async_resultrq   r   NativeEventNativeThreadtests    r   r   zITestAsyncResultCrossThread.test_cross_thread_use.<locals>.Thread.__init__   A    %%d+"%0]"&1m#$(MMO!+r   c                 ~    t               fd}t        j                  |      } fd}r't        j                  |      }|j                          ~n |        j	                          |j                          ~ j
                  j	                          t        j                         j                  d       y )Nc                  z     j                         s* j                  t        dz          j                         s)y y )N   )is_setr   r`   )g_events   r   spinzRTestAsyncResultCrossThread.test_cross_thread_use.<locals>.Thread.run.<locals>.spin   s)    %nn.UQY/ &nn.r   c                       j                   j                          r+ j                  j                  j                         _        y  j                  j                          _        y r   )r   r(   r   r   BG_WAIT_DELAYrq   )r   r   
timed_waits   r   workzRTestAsyncResultCrossThread.test_cross_thread_use.<locals>.Thread.run.<locals>.work   sN    &&**,
 "&*&7&7&<&<T=O=O&P&*&7&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 ||D)	? #\\$/FKKMF		##'') ((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2##%)	< )	<\ )	<V 	$  %%'LL,,-!!&&uqy1KK
#6==) KK
#s   AC* *Dc                 (    | j                  |d       y r|   )rW   r   rq   s     r   r   z(TestAsyncResultCrossThread._check_result   s    -r   c                 *    | j                  dd       y )NFTr   r   r   r   s    r   test_cross_thread_use_bgz3TestAsyncResultCrossThread.test_cross_thread_use_bg   s    ""e"Er   c                 *    | j                  dd       y )NTFr   r   r   s    r   test_cross_thread_use_timedz6TestAsyncResultCrossThread.test_cross_thread_use_timed   s    ""du"Er   c                 *    | j                  dd       y )NTr   r   r   s    r   test_cross_thread_use_timed_bgz9TestAsyncResultCrossThread.test_cross_thread_use_timed_bg   s    ""dt"Dr   c                    | j                          ddlm ddlm | j	                          |  G fdd      } |       }d }	 t        j                  |j                        }|j                  j                  | j                        }|j                  t        dz         ||j                  t               	 | j                  |       y # |j                  t        dz         ||j                  t               w w xY w)Nr   r   r   c                   &    e Zd Z fdZfdZy)JTestAsyncResultCrossThread.test_cross_thread_use_set_in_bg.<locals>.Threadc                     j                  |        d| _                | _                | _        j	                         | _        d| _        y r   r   r   s    r   r   zSTestAsyncResultCrossThread.test_cross_thread_use_set_in_bg.<locals>.Thread.__init__   r   r   c                     | j                   j                          j                  | j                         | j                  j                          t        j                         j                  d       y )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  sQ    ""&&(T../##'') ((d(;r   Nr   )r   r   r   s   r   r   r      s    ,<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   s    ##%42!	< 	<\ 	<" 	!<<-D((--d.@.@AFKK
#		% 6" KK
#		%   s   AC 2Dc                 $    | j                          y 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   rz   r   r   r   r   ignores_leakcheckr   r   r   r   r   r   r   r    r   r   rx   rx      s     M]   D* !D*L.FFE   !# !!#F   / !/r   rx   c                       e Zd Zd Zd Zd Zy)TestEventCrossThreadc                     t               S r   r   r   s    r   rz   zTestEventCrossThread._makeOne!  s	    wr   c                 $    |j                          y r   r'   r}   s     r   r   zTestEventCrossThread._setOne$  s    	r   c                 &    | j                  |       y r   )r-   r   s     r   r   z"TestEventCrossThread._check_result'  s    r   N)r   r   r   rz   r   r   r    r   r   r   r     s     r   r   c                       e Zd ZdZd Zd Zy)TestAsyncResultAsLinkTargetFc                    t        j                  d       }t               t               t               }}}|j                  |       |j	                  |       |j                  |       | j                  |j                         d       | j                  |j                         d       t               }t        j                  t        |j                  |      }| j                  ||       y )Nc                       y)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    LL# ]KM;=B	r
	R	1%1%H$$UBFF!Dfa r   c                    d }t        j                  |      }t               t               t               }}}|j                  |       |j	                  |       |j                  |       | j                  t        j                  |j                         t               }t        j                  t        |j                  |      }| j                  ||       | j                  t        j                  |j                         y )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    	`LL ]KM;=B	r
	R	)55rvv>H$$UBFF!Dfa )55rvv>r   N)r   r   r   error_fatalri   r   r    r   r   r   r   +  s    K
!?r   r   c                       e Zd ZdZd Zy)TestEvent_SetThenClearr   c                 8   t               }t        | j                        D cg c]!  }t        j                  |j
                        # }}t        j                  d       |j                          |j                          |D ]  }|j                           y c c}w )NgMbP?)
r   rangeNr$   r,   r   rZ   r(   r0   r/   )r   rU   iwaitersgreenlets        r   r   zTestEvent_SetThenClear.testL  sm    G16tvv?A6<<'??U			 	HMMO		 @s   &BN)r   r   r   r   r   r    r   r   r   r   I  s    	Ar   r   c                       e Zd ZdZy)TestEvent_SetThenClear100d   Nr   r   r   r   r    r   r   r   r   V  s    Ar   r   c                       e Zd ZdZy)TestEvent_SetThenClear1000i  Nr   r    r   r   r   r   Z  s    Ar   r   c                   X    e Zd ZdZdZdZedz  Zd Z ej                  d      d        Z
y)TestWaitr   Nr   g      Y@c                    |s|rt        j                  | j                         |r|j                         j	                          t        j                  | j                         |r|j                         j	                          |r|ry y r   )r$   rZ   periodpopr(   )r   eventsasyncss      r   _senderzTestWait._senderd  sX    LL%

  "LL%

  " r   z:Not all results have arrived sometimes due to timer issuesc                 (   t        | j                        D cg c]  }t                }}t        | j                        D cg c]  }t                }}t	        |      t	        |      z   }t        j                  | j                  ||      }t        j                  ||z   | j                  | j                        }| j                  |}n#t        || j                  | j                  z        }| j                  !| j                  |j                         |       nFt        | j                  |      }| j                  |j                         |       |j!                          | j#                  |t	        |      |t	        |      |f       y c c}w c c}w )N)countr   )r   r   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!   #)$&&>2a%'22)/8A+-88f+F+dllFF;++fvoTZZV<<"Lwt{{(BCL::OOFLLNF3tzz<8LV\\^V4KKMs7|lCLRY5Z[ 38s   F
F)r   r   r   r   r   r   r   r   r   skipOnAppVeyorr   r    r   r   r   r   ^  sD    	AEGu_F# YZ[\ \\r   r   c                       e Zd ZdZy)TestWait_notimeoutN)r   r   r   r   r    r   r   r  r    s    Gr   r  c                       e Zd ZdZy)TestWait_count1r   Nr   r   r   r   r    r   r   r  r        Er   r  c                       e Zd ZdZy)TestWait_count2r   Nr  r    r   r   r	  r	    r  r   r	  c                       e Zd Zd Zd Zd Zy)TestEventBasicsc                 t    t               }t        j                  |      }| j                  | |              ~~y r   )r   weakrefrefre   )r   rU   rs      r   test_weakrefzTestEventBasics.test_weakref  s,    GKKNar   c                    t               g fd}t        j                  |d       t        j                  |d       t        j                          | j	                  dj                                t        j                         j                  j                         }|j                  j                  d       j                           |d       | j	                  g d       |j                          |j                          y )Nc                 H    j                          j                  |        y r   )r   rR   )argr)   r   s    r   wait_then_appendzCTestEventBasics.test_wait_while_notifying.<locals>.wait_then_append  s    JJL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-. %%++-GNNA&		),

r   c                     t               }|j                          t        j                  |g      }| j	                  ||g       t        j                  |g      }| j	                  ||g       y 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  sX    		eW%%) eW%%)r   N)r   r   r   r  r  r  r    r   r   r  r    s    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>r)     sb   & %    + " % < = , 4''/ $$7 $$N,5 ,65 6+3 +
	) 	49i(( 49lN/!3!3 N/`	 5 	 ?)"4"4 ?<
Y// 
 6 !7  \y!!  \F h h -*i(( -*` zINN r   