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   | j d ur| j ‚| jS r   )r   r   r   r   r   r	   Úresult8   s    
zDuckFuture.resultc                 C   s   | j S r   ©r   r   r   r   r	   Ú	exception>   s    zDuckFuture.exceptionc                 C   s
   || _ d S r   )r   )r   r   r   r   r	   Ú
set_resultB   s    zDuckFuture.set_resultc                 C   s
   || _ d S r   r   )r   r   r   r   r	   Úset_exceptionG   s    zDuckFuture.set_exceptionc                 c   s   |   ¡ sd| _| V  |  ¡ 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 |¡}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 |¡}d S r   )r   r   Zensure_futurer.   r   r   r	   Útest_ensure_future`   s    
zDuckTests.test_ensure_future)r!   r"   r#   r'   r0   r1   Ú__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   r:   r   r   r   r	   ÚMyFutureq   s   r;   é   ©r)   )
ÚassertFalser   ÚisfutureÚ
assertTruer   ZMockr8   r)   Útyper   )r   r;   r   r   r   r	   Útest_isfuturep   s    zBaseFutureTests.test_isfuturec                 C   sD   | j | jd}|  | ¡ ¡ |  | ¡ ¡ | ¡  |  | ¡ ¡ d S ©Nr=   )r8   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)   r8   ÚassertIsÚ_loopÚget_looprD   r   r   r	   Ú"test_init_constructor_default_loopŽ   s    z2BaseFutureTests.test_init_constructor_default_loopc                 C   s   |   t| jd¡ d S )Né*   )ÚassertRaisesÚ	TypeErrorr8   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	   rN   ´   rO   )r4   Ú__new__r)   rK   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)r8   r)   r@   ÚhasattrÚassertEqualr]   r   rK   r   ÚCancelledErrorÚrun_until_completerD   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)	r8   r)   r   r]   r`   rK   r   ra   rb   rD   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 rC   )r8   r)   r@   r   r   r   rK   r   ra   r   r   rQ   r   r   r>   rD   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=   rJ   )r8   r)   rK   r   rQ   r   r   r>   r   r@   r   r`   r   r   r   rD   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)rR   r8   r)   rK   r   rQ   r   ÚassertRaisesRegexrL   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 rC   )r8   r)   r   rR   ÚassertIsInstancer   rD   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>.fixturern   rJ   )ro   rJ   )rp   rJ   )r8   r)   r`   Únextr   )r   rs   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_debugr8   Ú_source_tracebackr`   rW   r4   r!   r   r   r   rR   r   rF   r   rU   r   ÚassertRegexr   r   Úrange)r   Zf_pending_debugÚframeZ	f_pendingÚf_cancelledZf_resultrj   Ú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   r8   r)   r   r@   r   r`   r   r   rR   rK   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   ©r[   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)r8   r)   rh   rR   r   )r   r’   r   )r‘   r[   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)r8   r)   rh   Ú
ValueErrorÚ_log_tracebackrZ   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 rC   )r8   r)   r>   ÚerrorÚcalled©r   Úm_logr[   r   r   r	   Útest_tb_logger_abandoned“  s    z(BaseFutureTests.test_tb_logger_abandonedc                 C   s6   | j | jd}| tƒ ¡ | ¡  ~|  |jj¡ d S rC   )r8   r)   r   rT   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 rf   )r8   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 rf   )r8   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)r8   r)   r   rR   r{   Ú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Ÿ   )r8   r)   r   rR   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Ÿ   )	r8   r)   r   rR   rK   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)   rb   r@   r?   r`   ZassertNotEqualr¦   r§   Úshutdown)r   rª   ÚexÚf1Úf2ÚresÚidentr   r   r	   r0   É  s    z BaseFutureTests.test_wrap_futurec                 C   s(   | j | jd}t |¡}|  ||¡ d S rC   )r8   r)   r   r-   rF   ©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	   rN   Ý  rO   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-   rF   r)   rG   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 rC   )r®   r   ÚFuturer   r-   r)   r   r{   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 rf   )r®   r   r¼   r   r-   r)   r   r   r{   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„   r8   ÚsysÚ	_getframeÚf_linenorl   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)rj   r   r   r	   Úmemory_error  s    
zLBaseFutureTests.check_future_exception_never_retrieved.<locals>.memory_errorr=   )rÀ   rz   ú^z exception was never retrieved
)Úexc_infoz,^Future/Task exception was never retrieved\nFr   )r)   r„   r8   r   r{   r    r   r¡   rÂ   Úversion_infor4   r!   rA   Ú__traceback__r—   Zassert_called_once_withr   ÚANYZ	call_argsr†   r|   ÚcompileÚDOTALL)	r   Údebugrš   rÊ   rj   rÇ   ZregexrÌ   Úmessager   r   r	   Ú&check_future_exception_never_retrieved  s     

z6BaseFutureTests.check_future_exception_never_retrievedc                 C   s   |   d¡ d S r9   ©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=   é   )r8   r)   r   r   Z_set_result_unless_cancelledr@   r   rZ   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)	r8   r)   r   r    Úsendri   r6   Zfailr`   )r   r[   Ú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é    )r8   r)   rY   rK   rL   ÚthrowrT   rÅ   )r   r[   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‡   r8   r)   r   )r   râ   r‹   r[   r   r   r	   Útest_future_del_collect@  s    z'BaseFutureTests.test_future_del_collect),r!   r"   r#   r8   r'   rB   rE   rI   rM   r\   rc   rd   re   rg   rk   rm   ru   rŒ   r   r“   r–   r   r¹   r›   rœ   r   rž   r¢   r£   r¤   r0   r¸   r»   r½   r¾   rÁ   rÔ   rÖ   r×   rÙ   rÜ   rß   rä   r2   r   r   r+   r	   r3   f   s\   4
E








	r3   Ú_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 rC   )r8   r)   rK   rS   r   r•   rZ   r   r   r	   Útest_future_del_segfaultR  s
    "z%CFutureTests.test_future_del_segfault)r!   r"   r#   r   rå   r4   rS   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ê   r4   rS   r   r   r   r	   rè   Z  s
   rè   c                   @   s   e Zd ZejZdS )ÚPyFutureTestsN)r!   r"   r#   r   Ú	_PyFuturer4   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   )r{   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	   r8   y  s    z'BaseFutureDoneCallbackTests._new_futurec                 C   s¤   g }|   ¡ }|  |d¡}|  |d¡}|  |d¡}| |¡ | |¡ | |¡ | |¡ | |¡ |  |g ¡ | d¡ |  ¡  |  |ddg¡ |  | ¡ d¡ d S ©NrJ   é   rã   Úfoo©r8   ró   rU   rV   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 )NrJ   r÷   rø   )r8   rU   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ã   )r8   rU   ró   r`   rR   r   r    r   )r   rð   r   rj   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ø   )	r8   ró   rU   r`   rV   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 r9   )rV   Ú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  ©r8   rU   Ústrr‡   r  rV   ©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   )rV   r  r   r   r   r	   Úmut  s    zPBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_1.<locals>.mutr<   )r8   rU   r  r   r{   r    r)   )r   r  r[   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)rU   r  r  ©Z	extra_cbsr[   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ó   r8   rþ   rÿ   r   r  r  r  r  r  r  r2   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 rC   ©r   rå   r)   r   r   r   r	   r8   8  s    z$CFutureDoneCallbackTests._new_futureN©r!   r"   r#   r8   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	   r8   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 rC   )r   rì   r)   r   r   r   r	   r8   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   r5   r   r   r	   r:   ]  s    zZBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFut.__init__N)r!   r"   r#   r:   r   r   r   r	   ÚMyFut\  s   r  r=   z!Future object is not initialized.)r  r)   rh   rR   rH   )r   r4   r  r[   r   r   r	   Ú'test_inherit_without_calling_super_initX  s    þzBBaseFutureInheritanceTests.test_inherit_without_calling_super_init)r!   r"   r#   r  r'   r  r2   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   r{   r’   r   r
   r   r   r   r   ZTestCaser$   r3   Z
skipUnlessr_   ræ   rè   rë   rí   r  r  r  r  r  r!  r!   Úmainr   r   r   r	   Ú<module>   sv   3   gÿÿ
 Jÿÿÿÿ	ÿÿÿÿ
