
    /hhi                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK7  SSK	J
r
  SSKJr  SSKJr  SSKr " S S\R                   5      r " S	 S
\R                   5      r " S S\R                   5      r " S S\R                   5      r " S S\R                   5      r " S S\R                   5      r " S S\5      r " S S\R                   5      r " S S5      r " S S\\R                   5      r " S S5      r " S S\\R                   5      r " S S \\R                   5      r " S! S"\\R                   5      r " S# S$\R                   5      r \!S%:X  a  \RD                  " 5         gg)&z9Unit tests for contextlib.py, and other context managers.    N)*)support)	os_helper)ExceptionIsLikeMixinc                   ,    \ rS rSrS rS rS rS rSrg)TestAbstractContextManager   c                 p     " S S[         5      nU" 5       nU R                  UR                  5       U5        g )Nc                   (   ^  \ rS rSrU 4S jrSrU =r$ );TestAbstractContextManager.test_enter.<locals>.DefaultEnter   c                     > [         TU ]  " U6   g Nsuper__exit__selfargs	__class__s     =/opt/python-3.13.8/usr/lib/python3.13/test/test_contextlib.pyr   DTestAbstractContextManager.test_enter.<locals>.DefaultEnter.__exit__        $'     __name__
__module____qualname____firstlineno__r   __static_attributes____classcell__r   s   @r   DefaultEnterr          ( (r   r$   )AbstractContextManagerassertIs	__enter__)r   r$   managers      r   
test_enter%TestAbstractContextManager.test_enter   s/    	(1 	( .g'')73r   c                      " S S[         5      nU R                  [        5         SU" 5       l        S S S 5        g ! , (       d  f       g = f)Nc                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )DTestAbstractContextManager.test_slots.<locals>.DefaultContextManager   r   c                     > [         TU ]  " U6   g r   r   r   s     r   r   MTestAbstractContextManager.test_slots.<locals>.DefaultContextManager.__exit__   r   r   )r   r   r   r    	__slots__r   r!   r"   r#   s   @r   DefaultContextManagerr.      s    I( (r   r3   *   )r&   assertRaisesAttributeErrorvar)r   r3   s     r   
test_slots%TestAbstractContextManager.test_slots   s7    	($: 	( ~.*,!#' /..s	   ;
A	c                      " S S[         5      nU R                  [        5         U" 5         S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrSrg)ETestAbstractContextManager.test_exit_is_abstract.<locals>.MissingExit&   r   Nr   r   r   r    r!   r   r   r   MissingExitr<   &       r   r?   )r&   r5   	TypeError)r   r?   s     r   test_exit_is_abstract0TestAbstractContextManager.test_exit_is_abstract%   s0    	0 	 y)M *))s	   6
Ac                 Z    " S S5      nU R                  [        U[        5      5         " S S[        5      nU R                  [        U[        5      5         " S SU5      nU R                  [        U[        5      5         " S SU5      nU R                  [        U[        5      5        g )	Nc                        \ rS rSrS rS rSrg)RTestAbstractContextManager.test_structural_subclassing.<locals>.ManagerFromScratch-   c                     U $ r   r   r   s    r   r(   \TestAbstractContextManager.test_structural_subclassing.<locals>.ManagerFromScratch.__enter__.       r   c                     g r   r   )r   exc_type	exc_value	tracebacks       r   r   [TestAbstractContextManager.test_structural_subclassing.<locals>.ManagerFromScratch.__exit__0   s    r   r   Nr   r   r   r    r(   r   r!   r   r   r   ManagerFromScratchrF   -   s    r   rR   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )LTestAbstractContextManager.test_structural_subclassing.<locals>.DefaultEnter5   c                     > [         TU ]  " U6   g r   r   r   s     r   r   UTestAbstractContextManager.test_structural_subclassing.<locals>.DefaultEnter.__exit__6   r   r   r   r   r#   s   @r   r$   rT   5   r%   r   r$   c                       \ rS rSrSrSrg)GTestAbstractContextManager.test_structural_subclassing.<locals>.NoEnter;   Nr   r   r   r   r    r(   r!   r   r   r   NoEnterrY   ;   s    Ir   r\   c                       \ rS rSrSrSrg)FTestAbstractContextManager.test_structural_subclassing.<locals>.NoExit@   Nr   r   r   r   r    r   r!   r   r   r   NoExitr^   @   s    Hr   ra   )
assertTrue
issubclassr&   assertFalse)r   rR   r$   r\   ra   s        r   test_structural_subclassing6TestAbstractContextManager.test_structural_subclassing,   s    	 	 	
#57MNO	(1 	( 	
<1GHI	( 	 	G-CDE	' 	 	F,BCDr   r   N)	r   r   r   r    r*   r8   rB   re   r!   r   r   r   r   r      s    4-Er   r   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS r\R(                  S 5       r\R(                  S 5       rS rS rS rS rSrg)ContextManagerTestCaseF   c                    ^ / m[         U4S j5       nU" 5        nU R                  TS/5        U R                  US5        TR                  U5        S S S 5        U R                  T/ SQ5        g ! , (       d  f       N#= f)Nc               3   Z   >#    T R                  S5        Sv   T R                  S5        g 7fN   r4     appendstates   r   woohoo@ContextManagerTestCase.test_contextmanager_plain.<locals>.woohooJ   s"     LLOHLL   (+rm   r4   rm   r4   rn   )contextmanagerassertEqualrp   r   rs   xrr   s      @r   test_contextmanager_plain0ContextManagerTestCase.test_contextmanager_plainH   so    		 
	 XUQC(Q#LLO  	-	 Xs   7A..
A<c                 d  ^ / m[         U4S j5       nU R                  [        5         U" 5        nU R                  TS/5        U R                  US5        TR	                  U5        [        5       e! , (       d  f       O= f S S S 5        O! , (       d  f       O= fU R                  T/ SQ5        g )Nc               3      >#    T R                  S5         Sv   T R                  S5        g ! T R                  S5        f = f7frl   ro   rq   s   r   rs   BContextManagerTestCase.test_contextmanager_finally.<locals>.woohooW   s3     LLO"S!S!s   A, A?Arm   r4   rv   )rw   r5   ZeroDivisionErrorrx   rp   ry   s      @r   test_contextmanager_finally2ContextManagerTestCase.test_contextmanager_finallyU   s    		" 
	" 01Q  ,  B'Q'))	  211 	-s   BAA11
A?	;B
Bc                 r   [         S 5       n U" 5          SS-    S S S 5        U R                  [        W5      S5        U R                  US   R                  S5        U R                  US   R                  S5         " S S[        5      n U" 5          U" S5      e! , (       d  f       N= f! [         a*  n[        R                  " UR                  5      n S nANS nAff = f! , (       d  f       O6= f! U a*  n[        R                  " UR                  5      n S nAOS nAff = fU R                  [        U5      S5        U R                  US   R                  S5        U R                  US   R                  S	5         " S
 S[        5      n[        S5      U" S5      4 GH  nU R                  [        U5      S9    U" 5          Ue! , (       d  f       O= f U R                  U S35        OM! [        U5       a;  nU R                  X&5        [        R                  " UR                  5      n S nAOS nAff = fU R                  [        U5      S5        U R                  US   R                  S5        U R                  US   R                  S5        S S S 5        GM   ! , (       d  f       GM  = f   g )Nc               3      #    S v   g 7fr   r   r   r   r   f?ContextManagerTestCase.test_contextmanager_traceback.<locals>.fg           rm   r   test_contextmanager_traceback1/0c                       \ rS rSrSrg)RContextManagerTestCase.test_contextmanager_traceback.<locals>.RuntimeErrorSubclassv   r   Nr>   r   r   r   RuntimeErrorSubclassr   v   r@   r   r   r4   zraise RuntimeErrorSubclass(42)c                       \ rS rSrSrg)SContextManagerTestCase.test_contextmanager_traceback.<locals>.StopIterationSubclass   r   Nr>   r   r   r   StopIterationSubclassr      r@   r   r   spamtype was suppressedzraise stop_exc)rw   r   rO   
extract_tb__traceback__rx   lennamelineRuntimeErrorStopIterationsubTestr   failr'   )r   r   eframesr   r   stop_excs          r   r   4ContextManagerTestCase.test_contextmanager_tracebackf   s+   		 
		;! 
 	Va()HI/	< 		;*2..   	;))!//:F	; # 	;))!//:F	; 	Va()HI)IJ	M 	 &!!&)
H 4>2<&  II
/:;	 H~ CMM!.&11!//BFC   Va0  1PQ  1AB 3222	
s   B- BB- C5 	C$
B*&B- *B- -
C!7 CC!$
C2.C5 2C5 5D%; D  D%?J#G2G
GG2J#2H<1H72J#7H<<AJ##
J3	c                     [         S 5       nU" 5       nUR                  5         U R                  UR                  [        [	        S5      S 5      5        g )Nc               3      #    S v   g 7fr   r   r   r   r   wheeCContextManagerTestCase.test_contextmanager_no_reraise.<locals>.whee   r   r   foo)rw   r(   rd   r   rA   )r   r   ctxs      r   test_contextmanager_no_reraise5ContextManagerTestCase.test_contextmanager_no_reraise   sD    		 
	fi51A4HIr   c                 f   [         S 5       nU" 5       nUR                  5         U R                  [        5         UR	                  [
        [        S5      S 5        S S S 5        [        R                  " SS9(       a&  U R                  UR                  R                  5        g g ! , (       d  f       NN= f)Nc               3   ,   #     S v   g !   S v    g = f7fr   r   r   r   r   whooOContextManagerTestCase.test_contextmanager_trap_yield_after_throw.<locals>.whoo   s     s   	 r   Tcpython)rw   r(   r5   r   r   rA   r   check_impl_detailrd   gengi_suspendedr   r   r   s      r   *test_contextmanager_trap_yield_after_throwAContextManagerTestCase.test_contextmanager_trap_yield_after_throw   s    		 
	
 f|,LLIe$4d; -$$T2SWW112 3 -,s   !B""
B0c                     [         S 5       nU" 5       nU R                  [        5         UR                  5         S S S 5        g ! , (       d  f       g = f)Nc               3      #    g 7fr   r   r   r   r   r   FContextManagerTestCase.test_contextmanager_trap_no_yield.<locals>.whoo   s     s   )rw   r5   r   r(   r   s      r   !test_contextmanager_trap_no_yield8ContextManagerTestCase.test_contextmanager_trap_no_yield   s@    		 
	 f|,MMO -,,s   A
Ac                 L   [         S 5       nU" 5       nUR                  5         U R                  [        5         UR	                  S S S 5        S S S 5        [
        R                  " SS9(       a&  U R                  UR                  R                  5        g g ! , (       d  f       NN= f)Nc               3      #    S v   S v   g 7fr   r   r   r   r   r   JContextManagerTestCase.test_contextmanager_trap_second_yield.<locals>.whoo   s     s   
Tr   )
rw   r(   r5   r   r   r   r   rd   r   r   r   s      r   %test_contextmanager_trap_second_yield<ContextManagerTestCase.test_contextmanager_trap_second_yield   s}    		 
	 f|,LLtT* -$$T2SWW112 3 -,s   B
B#c                     [         S 5       nU" 5       nUR                  5         U R                  [        5         UR	                  [
        S S 5        S S S 5        g ! , (       d  f       g = f)Nc               3   >   #     S v   g ! [          a    [        ef = f7fr   )r   SyntaxErrorr   r   r   r   GContextManagerTestCase.test_contextmanager_non_normalised.<locals>.whoo   s!     " "!!"s   	 )rw   r(   r5   r   r   r   r   s      r   "test_contextmanager_non_normalised9ContextManagerTestCase.test_contextmanager_non_normalised   sP    		" 
	" f{+LLtT2 ,++s   A
A(c                   ^ ^ / m[         U U4S j5       nU" 5        nT R                  TS/5        T R                  US5        TR                  U5        [        S5      e! , (       d  f       O= fT R                  T/ SQ5        g )Nc               3      >#    TR                  S5         Sv   g ! [         a<  n TR                  U R                  S   5        TR                  T/ SQ5         S n A g S n A ff = f7f)Nrm   r4   r   rv   )rp   r   r   rx   )r   r   rr   s    r   rs   AContextManagerTestCase.test_contextmanager_except.<locals>.woohoo   sQ     LLO6$ 6QVVAY'  556s*   A$ A$
A!2AA$A!!A$rm   r4   rn   rv   )rw   rx   rp   r   ry   s   `  @r   test_contextmanager_except1ContextManagerTestCase.test_contextmanager_except   su    		6 
	6 XUQC(Q#LLO#C((	 X
 	-s   AA
A,c                    [         S 5       n " S S[        5      n[        S5      U" S5      4 H%  nU R                  [        U5      S9    U" 5          Ue   g ! , (       d  f       O= f U R	                  U S35        O(! [
         a  nU R                  XC5         S nAOS nAff = fS S S 5        M  ! , (       d  f       M  = f)Nc               3      #    S v   g 7fr   r   r   r   r   rs   JContextManagerTestCase.test_contextmanager_except_stopiter.<locals>.woohoo   r   r   c                       \ rS rSrSrg)YContextManagerTestCase.test_contextmanager_except_stopiter.<locals>.StopIterationSubclass   r   Nr>   r   r   r   r   r      r@   r   r   r   r   r   )rw   r   r   r   r   	Exceptionr'   )r   rs   r   r   exs        r   #test_contextmanager_except_stopiter:ContextManagerTestCase.test_contextmanager_except_stopiter   s    		 
		M 	 'v.0Ef0MNH4>2<&	 O "
 II
/:; ! 0MM"//0	 3222sH   
B2B A
A'#B +B2 
B%
B B2 B%%B22
C	c                     Sn0 n[        XU5        US   n[        S5      n U" 5          Ue! , (       d  f       O= f U R                  S5        g ! [         a  nU R	                  XT5         S nAg S nAff = f)Nztfrom __future__ import generator_stop
from contextlib import contextmanager
@contextmanager
def woohoo():
    yield
rs   r   zStopIteration was suppressed)execr   r   r   r'   )r   codelocalsrs   r   r   s         r   !test_contextmanager_except_pep4798ContextManagerTestCase.test_contextmanager_except_pep479   sw     T6"! (	6 
 II45  	(MM"''	(s$   A ,
:A 
A5A00A5c                 n   [         S 5       n U" 5          [        e! , (       d  f       Ox= f! [         ah  nU R                  [	        U5      [
        5        U R                  UR                  S   S5        U R                  UR                  [        5         S nAOS nAff = f U" 5          [        S5      e! , (       d  f       g = f! [         ac  nU R                  [	        U5      [        5        U R                  UR                  S   S5        U R                  UR                  5         S nAg S nAff = f)Nc               3   R   #     S v   g ! [          a  n [        S5      U eS n A ff = f7f)Nissue29692:Chainedr   r   excs    r   test_issue29692oContextManagerTestCase.test_contextmanager_do_not_unchain_non_stopiteration_exceptions.<locals>.test_issue29692  s-     B B"#78cABs   '	 '
$$'r   r   zissue29692:Unchained)rw   r   r   r'   r   r   rx   r   assertIsInstance	__cause__r   assertIsNone)r   r   r   s      r   ?test_contextmanager_do_not_unchain_non_stopiteration_exceptionsVContextManagerTestCase.test_contextmanager_do_not_unchain_non_stopiteration_exceptions  s    		B 
	B
	C "'' #" 	CMM$r(L1RWWQZ)=>!!",,0ABB	C
	, "#$:;; #" 	,MM$r(M2RWWQZ)?@bll++	,sV   - 
*- - 
BABB#C *B66
C C C 
D4AD//D4c                 d   [         S 5       nU R                  [        5         U" 5          SS-    S S S 5        S S S 5        U R                  [        5         U" 5          [        e! , (       d  f       N:= f! , (       d  f       NC= f! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)Nc               3   X   #     S v   g ! [          a  n [        SU  35      U eS n A ff = f7f)Nzcaught r   r   s    r   rs   LContextManagerTestCase.test_contextmanager_wrap_runtimeerror.<locals>.woohoo#  s/     = ="WSE?3<=s   *	 *
'"'*rm   r   )rw   r5   r   r   r   rs   s     r   %test_contextmanager_wrap_runtimeerror<ContextManagerTestCase.test_contextmanager_wrap_runtimeerror"  s|    		= 
	= |,A  - }-##  -,  .--s?   A5A$A5B!B$
A2	.A55
B
B	B!!
B/c                 6    S n[         U" SS9S 5       5       nU$ )Nc                     ^  U 4S jnU$ )Nc                 R   > TR                  5        H  u  p[        XU5        M     U $ r   )itemssetattr)funckvkws      r   decorateXContextManagerTestCase._create_contextmanager_attribs.<locals>.attribs.<locals>.decorate7  s$    88:CAD1% &r   r   )r   r   s   ` r   attribsFContextManagerTestCase._create_contextmanager_attribs.<locals>.attribs6  s     Or   bar)r   c              3      #    Sv   g7f)Whee!Nr   )r   s    r   bazBContextManagerTestCase._create_contextmanager_attribs.<locals>.baz<  s
      r   rw   )r   r   r   s      r   _create_contextmanager_attribs5ContextManagerTestCase._create_contextmanager_attribs5  s/    	 
	U		 
 
	 
r   c                     U R                  5       nU R                  UR                  S5        U R                  UR                  S5        g )Nr   r   )r  rx   r   r   r   r   s     r   test_contextmanager_attribs2ContextManagerTestCase.test_contextmanager_attribsC  s8    113e,%(r   c                 \    U R                  5       nU R                  UR                  S5        g Nr   r  rx   __doc__r  s     r   test_contextmanager_doc_attrib5ContextManagerTestCase.test_contextmanager_doc_attribH  s$    113g.r   c                 h    U R                  5       " S 5      nU R                  UR                  S5        g r
  r  r  s     r   *test_instance_docstring_given_cm_docstringAContextManagerTestCase.test_instance_docstring_given_cm_docstringM  s)    113D9g.r   c                     [         S 5       nU" SSSSS9 nU R                  US5        S S S 5        g ! , (       d  f       g = f)Nc              3      #    XX#4v   g 7fr   r   r   r   r   kwdss       r   rs   4ContextManagerTestCase.test_keywords.<locals>.woohooT  s     t**s   
      !   ,   r  )r  r  r  r  rw   rx   )r   rs   targets      r   test_keywords$ContextManagerTestCase.test_keywordsR  sA    		+ 
	+"2B76V%56 877s	   2
A c                    ^   " S S5      n[         U 4S j5       nU" U" 5       U" 5       S9    S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrSrg)0ContextManagerTestCase.test_nokeepref.<locals>.Ai[  r   Nr>   r   r   r   Ar!  [  r@   r   r"  c              3      >#    [         R                  " U 5      n [         R                  " U5      n[        R                  " 5         TR	                  U " 5       5        TR	                  U" 5       5        S v   g 7fr   )weakrefrefr   
gc_collectr   )abr   s     r   rs   5ContextManagerTestCase.test_nokeepref.<locals>.woohoo^  sO     AAAA ac"ac"s   A3A6r(  r  )r   r"  rs   s   `  r   test_nokeepref%ContextManagerTestCase.test_nokeeprefZ  s@    	 	 
	 
	 AC13  s	   7
Ac                 b   [         S 5       nU R                  [        5         U" 5         S S S 5        U R                  [        5         U" SS5        S S S 5        U R                  [        5         U" SS9  S S S 5        g ! , (       d  f       NZ= f! , (       d  f       ND= f! , (       d  f       g = f)Nc             3      #    S v   g 7fr   r   r'  r(  s     r   rs   8ContextManagerTestCase.test_param_errors.<locals>.woohool  r   r         r*  )rw   r5   rA   r   s     r   test_param_errors(ContextManagerTestCase.test_param_errorsk  s~    		 
	 y)H *y)1aL *y)QK *)	 *)))))s#   A>
B.B >
B
B 
B.c                    ^ ^^^ SmSm[         UUU 4S j5       nU" 5       UU4S j5       mT" 5         T R                  TS5        T R                  TS5        g )Nr   c               3   \   >#    TS-  mTn TS-  mS v   TS-  mTR                  TU 5        g 7fNrm   )rx   )beforedepthncolsr   s    r   rs   5ContextManagerTestCase.test_recursive.<locals>.woohooz  s;      QJEFQJEQJEUF+s   ),c                  "   > T S:  a  T" 5         g g )N
   r   )r9  	recursives   r   r>  8ContextManagerTestCase.test_recursive.<locals>.recursive  s    rz r   r=  r  )r   rs   r9  r:  r>  s   ` @@@r   test_recursive%ContextManagerTestCase.test_recursivew  s\    		, 
	, 
	 
	 	#"r   r   N)r   r   r   r    r{   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   requires_docstringsr  r  r  r+  r3  r@  r!   r   r   r   rh   rh   F   s    .."0CdJ333."<$6*,.$&)
   / !/   / !/7"
#r   rh   c                   D    \ rS rSr\R
                  S 5       rS rS rSr	g)ClosingTestCasei  c                 r    [         R                  n[        S 5      nU R                  UR                  U5        g r   )closingr  rx   r   cm_docstringobjs      r   test_instance_docs"ClosingTestCase.test_instance_docs  s*     dml3r   c                    ^ / m " U4S jS5      nU" 5       nU R                  T/ 5        [        U5       nU R                  X#5        S S S 5        U R                  TS/5        g ! , (       d  f       N"= f)Nc                   "   > \ rS rSrU 4S jrSrg)'ClosingTestCase.test_closing.<locals>.Ci  c                 (   > TR                  S5        g r7  ro   r   rr   s    r   close-ClosingTestCase.test_closing.<locals>.C.close      Qr   r   Nr   r   r   r    rQ  r!   rq   s   r   CrN           r   rU  rm   )rx   rF  r   rU  rz   yrr   s       @r   test_closingClosingTestCase.test_closing  sa    	  	  C#QZ1Q" $ Zs   A##
A1c                 P  ^ / m " U4S jS5      nU" 5       nU R                  T/ 5        U R                  [        5         [        U5       nU R                  X#5        SS-    S S S 5        S S S 5        U R                  TS/5        g ! , (       d  f       N*= f! , (       d  f       N3= f)Nc                   "   > \ rS rSrU 4S jrSrg)-ClosingTestCase.test_closing_error.<locals>.Ci  c                 (   > TR                  S5        g r7  ro   rP  s    r   rQ  3ClosingTestCase.test_closing_error.<locals>.C.close  rS  r   r   NrT  rq   s   r   rU  r]    rV  r   rU  rm   r   )rx   r5   r   rF  rW  s       @r   test_closing_error"ClosingTestCase.test_closing_error  s    	  	  C#01q  &A  2 	$  21s#   BB"B
B	B
B%r   N)
r   r   r   r    r   rB  rJ  rY  r`  r!   r   r   r   rD  rD    s$      4 !4	%%r   rD  c                       \ rS rSrS rSrg)NullcontextTestCasei  c                      " S S5      nU" 5       n[        U5       nU R                  X25        S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrSrg)/NullcontextTestCase.test_nullcontext.<locals>.Ci  r   Nr>   r   r   r   rU  rf    r@   r   rU  )nullcontextr'   )r   rU  cc_ins       r   test_nullcontext$NullcontextTestCase.test_nullcontext  s2    	 	C^tMM$" ^^s	   8
Ar   N)r   r   r   r    rj  r!   r   r   r   rc  rc    s    #r   rc  c                       \ rS rSrS rSrg)FileContextTestCasei  c                    [         R                  " 5       n [        USSS9 nU R                  UR                  5        UR                  S5        S S S 5        U R                  WR                  5        U R                  [        5         [        USSS9 nU R                  UR                  5        U R                  UR                  5       S5        SS-    S S S 5        S S S 5        U R                  UR                  5        [        R                  " U5        g ! , (       d  f       N= f! , (       d  f       NY= f! , (       d  f       Nb= f! [        R                  " U5        f = f)Nwzutf-8)encodingzBooh
rrm   r   )tempfilemktempopenrd   closedwriterb   r5   r   rx   readr   unlink)r   tfnr   s      r   testWithOpen FileContextTestCase.testWithOpen  s    oo	"c31Q  *! 2 OOAHH%""#45#sW5$$QXX.$$QVVXx8E 6 6
 OOAHH%S! 21
 65 65 S!sS   E	 -D8E	 D8AD'D8#E	 
D$ E	 '
D5	1D88
EE	 	E!r   N)r   r   r   r    rz  r!   r   r   r   rm  rm    s    "r   rm  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
LockContextTestCasei  c                    U R                  U" 5       5        U   U R                  U" 5       5        S S S 5        U R                  U" 5       5        U R                  [        5         U   U R                  U" 5       5        SS-    S S S 5        S S S 5        U R                  U" 5       5        g ! , (       d  f       N= f! , (       d  f       N>= f! , (       d  f       NG= fNrm   r   )rd   rb   r5   r   )r   locklockeds      r   boilerPlateLockContextTestCase.boilerPlate  s    "OOFH% "01)A  2 	" T  21s/   B)#C&B:C)
B7:
C	C
Cc                 d    [         R                  " 5       nU R                  XR                  5        g r   )	threadingLockr  r  r   r  s     r   testWithLock LockContextTestCase.testWithLock  s     ~~{{+r   c                 d    [         R                  " 5       nU R                  XR                  5        g r   )r  RLockr  	_is_ownedr  s     r   testWithRLock!LockContextTestCase.testWithRLock  s      ~~.r   c                 `   ^ [         R                  " 5       mU4S jnU R                  TU5        g )Nc                  $   > T R                  5       $ r   )r  r  s   r   r  5LockContextTestCase.testWithCondition.<locals>.locked  s    >>##r   )r  	Conditionr  r   r  r  s     @r   testWithCondition%LockContextTestCase.testWithCondition  s&    ""$	$v&r   c                 `   ^ [         R                  " 5       mU4S jnU R                  TU5        g )Nc                  T   > T R                  S5      (       a  T R                  5         ggNFTacquirereleaser  s   r   r  5LockContextTestCase.testWithSemaphore.<locals>.locked  !    ||E""r   )r  	Semaphorer  r  s     @r   testWithSemaphore%LockContextTestCase.testWithSemaphore  s(    ""$	 	v&r   c                 `   ^ [         R                  " 5       mU4S jnU R                  TU5        g )Nc                  T   > T R                  S5      (       a  T R                  5         ggr  r  r  s   r   r  <LockContextTestCase.testWithBoundedSemaphore.<locals>.locked  r  r   )r  BoundedSemaphorer  r  s     @r   testWithBoundedSemaphore,LockContextTestCase.testWithBoundedSemaphore  s(    ))+	 	v&r   r   N)r   r   r   r    r  r  r  r  r  r  r!   r   r   r   r}  r}    s     	#,/'''r   r}  c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g)	mycontexti  z9Example decoration-compatible context manager for testingFNc                     SU l         U $ NTstartedrI   s    r   r(   mycontext.__enter__  s    r   c                 &    Xl         U R                  $ r   )r   catchr   r   s     r   r   mycontext.__exit__  s    zzr   r   r  )r   r   r   r    r  r  r   r  r(   r   r!   r   r   r   r  r    s    CG
CEr   r  c                   n    \ rS rSr\R
                  S 5       rS rS rS r	S r
