o
    ÑtPf|  ã                   @   sæ  d dl Z d dl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„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZ dd„ Z!G dd„ de ƒZ"G dd„ de"ƒZ#G dd „ d e ƒZ$G d!d"„ d"e$ƒZ%G d#d$„ d$ejƒZ&d%d&„ Z'G d'd(„ d(e(ƒZ)G d)d*„ d*ejƒZ*G d+d,„ d,ejƒZ+G d-d.„ d.eƒZ,G d/d0„ d0eƒZ-G d1d2„ d2eƒZ.G d3d4„ d4eƒZ/G d5d6„ d6ejƒZ0G d7d8„ d8ejƒZ1G d9d:„ d:e1ƒZ2G d;d<„ d<e1ƒZ3G d=d>„ d>e1ƒZ4G d?d@„ d@ejƒZ5G dAdB„ dBejƒZ6G dCdD„ dDejƒZ7G dEdF„ dFejƒZ8e 9dG¡G dHdI„ dIejƒƒZ:e ;dJ¡G dKdL„ dLejƒƒZ<e(ƒ Z=[[e>dMkrqe ?¡  dS dS )Né    N)ÚsleepÚwith_timeoutÚ
getcurrent)Úgreenlet)ÚAsyncResult)ÚQueueÚChannel)ÚAbstractGenericWaitTestCase)ÚAbstractGenericGetTestCase)Útiming)Úignores_leakcheckFc                   @   ó   e Zd ZdS )ÚExpectedErrorN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú\/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__greenlet.pyr   )   ó    r   c                   @   r   )ÚExpectedJoinErrorNr   r   r   r   r   r   ,   r   r   c                   @   r   )ÚSuiteExpectedExceptionNr   r   r   r   r   r   /   r   r   c                   @   s*   e Zd ZdZdZdZddd„Zdd„ ZdS )	ÚGreenletRaisesJoinFTNc                 C   s&   |  j d7  _ | jrt‚tj | |¡S ©Né   )ÚjoinedÚraise_on_joinr   ÚgeventÚGreenletÚjoin©ÚselfÚtimeoutr   r   r   r   7   s   zGreenletRaisesJoin.joinc                 O   s(   |  j d7  _ tjj| g|¢R i |¤ŽS r   )Úkilledr   r   Úkill)r!   ÚargsÚkwargsr   r   r   r$   =   s   zGreenletRaisesJoin.kill©N)r   r   r   r#   r   r   r   r$   r   r   r   r   r   2   s    
r   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestLinkc                 C   s`   t  dd„ ¡}tƒ }| |¡ |  | ¡ d¡ tdƒD ]}tƒ }| |¡ |  | ¡ d¡ qd S )Nc                   S   ó   dS ©Néd   r   r   r   r   r   Ú<lambda>D   ó    z3TestLink.test_link_to_asyncresult.<locals>.<lambda>r,   é   )r   Úspawnr   ÚlinkÚassertEqualÚgetÚrange)r!   ÚpÚeventÚ_Úevent2r   r   r   Útest_link_to_asyncresultC   s   

ýz!TestLink.test_link_to_asyncresultc              	      sÌ   t dƒ‰ t ‡ fdd„¡}tƒ }| |¡ |  t ¡}| ¡  W d   ƒ n1 s)w   Y  |  |jˆ ¡ t	dƒD ]*}tƒ }| |¡ |  t ¡}| ¡  W d   ƒ n1 sWw   Y  |  |jˆ ¡ q9d S )NÚ"test_link_to_asyncresult_exceptionc                      s   t ƒ  ˆ ¡S r'   )r   Úthrowr   ©Úerrr   r   r-   P   s    z=TestLink.test_link_to_asyncresult_exception.<locals>.<lambda>r/   )
r   r   r0   r   r1   ÚassertRaisesr3   ÚassertIsÚ	exceptionr4   )r!   r5   r6   Úexcr7   r8   r   r<   r   r:   N   s    

ÿ

ÿûz+TestLink.test_link_to_asyncresult_exceptionc                 C   sf   t  dd„ ¡}tƒ }| |j¡ |  | ¡  ¡ d¡ tdƒD ]}| |j¡ |  | ¡  ¡ d¡ qd S )Nc                   S   r*   r+   r   r   r   r   r   r-   `   r.   z-TestLink.test_link_to_queue.<locals>.<lambda>r,   r/   )r   r0   r   r1   Úputr2   r3   r4   )r!   r5   Úqr7   r   r   r   Útest_link_to_queue_   s   þzTestLink.test_link_to_queuec                 C   s   t  dd„ ¡}t  dd„ ¡}t  dd„ ¡}tƒ }| |j¡ | |j¡ | |j¡ | ¡  ¡ | ¡  ¡ | ¡  ¡ g}|  t|ƒg d¢|¡ d S )Nc                   S   r*   )Née   r   r   r   r   r   r-   j   r.   z/TestLink.test_link_to_channel.<locals>.<lambda>c                   S   r*   )Néf   r   r   r   r   r   r-   k   r.   c                   S   r*   )Nég   r   r   r   r   r   r-   l   r.   )rE   rF   rG   )r   r0   r   r1   rB   r3   r2   Úsorted)r!   Úp1Úp2Úp3rC   Úresultsr   r   r   Útest_link_to_channeli   s   "zTestLink.test_link_to_channelN)r   r   r   r9   r:   rD   rM   r   r   r   r   r)   A   s
    
