
    i
}                     Z   d dl Z 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
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 d d	lmZ d d
lmZ ej        Zdej        _         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j                  Z! G d dej                  Z" G d dej                  Z#d 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)d% 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          Z0 G d0 d1e          Z1 G d2 d3e          Z2 G d4 d5ej                  Z3 G d6 d7ej                  Z4 G d8 d9e4          Z5 G d: d;e4          Z6 G d< d=e4          Z7 G d> d?ej                  Z8 G d@ dAej                  Z9 G dB dCej                  Z: G dD dEej                  Z; ej<        dF           G dG dHej                              Z= ej>        dI           G dJ dKej                              Z? e+            Z@[[eAdLk    r ejB                     dS dS )M    N)patch)sleepwith_timeout
getcurrent)greenlet)AsyncResult)QueueChannel)AbstractGenericWaitTestCase)AbstractGenericGetTestCase)timing)ignores_leakcheckFc                       e Zd ZdS )ExpectedErrorN__name__
__module____qualname__     F/usr/local/lib/python3.11/dist-packages/gevent/tests/test__greenlet.pyr   r   *           Dr   r   c                       e Zd ZdS )ExpectedJoinErrorNr   r   r   r   r   r   -   r   r   r   c                       e Zd ZdS )SuiteExpectedExceptionNr   r   r   r   r   r   0   r   r   r   c                   (    e Zd ZdZdZdZddZd ZdS )GreenletRaisesJoinFTNc                 ~    | xj         dz  c_         | j        rt          t          j                            | |          S N   )joinedraise_on_joinr   geventGreenletjoinselftimeouts     r   r&   zGreenletRaisesJoin.join8   s;    q 	$####D'222r   c                 V    | xj         dz  c_         t          j        j        | g|R i |S r    )killedr$   r%   kill)r(   argskwargss      r   r,   zGreenletRaisesJoin.kill>   s5    q#D:4:::6:::r   N)r   r   r   r+   r"   r#   r&   r,   r   r   r   r   r   3   sF        FFM3 3 3 3; ; ; ; ;r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestLinkc                    t          j        d           }t                      }|                    |           |                     |                                d           t          d          D ]M}t                      }|                    |           |                     |                                d           Nd S )Nc                      dS Nd   r   r   r   r   <lambda>z3TestLink.test_link_to_asyncresult.<locals>.<lambda>E        r   r5      )r$   spawnr   linkassertEqualgetrange)r(   pevent_event2s        r   test_link_to_asyncresultz!TestLink.test_link_to_asyncresultD   s    L%%	uc***q 	0 	0A ]]FFF6NNNVZZ\\3////	0 	0r   c                    t          d          t          j        fd          }t                      }|                    |           |                     t                     5 }|                                 d d d            n# 1 swxY w Y   |                     |j                   t          d          D ]}t                      }|                    |           |                     t                     5 }|                                 d d d            n# 1 swxY w Y   |                     |j                   d S )N"test_link_to_asyncresult_exceptionc                  F    t                                                     S r/   )r   throw)errs   r   r6   z=TestLink.test_link_to_asyncresult_exception.<locals>.<lambda>Q   s    !3!3C!8!8 r   r8   )
r   r$   r9   r   r:   assertRaisesr<   assertIs	exceptionr=   )r(   r>   r?   excr@   rA   rG   s         @r   rD   z+TestLink.test_link_to_asyncresult_exceptionO   s   @AAL888899	u}-- 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	cmS)))q 	. 	.A ]]FFF6NNN""=11 S

              MM#-----	. 	.s$   %BB
