
    <et                        	 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 Zd Zd	 Zd
 Z G d d          Z G d dej                  Z G d d          Z ej         eed          d           G d deej                              Z ej         eed          d           G d deej                              Z G d deej                  Z G d d          Z ej         eed          d           G d deej                              Z ej         eed          d           G d deej                              Z  G d d eej                  Z! G d! d"          Z" G d# d$e"ej                  Z# ej         eed          d           G d% d&e"ej                              Z$e%d'k    r ej&                     dS dS )(    N)mock)GenericAlias)futures)utils)supportc                  .    t          j        d            d S N)asyncioset_event_loop_policy     5/usr/lib/python3.11/test/test_asyncio/test_futures.pytearDownModuler      s    !$'''''r   c                     | S r	   r   fs    r   	_fakefuncr      s    Hr   c                      d S r	   r   r   r   r   first_cbr          Dr   c                      d S r	   r   r   r   r   last_cbr      r   r   c                   N    e Zd ZdZdZdZdZd Zd Zd Z	d Z
d Zd Zd	 Zd
 ZdS )
DuckFutureFNc                 @    |                                  rdS d| _        dS )NFT)done_DuckFuture__cancelledselfs    r   cancelzDuckFuture.cancel*   s$    99;; 	5tr   c                     | j         S r	   )r   r   s    r   	cancelledzDuckFuture.cancelled0   s    r   c                 4    | j         p| j        d up| j        d uS r	   )r   _DuckFuture__result_DuckFuture__exceptionr   s    r   r   zDuckFuture.done3   s,      0=,0#4/	1r   c                 z    |                      |                                            | j        | j        | j        S r	   )assertFalser"   r%   r$   r   s    r   resultzDuckFuture.result8   s:    ))***'""}r   c                 ^    |                      |                                            | j        S r	   )r'   r"   r%   r   s    r   	exceptionzDuckFuture.exception>   s)    ))***r   c                     |                      |                                            |                     |           || _        d S r	   )r'   r   assertIsNotNoner$   )r   r(   s     r   
set_resultzDuckFuture.set_resultB   s=    %%%V$$$r   c                     |                      |                                            |                     |           || _        d S r	   )r'   r   r,   r%   )r   r*   s     r   set_exceptionzDuckFuture.set_exceptionG   s@    %%%Y'''$r   c              #      K   |                                  sd| _        | V  |                     |                                             |                                 S NT)r   _asyncio_future_blocking
assertTruer(   r   s    r   __iter__zDuckFuture.__iter__L   sO      yy{{ 	,0D)JJJ		$$${{}}r   )__name__
__module____qualname__r2   r   r$   r%   r    r"   r   r(   r*   r-   r/   r4   r   r   r   r   r   !   s          %KHK       1 1 1
         
% % %
    r   r   c                   *     e Zd Z fdZd Zd Z xZS )	DuckTestsc                     t                                                       |                                 | _        |                     | j        j                   d S r	   supersetUpnew_test_looploop
