o
    JXîh)  ã                   @   sž  	 d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
zd dlZW n ey6   dZY nw d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZejdvrbd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
l m!Z! d dl m"Z" d dl m#Z#m$Z$m%Z% dd„ Z&dd„ Z'dd„ Z(G dd„ dƒZ)G dd„ dej*ƒ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j0ƒZ1G dd „ d ej2ƒZ3G d!d"„ d"ƒZ4G d#d$„ d$ƒZ5ejd%krG d&d'„ d'e4ej6ƒZ7G d(d)„ d)e4e5ej6ƒZ8nJd dl9Z9G d*d+„ d+e4ƒZ:e;e9d,ƒr/G d-d.„ d.e:e5ej6ƒZ<e;e9d/ƒr@G d0d1„ d1e:e5ej6ƒZ=e;e9d2ƒrQG d3d4„ d4e:e5ej6ƒZ>G d5d'„ d'e:e5ej6ƒZ7d6d7„ Z?G d8d9„ d9ej6ƒZ@G d:d;„ d;ej6ƒZAG d<d=„ d=ej6ƒZBG d>d?„ d?ej6ƒZCG d@dA„ dAƒZDG dBdC„ dCeDej6ƒZEzd dlFZFW n
 ey¥   Y nw G dDdE„ dEeDej6ƒZGG dFdG„ dGej6ƒZHG dHdI„ dIej6ƒZIeJdJkrÍe K¡  dS dS )Ké    N)Úmock)Úwin32Úvxworks)Ú
coroutines)Úevents)Úproactor_events)Úselector_events)Úutils)Úsupport)Úsocket_helper)Úthreading_helper)Ú	ALWAYS_EQÚLARGESTÚSMALLESTc                   C   s   t  d ¡ d S ©N)ÚasyncioÚset_event_loop_policy© r   r   úG/opt/python-3.10.19/usr/lib/python3.10/test/test_asyncio/test_events.pyÚtearDownModule(   ó   r   c                  C   sH   	 t j d¡r	dS t jdkrdS t ¡ d } ttt|  d¡ƒƒ} | dk S )NZaixTÚdarwinFr   Ú.)é
   é   )ÚsysÚplatformÚ
startswithZmac_verÚtupleÚmapÚintÚsplit)Úversionr   r   r   Úbroken_unix_getsockname,   s   
r#   c                  C   s&   dd„ } t  ¡ }t  |¡ | | ƒ ¡S )Nc                   Ó   s   dS ©NÚhellor   r   r   r   r   Údoit8   ó   €z8_test_get_event_loop_new_process__sub_proc.<locals>.doit)r   Únew_event_loopÚset_event_loopÚrun_until_complete)r&   Úloopr   r   r   Ú*_test_get_event_loop_new_process__sub_proc7   s   
r,   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚCoroLikec                 C   ó   d S r   r   )ÚselfÚvr   r   r   ÚsendA   ó   zCoroLike.sendc                 G   r.   r   r   ©r/   Úexcr   r   r   ÚthrowD   r2   zCoroLike.throwc                 C   r.   r   r   ©r/   r   r   r   ÚcloseG   r2   zCoroLike.closec                 C   r.   r   r   r6   r   r   r   Ú	__await__J   r2   zCoroLike.__await__N)Ú__name__Ú
__module__Ú__qualname__r1   r5   r7   r8   r   r   r   r   r-   @   s
    r-   c                   @   sF   e Zd ZdZdZddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )ÚMyBaseProtoNc                 C   s6   d | _ d| _d| _|d ur| ¡ | _| ¡ | _d S d S ©NÚINITIALr   )Ú	transportÚstateÚnbytesÚcreate_futureÚ	connectedÚdone©r/   r+   r   r   r   Ú__init__R   s   
þzMyBaseProto.__init__c                 G   s$   | j |vrtd| j ›d|›ƒ‚d S ©Nzstate: z, expected: ©r@   ÚAssertionError©r/   Úexpectedr   r   r   Ú_assert_stateZ   ó   
ÿzMyBaseProto._assert_statec                 C   s0   || _ |  d¡ d| _| jr| j d ¡ d S d S ©Nr>   Ú	CONNECTED©r?   rL   r@   rC   Ú
set_result©r/   r?   r   r   r   Úconnection_made^   s   
ÿzMyBaseProto.connection_madec                 C   ó    |   d¡ |  jt|ƒ7  _d S ©NrO   ©rL   rA   Úlen©r/   Údatar   r   r   Údata_receivede   ó   
zMyBaseProto.data_receivedc                 C   s   |   d¡ d| _d S )NrO   ÚEOF)rL   r@   r6   r   r   r   Úeof_receivedi   s   

zMyBaseProto.eof_receivedc                 C   s,   |   dd¡ d| _| jr| j d ¡ d S d S )NrO   r\   ÚCLOSED©rL   r@   rD   rQ   r3   r   r   r   Úconnection_lostm   s
   ÿzMyBaseProto.connection_lostr   )r9   r:   r;   rC   rD   rF   rL   rS   rZ   r]   r`   r   r   r   r   r<   N   s    
r<   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚMyProtoc                    s   t ƒ  |¡ | d¡ d S )Ns%   GET / HTTP/1.0
Host: example.com

)ÚsuperrS   ÚwriterR   ©Ú	__class__r   r   rS   u   ó   zMyProto.connection_made©r9   r:   r;   rS   Ú__classcell__r   r   rd   r   ra   t   s    ra   c                   @   óB   e Zd ZdZddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚMyDatagramProtoNc                 C   s&   d| _ d| _|d ur| ¡ | _d S d S r=   )r@   rA   rB   rD   rE   r   r   r   rF   }   ó
   ÿzMyDatagramProto.__init__c                 C   ó$   | j |krtd| j ›d|›ƒ‚d S rG   rH   rJ   r   r   r   rL   ƒ   rM   zMyDatagramProto._assert_statec                 C   ó   || _ |  d¡ d| _d S )Nr>   ÚINITIALIZED©r?   rL   r@   rR   r   r   r   rS   ‡   ó   

zMyDatagramProto.connection_madec                 C   rT   ©Nrn   rV   ©r/   rY   Úaddrr   r   r   Údatagram_receivedŒ   r[   z!MyDatagramProto.datagram_receivedc                 C   s   |   d¡ d S rq   )rL   r3   r   r   r   Úerror_received   r   zMyDatagramProto.error_receivedc                 C   ó*   |   d¡ d| _| jr| j d ¡ d S d S )Nrn   r^   r_   r3   r   r   r   r`   “   ó
   
ÿzMyDatagramProto.connection_lostr   )
r9   r:   r;   rD   rF   rL   rS   rt   ru   r`   r   r   r   r   rj   z   s    
rj   c                   @   ri   )ÚMyReadPipeProtoNc                 C   s.   dg| _ d| _d | _|d ur| ¡ | _d S d S r=   )r@   rA   r?   rB   rD   rE   r   r   r   rF      s   ÿzMyReadPipeProto.__init__c                 C   rl   rG   rH   rJ   r   r   r   rL   ¤   rM   zMyReadPipeProto._assert_statec                 C   s"   || _ |  dg¡ | j d¡ d S rN   )r?   rL   r@   ÚappendrR   r   r   r   rS   ¨   s   zMyReadPipeProto.connection_madec                 C   s$   |   ddg¡ |  jt|ƒ7  _d S rN   rV   rX   r   r   r   rZ   ­   ó   zMyReadPipeProto.data_receivedc                 C   s   |   ddg¡ | j d¡ d S )Nr>   rO   r\   )rL   r@   ry   r6   r   r   r   r]   ±   s   zMyReadPipeProto.eof_receivedc                 C   sJ   d| j vr| j  d¡ |  g d¢¡ | j  d¡ | jr#| j d ¡ d S d S )Nr\   )r>   rO   r\   r^   )r@   ry   rL   rD   rQ   r3   r   r   r   r`   µ   s   
ÿzMyReadPipeProto.connection_lostr   )
r9   r:   r;   rD   rF   rL   rS   rZ   r]   r`   r   r   r   r   rx   š   s    
rx   c                   @   s2   e Zd ZdZd
dd„Zdd„ Zdd„ Zdd	„ ZdS )ÚMyWritePipeProtoNc                 C   s&   d| _ d | _|d ur| ¡ | _d S d S )Nr>   )r@   r?   rB   rD   rE   r   r   r   rF   Á   rk   zMyWritePipeProto.__init__c                 C   rl   rG   rH   rJ   r   r   r   rL   Ç   rM   zMyWritePipeProto._assert_statec                 C   rm   rN   ro   rR   r   r   r   rS   Ë   rp   z MyWritePipeProto.connection_madec                 C   rv   ©NrO   r^   r_   r3   r   r   r   r`   Ð   rw   z MyWritePipeProto.connection_lostr   )r9   r:   r;   rD   rF   rL   rS   r`   r   r   r   r   r{   ¾   s    
r{   c                   @   sD   e Z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 )ÚMySubprocessProtocolc                    sb   d| _ d | _ˆ  ¡ | _ˆ  ¡ | _‡ fdd„tdƒD ƒ| _dddœ| _d | _t	 
¡ t	 
¡ dœ| _d S )Nr>   c                    s   i | ]}|ˆ   ¡ “qS r   )rB   )Ú.0Úfd©r+   r   r   Ú
<dictcomp>Þ   ó    z1MySubprocessProtocol.__init__.<locals>.<dictcomp>é   ó    ©é   é   )r@   r?   rB   rC   Ú	completedÚrangeÚdisconnectsrY   Ú
returncoder   ÚEventÚgot_datarE   r   r€   r   rF   Ù   s   

ÿzMySubprocessProtocol.__init__c                 C   rl   rG   rH   rJ   r   r   r   rL   ä   rM   z"MySubprocessProtocol._assert_statec                 C   s&   || _ |  d¡ d| _| j d ¡ d S rN   rP   rR   r   r   r   rS   è   s   
z$MySubprocessProtocol.connection_madec                 C   s    |   d¡ d| _| j d ¡ d S r|   )rL   r@   rˆ   rQ   r3   r   r   r   r`   î   s   
z$MySubprocessProtocol.connection_lostc                 C   s.   |   d¡ | j|  |7  < | j|  ¡  d S rU   )rL   rY   r   Úset)r/   r   rY   r   r   r   Úpipe_data_receivedó   s   
z'MySubprocessProtocol.pipe_data_receivedc                 C   s6   |   d¡ |r| j|  |¡ d S | j|  |¡ d S rU   )rL   rŠ   Úset_exceptionrQ   )r/   r   r4   r   r   r   Úpipe_connection_lostø   s   
z)MySubprocessProtocol.pipe_connection_lostc                 C   s   |   d¡ | j ¡ | _d S rU   )rL   r?   Zget_returncoder‹   r6   r   r   r   Úprocess_exitedÿ   s   
z#MySubprocessProtocol.process_exitedN)
r9   r:   r;   rF   rL   rS   r`   r   r‘   r’   r   r   r   r   r}   ×   s    r}   c                       s   e Zd Z‡ fdd„Z‡ f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e eedƒd¡dd„ ƒZe eedƒd ¡e eed!ƒd"¡d#d$„ ƒƒZe eedƒd ¡e eed!ƒd"¡d%d&„ ƒƒZd¤d(d)„Zd*d+„ Zejd,d-„ ƒZd'd.i fd/d0„Z	'	.d¥d1d2„Z	.d¥d3d4„Ze e d.u d5¡d6d7„ ƒZ!eje e d.u d5¡d8d9„ ƒƒZ"d:d;„ Z#d<d=„ Z$d>d?„ Z%d@dA„ Z&d¦dBdC„Z'e e d.u d5¡dDdE„ ƒZ(dFdG„ Z)e* +dH¡dIdJ„ ƒZ,dKdL„ Z-dMdN„ Z.dOdP„ Z/e ee0dQƒdR¡dSdT„ ƒZ1dUdV„ Z2ejdWdX„ ƒZ3e ee0dYƒdZ¡d[d\„ ƒZ4d§d]d^„Z5d§d_d`„Z6d§dadb„Z7e e d.u d5¡dcdd„ ƒZ8eje e d.u d5¡dedf„ ƒƒZ9e e d.u d5¡dgdh„ ƒZ:eje e d.u d5¡didj„ ƒƒZ;e e d.u d5¡dkdl„ ƒZ<eje e d.u d5¡dmdn„ ƒƒZ=e e d.u d5¡dodp„ ƒZ>dqdr„ Z?dsdt„ Z@e ejAdu¡dvdw„ ƒZBdxdy„ ZCdzd{„ ZDd|d}„ ZEe ejAdu¡d~d„ ƒZFd€d„ ZGd‚dƒ„ ZHe eIjJd„kd…¡d†d‡„ ƒZKe eIjJd„kd…¡dˆd‰„ ƒZLe eIjJd„kd…¡e eeMdŠƒd‹¡dŒd„ ƒƒZNe eIjJd„kd…¡dŽd„ ƒZOe eIjJd„kd…¡dd‘„ ƒZPe eIjJd„kd…¡e eeMdŠƒd‹¡eQ Rd’d“¡d”d•„ ƒƒƒZSe eIjJd„kd…¡e eeMdŠƒd‹¡eQ Rd’d“¡d–d—„ ƒƒƒZTd˜d™„ ZUdšd›„ ZVdœd„ ZWdždŸ„ ZXd d¡„ ZYd¢d£„ ZZ‡  Z[S )¨ÚEventLoopTestsMixinc                    s$   t ƒ  ¡  |  ¡ | _|  | j¡ d S r   )rb   ÚsetUpÚcreate_event_loopr+   r)   r6   rd   r   r   r”     s   

zEventLoopTestsMixin.setUpc                    s4   | j  ¡ st | j ¡ |  ¡  t ¡  tƒ  ¡  d S r   )	r+   Ú	is_closedÚ
test_utilsÚrun_brieflyZ
doCleanupsr
   Ú
gc_collectrb   ÚtearDownr6   rd   r   r   rš     s
   
zEventLoopTestsMixin.tearDownc                    s\   dd„ ‰ ‡ ‡fdd„}ˆ  td¡ ˆ tˆjj|ƒ ¡ W d   ƒ d S 1 s'w   Y  d S )Nc                   Ó   s   t  d¡I d H  d S ©Nr   )r   Úsleepr   r   r   r   Úcoro1  s   €zBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro1c                   “   s$   ˆ  ˆj ¡ ¡ ˆj ˆ ƒ ¡ d S r   )Ú
assertTruer+   Ú
is_runningr*   r   ©r   r/   r   r   Úcoro2  s   €zBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro2zcoroutine \S+ was never awaited)ZassertWarnsRegexÚRuntimeWarningÚassertRaisesÚRuntimeErrorr+   r*   )r/   r¡   r   r    r   Útest_run_until_complete_nesting  s   þÿ"üz3EventLoopTestsMixin.test_run_until_complete_nestingc                 C   sR   | j  ¡ }| j  t d¡¡ | j  ¡ }|  d||   ko dkn  || ¡ d S )Nçš™™™™™¹?g{®Gáz´?gš™™™™™é?)r+   Útimer*   r   rœ   rž   )r/   Út0Út1r   r   r   Útest_run_until_complete&  s   