B
:DD	"D	c                    t          j        d           }t                      }|                    |j                   |                     |                                                                d           t          d          D ]V}|                    |j                   |                     |                                                                d           Wd S )Nc                      dS r4   r   r   r   r   r6   z-TestLink.test_link_to_queue.<locals>.<lambda>a   r7   r   r5   r8   )r$   r9   r	   r:   putr;   r<   r=   )r(   r>   qr@   s       r   test_link_to_queuezTestLink.test_link_to_queue`   s    L%%GG	qu,,,q 	1 	1AFF15MMMQUUWW[[]]C0000	1 	1r   c                 j   t          j        d           }t          j        d           }t          j        d           }t                      }|                    |j                   |                    |j                   |                    |j                   |                                                                |                                                                |                                                                g}|                     t          |          g d|           d S )Nc                      dS )Ne   r   r   r   r   r6   z/TestLink.test_link_to_channel.<locals>.<lambda>k       # r   c                      dS )Nf   r   r   r   r   r6   z/TestLink.test_link_to_channel.<locals>.<lambda>l   rT   r   c                      dS )Ng   r   r   r   r   r6   z/TestLink.test_link_to_channel.<locals>.<lambda>m   rT   r   )rS   rV   rX   )r$   r9   r
   r:   rN   r<   r;   sorted)r(   p1p2p3rO   resultss         r   test_link_to_channelzTestLink.test_link_to_channelj   s    \++&&\++&&\++&&II


5577;;==!%%''++--?///7CCCCCr   N)r   r   r   rB   rD   rP   r^   r   r   r   r1   r1   B   sU        	0 	0 	0. . ."1 1 1	D 	D 	D 	D 	Dr   r1   c                   *    e Zd ZdZd Zd Zd Zd ZdS )
TestUnlinkFc                     |t                      |                     d|                                           |                    t                      |                     d|                                            || j                   |                     d|                                           |                    | j                   |                     d|                                           |                                 d S )Nr!   r   )dummy_test_funcr;   	has_linksunlinksetUpr,   )r(   r>   r:   s      r   
_test_funczTestUnlink._test_funcy   s    _AKKMM***	!!!AKKMM***TZAKKMM***	AKKMM***	r   c                 n    t          j        t                    }|                     ||j                   d S r/   )r$   r9   rb   rf   r:   r(   r>   s     r   test_func_linkzTestUnlink.test_func_link   s-    L))16"""""r   c                 n    t          j        t                    }|                     ||j                   d S r/   )r$   r9   rb   rf   
link_valuerh   s     r   test_func_link_valuezTestUnlink.test_func_link_value   s-    L))1<(((((r   c                 n    t          j        t                    }|                     ||j                   d S r/   )r$   r9   rb   rf   link_exceptionrh   s     r   test_func_link_exceptionz#TestUnlink.test_func_link_exception   s.    L))1+,,,,,r   N)r   r   r   switch_expectedrf   ri   rl   ro   r   r   r   r`   r`   v   sU        O  # # #) ) )- - - - -r   r`   c                   ,    e Zd ZdZddZd Zd Zd ZdS )LinksTestCaseNc                 B     t          || j                  |           d S r/   )getattrlink_method)r(   r>   listeners      r   r:   zLinksTestCase.link   s%    $4#$$X.....r   c                    t                      }|                     ||           t          d          }|                     ||j                   dg|                     |fd           t	          d          D ]L}|                     |t                                 |                     |t          d          j                   M||fS )Nr!   initialc                  .                         d          S )Nrx   )remove)r-   callback_flags    r   r6   z)LinksTestCase.set_links.<locals>.<lambda>   s    =#7#7	#B#B r   
   )r   r:   r	   rN   r=   )r(   r>   r?   queuer@   r{   s        @r   	set_linkszLinksTestCase.set_links   s    		!Ua		!UY"		!BBBBCCCr 	' 	'AIIa'''IIaq&&&&e]**r   c                 x    t                      } ||           t                      } ||j                   ||fS r/   )r   r
   rN   )r(   r:   r?   r}   s       r   set_links_timeoutzLinksTestCase.set_links_timeout   s:    U		UYe|r   c                     t          t          |j        t                    }|                     |t                     t          t          |j        t                    }|                     |t                     d S )N)timeout_value)r   DELAYr<   XrI   )r(   r?   r}   gots       r   check_timed_outzLinksTestCase.check_timed_out   s\    5%)1===c15%)1===c1r   r/   )r   r   r   ru   r:   r~   r   r   r   r   r   rr   rr      sZ        K/ / / /+ + +       r   rr   c                      dS )N   r   r   r   r   return25r      s    2r   c                   4    e Zd ZdZdZd Zd Zd Zd Zd Z	dS )TestReturn_linkr:   Nc                 F    | j                                          d | _         d S r/   )r>   
unlink_allr(   s    r   cleanupzTestReturn_link.cleanup   s!    r   c                     t          j        t                    | _        t	          d          D ]}|                     | j        d           | j                                         d S )Nr8   r   )r$   r9   r   r>   r=   _test_returnr,   )r(   r@   s     r   test_returnzTestReturn_link.test_return   sV    h''q 	* 	*Adfb))))r   c                    |                      |          \  }}}|                     |j                  }t          t          dz             |                     |           |                     |                                |           |                     |                                                                |           t          t                     |                     |            | j        |  d S N   )	r~   r   rn   r   r   assertFalser;   r<   r   )r(   r>   resultr?   r}   r{   xxxxxs          r   r   zTestReturn_link._test_return   s    &*nnQ&7&7#um &&q'788eaif---**F333e'''e$$$$r   c                 8   |                      |          \  }}}|                     |j                  }|                                 t	          t
                     |                     |           |                     |                                t          j
                   |                     |                                                                t          j
                   t	          t
                     |                     |            | j        |  d S r/   )r~   r   rn   r,   r   r   r   assertIsInstancer<   r$   GreenletExitr   r(   r>   r?   r}   r{   r   s         r   
_test_killzTestReturn_link._test_kill   s    &*nnQ&7&7#um&&q'788	e 	eiikk6+>???eiikkoo//1DEEEe'''e$$$$r   c                     t          j        t          t                    x}| _        t          d          D ]}|                     |           d S Nr8   )r$   r9   r   r   r>   r=   r   r(   r>   r@   s      r   	test_killzTestReturn_link.test_kill   sN    \%///DFq 	 	AOOA	 	r   )
r   r   r   ru   r>   r   r   r   r   r   r   r   r   r   r      si        KA    % % %"% % %"    r   r   c                       e Zd ZdZdS )TestReturn_link_valuerk   Nr   r   r   ru   r   r   r   r   r      s        KKKr   r   c                       e Zd ZdZd Zd ZdS )TestRaise_linkr:   c                    |                      |          \  }}}|                     |j                  }t          t                     |                     ||           |                     t          |j                   | 	                    |                                |           t          t                     |                     ||            | j
        |  d S r/   )r~   r   rk   r   r   r   rH   r   r<   r;   r   r   s         r   _test_raisezTestRaise_link._test_raise   s    &*nnQ&7&7#um&&q|44eA-333a(((e666e$$$$r   c                 ~    t          j        d           }t          d          D ]}|                     |           d S )Nc                  ^    t                                          t          d                    S )N
test_raiser   rF   r   r   r   r   r6   z+TestRaise_link.test_raise.<locals>.<lambda>  s     !3!3M,4O4O!P!P r   r8   )r$   r9   r=   r   r   s      r   r   zTestRaise_link.test_raise  sK    LPPQQq 	  	 AQ	  	 r   N)r   r   r   ru   r   r   r   r   r   r   r      s7        K% % %         r   r   c                       e Zd ZdZdS )TestRaise_link_exceptionrn   Nr   r   r   r   r   r     s        "KKKr   r   c                       e Zd Zd Zd Zed             Zed             Zd Zd Z	 G d de
          Zd	 Zd
 Zd Zd ZdS )	TestStuffc                     t          j        d           }|                     |j        d           |                     |j        j        d           |                                 d S )Nc                      dS r    r   r   r   r   r6   z+TestStuff.test_minimal_id.<locals>.<lambda>       r   r   )r$   r9   assertGreaterEqualminimal_identparentr&   r(   gs     r   test_minimal_idzTestStuff.test_minimal_id  sW    L##333 6:::	r   c                 `   t          j        d           }t          j        d           }t          j        d           }t          j        |||gd           |                     |j        |j        |j        gg d           t                      }|                    |           |                     |                                d           |                    |           t                      }|                    |           |                     |                                d           d S )Nc                      dS r    r   r   r   r   r6   z.TestStuff.test_wait_noerrors.<locals>.<lambda>   r   r   c                      dS r   r   r   r   r   r6   z.TestStuff.test_wait_noerrors.<locals>.<lambda>!  r   r   c                      dS r   r   r   r   r   r6   z.TestStuff.test_wait_noerrors.<locals>.<lambda>"  r   r   Traise_error)r!   r   r8   r!   )	r$   r9   joinallr;   valuer   r:   r<   rd   )r(   xyzes        r   test_wait_noerrorszTestStuff.test_wait_noerrors  s    L##L##L##1ayd3333!'17AG4iii@@@MM	q			!$$$	MM	q			!$$$$$r   c                 ,   d }t          j        |          }t          j        d           }|                     t          t           j        ||gd           |                     t          t           j        |gd           |                                 d S )Nc                  .    t          t                     dS r    )r   r   r   r   r   r   z$TestStuff.test_wait_error.<locals>.x0  s    %LLL1r   c                  ^    t                                          t          d                    S )Ntest_wait_errorr   r   r   r   r6   z+TestStuff.test_wait_error.<locals>.<lambda>4  s!    !3!3MBS4T4T!U!U r   Tr   )r$   r9   rH   r   r   r&   )r(   r   r   s      r   r   zTestStuff.test_wait_error-  s    	 	 	 LOOLUUVV-!QTRRR-!$OOO	r   c                     d }t          j        |          }t          j        d           }|                     t          d          5  t          j        ||gd           d d d            n# 1 swxY w Y   t          j        ||g           d S )Nc                  >    t          d           t          d          )N皙?first)r   r   r   r   r   r   z5TestStuff.test_joinall_exception_order.<locals>.first<  s    #JJJ(((r   c                  ^    t                                          t          d                    S )Nsecondr   r   r   r   r6   z8TestStuff.test_joinall_exception_order.<locals>.<lambda>@  s     !3!3M(4K4K!L!L r   r   Tr   )r$   r9   assertRaisesRegexr   r   )r(   r   abs       r   test_joinall_exception_orderz&TestStuff.test_joinall_exception_order9  s    	) 	) 	) LLLLMM##M8<< 	5 	5NAq6t4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	1vs   A--A14A1c                 :   d }d }t          j        |          }t          j        |          }t          j        ||gdd           |                     |           |                     |           |                                 |                     |           d S )Nc                       t          d          )Ncountr   r   r   r   raises_but_ignoredzDTestStuff.test_joinall_count_raise_error.<locals>.raises_but_ignoredI  s    (((r   c                  $    	 t          d           )NTr   )r   r   r   r   sleep_foreverz?TestStuff.test_joinall_count_raise_error.<locals>.sleep_foreverL  s    c


r   Fr!   )r   r   )r$   r9   r   assert_greenlet_readyassert_greenlet_not_readyr,   )r(   r   r   sleeperraisers        r   test_joinall_count_raise_errorz(TestStuff.test_joinall_count_raise_errorF  s    	) 	) 	)	 	 	 ,}--011(e1EEEE""6***&&w/// 	""7+++++r   c                 F   t          j        d           }g fd}fd}d }|                    |           |                    |           |                    |           t          t          dz             |                     ddgddgg           t          j        d           }g |                    |           |                    |           |                    |           t          t          dz             |                     ddgddgg           d S )Nc                      dS N   r   r   r   r   r6   z9TestStuff.test_multiple_listeners_error.<locals>.<lambda>`  r   r   c                  L                         d           t          d          )Nr|   	listener1appendr   _argsr]   s    r   r   z:TestStuff.test_multiple_listeners_error.<locals>.listener1c  #    NN2,,,r   c                  L                         d           t          d          )N   	listener2r   r   s    r   r   z:TestStuff.test_multiple_listeners_error.<locals>.listener2g  r   r   c                       t          d          N	listener3r   r   s    r   r   z:TestStuff.test_multiple_listeners_error.<locals>.listener3k      ,,,r   r|   r   c                  ^    t                                          t          d                    S )Ntest_multiple_listeners_errorr   r   r   r   r6   z9TestStuff.test_multiple_listeners_error.<locals>.<lambda>t  s!    !3!3MBa4b4b!c!c r   )r$   r9   r:   r   r   assertIn)r(   r>   r   r   r   r]   s        @r   r   z'TestStuff.test_multiple_listeners_error[  sN   
 L##	- 	- 	- 	- 	-	- 	- 	- 	- 	-	- 	- 	- 	
y	y	yebjgR2r(3444Lccdd	y	y	yebjgR2r(344444r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestStuff.Resultsc                     g | _         d S r/   )r]   r   s    r   __init__zTestStuff.Results.__init__~  s    DLLLr   c                     |                     | j                   | j                            d           t	          d          )Nr   r   )rd   r   r]   r   r   rh   s     r   r   zTestStuff.Results.listener1  :    HHT^$$$L""",,,r   c                     |                     | j                   | j                            d           t	          d          )Nr   r   )rd   r   r]   r   r   rh   s     r   r   zTestStuff.Results.listener2  r   r   c                      t          d          r   r   )r(   _ps     r   r   zTestStuff.Results.listener3  r   r   N)r   r   r   r   r   r   r   r   r   r   Resultsr   |  sP        	 	 		- 	- 	-
	- 	- 	-
	- 	- 	- 	- 	-r   r   c                     |                                  } ||j                    ||j                    ||j                   t	          t
          dz             |                     dg|j                   d S )Nr|   r   )r   r   r   r   r   r   r;   r]   )r(   r   r:   r]   s       r   %_test_multiple_listeners_error_unlinkz/TestStuff._test_multiple_listeners_error_unlink  s|     ,,..WWWebj!go.....r   c                     t          j        d           }|                     ||j                   |                                 d S )Nc                      dS r   r   r   r   r   r6   zNTestStuff.test_multiple_listeners_error_unlink_Greenlet_link.<locals>.<lambda>  r   r   )r$   r9   r  r:   r,   rh   s     r   2test_multiple_listeners_error_unlink_Greenlet_linkz<TestStuff.test_multiple_listeners_error_unlink_Greenlet_link  s<    L##221af===	r   c                 f    t          j        d           }|                     ||j                   d S )Nc                      dS r   r   r   r   r   r6   zQTestStuff.test_multiple_listeners_error_unlink_Greenlet_rawlink.<locals>.<lambda>  r   r   )r$   r9   r  rawlinkrh   s     r   5test_multiple_listeners_error_unlink_Greenlet_rawlinkz?TestStuff.test_multiple_listeners_error_unlink_Greenlet_rawlink  s1    L##221ai@@@@@r   c                     t                      }t          j        |j        d           |                     ||j                   d S )N   )r   r$   r9   setr  r  )r(   r   s     r   8test_multiple_listeners_error_unlink_AsyncResult_rawlinkzBTestStuff.test_multiple_listeners_error_unlink_AsyncResult_rawlink  s=    MMQUA221ai@@@@@r   N)r   r   r   r   r   r   r   r   r   r   objectr   r  r  r	  r  r   r   r   r   r     s          % % % 	 	 	 
 
 
