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"   |   ¡ 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'   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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   )r4   Ú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   r@   r	   r	   r	   r
   ÚMyFuturev   s   rA   é   ©r)   )
ÚassertFalser   ÚisfutureÚ
assertTruer   ZMockr8   r)   Útyper   )r   rA   r   r	   r	   r
   Útest_isfutureu   s    zBaseFutureTests.test_isfuturec                 C   sD   | j | jd}|  | ¡ ¡ |  | ¡ ¡ | ¡  |  | ¡ ¡ d S ©NrC   )r8   r)   rD   r   r   r   rF   ©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_looprJ   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 )NrC   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
   rT   ¹   rU   )r4   Ú__new__r)   rQ   r   ÚInvalidStateErrorr   r   ÚRuntimeErrorÚAttributeErrorr   r   Ú	Exceptionr   Úadd_done_callbackÚremove_done_callbackÚreprÚ	__await__ÚiterrD   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 )NrC   Ú_cancel_messageú
my message)r8   r)   rF   Úhasattrr:   rc   r   rQ   r   ÚCancelledErrorÚrun_until_completerJ   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 )NrC   rd   zmy new message)	r8   r)   r   rc   r:   rQ   r   rf   rg   rJ   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 rI   )r8   r)   rF   r   r   r   rQ   r   rf   r   r   rW   r   r   rD   rJ   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 ©NrC   rP   )r8   r)   rQ   r   rW   r   r   rD   r   rF   r   r:   r   r   r   rJ   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 )NrC   z!StopIteration .* cannot be raised)rX   r8   r)   rQ   r   rW   r   ÚassertRaisesRegexrR   r   ÚStopIterationrD   r   rF   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 rI   )r8   r)   r   rX   r<   r   rJ   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 )NrC   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>.fixturerr   rP   )rs   rP   )rt   rP   )r8   r)   r:   Únextr   )r   rw   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 )NTrC   éÿÿÿÿú<z pending created at r   ú:rB   ú>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_debugr8   Ú_source_tracebackr:   r]   r4   r!   r   r   r   rX   r   rL   r   r[   r   ÚassertRegexr   r   Úrange)r   Zf_pending_debugÚframeZ	f_pendingÚf_cancelledZf_resultro   Ú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_staterC   é
   )Zasyncio.futuresr‘   r8   r)   r   rF   r   r:   r   r   rX   rQ   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 )NrC   c                   3   s   ˆ E d H  d S r   r	   r	   ©ra   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)   rm   rX   r   )r   r–   r	   )r•   ra   r
   Ú	test_iter†  s    $zBaseFutureTests.test_iterc                 C   sD   | j | jd}|  td¡ d|_W d   ƒ n1 s60    Y  d S )NrC   zcan only be set to FalseT)r8   r)   rm   Ú