,z+EventLoopTestsMixin.test_run_until_completec                    s(   ‡ fdd„}|ƒ }ˆ   tˆ jj|¡ d S )Nc                   “   s    ˆ j  ¡  t d¡I d H  d S )Nr¦   )r+   Ústopr   rœ   r   r6   r   r   Úcb.  s   €
z?EventLoopTestsMixin.test_run_until_complete_stopped.<locals>.cb)r£   r¤   r+   r*   )r/   r¬   Ztaskr   r6   r   Útest_run_until_complete_stopped,  s
   ÿz3EventLoopTestsMixin.test_run_until_complete_stoppedc                    s>   g ‰ ‡ ‡fdd„}ˆj  d|d¡ ˆj  ¡  ˆ ˆ dg¡ d S )Nc                    s   ˆ   | ¡ ˆj ¡  d S r   ©ry   r+   r«   ©Úarg©Úresultsr/   r   r   Úcallback8  ó   
z5EventLoopTestsMixin.test_call_later.<locals>.callbackr¦   zhello world)r+   Ú
call_laterÚrun_foreverÚassertEqual©r/   r³   r   r±   r   Útest_call_later5  ó
   
z#EventLoopTestsMixin.test_call_laterc                    s>   g ‰ ‡ ‡fdd„}ˆj  |dd¡ ˆj  ¡  ˆ ˆ dg¡ d S )Nc                    s   ˆ   | |f¡ ˆj ¡  d S r   r®   )Zarg1Zarg2r±   r   r   r³   C  s   z4EventLoopTestsMixin.test_call_soon.<locals>.callbackr%   Úworld)r%   r»   )r+   Ú	call_soonr¶   r·   r¸   r   r±   r   Útest_call_soon@  rº   z"EventLoopTestsMixin.test_call_soonc                    sž   g ‰t  ¡ ‰‡‡fdd„‰ ‡ ‡‡fdd„}ˆ ¡  t j|d}| ¡  ˆ ˆj ˆ d¡ ˆj ¡  W d   ƒ n1 s<w   Y  | ¡  ˆ 	ˆddg¡ d S )Nc                    ó(   ˆ   | ¡ tˆ ƒdkrˆj ¡  d S d S ©Nr‡   ©ry   rW   r+   r«   r¯   r±   r   r   r³   O  ó   
ÿz?EventLoopTestsMixin.test_call_soon_threadsafe.<locals>.callbackc                      s   ˆj  ˆ d¡ ˆ ¡  d S r$   )r+   Úcall_soon_threadsafeÚreleaser   )r³   Úlockr/   r   r   Úrun_in_threadT  s   zDEventLoopTestsMixin.test_call_soon_threadsafe.<locals>.run_in_thread©Útargetr»   r%   )
Ú	threadingÚLockÚacquireÚThreadÚstartr+   r¼   r¶   Újoinr·   )r/   rÅ   Útr   )r³   rÄ   r²   r/   r   Útest_call_soon_threadsafeK  s   þz-EventLoopTestsMixin.test_call_soon_threadsafec                    sL   g ‰ ‡ ‡fdd„}ˆj  |d¡ ˆj  |d¡ ˆj  ¡  ˆ ˆ ddg¡ d S )Nc                    r¾   r¿   rÀ   r¯   r±   r   r   r³   e  rÁ   zKEventLoopTestsMixin.test_call_soon_threadsafe_same_thread.<locals>.callbackr%   r»   )r+   rÂ   r¼   r¶   r·   r¸   r   r±   r   Ú%test_call_soon_threadsafe_same_threadb  s   
z9EventLoopTestsMixin.test_call_soon_threadsafe_same_threadc                 C   sH   dd„ }| j  d |d¡}| j  |¡\}}|  |d¡ |  |t ¡ ¡ d S )Nc                 S   s   | t  ¡ fS r   )rÈ   Ú	get_identr¯   r   r   r   Úrunp  s   z5EventLoopTestsMixin.test_run_in_executor.<locals>.runZyo)r+   Úrun_in_executorr*   r·   ZassertNotEqualrÈ   rÑ   )r/   rÒ   Úf2ÚresZ	thread_idr   r   r   Útest_run_in_executoro  s
   z(EventLoopTestsMixin.test_run_in_executorc                    sr   d‰ ‡ fdd„}dd„ }| j  d |¡}| ¡  | j  | j  ¡ ¡ | j  ¡  || j _|| j _t 	d¡ |  
ˆ ¡ d S )NFc                     s   d‰ d S ©NTr   ©Úargs©Zcalledr   r   Úpatched_call_soonz  s   zJEventLoopTestsMixin.test_run_in_executor_cancel.<locals>.patched_call_soonc                   S   s   t  d¡ d S )Ngš™™™™™©?)r§   rœ   r   r   r   r   rÒ   ~  r   z<EventLoopTestsMixin.test_run_in_executor_cancel.<locals>.rungš™™™™™Ù?)r+   rÓ   Úcancelr*   Zshutdown_default_executorr7   r¼   rÂ   r§   rœ   ÚassertFalse)r/   rÛ   rÒ   rÔ   r   rÚ   r   Útest_run_in_executor_cancelw  s   ÿ

z/EventLoopTestsMixin.test_run_in_executor_cancelc                    sÂ   t  ¡ \‰}ˆ d¡ tƒ ‰ ‡ ‡‡fdd„}ˆj ˆ ¡ |¡ ˆj |jd¡ t	 
ˆj‡ fdd„¡ ˆj |jd¡ t	 
ˆj‡ fdd„¡ ˆj |j¡ ˆj ˆjj¡ ˆj ¡  ˆ ˆ d	¡ d S )
NFc                     sX   zˆ  d¡} W n
 ty   Y d S w | rˆ  | ¡ d S ˆ ˆj ˆ ¡ ¡¡ ˆ ¡  d S ©Né   )ÚrecvÚBlockingIOErrorÚextendrž   r+   Úremove_readerÚfilenor7   ©rY   ©Ú
bytes_readÚrr/   r   r   Úreader  s   ýz8EventLoopTestsMixin.test_reader_callback.<locals>.readers   abcc                      ó   t ˆ ƒdkS )Nrƒ   ©rW   r   ©rè   r   r   Ú<lambda>Ÿ  ó    z:EventLoopTestsMixin.test_reader_callback.<locals>.<lambda>s   defc                      rë   )Né   rì   r   rí   r   r   rî   ¡  rï   s   abcdef)ÚsocketÚ
socketpairÚsetblockingÚ	bytearrayr+   Ú
add_readerrå   r¼   r1   r—   Ú	run_untilr7   r«   r¶   r·   )r/   Úwrê   r   rç   r   Útest_reader_callback‹  s   

z(EventLoopTestsMixin.test_reader_callbackc                    s¤   t  ¡ \}‰ˆ d¡ ‡ ‡fdd„}d}ˆ j ˆ ¡ ||¡ ˆ j ¡  ˆ  ˆ j ˆ ¡ ¡¡ ˆ  	ˆ j ˆ ¡ ¡¡ ˆ 
¡  | t|ƒd ¡}| 
¡  ˆ  ||¡ d S )NFc                    s   ˆ  | ¡ ˆ j ¡  d S r   )r1   r+   r«   ræ   ©r/   r÷   r   r   Úwriter«  r´   z8EventLoopTestsMixin.test_writer_callback.<locals>.writers   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr‡   )rñ   rò   ró   r+   Ú
add_writerrå   r¶   rž   Úremove_writerrÝ   r7   rá   rW   r·   )r/   ré   rú   rY   Úreadr   rù   r   Útest_writer_callback§  s   

z(EventLoopTestsMixin.test_writer_callbackÚSIGKILLz
No SIGKILLc                    sX  d‰ ‡ fdd„}|   t| jjd|¡ |   t| jjd¡ |   t| jjtjd |¡ |   t| jjtjd ¡ |   t| jjd|¡ |   t| jjd¡ |   t| jjd|¡ |   t| jjd¡ |   t| jjtj	|¡ |  
| j tj	¡¡ | j tj|¡ t t ¡ tj¡ t | j‡ fdd„¡ |  | j tj¡¡ |  t tj¡tj¡ |  
| j tj¡¡ d S )	Nr   c                      s   ˆ d7 ‰ d S ©Nr†   r   r   ©Úcaughtr   r   Ú
my_handler¿  s   z?EventLoopTestsMixin.test_add_signal_handler.<locals>.my_handlerZboomr†   éÿÿÿÿc                      ó   ˆ S r   r   r   r  r   r   rî   Þ  ó    z=EventLoopTestsMixin.test_add_signal_handler.<locals>.<lambda>)r£   Ú	TypeErrorr+   Úadd_signal_handlerÚremove_signal_handlerÚ
ValueErrorÚsignalÚNSIGr¤   rÿ   rÝ   ÚSIGINTÚosÚkillÚgetpidr—   rö   rž   r·   Ú	getsignalÚdefault_int_handler©r/   r  r   r  r   Útest_add_signal_handler»  sP   ÿ
ÿþÿÿ
ÿÿ
ÿþÿz+EventLoopTestsMixin.test_add_signal_handlerÚSIGALRMz
No SIGALRMÚ	setitimerzneed signal.setitimer()c                    s^   d‰ ‡ ‡fdd„}ˆj  tj|¡ t tjdd¡ ˆj  dˆj j¡ ˆj  ¡  ˆ 	ˆ d¡ d S )Nr   c                      s   ˆ d7 ‰ ˆj  ¡  d S r   )r+   r«   r   ©r  r/   r   r   r  î  s   zLEventLoopTestsMixin.test_signal_handling_while_selecting.<locals>.my_handlerç{®Gáz„?é<   r†   ©
r+   r  r  r  r  ÚITIMER_REALrµ   r«   r¶   r·   r  r   r  r   Ú$test_signal_handling_while_selectingç  s   
z8EventLoopTestsMixin.test_signal_handling_while_selectingc                    sl   d‰d‰ ‡ ‡‡fdd„}ˆj jtj|gˆ¢R Ž  t tjdd¡ ˆj  dˆj j¡ ˆj  ¡  ˆ 	ˆ d¡ d S )N)é*   r   c                     s"   ˆ d7 ‰ ˆ  | ˆ¡ ˆj ¡  d S r   )r·   r+   r«   rØ   ©r  r/   Z	some_argsr   r   r    s   zAEventLoopTestsMixin.test_signal_handling_args.<locals>.my_handlerr¦   r  r†   r  r  r   r  r   Útest_signal_handling_argsú  s   
z-EventLoopTestsMixin.test_signal_handling_argsTc                 C   sv   | j  |¡\}}|  |tj¡ |  |tj¡ |  |j|¡ |r'|  | 	d¡¡ | j  |j
¡ |  |jd¡ | ¡  d S )NÚsocknamer   )r+   r*   ÚassertIsInstancer   Ú	TransportÚProtocolÚassertIsr?   ÚassertIsNotNoneÚget_extra_inforD   ÚassertGreaterrA   r7   )r/   Úconnection_futÚcheck_socknameÚtrÚprr   r   r   Ú_basetest_create_connection  s   z/EventLoopTestsMixin._basetest_create_connectionc                    sV   t  ¡ }ˆ jj‡ fdd„g|j¢R Ž }ˆ  |¡ W d   ƒ d S 1 s$w   Y  d S )Nc                      ó   t ˆ jdS ©Nr€   ©ra   r+   r   r6   r   r   rî     rï   z<EventLoopTestsMixin.test_create_connection.<locals>.<lambda>)r—   Úrun_test_serverr+   Úcreate_connectionÚaddressr,  )r/   ÚhttpdÚconn_futr   r6   r   Útest_create_connection  s   

ÿÿ"ýz*EventLoopTestsMixin.test_create_connectionc                    sZ   t ƒ  }t ¡ }ˆ j ‡ fdd„|j¡}ˆ  ||¡ W d   ƒ d S 1 s&w   Y  d S )Nc                      r-  r.  r/  r   r6   r   r   rî   '  rï   zAEventLoopTestsMixin.test_create_unix_connection.<locals>.<lambda>)r#   r—   Úrun_test_unix_serverr+   Úcreate_unix_connectionr2  r,  )r/   r)  r3  r4  r   r6   r   Útest_create_unix_connection  s   
ÿ"ýz/EventLoopTestsMixin.test_create_unix_connectionNc                 C   s  |r
|   | d¡¡ |r|  || d¡¡ n|   | d¡¡ |  || d¡¡ | d¡}|  |t¡ |  t|ƒd|¡ |  |d t¡ |  |d t¡ |  |d t¡ | d	¡}|   |¡ |  | ¡ | d
¡¡ |  | 	¡ | d¡¡ |  | 
¡ | d¡¡ |  | ¡ | d
¡¡ d S )Nr   ÚpeernameÚpeercertÚcipherrƒ   r   r†   r‡   Z
ssl_objectÚcompression)r%  r&  r·   r!  r   rW   Ústrr    r<  r;  Zgetpeercert)r/   Úclientr)  r9  r:  r;  Zsslobjr   r   r   Úcheck_ssl_extra_info*  s<   ÿÿ



ÿ
ÿ
ÿ
ÿz(EventLoopTestsMixin.check_ssl_extra_infoc                 C   sx   | j  |¡\}}|  |tj¡ |  |tj¡ |  d|jj 	¡ v ¡ |  
|||¡ | j  |j¡ |  |jd¡ | ¡  d S )NÚsslr   )r+   r*   r!  r   r"  r#  rž   re   r9   Úlowerr?  rD   r'  rA   r7   )r/   r(  r)  r9  r*  r+  r   r   r   Ú_basetest_create_ssl_connectionJ  s   z3EventLoopTestsMixin._basetest_create_ssl_connectionc           	   	      s  |t  ¡ d}ˆ  |||¡ ttdƒrLtjjfd d d dœ‡ fdd„}tjd|d}|dd}ˆ  |||¡ ˆ  	|j
d	¡ W d   ƒ n1 sGw   Y  ˆ  tj¡(}|dd}t  ¡  ˆ  |||¡ W d   ƒ n1 snw   Y  W d   ƒ n1 s}w   Y  ˆ  	|jjd
¡ d S )N©r@  ÚPurpose)ÚcafileÚcapathÚcadatac                   s   	 ˆ   | tjj¡ t ¡ S r   )r·   r@  rD  ÚSERVER_AUTHr—   Údummy_ssl_context)ZpurposerE  rF  rG  r6   r   r   Ú_dummy_ssl_create_context^  s   zREventLoopTestsMixin._test_create_ssl_connection.<locals>._dummy_ssl_create_contextzssl.create_default_context)Úside_effectTr†   ZCERTIFICATE_VERIFY_FAILED)r—   rI  rB  Úhasattrr@  rD  rH  r   Úpatchr·   Z
call_countr£   ÚSSLErrorÚdisable_loggerÚ	exceptionÚreason)	r/   r3  r1  r)  r9  r4  rJ  ÚmÚcmr   r6   r   Ú_test_create_ssl_connectionV  s:   ÿ
þÿ
ÿû	

