
    6bh_                        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  e
j                  d       d Zd Z G d	 d
ej$                        Z G d dej$                        Z G d dej$                        Z G d deej$                        Z G d dej$                        Zedk(  r ej2                          yy)    N)asynccontextmanagerAbstractAsyncContextManagerAsyncExitStacknullcontextaclosingcontextmanager)support)TestBaseExitStackT)modulec                 D     	 t        j                          fd       }|S )Nc                  @     | i |}t        j                  |       y N)asynciorun)argskwargscorofuncs      D/opt/python-3.12.12/usr/lib/python3.12/test/test_contextlib_async.pywrapperz_async_test.<locals>.wrapper   s    T$V$D    )	functoolswraps)r   r   s   ` r   _async_testr      s(    ?__T  Nr   c                  .    t        j                  d        y r   )r   set_event_loop_policy r   r   tearDownModuler      s    !!$'r   c                   8    e Zd Zed        Zed        Zd Zd Zy)TestAbstractAsyncContextManagerc                   K    G d dt               } |       }| j                  |j                          d {   |       |4 d {   }| j                  ||       d d d       d {    y 7 77 )7 	# 1 d {  7  sw Y   y xY ww)Nc                        e Zd Z fdZ xZS )@TestAbstractAsyncContextManager.test_enter.<locals>.DefaultEnterc                 :   K   t        |   |  d {    y 7 wr   super	__aexit__selfr   	__class__s     r   r'   zJTestAbstractAsyncContextManager.test_enter.<locals>.DefaultEnter.__aexit__        g'...   __name__
__module____qualname__r'   __classcell__r*   s   @r   DefaultEnterr#          / /r   r3   )r   assertIs
__aenter__)r)   r3   managercontexts       r   
test_enterz*TestAbstractAsyncContextManager.test_enter   sg     	/6 	/ .G..00':7gMM'7+ 77 17777sW   5B
A/B
A1B
A5B
)A3*B
1B
3B
5B;A><BB
c                    K   t         d        fd} |       }|2 3 d {   }| j                  |d        |j                          d {    y 7 06 7 	w)Nc                    K   d  y wr   r   r   r   r   ctxzUTestAbstractAsyncContextManager.test_async_gen_propagates_generator_exit.<locals>.ctx,   	        	c                    K            4 d {    d d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY ww)N   r   )r<   s   r   genzUTestAbstractAsyncContextManager.test_async_gen_propagates_generator_exit.<locals>.gen0   s&     uu uuuuuus8   A*A.A,AAA 7A Ar@   )r   assertEqualaclose)r)   rA   gvalr<   s       @r   (test_async_gen_propagates_generator_exitzHTestAbstractAsyncContextManager.test_async_gen_propagates_generator_exit(   sc      
	 
		 E 	#S"%hhj	 	s7   AAAA'AAAAAAc                      G d dt               }| j                  t              5   |        d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)KTestAbstractAsyncContextManager.test_exit_is_abstract.<locals>.MissingAexitNr.   r/   r0   r   r   r   MissingAexitrI   ;       r   rK   )r   assertRaises	TypeError)r)   rK   s     r   test_exit_is_abstractz5TestAbstractAsyncContextManager.test_exit_is_abstract:   s0    	6 	 y)N *))s   6?c                 Z    G d d      }| j                  t        |t                      G d dt              }| j                  t        |t                      G d d|      }| j                  t        |t                      G d d|      }| j                  t        |t                     y )	Nc                       e Zd Zd Zd Zy)WTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.ManagerFromScratchc                    K   | S wr   r   r)   s    r   r6   zbTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.ManagerFromScratch.__aenter__C   s        c                    K   y wr   r   )r)   exc_type	exc_value	tracebacks       r   r'   zaTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.ManagerFromScratch.__aexit__E   s	        Nr.   r/   r0   r6   r'   r   r   r   ManagerFromScratchrR   B   s    r   r\   c                        e Zd Z fdZ xZS )QTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.DefaultEnterc                 :   K   t        |   |  d {    y 7 wr   r%   r(   s     r   r'   z[TestAbstractAsyncContextManager.test_structural_subclassing.<locals>.DefaultEnter.__aexit__K   r+   r,   r-   r2   s   @r   r3   r^   J   r4   r   r3   c                       e Zd ZdZy)OTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.NoneAenterNr.   r/   r0   r6   r   r   r   
NoneAenterra   P   s    Jr   rc   c                       e Zd ZdZy)NTestAbstractAsyncContextManager.test_structural_subclassing.<locals>.NoneAexitNr.   r/   r0   r'   r   r   r   	NoneAexitre   U   s    Ir   rg   )
assertTrue
issubclassr   assertFalse)r)   r\   r3   rc   rg   s        r   test_structural_subclassingz;TestAbstractAsyncContextManager.test_structural_subclassingA   s    	 	 	
#57RST	/6 	/ 	
<1LMN	+ 	 	J0KLM	* 	 	I/JKLr   N)r.   r/   r0   r   r9   rF   rO   rk   r   r   r   r    r       s3    	, 	,  "Mr   r    c                   j   e Zd Zed        Zed        Zed        Zed        Zed        Zed        Z	ed        Z
ed        Zed	        Zed
        Zed        Zd Zd Zej$                  d        Zej$                  ed               Zed        Zed        Zed        Zed        Zed        Zy)AsyncContextManagerTestCasec                 4  K   g t         fd       } |       4 d {   }| j                  dg       | j                  |d       j                  |       d d d       d {    | j                  g d       y 7 _7 # 1 d {  7  sw Y   +xY ww)Nc                 \   K    j                  d       d  j                  d       y wN   *     appendstates   r   woohoozEAsyncContextManagerTestCase.test_contextmanager_plain.<locals>.woohoo`   s#     LLOHLLs   ),rq   rr   rq   rr   rs   )r   rB   ru   r)   rx   xrw   s      @r   test_contextmanager_plainz5AsyncContextManagerTestCase.test_contextmanager_plain]   s~     		 
	 88qUQC(Q#LLO 8 	-	 8888sD   BA?B7BB%B&BBB	B
BBc                 |  K   g t         fd       }| j                  t              5   |       4 d {   }| j                  dg       | j                  |d       j	                  |       t               7 D# 1 d {  7  sw Y   nxY w	 d d d        n# 1 sw Y   nxY w| j                  g d       y w)Nc                    K    j                  d       	 d  j                  d       y #  j                  d       w xY wwrp   rt   rv   s   r   rx   zGAsyncContextManagerTestCase.test_contextmanager_finally.<locals>.woohoon   s4     LLO"S!S!s   A- AA  Arq   rr   ry   )r   rM   ZeroDivisionErrorrB   ru   rz   s      @r   test_contextmanager_finallyz7AsyncContextManagerTestCase.test_contextmanager_finallyk   s     		" 
	" 01xx1  ,  B'Q'))	  xxxx 211 	-sJ   &B<BA:BAA<:B<B	BB	