, , ,*5 5 5B- - - - -& - - -$	/ 	/ 	/  
A A AA A A A Ar   r   c                      d S r/   r   r   s    r   rb   rb     s    Dr   c                       e Zd Zd ZdS )Ac                     d S r/   r   r   s    r   methodzA.method  s    r   N)r   r   r   r  r   r   r   r  r    s#            r   r  c                       e Zd ZdS )SubclassNr   r   r   r   r  r    r   r   r  c                        e Zd Zd Zd Zd ZdS )TestStrc                 "   t           j                            t                    }|                     |d           |                     |           |                                 |                     |           |                     |d           d S )Nzat X: dummy_test_func>)r$   r%   r9   rb   assert_nstr_endswithr   r&   r   r   s     r   test_functionzTestStr.test_function  s    O!!/22!!!%=>>>&&q)))	""1%%%!!!%=>>>>>r   c                    t           j                            t                      j                  }|                     |d           t          |d           |                     |d           d|_        |                     |d           |                     |d           | 	                    |           |
                                 |                     |           |                     |d           d S )Nz<Greenlet at X:namez<Greenlet "Greenlet-Fooz<Greenlet "Foo"z8at X: <bound method A.method of <module.A object at X>>>)r$   r%   r9   r  r  assert_nstr_startswithrt   r  r  r   r&   r   r   s     r   test_methodzTestStr.test_method  s    O!!!##*--##A'8999 	6##A'=>>> ##A'8999!!!%_```&&q)))	""1%%%!!!%_`````r   c                     t                      }|                     |d           |                     |d           t          d dd          }|                     |d           d S )Nz
