o
    ,wÖi
}  ã                   @   sò  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„ 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 d0d1„ d1eƒZ0G d2d3„ d3eƒZ1G d4d5„ d5eƒZ2G d6d7„ d7ejƒZ3G d8d9„ d9ejƒZ4G d:d;„ d;e4ƒZ5G d<d=„ d=e4ƒZ6G d>d?„ d?e4ƒZ7G d@dA„ dAejƒZ8G dBdC„ dCejƒZ9G dDdE„ dEejƒZ:G dFdG„ dGejƒZ;e <dH¡G dIdJ„ dJejƒƒZ=e >dK¡G dLdM„ dMejƒƒZ?e+ƒ Z@[[eAdNkrwe B¡  dS dS )Oé    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__© r   r   úX/home/ubuntu/sommelier/.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   0   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    8   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   3   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>E   ó    z3TestLink.test_link_to_asyncresult.<locals>.<lambda>r-   é   )r   Úspawnr   ÚlinkÚassertEqualÚgetÚrange)r"   ÚpÚeventÚ_Úevent2r   r   r   Útest_link_to_asyncresultD   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.   Q   s    z=TestLink.test_link_to_asyncresult_exception.<locals>.<lambda>r0   )
r   r   r1   r   r2   ÚassertRaisesr4   ÚassertIsÚ	exceptionr5   )r"   r6   r7   Úexcr8   r9   r   r=   r   r;   O   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.   a   r/   z-TestLink.test_link_to_queue.<locals>.<lambda>r-   r0   )r   r1   r   r2   Úputr3   r4   r5   )r"   r6   Úqr8   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.   k   r/   z/TestLink.test_link_to_channel.<locals>.<lambda>c                   S   r+   )Néf   r   r   r   r   r   r.   l   r/   c                   S   r+   )Nég   r   r   r   r   r   r.   m   r/   )rF   rG   rH   )r   r1   r	   r2   rC   r4   r3   Úsorted)r"   Úp1Úp2Úp3rD   Úresultsr   r   r   Útest_link_to_channelj   s   "zTestLink.test_link_to_channelN)r   r   r   r:   r;   rE   rN   r   r   r   r   r*   B   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_funcr3   Ú	has_linksÚunlinkÚsetUpr%   )r"   r6   r2   r   r   r   Ú
_test_funcy   s   

zTestUnlink._test_funcc                 C   ó   t  t¡}|  ||j¡ d S r(   )r   r1   rP   rT   r2   ©r"   r6   r   r   r   Útest_func_linkˆ   ó   
zTestUnlink.test_func_linkc                 C   rU   r(   )r   r1   rP   rT   Ú
link_valuerV   r   r   r   Útest_func_link_valueŒ   rX   zTestUnlink.test_func_link_valuec                 C   rU   r(   )r   r1   rP   rT   Úlink_exceptionrV   r   r   r   Útest_func_link_exception   rX   z#TestUnlink.test_func_link_exceptionN)r   r   r   Úswitch_expectedrT   rW   rZ   r\   r   r   r   r   rO   v   s    rO   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"   r6   Úlistenerr   r   r   r2   ™   ó   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 )Nrc   )Úremove)r&   ©Úcallback_flagr   r   r.   ¤   s   
 z)LinksTestCase.set_links.<locals>.<lambda>é
   )r   r2   r   rC   r5   )r"   r6   r7   Úqueuer8   r   re   r   Ú	set_linksœ   s   