r)   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
TestUnlinkFc                 C   st   |t ƒ |  d| ¡ ¡ | t ¡ |  d| ¡ ¡ || jƒ |  d| ¡ ¡ | | j¡ |  d| ¡ ¡ | ¡  d S )Nr   r   )Údummy_test_funcr2   Ú	has_linksÚunlinkÚsetUpr$   )r!   r5   r1   r   r   r   Ú
_test_funcx   s   

zTestUnlink._test_funcc                 C   ó   t  t¡}|  ||j¡ d S r'   )r   r0   rO   rS   r1   ©r!   r5   r   r   r   Útest_func_link‡   ó   
zTestUnlink.test_func_linkc                 C   rT   r'   )r   r0   rO   rS   Ú
link_valuerU   r   r   r   Útest_func_link_value‹   rW   zTestUnlink.test_func_link_valuec                 C   rT   r'   )r   r0   rO   rS   Úlink_exceptionrU   r   r   r   Útest_func_link_exception   rW   z#TestUnlink.test_func_link_exceptionN)r   r   r   Úswitch_expectedrS   rV   rY   r[   r   r   r   r   rN   u   s    rN   c                   @   s2   e Zd ZdZd
dd„Zdd„ Zdd„ Zdd	„ ZdS )ÚLinksTestCaseNc                 C   s   t || jƒ|ƒ d S r'   )ÚgetattrÚlink_method)r!   r5   Úlistenerr   r   r   r1   ˜   ó   zLinksTestCase.linkc                    sz   t ƒ }|  ||¡ tdƒ}|  ||j¡ dg‰ |  |‡ fdd„¡ tdƒD ]}|  |t ƒ ¡ |  |tdƒj¡ q%||ˆ fS )Nr   Úinitialc                     s
   ˆ   d¡S )Nrb   )Úremove)r%   ©Úcallback_flagr   r   r-   £   s   
 z)LinksTestCase.set_links.<locals>.<lambda>é
   )r   r1   r   rB   r4   )r!   r5   r6   Úqueuer7   r   rd   r   Ú	set_links›   s   
zLinksTestCase.set_linksc                 C   s&   t ƒ }||ƒ tƒ }||jƒ ||fS r'   )r   r   rB   )r!   r1   r6   rg   r   r   r   Úset_links_timeout«   s
   
zLinksTestCase.set_links_timeoutc                 C   s<   t t|jtd}|  |t¡ t t|jtd}|  |t¡ d S )N)Útimeout_value)r   ÚDELAYr3   ÚXr?   )r!   r6   rg   Úgotr   r   r   Úcheck_timed_out´   s   zLinksTestCase.check_timed_outr'   )r   r   r   r_   r1   rh   ri   rn   r   r   r   r   r]   ”   s    
	r]   c                   C   r*   )Né   r   r   r   r   r   Úreturn25»   ó   rp   c                   @   s<   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestReturn_linkr1   Nc                 C   s   | j  ¡  d | _ d S r'   )r5   Ú
unlink_all©r!   r   r   r   ÚcleanupÅ   s   

zTestReturn_link.cleanupc                 C   s6   t  t¡| _tdƒD ]	}|  | jd¡ q
| j ¡  d S )Nr/   ro   )r   r0   rp   r5   r4   Ú_test_returnr$   )r!   r7   r   r   r   Útest_returnÉ   s   zTestReturn_link.test_returnc                 C   sv   |   |¡\}}}|  |j¡}ttd ƒ |  |¡ |  | ¡ |¡ |  | ¡  ¡ |¡ ttƒ |  |¡ | j|Ž  d S ©Né   )	rh   ri   rZ   r   rk   ÚassertFalser2   r3   rn   )r!   r5   Úresultr6   rg   re   Úxxxxxr   r   r   rv   Ï   s   

zTestReturn_link._test_returnc                 C   s~   |   |¡\}}}|  |j¡}| ¡  ttƒ |  |¡ |  | ¡ t	j
¡ |  | ¡  ¡ t	j
¡ ttƒ |  |¡ | j|Ž  d S r'   )rh   ri   rZ   r$   r   rk   rz   ÚassertIsInstancer3   r   ÚGreenletExitrn   ©r!   r5   r6   rg   re   r|   r   r   r   Ú
_test_killà   s   