S rS rS	 rS
 rS rSrg)TestContextDecoratori  c                 p    [         R                  n[        5       nU R                  UR                  U5        g r   )r  r  rx   rG  s      r   rJ  'TestContextDecorator.test_instance_docs  s*     !((kl3r   c                     [        5       nU nU R                  X!5        U R                  UR                  5        S S S 5        U R	                  UR
                  S5        g ! , (       d  f       N+= f)NNNN)r  r'   rb   r  rx   r   )r   contextresults      r   test_contextdecorator*TestContextDecorator.test_contextdecorator  sN    +MM&*OOGOO,  	&89	 Ws   -A
A-c                    [        5       nU R                  [        S5         U   [        S5      e! , (       d  f       O= f S S S 5        O! , (       d  f       O= fU R                  UR                  5        U R                  UR                  S   [        5        [        5       nSUl        U   [        S5      e! , (       d  f       O= fU R                  UR                  5        U R                  UR                  S   [        5        g )Nr   r   T)r  assertRaisesRegex	NameErrorassertIsNotNoner   r'   r  )r   r  s     r   $test_contextdecorator_with_exception9TestContextDecorator.test_contextdecorator_with_exception  s    +##Iu5&&  655 	W[[)gkk!ni0+E"" WW[[)gkk!ni0s$   A0
>	A
A-B99
Cc                 z   ^ ^ [        5       mTUU 4S j5       nU" 5         T R                  TR                  S5        g )Nc                  r   > TR                  T R                  5        TR                  T R                  5        g r   r   r   rb   r  r  r   s   r   test1TestContextDecorator.test_decorator.<locals>.test1  %    gkk*OOGOO,r   r  )r  rx   r   r   r  r  s   ` @r   test_decorator#TestContextDecorator.test_decorator.  s8    +		- 
	- 	&89r   c                   ^ ^ [        5       mTUU 4S j5       nT R                  [        S5         U" 5         S S S 5        T R                  TR                  5        T R                  TR                  S   [        5        g ! , (       d  f       NM= f)Nc                     > TR                  T R                  5        TR                  T R                  5        [	        S5      e)Nr   )r   r   rb   r  r  r  s   r   r  @TestContextDecorator.test_decorator_with_exception.<locals>.test<  s0    gkk*OOGOO,E""r   r   r   )r  r  r  r  r   r'   r  s   ` @r   test_decorator_with_exception2TestContextDecorator.test_decorator_with_exception9  si    +		# 
	#
 ##Iu5F 6W[[)gkk!ni0 65s   A>>
Bc                   ^ [        5       m " U4S jS[        5      nU" 5       nUR                  SS5        U R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S 5        U" 5       nUR                  SSS5        U R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U" 5       nUR                  SSS9  U R                  UR                  S5        U R                  UR
                  S5        g )	Nc                   ,   > \ rS rSr Y SS j5       rSrg)9TestContextDecorator.test_decorating_method.<locals>.TestiK  Nc                 (    Xl         X l        X0l        g r   r'  r(  rh  )r   r'  r(  rh  s       r   method@TestContextDecorator.test_decorating_method.<locals>.Test.methodM  s    r   r  r   )r   r   r   r    r  r!   )r  s   r   Testr  K  s     r   r  rm      r'  r(  rh  r/  )r  objectr  rx   r'  r(  rh  )r   r  r  r  s      @r   test_decorating_method+TestContextDecorator.test_decorating_methodH  s    +	6 	 vAq##&vCc"%%%va1##r   c                      " S S[         5      nU R                  [        S5         U" 5           S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nc                        \ rS rSrS rS rSrg)7TestContextDecorator.test_typo_enter.<locals>.mycontextig  c                     g r   r   rI   s    r   	__unter__ATestContextDecorator.test_typo_enter.<locals>.mycontext.__unter__h      r   c                     g r   r   r  s     r   r   @TestContextDecorator.test_typo_enter.<locals>.mycontext.__exit__j  r  r   r   N)r   r   r   r    r  r   r!   r   r   r   r  r  g      r   r  the context managerContextDecoratorr  rA   r   r  s     r   test_typo_enter$TestContextDecorator.test_typo_enterf  sH    	( 	 ##I/DE  FE FE!   AAA
A	A
A c                      " S S[         5      nU R                  [        S5         U" 5           S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nc                        \ rS rSrS rS rSrg)6TestContextDecorator.test_typo_exit.<locals>.mycontextis  c                     g r   r   rI   s    r   r(   @TestContextDecorator.test_typo_exit.<locals>.mycontext.__enter__t  r  r   c                     g r   r   r  s     r   __uxit__?TestContextDecorator.test_typo_exit.<locals>.mycontext.__uxit__v  r  r   r   N)r   r   r   r    r(   r  r!   r   r   r   r  r  s  r  r   r  zthe context manager.*__exit__r  r  s     r   test_typo_exit#TestContextDecorator.test_typo_exitr  sH    	( 	 ##I/NO  PO POr  c                    ^ ^  " S S[         5      n " S SU[        5      nU" 5       mTUU 4S j5       nU" 5         T R                  TR                  S5        g )Nc                   (    \ rS rSrSrSrS rS rSrg)HTestContextDecorator.test_contextdecorator_as_mixin.<locals>.somecontexti  FNc                     SU l         U $ r  r  rI   s    r   r(   RTestContextDecorator.test_contextdecorator_as_mixin.<locals>.somecontext.__enter__  s    #r   c                     Xl         g r   r   r  s     r   r   QTestContextDecorator.test_contextdecorator_as_mixin.<locals>.somecontext.__exit__      r   r  )	r   r   r   r    r  r   r(   r   r!   r   r   r   somecontextr    s    GCr   r  c                       \ rS rSrSrg)FTestContextDecorator.test_contextdecorator_as_mixin.<locals>.mycontexti  r   Nr>   r   r   r   r  r    r@   r   r  c                  r   > TR                  T R                  5        TR                  T R                  5        g r   r  r  s   r   r  ATestContextDecorator.test_contextdecorator_as_mixin.<locals>.test  r  r   r  )r  r  rx   r   )r   r  r  r  r  s   `   @r   test_contextdecorator_as_mixin3TestContextDecorator.test_contextdecorator_as_mixin~  sU    		& 			%5 	 +		- 
	- 	&89r   c                    ^ ^ [         U4S j5       n/ mU" S5      U U4S j5       nU" S5        T R                  T/ SQ5        / mU" S5        T R                  T/ SQ5        g )Nc              3   Z   >#    TR                  U 5        S v   TR                  S5        g 7f)Nrn   ro   )rX  rr   s    r   rs   ETestContextDecorator.test_contextmanager_as_decorator.<locals>.woohoo  s      LLOLLru   rm   c                 N   > TR                  TS/5        TR                  U 5        g r7  )rx   rp   )rz   r   rr   s    r   r  CTestContextDecorator.test_contextmanager_as_decorator.<locals>.test  s     UQC(LLOr   	something)rm   r  rn   something else)rm   r  rn   r  )r   rs   r  rr   s   `  @r    test_contextmanager_as_decorator5TestContextDecorator.test_contextmanager_as_decorator  sn    		 
	
 		 
	 	[ 56  :;r   r   N)r   r   r   r    r   rB  rJ  r  r  r  r  r  r  r  r  r  r!   r   r   r   r  r    sG      4 !4:1":1$<		:0<r   r  c                       \ rS rSrSr\R                  S 5       rS rS r	S r
S rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)TestBaseExitStacki  Nc                     U R                   R                  nU R                  5       nU R                  UR                  U5        g r   )
exit_stackr  rx   rG  s      r   rJ  $TestBaseExitStack.test_instance_docs  s3     ..ool3r   c                 Z    U R                  5           S S S 5        g ! , (       d  f       g = fr   )r  rI   s    r   test_no_resources#TestBaseExitStack.test_no_resources  s    __ s   
*c                 &  ^ S0 4S0 4S0 4S[        SS94S[        SS94S[        SS94S[        SSS94/n/ mU4S	 jnU R                  5        n[        U5       H  u  pEU(       a  U(       a  UR                  " U/UQ70 UD6nOGU(       a  UR                  " U/UQ76 nO,U(       a  UR                  " U40 UD6nOUR                  U5      nU R	                  Xb5        M     UR
                   Ht  nU R	                  US   R                  U5        U R                  US   R                  UR                  5        U R                  US   R                  UR                  5        Mv     S S S 5        U R                  TU5        / mU R                  5        nU R                  [        5         UR                  SS
9  S S S 5        U R                  [        5         U R                  R                  SS
9  S S S 5        U R                  [        5         UR                  USS9  S S S 5        S S S 5        U R                  T/ 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ny= f! , (       d  f       N\= f! , (       d  f       Ne= f)Nr   )rm   )rm   r  rm   )exampler1     )r   callbackc                  *   > TR                  X45        g)zTest metadata propagationNro   )r   r  r  s     r   _exit.TestBaseExitStack.test_callback.<locals>._exit  s    MM4,'r   )argr  )r  r!  )dictr  reversedr  r'   _exit_callbacks__wrapped__assertNotEqualr   r   r  rx   r5   rA   )	r   expectedr  stackr   r  r   wrapperr  s	           @r   test_callbackTestBaseExitStack.test_callback  s   H2JBKa!4?#DO$Da!,-
 	( __%&x0
Du<t<t<Au4t4Au55Au-Aa' 1 !00gaj44e<##GAJ$7$7H!!'!*"4"4emmD 1  	*__%""9-1% .""9-((Q(/ .""9-15 .  	$3 & .----- sa   DH>J&I6JI -J
I1J>
I
I	J 
I.	*J1
I?	;J
Jc                 \  ^ ^ [         mUU 4S jnS nU 4S jn " S S[        5      nT R                  5        nUR                  U5        T R	                  UR
                  S   S   U5        U" U5      nUR                  U5        T R	                  UR
                  S   S   R                  U5        UR                  U5        T R	                  UR
                  S   S   U5        U" U5      nUR                  U5        T R	                  UR
                  S   S   R                  U5        UR                  U5        T R	                  UR
                  S   S   U5        UR                  U5        T R	                  UR
                  S   S   U5        SS-    S S S 5        g ! , (       d  f       g = f)	Nc                 *   > TR                  U T5        g r   )r'   )rM   r   exc_tb
exc_raisedr   s      r   _expect_exc0TestBaseExitStack.test_push.<locals>._expect_exc  s    MM(J/r   c                      gr  r   exc_detailss    r   _suppress_exc2TestBaseExitStack.test_push.<locals>._suppress_exc      r   c                 l   > TR                  U 5        TR                  U5        TR                  U5        g r   )r   )rM   r   r.  r   s      r   
_expect_ok/TestBaseExitStack.test_push.<locals>._expect_ok  s-    h'c"f%r   c                   &    \ rS rSrS rS rS rSrg)+TestBaseExitStack.test_push.<locals>.ExitCMi  c                     Xl         g r   	check_exc)r   r?  s     r   __init__4TestBaseExitStack.test_push.<locals>.ExitCM.__init__  s    !*r   c                 &    U R                  S5        g )NzShould not be called!)r   rI   s    r   r(   5TestBaseExitStack.test_push.<locals>.ExitCM.__enter__  s    		12r   c                 "    U R                   " U6   g r   r>  r   r4  s     r   r   4TestBaseExitStack.test_push.<locals>.ExitCM.__exit__  s    ,r   r>  Nr   r   r   r    r@  r(   r   r!   r   r   r   ExitCMr<    s    +3-r   rH  rm   r   )r   r  r  pushr'   r$  __self__)r   r0  r5  r9  rH  r(  cmr/  s   `      @r   	test_pushTestBaseExitStack.test_push  s^   &
	0		&	-V 	- __%JJz"MM%//3A6
C
#BJJrNMM%//3A6??DJJ}%MM%//3A6F$BJJrNMM%//3A6??DJJ{#MM%//3A6DJJ{#MM%//3A6DaC s   EF
F+c                   ^  " U4S jS[         5      n/ mU" 5       nU R                  5        nUR                  U4S j5       nU R                  U5        UR	                  U5        U R                  UR                  S   S   R                  U5        TR                  S5        S S S 5        U R                  T/ SQ5        g ! , (       d  f       N#= f)Nc                   .   > \ rS rSrU 4S jrU 4S jrSrg)4TestBaseExitStack.test_enter_context.<locals>.TestCMi  c                 (   > TR                  S5        g r7  ro   )r   r  s    r   r(   >TestBaseExitStack.test_enter_context.<locals>.TestCM.__enter__      a r   c                 (   > TR                  S5        g Nr1  ro   )r   r4  r  s     r   r   =TestBaseExitStack.test_enter_context.<locals>.TestCM.__exit__  rT  r   r   NrQ   r  s   r   TestCMrQ    s    !! !r   rY  c                  (   > T R                  S5        g )Nr  ro   rX  s   r   r  3TestBaseExitStack.test_enter_context.<locals>._exit      a r   rI  rm   r  )rm   r  r1  r  )
r  r  r  r  enter_contextr'   r$  rK  rp   rx   )r   rY  rL  r(  r  r  s        @r   test_enter_context$TestBaseExitStack.test_enter_context  s    	!V 	! X__%^^! !  '#MM%//3A6??DMM!  	. s   A5B??
Cc                 n    " S S5      n " S S5      n " S S5      nU R                  5        nU R                  [        S5         UR                  U" 5       5        S S S 5        U R                  [        S5         UR                  U" 5       5        S S S 5        U R                  [        S5         UR                  U" 5       5        S S S 5        U R	                  UR
                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       Nx= f! , (       d  f       NT= f! , (       d  f       g = f)Nc                       \ rS rSrSrg)FTestBaseExitStack.test_enter_context_errors.<locals>.LacksEnterAndExiti  r   Nr>   r   r   r   LacksEnterAndExitrb    r@   r   rc  c                       \ rS rSrS rSrg)?TestBaseExitStack.test_enter_context_errors.<locals>.LacksEnteri  c                     g r   r   )r   exc_infos     r   r   HTestBaseExitStack.test_enter_context_errors.<locals>.LacksEnter.__exit__  r  r   r   Nr`   r   r   r   
LacksEnterre        r   ri  c                       \ rS rSrS rSrg)>TestBaseExitStack.test_enter_context_errors.<locals>.LacksExiti  c                     g r   r   rI   s    r   r(   HTestBaseExitStack.test_enter_context_errors.<locals>.LacksExit.__enter__  r  r   r   Nr[   r   r   r   	LacksExitrl    rj  r   ro  r  )r  r  rA   r]  rd   r$  )r   rc  ri  ro  r(  s        r   test_enter_context_errors+TestBaseExitStack.test_enter_context_errors  s    	 		 		 	 __%''	3HI##$5$78 J''	3HI##JL1 J''	3HI##IK0 JU223 IIIIII sS   D&C3D&;DD&0D#D&3
D	=D&
D	D&
D#	D&&
D4c                   ^ / mU R                  5        nUR                  U4S j5       nU R                  U5        UR                  5         TR	                  S5        S S S 5        U R                  TSS/5        g ! , (       d  f       N#= f)Nc                  (   > T R                  S5        g r7  ro   rX  s   r   r  +TestBaseExitStack.test_close.<locals>._exit-  r\  r   r  rm   )r  r  r  rQ  rp   rx   )r   r(  r  r  s      @r   
test_closeTestBaseExitStack.test_close*  sq    __%^^! !  'KKMMM!  	!Q( s   AA99
Bc                 V  ^ / mU R                  5        nUR                  U4S j5       nU R                  U5        UR                  5       nTR	                  S5        S S S 5        TR	                  S5        WR                  5         U R                  T/ SQ5        g ! , (       d  f       ND= f)Nc                  (   > T R                  S5        g rV  ro   rX  s   r   r  -TestBaseExitStack.test_pop_all.<locals>._exit8  r\  r   rm   r  )rm   r  r1  )r  r  r  pop_allrp   rQ  rx   )r   r(  r  	new_stackr  s       @r   test_pop_allTestBaseExitStack.test_pop_all5  s    __%^^! !  'IMM!  	a+ s   AB
B(c                     U R                  [        5         U R                  5        nUR                  S 5        SS-    S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nc                      g)NFr   r   s    r   <lambda>3TestBaseExitStack.test_exit_raise.<locals>.<lambda>E  s    r   rm   r   )r5   r   r  rJ  r   r(  s     r   test_exit_raise!TestBaseExitStack.test_exit_raiseB  sN    01"e

-.! # 21"" 21s!   A!AA!
A	A!!
A/c                     U R                  5        nUR                  S 5        SS-    S S S 5        g ! , (       d  f       g = f)Nc                      gr  r   r   s    r   r  6TestBaseExitStack.test_exit_suppress.<locals>.<lambda>J      Dr   rm   r   r  rJ  r  s     r   test_exit_suppress$TestBaseExitStack.test_exit_suppressH  s.    __%JJ()aC s	   2
A c                    S n U R                  5        nUR                  U[        5        SS-    S S S 5        U R                  W[        5        [        R
                  " UR                  5      nS/U R                  -   SS/-   nU R                  U Vs/ s H  owR                  UR                  4PM     snU5        U R                  UR                  [        5        [        R
                  " UR                  R                  5      nU R                  U Vs/ s H  owR                  UR                  4PM     snS/5        g ! , (       d  f       GN= f! [         a  nUn S nAGN+S nAff = fs  snf s  snf )Nc                     U er   r   r   s    r   	raise_excBTestBaseExitStack.test_exit_exception_traceback.<locals>.raise_excS      Ir   rm   r   )test_exit_exception_tracebackz with self.exit_stack() as stack:)_exit_wrapperzcallback(*args, **kwds))r  	raise exc)r  r   )r  r  
ValueErrorr   rO   r   r   callback_error_internal_framesrx   r   r   __context__r   )	r   r  r(  r   r   	ve_framesr'  r   
zde_framess	            r   r  /TestBaseExitStack.test_exit_exception_tracebackM  s=   		"ey*5! # 	c:.(():):;	RS//09')) 	 	'01y!ffaffy18	= 	coo/@A))#//*G*GH
J?Jq66166*J?BC	E' #"  	C	 2 @s?   E E E !E,!E1 
E
E E 
E)E$$E)c           	      J    " S S5      n " S S5      n " S S5      n U" [         5         U" [        [        5         U" 5          U" [        5         SS-    S S S 5        S S S 5        S S S 5        S S S 5        U R	                  S	5        UR                  S   nU R                  U[        5        U R                  UR                  [        5        g ! , (       d  f       N}= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! [          a  nU R                  UR                  [        5        U R                  UR                  R                  [        5        U R                  UR                  R                  R                  5         S nAGNS nAff = f)
Nc                   &    \ rS rSrS rS rS rSrg)JTestBaseExitStack.test_exit_exception_chaining_reference.<locals>.RaiseExcip  c                     Xl         g r   r   r  s     r   r@  STestBaseExitStack.test_exit_exception_chaining_reference.<locals>.RaiseExc.__init__q  r  r   c                     U $ r   r   rI   s    r   r(   TTestBaseExitStack.test_exit_exception_chaining_reference.<locals>.RaiseExc.__enter__s  rK   r   c                     U R                   er   r   rE  s     r   r   STestBaseExitStack.test_exit_exception_chaining_reference.<locals>.RaiseExc.__exit__u  s    hhr   r   NrG  r   r   r   RaiseExcr  p  s    r   r  c                   &    \ rS rSrS rS rS rSrg)UTestBaseExitStack.test_exit_exception_chaining_reference.<locals>.RaiseExcWithContextix  c                     Xl         X l        g r   )outerinner)r   r  r  s      r   r@  ^TestBaseExitStack.test_exit_exception_chaining_reference.<locals>.RaiseExcWithContext.__init__y  s    "
"
r   c                     U $ r   r   rI   s    r   r(   _TestBaseExitStack.test_exit_exception_chaining_reference.<locals>.RaiseExcWithContext.__enter__|  rK   r   c                 >     U R                   e!   U R                  e= fr   r  r  rE  s     r   r   ^TestBaseExitStack.test_exit_exception_chaining_reference.<locals>.RaiseExcWithContext.__exit__~  s"    %**$%**$s    r  NrG  r   r   r   RaiseExcWithContextr  x  s    #%r   r  c                        \ rS rSrS rS rSrg)MTestBaseExitStack.test_exit_exception_chaining_reference.<locals>.SuppressExci  c                     U $ r   r   rI   s    r   r(   WTestBaseExitStack.test_exit_exception_chaining_reference.<locals>.SuppressExc.__enter__  rK   r   c                 $    U[        U 5      l        gr  )r   saved_detailsrE  s     r   r   VTestBaseExitStack.test_exit_exception_chaining_reference.<locals>.SuppressExc.__exit__  s    +6T
(r   r   NrQ   r   r   r   SuppressExcr    s    r   r  rm   r   0Expected IndexError, but no exception was raised)

IndexErrorKeyErrorr6   r  r   r   r  r   r  r   )r   r  r  r  r   	inner_excs         r   &test_exit_exception_chaining_reference8TestBaseExitStack.test_exit_exception_chaining_referencem  s-   	 	
	% 
	%	 		J*%(>B$%j1E 2 ' C & IIHI--a0	i4i335FG 21 ' CB &%
  	G!!#//8<!!#//"="=~Ncoo99EEFF		Gsv   D DC2C!C	C!!C2)D1D 
CC!!
C/+C22
D 	<D
DD 
F"A9FF"c                   ^ S nS mU4S jn U R                  5        nUR                  U[        5        UR                  U[        5        UR                  U[        5        UR                  U5        UR                  U[        5        SS-    S S S 5        U R                  S5        TS   nU R                  U[        5        U R                  UR                  [        5        g ! , (       d  f       N[= f! [         a  nU R                  UR                  [        5        U R                  UR                  R                  [        5        U R                  UR                  R                  R                  5         S nANS nAff = f)Nc                     U er   r   r   s    r   r  ATestBaseExitStack.test_exit_exception_chaining.<locals>.raise_exc  r  r   c                  
   > U mgr  r   )r4  r  s    r   suppress_excDTestBaseExitStack.test_exit_exception_chaining.<locals>.suppress_exc  s    'Mr   rm   r   r  )r  r  r  r  r6   rJ  r  r   r   r  r   r   )r   r  r  r(  r   r  r  s         @r   test_exit_exception_chaining.TestBaseExitStack.test_exit_exception_chaining  s!   	 	
	J"ey*5y(3y.9

<(y*5A # IIHI!!$	i4i335FG# #"  	G!!#//8<!!#//"="=~Ncoo99EEFF		Gs0   C3 A/C"C3 "
C0,C3 3
F =A9E;;F c                   ^ ^^  " S S[         5      m[        U4S j5       m[        UU 4S j5       nTU4 H%  nT R                  5           U" 5          [        5       e   g ! , (       d  f       O= f T R	                  S5        O.! T a%  nT R                  UR                  5         S nAOS nAff = fS S S 5        M  ! , (       d  f       M  = f)Nc                       \ rS rSrSrg)PTestBaseExitStack.test_exit_exception_explicit_none_context.<locals>.MyExceptioni  r   Nr>   r   r   r   MyExceptionr    r@   r   r  c               3   `   >#     S v   g ! [          a    T" 5       n  U e! S U l        f = ff = f7fr   )BaseExceptionr  )r   r  s    r   my_cmJTestBaseExitStack.test_exit_exception_explicit_none_context.<locals>.my_cm  s6     +  +!m+I&*CO+s    .
 .+	'+.c               3      >#    TR                  5        n U R                  T" 5       5        U v   S S S 5        g ! , (       d  f       g = f7fr   )r  r]  )r(  r  r   s    r   my_cm_with_exit_stackZTestBaseExitStack.test_exit_exception_explicit_none_context.<locals>.my_cm_with_exit_stack  s2     "e##EG, #""s   A	8	A	
AA	r  )r   rw   r   r  r   r   r  )r   r  rL  r   r  r  s   `   @@r   )test_exit_exception_explicit_none_context;TestBaseExitStack.test_exit_exception_explicit_none_context  s    	) 	 
	+ 
	+ 
	 
	
 /0BR(l*	 1 
 IIPQ # 7%%coo667	  sH   	B<BA  
A.*B2B<B/
B*%B<*B//B<<
C	c                 ~   S nS n U R                  5        nUR                  S 5        UR                  U[        5        S S S 5        U R                  S5         U R                  5        nUR                  U[        5        UR                  U5        UR                  U[        5        S S S 5        U R                  S5        g ! , (       d  f       N= f! [         a   nU R                  U[        5         S nANS nAff = f! , (       d  f       N^= f! [         a   nU R                  U[        5         S nAg S nAff = f)Nc                     U er   r   r   s    r   r  HTestBaseExitStack.test_exit_exception_non_suppressing.<locals>.raise_exc  r  r   c                      gr  r   r3  s    r   r  KTestBaseExitStack.test_exit_exception_non_suppressing.<locals>.suppress_exc  r7  r   c                      g r   r   r   r   r   r  GTestBaseExitStack.test_exit_exception_non_suppressing.<locals>.<lambda>  s    tr   r  z.Expected KeyError, but no exception was raised)r  r  r  r   r   r   r  rJ  )r   r  r  r(  r   s        r   #test_exit_exception_non_suppressing5TestBaseExitStack.test_exit_exception_non_suppressing  s    			J"e|,y*5 # IIHI	H"ey(3

<(y*5 # IIFG! #"  	3!!#z22	3 #"  	1!!#x00	1s^   C )CC D +>D)D 
CC 
C>C99C>
DD 
D<D77D<c                    [         S 5       n[        S5      n[        S5      n[        S5      n[        S5      n U R                  5        nUR                  U" U5      5        UR                  U" U5      5        UR                  U" U5      5        Ue! , (       d  f       g = f! [         a  nU R	                  Xu5        U R	                  UR
                  U5        U R	                  UR
                  R
                  U5        U R	                  UR
                  R
                  R
                  U5        U R                  UR
                  R
                  R
                  R
                  5         S nAg S nAff = f)Nc              3   $   #     S v   U e! U e= f7fr   r   r   s    r   gets_the_context_rightZTestBaseExitStack.test_exit_exception_with_correct_context.<locals>.gets_the_context_right  s     	c	s   
 rm   r  r1  r  )rw   r   r  r]  r'   r  r   )r   r  exc1exc2exc3exc4r(  r   s           r   (test_exit_exception_with_correct_context:TestBaseExitStack.test_exit_exception_with_correct_context  s+   		 
	 ||||
	L"e##$:4$@A##$:4$@A##$:4$@A
	 #"
  	LMM#$MM#//40MM#//55t<MM#//55AA4H22>>JJL L	Ls1   B# 
AB
B B#  B# #
E3-B<E..E3c                 8   S n[        S5      n[        S5      n[        S5      n[        S5      n[        S5      n U R                  5        nUR                  XU5        UR                  XU5        Ue! , (       d  f       g = f! [          Ga
  nU R                  X5        U R                  UR                  U5        U R                  UR                  R                  U5        U R                  UR                  R                  R                  U5        U R                  UR                  R                  R                  R                  U5        U R                  UR                  R                  R                  R                  R                  5         S nAg S nAff = f)Nc                      U e! Ue= fr   r   )r  	outer_excs     r   raise_nestedQTestBaseExitStack.test_exit_exception_with_existing_context.<locals>.raise_nested  s     s    rm   r  r1  r  r2  )r   r  r  r'   r  r   )	r   r  r  r  r  r  exc5r(  r   s	            r   )test_exit_exception_with_existing_context;TestBaseExitStack.test_exit_exception_with_existing_context  s5   	 
 |||||	Q"e|48|48
 #"  	QMM#$MM#//40MM#//55t<MM#//55AA4HMM,,88DDdL++77CCOOQ Q	Qs0   B 'A33
B=B B FD FFc                     S n U R                  5        nUR                  U5        SS-    S S S 5        g ! , (       d  f       g = f! [         a  nU R                  S5         S nAg S nAff = f)Nc                      gr  r   r3  s    r   r  DTestBaseExitStack.test_body_exception_suppress.<locals>.suppress_exc5  r7  r   rm   r   z%Expected no exception, got IndexError)r  rJ  r  r   )r   r  r(  r   s       r   test_body_exception_suppress.TestBaseExitStack.test_body_exception_suppress4  sX    		?"e

<(! #""  	?II=>>	?s0   A 5A 
AA A 
A+A&&A+c                     U R                  5        nUR                  S 5        UR                  S 5        UR                  S 5        S S S 5        g ! , (       d  f       g = f)Nc                      gr  r   r   s    r   r  ITestBaseExitStack.test_exit_exception_chaining_suppress.<locals>.<lambda>@  r  r   c                      SS-  $ r  r   r   s    r   r  r  A  s    AaCr   c                      0 S   $ r7  r   r   s    r   r  r  B  s    BqEr   r  r  s     r   %test_exit_exception_chaining_suppress7TestBaseExitStack.test_exit_exception_chaining_suppress>  sA    __%JJ()JJ'(JJ)* s   7A
Ac                     U R                  5        n[        S5       H  nUR                  [        5        M     S S S 5        g ! , (       d  f       g = f)Ni'  )r  ranger  int)r   r(  is      r   test_excessive_nesting(TestBaseExitStack.test_excessive_nestingD  s4    __%5\s# " s   (A
Ac                 t    " S S[         5      nU" 5       n[        5       Ul        [        5       Ul        U R                  5       nU R	                  [
        S5         UR                  U5        S S S 5        UR                  U5        U R                  UR                  S   S   U5        g ! , (       d  f       NB= f)Nc                       \ rS rSrSrg)7TestBaseExitStack.test_instance_bypass.<locals>.ExampleiK  r   Nr>   r   r   r   Exampler  K  s    tr   r  r  rI  rm   )
r  r(   r   r  r  rA   r]  rJ  r'   r$  )r   r  rL  r(  s       r   test_instance_bypass&TestBaseExitStack.test_instance_bypassJ  s    #f#Yxh!##I/DE# F

2e++B/2B7 FEs   B))
B7c                   ^  " S S[         5      m " S S[        5      n[        U4S j5       n[        S 5       nU R                  T5       nU R	                  5        nUR                  U" 5       5        UR                  U" 5       5        U" S5      e! , (       d  f       O= f S S S 5        O! , (       d  f       O= fWR                  nU R                  UT5        U R                  UR                  U5        U R                  UR                  R                  5        U R                  UR                  R                  5        U R                  UR                  UR                  5        g )Nc                       \ rS rSrSrg)ITestBaseExitStack.test_dont_reraise_RuntimeError.<locals>.UniqueExceptioniW  r   Nr>   r   r   r   UniqueExceptionr  W  s    $r   r	  c                       \ rS rSrSrg)LTestBaseExitStack.test_dont_reraise_RuntimeError.<locals>.UniqueRuntimeErroriX  r   Nr>   r   r   r   UniqueRuntimeErrorr  X  s    r   r  c               3   N   >#     Sv   g ! [          a  n T" S5      U eS n A ff = f7f)Nrm   znew exceptionr   )r   r	  s    r   second@TestBaseExitStack.test_dont_reraise_RuntimeError.<locals>.secondZ  s/     @ @%o6C?@s   %
 %
"	"%c               3   >   #     Sv   g ! [          a  n U eS n A ff = f7fr7  r  r   s    r   first?TestBaseExitStack.test_dont_reraise_RuntimeError.<locals>.firsta  s#      	s   	 
zplease no infinite loop.)r   r   rw   r5   r  r]  	exceptionr   r  r   r   r'   )r   r  r  r  err_ctxes_ctxr   r	  s          @r   test_dont_reraise_RuntimeError0TestBaseExitStack.test_dont_reraise_RuntimeErrorU  s   .i.44		@ 
	@ 
	 
	 /7"f$$VX.$$UW-()CDD #"" 0// c?3coo/AB#//556#//334cmmS__5s   B-5B
B 	B--
B;r   )r   r   r   r    r  r   rB  rJ  r  r*  rM  r^  rp  ru  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!   r   r   r   r  r    s    J  4 !4'%R D/&4&	),
E@.H`H> RDH6L>Q8?+$	8 6r   r  c                        \ rS rSr\rSS/rSrg)TestExitStackix  )r   r  )r   zif cb(*exc_details):r   N)r   r   r   r    	ExitStackr  r  r!   r   r   r   r  r  x  s    J!,&"r   r  c                   ^    \ rS rSrSrSr\R                  S 5       rS r	S r
S rS rS rS	rg)
TestRedirectStreami  Nc                     U R                   R                  nU R                  S 5      nU R                  UR                  U5        g r   )redirect_streamr  rx   rG  s      r   rJ  %TestRedirectStream.test_instance_docs  s9     ++33""4(l3r   c                     [        [        U R                  5      nU R                  S 5        U R	                  [        [        U R                  5      U5        g r   )getattrsysorig_streamr  r'   )r   orig_stdouts     r   test_no_redirect_in_init+TestRedirectStream.test_no_redirect_in_init  s=    c4#3#34T"gc4#3#34kBr   c                    [         R                  " 5       nSn[        [        U R                  5      nU R                  U5         [        U[        [        U R                  5      S9  S S S 5        U R                  [        [        U R                  5      U5        UR                  5       R                  5       nU R                  XB5        g ! , (       d  f       Nh= f)Nz<Consider an API like help(), which prints directly to stdoutfile)ioStringIOr"  r#  r$  r  printr'   getvaluestriprx   )r   r   msgr%  ss        r   test_redirect_to_string_io-TestRedirectStream.test_redirect_to_string_io  s    KKMLc4#3#34!!!$#GC)9)9:; %gc4#3#34kBJJL  	 %$s   #C
Cc                     [         R                  " 5       nU R                  U5       nU R                  X!5        S S S 5        g ! , (       d  f       g = fr   )r+  r,  r  r'   )r   r   enter_results      r   test_enter_result_is_target.TestRedirectStream.test_enter_result_is_target  s5    KKM!!!$MM,* %$$s   A
Ac           	         [         R                  " 5       nU R                  U5      n[        [        U R
                  5      nU   [        SS[        [        U R
                  5      S9  S S S 5        U   [        S[        [        U R
                  5      S9  S S S 5        U R                  [        [        U R
                  5      U5        UR                  5       nU R                  US5        g ! , (       d  f       N= f! , (       d  f       Nl= fNHello )endr*  zWorld!r)  zHello World!

r+  r,  r  r"  r#  r$  r-  r'   r.  rx   r   r   
write_to_fr%  r1  s        r   test_cm_is_reusable&TestRedirectStream.test_cm_is_reusable  s    KKM))!,
c4#3#34'sd6F6F)GH (d.>.>!?@ gc4#3#34kBJJL,- ZZs   $C)1#C:)
C7:
Dc           	         [         R                  " 5       nU R                  U5      n[        [        U R
                  5      nU   [        SS[        [        U R
                  5      S9  U   [        S[        [        U R
                  5      S9  S S S 5        S S S 5        U R                  [        [        U R
                  5      U5        UR                  5       nU R                  US5        g ! , (       d  f       Nc= f! , (       d  f       Nl= fr9  r=  r>  s        r   test_cm_is_reentrant'TestRedirectStream.test_cm_is_reentrant  s    KKM))!,
c4#3#34'sd6F6F)GHhWS$2B2B%CD   	gc4#3#34kBJJL,-	  Zs$   &C:)#C)C:)
C7	3C::
Dr   )r   r   r   r    r  r$  r   rB  rJ  r&  r2  r6  r@  rC  r!   r   r   r   r  r    s>    OK  4 !4C
!+

.
.r   r  c                       \ rS rSr\rSrSrg)TestRedirectStdouti  stdoutr   N)r   r   r   r    redirect_stdoutr  r$  r!   r   r   r   rF  rF        %OKr   rF  c                       \ rS rSr\rSrSrg)TestRedirectStderri  stderrr   N)r   r   r   r    redirect_stderrr  r$  r!   r   r   r   rK  rK    rI  r   rK  c                   n    \ rS rSr\R
                  S 5       rS rS rS r	S r
S rS rS	 rS
 rS rSrg)TestSuppressi  c                 p    [         R                  n[        5       nU R                  UR                  U5        g r   )suppressr  rx   rG  s      r   rJ  TestSuppress.test_instance_docs  s*      ''jl3r   c                 x    [        [        5       nU R                  U5        S S S 5        g ! , (       d  f       g = fr   )rQ  r  r   )r   r5  s     r   test_no_result_from_enter&TestSuppress.test_no_result_from_enter  s&    j!\l+ "!!s   +
9c                     [        [        5         U R                  [        SS5      S5        S S S 5        g ! , (       d  f       g = f)Nr  r2      )rQ  r  rx   powrI   s    r   test_no_exceptionTestSuppress.test_no_exception  s,    j!SAY+ "!!s	   6
Ac                 l    [        [        5         [        S5        S S S 5        g ! , (       d  f       g = f)Nr2  )rQ  rA   r   rI   s    r   test_exact_exception!TestSuppress.test_exact_exception  s    i F !  s   %
3c                 `    [        [        5         SS     S S S 5        g ! , (       d  f       g = f)Nr:  2   )rQ  LookupErrorrI   s    r   test_exception_hierarchy%TestSuppress.test_exception_hierarchy  s    k"BK #""s   
-c                     U R                  [        5         [        [        5         SS-    S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr  )r5   r   rQ  rA   rI   s    r   test_other_exception!TestSuppress.test_other_exception  s=    01)$! % 21$$ 21s   A=A
A	A
Ac                     U R                  [        5         [        5          SS-    S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr  )r5   r   rQ  rI   s    r   test_no_argsTestSuppress.test_no_args  s9    01!  21 21s   A	8A	
A	A		
Ac                     [        [        [        5         SS-    S S S 5        [        [        [        5         [        S5        S S S 5        g ! , (       d  f       N7= f! , (       d  f       g = f)Nrm   r   r2  )rQ  r   rA   r   rI   s    r   test_multiple_exception_args)TestSuppress.test_multiple_exception_args  sC    '3aC 4'3F 43 4333s   AA
A
A+c                 `   [        [        5      nU    S S S 5        U   [        S5        S S S 5        U   U   [        S5        S S S 5        SnSS-    S S S 5        U R                  W5        g ! , (       d  f       N^= f! , (       d  f       NY= f! , (       d  f       NQ= f! , (       d  f       NS= f)Nr2  Trm   r   )rQ  r   r   rb   )r   ignore_exceptionsouter_continueds      r   rC  !TestSuppress.test_cm_is_reentrant  sz    $Y/ F "A #"OaC	 
 	(  #" s8   A,A=BBB,
A:=
B
B	B
B-c           
         S nS n[        [        5         U" 5       e! , (       d  f       O= f[        [        [        5         U" 5       e! , (       d  f       O= fU R                  [        5       n[        [        5         U" 5       e! , (       d  f       O= f S S S 5        O! , (       d  f       O= fU R                  WR                  [	        S[        S5      [        S5      /5      5        [        [        5         [        S[        5       /5      e! , (       d  f       O= fU R                  [        5       n[        [        5         [        S[        S5      [        S5      /5      e! , (       d  f       O= f S S S 5        O! , (       d  f       O= fU R                  UR                  [        S[        S5      /5      5        U R                  [        5       n[        [        5         [        S[        S5      [        S5      /5      e! , (       d  f       O= f S S S 5        O! , (       d  f       O= fU R                  UR                  [	        S[        S5      /5      5        g )	Nc                  V    [        S[        S5      [        S5      [        S5      /5      $ )NzEG with ValueErrors onlyve1ve2ve3)ExceptionGroupr  r   r   r   r  4TestSuppress.test_exception_groups.<locals>.<lambda>  s%    &
5 1:e3DE
r   c            	      j    [        S[        S5      [        S5      [        S5      [        S5      /5      $ )N EG with many types of exceptionsrr  ke1rs  ke2)ru  r  r  r   r   r   r  rv     s*    .E1BHUOT
r   rx  ry  rz  messagegr   )	rQ  r  r  r5   ru  assertExceptionIsLiker  GeneratorExitBaseExceptionGroup)r   eg_veeg_alleg1s       r   test_exception_groups"TestSuppress.test_exception_groups  s   

 j!'M "!j(+(N ,+~.#*%h &%% /.. 	""MM2%(5/2	
 m$$Y0ABB %$ 12c(#(]35GRU4WXX $## 322 	""MM-i-:L9MN	
 ~.#-((]35GRU4WXX )(( /.. 	""MM>)hsm_E	
sz   
,A
A1B$B		
B	B$$
B2>D
D":F
!E++
E9	5F
FH(,!H
H	H((
H6r   N)r   r   r   r    r   rB  rJ  rT  rY  r\  ra  rd  rg  rj  rC  r  r!   r   r   r   rO  rO    sG      4 !4,,

)(
r   rO  c                   ,    \ rS rSrS rS rS rS rSrg)	TestChdiri&  c                     [         R                  R                  " [         R                  R                  [         R                  R	                  [
        5      5      /UQ76 $ r   )ospathjoindirnamerealpath__file__)r   partss     r   make_relative_pathTestChdir.make_relative_path'  s>    ww||GGOOBGG,,X67

 	
r   c                 P   [         R                  " 5       nU R                  S5      nU R                  X5        [	        U5         U R                  [         R                  " 5       U5        S S S 5        U R                  [         R                  " 5       U5        g ! , (       d  f       N4= f)Ndata)r  getcwdr  r&  chdirrx   )r   old_cwdr  s      r   test_simpleTestChdir.test_simple-  sk    ))+((0G,6]RYY[&1 g. ]s   &B
B%c                 &   [         R                  " 5       nU R                  S5      nU R                  S5      nU R                  XU45        [	        U5      [	        U5      pTU   U R                  [         R                  " 5       U5        U   U R                  [         R                  " 5       U5        U   U R                  [         R                  " 5       U5        S S S 5        U R                  [         R                  " 5       U5        S S S 5        U R                  [         R                  " 5       U5        S S S 5        U R                  [         R                  " 5       U5        g ! , (       d  f       N= f! , (       d  f       Nr= f! , (       d  f       NV= f)Nr  archivetestdata)r  r  r  assertNotInr  rx   )r   r  target1target2chdir1chdir2s         r   test_reentrantTestChdir.test_reentrant6  s   ))+))&1))*;<G"45wwRYY['2  g6$$RYY[':   g6	 
 RYY['2  	g.	 V  Vs<   "(F
(E12&E -E1-F 
E.*E11
E?	;F
Fc                    [         R                  " 5       nU R                  S5      nU R                  X5         [	        U5         U R                  [         R                  " 5       U5        [        S5      e! , (       d  f       O5= f! [         a%  nU R                  [        U5      S5         S nAOS nAff = fU R                  [         R                  " 5       U5        g )Nr  boom)r  r  r  r&  r  rx   r   str)r   r  r  res       r   test_exceptionTestChdir.test_exceptionG  s    ))+((0G,	.v  f5"6**   	.SWf--	.g.s/   B 1A55
B?B B 
B5B00B5r   N)	r   r   r   r    r  r  r  r  r!   r   r   r   r  r  &  s    
//"/r   r  __main__)#r  r+  r  r#  rr  r  rO   unittest
contextlibr  r   test.supportr   test.support.testcaser   r$  TestCaser   rh   rD  rc  rm  r}  r  r  r  r  r  r  rF  rK  rO  r  r   mainr   r   r   <module>r     s\   ? 	 	 
       " 6 2E!2!2 2EjF#X.. F#R
%h'' %D#(++ #"(++ "$-'(++ -'`  ]<8,, ]<@J6 J6Z%x'8'8 6. 6.r+X->-> +X->-> ^
'):): ^
B,/!! ,/^ zMMO r   