
    daf'                         d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ ddlmZmZmZmZmZmZmZmZmZ  G d de      Zd	 Zed
k(  r ej6                          yy)    N)futures)PENDINGRUNNING	CANCELLEDCANCELLED_AND_NOTIFIEDFINISHEDFuture)support   )	PENDING_FUTURERUNNING_FUTURECANCELLED_FUTURECANCELLED_AND_NOTIFIED_FUTUREEXCEPTION_FUTURESUCCESSFUL_FUTUREBaseTestCasecreate_futuresetup_modulec                       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 Zd Zd Zd Zd Zd Zd Zd Zy)FutureTestsc                     d fd}t               }|j                  |       |j                  d       | j                  d       y )Nc                 &    | j                         y Nresultcallback_futurecallback_results    C/root/Python-3.12.4/Lib/test/test_concurrent_futures/test_future.pyfnz6FutureTests.test_done_callback_with_result.<locals>.fn       -446O       )r	   add_done_callback
set_resultassertEqualselfr    fr   s      @r   test_done_callback_with_resultz*FutureTests.test_done_callback_with_result   s?    	7 H	B	QO,r"   c                     d fd}t               }|j                  |       |j                  t        d             | j	                  dj
                         y )Nc                 &    | j                         y r   	exceptionr   callback_exceptions    r   r    z9FutureTests.test_done_callback_with_exception.<locals>.fn       !0!:!:!<r"   testr2   )r	   r$   set_exception	Exceptionr&   argsr(   r    r)   r0   s      @r   !test_done_callback_with_exceptionz-FutureTests.test_done_callback_with_exception   sM    !	= H	B		&)*$6$;$;<r"   c                     d fd}t               }|j                  |       | j                  |j                                | j                         y )Nc                 &    | j                         y r   	cancelledr   was_cancelleds    r   r    z6FutureTests.test_done_callback_with_cancel.<locals>.fn)       +557Mr"   )r	   r$   