zLinksTestCase.set_linksc                 C   s&   t ƒ }||ƒ tƒ }||jƒ ||fS r(   )r   r	   rC   )r"   r2   r7   rh   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   ÚDELAYr4   ÚXr@   )r"   r7   rh   Úgotr   r   r   Úcheck_timed_outµ   s   zLinksTestCase.check_timed_outr(   )r   r   r   r`   r2   ri   rj   ro   r   r   r   r   r^   •   s    
	r^   c                   C   r+   )Né   r   r   r   r   r   Úreturn25¼   ó   rq   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_linkr2   Nc                 C   s   | j  ¡  d | _ d S r(   )r6   Ú
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 )Nr0   rp   )r   r1   rq   r6   r5   Ú_test_returnr%   )r"   r8   r   r   r   Útest_returnÊ   s   zTestReturn_link.test_returnc                 C   sv   |   |¡\}}}|  |j¡}ttd ƒ |  |¡ |  | ¡ |¡ |  | ¡  ¡ |¡ ttƒ |  |¡ | j|Ž  d S ©Né   )	ri   rj   r[   r   rl   ÚassertFalser3   r4   ro   )r"   r6   Úresultr7   rh   rf   Úxxxxxr   r   r   rw   Ð   s   

zTestReturn_link._test_returnc                 C   s~   |   |¡\}}}|  |j¡}| ¡  ttƒ |  |¡ |  | ¡ t	j
¡ |  | ¡  ¡ t	j
¡ ttƒ |  |¡ | j|Ž  d S r(   )ri   rj   r[   r%   r   rl   r{   ÚassertIsInstancer4   r   ÚGreenletExitro   ©r"   r6   r7   rh   rf   r}   r   r   r   Ú
_test_killá   s   

zTestReturn_link._test_killc                 C   s.   t  tt¡ }| _tdƒD ]}|  |¡ qd S ©Nr0   )r   r1   r   rl   r6   r5   r   ©r"   r6   r8   r   r   r   Ú	test_killò   s   ÿzTestReturn_link.test_kill)
r   r   r   r`   r6   rv   rx   rw   r   r„   r   r   r   r   rs   Á   s    rs   c                   @   ó   e Zd ZdZdS )ÚTestReturn_link_valuerY   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_linkr2   c                 C   sp   |   |¡\}}}|  |j¡}ttƒ |  ||¡ |  t|j¡ |  	| ¡ |¡ ttƒ |  ||¡ | j
|Ž  d S r(   )ri   rj   rY   r   rl   r{   r?   r   r4   r3   ro   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>r0   )r   r1   r5   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_exceptionr[   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   r1   Ú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+   ry   r   r   r   r   r   r.   !  r/   c                   S   r+   r‚   r   r   r   r   r   r.   "  r/   T©Úraise_error)r   rz   r0   r   )	r   r1   Újoinallr3   Úvaluer   r2   r4   rR   )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   rl   r   r   r   r   r›   0  s   z$TestStuff.test_wait_error.<locals>.xc                   S   r‹   )NÚtest_wait_errorr   r   r   r   r   r.   4  rŽ   z+TestStuff.test_wait_error.<locals>.<lambda>Tr—   )r   r1   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   r1   ÚassertRaisesRegexr   r™   )r"   r¢   ÚaÚbr   r   r   Útest_joinall_exception_order9  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_ignoredI  ó   zDTestStuff.test_joinall_count_raise_error.<locals>.raises_but_ignoredc                   S   s   	 t dƒ q)NTr¡   )r   r   r   r   r   Úsleep_foreverL  s   ÿz?TestStuff.test_joinall_count_raise_error.<locals>.sleep_foreverFr   )r˜   r©   )r   r1   r™   Úassert_greenlet_readyÚassert_greenlet_not_readyr%   )r"   r«   r­   ÚsleeperÚraiserr   r   r   Útest_joinall_count_raise_errorF  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ƒ‚)Nrg   Ú	listener1©Úappendr   ©Ú_args©rM   r   r   r¶   c  ó   
z:TestStuff.test_multiple_listeners_error.<locals>.listener1c                     rµ   )Né   Ú	listener2r·   r¹   r»   r   r   r¾   g  r¼   z:TestStuff.test_multiple_listeners_error.<locals>.listener2c                  W   r¨   ©NÚ	listener3rª   r¹   r   r   r   rÀ   k  r¬   z:TestStuff.test_multiple_listeners_error.<locals>.listener3rg   r½   c                   S   r‹   )NÚtest_multiple_listeners_errorr   r   r   r   r   r.   t  rŽ   )r   r1   r2   r   rl   ÚassertIn)r"   r6   r¶   r¾   rÀ   r   r»   r   rÁ   [  s"   