ÿÿ€ýz/EventLoopTestsMixin._test_create_ssl_connectionzNo ssl modulec                    sf   t jdd#}tjˆ jj‡ fdd„g|j¢R Ž }ˆ j|||jd W d   ƒ d S 1 s,w   Y  d S )NT©Zuse_sslc                      r-  r.  r/  r   r6   r   r   rî   €  rï   z@EventLoopTestsMixin.test_create_ssl_connection.<locals>.<lambda>©r9  )r—   r0  Ú	functoolsÚpartialr+   r1  r2  rT  )r/   r3  r1  r   r6   r   Útest_create_ssl_connection{  s   
þýÿ"ûz.EventLoopTestsMixin.test_create_ssl_connectionc                    sn   t ƒ  }tjdd#}tjˆ jj‡ fdd„|jdd}ˆ j||||jd W d   ƒ d S 1 s0w   Y  d S )NTrU  c                      r-  r.  r/  r   r6   r   r   rî     rï   zEEventLoopTestsMixin.test_create_ssl_unix_connection.<locals>.<lambda>ú	127.0.0.1)Úserver_hostnamerV  )	r#   r—   r6  rW  rX  r+   r7  r2  rT  )r/   r)  r3  r1  r   r6   r   Útest_create_ssl_unix_connection…  s   ýþ"úz3EventLoopTestsMixin.test_create_ssl_unix_connectionc                    s˜   t  ¡ >}t ¡ }ˆ jj‡ fdd„g|j¢R d|jd |fiŽ}ˆ j |¡\}}|j 	d¡d }ˆ  
||¡ | ¡  W d   ƒ d S 1 sEw   Y  d S )Nc                      r-  r.  r/  r   r6   r   r   rî   š  rï   zGEventLoopTestsMixin.test_create_connection_local_addr.<locals>.<lambda>Ú
local_addrr   r   r†   )r—   r0  r   Úfind_unused_portr+   r1  r2  r*   r?   r&  r·   r7   )r/   r3  ÚportÚfr*  r+  rK   r   r6   r   Ú!test_create_connection_local_addr–  s   

ÿþþ
"øz5EventLoopTestsMixin.test_create_connection_local_addrc                    óŠ   t  ¡ }t  ¡ ‰ˆjj‰ ‡ ‡fdd„}|ˆj_ˆjj‡fdd„d|dˆfd}ˆ t¡ ˆj |¡ W d   ƒ d S 1 s>w   Y  d S )Nc                 Ÿ   sL   |ˆkrt jt jdddft jt jdddfgS ˆ | |g|¢R i |¤ŽI d H S )Nr   Ú ©ú::1r   r   r   ©rZ  r   )rñ   ÚAF_INET6ÚSOCK_STREAMÚAF_INET©Úhostr_  rÙ   Úkwargs©Úgetaddrinfo_origÚport2r   r   Úgetaddrinfo§  s   €ÿz`EventLoopTestsMixin.test_create_connection_local_addr_skip_different_family.<locals>.getaddrinfoc                      r-  r.  r/  r   r6   r   r   rî   °  rï   z]EventLoopTestsMixin.test_create_connection_local_addr_skip_different_family.<locals>.<lambda>Ú	localhost©r]  ©r   r^  r+   rp  r1  r£   ÚOSErrorr*   ©r/   Zport1rp  r`  r   ©rn  ro  r/   r   Ú7test_create_connection_local_addr_skip_different_family¡  s   

þ"ÿzKEventLoopTestsMixin.test_create_connection_local_addr_skip_different_familyc                    rb  )Nc                 Ÿ   s<   |ˆkrt jt jdddfgS ˆ | |g|¢R i |¤ŽI d H S )Nr   rc  rd  )rñ   rg  rh  rj  rm  r   r   rp  ¼  s   €zYEventLoopTestsMixin.test_create_connection_local_addr_nomatch_family.<locals>.getaddrinfoc                      r-  r.  r/  r   r6   r   r   rî   Ä  rï   zVEventLoopTestsMixin.test_create_connection_local_addr_nomatch_family.<locals>.<lambda>rq  rr  rs  ru  r   rv  r   Ú0test_create_connection_local_addr_nomatch_family¶  s   

þ"ÿzDEventLoopTestsMixin.test_create_connection_local_addr_nomatch_familyc              	      s²   t  ¡ K}ˆ jj‡ fdd„g|j¢R d|jiŽ}ˆ  t¡}ˆ j |¡ W d   ƒ n1 s.w   Y  ˆ  |j	j
t
j¡ ˆ  t|jƒ|j	j¡ W d   ƒ d S 1 sRw   Y  d S )Nc                      r-  r.  r/  r   r6   r   r   rî   Í  rï   zNEventLoopTestsMixin.test_create_connection_local_addr_in_use.<locals>.<lambda>r]  )r—   r0  r+   r1  r2  r£   rt  r*   r·   rP  ÚerrnoÚ
EADDRINUSEÚassertInr=  Ústrerror)r/   r3  r`  rS  r   r6   r   Ú(test_create_connection_local_addr_in_useÊ  s   

ÿþþÿ"ùz<EventLoopTestsMixin.test_create_connection_local_addr_in_usec           	         s  | j ‰G ‡‡fdd„dtƒ}tjddd}| ¡ ‰ d‰d ‰d‰‡ ‡‡‡fdd	„}tj|d
d}| ¡  | ¡ \}}|ˆd‰ˆˆ_ ˆ 	ˆj
‡fdd„||d¡ ˆ ¡  ˆj ¡  | ¡  t |¡ |  | ¡ ¡ |  ˆjd¡ |  ˆjtˆƒ¡ |  ˆˆ¡ d S )Nc                       s,   e Zd Z‡ ‡fdd„Z‡ ‡fdd„Z‡  ZS )zAEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProtoc                    s   t ƒ  |¡ ˆ ˆj¡ d S r   )rb   r`   r¼   r«   r3   )re   r+   r   r   r`   Ù  ó   zQEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProto.connection_lostc                    s   t ƒ  |¡ | j ˆ¡ d S r   )rb   rZ   r?   rc   rX   )re   Úexpected_responser   r   rZ   Ý  r~  zOEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProto.data_received)r9   r:   r;   r`   rZ   rh   r   )r  r+   rd   r   ra   ×  s    ra   rf  r†   )Úbacklogs	   test datas   rogerc               
      sx   z#t   ¡ } ˆd urˆ | ¡} |  ˆ ¡ |  ˆ¡ |  d¡‰|  ¡  W d S  ty; } ztd|ƒ W Y d }~d S d }~ww )Néc   z8Failure in client thread in test_connect_accepted_socket)rñ   Zwrap_socketÚconnectÚsendallrá   r7   Ú	ExceptionÚprint)Úcsockr4   )rs   Ú
client_sslÚmessageÚresponser   r   r>  è  s   



þ€ÿz@EventLoopTestsMixin.test_connect_accepted_socket.<locals>.clientT)rÇ   Údaemonr€   c                      r  r   r   r   ©Úprotor   r   rî   ÿ  r  zBEventLoopTestsMixin.test_connect_accepted_socket.<locals>.<lambda>rC  r^   )r+   r<   rñ   Úcreate_serverÚgetsocknamerÈ   rË   rÌ   Úacceptr*   Úconnect_accepted_socketr¶   r?   r7   r   Újoin_threadrÝ   Úis_aliver·   r@   rA   rW   )	r/   Z
server_sslr‡  ra   Úlsockr>  ÚthreadÚconnÚ_r   )rs   r‡  r  r+   rˆ  rŒ  r‰  r   Útest_connect_accepted_socketÔ  s4   

ÿÿ

z0EventLoopTestsMixin.test_connect_accepted_socketc                 C   sL   t jdkrt jdk rt| jtjƒrt d¡‚t	 
¡ }t	 ¡ }|  ||¡ d S )Nr   )rƒ   r   z=SSL not supported with proactor event loops before Python 3.5)r   r   Úversion_infoÚ
isinstancer+   r   ZBaseProactorEventLoopÚunittestÚSkipTestr—   Zsimple_server_sslcontextZsimple_client_sslcontextr—  )r/   Zserver_contextZclient_contextr   r   r   Ú test_ssl_connect_accepted_socket
  s   

ÿÿz4EventLoopTestsMixin.test_ssl_connect_accepted_socketc                 C   sf   t   ¡ }|  |j¡ | jjt|tjd}|  t	d¡ | j 
|¡ W d   ƒ d S 1 s,w   Y  d S )N)Zssl_handshake_timeoutz1ssl_handshake_timeout is only meaningful with ssl)rñ   Ú
addCleanupr7   r+   r  ra   r
   ZLOOPBACK_TIMEOUTÚassertRaisesRegexr
  r*   )r/   ÚsockÚcoror   r   r   Ú9test_connect_accepted_socket_ssl_timeout_for_plain_socket  s   ÿþ"ýzMEventLoopTestsMixin.test_connect_accepted_socket_ssl_timeout_for_plain_socketzasyncio.base_events.socketc           	         sÊ   ‡ fdd„‰‡‡fdd„}t |ƒ}ˆ tjkr"dd„ |D ƒ| ¡ j_ndd„ |D ƒ| ¡ j_|ˆj_t ¡ ˆj_	t ¡ ˆj_
ˆj ‡fdd	„|d
¡}ˆj |¡}ˆ |j¡ dd„ |jD ƒ}ˆ ||¡ d S )Nc                 Ÿ   s<   ˆ t jkrˆ t jdd| |ffgS ˆ t jdd| |ddffgS )Nrð   rc  r   )rñ   ri  rh  )rk  r_  rÙ   Úkw)Úfamilyr   r   rp  %  s   €
zEEventLoopTestsMixin.create_server_multiple_hosts.<locals>.getaddrinfoc                     s   ˆj  ˆ | i |¤Ž¡S r   )r+   Úcreate_task)rÙ   Úkwds)rp  r/   r   r   Úgetaddrinfo_task+  s   zJEventLoopTestsMixin.create_server_multiple_hosts.<locals>.getaddrinfo_taskc                 S   s   g | ]}|d f‘qS )éP   r   ©r~   rk  r   r   r   Ú
<listcomp>1  s    ÿzDEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<listcomp>c                 S   s   g | ]}|d ddf‘qS )r§  r   r   r¨  r   r   r   r©  4  s    ÿc                      s
   t ˆ jƒS r   r/  r   r6   r   r   rî   9  ó   
 zBEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<lambda>r§  c                 S   s   h | ]}|  ¡ d  ’qS )r   )Úgetsockbyname)r~   rŸ  r   r   r   Ú	<setcomp><  s    zCEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<setcomp>)rŽ   rñ   ri  r«  rK  r+   rp  r   ÚMockZ_start_servingÚ_stop_servingr  r*   r  r7   Úsocketsr·   )	r/   r£  ÚhostsZ	mock_sockr¦  Zunique_hostsr`  ÚserverZserver_hostsr   )r£  rp  r/   r   Úcreate_server_multiple_hosts#  s$   
ÿÿz0EventLoopTestsMixin.create_server_multiple_hostsc                 C   ó   |   tjg d¢¡ d S )N)ú1.2.3.4z5.6.7.8r´  )r²  rñ   ri  r6   r   r   r   Ú&test_create_server_multiple_hosts_ipv4?  ó   ÿz:EventLoopTestsMixin.test_create_server_multiple_hosts_ipv4c                 C   r³  )N)re  z::2re  )r²  rñ   rg  r6   r   r   r   Ú&test_create_server_multiple_hosts_ipv6C  r¶  z:EventLoopTestsMixin.test_create_server_multiple_hosts_ipv6c                    s&  t | jƒ‰ | j ‡ fdd„dd¡}| j |¡}|  t|jƒd¡ |jd }| ¡ \}}|  |d¡ t ¡ }| 	d|f¡ | 
d¡ | j ˆ j¡ |  dˆ j¡ t | j‡ fd	d„¡ |  d
ˆ j¡ |  ˆ j d¡¡ |  dˆ j d¡d ¡ ˆ j ¡  | j ˆ j¡ |  dˆ j¡ | ¡  | ¡  d S )Nc                      r  r   r   r   r‹  r   r   rî   I  r  z8EventLoopTestsMixin.test_create_server.<locals>.<lambda>ú0.0.0.0r   r†   rZ  ó   xxxrO   c                      ó
   ˆ j dkS r›   ©rA   r   r‹  r   r   rî   V  rª  rƒ   r   r9  r^   )ra   r+   r  r*   r·   rW   r¯  rŽ  rñ   r‚  rƒ  rC   r@   r—   rö   rA   r%  r?   r&  r7   rD   ©r/   r`  r±  rŸ  rk  r_  r>  r   r‹  r   Útest_create_serverG  s.   


ÿ
z&EventLoopTestsMixin.test_create_serverÚSO_REUSEPORTzNo SO_REUSEPORTc                    sä   t | jƒ‰ | j ‡ fdd„dd¡}| j |¡}|  t|jƒd¡ |jd }|  | t	j
t	j¡¡ | ¡  t | j¡ t | jƒ‰ | jj‡ fdd„dddd}| j |¡}|  t|jƒd¡ |jd }|  | t	j
t	j¡¡ | ¡  d S )	Nc                      r  r   r   r   r‹  r   r   rî   o  r  zCEventLoopTestsMixin.test_create_server_reuse_port.<locals>.<lambda>r¸  r   r†   c                      r  r   r   r   r‹  r   r   rî   |  r  T)Ú
reuse_port)ra   r+   r  r*   r·   rW   r¯  rÝ   Ú
getsockoptrñ   Ú
SOL_SOCKETr¾  r7   r—   r˜   rž   )r/   r`  r±  rŸ  r   r‹  r   Útest_create_server_reuse_portk  s6   
ÿ
ÿÿ
ÿ
ÿÿz1EventLoopTestsMixin.test_create_server_reuse_portc                    sD   t  ¡ ‰ |  ‡ fdd„¡ | jj|ˆ fi |¤Ž}| j |¡}|ˆ fS )Nc                      s   t j ˆ ¡o
t  ˆ ¡S r   )r  ÚpathÚexistsÚunlinkr   ©rÃ  r   r   rî   ‡  r‚   z7EventLoopTestsMixin._make_unix_server.<locals>.<lambda>)r—   Zgen_unix_socket_pathr  r+   Úcreate_unix_serverr*   )r/   Úfactoryrl  r`  r±  r   rÆ  r   Ú_make_unix_server…  s
   z%EventLoopTestsMixin._make_unix_serverc                    sÎ   t | jd‰ |  ‡ fdd„¡\}}|  t|jƒd¡ t tj¡}| |¡ | 	d¡ | j 
ˆ j¡ |  dˆ j¡ t | j‡ fdd„¡ |  dˆ j¡ ˆ j ¡  | j 
ˆ j¡ |  d	ˆ j¡ | ¡  | ¡  d S )
Nr€   c                      r  r   r   r   r‹  r   r   rî   ‘  r  z=EventLoopTestsMixin.test_create_unix_server.<locals>.<lambda>r†   r¹  rO   c                      rº  r›   r»  r   r‹  r   r   rî   š  rª  rƒ   r^   )ra   r+   rÉ  r·   rW   r¯  rñ   ÚAF_UNIXr‚  rƒ  r*   rC   r@   r—   rö   rA   r?   r7   rD   )r/   r±  rÃ  r>  r   r‹  r   Útest_create_unix_serverŽ  s   