<Subclass zat X: _run>question*   )answerz# at X: _run('question', answer=42)>)r  r  r  r   s     r   test_subclasszTestStr.test_subclass  sh    JJ##A|444!!!]333T:b111!!!%JKKKKKr   N)r   r   r   r  r  r$  r   r   r   r  r    sI        ? ? ?a a a$L L L L Lr   r  c                       e Zd Zd ZdS )TestJoinc                     t          j        t           j        d          }	 |                    |          |                                 S # |                                 w xY wNr|   r)   )r$   r9   r   r&   r,   r(   r)   r   s      r   waitzTestJoin.wait  sL    Lr**	66'6**FFHHHHAFFHHHH   A A!Nr   r   r   r+  r   r   r   r&  r&    #            r   r&  c                       e Zd Zd ZdS )TestGetc                     t          j        t           j        d          }	 |                    |          |                                 S # |                                 w xY wr(  )r$   r9   r   r<   r,   r*  s      r   r+  zTestGet.wait  sL    Lr**	555))FFHHHHAFFHHHHr,  Nr-  r   r   r   r0  r0    r.  r   r0  c                   2    e Zd Z ej                    Zd ZdS )TestJoinAll0c                 >    t          j        | j        g|           d S )Nr)  )r$   r   r   r'   s     r   r+  zTestJoinAll0.wait  s!    x111111r   N)r   r   r   r$   r%   r   r+  r   r   r   r3  r3    s2        A2 2 2 2 2r   r3  c                       e Zd Zd ZdS )TestJoinAllc                     t          j        t           j        d          }	 t          j        |g|           |                                 d S # |                                 w xY wr(  )r$   r9   r   r   r,   r*  s      r   r+  zTestJoinAll.wait  sT    Lr**	NA30000FFHHHHHAFFHHHHs   A A$Nr-  r   r   r   r6  r6    r.  r   r6  c                   |    e Zd Zd Zd Zd Zd Zd Zd Z e	j
        d          d             Zd	 Zd
 Zd Zd ZdS )	TestBasicc                 8   |                      t          t          j        d           |                      t          t          j        d           |                      t          t          j        d           |                      t          t          j        dd           d S r    )rH   	TypeErrorr$   r9   	spawn_rawspawn_laterr   s    r   test_spawn_non_callablez!TestBasic.test_spawn_non_callable  sw    )V\1555)V%5q999 	)V%7;;;)V%7A>>>>>r   c                 
   g fd}t          j        |dd          }t          j        d           |                     |           |                     d         d           |                     d         ddi           d S )	Nc                  \                         |                                 |           d S r/   r   )r-   r.   r   s     r   fz*TestBasic.test_spawn_raw_kwargs.<locals>.f  s-    LLLL     r   r!   r   )r  {Gz?r   )r!   r  )r$   r<  r   r   r;   )r(   rB  r   r   s      @r   test_spawn_raw_kwargszTestBasic.test_spawn_raw_kwargs  s    	! 	! 	! 	! 	! Q000Tq4(((qFG#455555r   c                    g }dd}t          j        |dd          }|                    |j                   |                     ||           |                     |j        |           |                     |j        |           |                     |                                |           |                     |                                |           | 	                    |j
        |           | 	                    |j        |           |                                 |                     ||           |                     |j        |           |                     |j        |           |                     |                                |           |                     |                                |           | 	                    |j
        |           | 	                    |j        |           t          j        d           |                     |           |                     |j        |           |                     |j        |           |                     |                                |           |                     |                                |           | 	                    |j
        |           | 	                    |j        |           |                     |           t          j        d           |                     ||           |                     |j        |           |                     |j        |           |                     |                                |           |                     |                                |           |                     |j
        d           | 	                    |j        |           |                     ||           d S )	N   c                 .    t          j        |            |S r/   )r$   r   )delayreturn_values     r   funcz(TestBasic.test_simple_exit.<locals>.func  s    Lr   rC  r   rI  gMbP?g{Gz?rF  )r$   r%   r  r   r   deadstartedready
successfulassertIsNoner   rJ   start
assertTruer   r;   _check_flaky_eqr(   	link_testrJ  r   s       r   test_simple_exitzTestBasic.test_simple_exit  s]   		  	  	  	  OD$Q777			)"###A###A&&&A&&&+++!'1%%%!+q)))				1###	1%%%A&&&+++!'1%%%!+q)))U###	1%%%A&&&+++!'1%%%!+q)))###TA"""A&&&		1%%%***!$$$!+q)))Y*****r   c                 P    t           j        s|                     ||g           d S d S r/   )	greentestRUNNING_ON_CIr;   )r(   rV  r   s      r   rT  zTestBasic._check_flaky_eqH  s7    & 	- Y,,,,,	- 	-r   c                    g }dd}t          j        |t          j        d          }|                    |j                   |                                 t          j                     t          j        t          j                   | 	                    |           | 
                    |j                   | 	                    |j                   | 
                    |                                           | 	                    |                                           |                     |j                   |                     |j        j        d           |                     ||           d S )NrF  c                 n    t          j        |            t          d          }t          |d|           |)Ntest_error_exitmyattr)r$   r   r   setattr)rH  rI  errors      r   rJ  z'TestBasic.test_error_exit.<locals>.funcQ  s7    L!"344EE8\222Kr   r   rK  rL  )r$   r%   r   SMALLEST_RELIABLE_DELAYr  r   rR  r   