addCleanupcloser   	__class__s    r   r=   zDuckTests.setUpV   C    &&((		(((((r   c                 v    t                      }t          j        |          }|                     ||           d S r	   )r   r
   wrap_futureassertIsr   r   gs      r   test_wrap_futurezDuckTests.test_wrap_future[   s5    LL""ar   c                 v    t                      }t          j        |          }|                     ||           d S r	   )r   r
   ensure_futurerG   rH   s      r   test_ensure_futurezDuckTests.test_ensure_future`   s5    LL!!$$ar   )r5   r6   r7   r=   rJ   rM   __classcell__rC   s   @r   r9   r9   T   sV        ) ) ) ) )
  
      r   r9   c                   z    e Zd Zd Z fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej        d          d             Z ej        d          d             Z ej        d          d             Z ej        d          d             Z ej        d          d             Z ej        d          d             Z ej        d          d             Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z( ej        d          d&             Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/ xZ0S )-BaseFutureTestsc                      | j         |i |S r	   )clsr   argskwargss      r   _new_futurezBaseFutureTests._new_futureh   s    tx((((r   c                     t                                                       |                                 | _        |                     | j        j                   d S r	   r;   rB   s    r   r=   zBaseFutureTests.setUpk   rD   r   c                     | j         t                   }|                     |j        t          f           |                     |t
                     d S r	   )rS   strassertEqual__args__assertIsInstancer   )r   futures     r   test_generic_aliasz"BaseFutureTests.test_generic_aliasp   sC    #3&111fl33333r   c           	      *    G d d          }|                      t          j        |                     |                     t          j         |                                 |                      t          j        d                     |                      t          j        t	          j                                         |                     | j                  }|                     t          j        |                     |                      t          j        t          |                               |                     t          j        t	          j        t          |                                         |	                                 d S )Nc                       e Zd ZdZd ZdS )/BaseFutureTests.test_isfuture.<locals>.MyFutureNc                     d| _         d S NF)r2   r   s    r   __init__z8BaseFutureTests.test_isfuture.<locals>.MyFuture.__init__y   s    05---r   )r5   r6   r7   r2   re   r   r   r   MyFuturerb   v   s)        '+$6 6 6 6 6r   rf      r?   )
r'   r
   isfuturer3   r   MockrW   r?   typer    )r   rf   r   s      r   test_isfuturezBaseFutureTests.test_isfutureu   sN   	6 	6 	6 	6 	6 	6 	6 	6 	)(33444(44555)!,,--- 	)$)++66777$),,(++,,,)$q''22333 	(477););<<===	




r   c                 N   |                      | j                  }|                     |                                           |                     |                                           |                                 |                     |                                           d S Nrh   )rW   r?   r'   r"   r   r    r3   r   r   s     r   test_initial_statez"BaseFutureTests.test_initial_state   s    $),,'''"""	


&&&&&r   c                     |                      t          d          5  |                                  d d d            d S # 1 swxY w Y   d S )Nno current event loop)assertRaisesRegexRuntimeErrorrW   r   s    r   test_constructor_without_loopz-BaseFutureTests.test_constructor_without_loop   s    ##L2IJJ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   >AAc                       fd} j                              |                      }                     |j         j                                         |                                 j                    d S )Nc                  0   K                                     S r	   )rW   r   s   r   testz?BaseFutureTests.test_constructor_use_running_loop.<locals>.test   s      ##%%%r   )r?   run_until_completerG   _loopget_loop)r   rx   r   s   `  r   !test_constructor_use_running_loopz1BaseFutureTests.test_constructor_use_running_loop   ss    	& 	& 	& 	& 	&I((00agty)))ajjllDI.....r   c                 :   t          j        | j                   |                     t           j        d            |                                 }|                     |j        | j                   |                     |                                | j                   d S r	   )r
   set_event_loopr?   r@   rW   rG   rz   r{   ro   s     r    test_constructor_use_global_loopz0BaseFutureTests.test_constructor_use_global_loop   sy    ty))).555agty)))ajjllDI.....r   c                 H    |                      t          | j        d           d S )N*   )assertRaises	TypeErrorrW   r   s    r   test_constructor_positionalz+BaseFutureTests.test_constructor_positional   s#    )T%5r:::::r   c                 p   | j                             | j         | j                  }|                     t          j        |j                   | j                             | j         | j                  }|                     t          j        |j                   | j                             | j         | j                  }|                     t          t          f          5  |
                    d            d d d            n# 1 swxY w Y   | j                             | j         | j                  }|                     t          t          f          5  |                    t                     d d d            n# 1 swxY w Y   | j                             | j         | j                  }|                     t          t          f          5  |                                 d d d            n# 1 swxY w Y   | j                             | j         | j                  }|                     t          t          f          5  |                    d            d d d            n# 1 swxY w Y   | j                             | j         | j                  }|                     t          t          f          5  |                    d            d d d            n# 1 swxY w Y   | j                             | j         | j                  }	 t!          |           n# t          t          f$ r Y nw xY w| j                             | j         | j                  }	 |                                 n# t          $ r Y nw xY w| j                             | j         | j                  }	 t%          |           n# t          $ r Y nw xY w| j                             | j         | j                  }|                     |                                           |                     |                                           d S )Nrh   c                     d S r	   r   r   s    r   <lambda>z4BaseFutureTests.test_uninitialized.<locals>.<lambda>   s    D r   c                     d S r	   r   r   s    r   r   z4BaseFutureTests.test_uninitialized.<locals>.<lambda>   s    t r   )rS   __new__r?   r   r
   InvalidStateErrorr(   r*   rt   AttributeErrorr-   r/   	Exceptionr    add_done_callbackremove_done_callbackrepr	__await__iterr'   r"   r   r   futs     r   test_uninitializedz"BaseFutureTests.test_uninitialized   s    htxdi88'3SZ@@@htxdi88'3S]CCChtxdi88n=>> 	! 	!NN4   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! htxdi88n=>> 	) 	)i(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) htxdi88n=>> 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 htxdi88n=>> 	2 	2!!..111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 htxdi88n=>> 	5 	5$$^^444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 htxdi88	IIIIn- 	 	 	D	 htxdi88	MMOOOO 	 	 	D	 htxdi88	IIII 	 	 	D	 htxdi88)))$$$$$s   D  DDE99E= E=G,,G03G0>I!!I%(I%3KKKL L,+L,M+ +
M87M8"N2 2
N?>N?c                    |                      | j                  }|                     t          |d                     |                     |j        d            |                    d           |                     t          j	                  5  | j        
                    |           d d d            n# 1 swxY w Y   |                     |j        d           d S )Nrh   _cancel_message
