o
    JXîhñt  ã                   @   sò  	 d dl Zd dlZd dlZd dlZd dlZd dlZd dl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 dS ),é    N)Úmock)ÚGenericAlias)Úfutures)Úutils)Úsupportc                   C   s   t  d ¡ d S ©N)ÚasyncioZset_event_loop_policy© r	   r	   úH/opt/python-3.10.19/usr/lib/python3.10/test/test_asyncio/test_futures.pyÚtearDownModule   ó   r   c                 C   s   | S r   r	   ©Úfr	   r	   r
   Ú	_fakefunc   ó   r   c                   C   ó   d S r   r	   r	   r	   r	   r
   Úfirst_cb   r   r   c                   C   r   r   r	   r	   r	   r	   r
   Úlast_cb   r   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   ó   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   )ÚassertFalser   r   r   r   r	   r	   r
   Úresult8   s   
zDuckFuture.resultc                 C   s   |   |  ¡ ¡ | jS r   )r   r   r   r   r	   r	   r
   Ú	exception>   s   zDuckFuture.exceptionc                 C   ó"   |   |  ¡ ¡ |  |¡ || _d S r   )r   r   ÚassertIsNotNoner   )r   r   r	   r	   r
   Ú
set_resultB   ó   

zDuckFuture.set_resultc                 C   r!   r   )r   r   r"   r   )r   r    r	   r	   r
   Úset_exceptionG   r$   zDuckFuture.set_exceptionc                 c   s,    |   ¡ sd| _| V  |  |   ¡ ¡ |  ¡ S ©NT)r   Ú_asyncio_future_blockingÚ
assertTruer   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                    ó&   t ƒ  ¡  |  ¡ | _|  | jj¡ d S r   ©ÚsuperÚsetUpÚnew_test_loopÚloopÚ
addCleanupÚcloser   ©Ú	__class__r	   r
   r1   V   ó   

zDuckTests.setUpc                 C   ó    t ƒ }t |¡}|  ||¡ d S r   )r   r   Úwrap_futureÚassertIs©r   r   Úgr	   r	   r
   Útest_wrap_future[   ó   
zDuckTests.test_wrap_futurec                 C   r9   r   )r   r   Zensure_futurer;   r<   r	   r	   r
   Útest_ensure_future`   r?   zDuckTests.test_ensure_future)r*   r+   r,   r1   r>   r@   Ú__classcell__r	   r	   r6   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d'd(„ Z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e d+¡d6d7„ ƒZe d+¡d8d9„ ƒZ d:d;„ Z!d<d=„ Z"d>d?„ Z#d@dA„ Z$dBdC„ Z%dDdE„ Z&dFdG„ Z'dHdI„ Z(e d+¡dJdK„ ƒZ)dLdM„ Z*dNdO„ Z+dPdQ„ Z,dRdS„ Z-dTdU„ Z.dVdW„ Z/‡  Z0S )XÚBaseFutureTestsc                 O   s   | j |i |¤ŽS r   )Úcls©r   ÚargsÚkwargsr	   r	   r
   Ú_new_futureh   ó   zBaseFutureTests._new_futurec                    r.   r   r/   r   r6   r	   r
   r1   k   r8   zBaseFutureTests.setUpc                 C   s*   | j t }|  |jtf¡ |  |t¡ d S r   )rC   Ú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'   rP   r	   r	   r	   r
   ÚMyFuturev   s    rQ   é   ©r3   )
r   r   Úisfuturer(   r   ZMockrG   r3   Útyper   )r   rQ   r   r	   r	   r
   Útest_isfutureu   s   zBaseFutureTests.test_isfuturec                 C   sD   | j | jd}|  | ¡ ¡ |  | ¡ ¡ | ¡  |  | ¡ ¡ d S ©NrS   )rG   r3   r   r   r   r   r(   ©r   r   r	   r	   r
   Útest_initial_stateŒ   s
   z"BaseFutureTests.test_initial_statec                 C   s:   |   td¡ |  ¡  W d   ƒ d S 1 sw   Y  d S )Núno current event loop)ÚassertRaisesRegexÚRuntimeErrorrG   r   r	   r	   r
   Útest_constructor_without_loop“   s   
"ÿz-BaseFutureTests.test_constructor_without_loopc                    s@   ‡ fdd„}ˆ j  |ƒ ¡}ˆ  |jˆ j ¡ ˆ  | ¡ ˆ j ¡ d S )Nc                   “   s
   ˆ   ¡ S r   )rG   r	   r   r	   r
   Útest˜   s   €z?BaseFutureTests.test_constructor_use_running_loop.<locals>.test)r3   Úrun_until_completer;   Ú_loopÚget_loop)r   r^   r   r	   r   r
   Ú!test_constructor_use_running_loop—   s   z1BaseFutureTests.test_constructor_use_running_loopc                 C   sH   t  | j¡ |  t jd ¡ |  ¡ }|  |j| j¡ |  | ¡ | j¡ d S r   )r   Úset_event_loopr3   r4   rG   r;   r`   ra   rX   r	   r	   r
   Ú test_constructor_use_global_loopž   s
   z0BaseFutureTests.test_constructor_use_global_loopc                 C   s   |   t| jd¡ d S )Né*   )ÚassertRaisesÚ	TypeErrorrG   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 sEw   Y  | j j| j | jd}|  tt	f¡ | t¡ W d   ƒ n1 skw   Y  | j j| j | jd}|  tt	f¡ | ¡  W d   ƒ n1 sw   Y  | j j| j | jd}|  tt	f¡ | dd„ ¡ W d   ƒ n1 s¸w   Y  | j j| j | jd}|  tt	f¡ | dd„ ¡ W d   ƒ n1 sàw   Y  | j j| j | jd}zt|ƒ W n tt	fy   Y nw | j j| j | jd}z| ¡  W n
 ty   Y nw | j j| j | jd}zt|ƒ W n
 ty7   Y nw | j j| j | jd}|  | ¡ ¡ |  | ¡ ¡ d S )NrS   c                 S   r   r   r	   r   r	   r	   r
   Ú<lambda>Â   ó    z4BaseFutureTests.test_uninitialized.<locals>.<lambda>c                 S   r   r   r	   r   r	   r	   r
   ri   Æ   rj   )rC   Ú__new__r3   rf   r   ÚInvalidStateErrorr   r    r\   ÚAttributeErrorr#   r%   Ú	Exceptionr   Úadd_done_callbackÚremove_done_callbackÚreprÚ	__await__Úiterr   r   r   ©r   Úfutr	   r	   r
   Útest_uninitializedª   sZ   ÿÿ