z+EventLoopTestsMixin.test_create_unix_serverrÊ  zNo UNIX Socketsc              	      s    t | jd‰ t ¡ }|: | jj‡ fdd„d|d}|  td¡ | j |¡ W d   ƒ n1 s1w   Y  W d   ƒ d S W d   ƒ d S 1 sIw   Y  d S )Nr€   c                      r  r   r   r   r‹  r   r   rî   ¯  r  zOEventLoopTestsMixin.test_create_unix_server_path_socket_error.<locals>.<lambda>z/test©rŸ  z3path and sock can not be specified at the same time)ra   r+   rñ   rÇ  rž  r
  r*   )r/   rŸ  r`  r   r‹  r   Ú)test_create_unix_server_path_socket_errorª  s   ÿýþ"þz=EventLoopTestsMixin.test_create_unix_server_path_socket_errorc                 C   s,   t  t j¡}| jt jO  _| ||¡ |S r   )r@  Ú
SSLContextZPROTOCOL_TLS_SERVERÚoptionsÚOP_NO_SSLv2Zload_cert_chain)r/   ÚcertfileÚkeyfileÚ
sslcontextr   r   r   Ú_create_ssl_contextµ  s   z'EventLoopTestsMixin._create_ssl_contextc           
      C   sX   |   ||¡}| jj|dd|d}| j |¡}|jd }| ¡ \}}	|  |d¡ |||	fS )NrZ  r   rC  )rÔ  r+   r  r*   r¯  rŽ  r·   )
r/   rÈ  rÑ  rÒ  rÓ  r`  r±  rŸ  rk  r_  r   r   r   Ú_make_ssl_server»  s   

z$EventLoopTestsMixin._make_ssl_serverc                 C   s   |   ||¡}| j||dS )NrC  )rÔ  rÉ  )r/   rÈ  rÑ  rÒ  rÓ  r   r   r   Ú_make_ssl_unix_serverÆ  rf   z)EventLoopTestsMixin._make_ssl_unix_serverc                    sê   t | jd‰ |  ‡ fdd„tjtj¡\}}}| jjt||t ¡ d}| j 	|¡\}}| 
d¡ | j 	ˆ j¡ |  dˆ j¡ t | j‡ fdd„¡ |  dˆ j¡ | j|||fd	 ˆ j ¡  | j 	ˆ j¡ |  d
ˆ j¡ | ¡  | ¡  d S )Nr€   c                      r  r   r   r   r‹  r   r   rî   Î  r  z<EventLoopTestsMixin.test_create_server_ssl.<locals>.<lambda>rC  r¹  rO   c                      rº  r›   r»  r   r‹  r   r   rî   Ø  rª  rƒ   rV  r^   )ra   r+   rÕ  r—   ÚONLYCERTÚONLYKEYr1  r<   rI  r*   rc   rC   r·   r@   rö   rA   r?  r?   r7   rD   )r/   r±  rk  r_  Úf_cr>  r+  r   r‹  r   Útest_create_server_sslÊ  s&   
ÿÿ

z*EventLoopTestsMixin.test_create_server_sslc                    sÖ   t | jd‰ |  ‡ fdd„tjtj¡\}}| jjt|t ¡ dd}| j 	|¡\}}| 
d¡ | j 	ˆ j¡ |  dˆ j¡ t | j‡ fdd„¡ |  d	ˆ j¡ ˆ j ¡  | j 	ˆ j¡ |  d
ˆ j¡ | ¡  | ¡  d S )Nr€   c                      r  r   r   r   r‹  r   r   rî   ï  r  zAEventLoopTestsMixin.test_create_unix_server_ssl.<locals>.<lambda>rc  ©r@  r[  r¹  rO   c                      rº  r›   r»  r   r‹  r   r   rî   ú  rª  rƒ   r^   )ra   r+   rÖ  r—   r×  rØ  r7  r<   rI  r*   rc   rC   r·   r@   rö   rA   r?   r7   rD   )r/   r±  rÃ  rÙ  r>  r+  r   r‹  r   Útest_create_unix_server_sslê  s&   ÿ
þ

z/EventLoopTestsMixin.test_create_unix_server_sslc              
      s&  t | jd‰ |  ‡ fdd„tj¡\}}}t tj¡}| jtj	O  _tj
|_t|dƒr.d|_| jjt |||d}tj | jd¡? t ¡ % |  tjd¡ | j |¡ W d   ƒ n1 s^w   Y  W d   ƒ n1 smw   Y  t | j¡ W d   ƒ n1 s‚w   Y  |  ˆ j¡ | ¡  d S )	Nr€   c                      r  r   r   r   r‹  r   r   rî     r  zJEventLoopTestsMixin.test_create_server_ssl_verify_failed.<locals>.<lambda>Úcheck_hostnameTrC  Úcall_exception_handlerú(?i)certificate.verify.failed)ra   r+   rÕ  r—   ÚSIGNED_CERTFILEr@  rÎ  ÚPROTOCOL_TLS_CLIENTrÏ  rÐ  ÚCERT_REQUIREDÚverify_moderL  rÝ  r1  r   rM  ÚobjectrO  rž  rN  r*   r˜   ÚassertIsNoner?   r7   ©r/   r±  rk  r_  Ússlcontext_clientrÙ  r   r‹  r   Ú$test_create_server_ssl_verify_failed	  s2   
ÿ
ÿ
ÿþ€ÿù
z8EventLoopTestsMixin.test_create_server_ssl_verify_failedc              
      s$  t | jd‰ |  ‡ fdd„tj¡\}}t tj¡}| jtj	O  _tj
|_t|dƒr-d|_| jjt ||dd}tj | jd¡? t ¡ % |  tjd	¡ | j |¡ W d   ƒ n1 s]w   Y  W d   ƒ n1 slw   Y  t | j¡ W d   ƒ n1 sw   Y  |  ˆ j¡ | ¡  d S )
Nr€   c                      r  r   r   r   r‹  r   r   rî   +  r  zOEventLoopTestsMixin.test_create_unix_server_ssl_verify_failed.<locals>.<lambda>rÝ  TÚinvalidrÛ  rÞ  rß  )ra   r+   rÖ  r—   rà  r@  rÎ  rá  rÏ  rÐ  râ  rã  rL  rÝ  r7  r   rM  rä  rO  rž  rN  r*   r˜   rå  r?   r7   )r/   r±  rÃ  rç  rÙ  r   r‹  r   Ú)test_create_unix_server_ssl_verify_failed&  s4   ÿ

þ
ÿþ€ÿù
z=EventLoopTestsMixin.test_create_unix_server_ssl_verify_failedc              
      s(  t | jd‰ |  ‡ fdd„tj¡\}}}t tj¡}| jtj	O  _tj
|_|jtjd t|dƒr5d|_| jjt |||d}tj | jd¡9 t ¡ % |  tjd	¡ | j |¡ W d   ƒ n1 sew   Y  W d   ƒ n1 stw   Y  W d   ƒ n1 sƒw   Y  |  ˆ j¡ | ¡  d S )
Nr€   c                      r  r   r   r   r‹  r   r   rî   H  r  zIEventLoopTestsMixin.test_create_server_ssl_match_failed.<locals>.<lambda>©rE  rÝ  TrC  rÞ  z=IP address mismatch, certificate is not valid for '127.0.0.1')ra   r+   rÕ  r—   rà  r@  rÎ  rá  rÏ  rÐ  râ  rã  Úload_verify_locationsÚ
SIGNING_CArL  rÝ  r1  r   rM  rä  rO  rž  ZCertificateErrorr*   rå  r?   r7   ræ  r   r‹  r   Ú#test_create_server_ssl_match_failedD  s:   
ÿÿ
ÿ
þü€ÿ€ÿ
z7EventLoopTestsMixin.test_create_server_ssl_match_failedc                    sÆ   t | jd‰ |  ‡ fdd„tj¡\}}t tj¡}| jtj	O  _tj
|_|jtjd t|dƒr4d|_| jjt ||dd}| j |¡\}}| j ˆ j¡ ˆ j ¡  | ¡  | ¡  | j ˆ j¡ d S )	Nr€   c                      r  r   r   r   r‹  r   r   rî   g  r  zJEventLoopTestsMixin.test_create_unix_server_ssl_verified.<locals>.<lambda>rë  rÝ  Trq  rÛ  )ra   r+   rÖ  r—   rà  r@  rÎ  rá  rÏ  rÐ  râ  rã  rì  rí  rL  rÝ  r7  r*   rC   r?   r7   rD   )r/   r±  rÃ  rç  rÙ  r>  r+  r   r‹  r   Ú$test_create_unix_server_ssl_verifiedb  s(   ÿ

þ
z8EventLoopTestsMixin.test_create_unix_server_ssl_verifiedc                    sà   t | jd‰ |  ‡ fdd„tj¡\}}}t tj¡}| jtj	O  _tj
|_|jtjd t|dƒr5d|_| jjt |||dd}| j |¡\}}| j ˆ j¡ | j|||ftjd	 ˆ j ¡  | ¡  | ¡  | j ˆ j¡ d S )
Nr€   c                      r  r   r   r   r‹  r   r   rî     r  zEEventLoopTestsMixin.test_create_server_ssl_verified.<locals>.<lambda>rë  rÝ  Trq  rÛ  )r9  r:  )ra   r+   rÕ  r—   rà  r@  rÎ  rá  rÏ  rÐ  râ  rã  rì  rí  rL  rÝ  r1  r*   rC   r?  ZPEERCERTr?   r7   rD   )r/   r±  rk  r_  rç  rÙ  r>  r+  r   r‹  r   Útest_create_server_ssl_verified}  s.   
ÿ
þÿ
z3EventLoopTestsMixin.test_create_server_ssl_verifiedc           	         s®   | j  ¡ ‰ G ‡ fdd„dtƒ}t d¡}| j j||d}| j  |¡}|jd }|  | ¡ | ¡ ¡ | 	¡ \}}|  |d¡ t ¡ }| 
d|f¡ | d¡ | ¡  | ¡  d S )	Nc                       ó   e Zd Z‡ ‡fdd„Z‡  ZS )z@EventLoopTestsMixin.test_create_server_sock.<locals>.TestMyProtoc                    ó   t ƒ  |¡ ˆ | ¡ d S r   ©rb   rS   rQ   rR   )re   rŒ  r   r   rS   Ÿ  rf   zPEventLoopTestsMixin.test_create_server_sock.<locals>.TestMyProto.connection_maderg   r   r‹  rd   r   ÚTestMyProtož  ó    rô  ©r¸  r   rÌ  r   r¸  rZ  r¹  )r+   rB   ra   rñ   r  r*   r¯  r·   rå   rŽ  r‚  r1   r7   )	r/   rô  Úsock_obr`  r±  rŸ  rk  r_  r>  r   r‹  r   Útest_create_server_sock›  s   



z+EventLoopTestsMixin.test_create_server_sockc                 C   s¢   t  d¡}| jjt|d}| j |¡}|jd }| ¡ \}}| jjt||d}|  t¡}| j |¡ W d   ƒ n1 s=w   Y  |  	|j
jtj¡ | ¡  d S )Nrö  rÌ  r   ©rk  r_  )rñ   r  r+   ra   r*   r¯  rŽ  r£   rt  r·   rP  ry  rz  r7   )r/   r÷  r`  r±  rŸ  rk  r_  rS  r   r   r   Útest_create_server_addr_in_use²  s   

ÿz2EventLoopTestsMixin.test_create_server_addr_in_usezIPv6 not supported or enabledc           	   
      s.  | j  ¡ ‰ G ‡ fdd„dtƒ}d}	 zt ¡ }| j j|d |d}| j  |¡}W n# tyJ } z|jtj	krE|d7 }|  
d|¡ W Y d }~q‚ d }~ww 	 t ¡ }| d|f¡ | d	¡ | j  ˆ ¡}|j ¡  | ¡  | j  ¡ ‰ t tj¡}| d
|f¡ | d	¡ | j  ˆ ¡}|j ¡  | ¡  | ¡  d S )Nc                       rñ  )zFEventLoopTestsMixin.test_create_server_dual_stack.<locals>.TestMyProtoc                    rò  r   ró  rR   )re   Úf_protor   r   rS   Æ  rf   zVEventLoopTestsMixin.test_create_server_dual_stack.<locals>.TestMyProto.connection_maderg   r   ©rû  rd   r   rô  Å  rõ  rô  r   Trù  r†   r   rZ  r¹  re  )r+   rB   ra   r   r^  r  r*   rt  ry  rz  ZassertGreaterEqualrñ   r‚  r1   r?   r7   rg  )	r/   rô  Z	try_countr_  r`  r±  Úexr>  rŒ  r   rü  r   Útest_create_server_dual_stackÁ  s>   
€ú




z1EventLoopTestsMixin.test_create_server_dual_stackc                 C   sŠ   | j  tdd¡}| j  |¡}|jd }| ¡ \}}t ¡ }| d|f¡ | d¡ | 	¡  | 	¡  t ¡ }|  
t|jd|f¡ | 	¡  d S )Nr¸  r   rZ  r¹  )r+   r  ra   r*   r¯  rŽ  rñ   r‚  r1   r7   r£   ÚConnectionRefusedErrorr¼  r   r   r   Útest_server_closeê  s   

ÿz%EventLoopTestsMixin.test_server_closec           
         s„  G ‡fdd„dt ƒ}ˆjj|||d}ˆj |¡\}‰| d¡}t |tjtjB ¡\}}ˆ 	|t
j¡ ˆ 	ˆ|¡ ˆ dˆj¡ ˆ ˆj|¡ ˆjj‡fdd„||fd}ˆj |¡\}	‰ ˆ 	|	t
j¡ ˆ 	ˆ t ¡ ˆ dˆ j¡ ˆ ˆ j|	¡ |	 d	¡ t ˆj‡fd
d„¡ ˆ dˆj¡ t ˆj‡ fdd„¡ ˆ dˆ j¡ ˆ |	 d¡¡ |	 ¡  ˆj ˆ j¡ ˆ dˆ j¡ ˆj ¡  d S )Nc                       s*   e Zd Z‡ ‡fdd„Z‡ fdd„Z‡  ZS )zOEventLoopTestsMixin._test_create_datagram_endpoint.<locals>.TestMyDatagramProtoc                    s   t ƒ jˆjd d S r.  )rb   rF   r+   )Z
inner_self)re   r/   r   r   rF   þ  s   zXEventLoopTestsMixin._test_create_datagram_endpoint.<locals>.TestMyDatagramProto.__init__c                    s$   t ƒ  ||¡ | j d| |¡ d S )Ns   resp:)rb   rt   r?   Úsendtorr   rd   r   r   rt     rz   zaEventLoopTestsMixin._test_create_datagram_endpoint.<locals>.TestMyDatagramProto.datagram_received)r9   r:   r;   rF   rt   rh   r   r6   rd   r   ÚTestMyDatagramProtoý  s    r  )r]  r£  r   rn   c                      r-  r.  ©rj   r+   r   r6   r   r   rî     rï   zDEventLoopTestsMixin._test_create_datagram_endpoint.<locals>.<lambda>)Zremote_addrr¹  c                      ó   ˆ j S r   r»  r   )r±  r   r   rî     ó    rƒ   c                      r  r   r»  r   )r>  r   r   rî     r  é   r^   )rj   r+   Úcreate_datagram_endpointr*   r&  rñ   ÚgetnameinfoÚNI_NUMERICHOSTÚNI_NUMERICSERVr!  r   r"  r·   r@   r$  r?   r  r—   rö   rA   r%  r7   rD   )
r/   r]  r£  r  r   Zs_transportr   rk  r_  r?   r   )r>  r/   r±  r   Ú_test_create_datagram_endpointü  s@   ÿ
ÿ
þ
z2EventLoopTestsMixin._test_create_datagram_endpointc                 C   ó   |   dtj¡ d S )Nrf  )r  rñ   ri  r6   r   r   r   Útest_create_datagram_endpoint,  s   z1EventLoopTestsMixin.test_create_datagram_endpointc                 C   r  )N)re  r   )r  rñ   rg  r6   r   r   r   Ú"test_create_datagram_endpoint_ipv6/  s   z6EventLoopTestsMixin.test_create_datagram_endpoint_ipv6c                    sÔ   d }d}ˆ j  ˆ j j|dtjiŽ¡}|D ]"\}}}}}ztj|||d}| d¡ | |¡ W n   Y q nˆ  d¡ ˆ j j‡ fdd„|d}	ˆ j  |	¡\}
}ˆ  	|
t
j¡ ˆ  	|t¡ |
 ¡  ˆ j  |j¡ d S )	Nrf  Útype)r£  r  rŒ  FzCan not create socket.c                      r-  r.  r  r   r6   r   r   rî   F  rï   zHEventLoopTestsMixin.test_create_datagram_endpoint_sock.<locals>.<lambda>rÌ  )r+   r*   rp  rñ   Ú
SOCK_DGRAMró   ÚbindZfailr  r!  r   r"  rj   r7   rD   )r/   rŸ  Zlocal_addressZinfosr£  r  rŒ  Zcnamer2  r`  r*  r+  r   r6   r   Ú"test_create_datagram_endpoint_sock3  s4   ÿÿÿ

