a
    åze.n  ã                   @   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	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)ÚGenericAlias)Úfutures)Úutils)Úsupportc                   C   s   t  d ¡ d S ©N)ÚasyncioZset_event_loop_policy© r	   r	   ú4/usr/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(   r1   r2   Ú__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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e d'¡d4d5„ ƒZd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"d>d?„ Z#d@dA„ Z$e d'¡dBdC„ ƒZ%dDdE„ Z&dFdG„ Z'dHdI„ Z(dJdK„ Z)dLdM„ Z*dNdO„ Z+‡  Z,S )PÚ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*   | j t }|  |jtf¡ |  |t¡ d S r   )r5   ÚstrÚassertEqualÚ__args__ÚassertIsInstancer   )r   Úfuturer	   r	   r
   Útest_generic_aliasp   s    
z"BaseFutureTests.test_generic_aliasc                 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__y   s    z8BaseFutureTests.test_isfuture.<locals>.MyFuture.__init__)r"   r#   r$   r    rA   r	   r	   r	   r
   ÚMyFuturev   s   rB   é   ©r*   )
ÚassertFalser   ÚisfutureÚ
assertTruer   ZMockr9   r*   Útyper   )r   rB   r   r	   r	   r
   Útest_isfutureu   s    zBaseFutureTests.test_isfuturec                 C   sD   | j | jd}|  | ¡ ¡ |  | ¡ ¡ | ¡  |  | ¡ ¡ d S ©NrD   )r9   r*   rE   r   r   r   rG   ©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*   r9   ÚassertIsÚ_loopÚget_looprK   r	   r	   r
   Ú"test_init_constructor_default_loop“   s    z2BaseFutureTests.test_init_constructor_default_loopc                 C   s   |   t| jd¡ d S )Né*   )ÚassertRaisesÚ	TypeErrorr9   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 )NrD   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
   rU   ¹   rV   )r5   Ú__new__r*   rR   r   ÚInvalidStateErrorr   r   ÚRuntimeErrorÚAttributeErrorr   r   Ú	Exceptionr   Úadd_done_callbackÚremove_done_callbackÚreprÚ	__await__ÚiterrE   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 )NrD   Ú_cancel_messageú
my message)r9   r*   rG   Úhasattrr;   rd   r   rR   r   ÚCancelledErrorÚrun_until_completerK   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 )NrD   re   zmy new message)	r9   r*   r   rd   r;   rR   r   rg   rh   rK   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 rJ   )r9   r*   rG   r   r   r   rR   r   rg   r   r   rX   r   r   rE   rK   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 ©NrD   rQ   )r9   r*   rR   r   rX   r   r   rE   r   rG   r   r;   r   r   r   rK   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 )NrD   z!StopIteration .* cannot be raised)rY   r9   r*   rR   r   rX   r   ÚassertRaisesRegexrS   r   ÚStopIterationrE   r   rG   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 rJ   )r9   r*   r   rY   r=   r   rK   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 )NrD   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>.fixturers   rQ   )rt   rQ   )ru   rQ   )r9   r*   r;   Únextr   )r   rx   r0   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 )NTrD   éÿÿÿÿú<z pending created at r   ú:rC   ú>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_reprG  s    z3BaseFutureTests.test_future_repr.<locals>.func_reprz pending cb=\[%s\]>z pending cb=\[%s, %s\]>é   z%s, <8 more>, %s)r*   Ú	set_debugr9   Ú_source_tracebackr;   r^   r5   r"   r   r   r   rY   r   rM   r   r\   r   ÚassertRegexr   r   Úrange)r   Zf_pending_debugÚframeZ	f_pendingÚf_cancelledZf_resultrp   Ú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_staterD   é
   )Zasyncio.futuresr’   r9   r*   r   rG   r   r;   r   r   rY   rR   r   r   )r   r’   r   Znewfr   Znewf_exceptionrŽ   Znewf_cancelledr	   r	   r
   Útest_copy_statel  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 )NrD   c                   3   s   ˆ E d H  d S r   r	   r	   ©rb   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)r9   r*   rn   rY   r   )r   r—   r	   )r–   rb   r
   Ú	test_iter†  s    $zBaseFutureTests.test_iterc                 C   sD   | j | jd}|  td¡ d|_W d   ƒ n1 s60    Y  d S )NrD   zcan only be set to FalseT)r9   r*   rn   Ú