ÿÿÿÿÿÿz"BaseFutureTests.test_uninitializedc                 C   s€   | j | jd}|  t|dƒ¡ |  |jd ¡ | d¡ |  tj	¡ | j 
|¡ W d   ƒ n1 s2w   Y  |  |jd¡ d S )NrS   Ú_cancel_messageú
my message)rG   r3   r(   ÚhasattrrJ   rw   r   rf   r   ÚCancelledErrorr_   rX   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 s-w   Y  |  |jd¡ d S )NrS   rx   zmy new message)	rG   r3   r   rw   rJ   rf   r   rz   r_   rX   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 rW   )rG   r3   r(   r   r   r   rf   r   rz   r   r    rl   r#   r%   r   rX   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 ©NrS   re   )rG   r3   rf   r   rl   r   r#   r   r   r(   r   rJ   r    r%   r   rX   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 )NrS   z!StopIteration .* cannot be raised)r\   rG   r3   rf   r   rl   r    r[   rg   r%   ÚStopIterationr   r   r(   r   r   rJ   r#   r   )r   Úexcr   r	   r	   r
   Útest_exception  s   ÿ
zBaseFutureTests.test_exceptionc                 C   s,   | j | jd}| t¡ |  | ¡ t¡ d S rW   )rG   r3   r%   r\   rL   r    rX   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 )NrS   c                  3   s4    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>.fixturer„   re   )r…   re   )r†   re   )rG   r3   rJ   Únextr#   )r   r‰   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 )NTrS   éÿÿÿÿú<z pending created at r   ú:rR   ú>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_reprT  s   
z3BaseFutureTests.test_future_repr.<locals>.func_reprz pending cb=\[%s\]>z pending cb=\[%s, %s\]>é   z%s, <8 more>, %s)r3   Ú	set_debugrG   Ú_source_tracebackrJ   rq   rC   r*   r   r#   r   r\   r%   r;   r    ro   r   ÚassertRegexr   r   Úrange)r   Zf_pending_debugÚframeZ	f_pendingÚf_cancelledZf_resultr   Ú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_repr4  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_staterS   é
   )Zasyncio.futuresr£   rG   r3   r#   r(   r   rJ   r   r%   r\   rf   r   r   )r   r£   r   Znewfr    Znewf_exceptionrŸ   Znewf_cancelledr	   r	   r
   Útest_copy_statey  s$   