ÿz6EventLoopTestsMixin.test_create_datagram_endpoint_sockc                 C   sf   |   ¡ }t|tjƒs| ¡  |  d¡ |  d|j¡ | ¡  |  d|j¡ |  |j	¡ |  |j
¡ d S )Nz#loop is not a BaseSelectorEventLoopr†   r   )r•   r™  r   ZBaseSelectorEventLoopr7   ZskipTestr·   Z_internal_fdsrå  Z_csockZ_ssockrE   r   r   r   Útest_internal_fdsM  s   
z%EventLoopTestsMixin.test_internal_fdsr   zDon't support pipes for Windowsc                    sö   t ˆjd‰t ¡ \}}t |dd¡‰ ‡ ‡‡fdd„}ˆj |ƒ ¡ t |d¡ t 	ˆj‡fdd„¡ ˆ 
d	ˆj¡ t |d
¡ t 	ˆj‡fdd„¡ ˆ 
ddgˆj¡ ˆ 
dˆj¡ t |¡ ˆj ˆj¡ ˆ 
g d¢ˆj¡ ˆ ˆj d¡¡ d S )Nr€   Úrbrà   c                  “   ó`   ˆj  ‡fdd„ˆ ¡I d H \} }ˆ |ˆ¡ ˆ | ˆj¡ ˆ ddgˆj¡ ˆ dˆj¡ d S )Nc                      r  r   r   r   r‹  r   r   rî   c  r  zEEventLoopTestsMixin.test_read_pipe.<locals>.connect.<locals>.<lambda>r>   rO   r   ©r+   Úconnect_read_piper$  r?   r·   r@   rA   ©rÎ   Úp©ÚpipeobjrŒ  r/   r   r   r‚  a  s   €ÿz3EventLoopTestsMixin.test_read_pipe.<locals>.connectó   1c                      ó
   ˆ j dkS r   r»  r   r‹  r   r   rî   l  rª  z4EventLoopTestsMixin.test_read_pipe.<locals>.<lambda>r†   ó   2345c                      r  ©Nr   r»  r   r‹  r   r   rî   p  rª  r>   rO   r   ©r>   rO   r\   r^   Úpipe)rx   r+   r  r!  ÚioÚopenr*   rc   r—   rö   r·   rA   r@   r7   rD   r%  r?   r&  )r/   ÚrpipeÚwpiper‚  r   r  r   Útest_read_pipeY  s$   

ÿz"EventLoopTestsMixin.test_read_pipec                    s´   |   ¡ ‰ tˆ d‰tˆ d‰t ¡ \}}t |dd¡‰tj|dddd‰‡ ‡‡‡‡fdd„}ˆ  |ƒ ¡\}}ˆ  ¡  |  	d	t
|ƒ¡ |  	d	t
|ƒ¡ ˆ ¡  ˆ ¡  d |_d |_d S )
Nr€   r  rà   r÷   zutf-8)Úencodingc                  “   sF   ˆ   ‡fdd„ˆ¡I d H \} }ˆ  ‡fdd„ˆ¡I d H \}}| |fS )Nc                      r  r   r   r   ©Ú
read_protor   r   rî   ‰  r  zSEventLoopTestsMixin.test_unclosed_pipe_transport.<locals>.connect.<locals>.<lambda>c                      r  r   r   r   ©Úwrite_protor   r   rî   ‹  r  )r  Úconnect_write_pipe)Úread_transportr–  Úwrite_transport©r+   r)  ZrpipeobjZwpipeobjr+  r   r   r‚  ‡  s   €ÿÿzAEventLoopTestsMixin.test_unclosed_pipe_transport.<locals>.connectr#  )r•   rx   r{   r  r!  r"  r#  r*   r7   r{  ÚreprZ_pipe)r/   r$  r%  r‚  r-  r.  r   r/  r   Útest_unclosed_pipe_transport{  s   


z0EventLoopTestsMixin.test_unclosed_pipe_transportÚopenptyzneed os.openpty()c                    s   t ˆjd‰t ¡ \}}t |dd¡‰ ‡ ‡‡fdd„}ˆj |ƒ ¡ t |d¡ t 	ˆj‡fdd„¡ ˆ 
d	ˆj¡ t |d
¡ t 	ˆj‡fdd„¡ ˆ 
ddgˆj¡ ˆ 
dˆj¡ t |¡ ˆj ¡  ˆj ˆj¡ ˆ 
g d¢ˆj¡ ˆ ˆj d¡¡ d S )Nr€   r  r   c                  “   r  )Nc                      r  r   r   r   r‹  r   r   rî   §  r  zKEventLoopTestsMixin.test_read_pty_output.<locals>.connect.<locals>.<lambda>r>   rO   r   r  r  ©Zmaster_read_objrŒ  r/   r   r   r‚  ¦  s   €ÿz9EventLoopTestsMixin.test_read_pty_output.<locals>.connectr  c                      r  r   r»  r   r‹  r   r   rî   ±  r  z:EventLoopTestsMixin.test_read_pty_output.<locals>.<lambda>r†   r  c                      r  r  r»  r   r‹  r   r   rî   µ  rª  r>   rO   r   r   r!  )rx   r+   r  r2  r"  r#  r*   rc   r—   rö   r·   rA   r@   r7   r?   rD   r%  r&  )r/   ÚmasterÚslaver‚  r   r3  r   Útest_read_pty_output  s&   


ÿz(EventLoopTestsMixin.test_read_pty_outputc                    s6  t  ¡ \‰}t |dd¡}t| jd‰| j ‡fdd„|¡}| j |¡\}}|  |ˆ¡ |  |ˆj	¡ |  
dˆj¡ | d¡ tƒ ‰ ‡fdd	„‰t | j‡ ‡fd
d„¡ |  
dˆ ¡ | d¡ t | j‡ ‡fdd„¡ |  
dˆ ¡ |  
dˆj¡ t  ˆ¡ |  ˆj	 d¡¡ ˆj	 ¡  | j ˆj¡ |  
dˆj¡ d S )NÚwbrà   r€   c                      r  r   r   r   r‹  r   r   rî   È  r  z5EventLoopTestsMixin.test_write_pipe.<locals>.<lambda>rO   r  c                    ó   t  ˆ d¡}| |7 } t| ƒS rß   ©r  rý   rW   ©rY   Úchunk)r$  r   r   rê   Ñ  ó   z3EventLoopTestsMixin.test_write_pipe.<locals>.readerc                      ó   ˆˆ ƒdkS r   r   r   ©rY   rê   r   r   rî   Ö  rï   r  c                      r=  r  r   r   r>  r   r   rî   Ú  rï   ó   12345r!  r^   )r  r!  r"  r#  r{   r+   r,  r*   r$  r?   r·   r@   rc   rô   r—   rö   r7   r%  r&  rD   )r/   r%  r  r‚  r?   r  r   )rY   rŒ  rê   r$  r   Útest_write_pipeÁ  s,   



z#EventLoopTestsMixin.test_write_pipec                    sÖ   t  ¡ \}}| d¡ t | ¡ dd¡}t| jd‰ | j ‡ fdd„|¡}| j 	|¡\}}|  
|ˆ ¡ |  
|ˆ j¡ |  dˆ j¡ | d¡ | j 	| j |d¡¡}|  d|¡ | ¡  | j 	ˆ j¡ |  d	ˆ j¡ d S )
NFr7  rà   r€   c                      r  r   r   r   r‹  r   r   rî   ð  r  zIEventLoopTestsMixin.test_write_pipe_disconnect_on_close.<locals>.<lambda>rO   r  r^   )rñ   rò   ró   r"  r#  Údetachr{   r+   r,  r*   r$  r?   r·   r@   rc   Ú	sock_recvr7   rD   )r/   ZrsockZwsockr  r‚  r?   r  rY   r   r‹  r   Ú#test_write_pipe_disconnect_on_closeè  s   

z7EventLoopTestsMixin.test_write_pipe_disconnect_on_closer   rð   c                    sB  t  ¡ \‰}t |dd¡}t| jd‰| j ‡fdd„|¡}| j |¡\}}|  |ˆ¡ |  |ˆj	¡ |  
dˆj¡ | d¡ tƒ ‰ ‡fdd	„‰tj| j‡ ‡fd
d„tjd |  
dˆ ¡ | d¡ tj| j‡ ‡fdd„tjd |  
dˆ ¡ |  
dˆj¡ t  ˆ¡ |  ˆj	 d¡¡ ˆj	 ¡  | j ˆj¡ |  
dˆj¡ d S )Nr7  r   r€   c                      r  r   r   r   r‹  r   r   rî   
  r  z4EventLoopTestsMixin.test_write_pty.<locals>.<lambda>rO   r  c                    r8  rß   r9  r:  ©r4  r   r   rê     r<  z2EventLoopTestsMixin.test_write_pty.<locals>.readerc                      r=  r   r   r   r>  r   r   rî     rï   ©Útimeoutr  c                      r=  r  r   r   r>  r   r   rî     rï   r?  r!  r^   )r  r2  r"  r#  r{   r+   r,  r*   r$  r?   r·   r@   rc   rô   r—   rö   r
   ÚSHORT_TIMEOUTr7   r%  r&  rD   )r/   r5  Úslave_write_objr‚  r?   r  r   )rY   r4  rŒ  rê   r   Útest_write_ptyÿ  s4   
ÿ
ÿ

z"EventLoopTestsMixin.test_write_ptyc           
         sÂ  t  ¡ \‰}t  |¡}t |¡ t |dd¡}t| jd‰| j 	‡fdd„|¡}| j 
|¡\}}|  |ˆ¡ |  |ˆj¡ |  ddgˆj¡ |  dˆj¡ t |dd¡}t| jd‰| j ‡fd	d„|¡}| j 
|¡\}	}|  |ˆ¡ |  |	ˆj¡ |  dˆj¡ tƒ ‰ ‡fd
d„‰|	 d¡ tj| j‡ ‡fdd„tjd |  dˆ ¡ |  ddgˆj¡ |  dˆj¡ t  ˆd¡ tj| j‡fdd„tjd |  ddgˆj¡ |  dˆj¡ |  dˆj¡ |	 d¡ tj| j‡ ‡fdd„tjd |  dˆ ¡ |  ddgˆj¡ |  dˆj¡ t  ˆd¡ tj| j‡fdd„tjd |  ddgˆj¡ |  dˆj¡ |  dˆj¡ t  ˆ¡ | ¡  | j 
ˆj¡ |  g d¢ˆj¡ |	 ¡  | j 
ˆj¡ |  dˆj¡ d S )Nr  r   r€   c                      r  r   r   r   r(  r   r   rî   9  r  z<EventLoopTestsMixin.test_bidirectional_pty.<locals>.<lambda>r>   rO   r7  c                      r  r   r   r   r*  r   r   rî   D  r  c                    r8  rß   r9  r:  rD  r   r   rê   L  r<  z:EventLoopTestsMixin.test_bidirectional_pty.<locals>.readerr  c                      r=  r   r   r   r>  r   r   rî   R  rï   rE  ó   ac                      r  r   r»  r   r(  r   r   rî   Y  rª  r†   r  c                      r=  r  r   r   r>  r   r   rî   `  rï   r?  s   bcdec                      r  r  r»  r   r(  r   r   rî   g  rª  r   r   r^   )r  r2  ÚdupÚttyZsetrawr"  r#  rx   r+   r  r*   r$  r?   r·   r@   rA   r{   r,  rô   rc   r—   rö   r
   rG  r7   rD   )
r/   Z
read_slaveZwrite_slaveZslave_read_objZread_connectr-  r  rH  Zwrite_connectr.  r   )rY   r4  r)  rê   r+  r   Útest_bidirectional_pty,  sz   

ÿÿ
ÿÿ
ÿÿ