LARGE_TICKr   rS  rM  rN  rO  rP  rQ  r   r;   rJ   r^  rT  rU  s       r   r]  zTestBasic.test_error_exitN  s7   		 	 	 	 OD&"@qQQQ			)"###				V&'''###		"""(((!'"""+Q///Y*****r   c                    |                      t          j                    j                   t          j        t          j                  }|                                 |                                 |                      |j                   d S r/   )r   r   r%   exc_infor$   r   rR  r&   r   s     r   test_exc_info_no_errorz TestBasic.test_exc_info_no_errorf  sj    *,,5666fl++					$$$$$r   zStarted getting a Fatal Python error on Github Actions on 2020-12-18, even with recursion limits in place. It was fine before that.c                   	 dd l }|                                }|                     |j        |           |                    |dz             	fd	g fd}	 |t	          j                    _        t	          j        	          fd}t	          j        |          }t	          j        |g           t	          j                    `n# t	          j                    `w xY w	 t          }n# t          $ r
 t          }Y nw xY w|                     |          5                                   d d d            n# 1 swxY w Y   |                                                                |                     j                   |                                |                     dt'                               |                     d         d                    |                     d         d         |           d d = d S )Nr   rF  c                                     d S r/   r   )recurs   r   rh  z-TestBasic.test_recursion_error.<locals>.recur  s    EGGGGGr   c                 :                         | |||f           d S r/   rA  )glettvtberrorss       r   handle_errorz4TestBasic.test_recursion_error.<locals>.handle_error  s$    MM4Ar*+++++r   c                  .    t          j         g          S r/   )r$   r   )r   s   r   r+  z,TestBasic.test_recursion_error.<locals>.wait  s    ~qc***r   r!   )sysgetrecursionlimit
addCleanupsetrecursionlimitr$   get_hubro  r9   r   RecursionError	NameErrorRuntimeErrorrH   r<   r   rP  rS  rM  r;   lenrI   )
r(   rq  limitro  r+  g2expected_excrn  r   rh  s
          @@@r   test_recursion_errorzTestBasic.test_recursion_errorn  sc     	


%%''-u555eqj)))	 	 	 	 	 	, 	, 	, 	, 	,	.,8FN)U##A+ + + + + d##BNB4     --  -----	()LL 	( 	( 	('LLL	(|,, 	 	EEGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	(((CKK(((fQilA&&&1|444111IIIs1   AC
 