my message)rW   r?   r3   hasattrr[   r   r    r   r
   CancelledErrorry   ro   s     r   !test_future_cancel_message_getterz1BaseFutureTests.test_future_cancel_message_getter   s   $),,#455666*D111	w566 	, 	,I((+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,*L99999s   B55B9<B9c                    |                      | j                  }|                    d           d|_        |                     |j        d           |                     t          j                  5  | j                            |           d d d            n# 1 swxY w Y   |                     |j        d           d S )Nrh   r   zmy new message)	rW   r?   r    r   r[   r   r
   r   ry   ro   s     r   !test_future_cancel_message_setterz1BaseFutureTests.test_future_cancel_message_setter   s    $),,	,*,<=== w566 	, 	,I((+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,*,<=====s   2BB Bc                    |                      | j                  }|                     |                                           |                     |                                           |                     |                                           |                     t          j        |j	                   |                     t          j        |j
                   |                     t          j        |j        d            |                     t          j        |j        d            |                     |                                           d S rn   )rW   r?   r3   r    r"   r   r   r
   r   r(   r*   r   r-   r/   r'   ro   s     r   test_cancelzBaseFutureTests.test_cancel   s    $),,

###&&&!!!'0!(;;;'0!+>>>'3Q\4HHH'3Q_dKKK$$$$$r   c                    |                      | j                  }|                     t          j        |j                   |                    d           |                     |                                           | 	                    |
                                           |                     |                                d           |                     |                                d            |                     t          j        |j        d            |                     t          j        |j        d            |                     |                                           d S Nrh   r   )rW   r?   r   r
   r   r(   r-   r'   r"   r3   r   r[   r*   r/   r    ro   s     r   test_resultzBaseFutureTests.test_result   s   $),,'3QX>>>	R'''!!!R(((---'3Q\4HHH'3Q_dKKK$$$$$r   c                 ,   t                      }|                     | j                  }|                     t          j        |j                   |                     t          d|j	        t                     |	                    |           |                     |                                           |                     |                                           |                     t           |j                   |                     |                                |           |                     t          j        |j        d            |                     t          j        |j	        d            |                     |                                           d S )Nrh   z!StopIteration .* cannot be raised)rt   rW   r?   r   r
   r   r*   rs   r   r/   StopIterationr'   r"   r3   r   r(   r[   r-   r    )r   excr   s      r   test_exceptionzBaseFutureTests.test_exception  s@   nn$),,'3Q[AAA 	y*M 	? 	? 	? 	
'''!!!,111,,,'3Q\4HHH'3Q_dKKK$$$$$r   c                     |                      | j                  }|                    t                     |                     |                                t                     d S rn   )rW   r?   r/   rt   r]   r*   ro   s     r   test_exception_classz$BaseFutureTests.test_exception_class  sP    $),,	%%%akkmm\:::::r   c                    |                      | j                  fd} |            }|                     t          |          d           |                     t          |                                         d           |                     t          |          d           |                     t          |          d           d S )Nrh   c               3   L   K   dV  E d {V } d| fV  E d {V }d|fV  d S )NABCr   )xyr   s     r   fixturez6BaseFutureTests.test_yield_from_twice.<locals>.fixture%  sP      IIIAq&LLLAq&LLLLLr   r   r   )r   r   )r   r   )rW   r?   r[   nextr-   )r   r   rI   r   s      @r   test_yield_from_twicez%BaseFutureTests.test_yield_from_twice"  s    $),,	 	 	 	 	 GIIa#&&&a!$$$	Ra),,,a),,,,,r   c           
      	   | j                             d           |                     | j                   }|j        d         }|                     t          |          d| j        j         d|d          d|d          d	           |                                 | j                             d
           |                     | j                   }|                     t          |          d| j        j         d           |                                 |                     | j                   }|                                 |                     t          |          d| j        j         d           |                     | j                   }|	                    d           |                     t          |          d| j        j         d           |                     |
                                d           t                      }|                     | j                   }|                    |           |                     t          |          d| j        j         d           |                     |                                |           d }|                     | j                   }	|	                    t                       |t                     }
|                     t          |	          d| j        j        z   d|
z  z              |	                                 |                     t          |	          d| j        j         d           |                     | j                   }|                    t$                     |                    t&                      |t$                    } |t&                    }|                     t          |          d| j        j        z   d|d|dz              |                     | j                   }|                    t$                     t)          d          D ]}|                    t                      |                    t&                     |d|}|                     t          |          d| j        j        z   d|z  z              |                                 |                     t          |          d| j        j         d           d S )NTrh   <z pending created at r   :rg   >Fz	 pending>z cancelled>   z finished result=4>z# finished exception=RuntimeError()>c                 v    t          j        |           \  }}| j        d|d|}t          j        |          S )Nz() at r   )
test_utilsget_function_sourcer7   reescape)funcfilenamelinenotexts       r   	func_reprz3BaseFutureTests.test_future_repr.<locals>.func_reprT  s@    )=dCCHf&*&7&7&766JD9T??"r   z pending cb=\[%s\]>z pending cb=\[z, z\]>   z, <8 more>, )r?   	set_debugrW   _source_tracebackr[   r   rS   r5   r    r-   r(   rt   r/   rG   r*   r   r   assertRegexr   r   range)r   f_pending_debugframe	f_pendingf_cancelledf_resultr   f_exceptionr   f_one_callbacks	fake_reprf_two_callbacks
first_repr	last_reprf_many_callbacksicb_regexs                    r   test_future_reprz BaseFutureTests.test_future_repr4  s	   	D!!!**	*::1"5!!M!MMuQxMM%(MMM	O 	O 	O 	   	E"""$$$)$44	i*Jdh.?*J*J*JKKK&&DI&66k**,N0A,N,N,NOOO###33ANNF 1FFF	H 	H 	H**A...nn&&DI&66!!#&&&F!FFF	H 	H 	H 	k++--s333	# 	# 	#
 **	*::)))444Ii((	!!48$$'=	'II	K 	K 	K 	   o..;TX.;;;	= 	= 	= **	*::))(333))'222Yx((