ValueErrorÚ_log_tracebackr`   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 rI   )r8   r)   rD   ÚerrorÚcalled©r   Úm_logra   r	   r	   r
   Útest_tb_logger_abandoned˜  s    z(BaseFutureTests.test_tb_logger_abandonedc                 C   s6   | j | jd}| tƒ ¡ | ¡  ~|  |jj¡ d S rI   )r8   r)   r   rZ   r   rD   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 rk   )r8   r)   r   rD   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 rk   )r8   r)   r   r   rD   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 ©NrC   Zboom)r8   r)   r   rX   r   Úrun_brieflyr   Ú
gc_collectrF   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   rX   r   rD   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   rX   rQ   r   rD   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>.runrB   ÚoirC   T©Úwait)Ú
concurrentr   ÚThreadPoolExecutorÚsubmitr   r-   r)   rg   rF   rE   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 rI   )r8   r)   r   r-   rL   ©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   rC   r	   r   r	   r
   rT   â  rU   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>.runrB   r¯   Tr°   )r   ÚpatchZget_event_loopr²   r   r³   r´   r   r-   rL   r)   rM   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 rI   )r²   r   ÚFuturer   r-   r)   r   r   r¤   rF   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 rk   )r²   r   rÀ   r   r-   r)   r   r   r   r¤   rD   r   r:   r   rF   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 )NTrC   rB   éþÿÿÿé   Útest_future_source_traceback)r)   rˆ   r8   Ú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)ro   r	   r	   r
   Úmemory_error  s    
zLBaseFutureTests.check_future_exception_never_retrieved.<locals>.memory_errorrC   )rÄ   r~   ú^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!   rG   Ú__traceback__r›   Zassert_called_once_withr   ÚANYZ	call_argsrŠ   r€   ÚcompileÚDOTALL)	r   Údebugrž   rÍ   ro   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 )NrC   é   )r8   r)   r   r   Z_set_result_unless_cancelledrF   r   r`   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 )NrC   )rB   rÛ   r   zStopIteration was expected)	r8   r)   r   r    Úsendrn   r6   Zfailr:   )r   ra   Ú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 )NrC   Zelephanté    )r8   r)   r_   rQ   rR   ÚthrowrZ   rÉ   )r   ra   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   rC   )r‹   r8   r)   r   )r   rå   r   ra   r	   r	   r
   Útest_future_del_collectE  s    z'BaseFutureTests.test_future_del_collect)-r!   r"   r#   r8   r'   r>   rH   rK   rO   rS   rb   rh   ri   rj   rl   rp   rq   ry   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 rI   )r8   r)   rQ   rY   r   r™   r`   r	   r	   r
   Útest_future_del_segfaultW  s
    "z%CFutureTests.test_future_del_segfault)r!   r"   r#   r   rè   r4   rY   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í   r4   rY   r	   r	   r	   r
   rë   _  s
   rë   c                   @   s   e Zd ZejZdS )ÚPyFutureTestsN)r!   r"   r#   r   Ú	_PyFuturer4   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
   r8   ~  s    z'BaseFutureDoneCallbackTests._new_futurec                 C   s¤   g }|   ¡ }|  |d¡}|  |d¡}|  |d¡}| |¡ | |¡ | |¡ | |¡ | |¡ |  |g ¡ | d¡ |  ¡  |  |ddg¡ |  | ¡ d¡ d S ©NrP   é   ræ   Úfoo©r8   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 )NrP   rú   rû   )r8   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æ   )r8   r[   rö   r:   rX   r   r¤   r   )r   ró   r   ro   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 )NrB   rÛ   rÄ   r   é   é   rû   )	r8   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  ©r8   r[   r9   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\   r9   r   r	   r	   r
   Úmut  s    zPBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_1.<locals>.mutrB   )r8   r[   r9   r   r   r¤   r)   )r   r  ra   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 )NrB   F)r[   r
  r  ©Z	extra_cbsra   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ð   o  s   !rð   c                   @   s   e Zd Zdd„ ZdS )ÚCFutureDoneCallbackTestsc                 C   s   t j| jdS rI   ©r   rè   r)   r   r	   r	   r
   r8   =  s    z$CFutureDoneCallbackTests._new_futureN©r!   r"   r#   r8   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í   rC   r  )r   rí   r	   r	   r
   r8   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 rI   )r   rï   r)   r   r	   r	   r
   r8   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	   r5   r	   r	   r
   r@   b  s    zZBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFut.__init__N)r!   r"   r#   r@   r	   r	   r	   r
   ÚMyFuta  s   r  rC   z!Future object is not initialized.)r  r)   rm   rX   rN   )r   r4   r  ra   r	   r	   r
   Ú'test_inherit_without_calling_super_init]  s    þzBBaseFutureInheritanceTests.test_inherit_without_calling_super_init)r!   r"   r#   r  r'   r   r2   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$   r3   Z
skipUnlessre   ré   rë   rî   rð   r  r  r  r  r!  r#  r!   Úmainr	   r	   r	   r
   Ú<module>   sx   3   lÿÿ
 Jÿÿÿÿ	ÿÿÿÿ
