o
    GXhR                     @   s   d dl Z d dlmZmZmZmZmZmZ d dlZd dl	m
Z
 d dlZd dlZd dlmZ dd Zdd ZG d	d
 d
ejZG dd dejZG dd dejZG dd deejZG dd dejZedkrle  dS dS )    N)asynccontextmanagerAbstractAsyncContextManagerAsyncExitStacknullcontextaclosingcontextmanager)support)TestBaseExitStackc                    s   t   fdd}|S )z5Decorator to turn an async function into a test case.c                     s    | i |}t | d S N)asynciorun)argskwargscorofunc D/opt/python-3.10.19/usr/lib/python3.10/test/test_contextlib_async.pywrapper   s   z_async_test.<locals>.wrapper)	functoolswraps)r   r   r   r   r   _async_test   s   r   c                   C   s   t d  d S r
   )r   set_event_loop_policyr   r   r   r   tearDownModule      r   c                   @   s4   e Zd Zedd Zedd Zdd Zdd Zd	S )
TestAbstractAsyncContextManagerc              	      sx   G dd dt }| }| | I d H | |4 I d H }| || W d   I d H  d S 1 I d H s5w   Y  d S )Nc                          e Zd Z fddZ  ZS )z@TestAbstractAsyncContextManager.test_enter.<locals>.DefaultEnterc                       t  j| I d H  d S r
   super	__aexit__selfr   	__class__r   r   r          zJTestAbstractAsyncContextManager.test_enter.<locals>.DefaultEnter.__aexit____name__
__module____qualname__r    __classcell__r   r   r#   r   DefaultEnter       r+   )r   assertIs
__aenter__)r"   r+   managercontextr   r   r   
test_enter   s   .z*TestAbstractAsyncContextManager.test_enterc              
      s   t dd   fdd}g }td}| t6   4 I d H  | 2 z3 d H W }|| |6 W d   I d H  n1 I d H sBw   Y  W d    n1 sQw   Y  | |dg d S )Nc                   S     d V  d S r
   r   r   r   r   r   ctx+      
zUTestAbstractAsyncContextManager.test_async_gen_propagates_generator_exit.<locals>.ctxc                	     sH     4 I d H  dV  W d   I d H  d S 1 I d H sw   Y  d S )N   r   r   r3   r   r   gen/   s   .zUTestAbstractAsyncContextManager.test_async_gen_propagates_generator_exit.<locals>.gen   r5   )r   
ValueErrorassertRaisesappendassertEqual)r"   r7   retexcvalr   r6   r   (test_async_gen_propagates_generator_exit'   s    

(zHTestAbstractAsyncContextManager.test_async_gen_propagates_generator_exitc                 C   sF   G dd dt }| t |  W d    d S 1 sw   Y  d S )Nc                   @      e Zd ZdS )zKTestAbstractAsyncContextManager.test_exit_is_abstract.<locals>.MissingAexitNr'   r(   r)   r   r   r   r   MissingAexit>       rC   )r   r:   	TypeError)r"   rC   r   r   r   test_exit_is_abstract=   s   "z5TestAbstractAsyncContextManager.test_exit_is_abstractc                 C   s   G dd d}|  t|t G dd dt}|  t|t G dd d|}| t|t G dd d|}| t|t d S )	Nc                   @   s   e Zd Zdd Zdd ZdS )zWTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.ManagerFromScratchc                    s   | S r
   r   r"   r   r   r   r.   F      zbTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.ManagerFromScratch.__aenter__c                    s   d S r
   r   )r"   exc_type	exc_value	tracebackr   r   r   r    H   rH   zaTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.ManagerFromScratch.__aexit__Nr'   r(   r)   r.   r    r   r   r   r   ManagerFromScratchE   s    rM   c                       r   )zQTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.DefaultEnterc                    r   r
   r   r!   r#   r   r   r    N   r%   z[TestAbstractAsyncContextManager.test_structural_subclassing.<locals>.DefaultEnter.__aexit__r&   r   r   r#   r   r+   M   r,   r+   c                   @      e Zd ZdZdS )zOTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.NoneAenterN)r'   r(   r)   r.   r   r   r   r   