zTestReturn_link._test_killc                 C   s.   t  tt¡ }| _tdƒD ]}|  |¡ qd S ©Nr/   )r   r0   r   rk   r5   r4   r€   ©r!   r5   r7   r   r   r   Ú	test_killñ   s   ÿzTestReturn_link.test_kill)
r   r   r   r_   r5   ru   rw   rv   r€   rƒ   r   r   r   r   rr   À   s    rr   c                   @   ó   e Zd ZdZdS )ÚTestReturn_link_valuerX   N©r   r   r   r_   r   r   r   r   r…   ÷   ó    r…   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestRaise_linkr1   c                 C   sp   |   |¡\}}}|  |j¡}ttƒ |  ||¡ |  t|j¡ |  	| ¡ |¡ ttƒ |  ||¡ | j
|Ž  d S r'   )rh   ri   rX   r   rk   rz   r>   r   r3   r2   rn   r   r   r   r   Ú_test_raiseþ   s   zTestRaise_link._test_raisec                 C   s*   t  dd„ ¡}tdƒD ]}|  |¡ qd S )Nc                   S   ó   t ƒ  tdƒ¡S )NÚ
test_raise©r   r;   r   r   r   r   r   r-     ó    z+TestRaise_link.test_raise.<locals>.<lambda>r/   )r   r0   r4   r‰   r‚   r   r   r   r‹     s   ÿzTestRaise_link.test_raiseN)r   r   r   r_   r‰   r‹   r   r   r   r   rˆ   û   s    rˆ   c                   @   r„   )ÚTestRaise_link_exceptionrZ   Nr†   r   r   r   r   rŽ     r‡   rŽ   c                   @   st   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZd	d
„ Zdd„ Z	G dd„ de
ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	TestStuffc                 C   s8   t  dd„ ¡}|  |jd¡ |  |jjd¡ | ¡  d S )Nc                   S   r*   r   r   r   r   r   r   r-     r.   z+TestStuff.test_minimal_id.<locals>.<lambda>r   )r   r0   ÚassertGreaterEqualÚminimal_identÚparentr   ©r!   Úgr   r   r   Útest_minimal_id  s   zTestStuff.test_minimal_idc                 C   s¨   t  dd„ ¡}t  dd„ ¡}t  dd„ ¡}t j|||gdd |  |j|j|jgg d¢¡ tƒ }| |¡ |  | ¡ d¡ | |¡ tƒ }| |¡ |  | ¡ d¡ d S )	Nc                   S   r*   r   r   r   r   r   r   r-     r.   z.TestStuff.test_wait_noerrors.<locals>.<lambda>c                   S   r*   rx   r   r   r   r   r   r-      r.   c                   S   r*   r   r   r   r   r   r   r-   !  r.   T©Úraise_error)r   ry   r/   r   )	r   r0   Újoinallr2   Úvaluer   r1   r3   rQ   )r!   ÚxÚyÚzÚer   r   r   Útest_wait_noerrors  s   


zTestStuff.test_wait_noerrorsc                 C   sZ   dd„ }t  |¡}t  dd„ ¡}| jtt j||gdd | jtt j|gdd | ¡  d S )Nc                   S   s   t tƒ dS r   )r   rk   r   r   r   r   rš   /  s   z$TestStuff.test_wait_error.<locals>.xc                   S   rŠ   )NÚtest_wait_errorrŒ   r   r   r   r   r-   3  r   z+TestStuff.test_wait_error.<locals>.<lambda>Tr–   )r   r0   r>   r   r˜   r   )r!   rš   r›   r   r   r   rŸ   ,  s   
zTestStuff.test_wait_errorc                 C   sp   dd„ }t  |¡}t  dd„ ¡}|  td¡ t j||gdd W d   ƒ n1 s*w   Y  t  ||g¡ d S )Nc                   S   s   t dƒ tdƒ‚)Nçš™™™™™¹?Úfirst)r   r   r   r   r   r   r¡   ;  s   z5TestStuff.test_joinall_exception_order.<locals>.firstc                   S   rŠ   )NÚsecondrŒ   r   r   r   r   r-   ?  r   z8TestStuff.test_joinall_exception_order.<locals>.<lambda>r¢   Tr–   )r   r0   ÚassertRaisesRegexr   r˜   )r!   r¡   ÚaÚbr   r   r   Útest_joinall_exception_order8  s   
ÿz&TestStuff.test_joinall_exception_orderc                 C   sb   dd„ }dd„ }t  |¡}t  |¡}t j||gddd |  |¡ |  |¡ | ¡  |  |¡ d S )Nc                   S   ó   t dƒ‚)NÚcount©r   r   r   r   r   Úraises_but_ignoredH  ó   zDTestStuff.test_joinall_count_raise_error.<locals>.raises_but_ignoredc                   S   s   	 t dƒ q)NTr    )r   r   r   r   r   Úsleep_foreverK  s   ÿz?TestStuff.test_joinall_count_raise_error.<locals>.sleep_foreverFr   )r—   r¨   )r   r0   r˜   Úassert_greenlet_readyÚassert_greenlet_not_readyr$   )r!   rª   r¬   ÚsleeperÚraiserr   r   r   Útest_joinall_count_raise_errorE  s   



z(TestStuff.test_joinall_count_raise_errorc                    sÌ   t  dd„ ¡}g ‰ ‡ fdd„}‡ fdd„}dd„ }| |¡ | |¡ | |¡ ttd	 ƒ |  ˆ d	d
gd
d	gg¡ t  dd„ ¡}g ‰ | |¡ | |¡ | |¡ ttd	 ƒ |  ˆ d	d
gd
d	gg¡ d S )Nc                   S   r*   ©Né   r   r   r   r   r   r-   _  r.   z9TestStuff.test_multiple_listeners_error.<locals>.<lambda>c                     ó   ˆ   d¡ tdƒ‚)Nrf   Ú	listener1©Úappendr   ©Ú_args©rL   r   r   rµ   b  ó   
z:TestStuff.test_multiple_listeners_error.<locals>.listener1c                     r´   )Né   Ú	listener2r¶   r¸   rº   r   r   r½   f  r»   z:TestStuff.test_multiple_listeners_error.<locals>.listener2c                  W   r§   ©NÚ	listener3r©   r¸   r   r   r   r¿   j  r«   z:TestStuff.test_multiple_listeners_error.<locals>.listener3rf   r¼   c                   S   rŠ   )NÚtest_multiple_listeners_errorrŒ   r   r   r   r   r-   s  r   )r   r0   r1   r   rk   ÚassertIn)r!   r5   rµ   r½   r¿   r   rº   r   rÀ   Z  s"   