C#C+ +C?>C?D88D<?D<c                     d x}} fd}t          j        |          }t          j        |          }                     t          t	                      d          t	                                                      |j        |j                   |                                 |                                 t          j
        |          }                     |j                                        |j        |j                                        |                                t	                                 |j        st          j        d           |j        d S d S )Nc                      t          j                    }                     | j        t	                      j                                       |                                 t	                                 d S r/   )r   r%   rI   spawn_tree_localsr   spawning_greenlet)childr(   s    r   rJ  z(TestBasic.test_tree_locals.<locals>.func  sY    %''EMM%1:<<3QRRRMM%1133Z\\BBBBBr   r  rC  )r   r%   r   hasattrr   assertIsNotr  rR  r&   r$   r<  assertIsNotNonerI   r  rM  r   )r(   r   r{  rJ  raws   `    r   test_tree_localszTestBasic.test_tree_locals  sU   B	C 	C 	C 	C 	C d##t$$ 	/BCC#	' 	' 	',b.BCCC					t$$S2333.0CDDDc++--z||<<<( 	L ( 	 	 	 	 	r   c                    ddifd}t           j                            |           	 t          j        d           }|                     t          |d                     |                                 |                     d         d           t          j        dd           }|                     t          |d                     |                                 |                     d         d	           t          j        d
           }|	                                 |                     t          |d                     |                                 |                     d         d           t           j        
                    |           t          j        d           }|                     t          |d                     |                                 |                     d         d           t           j        
                    |           d S # t           j        
                    |           w xY w)N#r   c                 6    dxx         dz  cc<   d| _         d S )Nr  r!   T)_called_test)grcalleds    r   cbz-TestBasic.test_add_spawn_callback.<locals>.cb  s$    3KKK1KKK"BOOOr   c                      d S r/   r   r   r   r   r6   z3TestBasic.test_add_spawn_callback.<locals>.<lambda>      T r   r  r!   gh㈵>c                      d S r/   r   r   r   r   r6   z3TestBasic.test_add_spawn_callback.<locals>.<lambda>  s     r   r   c                      d S r/   r   r   r   r   r6   z3TestBasic.test_add_spawn_callback.<locals>.<lambda>  s     r   r8   c                      d S r/   r   r   r   r   r6   z3TestBasic.test_add_spawn_callback.<locals>.<lambda>  r  r   )r$   r%   add_spawn_callbackr9   rS  r  r&   r;   r=  rR  remove_spawn_callbackr   )r(   r  r   r  s      @r   test_add_spawn_callbackz!TestBasic.test_add_spawn_callback  s   q	# 	# 	# 	# 	# 	**2...	6\\**AOOGA~66777FFHHHVC[!,,,"466AOOGA~66777FFHHHVC[!,,,--AGGIIIOOGA~66777FFHHHVC[!,,,O11"555\\**AWQ77888FFHHHVC[!,,,O11"55555FO11"5555s   GH   !Ic                    d }	 t           j        }n"# t          $ r t          j        d          w xY w|t           _        	 t          j                    }|                     |j                   |t           _        d S # |t           _        w xY w)Nc                       t          d          )Nzcall stack is not deep enough)
ValueErrorr   r   r   r<   z0TestBasic.test_getframe_value_error.<locals>.get  s    <===r   z Cannot mock when Cython compiled)r   sys_getframeAttributeErrorunittestSkipTestr%   rQ  spawning_stack)r(   r<   ogfr  s       r   test_getframe_value_errorz#TestBasic.test_getframe_value_error  s    	> 	> 	>	H'CC 	H 	H 	H#$FGGG	H !$	(%''Ee2333$'H!!!CH!''''s    1-A< <B
c                 V   t          j        d           }|                     |j        t          j                               t                      |_        	 |                     |j        t          j                               |                     t          t          fd          5  t          |d           d d d            n# 1 swxY w Y   t          j                    |_        |                                 d S # t          j                    |_        |                                 w xY w)Nc                      dS r    r   r   r   r   r6   z=TestBasic.test_minimal_ident_parent_not_hub.<locals>.<lambda>  r   r   zCannot convert|ident_registryr   )r$   r9   rI   r   ru  r   r  r   r;  r  rt   r,   r   s     r   !test_minimal_ident_parent_not_hubz+TestBasic.test_minimal_ident_parent_not_hub  s3   L##ah 0 0111<<	QXv~'7'7888'')7)9(GI I , , ?+++, , , , , , , , , , , , , , , ~''AHFFHHHHH ~''AHFFHHHHs1   AC: $C5C: CC: C	C: :.D(N)r   r   r   r>  rD  rW  rT  r]  re  rY  skipOnCIr}  r  r  r  r  r   r   r   r9  r9    s        ? ? ?6 6 6-+ -+ -+^- - -+ + +0% % % Y	- 
1 1 
1h  .6 6 6B( ( (    r   r9  c                        e Zd Z fdZd ZddZddZed             Zd Z	e	Z
dd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )TestKillc                     t                                                       t          j                    }t	          j        |dd          }|                                 |                     |j                   d S )Nprint_exceptionT)autospec)	superre   r$   ru  Patchr  rR  rs  stop)r(   hubpatcher	__class__s      r   re   zTestKill.setUp  s_    n,s$5EEE%%%%%r   c                    |                      |           |                     |j                   |                      |j                   |                     |                                           |r|                     |                                t          |          |j        |j        f           | 	                    |j        t          j                   |                     |j                   d S |                      |                                t          |          |j        |j        f           |                     |j        t          j                   |                     |j                   d S r/   )r   rS  rM  rN  rO  rP  reprr   rJ   r   r$   r   rQ  assertNotIsInstancer  r(   r   rP  s      r   __assertKilledzTestKill.__assertKilled  s,   ###		""" 	.OOALLNNT!WWagq{,KLLL!!!'6+>???ak*****Q\\^^d1ggqw-LMMM$$QWf.ABBB  -----r   Tc                     |                      ||           t          j        d           |                      ||           d S NrC  )_TestKill__assertKilledr$   r   r  s      r   assertKilledzTestKill.assertKilled  sD    Az***TAz*****r   Nc                    |t           j        }|r$t          j        t           j        |g||          }nt          j        |j        ||          } |             |st          j        t          j                   |d u p.t          |t                    ot          |t           j                  }|                     ||            |             |                     ||           d S )N)rJ   block)r$   r   	functoolspartialkillallr,   r   r   ra  
isinstancetype
issubclassr  )r(   r   r  r  rK   killerrP  s          r   __kill_greenletzTestKill.__kill_greenlet  s    ;%C 	K&v~s14EC C CFF &qvEJJJF 	9L7888D[dZT%:%:%cz#vOb?c?c
!Z(((!Z(((((r   c                 0    |                      d           d S r    rA  result_collectors    r   _run_in_greenletzTestKill._run_in_greenlet2  s    """""r   c                     dS )zU
        Subclasses should override. This doesn't actually start a greenlet.
        Nr   r   s     r   _start_greenletzTestKill._start_greenlet6  s      r   c                 R   g }g }t          j        | j        |          }|                    |j                   |                     |           |                     ||||           |                     |           |                     |           | 	                    ||g           d S r/   )
r$   r%   r  r:   r   r  _TestKill__kill_greenlet_after_kill_greenletr   r;   )r(   r  r  rK   rV  r   r   s          r   _do_testzTestKill._do_test>  s    	OD16::	y   QQw444!!!$$$   QC(((((r   c                 4    |                      dd           d S )NTFr  r  r  r   s    r   
test_blockzTestKill.test_blockM  s    D%00000r   c                 4    |                      dd           d S )NFr  r  r   s    r   test_non_blockzTestKill.test_non_blockP  s    E511111r   c                 4    |                      dd           d S )NTr  r  r   s    r   test_block_killallzTestKill.test_block_killallS  s    D$/////r   c                 4    |                      dd           d S )NFTr  r  r   s    r   test_non_block_killalzTestKill.test_non_block_killalV  s    E400000r   c                 N    |                      ddt                                 d S )NTFr  r  rK   r  	Exceptionr   s    r   test_non_type_exceptionz TestKill.test_non_type_exceptionY  s$    D%Y[[AAAAAr   c                 N    |                      ddt                                 d S )NFr  r  r   s    r   !test_non_type_exception_non_blockz*TestKill.test_non_type_exception_non_block\  s$    E5ikkBBBBBr   c                 N    |                      ddt                                 d S )NTr  r  r   s    r   test_non_type_exception_killallz(TestKill.test_non_type_exception_killall_  s$    D$IKK@@@@@r   c                 N    |                      ddt                                 d S )NFTr  r  r   s    r   )test_non_type_exception_killall_non_blockz2TestKill.test_non_type_exception_killall_non_blockb  s$    E4Y[[AAAAAr   c                 6    |                      ddd           d S )NTFr"  r  r  r   s    r   test_non_exc_exceptionzTestKill.test_non_exc_exceptione  s     D%R88888r   c                 6    |                      ddd           d S )NFr"  r  r  r   s    r    test_non_exc_exception_non_blockz)TestKill.test_non_exc_exception_non_blockh  s     E5b99999r   c                 6    |                      ddd           d S )NTr"  r  r  r   s    r   test_non_exc_exception_killallz'TestKill.test_non_exc_exception_killallk  s     D$B77777r   c                 6    |                      ddd           d S )NFTr"  r  r  r   s    r   (test_non_exc_exception_killall_non_blockz1TestKill.test_non_exc_exception_killall_non_blockn  s     E4R88888r   )Tr/   )r   r   r   re   r  r  r  staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__)r  s   @r   r  r    su       & & & & &. . .+ + + +
) ) ) )& # # \#  
 +) ) ) )1 1 12 2 20 0 01 1 1B B BC C CA A AB B B9 9 9: : :8 8 89 9 9 9 9 9 9r   r  c                       e Zd Zd ZdS )TestKillAfterStartc                 .    |                                  d S r/   )rR  r   s     r   r  z"TestKillAfterStart._start_greenlett  s    						r   Nr   r   r   r  r   r   r   r  r  r  s#            r   r  c                       e Zd Zd ZdS )TestKillAfterStartLaterc                 D    |                     t          j                   d S r/   )start_laterr   rb  r   s     r   r  z'TestKillAfterStartLater._start_greenlety  s    	f'(((((r   Nr  r   r   r   r  r  w  s#        ) ) ) ) )r   r  c                   *    e Zd Zed             Zd ZdS )TestKillWhileRunningc                 b    t          j        d           t                              |            d S )Nr|   )r$   r   r  r  r  s    r   r  z%TestKillWhileRunning._run_in_greenlet~  s/    R 	!!"233333r   c                 d    t                               | |           t          j        d           d S r  )r  r  r$   r   r   s     r   r  z)TestKillWhileRunning._after_kill_greenlet  s.    %%dA...Tr   N)r   r   r   r  r  r  r   r   r   r  r  |  s<        4 4 \4    r   r  c                       e Zd Zd ZdS )TestKillallRawGreenletc                 Z    t          j        d           }t          j        |g           d S )Nc                      dS r    r   r   r   r   r6   z9TestKillallRawGreenlet.test_killall_raw.<locals>.<lambda>  s    Q r   )r$   r<  r  r   s     r   test_killall_rawz'TestKillallRawGreenlet.test_killall_raw  s,    YY''sr   N)r   r   r   r  r   r   r   r  r    s#            r   r  c                   J    e Zd Zd Zd Zed             Zd Zd Zd	dZ	d Z
dS )
TestContextManagerc                     t          j        t           j        t          j                  5 }|                     |           d d d            n# 1 swxY w Y   |                     |           d S r/   )r$   r9   r   r   
SMALL_TICKassert_greenlet_spawnedassert_greenlet_finishedr   s     r   test_simplezTestContextManager.test_simple  s    \&,(9:: 	,a((+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	%%a(((((s   AAAc                 (   t          j        | j                  5 }|                     t          j                  5  |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |           d S r/   )r$   r9   _raise_exceptionrH   rY  ExpectedExceptionr<   r  r   s     r   test_wait_in_suitez%TestContextManager.test_wait_in_suite  s    \$/00 	A""9#>??                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	%%a(((((s4    A2AA2A	A2"A	#A22A69A6c                      t           j        r/   )rY  r  r   r   r   r  z#TestContextManager._raise_exception  s    ))r   c                 ,   t          j        | j                  5 }	 d d d            n# 1 swxY w Y   |                     |           |                     t
          j                  5  |                                 d d d            d S # 1 swxY w Y   d S r/   )r$   r9   r  r  rH   rY  r  r<   r   s     r   test_greenlet_raisesz'TestContextManager.test_greenlet_raises  s   \$/00 	A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	%%a(((y:;; 	 	EEGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (,,'B		BBc                    d}|                      t                    5  t                              t          j        t          j                  5 }|                     |           d}d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | 	                    |           | 
                    |           | 	                    |j                   d S )Nr   r!   )rH   r   r   r9   r$   r   r   r   r  rS  r  r+   )r(   	suite_ranr   s      r   test_join_raisesz#TestContextManager.test_join_raises  s9   	011 	 	#))&,8IJJ a,,Q///	              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 		"""%%a(((!!!!!s5   0BA1%B1A5	5B8A5	9BBBNc                    |st           j        nt           j        }|                     t                    5  t
                              t          j        |          5 }| 	                    |           |rd|_
        t          j        |           t          # 1 swxY w Y   	 d d d            n# 1 swxY w Y   |                     |           |                     |j                   |r|                     |j                   n|                     |j                   |                     |                                           |                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S NF)r   r   rb  rH   r   r   r9   r$   r   r  r#   r  rS  r+   r"   r   rP  r<   )r(   rH  greenlet_sleepr   s       r   test_suite_body_raisesz)TestContextManager.test_suite_body_raises  s   27N**V=N566 	- 	-#))&,GG -1,,Q/// (&+AOL''',,- - - - - - - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	%%a(((!!! 	'OOAH%%%%QX&&&(((566 	 	EEGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sA   &B-:BB	B-B	B--B14B1FFFc                 F    |                      t          j                   d S )N)rH  )r  r   r   r   s    r   !test_suite_body_raises_with_delayz4TestContextManager.test_suite_body_raises_with_delay  s"    ##&*;#<<<<<r   r/   )r   r   r   r  r  r  r  r
  r  r  r  r   r   r   r  r    s        ) ) )) ) ) * * \*  	" 	" 	"   *= = = = =r   r  c                       e Zd Zd ZdS )	TestStartc                 x   t          j        t           j        t          j                  }|                     |           |                                 |                     |           |                                 | 	                    |           |                                 | 	                    |           d S r/   )
r$   r9   r   r   r   r  rR  assert_greenlet_startedr&   r  r   s     r   
test_startzTestStart.test_start  s    Lv'899$$Q'''				$$Q'''	%%a((( 	
			%%a(((((r   N)r   r   r   r  r   r   r   r  r    s#        ) ) ) ) )r   r  c                        e Zd Zd Zd Zd ZdS )TestRefc                 :    d| _         t          j                     d S r  )rp   r$   r%   r   s    r   	test_initzTestRef.test_init  s    $r   c                 |    t          j        t           j        t          j                                                   d S r/   )r$   r9   r   r   rb  r,   r   s    r   test_kill_scheduledzTestRef.test_kill_scheduled  s+    V\6#455::<<<<<r   c                     t          j        t           j        t          j                  }	 t          j        t          j                   |                                 d S # |                                 w xY wr/   )r$   r9   r   r   rb  ra  r,   r   s     r   test_kill_startedzTestRef.test_kill_started  sS    Lv'899	L7888FFHHHHHAFFHHHHs   A A5N)r   r   r   r  r  r   r   r   r   r  r    sA          
= = =    r   r  zNeeds C extensionc                       e Zd Zd ZdS )TestCExtc                     |                      t          j        j        d           |                      t          j        j        d           d S )Nzgevent._gevent_cgreenletr;   r   r%   r   SpawnedLinkr   s    r   test_c_extensionzTestCExt.test_c_extension  sR    *53	5 	5 	5-83	5 	5 	5 	5 	5r   N)r   r   r   r&  r   r   r   r"  r"    s#        5 5 5 5 5r   r"  zNeeds pure pythonc                       e Zd Zd ZdS )TestPurec                     |                      t          j        j        d           |                      t          j        j        d           d S )Nzgevent.greenletr$  r   s    r   	test_purezTestPure.test_pure  sR    *5*	, 	, 	,-8*	, 	, 	, 	, 	,r   N)r   r   r   r*  r   r   r   r(  r(    s#        , , , , ,r   r(  __main__)Cr  r  unittest.mockr   r  gevent.testingtestingrY  r$   r   r   r   r   gevent.eventr   gevent.queuer	   r
   gevent.testing.timingr   r   r   r   r   r   TestCaseerror_fatalr  r   r   r   r%   r   r1   r`   rr   r   r   r   r   r   r   rb   r  r  r  r  r&  r0  r3  r6  r9  r  r  r  r  r  r  r  r  skipOnPurePythonr"  skipWithCExtensionsr(  r   r   mainr   r   r   <module>r7     s  *      ( ( ( ( ( ( " " " " " "  2 2 2 2 2 2 2 2 2 2       $ $ $ $ $ $ ' ' ' ' ' ' ' ' = = = = = = < < < < < < ! ! ! ! ! ! , , , , , ,!&	  	 	 	 	 	I/ 	 	 		 	 	 	 	 	 	 		 	 	 	 	] 	 	 	; ; ; ; ; ; ; ;1D 1D 1D 1D 1Dy! 1D 1D 1Dh- - - - -# - - ->$ $ $ $ $I& $ $ $N  
4 4 4 4 4m 4 4 4n    O            ]      .# # # # #~ # # #OA OA OA OA OA	" OA OA OAd	 	 	       
	 	 	 	 	v 	 	 	#L #L #L #L #Li  #L #L #LL    *       (   2 2 2 2 2. 2 2 2    -   ~ ~ ~ ~ ~	" ~ ~ ~Bm9 m9 m9 m9 m9y! m9 m9 m9`       
) ) ) ) )h ) ) )
    8       Y/   ;= ;= ;= ;= ;=+ ;= ;= ;=z) ) ) ) )	" ) ) )"    i    $ /005 5 5 5 5y! 5 5 105 233, , , , ,y! , , 43, FHH zIN r   