NoneAenterS       rO   c                   @   rN   )zNTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.NoneAexitN)r'   r(   r)   r    r   r   r   r   	NoneAexitX   rP   rQ   )Z
assertTrue
issubclassr   assertFalse)r"   rM   r+   rO   rQ   r   r   r   test_structural_subclassingD   s   z;TestAbstractAsyncContextManager.test_structural_subclassingN)r'   r(   r)   r   r1   r@   rF   rT   r   r   r   r   r      s    

r   c                   @   s   e Zd Zedd Zedd Zedd Zedd Zed	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zdd Zdd Zejdd Zejedd Zedd  Zed!d" Zd#S )$AsyncContextManagerTestCasec              	      s   g  t  fdd}| 4 I d H }|  dg | |d  | W d   I d H  n1 I d H s5w   Y  |  g d d S )Nc                     s      d dV    d d S N   *     r;   r   stater   r   woohooc   s   
zEAsyncContextManagerTestCase.test_contextmanager_plain.<locals>.woohoorW   rX   rW   rX   rY   )r   r<   r;   r"   r]   xr   r[   r   test_contextmanager_plain`   s   (z5AsyncContextManagerTestCase.test_contextmanager_plainc              
      s   g  t  fdd}| t0 | 4 I d H }|  dg | |d  | t 1 I d H s4w   Y  W d    n1 sCw   Y  |  g d d S )Nc                	     s0     d zdV  W   d d S   d w rV   rZ   r   r[   r   r   r]   q   s
   
zGAsyncContextManagerTestCase.test_contextmanager_finally.<locals>.woohoorW   rX   r^   )r   r:   ZeroDivisionErrorr<   r;   r_   r   r[   r   test_contextmanager_finallyn   s   
z7AsyncContextManagerTestCase.test_contextmanager_finallyc                    s  t dd }z#| 4 I d H  dd  W d   I d H  n1 I d H s$w   Y  W n tyB } zt|j}W Y d }~nd }~ww | t|d | |d jd | |d jd G dd dt	}z| 4 I d H  |d	1 I d H sxw   Y  W n |y } zt|j}W Y d }~nd }~ww | t|d | |d jd | |d jd
 G dd dt
}G dd dt}t
dtd|d|dfD ]v}| jt|dc z| 4 I d H  |1 I d H sw   Y  W n! t|y } z| || t|j}W Y d }~nd }~ww | | d | t|d | |d jd | |d jd W d    n	1 s@w   Y  qd S )Nc                   S  r2   r
   r   r   r   r   r   f   r4   zDAsyncContextManagerTestCase.test_contextmanager_traceback.<locals>.frW   r   test_contextmanager_tracebackz1/0c                   @   rA   )zWAsyncContextManagerTestCase.test_contextmanager_traceback.<locals>.RuntimeErrorSubclassNrB   r   r   r   r   RuntimeErrorSubclass   rD   rf   rX   zraise RuntimeErrorSubclass(42)c                   @   rA   )zXAsyncContextManagerTestCase.test_contextmanager_traceback.<locals>.StopIterationSubclassNrB   r   r   r   r   StopIterationSubclass   rD   rg   c                   @   rA   )z]AsyncContextManagerTestCase.test_contextmanager_traceback.<locals>.StopAsyncIterationSubclassNrB   r   r   r   r   StopAsyncIterationSubclass   rD   rh   spamhamtype was suppressedzraise stop_exc)r   rb   rK   
extract_tb__traceback__r<   lennamelineRuntimeErrorStopIterationStopAsyncIterationsubTestrl   r-   fail)r"   rd   eZframesrf   rg   rh   stop_excr   r   r   re      sf   