B	B<B$ B<c           	        K   t         d        }	  |       4 d {    ddz   d d d       d {    | j                  t              d       | j                  |d   j                  d       | j                  |d   j                  d        G d dt              }	  |       4 d {     |d      7 7 # 1 d {  7  sw Y   xY w# t        $ r)}t        j                  |j                        }Y d }~d }~ww xY w7 Z# 1 d {  7  sw Y   nxY wn1# |$ r)}t        j                  |j                        }Y d }~nd }~ww xY w| j                  t        |      d       | j                  |d   j                  d       | j                  |d   j                  d	        G d
 dt              } G d dt              }t        d      t        d       |d       |d      fD ]  }| j                  t        |            5  	  |       4 d {  7   |# 1 d {  7  sw Y   nxY w	 | j                  | d       nL# t        |      $ r;}| j                  ||       t        j                  |j                        }Y d }~nd }~ww xY w| j                  t        |      d       | j                  |d   j                  d       | j                  |d   j                  d       d d d        # 1 sw Y   xY w y w)Nc                    K   d  y wr   r   r   r   r   fzDAsyncContextManagerTestCase.test_contextmanager_traceback.<locals>.f   r=   r>   rq   r   test_contextmanager_tracebackz1/0c                       e Zd Zy)WAsyncContextManagerTestCase.test_contextmanager_traceback.<locals>.RuntimeErrorSubclassNrJ   r   r   r   RuntimeErrorSubclassr      rL   r   r   rr   zraise RuntimeErrorSubclass(42)c                       e Zd Zy)XAsyncContextManagerTestCase.test_contextmanager_traceback.<locals>.StopIterationSubclassNrJ   r   r   r   StopIterationSubclassr      rL   r   r   c                       e Zd Zy)]AsyncContextManagerTestCase.test_contextmanager_traceback.<locals>.StopAsyncIterationSubclassNrJ   r   r   r   StopAsyncIterationSubclassr      rL   r   r   spamhamtype was suppressedzraise stop_exc)r   r   rY   
extract_tb__traceback__rB   lennamelineRuntimeErrorStopIterationStopAsyncIterationsubTestr   failr5   )r)   r   eframesr   r   r   stop_excs           r   r   z9AsyncContextManagerTestCase.test_contextmanager_traceback}   se    		 
		;ss! s
 	Va()HI/	< 		;ss*2.. ssss  	;))!//:F	; ssss# 	;))!//:F	; 	Va()HI)IJ	M 		); 	 &!u%!&)&v.	
H 4>2< ss&  #sss II
/:;	 H~ CMM!X.&11!//BFC   Va0  1PQ  1AB 322
s8  LC B6C B:C B8C A(LD )D*D -	D6C 8C :C CCC 	DC<7L<DLD DDDD LE
!E LE

B=LK6	IH
IHH."H%#H.*I2K6J1JK6JAK6,
L6L 	;
Lc                    K   t         d        } |       }|j                          d {    | j                  |j                  t        t	        d      d        d {          y 7 <7 w)Nc                    K   d  y wr   r   r   r   r   wheezHAsyncContextManagerTestCase.test_contextmanager_no_reraise.<locals>.whee   r=   r>   foo)r   r6   rj   r'   rN   )r)   r   r<   s      r   test_contextmanager_no_reraisez:AsyncContextManagerTestCase.test_contextmanager_no_reraise   s[     		 
	fnns}}Y	%8H$OOP 	Os!   'A*A&2A*A(