zBaseFutureTests.test_copy_statec                    sd   | j | jd‰‡fdd„‰ ‡ fdd„}|  td¡ |ƒ  W d   ƒ n1 s'w   Y  ˆ ¡  d S )NrS   c                   3   s    ˆ E d H  d S r   r	   r	   ©ru   r	   r
   Úcoro–  s   €z'BaseFutureTests.test_iter.<locals>.coroc                     s   ˆ ƒ \} }d S r   r	   )Zarg1Zarg2)r§   r	   r
   r^   ™  r   z'BaseFutureTests.test_iter.<locals>.testzawait wasn't used)rG   r3   r[   r\   r   )r   r^   r	   )r§   ru   r
   Ú	test_iter“  s   ÿzBaseFutureTests.test_iterc                 C   sF   | j | jd}|  td¡ d|_W d   ƒ d S 1 sw   Y  d S )NrS   zcan only be set to FalseT)rG   r3   r[   Ú
ValueErrorÚ_log_tracebackrt   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 rW   )rG   r3   r   ÚerrorÚcalled©r   Úm_logru   r	   r	   r
   Útest_tb_logger_abandoned¥  s   z(BaseFutureTests.test_tb_logger_abandonedc                 C   s6   | j | jd}| tƒ ¡ | ¡  ~|  |jj¡ d S rW   )rG   r3   r%   rn   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 r~   )rG   r3   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 r~   )rG   r3   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 ©NrS   Zboom)rG   r3   r%   r\   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´   )rG   r3   r%   r\   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´   )	rG   r3   r%   r\   rf   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   ó   | t  ¡ fS r   ©Ú	threadingÚ	get_ident©Úargr	   r	   r
   ÚrunÝ  ó   z-BaseFutureTests.test_wrap_future.<locals>.runrR   ÚoirS   T©Úwait)Ú
concurrentr   ÚThreadPoolExecutorÚsubmitr   r:   r3   r_   r(   rT   rJ   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 rW   )rG   r3   r   r:   r;   ©r   rÊ   rË   r	   r	   r
   Útest_wrap_future_futureè  s   
z'BaseFutureTests.test_wrap_future_futurec                 C   sf   dd„ }t j d¡}| |d¡}|  td¡ t |¡ W d   ƒ n1 s&w   Y  |jdd d S )Nc                 S   rº   r   r»   r¾   r	   r	   r
   rÀ   î  rÁ   z:BaseFutureTests.test_wrap_future_without_loop.<locals>.runrR   rÂ   rZ   TrÃ   )	rÅ   r   rÆ   rÇ   r[   r\   r   r:   rÈ   )r   rÀ   rÉ   rÊ   r	   r	   r
   Útest_wrap_future_without_loopí  s   ÿz-BaseFutureTests.test_wrap_future_without_loopc                    sZ   dd„ }t j d¡}| |d¡‰ ‡ fdd„}| j |ƒ ¡}|  | j|j¡ |jdd d S )	Nc                 S   rº   r   r»   r¾   r	   r	   r
   rÀ   ÷  rÁ   z>BaseFutureTests.test_wrap_future_use_running_loop.<locals>.runrR   rÂ   c                   “   s   t  ˆ ¡S r   )r   r:   r	   ©rÊ   r	   r
   r^   û  s   €
