a
    	¼3jhm  ã                   @   sæ  d 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mZ ddl	Z	ddl	m
Z
 ddlmZ ddlmZ dd„ 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ƒZe ee
dƒd¡G dd„ deejƒƒZe ee
dƒd¡G dd„ deejƒƒZG dd„ deejƒZG dd„ dƒZe ee
dƒd¡G dd „ d eejƒƒZe ee
dƒd¡G d!d"„ d"eejƒƒZG d#d$„ d$eejƒZ G d%d&„ d&ƒZ!G d'd(„ d(e!ejƒZ"e ee
dƒd¡G d)d*„ d*e!ejƒƒZ#e$d+krâe %¡  dS ),zTests for futures.py.é    N)Úmock)Úfutures)Úutils)Úsupportc                   C   s   t  d ¡ d S ©N)ÚasyncioZset_event_loop_policy© r   r   úZ/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_asyncio/test_futures.pyÚtearDownModule   s    r
   c                 C   s   | S r   r   ©Úfr   r   r	   Ú	_fakefunc   s    r   c                   C   s   d S r   r   r   r   r   r	   Úfirst_cb   s    r   c                   C   s   d S r   r   r   r   r   r	   Úlast_cb   s    r   c                   @   s\   e Zd ZdZdZd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S )Ú
DuckFutureFNc                 C   s   |   ¡ rdS d| _dS )NFT)ÚdoneÚ_DuckFuture__cancelled©Úselfr   r   r	   Úcancel*   s    zDuckFuture.cancelc                 C   s   | j S r   )r   r   r   r   r	   Ú	cancelled0   s    zDuckFuture.cancelledc                 C   s   | j p| jd up| jd uS r   )r   Ú_DuckFuture__resultÚ_DuckFuture__exceptionr   r   r   r	   r   3   s
    ÿþzDuckFuture.donec                 C   s"   |   ¡ rJ ‚| jd ur| j‚| jS r   )r   r   r   r   r   r   r	   Úresult8   s    
zDuckFuture.resultc                 C   s   |   ¡ rJ ‚| jS r   )r   r   r   r   r   r	   Ú	exception>   s    zDuckFuture.exceptionc                 C   s"   |   ¡ rJ ‚|d usJ ‚|| _d S r   )r   r   )r   r   r   r   r	   Ú
set_resultB   s    zDuckFuture.set_resultc                 C   s"   |   ¡ rJ ‚|d usJ ‚|| _d S r   )r   r   )r   r   r   r   r	   Úset_exceptionG   s    zDuckFuture.set_exceptionc                 c   s(   |   ¡ sd| _| V  |   ¡ s J ‚|  ¡ S ©NT)r   Ú_asyncio_future_blockingr   r   r   r   r	   Ú__iter__L   s
    zDuckFuture.__iter__)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   !   s   r   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú	DuckTestsc                    s&   t ƒ  ¡  |  ¡ | _|  | jj¡ d S r   ©ÚsuperÚsetUpÚnew_test_loopÚloopZ
addCleanupÚcloser   ©Ú	__class__r   r	   r&   V   s    