assertTruecancelr(   r    r)   r>   s      @r   test_done_callback_with_cancelz*FutureTests.test_done_callback_with_cancel'   sB    	8 H	B
#&r"   c                 t   t        j                         5 }ddfd}fd}t               }|j                  |       |j                  |       |j	                  d       | j                         | j                         | j                  d|j                                d d d        y # 1 sw Y   y xY w)NFc                     dt        d      )NTdoh!r5   )r   raising_was_calleds    r   
raising_fnz9FutureTests.test_done_callback_raises.<locals>.raising_fn7   s    %)"''r"   c                 
    dy )NT )r   fn_was_calleds    r   r    z1FutureTests.test_done_callback_raises.<locals>.fn<   s     $r"   r#   zException: doh!)r
   captured_stderrr	   r$   r%   r@   assertIngetvalue)r(   stderrrI   r    r)   rL   rH   s        @@r   test_done_callback_raisesz%FutureTests.test_done_callback_raises2   s    $$& 	@&!&!M(
% A
+#LLOOO./OOM*MM+V__->?'	@ 	@ 	@s   BB..B7c                     d fd}t               }|j                  d       |j                  |       | j                  d       y )Nc                 &    | j                         y r   r   r   s    r   r    z=FutureTests.test_done_callback_already_successful.<locals>.fnJ   r!   r"   r#   )r	   r%   r$   r&   r'   s      @r   %test_done_callback_already_successfulz1FutureTests.test_done_callback_already_successfulH   s?    	7 H	Q	BO,r"   c                     d fd}t               }|j                  t        d             |j                  |       | j	                  dj
                         y )Nc                 &    | j                         y r   r-   r/   s    r   r    z9FutureTests.test_done_callback_already_failed.<locals>.fnU   r1   r"   r2   r3   )r	   r4   r5   r$   r&   r6   r7   s      @r   !test_done_callback_already_failedz-FutureTests.test_done_callback_already_failedS   sM    !	= H		&)*	B$6$;$;<r"   c                     d fd}t               }| j                  |j                                |j                  |       | j                         y )Nc                 &    | j                         y r   r;   r=   s    r   r    z<FutureTests.test_done_callback_already_cancelled.<locals>.fn`   r?   r"   )r	   r@   rA   r$   rB   s      @r   $test_done_callback_already_cancelledz0FutureTests.test_done_callback_already_cancelled^   sB    	8 H
#	B&r"   c                 4   t        j                         5 }d }t               }|j                  d       |j	                  |       | j                  d|j                                | j                  d|j                                d d d        y # 1 sw Y   y xY w)Nc                     t        d      )NrF   rG   )r   s    r   rI   zKFutureTests.test_done_callback_raises_already_succeeded.<locals>.raising_fnk   s    ''r"   r#   zexception calling callback forrF   )r
   rM   r	   r%   r$   rN   rO   )r(   rP   rI   r)   s       r   +test_done_callback_raises_already_succeededz7FutureTests.test_done_callback_raises_already_succeededi   sy    $$& 	5&( A LLO
+MM:FOO<MNMM&&//"34	5 	5 	5s   A0BBc                 x   | j                  t        t              d       | j                  t        t              d       | j                  t        t              d       | j                  t        t
              d       | j                  t        t              d       | j                  t        t              d       y )Nz%<Future at 0x[0-9a-f]+ state=pending>z%<Future at 0x[0-9a-f]+ state=running>z'<Future at 0x[0-9a-f]+ state=cancelled>z5<Future at 0x[0-9a-f]+ state=finished raised OSError>z3<Future at 0x[0-9a-f]+ state=finished returned int>)assertRegexreprr   r   r   r   r   r   r(   s    r   	test_reprzFutureTests.test_repry   s    n-@	Bn-@	B./B	D;<B	D%&G	I 	&'E	Gr"   c                    t        t              }t        t              }t        t              }t        t              }t        t
        t                     }t        t
        d      }| j                  |j                                | j                  |j                  t               | j                  |j                                | j                  |j                  t               | j                  |j                                | j                  |j                  t               | j                  |j                                | j                  |j                  t               | j                  |j                                | j                  |j                  t
               | j                  |j                                | j                  |j                  t
               y )Nstate)re   r.   r#   )re   r   )r   r   r   r   r   r   OSErrorr@   rA   r&   _stateassertFalse)r(   f1f2f3f4f5f6s          r   test_cancelzFutureTests.test_cancel   s0   ))+!78WY?!4		$I.%G,		$I.		$$:;%H-%H-r"   c                    | j                  t        j                                | j                  t        j                                | j	                  t        j                                | j	                  t        j                                | j                  t        j                                | j                  t        j                                y r   )	rh   r   r<   r   r@   r   r   r   r   ra   s    r   test_cancelledzFutureTests.test_cancelled   s    11341134(22455??AB)3356*4467r"   c                    | j                  t        j                                | j                  t        j                                | j	                  t        j                                | j	                  t        j                                | j	                  t        j                                | j	                  t        j                                y r   )	rh   r   doner   r@   r   r   r   r   ra   s    r   	test_donezFutureTests.test_done   s    ,,./,,./(--/05::<=(--/0)..01r"   c                    | j                  t        j                                | j                  t	        j                                | j                  t        j                                | j                  t        j                                | j                  t        j                                | j                  t        j                                y r   )	rh   r   runningr@   r   r   r   r   r   ra   s    r   test_runningzFutureTests.test_running   s    //12..01)11346>>@A)1134*2245r"   c                    | j                  t        j                  t        j                  d       | j                  t        j                  t
        j                  d       | j                  t        j                  t        j                  d       | j                  t        j                  t        j                  d       | j                  t        t        j                  d       | j                  t        j                  d      d       y )Nr   timeout*   )assertRaisesr   TimeoutErrorr   r   r   CancelledErrorr   r   rf   r   r&   r   ra   s    r   test_result_with_timeoutz$FutureTests.test_result_with_timeout   s    '..(// 	 	<'..(// 	 	<'00*111 	 	>'007>> 	 	K'#3#:#:AF*11!<bAr"   c                     fd}t        t              t        j                  |      }|j	                          | j                  j                  d      d       |j                          y )Nc                  R    t        j                  d        j                  d       y )Nr   r{   )timesleepr%   ri   s   r   notificationz:FutureTests.test_result_with_success.<locals>.notification   s    JJqMMM"r"   rd   targetr#   ry   r{   )r   r   	threadingThreadstartr&   r   joinr(   r   tri   s      @r   test_result_with_successz$FutureTests.test_result_with_success   sQ    	
 )L1		1-r2	r"   c                    fd}t        t              t        j                  |      }|j	                          | j                  t        j                  j                  t        j                         |j                          y )Nc                  P    t        j                  d        j                          y Nr   )r   r   rA   r   s   r   r   z9FutureTests.test_result_with_cancel.<locals>.notification   s    JJqMIIKr"   rd   r   ry   )r   r   r   r   r   r|   r   r~   r   r
   SHORT_TIMEOUTr   r   s      @r   test_result_with_cancelz#FutureTests.test_result_with_cancel   sa    	
 )L1		'00))W-B-B 	 	D	r"   c                 6   | j                  t        j                  t        j                  d       | j                  t        j                  t
        j                  d       | j                  t        j                  t        j                  d       | j                  t        j                  t        j                  d       | j                  t        t        j                  d      t                     | j                  t        j                  d      d        y )Nr   ry   )r|   r   r}   r   r.   r   r~   r   r   r@   
isinstancer   rf   r&   r   ra   s    r   test_exception_with_timeoutz'FutureTests.test_exception_with_timeout   s    '..(22A 	 	?'..(22A 	 	?'00*44a 	 	A'007AA1 	 	N
#3#=#=a#H#*, 	-*44Q?Fr"   c                    fd}t        t              t        j                  |      }|j	                          | j                  t        j                  t        j                        t                     |j                          y )Nc                      t        j                  d        j                  5  t         _        t                _         j                  j                          d d d        y # 1 sw Y   y xY wr   )r   r   
_conditionr   rg   rf   
_exception
notify_allr   s   r   r   z=FutureTests.test_exception_with_success.<locals>.notification   sJ    JJqM +$	 '	((*+ + +s   5A!!A*rd   r   ry   )r   r   r   r   r   r@   r   r.   r
   r   rf   r   r   s      @r   test_exception_with_successz'FutureTests.test_exception_with_success   s[    	+ )L1		
2<<8M8M<#NPWXY	r"   c                 P   t        t              }|j                  d       | j                  t        j
                  d      5  |j                  d       d d d        | j                  |j                                | j                  |j                         d       y # 1 sw Y   IxY w)Nrd   r   z=FINISHED: <Future at 0x[0-9a-f]+ state=finished returned int>   )
r   r   r%   assertRaisesRegexr   InvalidStateErrorr@   rs   r&   r   )r(   r)   s     r   test_multiple_set_resultz$FutureTests.test_multiple_set_result  s    (	Q##))/
 	
 LLO	 	!Q'	 	s   BB%c                 6   t        t              }t               }|j                  |       | j	                  t
        j                  d      5  |j                  t                      d d d        | j                  |j                         |       y # 1 sw Y   *xY w)Nrd   zBFINISHED: <Future at 0x[0-9a-f]+ state=finished raised ValueError>)
r   r   
ValueErrorr4   r   r   r   r5   r&   r.   )r(   r)   es      r   test_multiple_set_exceptionz'FutureTests.test_multiple_set_exception  sx    (L	##))4
 	)
 OOIK(	) 	*	) 	)s   BBN)__name__
__module____qualname__r*   r8   rC   rQ   rT   rW   rZ   r]   rb   ro   rq   rt   rw   r   r   r   r   r   r   r   rK   r"   r   r   r      sj    	-	=	'@,	-	=	'5 G .4826
BG (+r"   r   c                      t                y r   )r   rK   r"   r   setUpModuler     s    Nr"   __main__)r   r   unittest
concurrentr   concurrent.futures._baser   r   r   r   r   r	   r2   r
   utilr   r   r   r   r   r   r   r   r   r   r   r   mainrK   r"   r   <module>r      s_       K K / / /K+, K+\ zHMMO r"   