Ig&&	o.. 111&JJ			53 3	4 	4 	4  +++;;**8444q 	: 	:A..y9999**7333*4**ii@!""48$$'='HH	J 	J 	J 	!!!.//;TX.;;;	= 	= 	= 	= 	=r   c                    ddl m} |                     | j                  }|                    d           |                     | j                  } |||           |                     |                                           |                     |                                d           |                     | j                  }|	                    t                                 |                     | j                  } |||           |                     |                                           |                     t          |j                   |                     | j                  }|                                 |                     | j                  } |||           |                     |                                           d S )Nr   )_copy_future_staterh   
   )asyncio.futuresr   rW   r?   r-   r3   r   r[   r(   r/   rt   r   r    r"   )r   r   r   newfr   newf_exceptionr   newf_cancelleds           r   test_copy_statezBaseFutureTests.test_copy_statey  s   666666$),,	RTY//1d###		$$$+++&&DI&66!!,..111))ty)99;777++--...,(=>>>&&DI&66))ty)99;777002233333r   c                     |                      | j                  fdfd}|                     t          d          5   |             d d d            n# 1 swxY w Y                                    d S )Nrh   c               3      K    E d {V  d S r	   r   r   s   r   coroz'BaseFutureTests.test_iter.<locals>.coro  s      NNNNNNNNNr   c                  "                 \  } }d S r	   r   )arg1arg2r   s     r   rx   z'BaseFutureTests.test_iter.<locals>.test  s    JD$$$r   zawait wasn't used)rW   r?   rs   rt   r    )r   rx   r   r   s     @@r   	test_iterzBaseFutureTests.test_iter  s    DI..	 	 	 	 		  	  	  	  	  ##L2EFF 	 	DFFF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	

s   AA!Ac                     |                      | j                  }|                     t          d          5  d|_        d d d            d S # 1 swxY w Y   d S )Nrh   zcan only be set to FalseT)rW   r?   rs   
ValueError_log_tracebackr   s     r   test_log_tracebackz"BaseFutureTests.test_log_traceback  s    DI..##J0JKK 	& 	&!%C	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   AAAzasyncio.base_events.loggerc                 |    |                      | j                  }~|                     |j        j                   d S rn   )rW   r?   r'   errorcalledr   m_logr   s      r   test_tb_logger_abandonedz(BaseFutureTests.test_tb_logger_abandoned  s<    DI..+,,,,,r   c                     |                      | j                  }|                    t                                 |                                 ~|                     |j        j                   d S rn   )rW   r?   r/   r   r    r'   r   r   r   s      r   &test_tb_logger_not_called_after_cancelz6BaseFutureTests.test_tb_logger_not_called_after_cancel  sa    DI..)++&&&

+,,,,,r   c                     |                      | j                  }|                    d           ~|                     |j        j                   d S r   )rW   r?   r-   r'   r   r   r   s      r   !test_tb_logger_result_unretrievedz1BaseFutureTests.test_tb_logger_result_unretrieved  sN    DI..r+,,,,,r   c                     |                      | j                  }|                    d           |                                 ~|                     |j        j                   d S r   )rW   r?   r-   r(   r'   r   r   r   s      r   test_tb_logger_result_retrievedz/BaseFutureTests.test_tb_logger_result_retrieved  s[    DI..r

+,,,,,r   c                    |                      | j                  }|                    t          d                     ~t	          j        | j                   t          j                     |                     |j	        j
                   d S Nrh   boom)rW   r?   r/   rt   r   run_brieflyr   
gc_collectr3   r   r   r   s      r   $test_tb_logger_exception_unretrievedz4BaseFutureTests.test_tb_logger_exception_unretrieved  sx    DI..,v..///ty)))*+++++r   c                     |                      | j                  }|                    t          d                     |                                 ~|                     |j        j                   d S r   )rW   r?   r/   rt   r*   r'   r   r   r   s      r   "test_tb_logger_exception_retrievedz2BaseFutureTests.test_tb_logger_exception_retrieved  se    DI..,v..///+,,,,,r   c                     |                      | j                  }|                    t          d                     |                     t          |j                   ~|                     |j        j                   d S r   )	rW   r?   r/   rt   r   r(   r'   r   r   r   s      r   )test_tb_logger_exception_result_retrievedz9BaseFutureTests.test_tb_logger_exception_result_retrieved  sp    DI..,v..///,
333+,,,,,r   c                    d }t           j                            d          }|                    |d          }t	          j        || j                  }| j                            |          \  }}|                     t	          j	        |                     | 
                    |d           |                     |t          j                               |                    d           d S )Nc                 ,    | t          j                    fS r	   	threading	get_identargs    r   runz-BaseFutureTests.test_wrap_future.<locals>.run      ,..//r   rg   oirh   Twait)
concurrentr   ThreadPoolExecutorsubmitr
   rF   r?   ry   r3   ri   r[   assertNotEqualr  r  shutdown)r   r  exf1f2residents          r   rJ   z BaseFutureTests.test_wrap_future  s    	0 	0 	022155YYsD!! $)444Y11"55