z?BaseFutureTests.test_wrap_future_use_running_loop.<locals>.testTrÃ   )	rÅ   r   rÆ   rÇ   r3   r_   r;   r`   rÈ   )r   rÀ   rÉ   r^   rË   r	   rÑ   r
   Ú!test_wrap_future_use_running_loopö  s   z1BaseFutureTests.test_wrap_future_use_running_loopc                 C   sd   t  | j¡ |  t jd ¡ dd„ }tj d¡}| |d¡}t  |¡}|  	| j|j
¡ |jdd d S )Nc                 S   rº   r   r»   r¾   r	   r	   r
   rÀ     rÁ   z=BaseFutureTests.test_wrap_future_use_global_loop.<locals>.runrR   rÂ   TrÃ   )r   rc   r3   r4   rÅ   r   rÆ   rÇ   r:   r;   r`   rÈ   )r   rÀ   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 rW   )rÅ   r   ÚFuturer   r:   r3   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 r~   )rÅ   r   rÔ   r   r:   r3   r#   r   r‘   rµ   r   r   rJ   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 )NTrS   rR   éþÿÿÿé   Útest_future_source_traceback)r3   rš   rG   ÚsysÚ	_getframeÚf_linenorL   r›   ÚlistrJ   Ú__file__)r   rM   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rDd| 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   s0   zt ƒ ‚ ty }  z| W  Y d } ~ S d } ~ ww r   )ÚMemoryErrorÚBaseException)r   r	   r	   r
   Úmemory_error.  s   €ÿzLBaseFutureTests.check_future_exception_never_retrieved.<locals>.memory_errorrS   )rØ   r   ú^z exception was never retrieved
)Úexc_infoz,^Future/Task exception was never retrieved\nFr   )r3   rš   rG   r%   r‘   rµ   r   r¶   rÚ   Úversion_inforC   r*   rU   Ú__traceback__r¬   Zassert_called_once_withr   ÚANYZ	call_argsrœ   r’   ÚcompileÚDOTALL)	r   Údebugr¯   rá   r   rM   Zregexrã   Úmessager	   r	   r
   Ú&check_future_exception_never_retrieved*  s    

z6BaseFutureTests.check_future_exception_never_retrievedc                 C   ó   |   d¡ d S rO   ©rë   r   r	   r	   r
   Ú%test_future_exception_never_retrievedE  r   z5BaseFutureTests.test_future_exception_never_retrievedc                 C   rì   r&   rí   r   r	   r	   r
   Ú+test_future_exception_never_retrieved_debugH  r   z;BaseFutureTests.test_future_exception_never_retrieved_debugc                 C   s4   | j | jd}| ¡  t |d¡ |  | ¡ ¡ d S )NrS   é   )rG   r3   r   r   Z_set_result_unless_cancelledr(   r   rt   r	   r	   r
   Ú test_set_result_unless_cancelledK  s   z0BaseFutureTests.test_set_result_unless_cancelledc              
   C   s|   | j | jd}| d¡ | ¡ }d }z| d ¡ W n ty0 } z|jd }W Y d }~n
d }~ww |  d¡ |  |d¡ d S )NrS   )rR   rð   r   zStopIteration was expected)	rG   r3   r#   r)   Úsendr€   rE   ZfailrJ   )r   ru   Úfir   rÉ   r	   r	   r
   Útest_future_stop_iteration_argsQ  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 )NrS   Zelephanté    )rG   r3   rs   rf   rg   Úthrowrn   rÝ   )r   ru   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                   @   ó   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__i  rÁ   z=BaseFutureTests.test_future_del_collect.<locals>.Evil.__del__N)r*   r+   r,   rú   r	   r	   r	   r
   ÚEvilh  ó    rû   éd   rS   )r   rG   r3   r#   )r   rû   r¡   ru   r	   r	   r
   Útest_future_del_collectg  s
   þz'BaseFutureTests.test_future_del_collect)1r*   r+   r,   rG   r1   rN   rV   rY   r]   rb   rd   rh   rv   r{   r|   r}   r   r‚   rƒ   r‹   r¢   r¥   r¨   r«   r   Zpatchr°   r±   r²   r³   r·   r¸   r¹   r>   rÏ   rÐ   rÒ   rÓ   rÕ   rÖ   rÙ   rë   rî   rï   rñ   rô   r÷   rþ   rA   r	   r	   r6   r
   rB   f   sh    4
E






	

	rB   Ú_CFuturezrequires the C _asyncio modulec                   @   s6   e Zd ZzejZW n ey   dZY nw dd„ ZdS )ÚCFutureTestsNc                 C   sp   | j | jd}|  t¡
 |`W d   ƒ n1 sw   Y  |  t¡ |`W d   ƒ d S 1 s1w   Y  d S rW   )rG   r3   rf   rm   r'   rª   rt   r	   r	   r
   Útest_future_del_segfaulty  s   ÿ"ÿz%CFutureTests.test_future_del_segfault)r*   r+   r,   r   rÿ   rC   rm   r  r	   r	   r	   r
   r   q  s    