(z9AsyncContextManagerTestCase.test_contextmanager_tracebackc                    sD   t dd }| }| I d H  | |ttdd I d H  d S )Nc                   S  r2   r
   r   r   r   r   r   whee   r4   zHAsyncContextManagerTestCase.test_contextmanager_no_reraise.<locals>.wheefoo)r   r.   rS   r    rE   )r"   rz   r3   r   r   r   test_contextmanager_no_reraise   s   
"z:AsyncContextManagerTestCase.test_contextmanager_no_reraisec                    sj   t dd }| }| I d H  | t |ttdd I d H  W d    d S 1 s.w   Y  d S )Nc                   S  s"   zd V  W d S    d V  Y d S r
   r   r   r   r   r   whoo   s
   zTAsyncContextManagerTestCase.test_contextmanager_trap_yield_after_throw.<locals>.whoor{   )r   r.   r:   rs   r    rE   r"   r}   r3   r   r   r   *test_contextmanager_trap_yield_after_throw   s   
"zFAsyncContextManagerTestCase.test_contextmanager_trap_yield_after_throwc                    sR   t dd }| }| t | I d H  W d    d S 1 s"w   Y  d S )Nc                   S  s   d S r
   r   r   r   r   r   r}      s   zKAsyncContextManagerTestCase.test_contextmanager_trap_no_yield.<locals>.whoo)r   r:   rs   r.   r~   r   r   r   !test_contextmanager_trap_no_yield   s   
"z=AsyncContextManagerTestCase.test_contextmanager_trap_no_yieldc                    sf   t dd }| }| I d H  | t |d d d I d H  W d    d S 1 s,w   Y  d S )Nc                   S  s   d V  d V  d S r
   r   r   r   r   r   r}      s   
zOAsyncContextManagerTestCase.test_contextmanager_trap_second_yield.<locals>.whoo)r   r.   r:   rs   r    r~   r   r   r   %test_contextmanager_trap_second_yield   s   
"zAAsyncContextManagerTestCase.test_contextmanager_trap_second_yieldc                    sf   t dd }| }| I d H  | t |td d I d H  W d    d S 1 s,w   Y  d S )Nc                   S  s"   zd V  W d S  t y   tw r
   )rs   SyntaxErrorr   r   r   r   r}      s   zLAsyncContextManagerTestCase.test_contextmanager_non_normalised.<locals>.whoo)r   r.   r:   r   r    rs   r~   r   r   r   "test_contextmanager_non_normalised   s   