ÿz*EventLoopTestsMixin.test_bidirectional_ptyc                    sæ   t  ¡ \}}| d¡ ˆj ˆj |d¡¡‰ tˆ dd ƒ}|d ur&ˆ |j¡ ‡ ‡fdd„}t	 
¡ }ˆj |ƒ ¡}ˆj ¡  t	 
¡ | }ˆ |d¡ ˆ | ¡ d¡ ˆ tjˆ j¡ |d urcˆ |j¡ ˆj |¡ | ¡  | ¡  d S )NFr†   Úovc                  “   sj   z-zˆj  ˆ j¡ ˆ I d H  W n tjy   d} Y nw d } W ˆj  ¡  | S W ˆj  ¡  | S ˆj  ¡  w )NÚ	cancelled)r+   r¼   rÜ   r   ÚCancelledErrorr«   )rÕ   ©r`  r/   r   r   Úmain€  s   €ÿ
û
ÿz:EventLoopTestsMixin.test_prompt_cancellation.<locals>.mainr¦   rO  )rñ   rò   ró   r+   r¤  rB  Úgetattrrž   Úpendingr§   Ú	monotonicr¶   Z
assertLessr·   Úresultr£   r   rP  rÝ   r®  r7   )r/   ré   r÷   rN  rR  rÌ   rÎ   Úelapsedr   rQ  r   Útest_prompt_cancellationx  s&   

z,EventLoopTestsMixin.test_prompt_cancellationc                    sh   ‡ ‡fdd„}ˆj j‰ dˆj _|ˆj _‡fdd„}ˆj  |ƒ ¡ ˆ ˆj jdˆj jˆj jjjdœ¡ d S )Nc                      s   ˆj  jd7  _ˆ ƒ  d S r   )r+   Ú_run_once_counterr   ©Zorig_run_oncer/   r   r   Ú	_run_onceœ  s   
z<EventLoopTestsMixin.test_timeout_rounding.<locals>._run_oncer   c                  “   s\   ˆ j } t d¡I d H  t d¡I d H  t d¡I d H  t d¡I d H  t d¡I d H  d S )Nr  g-Cëâ6?gíµ ÷Æ°>g:Œ0âŽyE>g»½×Ùß|Û=)r+   r   rœ   r€   r6   r   r   Úwait¤  s   €z7EventLoopTestsMixin.test_timeout_rounding.<locals>.waité   )Zclock_resolutionÚselector)	r+   r[  rY  r*   ZassertLessEqualZ_clock_resolutionÚ	_selectorre   r9   )r/   r[  r\  r   rZ  r   Útest_timeout_rounding›  s   
ÿÿz)EventLoopTestsMixin.test_timeout_roundingc                 C   sx   |   ¡ }dd„ }t ¡ \}}|  |j¡ |  |j¡ | ||¡ | ||¡ | ¡  |  | |¡¡ |  | 	|¡¡ d S )Nc                   S   r.   r   r   r   r   r   r   rî   ·  r  zCEventLoopTestsMixin.test_remove_fds_after_closing.<locals>.<lambda>)
r•   rñ   rò   r  r7   rõ   rû   rÝ   rä   rü   ©r/   r+   r³   ré   r÷   r   r   r   Útest_remove_fds_after_closingµ  s   z1EventLoopTestsMixin.test_remove_fds_after_closingc                 C   s®   |   ¡ }dd„ }t ¡ \}}|  |j¡ |  |j¡ | ¡  |  t¡ | ||¡ W d   ƒ n1 s4w   Y  |  t¡ | ||¡ W d   ƒ d S 1 sPw   Y  d S )Nc                   S   r.   r   r   r   r   r   r   rî   Ã  r  z@EventLoopTestsMixin.test_add_fds_after_closing.<locals>.<lambda>)	r•   rñ   rò   r  r7   r£   r¤   rõ   rû   ra  r   r   r   Útest_add_fds_after_closingÁ  s   ÿ"ÿz.EventLoopTestsMixin.test_add_fds_after_closingc                    sR   ‡ fdd„}|ˆ j ƒ}ˆ  t¡ ˆ j  |¡ W d   ƒ d S 1 s"w   Y  d S )Nc                 “   s   ˆ j  ¡  d S r   )r+   r7   r€   r6   r   r   Ú
close_loopÎ  s   €zEEventLoopTestsMixin.test_close_running_event_loop.<locals>.close_loop)r+   r£   r¤   r*   )r/   rd  r   r   r6   r   Útest_close_running_event_loopÍ  s
   
"ÿz1EventLoopTestsMixin.test_close_running_event_loopc                 C   sB  | j  ¡  dd„ }dd„ }|ƒ }|  |j¡ |  t¡ | j  ¡  W d   ƒ n1 s+w   Y  |  t¡ | j  ¡ }| j  |¡ W d   ƒ n1 sKw   Y  |  t¡ | j  |¡ W d   ƒ n1 sfw   Y  |  t¡ | j  	|¡ W d   ƒ n1 sw   Y  |  t¡ | j  
d|¡ W d   ƒ n1 sw   Y  |  t¡ | j  | j  ¡ d |¡ W d   ƒ n1 s¾w   Y  |  t¡ | j  |¡ W d   ƒ n1 sÙw   Y  |  t¡ | j  tj|¡ W d   ƒ n1 söw   Y  |  t¡ | j  d |¡ ¡ }t|ƒ W d   ƒ d S 1 sw   Y  d S )Nc                   Ó   s   d S r   r   r   r   r   r   ÚtestØ  r'   z,EventLoopTestsMixin.test_close.<locals>.testc                   S   ó   dS ©NFr   r   r   r   r   rî   Û  r  z0EventLoopTestsMixin.test_close.<locals>.<lambda>g      ð?g        )r+   r7   r  r£   r¤   r¶   rB   r*   r¼   rÂ   rµ   Úcall_atr§   r¤  r  r  ÚSIGTERMrÓ   r8   Únext)r/   rf  Úfuncr   ÚfutÚitr   r   r   Ú
test_closeÕ  sD   
ÿ
þÿÿÿÿÿÿ
$þzEventLoopTestsMixin.test_close)T)TN)NNr   )\r9   r:   r;   r”   rš   r¥   rª   r­   r¹   r½   rÏ   rÐ   rÖ   rÞ   rø   rþ   rš  Ú
skipUnlessrL  r  r  r  r  r,  r5  r   Zskip_unless_bind_unix_socketr8  r?  rB  rT  ÚskipIfr@  rY  r\  ra  rw  rx  r}  r—  rœ  r¡  r   rM  r²  rµ  r·  r½  rñ   rÂ  rÉ  rË  rÍ  rÔ  rÕ  rÖ  rÚ  rÜ  rè  rê  rî  rï  rð  rø  rú  ZIPV6_ENABLEDrþ  r   r  r  r  r  r  r   r   r&  r1  r  r6  r@  rC  r
   Úrequires_mac_verrI  rM  rX  r`  rb  rc  re  ro  rh   r   r   rd   r   r“     s
   		
+ÿÿ



ÿ!
þ
ÿ%
	

6


$
	










(0
ÿ
 ÿ
 ÿ!ÿ
%ÿ
ÿ
'ÿ
F#r“   c                   @   sž   e Z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e ejdkd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚSubprocessTestsMixinc                 C   ó.   t jdkr|  |t¡ d S |  tj |¡ d S ©Nr   )r   r   r!  r    r·   r  rj  ©r/   r‹   r   r   r   Úcheck_terminatedü  ó   
z%SubprocessTestsMixin.check_terminatedc                 C   rt  ru  )r   r   r!  r    r·   r  rÿ   rv  r   r   r   Úcheck_killed  rx  z!SubprocessTestsMixin.check_killedc                 C   sô   t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ |  d|j¡ | d¡}| d¡ | j |jd  ¡ ¡ t ¡  | ¡  W d   ƒ n1 s]w   Y  | j |j¡ |  |j¡ |  d|jd ¡ d S )Núecho.pyrO   r   ó   Python The Winnerr†   )r  rÃ  rÍ   ÚdirnameÚ__file__r+   Úsubprocess_execrW  rX  r}   r   Ú
executabler*   r!  rC   r·   r@   Úget_pipe_transportrc   r   r\  r—   rO  r7   rˆ   ry  r‹   rY   ©r/   Úprogr‚  ÚtransprŒ  Ústdinr   r   r   Útest_subprocess_exec
  s$   þ



ÿz)SubprocessTestsMixin.test_subprocess_execc                 C   s4  t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ |  d|j¡ | d¡}| d¡ | j |jd  ¡ ¡ |jd  ¡  |  d|jd ¡ | d¡ | j |jd  ¡ ¡ |  d|jd ¡ t ¡  | ¡  W d   ƒ n1 s†w   Y  | j |j¡ |  |j¡ d S )Nrz  rO   r   s   Python r†   s
   The Winnerr{  )r  rÃ  rÍ   r|  r}  r+   r~  rW  rX  r}   r   r  r*   r!  rC   r·   r@   r€  rc   r   r\  ÚclearrY   r—   rO  r7   rˆ   ry  r‹   r  r   r   r   Útest_subprocess_interactive  s,   þ




ÿz0SubprocessTestsMixin.test_subprocess_interactivec                 C   sÀ   | j  t t| j ¡d¡}| j  |¡\}}|  |t¡ | j  |j¡ | d¡ 	¡  | j  |j
¡ |  d|j¡ |  tdd„ |j ¡ D ƒƒ¡ |  |jd  d¡d¡ |  |jd d	¡ | 	¡  d S )
Nzecho Pythonr   c                 s   s    | ]}|  ¡ V  qd S r   )rD   )r~   r`  r   r   r   Ú	<genexpr>E  s   € z=SubprocessTestsMixin.test_subprocess_shell.<locals>.<genexpr>r†   s   
s   Pythonr‡   r„   )r+   Úsubprocess_shellrW  rX  r}   r*   r!  rC   r€  r7   rˆ   r·   r‹   rž   ÚallrŠ   ÚvaluesrY   Úrstrip©r/   r‚  rƒ  rŒ  r   r   r   Útest_subprocess_shell:  s   þz*SubprocessTestsMixin.test_subprocess_shellc                 C   sd   | j jt t| j ¡dd d d d}| j  |¡\}}|  |t¡ | j  |j¡ |  d|j	¡ | 
¡  d S )Núexit 7©r„  ÚstdoutÚstderré   ©r+   r‰  rW  rX  r}   r*   r!  rˆ   r·   r‹   r7   r  r   r   r   Útest_subprocess_exitcodeJ  s   þz-SubprocessTestsMixin.test_subprocess_exitcodec                 C   sš   | j jt t| j ¡dd d d d}| j  |¡\}}|  |t¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ | j  |j	¡ |  
d|j¡ |  | ¡ ¡ d S )Nr  r  r   r†   r‡   r“  )r+   r‰  rW  rX  r}   r*   r!  rå  r€  rˆ   r·   r‹   r7   r  r   r   r   Ú"test_subprocess_close_after_finishU  s   þz7SubprocessTestsMixin.test_subprocess_close_after_finishc                 C   óŠ   t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ | ¡  | j |j¡ |  |j¡ | ¡  d S ©Nrz  )r  rÃ  rÍ   r|  r}  r+   r~  rW  rX  r}   r   r  r*   r!  rC   r  rˆ   ry  r‹   r7   ©r/   r‚  r‚  rƒ  rŒ  r   r   r   Útest_subprocess_killc  ó   þz)SubprocessTestsMixin.test_subprocess_killc                 C   r—  r˜  )r  rÃ  rÍ   r|  r}  r+   r~  rW  rX  r}   r   r  r*   r!  rC   Ú	terminaterˆ   rw  r‹   r7   r™  r   r   r   Útest_subprocess_terminates  r›  z.SubprocessTestsMixin.test_subprocess_terminater   zDon't have SIGHUPc              
   C   sÆ   t   t jt j¡}zRtj tj t¡d¡}| j 	t
 t| j¡tj|¡}| j |¡\}}|  |t¡ | j |j¡ | t j¡ | j |j¡ |  t j |j¡ | ¡  W t   t j|¡ d S t   t j|¡ w r˜  )r  ÚSIGHUPÚSIG_DFLr  rÃ  rÍ   r|  r}  r+   r~  rW  rX  r}   r   r  r*   r!  rC   Úsend_signalrˆ   r·   r‹   r7   )r/   Zold_handlerr‚  r‚  rƒ  rŒ  r   r   r   Útest_subprocess_send_signalƒ  s   þ
"z0SubprocessTestsMixin.test_subprocess_send_signalc                 C   sÈ   t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ | d¡}| d¡ | j |j¡ | ¡  |  d|jd ¡ |  |jd  d¡|jd ¡ |  d|j¡ d S )Núecho2.pyr   ó   testó   OUT:testr†   r‡   s   ERR:test)r  rÃ  rÍ   r|  r}  r+   r~  rW  rX  r}   r   r  r*   r!  rC   r€  rc   rˆ   r7   r·   rY   rž   r   r‹   r  r   r   r   Útest_subprocess_stderrœ  s   þ

z+SubprocessTestsMixin.test_subprocess_stderrc                 C   sî   t j t j t¡d¡}| jjt t	| j¡t
j|tjd}| j |¡\}}|  |t	¡ | j |j¡ | d¡}|  | d¡¡ |  | d¡¡ | d¡ | j |j¡ |  |jd  d¡|jd ¡ |  d|jd ¡ | ¡  |  d|j¡ d S )	Nr¢  )r’  r   r†   r‡   r£  s   OUT:testERR:testr„   )r  rÃ  rÍ   r|  r}  r+   r~  rW  rX  r}   r   r  Ú
subprocessÚSTDOUTr*   r!  rC   r€  r%  rå  rc   rˆ   rž   rY   r   r·   r7   r‹   r  r   r   r   Ú)test_subprocess_stderr_redirect_to_stdout±  s&   
þ

ÿz>SubprocessTestsMixin.test_subprocess_stderr_redirect_to_stdoutc                 C   sZ  t j t j t¡d¡}| j t t	| j¡t
j|¡}| j |¡\}}|  |t	¡ | j |j¡ | d¡}| d¡}| d¡ | j |jd  ¡ ¡ |  d|jd ¡ | ¡  | j |jd ¡ | d¡ | j |jd  ¡ ¡ t
jdkr}|  d	|jd ¡ n	|  d
|jd ¡ t ¡  | ¡  W d   ƒ n1 s™w   Y  | j |j¡ |  |j¡ d S )Nzecho3.pyr   r†   r£  r¤  r¹  r‡   r   s   ERR:BrokenPipeErrors   ERR:OSError)r  rÃ  rÍ   r|  r}  r+   r~  rW  rX  r}   r   r  r*   r!  rC   r€  rc   r   r\  r·   rY   r7   rŠ   r   r—   rO  rˆ   ry  r‹   )r/   r‚  r‚  rƒ  rŒ  r„  r‘  r   r   r   Ú#test_subprocess_close_client_streamÊ  s2   þ






ÿz8SubprocessTestsMixin.test_subprocess_close_client_streamc                 C   sf   | j jt t| j ¡dd d d dd}| j  |¡\}}|  |t¡ | j  |j¡ |  d|j	¡ | 
¡  d S )Nr  T)r„  r‘  r’  Ústart_new_sessionr“  r”  r  r   r   r   Ú"test_subprocess_wait_no_same_groupì  s   ýz7SubprocessTestsMixin.test_subprocess_wait_no_same_groupc                    sÆ   ‡ fdd„}ˆ   t¡ ˆ j |dd¡ W d   ƒ n1 sw   Y  ˆ   t¡ ˆ j |dd¡ W d   ƒ n1 s=w   Y  ˆ   t¡ ˆ j |dd¡ W d   ƒ d S 1 s\w   Y  d S )Nc                  ›   s$   ˆ j jtjdfi | ¤ŽI d H  d S ©NÚpwd)r+   r~  r   ÚSubprocessProtocol)r¥  r6   r   r   r‚  ù  s   €þþzGSubprocessTestsMixin.test_subprocess_exec_invalid_args.<locals>.connectT©Úuniversal_newlinesé   ©Úbufsize©Úshell©r£   r
  r+   r*   ©r/   r‚  r   r6   r   Ú!test_subprocess_exec_invalid_argsø  s   ÿÿ"ÿz6SubprocessTestsMixin.test_subprocess_exec_invalid_argsc                    s  d‡ fdd„	}ˆ   t¡ ˆ j |ddgƒ¡ W d   ƒ n1 s!w   Y  ˆ   t¡ ˆ j |dd¡ W d   ƒ n1 s?w   Y  ˆ   t¡ ˆ j |dd¡ W d   ƒ n1 s]w   Y  ˆ   t¡ ˆ j |d	d
¡ W d   ƒ d S 1 s|w   Y  d S )Nc                 ›   s,   | sd} ˆ j jtj| fi |¤ŽI d H  d S r¬  )r+   r‰  r   r®  )Úcmdr¥  r6   r   r   r‚    s   €þþzHSubprocessTestsMixin.test_subprocess_shell_invalid_args.<locals>.connectZlsz-lTr¯  r±  r²  Fr´  r   r¶  r·  r   r6   r   Ú"test_subprocess_shell_invalid_args  s   ÿÿÿ"ÿz7SubprocessTestsMixin.test_subprocess_shell_invalid_argsN)r9   r:   r;   rw  ry  r…  r‡  rŽ  r•  r–  rš  r  rš  rq  r   r   r¡  r¥  r¨  r©  r«  r¸  rº  r   r   r   r   rs  ú  s$    
"rs  r   c                   @   ó   e Zd Zdd„ ZdS )ÚSelectEventLoopTestsc                 C   ó   t  ¡ S r   )r   ÚSelectorEventLoopr6   r   r   r   r•     ó   ú&SelectEventLoopTests.create_event_loopN©r9   r:   r;   r•   r   r   r   r   r¼    s    r¼  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚProactorEventLoopTestsc                 C   r½  r   )r   ZProactorEventLoopr6   r   r   r   r•   $  r¿  z(ProactorEventLoopTests.create_event_loopc                 C   ó
   t  d¡‚©Nz(IocpEventLoop does not have add_reader()©rš  r›  r6   r   r   r   rø   '  ó   
z+ProactorEventLoopTests.test_reader_callbackc                 C   rÃ  rÄ  rÅ  r6   r   r   r   Útest_reader_callback_cancel*  rÆ  z2ProactorEventLoopTests.test_reader_callback_cancelc                 C   rÃ  ©Nz(IocpEventLoop does not have add_writer()rÅ  r6   r   r   r   rþ   -  rÆ  z+ProactorEventLoopTests.test_writer_callbackc                 C   rÃ  rÈ  rÅ  r6   r   r   r   Útest_writer_callback_cancel0  rÆ  z2ProactorEventLoopTests.test_writer_callback_cancelc                 C   rÃ  rÄ  rÅ  r6   r   r   r   rb  3  rÆ  z4ProactorEventLoopTests.test_remove_fds_after_closingN)	r9   r:   r;   r•   rø   rÇ  rþ   rÉ  rb  r   r   r   r   rÂ     s    rÂ  c                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚUnixEventLoopTestsMixinc                    s,   t ƒ  ¡  t ¡ }| | j¡ t |¡ d S r   )rb   r”   r   ÚSafeChildWatcherÚattach_loopr+   Úset_child_watcher©r/   Zwatcherrd   r   r   r”   9  s   
zUnixEventLoopTestsMixin.setUpc                    s   t  d ¡ tƒ  ¡  d S r   )r   rÍ  rb   rš   r6   rd   r   r   rš   ?  r´   z UnixEventLoopTestsMixin.tearDown)r9   r:   r;   r”   rš   rh   r   r   rd   r   rÊ  8  s    rÊ  ÚKqueueSelectorc                       s\   e Zd Zdd„ Ze dd¡e ej	 
d¡d¡‡ fdd„ƒƒZe dd¡‡ fd	d
„ƒZ‡  ZS )ÚKqueueEventLoopTestsc                 C   ó   t  t ¡ ¡S r   )r   r¾  Ú	selectorsrÏ  r6   r   r   r   r•   I  s   ÿz&KqueueEventLoopTests.create_event_loopr   é	   Zopenbsdztest hangs on OpenBSDc                    ó   t ƒ  ¡  d S r   )rb   r6  r6   rd   r   r   r6  O  s   z)KqueueEventLoopTests.test_read_pty_outputc                    rÔ  r   )rb   rI  r6   rd   r   r   rI  Y  s   z#KqueueEventLoopTests.test_write_pty)r9   r:   r;   r•   r
   rr  rš  rq  r   r   r   r6  rI  rh   r   r   rd   r   rÐ  E  s    
ÿ
rÐ  ÚEpollSelectorc                   @   r»  )ÚEPollEventLoopTestsc                 C   rÑ  r   )r   r¾  rÒ  rÕ  r6   r   r   r   r•   b  r   z%EPollEventLoopTests.create_event_loopNrÁ  r   r   r   r   rÖ  ^  ó    rÖ  ÚPollSelectorc                   @   r»  )ÚPollEventLoopTestsc                 C   rÑ  r   )r   r¾  rÒ  rØ  r6   r   r   r   r•   j  r   z$PollEventLoopTests.create_event_loopNrÁ  r   r   r   r   rÙ  f  r×  rÙ  c                   @   r»  )r¼  c                 C   rÑ  r   )r   r¾  rÒ  ÚSelectSelectorr6   r   r   r   r•   r  r   rÀ  NrÁ  r   r   r   r   r¼  n  r×  c                  O   r.   r   r   )rÙ   rl  r   r   r   Únoopv  r2   rÛ  c                       sh   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
 eejdƒd¡dd„ ƒZ‡  ZS )ÚHandleTestsc                    s"   t ƒ  ¡  t ¡ | _d| jj_d S r×   )rb   r”   r   r­  r+   Ú	get_debugÚreturn_valuer6   rd   r   r   r”   |  s   

zHandleTests.setUpc                 C   s`   dd„ }d}t  ||| j¡}|  |j|¡ |  |j|¡ |  | ¡ ¡ | ¡  |  	| ¡ ¡ d S )Nc                  W   ó   | S r   r   rØ   r   r   r   r³   ‚  r2   z)HandleTests.test_handle.<locals>.callbackr   )
r   ÚHandler+   r$  Ú	_callbackÚ_argsrÝ   rO  rÜ   rž   )r/   r³   rÙ   Úhr   r   r   Útest_handle  s   zHandleTests.test_handlec                 C   s\   dd„ }t  ¡ | _t  ¡ | j_t |d| j¡}| ¡  | jj t 	d¡t j
||jdœ¡ d S )Nc                   S   s   t ƒ ‚r   )r
  r   r   r   r   r³     s   z:HandleTests.test_callback_with_exception.<locals>.callbackr   zException in callback.*)rˆ  rP  ÚhandleZsource_traceback)r   r­  r+   rÞ  r   rà  Z_runÚassert_called_withr—   ZMockPatternÚANYÚ_source_traceback)r/   r³   rã  r   r   r   Útest_callback_with_exceptionŽ  s   