z'TestStuff.test_multiple_listeners_errorc                   @   r)   )
zTestStuff.Resultsc                 C   s
   g | _ d S r(   r»   ru   r   r   r   Ú__init__~  ó   
zTestStuff.Results.__init__c                 C   ó    |  | j¡ | j d¡ tdƒ‚)Nr´   r¶   )rR   r¾   rM   r¸   r   rV   r   r   r   r¶     ó   zTestStuff.Results.listener1c                 C   rÅ   )Nr´   r¾   )rR   r¶   rM   r¸   r   rV   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 )Nrg   r´   )rÈ   r¶   r¾   rÀ   r   rl   r3   rM   )r"   rÇ   r2   rM   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   r1   rÉ   r2   r%   rV   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   r1   rÉ   ÚrawlinkrV   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   r1   Ú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   rP   ©  rr   rP   c                   @   ó   e Zd Zdd„ ZdS )ÚAc                 C   rÑ   r(   r   ru   r   r   r   Úmethod¯  rr   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   r1   rP   Ú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   r1   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 ©Nrg   ©r#   )r   r1   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   r1   r   r4   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   r1   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   r1   Ú	spawn_rawÚspawn_laterru   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   r{   r3   )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¸   r{   ÚdeadÚstartedÚreadyÚ
successfulÚassertIsNonerš   rA   ÚstartÚ
assertTruer   r3   Ú_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_CIr3   )r"   r  r•   r   r   r   r  H  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ü   Q  s   
z'TestBasic.test_error_exit.<locals>.funcr´   rý   rþ   )r   r   r   ÚSMALLEST_RELIABLE_DELAYrË   r¸   r  r   Ú
LARGE_TICKr{   r  rÿ   r   r  r  r  rš   r3   rA   r  r  r  r   r   r   r  N  s   

zTestBasic.test_error_exitc                 C   s<   |   t ¡ j¡ t tj¡}| ¡  | ¡  |   |j¡ d S r(   )r{   r   r   Úexc_infor   r   r  r    r”   r   r   r   Útest_exc_info_no_errorf  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  r1   r™   ÚRecursionErrorÚ	NameErrorÚRuntimeErrorr?   r4   r{   r  r  rÿ   r3   Úlenr@   )r"   r  Úlimitr  rè   Úg2Úexpected_excr   )r  r•   r  r   Útest_recursion_errorn  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)Úchildru   r   r   rü   ©  s   z(TestBasic.test_tree_locals.<locals>.funcr)  r÷   )r   r   r{   Úhasattrr   ÚassertIsNotr)  r  r    r   rñ   ÚassertIsNotNoner@   r*  rÿ   r   )r"   r•   r&  rü   Úrawr   ru   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 )Nr1  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>r2  r   gñhãˆµøä>c                   S   rÑ   r(   r   r   r   r   r   r.   Ì  r/   rz   c                   S   rÑ   r(   r   r   r   r   r   r.   Ñ  r/   r0   c                   S   rÑ   r(   r   r   r   r   r   r.   Ø  r/   )r   r   Úadd_spawn_callbackr1   r  r,  r    r3   rò   r  Úremove_spawn_callbackr{   )r"   r6  r•   r   r4  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   r4   à  r¬   z0TestBasic.test_getframe_value_error.<locals>.getz Cannot mock when Cython compiled)r   Úsys_getframeÚAttributeErrorÚunittestÚSkipTestr   r  Úspawning_stack)r"   r4   Ú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   r1   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(  r0  r9  rA  rB  r   r   r   r   rï     s    	/ÿ
4!rï   c                       sº   e Zd Z‡ fd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‡  ZS )+ÚTestKillc                    s:   t ƒ  ¡  t ¡ }tj|ddd}| ¡  |  |j¡ d S )NÚprint_exceptionT)Úautospec)	ÚsuperrS   r   r   ÚPatchrÐ   r  r  Ústop)r"   ÚhubÚpatcher©Ú	__class__r   r   rS     s
   