z'TestStuff.test_multiple_listeners_errorc                   @   r(   )
zTestStuff.Resultsc                 C   s
   g | _ d S r'   rº   rt   r   r   r   Ú__init__}  ó   
zTestStuff.Results.__init__c                 C   ó    |  | j¡ | j d¡ tdƒ‚)Nr³   rµ   )rQ   r½   rL   r·   r   rU   r   r   r   rµ   €  ó   zTestStuff.Results.listener1c                 C   rÄ   )Nr³   r½   )rQ   rµ   rL   r·   r   rU   r   r   r   r½   …  rÅ   zTestStuff.Results.listener2c                 C   r§   r¾   r©   )r!   Ú_pr   r   r   r¿   Š  r«   zTestStuff.Results.listener3N)r   r   r   rÂ   rµ   r½   r¿   r   r   r   r   ÚResults{  s
    rÇ   c                 C   sF   |   ¡ }||jƒ ||jƒ ||jƒ ttd ƒ |  dg|j¡ d S )Nrf   r³   )rÇ   rµ   r½   r¿   r   rk   r2   rL   )r!   rÆ   r1   rL   r   r   r   Ú%_test_multiple_listeners_error_unlink  s   


z/TestStuff._test_multiple_listeners_error_unlinkc                 C   s(   t  dd„ ¡}|  ||j¡ | ¡  d S )Nc                   S   r*   r²   r   r   r   r   r   r-   š  r.   zNTestStuff.test_multiple_listeners_error_unlink_Greenlet_link.<locals>.<lambda>)r   r0   rÈ   r1   r$   rU   r   r   r   Ú2test_multiple_listeners_error_unlink_Greenlet_link™  s   z<TestStuff.test_multiple_listeners_error_unlink_Greenlet_linkc                 C   s    t  dd„ ¡}|  ||j¡ d S )Nc                   S   r*   r²   r   r   r   r   r   r-   Ÿ  r.   zQTestStuff.test_multiple_listeners_error_unlink_Greenlet_rawlink.<locals>.<lambda>)r   r0   rÈ   ÚrawlinkrU   r   r   r   Ú5test_multiple_listeners_error_unlink_Greenlet_rawlinkž  s   z?TestStuff.test_multiple_listeners_error_unlink_Greenlet_rawlinkc                 C   s&   t ƒ }t |jd¡ |  ||j¡ d S )Né   )r   r   r0   ÚsetrÈ   rÊ   )r!   r   r   r   r   Ú8test_multiple_listeners_error_unlink_AsyncResult_rawlink¢  s   zBTestStuff.test_multiple_listeners_error_unlink_AsyncResult_rawlinkN)r   r   r   r•   rž   r   rŸ   r¦   r±   rÀ   ÚobjectrÇ   rÈ   rÉ   rË   rÎ   r   r   r   r   r     s    

!r   c                  G   ó   d S r'   r   r¸   r   r   r   rO   ¨  rq   rO   c                   @   ó   e Zd Zdd„ ZdS )ÚAc                 C   rÐ   r'   r   rt   r   r   r   Úmethod®  rq   zA.methodN)r   r   r   rÓ   r   r   r   r   rÒ   ¬  ó    rÒ   c                   @   r   )ÚSubclassNr   r   r   r   r   rÕ   ±  r   rÕ   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestStrc                 C   sD   t j t¡}|  |d¡ |  |¡ | ¡  |  |¡ |  |d¡ d S )Nzat X: dummy_test_func>)r   r   r0   rO   Úassert_nstr_endswithr®   r   r­   r“   r   r   r   Útest_function¶  s   

zTestStr.test_functionc                 C   s|   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   r0   rÒ   rÓ   Úassert_nstr_startswithr^   rÚ   rØ   r®   r   r­   r“   r   r   r   Útest_method¿  s   


zTestStr.test_methodc                 C   s<   t ƒ }|  |d¡ |  |d¡ t d ddd}|  |d¡ d S )Nz
<Subclass zat X: _run>Úquestioné*   )Úanswerz# at X: _run('question', answer=42)>)rÕ   rÜ   rØ   r“   r   r   r   Útest_subclassÑ  s
   zTestStr.test_subclassN)r   r   r   rÙ   rÝ   rá   r   r   r   r   r×   ´  s    	r×   c                   @   rÑ   )ÚTestJoinc                 C   ó0   t  t jd¡}z|j|dW | ¡  S | ¡  w ©Nrf   ©r"   )r   r0   r   r   r$   ©r!   r"   r”   r   r   r   ÚwaitÜ  ó   zTestJoin.waitN©r   r   r   rç   r   r   r   r   râ   Ú  rÔ   râ   c                   @   rÑ   )ÚTestGetc                 C   rã   rä   )r   r0   r   r3   r$   ræ   r   r   r   rç   æ  rè   zTestGet.waitNré   r   r   r   r   rê   ä  rÔ   rê   c                   @   s   e Zd Ze ¡ Zdd„ ZdS )ÚTestJoinAll0c                 C   s   t j| jg|d d S )Nrå   )r   r˜   r”   r    r   r   r   rç   ò  ó   zTestJoinAll0.waitN)r   r   r   r   r   r”   rç   r   r   r   r   rë   î  s    rë   c                   @   rÑ   )ÚTestJoinAllc                 C   s8   t  t jd¡}zt j|g|d W | ¡  d S | ¡  w rä   )r   r0   r   r˜   r$   ræ   r   r   r   rç   ø  s   zTestJoinAll.waitNré   r   r   r   r   rí   ö  rÔ   rí   c                   @   sn   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	 