A*(A*c                   K   t         d        } |       }|j                          d {    | j                  t              5  |j	                  t
        t        d      d        d {    d d d        t        j                  d      r&| j                  |j                  j                         y y 7 7 K# 1 sw Y   JxY ww)Nc                 0   K   	 d  y #  d  Y y xY wwr   r   r   r   r   whoozTAsyncContextManagerTestCase.test_contextmanager_trap_yield_after_throw.<locals>.whoo   s     s   
 r   Tcpython)r   r6   rM   r   r'   rN   r	   check_impl_detailrj   rA   ag_suspendedr)   r   r<   s      r   *test_contextmanager_trap_yield_after_throwzFAsyncContextManagerTestCase.test_contextmanager_trap_yield_after_throw   s     		 
	
 fnn|,--	9U+;TBBB -$$T2SWW112 3 	B -,s:   'CB1C$B5'B3(B5,AC3B55B>:Cc                    K   t         d        } |       }| j                  t              5  |j                          d {    d d d        y 7 # 1 sw Y   y xY ww)Nc                    K   y wr   r   r   r   r   r   zKAsyncContextManagerTestCase.test_contextmanager_trap_no_yield.<locals>.whoo   s	     rZ   )r   rM   r   r6   r   s      r   !test_contextmanager_trap_no_yieldz=AsyncContextManagerTestCase.test_contextmanager_trap_no_yield   sS     		 
	 f|,..""" -," -,s-   )AAA A	AAAAc                 l  K   t         d        } |       }|j                          d {    | j                  t              5  |j	                  d d d        d {    d d d        t        j                  d      r&| j                  |j                  j                         y y 7 z7 K# 1 sw Y   JxY ww)Nc                     K   d  d  y wr   r   r   r   r   r   zOAsyncContextManagerTestCase.test_contextmanager_trap_second_yield.<locals>.whoo   s     s   Tr   )
r   r6   rM   r   r'   r	   r   rj   rA   r   r   s      r   %test_contextmanager_trap_second_yieldzAAsyncContextManagerTestCase.test_contextmanager_trap_second_yield   s     		 
	 fnn|,--dD111 -$$T2SWW112 3 	1 -,s:   'B4B$B4B(B&B(AB4&B((B1-B4c                    K   t         d        } |       }|j                          d {    | j                  t              5  |j	                  t
        d d        d {    d d d        y 7 B7 # 1 sw Y   y xY ww)Nc                 >   K   	 d  y # t         $ r t        w xY wwr   )r   SyntaxErrorr   r   r   r   zLAsyncContextManagerTestCase.test_contextmanager_non_normalised.<locals>.whoo   s"     " "!!"s   
 )r   r6   rM   r   r'   r   r   s      r   "test_contextmanager_non_normalisedz>AsyncContextManagerTestCase.test_contextmanager_non_normalised   so     		" 
	" fnn{+--dD999 ,+ 	9 ,+s9   'A<A,A<A0A.A0#
A<.A00A95A<c                 *   K   g t          fd       } |       4 d {   } j                  dg        j                  |d       j                  |       t        d      7 E# 1 d {  7  sw Y   nxY w j                  g d       y w)Nc                    K   j                  d       	 d y # t        $ r<} j                  | j                  d          j                  g d       Y d } ~ y d } ~ ww xY ww)Nrq   rr   r   ry   )ru   r   r   rB   )r   r)   rw   s    r   rx   zFAsyncContextManagerTestCase.test_contextmanager_except.<locals>.woohoo   sR     LLO6$ 6QVVAY'  556s*   A$ A$	A!2AA$A!!A$rq   rr   rs   ry   )r   rB   ru   r   rz   s   `  @r   test_contextmanager_exceptz6AsyncContextManagerTestCase.test_contextmanager_except   s     		6 
	6 88qUQC(Q#LLO#C((	 888
 	-s3   BA'BAA)'B)A;/A20A;7Bc           	        K   t         d        } G d dt              } G d dt              }t        d      t        d       |d       |d      fD ]0  }| j                  t	        |            5  	  |       4 d {    | y 7 # 1 d {  7  sw Y   nxY w	 | j                  | d	       n(# t        $ r}| j                  ||       Y d }~nd }~ww xY wd d d        # 1 sw Y   xY ww)
Nc                    K   d  y wr   r   r   r   r   rx   zOAsyncContextManagerTestCase.test_contextmanager_except_stopiter.<locals>.woohoo	  r=   r>   c                       e Zd Zy)^AsyncContextManagerTestCase.test_contextmanager_except_stopiter.<locals>.StopIterationSubclassNrJ   r   r   r   r   r     rL   r   r   c                       e Zd Zy)cAsyncContextManagerTestCase.test_contextmanager_except_stopiter.<locals>.StopAsyncIterationSubclassNrJ   r   r   r   r   r     rL   r   r   r   r   r   r   )r   r   r   r   r   r   	Exceptionr5   )r)   rx   r   r   r   exs         r   #test_contextmanager_except_stopiterz?AsyncContextManagerTestCase.test_contextmanager_except_stopiter  s     		 
		M 		); 	 &!u%!&)&v.	
H 4>2<%xx&
  (xxxx
 II
/:; ! 0MM"h//0	 322s~   A-C//C#1B2<B
=B2 BC/B2BBBB2C#2	C;CC#CC#	C/#C,	(C/c                   K   t         d        }| j                  t              5   |       4 d {    ddz   d d d       d {    d d d        | j                  t              5   |       4 d {    t        7 M7 :# 1 d {  7  sw Y   JxY w# 1 sw Y   NxY w7 /# 1 d {  7  sw Y   nxY w	 d d d        y # 1 sw Y   y xY ww)Nc                 X   K   	 d  y # t         $ r} t        d|        | d } ~ ww xY ww)Nzcaught )r   r   excs    r   rx   zQAsyncContextManagerTestCase.test_contextmanager_wrap_runtimeerror.<locals>.woohoo$  s0     = ="WSE?3<=s   *
 *	'"'*rq   r   )r   rM   r   r   )r)   rx   s     r   %test_contextmanager_wrap_runtimeerrorzAAsyncContextManagerTestCase.test_contextmanager_wrap_runtimeerror"  s     		= 
	= |,xxA  x - 12xx((  xxxx -,  xxxx 322s   "CBA>BBBB B
C'C3B#4C7B%>B BB	B	B	BB C#C%B7	+B.,B7	3C;	CC	Cc                 <    d }t          |d      d               }|S )Nc                        fd}|S )Nc                 R    j                         D ]  \  }}t        | ||        | S r   )itemssetattr)r   kvkws      r   decoratez]AsyncContextManagerTestCase._create_contextmanager_attribs.<locals>.attribs.<locals>.decorate8  s(    88:CAaD1% &r   r   )r   r   s   ` r   attribszKAsyncContextManagerTestCase._create_contextmanager_attribs.<locals>.attribs7  s     Or   bar)r   c                   K   	 d  y wr   r   )r   s    r   bazzGAsyncContextManagerTestCase._create_contextmanager_attribs.<locals>.baz=  s      s   
)r   )r)   r   r   s      r   _create_contextmanager_attribsz:AsyncContextManagerTestCase._create_contextmanager_attribs6  s/    	 
	U		 
 
	 
r   c                     | j                         }| j                  |j                  d       | j                  |j                  d       y )Nr   r   )r   rB   r.   r   r)   r   s     r   test_contextmanager_attribsz7AsyncContextManagerTestCase.test_contextmanager_attribsD  s8    113e,%(r   c                 \    | j                         }| j                  |j                  d       y NzWhee!r   rB   __doc__r   s     r   test_contextmanager_doc_attribz:AsyncContextManagerTestCase.test_contextmanager_doc_attribI  s$    113g.r   c                    K    | j                         d       }| j                  |j                  d       |4 d {    	 d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY wwr   r   r   s     r   *test_instance_docstring_given_cm_docstringzFAsyncContextManagerTestCase.test_instance_docstring_given_cm_docstringN  sL      4d113D9g.3 333333sD   9A+AA+AA+AA+A+A(AA($A+c                    K   t         d        } |dddd      4 d {   }| j                  |d       d d d       d {    y 7 '7 # 1 d {  7  sw Y   y xY ww)Nc                   K   | |||f y wr   r   r)   r   r   kwdss       r   rx   z9AsyncContextManagerTestCase.test_keywords.<locals>.woohooY  s     tT**s   r@      !   ,   r   )r@   r   r   r   r   rB   )r)   rx   targets      r   test_keywordsz)AsyncContextManagerTestCase.test_keywordsV  sW      
	+ 
	+r"==V%56 >======sC   A AA AA A	A 	A AAAA c                     K   ddt          fd       } |       fd                d {     j                  d        j                  d       y 7 )w)Nr   c                 ^   K   dz  } dz  d  dz  j                  |        y wNrq   )rB   )beforedepthncolsr)   s    r   rx   z:AsyncContextManagerTestCase.test_recursive.<locals>.woohood  s>      QJE FQJEQJEUF+s   *-c                  <   K    dk  r         d {    y y 7 w)N
   r   )r   	recursives   r   r   z=AsyncContextManagerTestCase.test_recursive.<locals>.recursivep  s!     rzk!! !s   r   r   )r)   rx   r   r   r   s   ` @@@r   test_recursivez*AsyncContextManagerTestCase.test_recursive_  sk     			, 
		, 
	" 
	" k#" 	s   /A!A*A!c                     K   dt         fd       } |        fd       } j                          |        d {     j                         y 7 w)NFc                     K   d d  d y wNTFr   entereds   r   r8   z;AsyncContextManagerTestCase.test_decorator.<locals>.context~  s      GGs   c                  0   K   j                          y wr   )rh   r   r)   s   r   testz8AsyncContextManagerTestCase.test_decorator.<locals>.test  s     OOG$   )r   rj   r)   r8   r   r   s   `  @r   test_decoratorz*AsyncContextManagerTestCase.test_decoratorz  s`     		 
	 
	% 
	% 	!f! 	s   <A AAc                    K   dt         fd       } |        fd       } j                          j                  t        d      5   |        d {    d d d         j                         y 7 # 1 sw Y   xY ww)NFc                 0   K   	 d d  d y # d w xY wwr   r   r   s   r   r8   zJAsyncContextManagerTestCase.test_decorator_with_exception.<locals>.context  s      %s    c                  D   K   j                          t        d      w)Nr   )rh   	NameErrorr   s   r   r   zGAsyncContextManagerTestCase.test_decorator_with_exception.<locals>.test  s     OOG$E""s    r   )r   rj   assertRaisesRegexr  r   s   `  @r   test_decorator_with_exceptionz9AsyncContextManagerTestCase.test_decorator_with_exception  s~     		  
	  
	# 
	# 	!##Iu5&LL 6!  65s0   ABA8A6A8B6A88B=Bc                   K   t         d         G fddt              } |       }|j                  dd       d {    | j                  |j                  d       | j                  |j
                  d       | j                  |j                  d         |       }|j                  ddd       d {    | j                  |j                  d       | j                  |j
                  d       | j                  |j                  d        |       }|j                  dd	       d {    | j                  |j                  d       | j                  |j
                  d       y 7 *7 7 Bw)
Nc                    K   d  y wr   r   r   r   r   r8   zCAsyncContextManagerTestCase.test_decorating_method.<locals>.context  r=   r>   c                   ,    e Zd Z W         dd       Zy)@AsyncContextManagerTestCase.test_decorating_method.<locals>.TestNc                 6   K   || _         || _        || _        y wr   )abc)r)   r  r  r  s       r   methodzGAsyncContextManagerTestCase.test_decorating_method.<locals>.Test.method  s     s   r   )r.   r/   r0   r  )r8   s   r   Testr	    s    Y r   r  rq      r  r  r  )r  r  )r   objectr  rB   r  r  r  )r)   r  r   r8   s      @r   test_decorating_methodz2AsyncContextManagerTestCase.test_decorating_method  s/     
	 
		6 	 vkk!Q##&vkk#sC(((%%%vkkAk##### 	  	) 	$s5   :E.E'A5E.3E*4A5E.)E,*>E.*E.,E.N)r.   r/   r0   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r	   requires_docstringsr   r   r   r   r   r  r  r   r   r   rm   rm   [   s   . . . ." 5C 5Cn Q Q 3 3 # # 3 3 : : . ." < <4 ) )&)
   / !/     ! 7 7 # #4 " "$ " ", $ $r   rm   c                   `    e Zd Zej                  d        Zed        Zed        Zed        Z	y)AclosingTestCasec                 r    t         j                  }t        d       }| j                  |j                  |       y r   )r   r   rB   )r)   cm_docstringobjs      r   test_instance_docsz#AclosingTestCase.test_instance_docs  s*    ''tnl3r   c                    K   g  G fdd      } |       }| j                  g        t        |      4 d {   }| j                  ||       d d d       d {    | j                  dg       y 7 :7 # 1 d {  7  sw Y   *xY ww)Nc                       e Zd Z fdZy))AclosingTestCase.test_aclosing.<locals>.Cc                 0   K   j                  d       y wr   rt   r)   rw   s    r   rC   z0AclosingTestCase.test_aclosing.<locals>.C.aclose       Qr   Nr.   r/   r0   rC   rv   s   r   Cr         r   r!  rq   )rB   r   r)   r!  r{   yrw   s       @r   test_aclosingzAclosingTestCase.test_aclosing  sr     	  	  C#A;;!Q" ;$ ;;;;sD   7BA5BA9BA7B7B9B?B BBc                 ~  K   g  G fdd      } |       }| j                  g        | j                  t              5  t        |      4 d {   }| j                  ||       ddz   d d d       d {    d d d        | j                  dg       y 7 G7 "# 1 d {  7  sw Y   2xY w# 1 sw Y   6xY ww)Nc                       e Zd Z fdZy)/AclosingTestCase.test_aclosing_error.<locals>.Cc                 0   K   j                  d       y wr   rt   r  s    r   rC   z6AclosingTestCase.test_aclosing_error.<locals>.C.aclose  r  r   Nr   rv   s   r   r!  r(    r"  r   r!  rq   r   )rB   rM   r   r   r#  s       @r   test_aclosing_errorz$AclosingTestCase.test_aclosing_error  s     	  	  C#01{{a  A&A #{ 2 	$ #{{{{ 21se   =B= B1BB1B,B17B8B1<B=B1B1B.	"B%#B.	*B11B:6B=c                   K   g t         fd       fd} |       }| j                  g        | j                  t              5  t	        |      4 d {   }| j                  ||       | j                  d|j                          d {          ddz   d d d       d {    d d d        | j                  dg       y 7 o7 ;7 $# 1 d {  7  sw Y   4xY w# 1 sw Y   8xY ww)Nc               3   f   K   	 d   j                  d       y #  j                  d       w xY wwr   rt   rv   s   r   sync_resourcez>AclosingTestCase.test_aclosing_bpo41229.<locals>.sync_resource  s%      QQs   1 1.1c                 Z   K            5  d d d d d        y # 1 sw Y   y xY ww)Nr   )r-  s   r   agenfuncz9AclosingTestCase.test_aclosing_bpo41229.<locals>.agenfunc  s      !s   +	+(+r/  rq   r   )r   rB   rM   r   r   	__anext__)r)   r1  r{   r$  rw   r-  s       @@r   test_aclosing_bpo41229z'AclosingTestCase.test_aclosing_bpo41229  s     		  
	 	
 J#01{{a  A&  1;;=%89A #{ 2
 	$	 #%8 #{{{ 21sx   AC/C#CC#2CC
CC#'C(C#,C/C#
CC#C 	CC 	C##C,(C/N)
r.   r/   r0   r	   r  r  r   r%  r*  r3  r   r   r   r  r    sV      4 !4
 	% 	% % % % %r   r  c                       e Zd Z G d de      ZeZg dZd Zed        Z	ed        Z
ed        Zed        Zed	        Zed
        Zed        Zy)TestAsyncExitStackc                   .    e Zd Zed        Zd Zd Zd Zy)%TestAsyncExitStack.SyncAsyncExitStackc                 0   t        j                         j                         j                  |       }|j	                  fd       j                          |j                         }|s|j                         S |j                  }	 |#  ||_        |xY w)Nc                 $    j                         S r   )stop)r   loops    r   <lambda>zETestAsyncExitStack.SyncAsyncExitStack.run_coroutine.<locals>.<lambda>	  s    $))+r   )	r   get_event_loop_policyget_event_loopcreate_taskadd_done_callbackrun_forever	exceptionresult__context__)r   tr   r8   r;  s       @r   run_coroutinez3TestAsyncExitStack.SyncAsyncExitStack.run_coroutine  s    002AACD  &A 56++-Cxxz!//I&-COIs   B
 
Bc                 @    | j                  | j                               S r   )rF  rC   rT   s    r   closez+TestAsyncExitStack.SyncAsyncExitStack.close  s    %%dkkm44r   c                 @    | j                  | j                               S r   )rF  r6   rT   s    r   	__enter__z/TestAsyncExitStack.SyncAsyncExitStack.__enter__  s    %%doo&788r   c                 >    | j                   | j                  |       S r   )rF  r'   r)   exc_detailss     r   __exit__z.TestAsyncExitStack.SyncAsyncExitStack.__exit__  s    %%ndnnk&BCCr   N)r.   r/   r0   staticmethodrF  rH  rJ  rN  r   r   r   SyncAsyncExitStackr7    s$    		 
	$	5	9	Dr   rP  ))rN  z7return self.run_coroutine(self.__aexit__(*exc_details))rF  z	raise excrQ  )r'   zraise exc_details[1])r'   zcb_suppress = cb(*exc_details)c                     t        j                         | _        t        j                  | j                         | j	                  | j                  j
                         | j	                  t         j                  d        y r   )r   new_event_loopr;  set_event_loop
addCleanuprH  r   rT   s    r   setUpzTestAsyncExitStack.setUp*  sL    **,	tyy)		(55t<r   c           	      :  K   di fdi fdi fdt        d      fdt        d      fdt        d      fg}g fd}t               4 d {   }t        |      D ]o  \  }}|r|r |j                  |g|i |}n=|r |j                  |g| }n'|r |j                  |fi |}n|j                  |      }| j	                  ||       q |j
                  D ]s  }| j	                  |d   j                  |       | j                  |d   j                  |j                         | j                  |d   j                  |j                         u d d d       d {    | j                  |       g t               4 d {   }| j                  t              5  |j                  d       d d d        | j                  t              5  | j                  j                  d       d d d        | j                  t              5  |j                  |d	
       d d d        d d d       d {    | j                  g        y 7 7 # 1 d {  7  sw Y   xY w7 # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   `xY w7 W# 1 d {  7  sw Y   gxY ww)Nr   )rq   )rq   r  rq   )examplec                  6   K   	 j                  | |f       y wr   rt   )r   r   rC  s     r   _exitz5TestAsyncExitStack.test_async_callback.<locals>._exit;  s     +MM4,'s   )argr     )callbackr[  )dictr   reversedpush_async_callbackr5   _exit_callbacks__wrapped__assertNotEqualr.   assertIsNoner   rB   rM   rN   
exit_stack)	r)   expectedrZ  stackr   r   r   r   rC  s	           @r   test_async_callbackz&TestAsyncExitStack.test_async_callback0  sB     H2JBKa!4?#DO$
 	( "##u&x0
dD111%G$G$GA111%?$?A111%@4@A11%8Aa' 1 !00gaj44e<##GAJ$7$7H!!'!*"4"4emmD 1 $#  	*!##u""9-))a)0 .""9-333: .""9-))5a)@ . $# 	$5 $####& $------ $###s   AJIJD I	JI&JIJJI .JI,(JI8J!J,J-JJ	IIIJ I)	%J,I5	1J8J	=JJJJJJc                    K   t          fd}d } fd} G d dt              } j                         4 d {   }|j                  |        j	                  |j
                  d   d   |        ||      }|j                  |        j	                  |j
                  d   d   j                  |       |j                  |        j	                  |j
                  d   d   |        ||      }|j                  |        j	                  |j
                  d   d   j                  |       |j                  |        j	                  |j
                  d   d   |       |j                  |        j	                  |j
                  d   d   |       ddz   d d d       d {    y 7 q7 # 1 d {  7  sw Y   y xY ww)	Nc                 2   K   j                  |        y wr   )r5   )rW   r   exc_tb
exc_raisedr)   s      r   _expect_excz7TestAsyncExitStack.test_async_push.<locals>._expect_exc^  s     MM(J/s   c                     K   ywNTr   )rM  s    r   _suppress_excz9TestAsyncExitStack.test_async_push.<locals>._suppress_exc`  s	     rZ   c                 t   K   j                  |        j                  |       j                  |       y wr   )rd  )rW   r   rk  r)   s      r   
_expect_okz6TestAsyncExitStack.test_async_push.<locals>._expect_okb  s1     h'c"f%s   58c                       e Zd Zd Zd Zd Zy)2TestAsyncExitStack.test_async_push.<locals>.ExitCMc                     || _         y r   	check_exc)r)   rw  s     r   __init__z;TestAsyncExitStack.test_async_push.<locals>.ExitCM.__init__g  s	    !*r   c                 .   K   | j                  d       y w)NzShould not be called!)r   rT   s    r   r6   z=TestAsyncExitStack.test_async_push.<locals>.ExitCM.__aenter__i  s     		12s   c                 >   K    | j                   |  d {    y 7 wr   rv  rL  s     r   r'   z<TestAsyncExitStack.test_async_push.<locals>.ExitCM.__aexit__k  s     $dnnk222s   N)r.   r/   r0   rx  r6   r'   r   r   r   ExitCMrt  f  s    +33r   r{  r/  rq   r   )r   r  re  push_async_exitr5   ra  __self__)r)   rm  rp  rr  r{  rg  cmrl  s   `      @r   test_async_pushz"TestAsyncExitStack.test_async_push[  s    &
	0		&	3V 	3 ??$$!!*-MM%//3A6
C
#B!!"%MM%//3A6??D!!-0MM%//3A6F$B!!"%MM%//3A6??D!!+.MM%//3A6D!!+.MM%//3A6DaC %$$$$$$sF   8GF-G EF2G'F0(G0G2G8F;9G Gc                   K    G fddt               }g  |       }t               4 d {   }|j                  fd       }| j                  |       |j	                  |       d {    | j                  |j                  d   d   j                  |       j                  d       d d d       d {    | j                  g d       y 7 7 h7 # 1 d {  7  sw Y   -xY ww)Nc                   "    e Zd Z fdZ fdZy);TestAsyncExitStack.test_enter_async_context.<locals>.TestCMc                 0   K   j                  d       y wr   rt   )r)   rC  s    r   r6   zFTestAsyncExitStack.test_enter_async_context.<locals>.TestCM.__aenter__       a r   c                 0   K   j                  d       y w)Nr\  rt   )r)   rM  rC  s     r   r'   zETestAsyncExitStack.test_enter_async_context.<locals>.TestCM.__aexit__  r  r   Nr[   rC  s   r   TestCMr    s    !!r   r  c                  0   K    j                  d       y w)N   rt   r  s   r   rZ  z:TestAsyncExitStack.test_enter_async_context.<locals>._exit  s     a r   r/  rq   r  )rq   r  r\  r  )
r  r   r`  assertIsNotNoneenter_async_contextr5   ra  r}  ru   rB   )r)   r  r~  rg  rZ  rC  s        @r   test_enter_async_contextz+TestAsyncExitStack.test_enter_async_context  s     	!V 	! X!##u&&! '!  '++B///MM%//3A6??DMM! $# 	. $
 0 $###sW   )C,CC,:C*C+AC,C,7C8C,CC,C)C C)%C,c                   K    G d d      } G d d      } G d d      }| j                         4 d {   }| j                  t        d      5  |j                   |              d {    d d d        | j                  t        d      5  |j                   |              d {    d d d        | j                  t        d      5  |j                   |              d {    d d d        | j	                  |j
                         d d d       d {    y 7 7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 V# 1 sw Y   UxY w7 1# 1 d {  7  sw Y   y xY ww)Nc                       e Zd Zy)MTestAsyncExitStack.test_enter_async_context_errors.<locals>.LacksEnterAndExitNrJ   r   r   r   LacksEnterAndExitr    rL   r   r  c                       e Zd Zd Zy)FTestAsyncExitStack.test_enter_async_context_errors.<locals>.LacksEnterc                    K   y wr   r   )r)   exc_infos     r   r'   zPTestAsyncExitStack.test_enter_async_context_errors.<locals>.LacksEnter.__aexit__  	     rZ   Nrf   r   r   r   
LacksEnterr        r   r  c                       e Zd Zd Zy)ETestAsyncExitStack.test_enter_async_context_errors.<locals>.LacksExitc                    K   y wr   r   rT   s    r   r6   zPTestAsyncExitStack.test_enter_async_context_errors.<locals>.LacksExit.__aenter__  r  rZ   Nrb   r   r   r   	LacksExitr    r  r   r  asynchronous context manager)re  r  rN   r  rj   ra  )r)   r  r  r  rg  s        r   test_enter_async_context_errorsz2TestAsyncExitStack.test_enter_async_context_errors  s    	 		 		 	 ??$$''	3QR//0A0CDDD S''	3QR//
=== S''	3QR//	<<< SU223 %$$D SR > SR = SR %$$$s   3E DE ED!*D+D!/ED/'D-(D/,E
D=$D;%D=)#EE E	E D!!D*	&E-D//D8	4E;D==E	E	E EEEE c                 :  K   d }d fd}	 | j                         4 d {   }|j                  |t               |j                  |t               |j                  |t               |j                  |       |j                  |t               ddz   d d d       d {    | j                  d       d   }| j                  |t               | j                  |j                  t               y 7 7 S# 1 d {  7  sw Y   cxY w# t        $ r}| j                  |j                  t               | j                  |j                  j                  t               | j                  |j                  j                  j                         Y d }~d }~ww xY ww)Nc                    K   | wr   r   r   s    r   	raise_exczHTestAsyncExitStack.test_async_exit_exception_chaining.<locals>.raise_exc  s     IrU   c                     K   | ywro  r   )rM  saved_detailss    r   suppress_exczKTestAsyncExitStack.test_async_exit_exception_chaining.<locals>.suppress_exc  s     'Ms   rq   r   0Expected IndexError, but no exception was raised)re  r`  
IndexErrorKeyErrorAttributeErrorr|  
ValueErrorr   assertIsInstancerD  rd  r   )r)   r  r  rg  r   	inner_excr  s         @r   "test_async_exit_exception_chainingz5TestAsyncExitStack.test_async_exit_exception_chaining  s?    	 	
	J((E)))Z@)))X>)))^D%%l3)))Z@A )( IIHI!!$	i4i335FG# )((((  	G!!#//8<!!#//"="=~Ncoo99EEFF		Gsv   FD C3D A/C7D !C5"D &AF3D 5D 7D	=D >D	D 	FA9FFFFc           	         K    G d dt               t        fd       t         fd       }|fD ]-  } j                         5  	  |       4 d {    t                y 7 # 1 d {  7  sw Y   nxY w	  j	                  d       n-# $ r%} j                  |j                         Y d }~nd }~ww xY wd d d        # 1 sw Y   xY ww)Nc                       e Zd Zy)WTestAsyncExitStack.test_async_exit_exception_explicit_none_context.<locals>.MyExceptionNrJ   r   r   r   MyExceptionr    rL   r   r  c                 `   K   	 d  y # t         $ r         } 	 | # d | _        w xY ww xY wwr   )BaseExceptionrD  )r   r  s    r   my_cmzQTestAsyncExitStack.test_async_exit_exception_explicit_none_context.<locals>.my_cm  s7     +  +!m+I&*CO+s    . .+	'+.c                    K   j                         4 d {   } | j                                 d {    |  d d d       d {    y 7 87 7 	# 1 d {  7  sw Y   y xY wwr   )re  r  )rg  r  r)   s    r   my_cm_with_exit_stackzaTestAsyncExitStack.test_async_exit_exception_explicit_none_context.<locals>.my_cm_with_exit_stack  sP     ((E//888 )((8 )(((sT   A,AA,AA	A A,AA,AA,A)A A)%A,r  )r   r   r   r  r   rd  rD  )r)   r  r~  r   r  r  s   `   @@r   /test_async_exit_exception_explicit_none_contextzBTestAsyncExitStack.test_async_exit_exception_explicit_none_context  s     
	) 	 
	+ 
	+ 
	 
	
 /0BR!tt(l*	 1  $tttt
 IIPQ # 7%%coo667	  s~   AC	CBA'
BA)%C'B)A;/A20A;7B?CB;B61C6B;;C>	CC	Cc                   K    G d dt               } |       }t               |_        t               |_        | j                         }| j	                  t
        d      5  |j                  |       d {    d d d        |j                  |       | j                  |j                  d   d   |       y 7 @# 1 sw Y   ?xY ww)Nc                       e Zd Zy)>TestAsyncExitStack.test_instance_bypass_async.<locals>.ExampleNrJ   r   r   r   Exampler    s    r   r  r  r/  rq   )
r  r6   r'   re  r  rN   r  r|  r5   ra  )r)   r  r~  rg  s       r   test_instance_bypass_asyncz-TestAsyncExitStack.test_instance_bypass_async  s     #f#Yx!##I/MN++B/// Ob!e++B/2B7 0 ONs0   ACB52B33B57<C3B55B>:CN)r.   r/   r0   r   rP  re  callback_error_internal_framesrV  r   rh  r  r  r  r  r  r  r   r   r   r5  r5    s    D^ D: $J&"= (% (%T ! !F / /* 4 4& H H>  R  RD 	8 	8r   r5  c                       e Zd Zed        Zy)TestAsyncNullcontextc                    K    G d d      } |       }t        |      4 d {   }| j                  ||       d d d       d {    y 7 '7 # 1 d {  7  sw Y   y xY ww)Nc                       e Zd Zy)6TestAsyncNullcontext.test_async_nullcontext.<locals>.CNrJ   r   r   r   r!  r    rL   r   r!  )r   r5   )r)   r!  r  c_ins       r   test_async_nullcontextz+TestAsyncNullcontext.test_async_nullcontext  sC     	 	Cq>>TMM$" ">>>>>>sC   !A$AA$AA$AA$A$A!AA!A$N)r.   r/   r0   r   r  r   r   r   r  r    s    # #r   r  __main__)r   
contextlibr   r   r   r   r   r   r   r   r	   unittestrY   test.test_contextlibr
   requires_working_socketr   r   TestCaser    rm   r  r5  r  r.   mainr   r   r   <module>r     s    ; ;     2   t ,(>Mh&7&7 >MBi$("3"3 i$X9%x(( 9%xs8*H,=,= s8l#8,, # zHMMO r   