üz(HandleTests.test_callback_with_exceptionc                 C   s(   t  ¡ }t dd„ d| j¡}||d< d S )Nc                   S   r.   r   r   r   r   r   r   rî   ¡  r  z1HandleTests.test_handle_weakref.<locals>.<lambda>r   rã  )ÚweakrefÚWeakValueDictionaryr   rà  r+   )r/   Zwdrã  r   r   r   Útest_handle_weakrefŸ  s   zHandleTests.test_handle_weakrefc                 C   s¤  d| j j_t td| j ¡}t t¡\}}|  t	|ƒd||f ¡ | 
¡  |  t	|ƒd¡ |  t¡ t t¡}W d   ƒ n1 sAw   Y  t |d| j ¡}|  t	|ƒd||f ¡ t tdd¡}t |d	| j ¡}d
t |¡|f }|  t	|ƒ|¡ tjtdd}t |d| j ¡}dt |¡|f }|  t	|ƒ|¡ tjdkrÐtj}t |¡}t |¡\}}t |d| j ¡}d}d| }d|t |¡|f }|  t	|ƒ|¡ d S d S )NFr…   z<Handle noop(1, 2) at %s:%s>z<Handle cancelled>r   z<Handle noop() at %s:%s>r†   r‡   )rƒ   z%^<Handle noop\(1, 2\)\(3\) at %s:%s>$)Úx)r‡   rƒ   z'^<Handle noop\(x=1\)\(2, 3\) at %s:%s>$)rƒ   é   z*<function HandleTests.test_handle_repr .*>z%functools.partialmethod\(%s, , \)\(\)z^<Handle %s at %s:%s>$)r+   rÝ  rÞ  r   rà  rÛ  r—   Úget_function_sourcer·   r0  rÜ   ZassertWarnsÚDeprecationWarningÚ	coroutinerW  rX  ÚreÚescapeZassertRegexr   r˜  rÜ  Útest_handle_reprÚpartialmethod)r/   rã  ÚfilenameÚlinenor¬   ZregexÚmethodZcb_regexr   r   r   rô  ¤  sZ   

ÿÿ
ÿÿ
ÿÿÿÿ

ÿözHandleTests.test_handle_reprc                 C   s¢   d| j j_t}t ¡ jd }t t	d| j ¡}t
 t	¡\}}|  t|ƒd||||f ¡ | ¡  |  t|ƒd||||f ¡ | ¡  |  t|ƒd||||f ¡ d S )NTr†   r…   z-<Handle noop(1, 2) at %s:%s created at %s:%s>z7<Handle cancelled noop(1, 2) at %s:%s created at %s:%s>)r+   rÝ  rÞ  r}  r   Ú	_getframeÚf_linenor   rà  rÛ  r—   rï  r·   r0  rÜ   ©r/   Zcreate_filenameZcreate_linenorã  rö  r÷  r   r   r   Útest_handle_repr_debugÖ  s0   


ÿÿ
ÿþ
ÿþz"HandleTests.test_handle_repr_debugc                    s|   t  ¡  ¡ }| d¡ ˆ  |¡ ‡ fdd„}| t¡}||ƒ | t¡}||ƒ | dt¡}||ƒ | dt¡}||ƒ d S )NTc                    sB   t  d¡jd }ˆ  | jt¡ ˆ  | jd d d… t|df¡ d S )Nr†   r  rƒ   Útest_handle_source_traceback)r   rù  rú  r!  rè  Úlistr·   r}  )rã  r÷  r6   r   r   Úcheck_source_tracebackõ  s   þÿzHHandleTests.test_handle_source_traceback.<locals>.check_source_tracebackr   )	r   Úget_event_loop_policyr(   Ú	set_debugr)   r¼   rÛ  rÂ   rµ   )r/   r+   rÿ  rã  r   r6   r   rý  ð  s   


	
z(HandleTests.test_handle_source_tracebackÚ	CoroutinezNo collections.abc.Coroutinec                 C   sÂ   t ƒ }d|_|  t |¡¡ |  t |¡d¡ d|_|  t |¡d¡ d|_	|  t |¡d¡ d  |_|_|  t |¡d¡ t ƒ }d|_|  t |¡d	¡ t ƒ }d|_d |_
|  t |¡d¡ d S )
NZAAAzAAA()ZBBBzBBB()TzBBB() runningz%<CoroLike without __name__>() runningr-   z
CoroLike())r-   r9   rž   r   Ziscoroutiner·   r   Z_format_coroutiner;   Ú
cr_runningÚcr_code)r/   r   r   r   r   Ú+test_coroutine_like_object_debug_formatting	  s&   ÿz7HandleTests.test_coroutine_like_object_debug_formatting)r9   r:   r;   r”   rä  ré  rì  rô  rü  rý  rš  rp  rL  ÚcollectionsÚabcr  rh   r   r   rd   r   rÜ  z  s    2ÿrÜ  c                       sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )Ú
TimerTestsc                    s   t ƒ  ¡  t ¡ | _d S r   )rb   r”   r   r­  r+   r6   rd   r   r   r”   1	  r´   zTimerTests.setUpc                 C   s8   t  ¡ }t |dd„ dt ¡ ¡}|  t|ƒt|ƒ¡ d S )Nc                   S   rg  rh  r   r   r   r   r   rî   7	  r  z&TimerTests.test_hash.<locals>.<lambda>r   )r§   rU  r   ÚTimerHandler   r­  r·   Úhash©r/   Úwhenrã  r   r   r   Ú	test_hash5	  s
   ÿzTimerTests.test_hashc                 C   s4   t  ¡ }t |dd„ dt ¡ ¡}|  || ¡ ¡ d S )Nc                   S   rg  rh  r   r   r   r   r   rî   =	  r  z&TimerTests.test_when.<locals>.<lambda>r   )r§   rU  r   r	  r   r­  r·   r  r  r   r   r   Ú	test_when;	  s
   ÿzTimerTests.test_whenc                 C   sœ   dd„ }d}t  ¡ }t |||t ¡ ¡}|  |j|¡ |  |j|¡ |  	| 
¡ ¡ | ¡  |  | 
¡ ¡ |  |j¡ |  |j¡ |  ttjd ||| j¡ d S )Nc                  W   rß  r   r   rØ   r   r   r   r³   B	  r2   z'TimerTests.test_timer.<locals>.callback)r†   r‡   rƒ   )r§   rU  r   r	  r   r­  r$  rá  râ  rÝ   rO  rÜ   rž   rå  r£   rI   r+   )r/   r³   rÙ   r  rã  r   r   r   Ú
test_timerA	  s   
þzTimerTests.test_timerc                 C   sV   d| j j_t dtd| j ¡}t t¡}|  t	|ƒd| ¡ | 
¡  |  t	|ƒd¡ d S )NFé{   r   z&<TimerHandle when=123 noop() at %s:%s>z <TimerHandle cancelled when=123>)r+   rÝ  rÞ  r   r	  rÛ  r—   rï  r·   r0  rÜ   )r/   rã  Úsrcr   r   r   Útest_timer_reprW	  s   


ÿ
ÿzTimerTests.test_timer_reprc                 C   s€   d| j j_t}t ¡ jd }t dt	d| j ¡}t
 t	¡\}}|  t|ƒd||||f ¡ | ¡  |  t|ƒd||||f ¡ d S )NTr†   r  r   z7<TimerHandle when=123 noop() at %s:%s created at %s:%s>zA<TimerHandle cancelled when=123 noop() at %s:%s created at %s:%s>)r+   rÝ  rÞ  r}  r   rù  rú  r   r	  rÛ  r—   rï  r·   r0  rÜ   rû  r   r   r   Útest_timer_repr_debuge	  s    


þÿ