d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	TestBasicc                 C   sF   |   ttjd¡ |   ttjd¡ |   ttjd¡ |   ttjdd¡ d S r   )r>   Ú	TypeErrorr   r0   Ú	spawn_rawÚspawn_laterrt   r   r   r   Útest_spawn_non_callable  s   z!TestBasic.test_spawn_non_callablec                    s\   g ‰ ‡ fdd„}t j|ddd}t  d¡ |  |¡ |  ˆ d d¡ |  ˆ d d	di¡ d S )
Nc                     s   ˆ   | ¡ ˆ   |¡ d S r'   ©r·   )r%   r&   ©r™   r   r   Úf  s   
z*TestBasic.test_spawn_raw_kwargs.<locals>.fr   r™   )rÚ   ç{®Gáz„?r   )r   rÚ   )r   rð   r   rz   r2   )r!   rõ   r”   r   rô   r   Útest_spawn_raw_kwargs  s   

zTestBasic.test_spawn_raw_kwargsc                 C   sî  g }d	dd„}t j|ddd}| |j¡ |  ||¡ |  |j|¡ |  |j|¡ |  | ¡ |¡ |  | ¡ |¡ |  	|j
|¡ |  	|j|¡ | ¡  |  ||¡ |  |j|¡ |  |j|¡ |  | ¡ |¡ |  | ¡ |¡ |  	|j
|¡ |  	|j|¡ t  d¡ |  |¡ |  |j|¡ |  |j|¡ |  | ¡ |¡ |  | ¡ |¡ |  	|j
|¡ |  	|j|¡ |  |¡ t  d¡ |  ||¡ |  |j|¡ |  |j|¡ |  | ¡ |¡ |  | ¡ |¡ |  |j
d¡ |  	|j|¡ |  ||¡ d S )
Né   c                 S   s   t  | ¡ |S r'   )r   r   )ÚdelayÚreturn_valuer   r   r   Úfunc  s   
z(TestBasic.test_simple_exit.<locals>.funcrö   r³   ©rú   gü©ñÒMbP?g{®Gáz”?©rø   )r   r   rÊ   r·   rz   ÚdeadÚstartedÚreadyÚ
successfulÚassertIsNoner™   r@   ÚstartÚ
assertTruer   r2   Ú_check_flaky_eq©r!   Ú	link_testrû   r”   r   r   r   Útest_simple_exit  sJ   




zTestBasic.test_simple_exitc                 C   s   t js|  ||g¡ d S d S r'   )Ú	greentestÚRUNNING_ON_CIr2   )r!   r  r”   r   r   r   r  G  s   ýzTestBasic._check_flaky_eqc                 C   s²   g }ddd„}t j|tjdd}| |j¡ | ¡  t  ¡  t  tj¡ |  	|¡ |  
|j¡ |  	|j¡ |  
| ¡ ¡ |  	| ¡ ¡ |  |j¡ |  |jjd¡ |  ||¡ d S )Nrø   c                 S   s"   t  | ¡ tdƒ}t|d|ƒ |‚)NÚtest_error_exitÚmyattr)r   r   r   Úsetattr)rù   rú   Úerrorr   r   r   rû   P  s   
z'TestBasic.test_error_exit.<locals>.funcr³   rü   rý   )r   r   r   ÚSMALLEST_RELIABLE_DELAYrÊ   r·   r  r   Ú
LARGE_TICKrz   r  rþ   rÿ   r   r  r  r™   r2   r@   r  r  r  r   r   r   r  M  s   

zTestBasic.test_error_exitc                 C   s<   |   t ¡ j¡ t tj¡}| ¡  | ¡  |   |j¡ d S r'   )rz   r   r   Úexc_infor   r   r  r   r“   r   r   r   Útest_exc_info_no_errore  s
   z TestBasic.test_exc_info_no_errorzƒStarted getting a Fatal Python error on Github Actions on 2020-12-18, even with recursion limits in place. It was fine before that.c                    sR  dd l }| ¡ }|  |j|¡ | |d ¡ ‡fdd„‰g ‰ ‡ fdd„}z!|t ¡ _t ˆ¡‰‡fdd„}t |¡}t |g¡ W t ¡ `nt ¡ `w zt	}W n t
yZ   t}Y nw |  |¡ ˆ ¡  W d   ƒ n1 sow   Y  |  ˆ ¡ ¡ |  ˆj¡ |  ˆ ¡ |  d	tˆ ƒ¡ |  ˆ d d ˆ¡ |  ˆ d d	 |¡ ˆ d d …= d S )
Nr   rø   c                      s
   ˆ ƒ  d S r'   r   r   )Úrecurr   r   r    rÃ   z-TestBasic.test_recursion_error.<locals>.recurc                    s   ˆ   | |||f¡ d S r'   ró   )ÚgletÚtÚvÚtb)Úerrorsr   r   Úhandle_error…  rì   z4TestBasic.test_recursion_error.<locals>.handle_errorc                      s   t  ˆ g¡S r'   )r   r˜   r   )r”   r   r   rç   Œ  ó   z,TestBasic.test_recursion_error.<locals>.waitr   )ÚsysÚgetrecursionlimitÚ