"z>AsyncContextManagerTestCase.test_contextmanager_non_normalisedc              	      s~   g t  fdd}| 4 I d H } dg  |d | td1 I d H s0w   Y   g d d S )Nc               
     s`    d zdV  W d S  ty/ }  z | jd   g d W Y d } ~ d S d } ~ ww )NrW   rX   r   r^   )r;   rb   r   r<   )rx   r"   r\   r   r   r]      s   
zFAsyncContextManagerTestCase.test_contextmanager_except.<locals>.woohoorW   rX   rY   r^   )r   r<   r;   rb   r_   r   r   r   test_contextmanager_except   s   
z6AsyncContextManagerTestCase.test_contextmanager_exceptc                    s   t dd }G dd dt}G dd dt}tdtd|d|dfD ]R}| jt|d	@ z| 4 I d H  |1 I d H sAw   Y  W n ty_ } z| || W Y d }~nd }~ww | | d
 W d    n1 srw   Y  q%d S )Nc                   S  r2   r
   r   r   r   r   r   r]     r4   zOAsyncContextManagerTestCase.test_contextmanager_except_stopiter.<locals>.woohooc                   @   rA   )z^AsyncContextManagerTestCase.test_contextmanager_except_stopiter.<locals>.StopIterationSubclassNrB   r   r   r   r   rg     rD   rg   c                   @   rA   )zcAsyncContextManagerTestCase.test_contextmanager_except_stopiter.<locals>.StopAsyncIterationSubclassNrB   r   r   r   r   rh     rD   rh   ri   rj   rk   rm   )r   rt   ru   rv   rl   	Exceptionr-   rw   )r"   r]   rg   rh   ry   exr   r   r   #test_contextmanager_except_stopiter  s0   
z?AsyncContextManagerTestCase.test_contextmanager_except_stopiterc              
      s   t dd }| t) | 4 I d H  dd  W d   I d H  n1 I d H s)w   Y  W d    n1 s8w   Y  | t | 4 I d H  t1 I d H sSw   Y  W d    d S 1 scw   Y  d S )Nc               
   S  s8   zd V  W d S  t y }  ztd|  | d } ~ ww )Nzcaught )r   rs   r>   r   r   r   r]   "  s   zQAsyncContextManagerTestCase.test_contextmanager_wrap_runtimeerror.<locals>.woohoorW   r   )r   r:   rs   ru   r"   r]   r   r   r   %test_contextmanager_wrap_runtimeerror   s   

("zAAsyncContextManagerTestCase.test_contextmanager_wrap_runtimeerrorc                 C   s"   dd }t |dddd }|S )Nc                     s    fdd}|S )Nc                    s"      D ]
\}}t| || q| S r
   )itemssetattr)r   kvkwr   r   decorate6  s   z]AsyncContextManagerTestCase._create_contextmanager_attribs.<locals>.attribs.<locals>.decorater   )r   r   r   r   r   attribs5  s   zKAsyncContextManagerTestCase._create_contextmanager_attribs.<locals>.attribsbar)r{   c                 S  s   dV  dS )Whee!Nr   )ri   r   r   r   baz;  s   
zGAsyncContextManagerTestCase._create_contextmanager_attribs.<locals>.baz)r   )r"   r   r   r   r   r   _create_contextmanager_attribs4  s
   z:AsyncContextManagerTestCase._create_contextmanager_attribsc                 C   s(   |   }| |jd | |jd d S )Nr   r   )r   r<   r'   r{   r"   r   r   r   r   test_contextmanager_attribsB  s   z7AsyncContextManagerTestCase.test_contextmanager_attribsc                 C   s   |   }| |jd d S Nr   r   r<   __doc__r   r   r   r   test_contextmanager_doc_attribG  s   z:AsyncContextManagerTestCase.test_contextmanager_doc_attribc              	      sZ   |   d }| |jd |4 I d H  W d   I d H  d S 1 I d H s&w   Y  d S r   r   r   r   r   r   *test_instance_docstring_given_cm_docstringL  s   .zFAsyncContextManagerTestCase.test_instance_docstring_given_cm_docstringc              	      sd   t dd }|ddddd4 I d H }| |d W d   I d H  d S 1 I d H s+w   Y  d S )	Nc                 S  s   | |||fV  d S r
   r   r"   r   r   kwdsr   r   r   r]   W     z9AsyncContextManagerTestCase.test_keywords.<locals>.woohoor5   r8   !   ,   r   )r5   r8   r   r   r   r<   )r"   r]   targetr   r   r   test_keywordsT  s   
.z)AsyncContextManagerTestCase.test_keywordsc                    sZ   d dt  fdd}|  fdd I d H  d  d d S )Nr   c                    s4   d7  }  d7  d V   d8    |  d S NrW   )r<   )before)depthncolsr"   r   r   r]   b  s   z:AsyncContextManagerTestCase.test_recursive.<locals>.woohooc                      s    dk r I d H  d S d S )N
   r   r   )r   	recursiver   r   r   n  s   z=AsyncContextManagerTestCase.test_recursive.<locals>.recursiver   r   r   r   )r   r   r   r"   r   test_recursive]  s   z*AsyncContextManagerTestCase.test_recursiveN)r'   r(   r)   r   ra   rc   re   r|   r   r   r   r   r   r   r   r   r   r   requires_docstringsr   r   r   r   r   r   r   r   rU   ^   sD    


8
	

	







rU   c                   @   s>   e Zd Zejdd Zedd Zedd Zedd Z	d	S )
AclosingTestCasec                 C   s    t j}t d }| |j| d S r
   )r   r   r<   )r"   Zcm_docstringobjr   r   r   test_instance_docs{  s   z#AclosingTestCase.test_instance_docsc              	      s   g  G  fddd}| }|   g  t|4 I d H }|  || W d   I d H  n1 I d H s4w   Y  |   dg d S )Nc                          e Zd Z fddZdS )z)AclosingTestCase.test_aclosing.<locals>.Cc                         d d S r   rZ   rG   r[   r   r   aclose     z0AclosingTestCase.test_aclosing.<locals>.C.acloseNr'   r(   r)   r   r   r[   r   r   C      r   rW   )r<   r   r"   r   r`   yr   r[   r   test_aclosing  s   (zAclosingTestCase.test_aclosingc              
      s   g  G  fddd}| }|   g  | t0 t|4 I d H }|  || dd  W d   I d H  n1 I d H s>w   Y  W d    n1 sMw   Y  |   dg d S )Nc                       r   )z/AclosingTestCase.test_aclosing_error.<locals>.Cc                    r   r   rZ   rG   r[   r   r   r     r   z6AclosingTestCase.test_aclosing_error.<locals>.C.acloseNr   r   r[   r   r   r     r   r   rW   r   )r<   r:   rb   r   r   r   r[   r   test_aclosing_error  s   
(z$AclosingTestCase.test_aclosing_errorc              
      s   g  t  fddfdd}| }|  g  | t; t|4 I d H  }| || | d| I d H  dd  W d   I d H  n1 I d H sNw   Y  W d    n1 s]w   Y  |  dg d S )Nc                	   3   s&    zd V  W   d d S   d w r   rZ   r   r[   r   r   sync_resource  s   z>AclosingTestCase.test_aclosing_bpo41229.<locals>.sync_resourcec                     s:      dV  dV  W d    d S 1 sw   Y  d S )Nr   r   )r   r   r   agenfunc  s
   "z9AclosingTestCase.test_aclosing_bpo41229.<locals>.agenfuncr   rW   r   )r   r<   r:   rb   r   	__anext__)r"   r   r`   r   r   )r\   r   r   test_aclosing_bpo41229  s    
(z'AclosingTestCase.test_aclosing_bpo41229N)
r'   r(   r)   r   r   r   r   r   r   r   r   r   r   r   r   y  s    


r   c                   @   sl   e Zd ZG dd deZeZg dZdd Zedd Z	edd	 Z
ed
d Zedd Zedd ZdS )TestAsyncExitStackc                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
z%TestAsyncExitStack.SyncAsyncExitStackc                    s\   t   t | }| fdd    | }|s | S |j}z|   ||_|)Nc                    s      S r
   )stop)rd   loopr   r   <lambda>  s    zETestAsyncExitStack.SyncAsyncExitStack.run_coroutine.<locals>.<lambda>)r   Zget_event_loopZensure_futureadd_done_callbackZrun_forever	exceptionresult__context__)r   rd   r>   r0   r   r   r   run_coroutine  s   
z3TestAsyncExitStack.SyncAsyncExitStack.run_coroutinec                 C      |  |  S r
   )r   r   rG   r   r   r   close  r   z+TestAsyncExitStack.SyncAsyncExitStack.closec                 C   r   r
   )r   r.   rG   r   r   r   	__enter__  r   z/TestAsyncExitStack.SyncAsyncExitStack.__enter__c                 G   s   |  | j| S r
   )r   r    r"   exc_detailsr   r   r   __exit__  s   z.TestAsyncExitStack.SyncAsyncExitStack.__exit__N)r'   r(   r)   staticmethodr   r   r   r   r   r   r   r   SyncAsyncExitStack  s    
r   ))r   z7return self.run_coroutine(self.__aexit__(*exc_details))r   z	raise excr   )r    zraise exc_details[1])r    zcb_suppress = cb(*exc_details)c                 C   s6   t  | _t | j | | jj | t jd  d S r
   )r   Znew_event_loopr   Zset_event_loopZ
addCleanupr   r   rG   r   r   r   setUp  s   
zTestAsyncExitStack.setUpc              	      sJ  di fdi fdi fdt ddfdt ddfdt ddfg}g   fdd}t 4 I d H k}t|D ]8\}}|rG|rG|j|g|R i |}n|rS|j|g|R  }n|r_|j|fi |}n||}| || q2|jD ]}| |d j| | |d j|j | 	|d j
|j
 qnW d   I d H  n1 I d H sw   Y  |  | g  t 4 I d H _}| t |jdd W d    n1 sw   Y  | t | jjd	d W d    n1 sw   Y  | t |j|d
d W d    n	1 sw   Y  W d   I d H  n1 I d H sw   Y  |  g  d S )Nr   )rW   )rW      rW   )Zexamplec                     s     | |f dS )zTest metadata propagationNrZ   )r   r   r   r   r   _exit  r   z5TestAsyncExitStack.test_async_callback.<locals>._exit)argr      )callbackr   )dictr   reversedpush_async_callbackr-   _exit_callbacks__wrapped__ZassertNotEqualr'   assertIsNoner   r<   r:   rE   
exit_stack)r"   Zexpectedr   stackr   r   rd   r   r   r   r   test_async_callback  sP   

( *z&TestAsyncExitStack.test_async_callbackc              	      sV  t   fdd}dd }fdd}G dd dt} 4 I d H z}|| |jd	 d
 | ||}|| |jd	 d
 j| || |jd	 d
 | ||}|| |jd	 d
 j| || |jd	 d
 | || |jd	 d
 | d
d  W d   I d H  d S 1 I d H sw   Y  d S )Nc                    s    |   d S r
   )r-   rI   r>   exc_tbZ
exc_raisedr"   r   r   _expect_exc  s   z7TestAsyncExitStack.test_async_push.<locals>._expect_excc                     s   dS NTr   r   r   r   r   _suppress_exc  rH   z9TestAsyncExitStack.test_async_push.<locals>._suppress_excc                    s$     |    |   | d S r
   )r   r   rG   r   r   
_expect_ok  s   

z6TestAsyncExitStack.test_async_push.<locals>._expect_okc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z2TestAsyncExitStack.test_async_push.<locals>.ExitCMc                 S   s
   || _ d S r
   	check_exc)r"   r   r   r   r   __init__  s   
z;TestAsyncExitStack.test_async_push.<locals>.ExitCM.__init__c                    s   |  d d S )NzShould not be called!)rw   rG   r   r   r   r.     r   z=TestAsyncExitStack.test_async_push.<locals>.ExitCM.__aenter__c                    s   | j | I d H  d S r
   r   r   r   r   r   r      s   z<TestAsyncExitStack.test_async_push.<locals>.ExitCM.__aexit__N)r'   r(   r)   r   r.   r    r   r   r   r   ExitCM  s    r   r   rW   r   )rb   objectr   push_async_exitr-   r   __self__)r"   r   r   r   r   r   cmr   r   r   test_async_push  s.   






.z"TestAsyncExitStack.test_async_pushc              	      s   G  fdddt }g  | }t 4 I d H 2}|j fdd}| | ||I d H  | |jd d j|  d W d   I d H  n1 I d H sOw   Y  | 	 g d d S )	Nc                       s$   e Zd Z fddZ fddZdS )z;TestAsyncExitStack.test_async_enter_context.<locals>.TestCMc                    r   r   rZ   rG   r   r   r   r.   6  r   zFTestAsyncExitStack.test_async_enter_context.<locals>.TestCM.__aenter__c                    r   )Nr   rZ   r   r   r   r   r    8  r   zETestAsyncExitStack.test_async_enter_context.<locals>.TestCM.__aexit__NrL   r   r   r   r   TestCM5  s    r   c                      r   )N   rZ   r   r   r   r   r   ?  s   z:TestAsyncExitStack.test_async_enter_context.<locals>._exitr   rW   r   )rW   r   r   r   )
r   r   r   ZassertIsNotNoneenter_async_contextr-   r   r   r;   r<   )r"   r   r   r   r   r   r   r   test_async_enter_context3  s   
(	z+TestAsyncExitStack.test_async_enter_contextc              
      s   dd }d   fdd}zA|   4 I d H ,}||t ||t ||t || ||t dd  W d   I d H  n1 I d H sHw   Y  W n) tyw } z| |jt | |jjt | 	|jjj W Y d }~n
d }~ww | 
d  d }| |t | |jt d S )Nc                    s   | r
   r   r   r   r   r   	raise_excL  rH   zHTestAsyncExitStack.test_async_exit_exception_chaining.<locals>.raise_excc                     s
   |  dS r   r   r   Zsaved_detailsr   r   suppress_excP  s   zKTestAsyncExitStack.test_async_exit_exception_chaining.<locals>.suppress_excrW   r   0Expected IndexError, but no exception was raised)r   r   
IndexErrorKeyErrorAttributeErrorr   r9   ZassertIsInstancer   r   rw   rb   )r"   r   r   r   r>   Z	inner_excr   r   r   "test_async_exit_exception_chainingI  s0   

(
z5TestAsyncExitStack.test_async_exit_exception_chainingc                    s   G dd dt  t fddtfdd}|fD ]L} > z| 4 I d H  t 1 I d H s7w   Y  W n  yU } z|j W Y d }~n
d }~ww d W d    n1 sew   Y  qd S )Nc                   @   rA   )zWTestAsyncExitStack.test_async_exit_exception_explicit_none_context.<locals>.MyExceptionNrB   r   r   r   r   MyExceptionn  rD   r  c                    s2   zd V  W d S  t y     } z| d | _w w r
   )BaseExceptionr   r   )r  r   r   my_cmq  s   zQTestAsyncExitStack.test_async_exit_exception_explicit_none_context.<locals>.my_cmc               	     s\     4 I d H } |   I d H  | V  W d   I d H  d S 1 I d H s'w   Y  d S r
   )r   r   )r   )r  r"   r   r   my_cm_with_exit_stack|  s
   .zaTestAsyncExitStack.test_async_exit_exception_explicit_none_context.<locals>.my_cm_with_exit_stackr   )r   r   rv   r   r   r   rw   )r"   r  r   r>   r   )r  r  r"   r   /test_async_exit_exception_explicit_none_contexti  s*   


zBTestAsyncExitStack.test_async_exit_exception_explicit_none_contextN)r'   r(   r)   r   r   r   Zcallback_error_internal_framesr   r   r   r   r   r  r  r   r   r   r   r     s    
*
#

r   c                   @   s   e Zd Zedd ZdS )TestAsyncNullcontextc              	      sd   G dd d}| }t |4 I d H }| || W d   I d H  d S 1 I d H s+w   Y  d S )Nc                   @   rA   )z6TestAsyncNullcontext.test_async_nullcontext.<locals>.CNrB   r   r   r   r   r     rD   r   )r   r-   )r"   r   cZc_inr   r   r   test_async_nullcontext  s   .z+TestAsyncNullcontext.test_async_nullcontextN)r'   r(   r)   r   r
  r   r   r   r   r    s    r  __main__)r   
contextlibr   r   r   r   r   r   r   testr   rK   ZunittestZtest.test_contextlibr	   r   r   ZTestCaser   rU   r   r   r  r'   mainr   r   r   r   <module>   s(     E  < Y