ValueErrorÚ_log_tracebackra   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 rJ   )r9   r*   rE   ÚerrorÚcalled©r   Úm_logrb   r	   r	   r
   Útest_tb_logger_abandoned˜  s    z(BaseFutureTests.test_tb_logger_abandonedc                 C   s6   | j | jd}| tƒ ¡ | ¡  ~|  |jj¡ d S rJ   )r9   r*   r   r[   r   rE   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 rl   )r9   r*   r   rE   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 rl   )r9   r*   r   r   rE   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 ©NrD   Zboom)r9   r*   r   rY   r€   Úrun_brieflyr   Ú
gc_collectrG   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¤   )r9   r*   r   rY   r   rE   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¤   )	r9   r*   r   rY   rR   r   rE   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>.runrC   ÚoirD   T©Úwait)Ú
concurrentr   ÚThreadPoolExecutorÚsubmitr   r.   r*   rh   rG   rF   r;   ZassertNotEqualr«   r¬   Úshutdown)r   r¯   ÚexÚf1Úf2ÚresÚidentr	   r	   r
   r1   Î  s    z BaseFutureTests.test_wrap_futurec                 C   s(   | j | jd}t |¡}|  ||¡ d S rJ   )r9   r*   r   r.   rM   ©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   rD   r	   r   r	   r
   rU   â  rV   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>.runrC   r°   Tr±   )r   ÚpatchZget_event_loopr³   r   r´   rµ   r   r.   rM   r*   rN   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 rJ   )r³   r   ÚFuturer   r.   r*   r   r€   r¥   rG   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 rl   )r³   r   rÁ   r   r.   r*   r   r   r€   r¥   rE   r   r;   r   rG   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 )NTrD   rC   éþÿÿÿé   Útest_future_source_traceback)r*   r‰   r9   ÚsysÚ	_getframeÚf_linenor=   rŠ   Úlistr;   Ú__file__)r   r>   r…   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)rp   r	   r	   r
   Úmemory_error  s    
zLBaseFutureTests.check_future_exception_never_retrieved.<locals>.memory_errorrD   )rÅ   r   ú^z exception was never retrieved
)Úexc_infoz,^Future/Task exception was never retrieved\nFr   )r*   r‰   r9   r   r€   r¥   r   r¦   rÇ   Úversion_infor5   r"   rH   Ú__traceback__rœ   Zassert_called_once_withr   ÚANYZ	call_argsr‹   r   ÚcompileÚDOTALL)	r   ÚdebugrŸ   rÎ   rp   r>   ZregexrÐ   Úmessager	   r	   r
   Ú&check_future_exception_never_retrieved  s     