zDuckTests.setUpc                 C   s    t ƒ }t |¡}||u sJ ‚d S r   )r   r   Úwrap_future©r   r   Úgr   r   r	   Útest_wrap_future[   s    
zDuckTests.test_wrap_futurec                 C   s    t ƒ }t |¡}||u sJ ‚d S r   )r   r   Zensure_futurer-   r   r   r	   Útest_ensure_future`   s    
zDuckTests.test_ensure_future)r    r!   r"   r&   r/   r0   Ú__classcell__r   r   r*   r	   r#   T   s   r#   c                       s”  e Zd Z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dd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Ze d%¡d&d'„ ƒZe d%¡d(d)„ ƒZe d%¡d*d+„ ƒZe d%¡d,d-„ ƒZe d%¡d.d/„ ƒZe d%¡d0d1„ ƒZe d%¡d2d3„ ƒZd4d5„ Zd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"d>d?„ Z#e d%¡d@dA„ ƒZ$dBdC„ Z%dDdE„ Z&dFdG„ Z'dHdI„ Z(dJdK„ Z)dLdM„ Z*‡  Z+S )NÚBaseFutureTestsc                 O   s   | j |i |¤ŽS r   )Úcls©r   ÚargsÚkwargsr   r   r	   Ú_new_futureh   s    zBaseFutureTests._new_futurec                    s&   t ƒ  ¡  |  ¡ | _|  | jj¡ d S r   r$   r   r*   r   r	   r&   k   s    

zBaseFutureTests.setUpc                 C   s¬   G dd„ dƒ}|   t |¡¡ |  t |ƒ ¡¡ |   t d¡¡ |   t t ¡ ¡¡ | j| jd}|  t |¡¡ |   t t|ƒ¡¡ |  t t t|ƒ¡¡¡ | 	¡  d S )Nc                   @   s   e Zd ZdZdd„ ZdS )z/BaseFutureTests.test_isfuture.<locals>.MyFutureNc                 S   s
   d| _ d S ©NF)r   r   r   r   r	   Ú__init__t   s    z8BaseFutureTests.test_isfuture.<locals>.MyFuture.__init__)r    r!   r"   r   r9   r   r   r   r	   ÚMyFutureq   s   r:   é   ©r(   )
ÚassertFalser   ÚisfutureÚ
assertTruer   ZMockr7   r(   Útyper   )r   r:   r   r   r   r	   Útest_isfuturep   s    zBaseFutureTests.test_isfuturec                 C   sD   | j | jd}|  | ¡ ¡ |  | ¡ ¡ | ¡  |  | ¡ ¡ d S ©Nr<   )r7   r(   r=   r   r   r   r?   ©r   r   r   r   r	   Útest_initial_state‡   s
    z"BaseFutureTests.test_initial_statec                 C   s:   t  | j¡ |  ¡ }|  |j| j¡ |  | ¡ | j¡ d S r   )r   Zset_event_loopr(   r7   ÚassertIsÚ_loopÚget_looprC   r   r   r	   Ú"test_init_constructor_default_loopŽ   s    z2BaseFutureTests.test_init_constructor_default_loopc                 C   s   |   t| jd¡ d S )Né*   )ÚassertRaisesÚ	TypeErrorr7   r   r   r   r	   Útest_constructor_positional”   s    z+BaseFutureTests.test_constructor_positionalc              	   C   sª  | j j| j | jd}|  tj|j¡ | j j| j | jd}|  tj|j¡ | j j| j | jd}|  tt	f¡ | 
d ¡ W d   ƒ n1 sŠ0    Y  | j j| j | jd}|  tt	f¡ | t¡ W d   ƒ n1 sÖ0    Y  | j j| j | jd}|  tt	f¡ | ¡  W d   ƒ n1 s"0    Y  | j j| j | jd}|  tt	f¡ | dd„ ¡ W d   ƒ n1 st0    Y  | j j| j | jd}|  tt	f¡ | dd„ ¡ W d   ƒ n1 sÆ0    Y  | j j| j | jd}zt|ƒ W n tt	fy   Y n0 | j j| j | jd}z| ¡  W n ty>   Y n0 | j j| j | jd}zt|ƒ W n tyt   Y n0 | j j| j | jd}|  | ¡ ¡ |  | ¡ ¡ d S )Nr<   c                 S   s   d S r   r   r   r   r   r	   Ú<lambda>°   ó    z4BaseFutureTests.test_uninitialized.<locals>.<lambda>c                 S   s   d S r   r   r   r   r   r	   rM   ´   rN   )r3   Ú__new__r(   rJ   r   ÚInvalidStateErrorr   r   ÚRuntimeErrorÚAttributeErrorr   r   Ú	Exceptionr   Úadd_done_callbackÚremove_done_callbackÚreprÚ	__await__Úiterr=   r   r   ©r   Úfutr   r   r	   Útest_uninitialized˜   sJ    (((..z"BaseFutureTests.test_uninitializedc                 C   s€   | j | jd}|  t|dƒ¡ |  |jd ¡ | d¡ |  tj	¡ | j 
|¡ W d   ƒ n1 sd0    Y  |  |jd¡ d S )Nr<   Ú_cancel_messageú
my message)r7   r(   r?   ÚhasattrÚassertEqualr\   r   rJ   r   ÚCancelledErrorÚrun_until_completerC   r   r   r	   Ú!test_future_cancel_message_getterÌ   s    
*z1BaseFutureTests.test_future_cancel_message_getterc                 C   sv   | j | jd}| d¡ d|_|  |jd¡ |  tj¡ | j |¡ W d   ƒ n1 sZ0    Y  |  |jd¡ d S )Nr<   r]   zmy new message)	r7   r(   r   r\   r_   rJ   r   r`   ra   rC   r   r   r	   Ú!test_future_cancel_message_setterÖ   s    
*z1BaseFutureTests.test_future_cancel_message_setterc                 C   sŽ   | j | jd}|  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  tj|j	¡ |  tj|j
¡ |  tj|jd ¡ |  tj|jd ¡ |  | ¡ ¡ d S rB   )r7   r(   r?   r   r   r   rJ   r   r`   r   r   rP   r   r   r=   rC   r   r   r	   Útest_cancelá   s    zBaseFutureTests.test_cancelc                 C   sš   | j | jd}|  tj|j¡ | d¡ |  | ¡ ¡ |  	| 
¡ ¡ |  | ¡ d¡ |  | ¡ d ¡ |  tj|jd ¡ |  tj|jd ¡ |  | ¡ ¡ d S ©Nr<   rI   )r7   r(   rJ   r   rP   r   r   r=   r   r?   r   r_   r   r   r   rC   r   r   r	   Útest_resultì   s    
zBaseFutureTests.test_resultc                 C   s°   t ƒ }| j| jd}|  tj|j¡ |  td|j	t
¡ | 	|¡ |  | ¡ ¡ |  | ¡ ¡ |  t |j¡ |  | ¡ |¡ |  tj|jd ¡ |  tj|j	d ¡ |  | ¡ ¡ d S )Nr<   z!StopIteration .* cannot be raised)rQ   r7   r(   rJ   r   rP   r   ÚassertRaisesRegexrK   r   ÚStopIterationr=   r   r?   r   r   r_   r   r   )r   Úexcr   r   r   r	   Útest_exceptionù   s    ÿ
zBaseFutureTests.test_exceptionc                 C   s,   | j | jd}| t¡ |  | ¡ t¡ d S rB   )r7   r(   r   rQ   ÚassertIsInstancer   rC   r   r   r	   Útest_exception_class  s    
z$BaseFutureTests.test_exception_classc                    sn   | j | jd‰ ‡ fdd„}|ƒ }|  t|ƒd¡ |  t|ƒˆ ¡ ˆ  d¡ |  t|ƒd¡ |  t|ƒd¡ d S )Nr<   c                  3   s2   dV  ˆ E d H } d| fV  ˆ E d H }d|fV  d S )NÚAÚBÚCr   )ÚxÚyr   r   r	   Úfixture  s
    


z6BaseFutureTests.test_yield_from_twice.<locals>.fixturerm   rI   )rn   rI   )ro   rI   )r7   r(   r_   Únextr   )r   rr   r.   r   r   r	   Útest_yield_from_twice  s    
z%BaseFutureTests.test_yield_from_twicec              
   C   s¬  | j  d¡ | j| j d}|jd }|  t|ƒd| jj› d|d › d|d › d	¡ | ¡  | j  d
¡ | j| j d}|  t|ƒd| jj› d¡ | ¡  | j| j d}| ¡  |  t|ƒd| jj› d¡ | j| j d}| 	d¡ |  t|ƒd| jj› d¡ |  | 
¡ d¡ tƒ }| j| j d}| |¡ |  t|ƒd| jj› d¡ |  | ¡ |¡ dd„ }| j| j d}	|	 t¡ |tƒ}
|  t|	ƒd| jj d|
  ¡ |	 ¡  |  t|	ƒd| jj› d¡ | j| j d}| t¡ | t¡ |tƒ}|tƒ}|  t|ƒd| jj d||f  ¡ | j| j d}| t¡ tdƒD ]}| t¡ q<| t¡ d||f }|  t|ƒd| jj d|  ¡ | ¡  |  t|ƒd| jj› d¡ d S )NTr<   éÿÿÿÿú<z pending created at r   ú:r;   ú>Fz	 pending>z cancelled>é   z finished result=4>z# finished exception=RuntimeError()>c                 S   s(   t  | ¡\}}d| j||f }t |¡S )Nz%s() at %s:%s)Ú
test_utilsZget_function_sourcer"   ÚreÚescape)ÚfuncÚfilenameÚlinenoÚtextr   r   r	   Ú	func_reprB  s    z3BaseFutureTests.test_future_repr.<locals>.func_reprz pending cb=\[%s\]>z pending cb=\[%s, %s\]>é   z%s, <8 more>, %s)r(   Ú	set_debugr7   Ú_source_tracebackr_   rV   r3   r    r   r   r   rQ   r   rE   r   rT   r   ÚassertRegexr   r   Úrange)r   Zf_pending_debugÚframeZ	f_pendingÚf_cancelledZf_resultri   Úf_exceptionr   Zf_one_callbacksZ	fake_reprZf_two_callbacksZ
first_reprZ	last_reprZf_many_callbacksÚiZcb_regexr   r   r	   Útest_future_repr"  s‚    
"þ
ÿ
þ
þ
ÿ


ÿÿ

þ
ÿz BaseFutureTests.test_future_reprc                 C   sè   ddl m} | j| jd}| d¡ | j| jd}|||ƒ |  | ¡ ¡ |  | ¡ d¡ | j| jd}| 	t
ƒ ¡ | j| jd}|||ƒ |  | ¡ ¡ |  t
|j¡ | j| jd}| ¡  | j| jd}|||ƒ |  | ¡ ¡ d S )Nr   )Ú_copy_future_stater<   é
   )Zasyncio.futuresrŒ   r7   r(   r   r?   r   r_   r   r   rQ   rJ   r   r   )r   rŒ   r   Znewfr‰   Znewf_exceptionrˆ   Znewf_cancelledr   r   r	   Útest_copy_stateg  s$    



zBaseFutureTests.test_copy_statec                    sd   | j | jd‰‡fdd„‰ ‡ fdd„}|  td¡ |ƒ  W d   ƒ n1 sN0    Y  ˆ ¡  d S )Nr<   c                   3   s   ˆ E d H  d S r   r   r   ©rZ   r   r	   Úcoro„  s    z'BaseFutureTests.test_iter.<locals>.coroc                     s   ˆ ƒ \} }d S r   r   )Zarg1Zarg2)r   r   r	   Útest‡  s    z'BaseFutureTests.test_iter.<locals>.testzawait wasn't used)r7   r(   rg   rQ   r   )r   r‘   r   )r   rZ   r	   Ú	test_iter  s    $zBaseFutureTests.test_iterc                 C   sD   | j | jd}|  td¡ d|_W d   ƒ n1 s60    Y  d S )Nr<   zcan only be set to FalseT)r7   r(   rg   Ú
ValueErrorÚ_log_tracebackrY   r   r   r	   Útest_log_tracebackŽ  s    z"BaseFutureTests.test_log_tracebackzasyncio.base_events.loggerc                 C   s"   | j | jd}~|  |jj¡ d S rB   )r7   r(   r=   ÚerrorÚcalled©r   Úm_logrZ   r   r   r	   Útest_tb_logger_abandoned“  s    z(BaseFutureTests.test_tb_logger_abandonedc                 C   s6   | j | jd}| tƒ ¡ | ¡  ~|  |jj¡ d S rB   )r7   r(   r   rS   r   r=   r–   r—   r˜   r   r   r	   Ú&test_tb_logger_not_called_after_cancel™  s
    z6BaseFutureTests.test_tb_logger_not_called_after_cancelc                 C   s,   | j | jd}| d¡ ~|  |jj¡ d S re   )r7   r(   r   r=   r–   r—   r˜   r   r   r	   Ú!test_tb_logger_result_unretrieved¡  s    
z1BaseFutureTests.test_tb_logger_result_unretrievedc                 C   s4   | j | jd}| d¡ | ¡  ~|  |jj¡ d S re   )r7   r(   r   r   r=   r–   r—   r˜   r   r   r	   Útest_tb_logger_result_retrieved¨  s
    
z/BaseFutureTests.test_tb_logger_result_retrievedc                 C   sD   | j | jd}| tdƒ¡ ~t | j¡ t ¡  |  |j	j
¡ d S ©Nr<   Zboom)r7   r(   r   rQ   rz   Úrun_brieflyr   Ú
gc_collectr?   r–   r—   r˜   r   r   r	   Ú$test_tb_logger_exception_unretrieved°  s    z4BaseFutureTests.test_tb_logger_exception_unretrievedc                 C   s8   | j | jd}| tdƒ¡ | ¡  ~|  |jj¡ d S rž   )r7   r(   r   rQ   r   r=   r–   r—   r˜   r   r   r	   Ú"test_tb_logger_exception_retrieved¹  s
    z2BaseFutureTests.test_tb_logger_exception_retrievedc                 C   s>   | j | jd}| tdƒ¡ |  t|j¡ ~|  |jj¡ d S rž   )	r7   r(   r   rQ   rJ   r   r=   r–   r—   r˜   r   r   r	   Ú)test_tb_logger_exception_result_retrievedÁ  s
    z9BaseFutureTests.test_tb_logger_exception_result_retrievedc                 C   s|   dd„ }t j d¡}| |d¡}tj|| jd}| j |¡\}}|  t 	|¡¡ |  
|d¡ |  |t ¡ ¡ |jdd d S )Nc                 S   s   | t  ¡ fS r   ©Ú	threadingÚ	get_ident©Úargr   r   r	   ÚrunË  s    z-BaseFutureTests.test_wrap_future.<locals>.runr;   Úoir<   T©Úwait)Ú
concurrentr   ÚThreadPoolExecutorÚsubmitr   r,   r(   ra   r?   r>   r_   ZassertNotEqualr¥   r¦   Úshutdown)r   r©   ÚexÚf1Úf2ÚresÚidentr   r   r	   r/   É  s    z BaseFutureTests.test_wrap_futurec                 C   s(   | j | jd}t |¡}|  ||¡ d S rB   )r7   r(   r   r,   rE   ©r   r²   r³   r   r   r	   Útest_wrap_future_futureÖ  s    
z'BaseFutureTests.test_wrap_future_futurec                    s‚   t  d¡d}‡ fdd„|_dd„ }tj d¡}| |d¡}t |¡}ˆ  	ˆ j
|j¡ |jdd	 W d   ƒ n1 st0    Y  d S )
Nzasyncio.futures.eventsc                      s   ˆ j S r   r<   r   r   r   r	   rM   Ý  rN   zBBaseFutureTests.test_wrap_future_use_global_loop.<locals>.<lambda>c                 S   s   | t  ¡ fS r   r¤   r§   r   r   r	   r©   Þ  s    z=BaseFutureTests.test_wrap_future_use_global_loop.<locals>.runr;   rª   Tr«   )r   ÚpatchZget_event_loopr­   r   r®   r¯   r   r,   rE   r(   rF   r°   )r   Úeventsr©   r±   r²   r³   r   r   r	   Ú test_wrap_future_use_global_loopÛ  s    
z0BaseFutureTests.test_wrap_future_use_global_loopc                 C   sN   t j ¡ }tj|| jd}| ¡  t | j¡ |  	| 
¡ ¡ |  	| 
¡ ¡ d S rB   )r­   r   ÚFuturer   r,   r(   r   rz   rŸ   r?   r   r¶   r   r   r	   Útest_wrap_future_cancelæ  s    
z'BaseFutureTests.test_wrap_future_cancelc                 C   sh   t j ¡ }tj|| jd}| d¡ | ¡  t 	| j¡ |  
| ¡ ¡ |  | ¡ d¡ |  | ¡ ¡ d S re   )r­   r   r»   r   r,   r(   r   r   rz   rŸ   r=   r   r_   r   r?   r¶   r   r   r	   Útest_wrap_future_cancel2î  s    

z(BaseFutureTests.test_wrap_future_cancel2c                 C   sZ   | j  d¡ | j| j d}t ¡ jd }|  |jt¡ |  	|jd d d… t
|df¡ d S )NTr<   r;   éþÿÿÿé   Útest_future_source_traceback)r(   rƒ   r7   ÚsysÚ	_getframeÚf_linenork   r„   Úlistr_   Ú__file__)r   Úfuturer   r   r   r	   rÀ   ø  s    þÿz,BaseFutureTests.test_future_source_tracebackc           	      C   sÈ   | j  |¡ dd„ }|ƒ }| j| j d}| |¡ d }t | j ¡ t ¡  tj	dkrˆd| j
j› d}t|ƒ||jf}|jjtj|d nd}|jjtjd	d |jjd
 d
 }|  |t |tj¡¡ d S )Nc               
   S   s8   z
t ƒ ‚W n( ty2 }  z| W  Y d } ~ S d } ~ 0 0 d S r   )ÚMemoryErrorÚBaseException)ri   r   r   r	   Úmemory_error  s    
zLBaseFutureTests.check_future_exception_never_retrieved.<locals>.memory_errorr<   )r¿   ry   ú^z exception was never retrieved
)Úexc_infoz,^Future/Task exception was never retrieved\nFr   )r(   rƒ   r7   r   rz   rŸ   r   r    rÁ   Úversion_infor3   r    r@   Ú__traceback__r–   Zassert_called_once_withr   ÚANYZ	call_argsr…   r{   ÚcompileÚDOTALL)	r   Údebugr™   rÉ   ri   rÆ   ZregexrË   Úmessager   r   r	   Ú&check_future_exception_never_retrieved  s     

z6BaseFutureTests.check_future_exception_never_retrievedc                 C   s   |   d¡ d S r8   ©rÓ   r   r   r   r	   Ú%test_future_exception_never_retrieved  s    z5BaseFutureTests.test_future_exception_never_retrievedc                 C   s   |   d¡ d S r   rÔ   r   r   r   r	   Ú+test_future_exception_never_retrieved_debug!  s    z;BaseFutureTests.test_future_exception_never_retrieved_debugc                 C   s4   | j | jd}| ¡  t |d¡ |  | ¡ ¡ d S )Nr<   é   )r7   r(   r   r   Z_set_result_unless_cancelledr?   r   rY   r   r   r	   Ú test_set_result_unless_cancelled$  s    z0BaseFutureTests.test_set_result_unless_cancelledc              
   C   s|   | j | jd}| d¡ | ¡ }d }z| d ¡ W n. ty` } z|jd }W Y d }~nd }~0 0 |  d¡ |  |d¡ d S )Nr<   )r;   r×   r   zStopIteration was expected)	r7   r(   r   r   Úsendrh   r5   Zfailr_   )r   rZ   Úfir   r±   r   r   r	   Útest_future_stop_iteration_args*  s    
 