zTestKill.setUpc                 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(   )r{   r  rÿ   r   r  r  Úreprrš   rA   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   rP  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)rA   Úblock)r   r   Ú	functoolsÚpartialÚkillallr%   r   r   r  Ú
isinstanceÚtypeÚ
issubclassrT  )r"   r•   rU  rX  rB   Úkillerr  r   r   r   Ú__kill_greenlet  s   ÿzTestKill.__kill_greenletc                 C   s   |   d¡ d S r   rô   ©Úresult_collectorr   r   r   Ú_run_in_greenlet2  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_greenlet6  r/   zTestKill._start_greenletc                 C   sb   g }g }t  | j|¡}| |j¡ |  |¡ |  ||||¡ |  |¡ |  |¡ |  	||g¡ d S r(   )
r   r   r`  r2   r¸   ra  Ú_TestKill__kill_greenletÚ_after_kill_greenletr{   r3   )r"   rU  rX  rB   r  r|   r•   r   r   r   Ú_do_test>  s   


zTestKill._do_testc                 C   ó   | j ddd d S )NTF©rU  rX  ©rd  ru   r   r   r   Ú
test_blockM  ó   zTestKill.test_blockc                 C   ó   | j ddd d S )NFrf  rg  ru   r   r   r   Útest_non_blockP  ri  zTestKill.test_non_blockc                 C   rj  )NTrf  rg  ru   r   r   r   Útest_block_killallS  ri  zTestKill.test_block_killallc                 C   re  )NFTrf  rg  ru   r   r   r   Útest_non_block_killalV  ri  zTestKill.test_non_block_killalc                 C   ó   | j ddtƒ d d S )NTF©rU  rX  rB   ©rd  Ú	Exceptionru   r   r   r   Útest_non_type_exceptionY  rí   z TestKill.test_non_type_exceptionc                 C   ó   | j ddtƒ d d S )NFro  rp  ru   r   r   r   Ú!test_non_type_exception_non_block\  rí   z*TestKill.test_non_type_exception_non_blockc                 C   rs  )NTro  rp  ru   r   r   r   Útest_non_type_exception_killall_  rí   z(TestKill.test_non_type_exception_killallc                 C   rn  )NFTro  rp  ru   r   r   r   Ú)test_non_type_exception_killall_non_blockb  rí   z2TestKill.test_non_type_exception_killall_non_blockc                 C   ó   | j dddd d S )NTFrà   ro  rg  ru   r   r   r   Útest_non_exc_exceptione  rb   zTestKill.test_non_exc_exceptionc                 C   ó   | j dddd d S )NFrà   ro  rg  ru   r   r   r   Ú test_non_exc_exception_non_blockh  rb   z)TestKill.test_non_exc_exception_non_blockc                 C   ry  )NTrà   ro  rg  ru   r   r   r   Útest_non_exc_exception_killallk  rb   z'TestKill.test_non_exc_exception_killallc                 C   rw  )NFTrà   ro  rg  ru   r   r   r   Ú(test_non_exc_exception_killall_non_blockn  rb   z1TestKill.test_non_exc_exception_killall_non_block)Tr(   )r   r   r   rS   rS  rT  rb  Ústaticmethodr`  ra  rc  rd  rh  rk  rl  rm  rr  rt  ru  rv  rx  rz  r{  r|  Ú__classcell__r   r   rL  r   rD    s,    



rD  c                   @   rÒ   )ÚTestKillAfterStartc                 C   s   |  ¡  d S r(   )r  r”   r   r   r   ra  t  r  z"TestKillAfterStart._start_greenletN©r   r   r   ra  r   r   r   r   r  r  rÕ   r  c                   @   rÒ   )ÚTestKillAfterStartLaterc                 C   s   |  tj¡ d S r(   )Ústart_laterr   r  r”   r   r   r   ra  y  s   z'TestKillAfterStartLater._start_greenletNr€  r   r   r   r   r  w  rÕ   r  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestKillWhileRunningc                 C   s   t  d¡ t | ¡ d S )Nrg   )r   r   rD  r`  r^  r   r   r   r`  ~  s   
z%TestKillWhileRunning._run_in_greenletc                 C   s   t  | |¡ t d¡ d S rR  )rD  rc  r   r   r”   r   r   r   rc  …  s   z)TestKillWhileRunning._after_kill_greenletN)r   r   r   r}  r`  rc  r   r   r   r   rƒ  |  s    
rƒ  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ñ   rX  r”   r   r   r   Útest_killall_raw‹  s   z'TestKillallRawGreenlet.test_killall_rawN)r   r   r   r…  r   r   r   r   r„  ‰  rÕ   r„  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   r1   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   r1   Ú_raise_exceptionr?   r
  ÚExpectedExceptionr4   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   r1   r‹  r‰  r?   r
  rŒ  r4   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   r1   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   r1   r   r   rˆ  r   r‰  r  r$   r   r{   r  r4   )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‡  ru   r   r   r   Ú!test_suite_body_raises_with_delayÊ  ri  z4TestContextManager.test_suite_body_raises_with_delayr(   )r   r   r   rŠ  r  r}  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   r1   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   ru   r   r   r   Ú	test_inità  s   zTestRef.test_initc                 C   s   t  t jtj¡ ¡  d S r(   )r   r1   r   r   r  r%   ru   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   r1   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©r3   r   r   r   ÚSpawnedLinkru   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ž  ru   r   r   r   Ú	test_pureü  r¡  zTestPure.test_pureN)r   r   r   r¤  r   r   r   r   r£  ù  r¢  r£  Ú__main__)CrV  r=  Úunittest.mockr   rH  Úgevent.testingÚtestingr
  r   r   r   r   r   Úgevent.eventr   Úgevent.queuer   r	   Úgevent.testing.timingr
   r   r   r   r‡  rl   ÚTestCaseÚerror_fatalrŒ  r   r   r   r   r   r*   rO   r^   rq   rs   r†   r‰   r   r   rP   rÐ   rÓ   rÖ   rØ   rã   rë   rì   rî   rï   rD  r  r  rƒ  r„  r†  r•  r˜  ÚskipOnPurePythonrœ  ÚskipWithCExtensionsr£  rm   r   Úmainr   r   r   r   Ú<module>   st   4'7 &


  p=	
ÿ