U(,,---d###E9#6#8#8999
r   c                     |                      | j                  }t          j        |          }|                     ||           d S rn   )rW   r?   r
   rF   rG   r   r  r  s      r   test_wrap_future_futurez'BaseFutureTests.test_wrap_future_future  sD    49-- $$b"r   c                 0   d }t           j                            d          }|                    |d          }|                     t
          d          5  t          j        |           d d d            n# 1 swxY w Y   |                    d           d S )Nc                 ,    | t          j                    fS r	   r  r  s    r   r  z:BaseFutureTests.test_wrap_future_without_loop.<locals>.run  r  r   rg   r	  rr   Tr
  )	r  r   r  r  rs   rt   r
   rF   r  )r   r  r  r  s       r   test_wrap_future_without_loopz-BaseFutureTests.test_wrap_future_without_loop  s    	0 	0 	022155YYsD!!##L2IJJ 	$ 	$###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
s   A55A9<A9c                 2   d }t           j                            d          }|                    |d          fd}| j                             |                      }|                     | j        |j                   |                    d           d S )Nc                 ,    | t          j                    fS r	   r  r  s    r   r  z>BaseFutureTests.test_wrap_future_use_running_loop.<locals>.run  r  r   rg   r	  c                  0   K   t          j                   S r	   )r
   rF   )r  s   r   rx   z?BaseFutureTests.test_wrap_future_use_running_loop.<locals>.test  s      &r***r   Tr
  )	r  r   r  r  r?   ry   rG   rz   r  )r   r  r  rx   r  r  s        @r   !test_wrap_future_use_running_loopz1BaseFutureTests.test_wrap_future_use_running_loop  s    	0 	0 	022155YYsD!!	+ 	+ 	+ 	+ 	+Y))$$&&11di***
r   c                 |   t          j        | j                   |                     t           j        d            d }t          j                            d          }|                    |d          }t          j        |          }| 	                    | j        |j
                   |                    d           d S )Nc                 ,    | t          j                    fS r	   r  r  s    r   r  z=BaseFutureTests.test_wrap_future_use_global_loop.<locals>.run  r  r   rg   r	  Tr
  )r
   r~   r?   r@   r  r   r  r  rF   rG   rz   r  )r   r  r  r  r  s        r    test_wrap_future_use_global_loopz0BaseFutureTests.test_wrap_future_use_global_loop  s    ty))).555	0 	0 	022155YYsD!! $$di***
r   c                 n   t           j                                        }t          j        || j                  }|                                 t          j        | j                   | 	                    |
                                           | 	                    |
                                           d S rn   )r  r   Futurer
   rF   r?   r    r   r   r3   r"   r  s      r   test_wrap_future_cancelz'BaseFutureTests.test_wrap_future_cancel  s    &&(( $)444
		ty)))''''''''r   c                    t           j                                        }t          j        || j                  }|                    d           |                                 t          j	        | j                   | 
                    |                                           |                     |                                d           |                     |                                           d S r   )r  r   r$  r
   rF   r?   r-   r    r   r   r'   r"   r[   r(   r3   r  s      r   test_wrap_future_cancel2z(BaseFutureTests.test_wrap_future_cancel2  s    &&(( $)444