þÿz TimerTests.test_timer_repr_debugc                 C   s8  dd„ }t  ¡ }t ||d| j¡}t ||d| j¡}|  ||k ¡ |  ||k ¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ | ¡  |  ||k¡ t ||d| j¡}t |d |d| j¡}|  ||k ¡ |  ||k ¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ t |d| j¡}|  	t
| |¡¡ |  	t
| |¡¡ |  t¡ |dk  W d   ƒ n1 sów   Y  |  t¡ |dk W d   ƒ n	1 sw   Y  |  t¡ |dk W d   ƒ n	1 s'w   Y  |  t¡ |dk W d   ƒ n	1 sAw   Y  |  |dk¡ |  |dk¡ |  |tk¡ |  |tk¡ |  |tk ¡ |  |tk¡ |  |tk¡ |  |tk¡ |  |tk ¡ |  |tk¡ |  |tk¡ |  |tk¡ d S )Nc                  W   rß  r   r   rØ   r   r   r   r³   {	  r2   z2TimerTests.test_timer_comparison.<locals>.callbackr   g      $@)r§   rU  r   r	  r+   rÝ   rž   rÜ   rà  r$  ÚNotImplementedÚ__eq__Ú__ne__r£   r  r   r   r   )r/   r³   r  Zh1Zh2Zh3r   r   r   Útest_timer_comparisonz	  sn   
ÿ
ÿ
ÿ
ÿz TimerTests.test_timer_comparison)r9   r:   r;   r”   r  r  r  r  r  r  rh   r   r   rd   r   r  /	  s    r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAbstractEventLoopTestsc                 C   s   t  ¡ }t ¡ }|  t|j¡ |  t|jd ¡ |  t|j¡ |  t|j	¡ |  t|j
¡ |  t|j¡ |  t|jd ¡ |  t|jd d ¡ |  t|j||¡ |  t|jd ¡ |  t|j¡ |  t|jd ¡ |  t|j|¡ |  t|jd|¡ |  t|jd¡ |  t|jd|¡ |  t|jd¡ |  t|jd|¡ |  t|jd¡ |  t|jd¡ |  t|j|¡ |  t|j|¡ |  t|j|¡ |  t|j¡ |  t|j|¡ d S r   )r   r­  r   ÚAbstractEventLoopr£   ÚNotImplementedErrorr¶   r*   r«   rŸ   r–   r7   r¤  rµ   ri  r¼   r§   rÂ   Zset_default_executorrõ   rä   rû   rü   r  r	  Zset_exception_handlerZdefault_exception_handlerrÞ  rÝ  r  )r/   r`  r+   r   r   r   Útest_not_implemented»	  sš   ÿÿÿÿÿÿÿ
ÿ
ÿÿÿÿÿ
ÿÿ
ÿÿ
ÿÿÿÿÿÿÿÿz+AbstractEventLoopTests.test_not_implementedc                    s,   ‡ fdd„}t  ¡ }| |ƒ ¡ | ¡  d S )Nc                  “   s$  t  ¡ } t ¡ }ˆ  t¡ | | | ¡I d H  W d   ƒ n1 s"w   Y  ˆ  t¡ | dd¡I d H  W d   ƒ n1 s@w   Y  ˆ  t¡ | d¡I d H  W d   ƒ n1 s]w   Y  ˆ  t¡ | 	| ¡I d H  W d   ƒ n1 szw   Y  ˆ  t¡ | 
| ¡I d H  W d   ƒ n1 s—w   Y  ˆ  t¡ | | ¡I d H  W d   ƒ n1 s´w   Y  ˆ  t¡ | | d¡I d H  W d   ƒ n1 sÒw   Y  ˆ  t¡ | | d¡I d H  W d   ƒ n1 sðw   Y  ˆ  t¡ | | d¡I d H  W d   ƒ n	1 sw   Y  ˆ  t¡ | | | ¡I d H  W d   ƒ n	1 s.w   Y  ˆ  t¡ | | ¡I d H  W d   ƒ n	1 sLw   Y  ˆ  t¡ | | | ¡I d H  W d   ƒ n	1 skw   Y  ˆ  t¡ | | | ¡I d H  W d   ƒ n	1 sŠw   Y  ˆ  t¡ | | t jj¡I d H  W d   ƒ n	1 s«w   Y  ˆ  t¡ | | t jj¡I d H  W d   ƒ n	1 sÌw   Y  ˆ  t¡ | | t j¡I d H  W d   ƒ n	1 sìw   Y  ˆ  t¡ | | ¡I d H  W d   ƒ d S 1 sw   Y  d S )Nrq  é  )rq  r  r   )r   r­  r   r  r£   r  rÓ   rp  r  r1  r  r  rB  Zsock_recv_intoZsock_sendallZsock_connectZsock_acceptZsock_sendfileÚsendfiler  Úsentinelr!  r,  r‰  r~  )r`  r+   r6   r   r   Úinneró	  sl   €ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ÿz@AbstractEventLoopTests.test_not_implemented_async.<locals>.inner)r   r(   r*   r7   )r/   r  r+   r   r6   r   Útest_not_implemented_asyncñ	  s   'z1AbstractEventLoopTests.test_not_implemented_asyncN)r9   r:   r;   r  r   r   r   r   r   r  ¹	  s    6r  c                   @   s^   e Z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 )ÚPolicyTestsc                 C   sZ   t  ¡ }|  t|j¡ |  t|jtƒ ¡ |  t|j¡ |  t|j¡ |  t|j	tƒ ¡ d S r   )
r   ÚAbstractEventLoopPolicyr£   r  Úget_event_loopr)   rä  r(   Zget_child_watcherrÍ  ©r/   Úpolicyr   r   r   Útest_event_loop_policy!
  s   
ÿz"PolicyTests.test_event_loop_policyc                 C   sX   t  ¡ }|  |jj¡ | ¡ }|  |t j¡ |  |jj|¡ |  || ¡ ¡ | 	¡  d S r   )
r   ÚDefaultEventLoopPolicyrå  Ú_localZ_loopr#  r!  r  r$  r7   ©r/   r%  r+   r   r   r   Útest_get_event_loop*
  s   zPolicyTests.test_get_event_loopc                 C   sf   t  ¡ }tjj|d|jd}| ¡ }|  |j¡ | 	|¡ W d   ƒ n1 s(w   Y  | ¡  d S )Nr)   )Úwraps)
r   r'  r   rM  rä  r)   r#  r  r7   ræ  )r/   r%  Zm_set_event_loopr+   r   r   r   Ú(test_get_event_loop_calls_set_event_loop4
  s   þöz4PolicyTests.test_get_event_loop_calls_set_event_loopc                 C   s$   t  ¡ }| d ¡ |  t|j¡ d S r   )r   r'  r)   r£   r¤   r#  r$  r   r   r   Ú"test_get_event_loop_after_set_noneE
  s   
z.PolicyTests.test_get_event_loop_after_set_nonez'asyncio.events.threading.current_threadc                    s,   ‡ fdd„}t j|d}| ¡  | ¡  d S )Nc                     s   t  ¡ } ˆ  t| j¡ d S r   )r   r'  r£   r¤   r#  )r%  r6   r   r   r`  M
  s   z1PolicyTests.test_get_event_loop_thread.<locals>.frÆ   )rÈ   rË   rÌ   rÍ   )r/   Zm_current_threadr`  Úthr   r6   r   Útest_get_event_loop_threadJ
  s   z&PolicyTests.test_get_event_loop_threadc                 C   s*   t  ¡ }| ¡ }|  |t j¡ | ¡  d S r   )r   r'  r(   r!  r  r7   r)  r   r   r   Útest_new_event_loopU
  s   zPolicyTests.test_new_event_loopc                 C   sr   t  ¡ }| ¡ }| |¡ |  t|jtƒ ¡ | ¡ }| |¡ |  || ¡ ¡ |  	|| ¡ ¡ | 
¡  | 
¡  d S r   )r   r'  r(   r)   r£   rI   rä  r$  r#  ÚassertIsNotr7   )r/   r%  Zold_loopr+   r   r   r   Útest_set_event_loop\
  s   

zPolicyTests.test_set_event_loopc                 C   s*   t  ¡ }|  |t j¡ |  |t  ¡ ¡ d S r   )r   r   r!  r"  r$  r$  r   r   r   Útest_get_event_loop_policyj
  s   z&PolicyTests.test_get_event_loop_policyc                 C   sL   |   ttjtƒ ¡ t ¡ }t ¡ }t |¡ |  |t ¡ ¡ |  ||¡ d S r   )	r£   rI   r   r   rä  r   r'  r$  r1  )r/   Ú
old_policyr%  r   r   r   Útest_set_event_loop_policyo
  s   
ÿ
z&PolicyTests.test_set_event_loop_policyN)r9   r:   r;   r&  r*  r,  r-  r   rM  r/  r0  r2  r3  r5  r   r   r   r   r!  
  s    	


r!  c                       sZ   e Zd ZdZdZdZdZ‡ fdd„Z‡ fdd„Ze	j
dkr!dd„ Zd	d
„ Zdd„ Z‡  ZS )ÚGetEventLoopTestsMixinNc                    sÐ   t j| _t j| _t j| _t j| _t	| ƒj
t _t	| ƒjt _t	| ƒjt _t	| ƒjt _t	| ƒj
t_t	| ƒjt_t	| ƒjt_t	| ƒjt_tƒ  ¡  t ¡ | _t | j¡ tjdkrft ¡ }| | j¡ t |¡ d S d S ru  )r   Ú_get_running_loopÚ_get_running_loop_savedÚ_set_running_loopÚ_set_running_loop_savedÚget_running_loopÚget_running_loop_savedr#  Úget_event_loop_savedr  Ú_get_running_loop_implÚ_set_running_loop_implÚget_running_loop_implÚget_event_loop_implr   rb   r”   r(   r+   r)   r   r   rË  rÌ  rÍ  rÎ  rd   r   r   r”   ‚
  s(   


ýzGetEventLoopTestsMixin.setUpc              	      sÐ   z<t jdkrt d ¡ tƒ  ¡  W | j ¡  t d ¡ | j	t
_| jt
_| jt
_| jt
_| j	t_| jt_| jt_| jt_d S | j ¡  t d ¡ | j	t
_| jt
_| jt
_| jt
_| j	t_| jt_| jt_| jt_w ru  )r   r   r   rÍ  rb   rš   r+   r7   r)   r8  r   r7  r:  r9  r<  r;  r=  r#  r6   rd   r   r   rš   œ
  s0   




õ

zGetEventLoopTestsMixin.tearDownr   c                    s.   t  ¡  ‡ fdd„}ˆ  ˆ j |ƒ ¡d¡ d S )Nc                  “   s,   t j ¡ } ˆ j | t¡I d H }|  ¡  |S r   )Ú
concurrentÚfuturesÚProcessPoolExecutorr+   rÓ   r,   Úshutdown)ÚpoolrV  r6   r   r   rR  ¸
  s   €

ÿzDGetEventLoopTestsMixin.test_get_event_loop_new_process.<locals>.mainr%   )r
   Z*skip_if_broken_multiprocessing_synchronizer·   r+   r*   )r/   rR  r   r6   r   Útest_get_event_loop_new_process²
  s   þz6GetEventLoopTestsMixin.test_get_event_loop_new_processc              	      s  G dd„ dt ƒ‰ G ‡ fdd„dtjƒ}t ¡ }z»t |ƒ ¡ t ¡ ‰ˆ ˆ ¡ t ¡  W d   ƒ n1 s6w   Y  t d ¡ ˆ ˆ ¡ t ¡  W d   ƒ n1 sTw   Y  ˆ 	t
d¡ t ¡  W d   ƒ n1 snw   Y  ˆ t ¡ d ¡ ‡‡fdd„}ˆ |ƒ ¡ t ˆ¡ ˆ ˆ ¡ t ¡  W d   ƒ n1 s¡w   Y  t d ¡ ˆ ˆ ¡ t ¡  W d   ƒ n1 s¿w   Y  W t |¡ ˆd urÒˆ ¡  nt |¡ ˆd uráˆ ¡  w w ˆ 	t
d¡ t ¡  W d   ƒ n1 s÷w   Y  ˆ t ¡ d ¡ d S )Nc                   @   s   e Zd ZdS )zRGetEventLoopTestsMixin.test_get_event_loop_returns_running_loop.<locals>.TestErrorN)r9   r:   r;   r   r   r   r   Ú	TestErrorÄ
  s    rH  c                       s   e Zd Z‡ fdd„ZdS )zOGetEventLoopTestsMixin.test_get_event_loop_returns_running_loop.<locals>.Policyc                    s   ˆ ‚r   r   r6   ©rH  r   r   r#  È
  r2   z^GetEventLoopTestsMixin.test_get_event_loop_returns_running_loop.<locals>.Policy.get_event_loopN)r9   r:   r;   r#  r   rI  r   r   ÚPolicyÇ
  s    rJ  ú
no runningc                   “   ó6   ˆ  t ¡ ˆ ¡ ˆ  t ¡ ˆ ¡ ˆ  t ¡ ˆ ¡ d S r   ©r$  r   r#  r;  r7  r   ©r+   r/   r   r   rl  Ú
  ó   €zMGetEventLoopTestsMixin.test_get_event_loop_returns_running_loop.<locals>.func)r„  r   r'  r   r   r(   r£   r#  r)   rž  r¤   r;  r$  r7  r*   r7   )r/   rJ  r4  rl  r   )rH  r+   r/   r   Ú(test_get_event_loop_returns_running_loopÃ
  sP   
ÿ

ÿ
ÿ

ÿ

ÿ€
€
þ
ÿ
ÿz?GetEventLoopTestsMixin.test_get_event_loop_returns_running_loopc              	      s¸  t  ¡ }z¤t  t  ¡ ¡ t  ¡ ‰ ˆ ˆ j¡ t  ¡ }ˆ |j¡ t  d ¡ ˆ 	t
d¡ t  ¡  W d   ƒ n1 s:w   Y  ˆ 	t
d¡ t  ¡  W d   ƒ n1 sTw   Y  ˆ t  ¡ d ¡ ‡ ‡fdd„}ˆ  |ƒ ¡ t  ˆ ¡ ˆ t  ¡ ˆ ¡ t  d ¡ ˆ 	t
d¡ t  ¡  W d   ƒ n1 s•w   Y  W t  |¡ ˆ d ur¨ˆ  ¡  nt  |¡ ˆ d ur·ˆ  ¡  w w ˆ 	t
d¡ t  ¡  W d   ƒ n1 sÍw   Y  ˆ t  ¡ d ¡ d S )Nz
no currentrK  c                   “   rL  r   rM  r   rN  r   r   rl    rO  zNGetEventLoopTestsMixin.test_get_event_loop_returns_running_loop2.<locals>.func)r   r   r   r'  r(   r  r7   r#  r)   rž  r¤   r;  r$  r7  r*   )r/   r4  Zloop2rl  r   rN  r   Ú)test_get_event_loop_returns_running_loop2ò
  sH   

ÿ
ÿ


ÿ€
€
þ
ÿ
ÿz@GetEventLoopTestsMixin.test_get_event_loop_returns_running_loop2)r9   r:   r;   r>  r?  r@  rA  r”   rš   r   r   rG  rP  rQ  rh   r   r   rd   r   r6  {
  s    
/r6  c                   @   ó$   e Zd ZejZejZejZ	ej
ZdS )ÚTestPyGetEventLoopN)r9   r:   r;   r   Z_py__get_running_loopr>  Z_py__set_running_loopr?  Z_py_get_running_loopr@  Z_py_get_event_looprA  r   r   r   r   rS    ó
    
rS  c                   @   rR  )ÚTestCGetEventLoopN)r9   r:   r;   r   Z_c__get_running_loopr>  Z_c__set_running_loopr?  Z_c_get_running_loopr@  Z_c_get_event_looprA  r   r   r   r   rU  *  rT  rU  c                   @   r»  )Ú
TestServerc                    sb   t  ¡ }|  |j¡ t|ƒ‰ | | ‡ fdd„dd¡¡}|  | ¡ |¡ | ¡  | | 	¡ ¡ d S )Nc                      r  r   r   r   r‹  r   r   rî   8  r  z*TestServer.test_get_loop.<locals>.<lambda>r¸  r   )
r   r(   r  r7   ra   r*   r  r·   Úget_loopÚwait_closed)r/   r+   r±  r   r‹  r   Útest_get_loop4  s   zTestServer.test_get_loopN)r9   r:   r;   rY  r   r   r   r   rV  2  s    rV  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestAbstractServerc                 C   ó<   |   t¡ t ¡  ¡  W d   ƒ d S 1 sw   Y  d S r   )r£   r  r   ÚAbstractServerr7   r6   r   r   r   ro  @  ó   "ÿzTestAbstractServer.test_closec                 C   sV   t  ¡ }|  |j¡ |  t¡ | t ¡  	¡ ¡ W d   ƒ d S 1 s$w   Y  d S r   )
r   r(   r  r7   r£   r  r*   r   r\  rX  rE   r   r   r   Útest_wait_closedD  s
   "ÿz#TestAbstractServer.test_wait_closedc                 C   r[  r   )r£   r  r   r\  rW  r6   r   r   r   rY  K  r]  z TestAbstractServer.test_get_loopN)r9   r:   r;   ro  r^  rY  r   r   r   r   rZ  >  s    rZ  Ú__main__)LÚcollections.abcr  Úconcurrent.futuresrB  rW  r"  r  r   rò  r  rñ   r@  ÚImportErrorr¦  r   rÈ   r§   ry  rš  r   rê  rL  r   r   r   r   r   Ztest.test_asyncior	   r—   rf  r
   Ztest.supportr   r   r   r   r   r   r#   r,   r-   r#  r<   ra   ZDatagramProtocolrj   rx   ZBaseProtocolr{   r®  r}   r“   rs  ZTestCaser¼  rÂ  rÒ  rÊ  rL  rÐ  rÖ  rÙ  rÛ  rÜ  r  r  r!  r6  rS  Z_asynciorU  rV  rZ  r9   rR  r   r   r   r   Ú<module>   sÞ    ÿ
	& $-               ÿþþþþþ 6 f\ "ÿ
ÿ