addCleanupÚsetrecursionlimitr   Úget_hubr  r0   r˜   ÚRecursionErrorÚ	NameErrorÚRuntimeErrorr>   r3   rz   r  r  rþ   r2   Úlenr?   )r!   r  Úlimitr  rç   Úg2Úexpected_excr   )r  r”   r  r   Útest_recursion_errorm  s:   


ÿ
ÿ
zTestBasic.test_recursion_errorc                    s´   d  }}‡ fdd„}t  |¡}t  |¡}ˆ  ttƒ dƒtƒ ¡ ˆ  |j|j¡ | ¡  | ¡  t	 
|¡}ˆ  |j¡ ˆ  |j|j¡ ˆ  | ¡ tƒ ¡ |jsXt	 d¡ |jrNd S d S )Nc                     s0   t  ¡ } ˆ  | jtƒ j¡ ˆ  |  ¡ tƒ ¡ d S r'   )r   r   r?   Úspawn_tree_localsr   Úspawning_greenlet)Úchildrt   r   r   rû   ¨  s   z(TestBasic.test_tree_locals.<locals>.funcr(  rö   )r   r   rz   Úhasattrr   ÚassertIsNotr(  r  r   r   rð   ÚassertIsNotNoner?   r)  rþ   r   )r!   r”   r%  rû   Úrawr   rt   r   Útest_tree_locals¦  s"   

ÿ

ÿzTestBasic.test_tree_localsc              	      s0  ddi‰ ‡ fdd„}t j |¡ z€t  dd„ ¡}|  t|dƒ¡ | ¡  |  ˆ d d¡ t  d	d
d„ ¡}|  t|dƒ¡ | ¡  |  ˆ d d¡ t  dd„ ¡}| 	¡  |  t|dƒ¡ | ¡  |  ˆ d d¡ t j 
|¡ t  dd„ ¡}|  t|dƒ¡ | ¡  |  ˆ d d¡ W t j 
|¡ d S t j 
|¡ w )Nú#r   c                    s   ˆ d  d7  < d| _ d S )Nr0  r   T)Ú_called_test)Úgr©Úcalledr   r   ÚcbÀ  s   
z-TestBasic.test_add_spawn_callback.<locals>.cbc                   S   rÐ   r'   r   r   r   r   r   r-   Æ  r.   z3TestBasic.test_add_spawn_callback.<locals>.<lambda>r1  r   gñhãˆµøä>c                   S   rÐ   r'   r   r   r   r   r   r-   Ë  r.   ry   c                   S   rÐ   r'   r   r   r   r   r   r-   Ð  r.   r/   c                   S   rÐ   r'   r   r   r   r   r   r-   ×  r.   )r   r   Úadd_spawn_callbackr0   r  r+  r   r2   rñ   r  Úremove_spawn_callbackrz   )r!   r5  r”   r   r3  r   Útest_add_spawn_callback½  s.   z!TestBasic.test_add_spawn_callbackc                 C   s\   dd„ }zt j}W n ty   t d¡‚w |t _zt  ¡ }|  |j¡ W |t _d S |t _w )Nc                   S   r§   )Nzcall stack is not deep enough)Ú
ValueErrorr   r   r   r   r3   ß  r«   z0TestBasic.test_getframe_value_error.<locals>.getz Cannot mock when Cython compiled)r   Úsys_getframeÚAttributeErrorÚunittestÚSkipTestr   r  Úspawning_stack)r!   r3   Úogfr*  r   r   r   Útest_getframe_value_errorÞ  s   

þz#TestBasic.test_getframe_value_errorc                 C   sº   t  dd„ ¡}|  |jt  ¡ ¡ tƒ |_z>|  |jt  ¡ ¡ |  tt	fd¡ t
|dƒ W d   ƒ n1 s6w   Y  W t  ¡ |_| ¡  d S W t  ¡ |_| ¡  d S t  ¡ |_| ¡  w )Nc                   S   r*   r   r   r   r   r   r   r-   ï  r.   z=TestBasic.test_minimal_ident_parent_not_hub.<locals>.<lambda>zCannot convert|ident_registryr‘   )r   r0   r?   r’   r  r   r,  r£   rï   r;  r^   r$   r“   r   r   r   Ú!test_minimal_ident_parent_not_hubí  s&   ÿþý
÷

ÿ
z+TestBasic.test_minimal_ident_parent_not_hubN)r   r   r   rò   r÷   r  r  r  r  r	  ÚskipOnCIr'  r/  r8  r@  rA  r   r   r   r   rî      s    	/ÿ
4!rî   c                   @   sª   e Zd Zdd„ Zd'dd„Zd(dd„Zed	d
„ ƒZdd„ ZeZ	d(dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ ZdS ))ÚTestKillc                 C   s°   |   |¡ |  |j¡ |   |j¡ |  | ¡ ¡ |r9|  | ¡ t|ƒ|j|jf¡ |  	|jt
j¡ |  |j¡ d S |   | ¡ t|ƒ|j|jf¡ |  |jt
j¡ |  |j¡ d S r'   )rz   r  rþ   rÿ   r   r  Úreprr™   r@   r}   r   r~   r  ÚassertNotIsInstancer-  ©r!   r”   r  r   r   r   Ú__assertKilled  s   
zTestKill.__assertKilledTc                 C   s&   |   ||¡ t d¡ |   ||¡ d S ©Nrö   )Ú_TestKill__assertKilledr   r   rF  r   r   r   ÚassertKilled  s   
zTestKill.assertKilledNc                 C   s’   |d u rt j}|rtjt j|g||d}n	tj|j||d}|ƒ  |s)t  tj¡ |d u p7t	|t
ƒo7t|t jƒ}|  ||¡ |ƒ  |  ||¡ d S )N)r@   Úblock)r   r~   Ú	functoolsÚpartialÚkillallr$   r   r   r  Ú
isinstanceÚtypeÚ
issubclassrJ  )r!   r”   rK  rN  rA   Úkillerr  r   r   r   Ú__kill_greenlet  s   ÿzTestKill.__kill_greenletc                 C   s   |   d¡ d S r   ró   ©Úresult_collectorr   r   r   Ú_run_in_greenlet)  s   zTestKill._run_in_greenletc                 C   r*   )zU
        Subclasses should override. This doesn't actually start a greenlet.
        Nr   r“   r   r   r   Ú_start_greenlet-  r.   zTestKill._start_greenletc                 C   sb   g }g }t  | j|¡}| |j¡ |  |¡ |  ||||¡ |  |¡ |  |¡ |  	||g¡ d S r'   )