ÿr   c                   @   s>   e Zd ZzG dd„ dejƒZeZW dS  ey   dZY dS w )ÚCSubFutureTestsc                   @   ó   e Zd ZdS )zCSubFutureTests.CSubFutureN©r*   r+   r,   r	   r	   r	   r
   Ú
CSubFuture…  ó    r  N)r*   r+   r,   r   rÿ   r  rC   rm   r	   r	   r	   r
   r    s    

ÿr  c                   @   s   e Zd ZejZdS )ÚPyFutureTestsN)r*   r+   r,   r   Ú	_PyFuturerC   r	   r	   r	   r
   r    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dd„ Z‡  ZS )ÚBaseFutureDoneCallbackTestsc                    s   t ƒ  ¡  |  ¡ | _d S r   )r0   r1   r2   r3   r   r6   r	   r
   r1   “  s   
z!BaseFutureDoneCallbackTests.setUpc                 C   s   t  | j¡ d S r   )r‘   rµ   r3   r   r	   r	   r
   rµ   —  rH   z'BaseFutureDoneCallbackTests.run_brieflyc                    s   ‡ ‡fdd„}|S )Nc                    s   ˆ   ˆ¡ d S r   )Úappend)rM   ©ÚbagÚthingr	   r
   Úbag_appenderœ  r   z@BaseFutureDoneCallbackTests._make_callback.<locals>.bag_appenderr	   )r   r  r  r  r	   r  r
   Ú_make_callbackš  s   z*BaseFutureDoneCallbackTests._make_callbackc                 C   ó   t ‚r   ©ÚNotImplementedErrorr   r	   r	   r
   rG      r   z'BaseFutureDoneCallbackTests._new_futurec                 C   s¤   g }|   ¡ }|  |d¡}|  |d¡}|  |d¡}| |¡ | |¡ | |¡ | |¡ | |¡ |  |g ¡ | d¡ |  ¡  |  |ddg¡ |  | ¡ d¡ d S ©Nre   é   rý   Úfoo©rG   r  ro   rp   rJ   r#   rµ   r   ©r   r  r   Úcb1Úcb2Úcb3r	   r	   r
   Ú$test_callbacks_remove_first_callback£  ó   





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Ò  r  z@BaseFutureDoneCallbackTests.test_callbacks_remove_third_callbackc                 C   sr   g }|   ¡ }| |  |d¡¡ | |  |d¡¡ |  |g ¡ | d¡ |  ¡  |  |ddg¡ |  | ¡ d¡ d S )Nre   r  r  )rG   ro   r  rJ   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ý   )rG   ro   r  rJ   r\   r%   rµ   r    )r   r  r   r   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 ]}| |¡ q=|  | |¡d¡ |  |g ¡ | d¡ |  ¡  |  |dg¡ |  | ¡ d¡ d S )NrR   rð   rØ   r   é   é   r  )	rG   r  ro   rJ   rp   r   r#   rµ   r   )r   r  r   r  r  r  r¡   r	   r	   r
   Útest_remove_done_callback  s$   



z5BaseFutureDoneCallbackTests.test_remove_done_callbackc                    óL   |   ¡ ‰ ˆ  t¡ tdƒD ]}ˆ  t¡ qG ‡ fdd„dƒ}ˆ  |ƒ ¡ d S )Né?   c                       ó   e Zd Z‡ fdd„ZdS )zRBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutation.<locals>.evilc                    s   ˆ   t¡ dS rO   )rp   Úid©r   Úotherr¦   r	   r
   Ú__eq__0  s   
zYBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutation.<locals>.evil.__eq__N©r*   r+   r,   r*  r	   r¦   r	   r
   Úevil/  ó    r,  ©rG   ro   rI   r   r'  rp   ©r   Ú_r,  r	   r¦   r
   Ú(test_remove_done_callbacks_list_mutation&  s   
zDBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutationc                    r$  )Nr%  c                       r&  )zOBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_clear.<locals>.evilc                    s   ˆ   |¡ d S r   )rp   r(  r¦   r	   r
   r*  @  r   zVBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_clear.<locals>.evil.__eq__Nr+  r	   r¦   r	   r
   r,  ?  r-  r,  r.  r/  r	   r¦   r
   Ú%test_remove_done_callbacks_list_clear6  s   
zABaseFutureDoneCallbackTests.test_remove_done_callbacks_list_clearc                 C   sH   dd„ }|   ¡ }| |¡ | t¡ | t¡ | d¡ t | j¡ d S )Nc                 S   s   |   t¡ d S r   )rp   rI   r   r	   r	   r
   ÚmutH  r   zPBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_1.<locals>.mutrR   )rG   ro   rI   r#   r‘   rµ   r3   )r   r3  ru   r	   r	   r
   Ú'test_schedule_callbacks_list_mutation_1E  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 )NrR   F)ro   r'  r(  ©Z	extra_cbsru   Zmax_extra_cbsr	   r
   r*  _  s   
zXBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_2.<locals>.evil.__eq__Nr+  r	   r5  r	   r
   r,  ^  s    r,  r.  r/  r	   r5  r
   Ú'test_schedule_callbacks_list_mutation_2R  s   
zCBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_2)r*   r+   r,   r1   rµ   r  rG   r  r  r  r  r   r#  r1  r2  r4  r6  rA   r	   r	   r6   r
   r	  ‘  s    !r	  c                   @   rø   )ÚCFutureDoneCallbackTestsc                 C   ó   t j| jdS rW   ©r   rÿ   r3   r   r	   r	   r
   rG   n  r   z$CFutureDoneCallbackTests._new_futureN©r*   r+   r,   rG   r	   r	   r	   r
   r7  i  ó    r7  c                   @   rø   )ÚCSubFutureDoneCallbackTestsc                 C   s   G dd„ dt jƒ}|| jdS )Nc                   @   r  )z;CSubFutureDoneCallbackTests._new_future.<locals>.CSubFutureNr  r	   r	   r	   r
   r  x  r  r  rS   r9  )r   r  r	   r	   r
   rG   w  s   z'CSubFutureDoneCallbackTests._new_futureNr:  r	   r	   r	   r
   r<  r  r;  r<  c                   @   rø   )ÚPyFutureDoneCallbackTestsc                 C   r8  rW   )r   r  r3   r   r	   r	   r
   rG   €  r   z%PyFutureDoneCallbackTests._new_futureNr:  r	   r	   r	   r
   r=  }  s    r=  c                       s,   e Zd Zdd„ Z‡ fdd„Zdd„ Z‡  ZS )ÚBaseFutureInheritanceTestsc                 C   r  r   r  r   r	   r	   r
   Ú_get_future_cls†  r   z*BaseFutureInheritanceTests._get_future_clsc                    r.   r   r/   r   r6   r	   r
   r1   ‰  r8   z BaseFutureInheritanceTests.setUpc                 C   s^   |   ¡ }G dd„ d|ƒ}|| jd}|  td¡ | ¡  W d   ƒ d S 1 s(w   Y  d S )Nc                   @   rø   )zQBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFutc                 _   r   r   r	   rD   r	   r	   r
   rP   “  s   zZBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFut.__init__N)r*   r+   r,   rP   r	   r	   r	   r
   ÚMyFut’  rü   r@  rS   z!Future object is not initialized.)r?  r3   r[   r\   ra   )r   rC   r@  ru   r	   r	   r
   Ú'test_inherit_without_calling_super_initŽ  s   þ
"üzBBaseFutureInheritanceTests.test_inherit_without_calling_super_init)r*   r+   r,   r?  r1   rA  rA   r	   r	   r6   r
   r>  „  s    r>  c                   @   rø   )ÚPyFutureInheritanceTestsc                 C   ó   t jS r   )r   r  r   r	   r	   r
   r?  ¡  r   z(PyFutureInheritanceTests._get_future_clsN©r*   r+   r,   r?  r	   r	   r	   r
   rB  Ÿ  s    rB  c                   @   rø   )ÚCFutureInheritanceTestsc                 C   rC  r   )r   rÿ   r   r	   r	   r
   r?  ©  r   z'CFutureInheritanceTests._get_future_clsNrD  r	   r	   r	   r
   rE  ¥  s    rE  Ú__main__)'Ú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-   rB   Z
skipUnlessry   r   r  r  r	  r7  r<  r=  r>  rB  rE  r*   Úmainr	   r	   r	   r
   Ú<module>   s~    3    ÿÿ
 Yÿÿÿÿ	ÿÿÿÿÿ