z/BaseFutureTests.test_future_stop_iteration_argsc                 C   s\   | j | jd}t|ƒ}|  t|jttdƒd¡ |  t|jtdƒtdƒ¡ |  t|jt¡ d S )Nr<   Zelephanté    )r7   r(   rX   rJ   rK   ÚthrowrS   rÄ   )r   rZ   rÚ   r   r   r	   Útest_future_iter_throw7  s    

ÿ
ÿz&BaseFutureTests.test_future_iter_throwc                 C   s:   G dd„ dƒ}t dƒD ]}| j| jd}| |ƒ ¡ qd S )Nc                   @   s   e Zd Zdd„ ZdS )z5BaseFutureTests.test_future_del_collect.<locals>.Evilc                 S   s   t  ¡  d S r   )ÚgcZcollectr   r   r   r	   Ú__del__B  s    z=BaseFutureTests.test_future_del_collect.<locals>.Evil.__del__N)r    r!   r"   rà   r   r   r   r	   ÚEvilA  s   rá   éd   r<   )r†   r7   r(   r   )r   rá   rŠ   rZ   r   r   r	   Útest_future_del_collect@  s    z'BaseFutureTests.test_future_del_collect),r    r!   r"   r7   r&   rA   rD   rH   rL   r[   rb   rc   rd   rf   rj   rl   rt   r‹   rŽ   r’   r•   r   r¸   rš   r›   rœ   r   r¡   r¢   r£   r/   r·   rº   r¼   r½   rÀ   rÓ   rÕ   rÖ   rØ   rÛ   rÞ   rã   r1   r   r   r*   r	   r2   f   s\   4
E








	r2   Ú_CFuturezrequires the C _asyncio modulec                   @   s6   e Zd Zz
ejZW n ey(   dZY n0 dd„ ZdS )ÚCFutureTestsNc                 C   sn   | j | jd}|  t¡ |`W d   ƒ n1 s20    Y  |  t¡ |`W d   ƒ n1 s`0    Y  d S rB   )r7   r(   rJ   rR   r   r”   rY   r   r   r	   Útest_future_del_segfaultR  s
    "z%CFutureTests.test_future_del_segfault)r    r!   r"   r   rä   r3   rR   ræ   r   r   r   r	   rå   J  s
   

rå   c                   @   s>   e Zd ZzG dd„ dejƒZeZW n ey8   dZY n0 dS )ÚCSubFutureTestsc                   @   s   e Zd ZdS )zCSubFutureTests.CSubFutureN©r    r!   r"   r   r   r   r	   Ú
CSubFuture^  s   ré   N)r    r!   r"   r   rä   ré   r3   rR   r   r   r   r	   rç   Z  s
   rç   c                   @   s   e Zd ZejZdS )ÚPyFutureTestsN)r    r!   r"   r   Ú	_PyFuturer3   r   r   r   r	   rê   f  s   rê   c                       s|   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	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚBaseFutureDoneCallbackTestsc                    s   t ƒ  ¡  |  ¡ | _d S r   )r%   r&   r'   r(   r   r*   r   r	   r&   l  s    
z!BaseFutureDoneCallbackTests.setUpc                 C   s   t  | j¡ d S r   )rz   rŸ   r(   r   r   r   r	   rŸ   p  s    z'BaseFutureDoneCallbackTests.run_brieflyc                    s   ‡ ‡fdd„}|S )Nc                    s   ˆ   ˆ¡ d S r   )Úappend)rÆ   ©ÚbagÚthingr   r	   Úbag_appenderu  s    z@BaseFutureDoneCallbackTests._make_callback.<locals>.bag_appenderr   )r   rï   rð   rñ   r   rî   r	   Ú_make_callbacks  s    z*BaseFutureDoneCallbackTests._make_callbackc                 C   s   t ‚d S r   ©ÚNotImplementedErrorr   r   r   r	   r7   y  s    z'BaseFutureDoneCallbackTests._new_futurec                 C   s¤   g }|   ¡ }|  |d¡}|  |d¡}|  |d¡}| |¡ | |¡ | |¡ | |¡ | |¡ |  |g ¡ | d¡ |  ¡  |  |ddg¡ |  | ¡ d¡ d S ©NrI   é   râ   Úfoo©r7   rò   rT   rU   r_   r   rŸ   r   ©r   rï   r   Úcb1Úcb2Úcb3r   r   r	   Ú$test_callbacks_remove_first_callback|  s    





z@BaseFutureDoneCallbackTests.test_callbacks_remove_first_callbackc                 C   s¬   g }|   ¡ }|  |d¡}|  |d¡}|  |d¡}| |¡ | |¡ | |¡ | |¡ | |¡ | |¡ |  |g ¡ | d¡ |  ¡  |  |dg¡ |  | ¡ d¡ d S rõ   rø   rù   r   r   r	   Ú/test_callbacks_remove_first_and_second_callback“  s     






zKBaseFutureDoneCallbackTests.test_callbacks_remove_first_and_second_callbackc                 C   s¤   g }|   ¡ }|  |d¡}|  |d¡}|  |d¡}| |¡ | |¡ | |¡ | |¡ | |¡ |  |g ¡ | d¡ |  ¡  |  |ddg¡ |  | ¡ d¡ d S rõ   rø   rù   r   r   r	   Ú$test_callbacks_remove_third_callback«  s    





z@BaseFutureDoneCallbackTests.test_callbacks_remove_third_callbackc                 C   sr   g }|   ¡ }| |  |d¡¡ | |  |d¡¡ |  |g ¡ | d¡ |  ¡  |  |ddg¡ |  | ¡ d¡ d S )NrI   rö   r÷   )r7   rT   rò   r_   r   rŸ   r   )r   rï   r   r   r   r	   Ú$test_callbacks_invoked_on_set_resultÂ  s    
z@BaseFutureDoneCallbackTests.test_callbacks_invoked_on_set_resultc                 C   sd   g }|   ¡ }| |  |d¡¡ |  |g ¡ tƒ }| |¡ |  ¡  |  |dg¡ |  | ¡ |¡ d S )Nrâ   )r7   rT   rò   r_   rQ   r   rŸ   r   )r   rï   r   ri   r   r   r	   Ú'test_callbacks_invoked_on_set_exceptionÐ  s    
zCBaseFutureDoneCallbackTests.test_callbacks_invoked_on_set_exceptionc                 C   sÜ   g }|   ¡ }|  |d¡}|  |d¡}|  |d¡}| |¡ | |¡ |  | |¡d¡ |  | |¡d¡ | |¡ tdƒD ]}| |¡ qz|  | |¡d¡ |  |g ¡ | d¡ |  ¡  |  |dg¡ |  | ¡ d¡ d S )Nr;   r×   r¿   r   é   é   r÷   )	r7   rò   rT   r_   rU   r†   r   rŸ   r   )r   rï   r   rú   rû   rü   rŠ   r   r   r	   Útest_remove_done_callbackÞ  s$    



z5BaseFutureDoneCallbackTests.test_remove_done_callbackc                    sL   |   ¡ ‰ ˆ  t¡ tdƒD ]}ˆ  t¡ qG ‡ fdd„dƒ}ˆ  |ƒ ¡ d S )Né?   c                       s   e Zd Z‡ fdd„ZdS )zRBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutation.<locals>.evilc                    s   ˆ   t¡ dS r8   )rU   Úid©r   Úotherr   r   r	   Ú__eq__	  s    
zYBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutation.<locals>.evil.__eq__N©r    r!   r"   r	  r   r   r   r	   Úevil  s   r  ©r7   rT   Ústrr†   r  rU   ©r   Ú_r  r   r   r	   Ú(test_remove_done_callbacks_list_mutationÿ  s    
zDBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutationc                 C   sH   dd„ }|   ¡ }| |¡ | t¡ | t¡ | d¡ t | j¡ d S )Nc                 S   s   |   t¡ d S r   )rU   r  r   r   r   r	   Úmut  s    zPBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_1.<locals>.mutr;   )r7   rT   r  r   rz   rŸ   r(   )r   r  rZ   r   r   r	   Ú'test_schedule_callbacks_list_mutation_1  s    



zCBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_1c                    sX   |   ¡ ‰ˆ t¡ tdƒD ]}ˆ t¡ qd‰d‰ G ‡ ‡‡fdd„dƒ}ˆ |ƒ ¡ d S )Nr  râ   r   c                       s   e Zd Z‡ ‡‡fdd„ZdS )zQBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_2.<locals>.evilc                    s   ˆ d7 ‰ ˆ ˆk rˆ  t¡ dS )Nr;   F)rT   r  r  ©Z	extra_cbsrZ   Zmax_extra_cbsr   r	   r	  )  s    
zXBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_2.<locals>.evil.__eq__Nr
  r   r  r   r	   r  (  s   r  r  r  r   r  r	   Ú'test_schedule_callbacks_list_mutation_2  s    
zCBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_2)r    r!   r"   r&   rŸ   rò   r7   rý   rþ   rÿ   r   r  r  r  r  r  r1   r   r   r*   r	   rì   j  s   !rì   c                   @   s   e Zd Zdd„ ZdS )ÚCFutureDoneCallbackTestsc                 C   s   t j| jdS rB   ©r   rä   r(   r   r   r   r	   r7   8  s    z$CFutureDoneCallbackTests._new_futureN©r    r!   r"   r7   r   r   r   r	   r  3  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚCSubFutureDoneCallbackTestsc                 C   s   G dd„ dt jƒ}|| jdS )Nc                   @   s   e Zd ZdS )z;CSubFutureDoneCallbackTests._new_future.<locals>.CSubFutureNrè   r   r   r   r	   ré   B  s   ré   r<   r  )r   ré   r   r   r	   r7   A  s    z'CSubFutureDoneCallbackTests._new_futureNr  r   r   r   r	   r  <  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚPyFutureDoneCallbackTestsc                 C   s   t j| jdS rB   )r   rë   r(   r   r   r   r	   r7   J  s    z%PyFutureDoneCallbackTests._new_futureNr  r   r   r   r	   r  G  s   r  c                       s,   e Zd Zdd„ Z‡ fdd„Zdd„ Z‡  ZS )ÚBaseFutureInheritanceTestsc                 C   s   t ‚d S r   ró   r   r   r   r	   Ú_get_future_clsP  s    z*BaseFutureInheritanceTests._get_future_clsc                    s&   t ƒ  ¡  |  ¡ | _|  | jj¡ d S r   r$   r   r*   r   r	   r&   S  s    

z BaseFutureInheritanceTests.setUpc                 C   s\   |   ¡ }G dd„ d|ƒ}|| jd}|  td¡ | ¡  W d   ƒ n1 sN0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zQBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFutc                 _   s   d S r   r   r4   r   r   r	   r9   ]  s    zZBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFut.__init__N)r    r!   r"   r9   r   r   r   r	   ÚMyFut\  s   r  r<   z!Future object is not initialized.)r  r(   rg   rQ   rG   )r   r3   r  rZ   r   r   r	   Ú'test_inherit_without_calling_super_initX  s    þzBBaseFutureInheritanceTests.test_inherit_without_calling_super_init)r    r!   r"   r  r&   r  r1   r   r   r*   r	   r  N  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚPyFutureInheritanceTestsc                 C   s   t jS r   )r   rë   r   r   r   r	   r  k  s    z(PyFutureInheritanceTests._get_future_clsN©r    r!   r"   r  r   r   r   r	   r  i  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚCFutureInheritanceTestsc                 C   s   t jS r   )r   rä   r   r   r   r	   r  s  s    z'CFutureInheritanceTests._get_future_clsNr  r   r   r   r	   r   o  s   r   Ú__main__)&Ú__doc__Úconcurrent.futuresr­   rß   r{   rÁ   r¥   Zunittestr   r   r   Ztest.test_asyncior   rz   r‘   r   r
   r   r   r   r   ZTestCaser#   r2   Z
skipUnlessr^   rå   rç   rê   rì   r  r  r  r  r  r   r    Úmainr   r   r   r	   Ú<module>   sv   3   gÿÿ
 Jÿÿÿÿ	ÿÿÿÿ