b
		ty)))(((b)))'''''r   c                 H   | j                             d           |                     | j                   }t          j                    j        dz
  }|                     |j        t                     | 	                    |j        d         d d         t          |df           d S )NTrh   rg      test_future_source_traceback)r?   r   rW   sys	_getframef_linenor]   r   listr[   __file__)r   r^   r   s      r   r+  z,BaseFutureTests.test_future_source_traceback  s    	D!!!!!ty!11)A-f6===1"5bqb9" 8:	; 	; 	; 	; 	;r   c                 @   | j                             |           d } |            }|                     | j                   }|                    |           d }t	          j        | j                    t          j                     d| j        j	         d}t          |          ||j        f}|j                            t          j        |           |j        j        d         d         }|                     |t%          j        |t$          j                             d S )Nc                  R    	 t                      # t          $ r} | cY d } ~ S d } ~ ww xY wr	   )MemoryErrorBaseException)r   s    r   memory_errorzLBaseFutureTests.check_future_exception_never_retrieved.<locals>.memory_error.  s?    !mm#    





s    
&!&&rh   ^z exception was never retrieved
)exc_infor   )r?   r   rW   r/   r   r   r   r   rS   r5   rk   __traceback__r   assert_called_once_withr   ANY	call_argsr   r   compileDOTALL)	r   debugr   r5  r   r^   regexr7  messages	            r   &check_future_exception_never_retrievedz6BaseFutureTests.check_future_exception_never_retrieved*  s   	E"""	 	 	
 lnn!!ty!11S!!!ty)))GDH%GGGIIsC$56++DHx+HHH+'*1-"*UBI">">?????r   c                 0    |                      d           d S rd   rA  r   s    r   %test_future_exception_never_retrievedz5BaseFutureTests.test_future_exception_never_retrievedB  s    33E:::::r   c                 0    |                      d           d S r1   rC  r   s    r   +test_future_exception_never_retrieved_debugz;BaseFutureTests.test_future_exception_never_retrieved_debugE  s    33D99999r   c                     |                      | j                  }|                                 t          j        |d           |                     |                                           d S )Nrh      )rW   r?   r    r   _set_result_unless_cancelledr3   r"   r   s     r    test_set_result_unless_cancelledz0BaseFutureTests.test_set_result_unless_cancelledH  sZ    DI..

,S!444(((((r   c                 ^   |                      | j                  }|                    d           |                                }d }	 |                    d            |                     d           n$# t          $ r}|j        d         }Y d }~nd }~ww xY w|                     |d           d S )Nrh   )rg   rH  zStopIteration was expectedr   )	rW   r?   r-   r4   sendfailr   rU   r[   )r   r   fir(   r  s        r   test_future_stop_iteration_argsz/BaseFutureTests.test_future_stop_iteration_argsN  s    DI..v\\^^	4GGDMMM II23333  	  	  	 WQZFFFFFF	  	(((((s   A3 3
B=BBc                    |                      | j                  }t          |          }|                     t          |j        t          t          d          d           |                     t          |j        t          d          t          d                     |                     t          |j        t          d d            |                     t          |j        t                     d S )Nrh   elephant    )	rW   r?   r   r   r   throwr   r   r/  )r   r   rN  s      r   test_future_iter_throwz&BaseFutureTests.test_future_iter_throw[  s    DI..#YY)RX#Yz%:%:B	@ 	@ 	@)RX#J//:1F1F	H 	H 	H 	*bh
D$GGG)RXt44444r   c                      G d d          }t          d          D ]:}|                     | j                  }|                     |                       ;d S )Nc                       e Zd Zd ZdS )5BaseFutureTests.test_future_del_collect.<locals>.Evilc                 ,    t          j                     d S r	   )gccollectr   s    r   __del__z=BaseFutureTests.test_future_del_collect.<locals>.Evil.__del__h  s    
r   N)r5   r6   r7   r[  r   r   r   EvilrW  g  s#            r   r\  d   rh   )r   rW   r?   r-   )r   r\  r   r   s       r   test_future_del_collectz'BaseFutureTests.test_future_del_collectf  s~    	 	 	 	 	 	 	 	 s 	# 	#A""	"22CNN4466""""	# 	#r   )1r5   r6   r7   rW   r=   r_   rl   rp   ru   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   patchr   r   r   r   r   r   r   rJ   r  r  r  r"  r%  r'  r+  rA  rD  rF  rJ  rO  rT  r^  rN   rO   s   @r   rQ   rQ   f   s       ) ) )) ) ) ) )
4 4 4
  .' ' '  / / // / /; ; ;2% 2% 2%h: : :	> 	> 	>	% 	% 	%% % %% % %$; ; ;
- - -$C= C= C=J4 4 44  & & &
 TZ,--- - .--
 TZ,--- - .-- TZ,--- - .-- TZ,--- - .-- TZ,--, , .-, TZ,--- - .-- TZ,--- - .--    
  	 	 	
 
 
( ( (( ( (	; 	; 	; TZ,--@ @ .-@.; ; ;: : :) ) )) ) )	5 	5 	5# # # # # # #r   rQ   _CFuturezrequires the C _asyncio modulec                   @    e Zd Z	 ej        Zn# e$ r dZY nw xY wd ZdS )CFutureTestsNc                    |                      | j                  }|                     t                    5  |`d d d            n# 1 swxY w Y   |                     t                    5  |`d d d            d S # 1 swxY w Y   d S rn   )rW   r?   r   r   r2   r   r   s     r   test_future_del_segfaultz%CFutureTests.test_future_del_segfaultx  s   DI..~.. 	- 	-,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-~.. 	# 	#"	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s#   AA	A	*A::A>A>)r5   r6   r7   r   r`  rS   r   rd  r   r   r   rb  rb  p  sV           # # # # #s    rb  c                   V    e Zd Z	  G d dej                  ZeZdS # e$ r dZY dS w xY w)CSubFutureTestsc                       e Zd ZdS )CSubFutureTests.CSubFutureNr5   r6   r7   r   r   r   
CSubFuturerh            Dr   rj  N)r5   r6   r7   r   r`  rj  rS   r   r   r   r   rf  rf    sm        	 	 	 	 	) 	 	 	    s    ((rf  c                       e Zd Zej        ZdS )PyFutureTestsN)r5   r6   r7   r   	_PyFuturerS   r   r   r   rm  rm    s        

CCCr   rm  c                   l     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z xZS )BaseFutureDoneCallbackTestsc                 z    t                                                       |                                 | _        d S r	   )r<   r=   r>   r?   rB   s    r   r=   z!BaseFutureDoneCallbackTests.setUp  s+    &&((			r   c                 8    t          j        | j                   d S r	   )r   r   r?   r   s    r   r   z'BaseFutureDoneCallbackTests.run_briefly  s    ty)))))r   c                     fd}|S )Nc                 2                                    d S r	   )append)r^   bagthings    r   bag_appenderz@BaseFutureDoneCallbackTests._make_callback.<locals>.bag_appender  s    JJur   r   )r   rv  rw  rx  s    `` r   _make_callbackz*BaseFutureDoneCallbackTests._make_callback  s(    	 	 	 	 	 	r   c                     t           r	   NotImplementedErrorr   s    r   rW   z'BaseFutureDoneCallbackTests._new_future      !!r   c                    g }|                                  }|                     |d          }|                     |d          }|                     |d          }|                    |           |                    |           |                    |           |                    |           |                    |           |                     |g            |                    d           |                                  |                     |ddg           |                     |                                d           d S Nr      r]  foorW   ry  r   r   r[   r-   r   r(   r   rv  r   cb1cb2cb3s         r   $test_callbacks_remove_first_callbackz@BaseFutureDoneCallbackTests.test_callbacks_remove_first_callback  s3   !!#r**!!#r**!!#s++	C   	C   	C   	s###	s###b!!!	Ur3i(((U+++++r   c                    g }|                                  }|                     |d          }|                     |d          }|                     |d          }|                    |           |                    |           |                    |           |                    |           |                    |           |                    |           |                     |g            |                    d           |                                  |                     |dg           |                     |                                d           d S r  r  r  s         r   /test_callbacks_remove_first_and_second_callbackzKBaseFutureDoneCallbackTests.test_callbacks_remove_first_and_second_callback  sE   !!#r**!!#r**!!#s++	C   	C   	C   	s###	s###	s###b!!!	Use$$$U+++++r   c                    g }|                                  }|                     |d          }|                     |d          }|                     |d          }|                    |           |                    |           |                    |           |                    |           |                    |           |                     |g            |                    d           |                                  |                     |ddg           |                     |                                d           d S r  r  r  s         r   $test_callbacks_remove_third_callbackz@BaseFutureDoneCallbackTests.test_callbacks_remove_third_callback  s3   !!#r**!!#r**!!#s++	C   	C   	C   	s###	s###b!!!	Ur2h'''U+++++r   c                    g }|                                  }|                    |                     |d                     |                    |                     |d                     |                     |g            |                    d           |                                  |                     |ddg           |                     |                                d           d S )Nr   r  r  )rW   r   ry  r[   r-   r   r(   )r   rv  r   s      r   $test_callbacks_invoked_on_set_resultz@BaseFutureDoneCallbackTests.test_callbacks_invoked_on_set_result  s    	D//R88999	D//R88999b!!!	Ur2h'''U+++++r   c                    g }|                                  }|                    |                     |d                     |                     |g            t	                      }|                    |           |                                  |                     |dg           |                     |                                |           d S )Nr]  )rW   r   ry  r[   rt   r/   r   r*   )r   rv  r   r   s       r   'test_callbacks_invoked_on_set_exceptionzCBaseFutureDoneCallbackTests.test_callbacks_invoked_on_set_exception  s    	D//S99:::b!!!nn	se$$$,,,,,r   c                 t   g }|                                  }|                     |d          }|                     |d          }|                     |d          }|                    |           |                    |           |                     |                    |          d           |                     |                    |          d           |                    |           t          d          D ]}|                    |           |                     |                    |          d           |                     |g            |                    d           |                                  |                     |dg           |                     |                                d           d S )Nrg   rH  r*  r         r  )	rW   ry  r   r[   r   r   r-   r   r(   )r   rv  r   r  r  r  r   s          r   test_remove_done_callbackz5BaseFutureDoneCallbackTests.test_remove_done_callback  s   !!#q))!!#q))!!#q)) 	
C   	C    	//44a888 	//44a888 	
C   q 	% 	%A$$$$ 	//44a888b!!!	Uqc"""U+++++r   c                    |                                                      t                     t          d          D ]}                    t                      G fdd          }                     |                       d S )N?   c                       e Zd Z fdZdS )RBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutation.<locals>.evilc                 <                         t                     dS rd   )r   idr   otherr   s     r   __eq__zYBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutation.<locals>.evil.__eq__/  s    ((,,,ur   Nr5   r6   r7   r  r   s   r   evilr  .  s.              r   r  rW   r   rZ   r   r  r   r   _r  r   s      @r   (test_remove_done_callbacks_list_mutationzDBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_mutation%  s       c"""r 	& 	&A!!"%%%%	 	 	 	 	 	 	 	 	 	
 	  (((((r   c                    |                                                      t                     t          d          D ]}                    t                      G fdd          }                     |                       d S )Nr  c                       e Zd Z fdZdS )OBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_clear.<locals>.evilc                 2                         |           d S r	   )r   r  s     r   r  zVBaseFutureDoneCallbackTests.test_remove_done_callbacks_list_clear.<locals>.evil.__eq__?  s    ((/////r   Nr  r   s   r   r  r  >  s.        0 0 0 0 0 0 0r   r  r  r  s      @r   %test_remove_done_callbacks_list_clearzABaseFutureDoneCallbackTests.test_remove_done_callbacks_list_clear5  s       c"""r 	& 	&A!!"%%%%	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	  (((((r   c                 "   d }|                                  }|                    |           |                    t                     |                    t                     |                    d           t	          j        | j                   d S )Nc                 :    |                      t                     d S r	   )r   rZ   r   s    r   mutzPBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_1.<locals>.mutG  s    ""3'''''r   rg   )rW   r   rZ   r-   r   r   r?   )r   r  r   s      r   'test_schedule_callbacks_list_mutation_1zCBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_1D  s    	( 	( 	(   c"""c"""c"""qty)))))r   c                 $   |                                                      t                     t          d          D ]}                    t                     dd G fdd          }                     |                       d S )Nr  r]  r   c                       e Zd Z fdZdS )QBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_2.<locals>.evilc                 R    dz  k     r                     t                     dS )Nrg   F)r   r  )r   r  	extra_cbsr   max_extra_cbss     r   r  zXBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_2.<locals>.evil.__eq__^  s0    Q	},,))"---ur   Nr  )r  r   r  s   r   r  r  ]  s8                r   r  r  )r   r  r  r  r   r  s      @@@r   'test_schedule_callbacks_list_mutation_2zCBaseFutureDoneCallbackTests.test_schedule_callbacks_list_mutation_2Q  s       c"""r 	& 	&A!!"%%%%		 	 	 	 	 	 	 	 	 	 	 	 	  (((((r   )r5   r6   r7   r=   r   ry  rW   r  r  r  r  r  r  r  r  r  r  rN   rO   s   @r   rp  rp    s        ) ) ) ) )* * *  " " ", , ,., , ,0, , ,., , ,- - -, , ,B) ) ) ) ) )* * *) ) ) ) ) ) )r   rp  c                       e Zd Zd ZdS )CFutureDoneCallbackTestsc                 6    t          j        | j                  S rn   r   r`  r?   r   s    r   rW   z$CFutureDoneCallbackTests._new_futurem  s    TY////r   Nr5   r6   r7   rW   r   r   r   r  r  h  s#        
0 0 0 0 0r   r  c                       e Zd Zd ZdS )CSubFutureDoneCallbackTestsc                 T     G d dt           j                  } || j                  S )Nc                       e Zd ZdS );CSubFutureDoneCallbackTests._new_future.<locals>.CSubFutureNri  r   r   r   rj  r  w  rk  r   rj  rh   r  )r   rj  s     r   rW   z'CSubFutureDoneCallbackTests._new_futurev  sD    	 	 	 	 	) 	 	 	zty))))r   Nr  r   r   r   r  r  q  s#        
* * * * *r   r  c                       e Zd Zd ZdS )PyFutureDoneCallbackTestsc                 6    t          j        | j                  S rn   )r   rn  r?   r   s    r   rW   z%PyFutureDoneCallbackTests._new_future  s     di0000r   Nr  r   r   r   r  r  |  s#        1 1 1 1 1r   r  c                   *     e Zd Zd Z fdZd Z xZS )BaseFutureInheritanceTestsc                     t           r	   r{  r   s    r   _get_future_clsz*BaseFutureInheritanceTests._get_future_cls  r}  r   c                     t                                                       |                                 | _        |                     | j        j                   d S r	   r;   rB   s    r   r=   z BaseFutureInheritanceTests.setUp  rD   r   c                     |                                  } G d d|          } || j                  }|                     t          d          5  |                                 d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )QBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFutc                     d S r	   r   rT   s      r   re   zZBaseFutureInheritanceTests.test_inherit_without_calling_super_init.<locals>.MyFut.__init__  s    r   N)r5   r6   r7   re   r   r   r   MyFutr    s#            r   r  rh   z!Future object is not initialized.)r  r?   rs   rt   r{   )r   rS   r  r   s       r   'test_inherit_without_calling_super_initzBBaseFutureInheritanceTests.test_inherit_without_calling_super_init  s    ""$$	 	 	 	 	C 	 	 	
 e#####/
 
 	 	 LLNNN		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A11A58A5)r5   r6   r7   r  r=   r  rN   rO   s   @r   r  r    sV        " " ") ) ) ) )
      r   r  c                       e Zd Zd ZdS )PyFutureInheritanceTestsc                     t           j        S r	   )r   rn  r   s    r   r  z(PyFutureInheritanceTests._get_future_cls  s      r   Nr5   r6   r7   r  r   r   r   r  r    s#        ! ! ! ! !r   r  c                       e Zd Zd ZdS )CFutureInheritanceTestsc                     t           j        S r	   )r   r`  r   s    r   r  z'CFutureInheritanceTests._get_future_cls  s    r   Nr  r   r   r   r  r    s#                 r   r  __main__)'concurrent.futuresr  rY  r   r,  r  unittestr   typesr   r
   r   test.test_asyncior   r   rx   r   r   r   r   r   r   TestCaser9   rQ   
skipUnlessr   rb  rf  rm  rp  r  r  r  r  r  r  r5   mainr   r   r   <module>r     sV        				 				 



                         1 1 1 1 1 1      ( ( (  	 	 		 	 	0 0 0 0 0 0 0 0f    
#   $G# G# G# G# G# G# G# G#T WWWj1157 7# # # # #?J$7 # #7 7# WWWj1157 7    oz':  7 7    OZ%8   U) U) U) U) U) U) U) U)p WWWj1157 70 0 0 0 0:)20 07 70 WWWj1157 7* * * * *"=","5* *7 7*1 1 1 1 1 ; * 31 1 1       6! ! ! ! !9)2! ! ! WWWj1157 7         8(1   7 7  zHMOOOOO r   