r   r   rV  r1   r·   rW  Ú_TestKill__kill_greenletÚ_after_kill_greenletrz   r2   )r!   rK  rN  rA   r  r{   r”   r   r   r   Ú_do_test5  s   


zTestKill._do_testc                 C   ó   | j ddd d S )NTF©rK  rN  ©rZ  rt   r   r   r   Ú
test_blockD  ó   zTestKill.test_blockc                 C   ó   | j ddd d S )NFr\  r]  rt   r   r   r   Útest_non_blockG  r_  zTestKill.test_non_blockc                 C   r`  )NTr\  r]  rt   r   r   r   Útest_block_killallJ  r_  zTestKill.test_block_killallc                 C   r[  )NFTr\  r]  rt   r   r   r   Útest_non_block_killalM  r_  zTestKill.test_non_block_killalc                 C   ó   | j ddtƒ d d S )NTF©rK  rN  rA   ©rZ  Ú	Exceptionrt   r   r   r   Útest_non_type_exceptionP  rì   z TestKill.test_non_type_exceptionc                 C   ó   | j ddtƒ d d S )NFre  rf  rt   r   r   r   Ú!test_non_type_exception_non_blockS  rì   z*TestKill.test_non_type_exception_non_blockc                 C   ri  )NTre  rf  rt   r   r   r   Útest_non_type_exception_killallV  rì   z(TestKill.test_non_type_exception_killallc                 C   rd  )NFTre  rf  rt   r   r   r   Ú)test_non_type_exception_killall_non_blockY  rì   z2TestKill.test_non_type_exception_killall_non_blockc                 C   ó   | j dddd d S )NTFrß   re  r]  rt   r   r   r   Útest_non_exc_exception\  ra   zTestKill.test_non_exc_exceptionc                 C   ó   | j dddd d S )NFrß   re  r]  rt   r   r   r   Ú test_non_exc_exception_non_block_  ra   z)TestKill.test_non_exc_exception_non_blockc                 C   ro  )NTrß   re  r]  rt   r   r   r   Útest_non_exc_exception_killallb  ra   z'TestKill.test_non_exc_exception_killallc                 C   rm  )NFTrß   re  r]  rt   r   r   r   Ú(test_non_exc_exception_killall_non_blocke  ra   z1TestKill.test_non_exc_exception_killall_non_block)Tr'   )r   r   r   rI  rJ  rX  ÚstaticmethodrV  rW  rY  rZ  r^  ra  rb  rc  rh  rj  rk  rl  rn  rp  rq  rr  r   r   r   r   rC    s*    



rC  c                   @   rÑ   )ÚTestKillAfterStartc                 C   s   |  ¡  d S r'   )r  r“   r   r   r   rW  k  r  z"TestKillAfterStart._start_greenletN©r   r   r   rW  r   r   r   r   rt  i  rÔ   rt  c                   @   rÑ   )ÚTestKillAfterStartLaterc                 C   s   |  tj¡ d S r'   )Ústart_laterr   r  r“   r   r   r   rW  p  s   z'TestKillAfterStartLater._start_greenletNru  r   r   r   r   rv  n  rÔ   rv  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestKillWhileRunningc                 C   s   t  d¡ t | ¡ d S )Nrf   )r   r   rC  rV  rT  r   r   r   rV  u  s   
z%TestKillWhileRunning._run_in_greenletc                 C   s   t  | |¡ t d¡ d S rH  )rC  rY  r   r   r“   r   r   r   rY  |  s   z)TestKillWhileRunning._after_kill_greenletN)r   r   r   rs  rV  rY  r   r   r   r   rx  s  s    
rx  c                   @   rÑ   )ÚTestKillallRawGreenletc                 C   s   t  dd„ ¡}t  |g¡ d S )Nc                   S   r*   r   r   r   r   r   r   r-   ƒ  r.   z9TestKillallRawGreenlet.test_killall_raw.<locals>.<lambda>)r   rð   rN  r“   r   r   r   Útest_killall_raw‚  s   z'TestKillallRawGreenlet.test_killall_rawN)r   r   r   rz  r   r   r   r   ry  €  rÔ   ry  c                   @   sJ   e Zd Zdd„ Zdd„ Zedd„ ƒZdd„ Zd	d
„ Zddd„Z	dd„ Z
dS )ÚTestContextManagerc                 C   sH   t  t jtj¡}|  |¡ W d   ƒ n1 sw   Y  |  |¡ d S r'   )r   r0   r   r   Ú
SMALL_TICKÚassert_greenlet_spawnedÚassert_greenlet_finishedr“   r   r   r   Útest_simple‰  s   ÿzTestContextManager.test_simplec              	   C   sn   t  | j¡"}|  tj¡ | ¡  W d   ƒ n1 sw   Y  W d   ƒ n1 s+w   Y  |  |¡ d S r'   )r   r0   Ú_raise_exceptionr>   r	  ÚExpectedExceptionr3   r~  r“   r   r   r   Útest_wait_in_suite  s   
ÿ€ÿz%TestContextManager.test_wait_in_suitec                   C   s   t j‚r'   )r	  r  r   r   r   r   r€  •  s   z#TestContextManager._raise_exceptionc                 C   sp   t  | j¡}W d   ƒ n1 sw   Y  |  |¡ |  tj¡ | ¡  W d   ƒ d S 1 s1w   Y  d S r'   )r   r0   r€  r~  r>   r	  r  r3   r“   r   r   r   Útest_greenlet_raises™  s   ÿ

"ÿz'TestContextManager.test_greenlet_raisesc              	   C   s   d}|   t¡' t tjtj¡}|  |¡ d}W d   ƒ n1 s"w   Y  W d   ƒ n1 s1w   Y  |  	|¡ |  
|¡ |  	|j¡ d S )Nr   r   )r>   r   r   r0   r   r   r   r|  r}  r  r~  r#   )r!   Ú	suite_ranr”   r   r   r   Útest_join_raises¡  s   
þ€ÿ

z#TestContextManager.test_join_raisesNc              	   C   sö   |st jnt j}|  t¡) t tj|¡}|  	|¡ |r%d|_
t |¡ t‚1 s*w   Y  W d   ƒ n1 s9w   Y  |  |¡ |  |j¡ |rR|  |j¡ n|  |j¡ |  | ¡ ¡ |  t¡ | ¡  W d   ƒ d S 1 stw   Y  d S ©NF)r   r|  r  r>   r   r   r0   r   r   r}  r   r~  r  r#   r   rz   r  r3   )r!   rù   Úgreenlet_sleepr”   r   r   r   Útest_suite_body_raises¬  s&   

ûÿ

"ÿz)TestContextManager.test_suite_body_raisesc                 C   s   | j tjd d S )N)rù   )rˆ  r   r|  rt   r   r   r   Ú!test_suite_body_raises_with_delayÁ  r_  z4TestContextManager.test_suite_body_raises_with_delayr'   )r   r   r   r  r‚  rs  r€  rƒ  r…  rˆ  r‰  r   r   r   r   r{  ‡  s    

r{  c                   @   rÑ   )Ú	TestStartc                 C   sT   t  t jtj¡}|  |¡ | ¡  |  |¡ | ¡  |  	|¡ | ¡  |  	|¡ d S r'   )
r   r0   r   r   r|  r}  r  Úassert_greenlet_startedr   r~  r“   r   r   r   Ú
test_startÆ  s   


zTestStart.test_startN)r   r   r   rŒ  r   r   r   r   rŠ  Ä  rÔ   rŠ  c                   @   rÖ   )ÚTestRefc                 C   s   d| _ t ¡  d S r†  )r\   r   r   rt   r   r   r   Ú	test_init×  s   zTestRef.test_initc                 C   s   t  t jtj¡ ¡  d S r'   )r   r0   r   r   r  r$   rt   r   r   r   Útest_kill_scheduledÜ  s   zTestRef.test_kill_scheduledc                 C   s6   t  t jtj¡}zt  tj¡ W | ¡  d S | ¡  w r'   )r   r0   r   r   r  r  r$   r“   r   r   r   Útest_kill_startedß  s   zTestRef.test_kill_startedN)r   r   r   rŽ  r  r  r   r   r   r   r  Õ  s    r  zNeeds C extensionc                   @   rÑ   )ÚTestCExtc                 C   ó$   |   tjjd¡ |   tjjd¡ d S )Nzgevent._gevent_cgreenlet©r2   r   r   r   ÚSpawnedLinkrt   r   r   r   Útest_c_extensionê  ó   
ÿ
ÿzTestCExt.test_c_extensionN)r   r   r   r•  r   r   r   r   r‘  ç  ó    r‘  zNeeds pure pythonc                   @   rÑ   )ÚTestPurec                 C   r’  )Nzgevent.greenletr“  rt   r   r   r   Ú	test_pureó  r–  zTestPure.test_pureN)r   r   r   r™  r   r   r   r   r˜  ð  r—  r˜  Ú__main__)@rL  r<  Úgevent.testingÚtestingr	  r   r   r   r   r   Úgevent.eventr   Úgevent.queuer   r   Úgevent.testing.timingr	   r
   r   r   r|  rk   ÚTestCaseÚerror_fatalr  r   r   r   r   r   r)   rN   r]   rp   rr   r…   rˆ   rŽ   r   rO   rÏ   rÒ   rÕ   r×   râ   rê   rë   rí   rî   rC  rt  rv  rx  ry  r{  rŠ  r  ÚskipOnPurePythonr‘  ÚskipWithCExtensionsr˜  rl   r   Úmainr   r   r   r   Ú<module>   sr   4'7 &


  h=	
ÿ