z6BaseFutureTests.check_future_exception_never_retrievedc                 C   s   |   d¡ d S r@   ©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 )NrD   é   )r9   r*   r   r   Z_set_result_unless_cancelledrG   r   ra   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 )NrD   )rC   rÜ   r   zStopIteration was expected)	r9   r*   r   r!   Úsendro   r7   Zfailr;   )r   rb   Ú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 )NrD   Zelephanté    )r9   r*   r`   rR   rS   Úthrowr[   rÊ   )r   rb   rß   r	   r	   r
   Útest_future_iter_throw<  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__G  s    z=BaseFutureTests.test_future_del_collect.<locals>.Evil.__del__N)r"   r#   r$   rå   r	   r	   r	   r
   ÚEvilF  s   ræ   éd   rD   )rŒ   r9   r*   r   )r   ræ   r   rb   r	   r	   r
   Útest_future_del_collectE  s    z'BaseFutureTests.test_future_del_collect)-r"   r#   r$   r9   r(   r?   rI   rL   rP   rT   rc   ri   rj   rk   rm   rq   rr   rz   r‘   r”   r˜   r›   r   r¾   r    r¡   r¢   r£   r§   r¨   r©   r1   r½   rÀ   rÂ   rÃ   rÆ   rØ   rÚ   rÛ   rÝ   rà   rã   rè   r3   r	   r	   r,   r
   r4   f   s^   4
E








	r4   Ú_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 rJ   )r9   r*   rR   rZ   r    rš   ra   r	   r	   r
   Útest_future_del_segfaultW  s
    "z%CFutureTests.test_future_del_segfault)r"   r#   r$   r   ré   r5   rZ   rë   r	   r	   r	   r
   rê   O  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
   Ú
CSubFuturec  s   rî   N)r"   r#   r$   r   ré   rî   r5   rZ   r	   r	   r	   r
   rì   _  s
   rì   c                   @   s   e Zd ZejZdS )ÚPyFutureTestsN)r"   r#   r$   r   Ú	_PyFuturer5   r	   r	   r	   r
   rï   k  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(   q  s    
z!BaseFutureDoneCallbackTests.setUpc                 C   s   t  | j¡ d S r   )r€   r¥   r*   r   r	   r	   r
   r¥   u  s    z'BaseFutureDoneCallbackTests.run_brieflyc                    s   ‡ ‡fdd„}|S )Nc                    s   ˆ   ˆ¡ d S r   )Úappend)r>   ©ÚbagÚthingr	   r
   Úbag_appenderz  s    z@BaseFutureDoneCallbackTests._make_callback.<locals>.bag_appenderr	   )r   rô   rõ   rö   r	   ró   r
   Ú_make_callbackx  s    z*BaseFutureDoneCallbackTests._make_callbackc                 C   s   t ‚d S r   ©ÚNotImplementedErrorr   r	   r	   r
   r9   ~  s    z'BaseFutureDoneCallbackTests._new_futurec                 C   s¤   g }|   ¡ }|  |d¡}|  |d¡}|  |d¡}| |¡ | |¡ | |¡ | |¡ | |¡ |  |g ¡ | d¡ |  ¡  |  |ddg¡ |  | ¡ d¡ d S ©NrQ   é   rç   Úfoo©r9   r÷   r\   r]   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 )NrQ   rû   rü   )r9   r\   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ç   )r9   r\   r÷   r;   rY   r   r¥   r   )r   rô   r   rp   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 )NrC   rÜ   rÅ   r   é   é   rü   )	r9   r÷   r\   r;   r]   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 r@   )r]   Ú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  ©r9   r\   r:   rŒ   r  r]   ©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   )r]   r:   r   r	   r	   r
   Úmut  s    zPBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_1.<locals>.mutrC   )r9   r\   r:   r   r€   r¥   r*   )r   r  rb   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 )NrC   F)r\   r  r  ©Z	extra_cbsrb   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÷   r9   r  r  r  r  r  r	  r  r  r  r3   r	   r	   r,   r
   rñ   o  s   !rñ   c                   @   s   e Zd Zdd„ ZdS )ÚCFutureDoneCallbackTestsc                 C   s   t j| jdS rJ   ©r   ré   r*   r   r	   r	   r
   r9   =  s    z$CFutureDoneCallbackTests._new_futureN©r"   r#   r$   r9   r	   r	   r	   r
   r  8  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î   G  s   rî   rD   r  )r   rî   r	   r	   r
   r9   F  s    z'CSubFutureDoneCallbackTests._new_futureNr  r	   r	   r	   r
   r  A  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚPyFutureDoneCallbackTestsc                 C   s   t j| jdS rJ   )r   rð   r*   r   r	   r	   r
   r9   O  s    z%PyFutureDoneCallbackTests._new_futureNr  r	   r	   r	   r
   r  L  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_clsU  s    z*BaseFutureInheritanceTests._get_future_clsc                    s&   t ƒ  ¡  |  ¡ | _|  | jj¡ d S r   r&   r   r,   r	   r
   r(   X  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	   r6   r	   r	   r
   rA   b  s    zZBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFut.__init__N)r"   r#   r$   rA   r	   r	   r	   r
   ÚMyFuta  s   r   rD   z!Future object is not initialized.)r  r*   rn   rY   rO   )r   r5   r   rb   r	   r	   r
   Ú'test_inherit_without_calling_super_init]  s    þzBBaseFutureInheritanceTests.test_inherit_without_calling_super_init)r"   r#   r$   r  r(   r!  r3   r	   r	   r,   r
   r  S  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  p  s    z(PyFutureInheritanceTests._get_future_clsN©r"   r#   r$   r  r	   r	   r	   r
   r"  n  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  x  s    z'CFutureInheritanceTests._get_future_clsNr#  r	   r	   r	   r
   r$  t  s   r$  Ú__main__)(Ú__doc__Úconcurrent.futuresr³   rä   r   rÇ   r«   Zunittestr   Útypesr   r   r   Ztest.test_asyncior   r€   r—   r   r   r   r   r   r   ZTestCaser%   r4   Z
skipUnlessrf   rê   rì   rï   rñ   r  r  r  r  r"  r$  r"   Úmainr	   r	   r	   r
   Ú<module>   sx   3   lÿÿ
 Jÿÿÿÿ	ÿÿÿÿ
