
    /hhA                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKrS SKrS SK	J
r
  S SKJr  S SKJr  S SKJr  \R                  " S5      r\R                  " S5      rS S	KJr  S
 rS rS,S jr\ R,                  S 5       rS r " S S\R2                  5      r " S S\R2                  5      r " S S\R2                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S \5      r" " S! S"\5      r# " S# S$\5      r$ " S% S&\5      r% " S' S(\5      r& " S) S*\5      r'\(S+:X  a  \RR                  " 5         gg)-    N)dedent)support)import_helper)	os_helper)script_helper_interpreters_testinternalcapi)InterpreterNotFoundErrorc                     [         R                  " 5       u  pU R                  SS5      n[        SU SU S35      nU[	        USS94$ )N

                z-
        import contextlib
        with open(zg, 'w', encoding="utf-8") as spipe:
            with contextlib.redirect_stdout(spipe):
                z	
        utf-8encoding)ospipereplacer   open)scriptrwindentedwrappeds        @/opt/python-3.13.8/usr/lib/python3.13/test/test__interpreters.py_captured_scriptr      s\    779DA~~d$89H # 
 		 G DW---    c                     [        U5      u  p#U   [        R                  X5        UR                  5       sS S S 5        $ ! , (       d  f       g = fN)r   r   
run_stringread)interprequestr   rpipes       r   _run_outputr$   $   s2    $W-MF	  0zz| 
s	   %?
Ac                     Uc  [         R                  n[         R                  " USS9 H  n[        R	                  U 5      (       d  M    g    [        S5      e)NF)errorzinterp is not running)r   SHORT_TIMEOUTsleeping_retryr   
is_runningRuntimeError)r!   timeout_s      r   _wait_for_interp_to_runr-   +   sM     ''##G59##F++ : 233r   c              #   @  ^ ^#    [         R                  " 5       u  mnU U4S jn[        R                  " US9nUR	                  5         [        T 5        S v   [        USSS9 nUR                  S5        S S S 5        UR                  5         g ! , (       d  f       N= f7f)Nc                  L   > [         R                  T [        ST S35      5        g )Nz7
            # wait for "signal"
            with open(zG, encoding="utf-8") as rpipe:
                rpipe.read()
            )r   r   r   )r!   r   s   r   run_running.<locals>.run;   s.       5c 1 * 	r   targetr   r   r   done)	r   r   	threadingThreadstartr-   r   writejoin)r!   r   r0   tspiper   s   `    @r   _runningr<   8   sp     779DAq 	$AGGIF#		aw	'5F 
(FFH 
(	's   AB"B4B
BBc                      [         R                  5        H"  tpU S:X  a  M   [         R                  U 5        M$     g ! [         R                   a     M>  f = f)Nr   )r   list_alldestroyInterpreterError)idr,   s     r   clean_up_interpretersrB   M   sN    ((*7	!!"%	 +
 -- 		s   <AAc                       \ rS rSrS rSrg)TestBaseW   c                     [        5         g r   )rB   selfs    r   tearDownTestBase.tearDownY   s    r    N)__name__
__module____qualname____firstlineno__rI   __static_attributes__rK   r   r   rD   rD   W   s     r   rD   c                        \ rS rSrS rS rSrg)IsShareableTests`   c                     / SQnU HA  nU R                  U5         U R                  [        R                  U5      5        S S S 5        MC     g ! , (       d  f       MU  = f)N)	N   spamspam
   iTFg      Y@)   )rV   eggs)subTest
assertTruer   is_shareable)rH   
shareablesobjs      r   test_default_shareables(IsShareableTests.test_default_shareablesb   sJ    
 Cc"!..s35 #" ""s   %A
A	c                 `    " S S5      n " S S[         5      n[        S[        [        [        5       [	        5       UU" S5      U" S5      /	nU HJ  nU R                  [        U5      5         U R                  [        R                  U5      5        S S S 5        ML     g ! , (       d  f       M^  = f)Nc                        \ rS rSrS rS rSrg)3IsShareableTests.test_not_shareable.<locals>.Cheesev   c                     Xl         g r   name)rH   rg   s     r   __init__<IsShareableTests.test_not_shareable.<locals>.Cheese.__init__w   s     	r   c                     U R                   $ r   rf   rG   s    r   __str__;IsShareableTests.test_not_shareable.<locals>.Cheese.__str__y   s    yy r   rf   N)rL   rM   rN   rO   rh   rk   rP   rK   r   r   Cheeserc   v   s    !!r   rm   c                       \ rS rSrSrg)5IsShareableTests.test_not_shareable.<locals>.SubBytes|   rK   NrL   rM   rN   rO   rP   rK   r   r   SubBytesro   |   s     r   rr   .WensleydalerU   )
bytesNotImplementedtypeobject	ExceptionrZ   reprassertFalser   r\   )rH   rm   rr   not_shareablesr^   s        r   test_not_shareable#IsShareableTests.test_not_shareableu   s    	! 	!	2u 	2
 }%! "Cd3i(  !..s35 )( "((s   ,%B
B-	rK   N)rL   rM   rN   rO   r_   r|   rP   rK   r   r   rR   rR   `   s    5&5r   rR   c                   V    \ 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)ShareableTypeTests   c                 ,   U H|  nU R                  U5         [        R                  U5      n[        R                  U5      nU R	                  XB5        U R                  [        U5      [        U5      5        S S S 5        M~     g ! , (       d  f       M  = fr   )rZ   r	   get_crossinterp_datarestore_crossinterp_dataassertEqualassertIsrv   )rH   valuesr^   xidgots        r   _assert_values!ShareableTypeTests._assert_values   sk    Cc"'<<SA'@@E  *d3ic3 #" ""s   A B
B	c                     S HX  nU R                  U5         [        R                  U5      n[        R                  U5      nU R	                  X15        S S S 5        MZ     g ! , (       d  f       Ml  = f)Nr   )rZ   r	   r   r   r   )rH   r^   r   r   s       r   test_singletons"ShareableTypeTests.test_singletons   sU    Cc"'<<SA'@@E c' #" ""s   <A  
A/	c                 *    U R                  SS/5        g )NrU   i'  r   rG   s    r   
test_typesShareableTypeTests.test_types   s     	r   c                 H    U R                  S [        SS5       5       5        g )Nc              3   D   #    U  H  nUR                  S SSS9v   M     g7f)   littleT)signedN)to_bytes).0is     r   	<genexpr>0ShareableTypeTests.test_bytes.<locals>.<genexpr>   s&      5%3 JJq(4J@%3s      )r   rangerG   s    r   
test_bytesShareableTypeTests.test_bytes   s#     5%*2s^5 	5r   c                 *    U R                  / SQ5        g )N)zhello worldu   你好世界 r   rG   s    r   	test_strsShareableTypeTests.test_strs   s    ?@r   c                     U R                  [        R                  " [        SS5      [        R
                  [        R
                  * S-
  /5      5        g )Nr   r   rX   )r   	itertoolschainr   sysmaxsizerG   s    r   test_intShareableTypeTests.test_int   s<    IOOE"cN-0[[3;;,:J,KM 	Nr   c                 L   [         R                  S-   [         R                  * S-
  SS-  /nU HP  nU R                  U5         U R                  [        5         [
        R                  U5        S S S 5        S S S 5        MR     g ! , (       d  f       N= f! , (       d  f       Mu  = f)NrX   r   i  )r   r   rZ   assertRaisesOverflowErrorr	   r   )rH   intsr   s      r   test_non_shareable_int)ShareableTypeTests.test_non_shareable_int   sw    KK!O[[L1tG

 Aa&&}5%::1= 6 ! 55 !s$   BB.B
BB
B#	c                 *    U R                  SS/5        g )NTFr   rG   s    r   	test_boolShareableTypeTests.test_bool   s    T5M*r   c                 *    U R                  / SQ5        g )N)g        g?g      gȑݚ?gȑݚr   rG   s    r   
test_floatShareableTypeTests.test_float   s    EFr   c                 P    U R                  / SQ5        U R                  / SQ5        g )N)rK   rX   )helloworld)rX   Tr   ))r   )rX   r         )r   r   )      r   rG   s    r   
test_tupleShareableTypeTests.test_tuple   s$    PQ 
 	r   c                 b   [        5       [        5       /nU H  n[        SSU/5      nU R                  [	        U5      5         U R                  [        5         [        R                  U5        S S S 5        S S S 5        [        SSU4/5      nU R                  S[	        U5      -   5         U R                  [        5         [        R                  U5        S S S 5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N== f! , (       d  f       GM  = f)Nr   g      ?znested )	rx   rw   tuplerZ   ry   r   
ValueErrorr	   r   )rH   non_shareablessvalues       r   *test_tuples_containing_non_shareable_types=ShareableTypeTests.test_tuples_containing_non_shareable_types   s    
  A1c1+&Ed5k*&&z2%::5A 3 +
 1b1$-(Ei$u+56&&z2%::5A 3 76   32 +* 32 76sH   C<C+.C<*D DD+
C95C<<
D
	
DD
D.	rK   N)rL   rM   rN   rO   r   r   r   r   r   r   r   r   r   r   r   rP   rK   r   r   r   r      s=    4(5AN	>+GBr   r   c                       \ rS rSrS rSrg)ModuleTests   c                 @    [        [        R                  5       S5        g )Nzimport _interpreters)r$   r   createrG   s    r   test_import_in_interpreter&ModuleTests.test_import_in_interpreter   s      ""	
r   rK   N)rL   rM   rN   rO   r   rP   rK   r   r   r   r      s    
r   r   c                   &    \ rS rSrS rS rS rSrg)ListAllTests   c                     [         R                  5       tp[         R                  5        VVs/ s H  tp2UPM     nnnU R                  XA/5        g s  snnf r   )r   get_mainr>   r   )rH   mainr,   rA   idss        r   test_initialListAllTests.test_initial   sH     ))+ - 6 6 89 8fbr 89f% :s   Ac                     [         R                  5       tp[         R                  5       n[         R                  5       n[         R                  5        VVs/ s H  tpRUPM     nnnU R	                  XaX4/5        g s  snnf r   )r   r   r   r>   r   rH   r   r,   firstsecondrA   r   s          r   test_after_creating ListAllTests.test_after_creating   sg     ))+$$&%%' - 6 6 89 8fbr 89U34 :s   A9c                 (   [         R                  5       tp[         R                  5       n[         R                  5       n[         R                  U5        [         R	                  5        VVs/ s H  tpRUPM     nnnU R                  XaU/5        g s  snnf r   )r   r   r   r?   r>   r   r   s          r   test_after_destroying"ListAllTests.test_after_destroying   st     ))+$$&%%'e$ - 6 6 89 8fbr 89Vn- :s   *BrK   N)rL   rM   rN   rO   r   r   r   rP   rK   r   r   r   r      s    &
5.r   r   c                        \ rS rSrS rS rSrg)GetCurrentTestsi  c                     [         R                  5       tp[         R                  5       tp2U R                  X15        U R	                  U[
        5        g r   )r   r   get_currentr   assertIsInstanceint)rH   r   r,   curs       r   	test_mainGetCurrentTests.test_main
  s@     ))+++-#c3'r   c                 V   [         R                  5       tp[         R                  5       n[        U[	        S5      5      n[        UR                  5       5      n[         R                  5        VVs/ s H  tpbUPM     snnu  p'U R                  XW5        U R                  XQ5        g s  snnf )Nz
            import _interpreters
            cur, *_ = _interpreters.get_current()
            print(cur)
            assert isinstance(cur, int)
            )
r   r   r   r$   r   r   stripr>   r   assertNotEqual)rH   r   r,   r!   outr   rA   expecteds           r   test_subinterpreter#GetCurrentTests.test_subinterpreter  s     ))+%%'&& * #  #))+(5(>(>(@A(@fbr(@A'C& Bs   /B%rK   N)rL   rM   rN   rO   r   r   rP   rK   r   r   r   r     s    ('r   r   c                        \ rS rSrS rS rSrg)GetMainTestsi  c                     [         R                  5        VVs/ s H  tpUPM     snnu  n[         R                  5       tpBU R                  XC5        U R	                  U[
        5        g s  snnf r   )r   r>   r   r   r   r   )rH   rA   r,   r   r   s        r   test_from_mainGetMainTests.test_from_main!  sY    '4'='='?@'?VRb'?@
 ))+(dC( As   A(c                 
   [         R                  5        VVs/ s H  tpUPM     snnu  n[         R                  5       n[        U[	        S5      5      n[        UR                  5       5      nU R                  Xc5        g s  snnf )Nz
            import _interpreters
            main, *_ = _interpreters.get_main()
            print(main)
            assert isinstance(main, int)
            )r   r>   r   r$   r   r   r   r   )rH   rA   r,   r   r!   r   r   s          r   test_from_subinterpreter%GetMainTests.test_from_subinterpreter'  sq    '4'='='?@'?VRb'?@
%%'&& * #  399;( As   A?rK   N)rL   rM   rN   rO   r   r   rP   rK   r   r   r   r     s    )
)r   r   c                   b    \ rS rSrS r\R                  " S5      S 5       rS rS r	S r
S rS	rg
)IsRunningTestsi4  c                 v    [         R                  5       tpU R                  [         R                  U5      5        g r   )r   r   r[   r)   )rH   r   r,   s      r   r   IsRunningTests.test_main6  s)     ))+0067r   zFails on FreeBSDc                 N   [         R                  5       nU R                  [         R                  U5      5        [	        U5         U R                  [         R                  U5      5        S S S 5        U R                  [         R                  U5      5        g ! , (       d  f       N3= fr   )r   r   rz   r)   r<   r[   rH   r!   s     r   r   "IsRunningTests.test_subinterpreter:  so    %%'11&9:fOOM44V<= 11&9: s   %B
B$c                     [         R                  5       n[        U[        SU S35      5      nU R	                  UR                  5       S5        g )NzJ
            import _interpreters
            if _interpreters.is_running(zZ):
                print(True)
            else:
                print(False)
            True)r   r   r$   r   r   r   )rH   r!   r   s      r   r   'IsRunningTests.test_from_subinterpreterC  sO    %%'&& .))/ 1* #  	f-r   c                     [         R                  5       n[         R                  U5        U R                  [        5         [         R                  U5        S S S 5        g ! , (       d  f       g = fr   )r   r   r?   r   r
   r)   r  s     r   test_already_destroyed%IsRunningTests.test_already_destroyedN  sG    %%'f%78$$V, 988   A
A,c                     U R                  [        5         [        R                  S5        S S S 5        g ! , (       d  f       g = fNi@B )r   r
   r   r)   rG   s    r   test_does_not_exist"IsRunningTests.test_does_not_existT  s+    78$$Y/ 988	   5
Ac                     U R                  [        5         [        R                  S5        S S S 5        g ! , (       d  f       g = fNr   )r   r   r   r)   rG   s    r   test_bad_idIsRunningTests.test_bad_idX  s*    z*$$R( +**r  rK   N)rL   rM   rN   rO   r   unittestskipr   r   r  r  r  rP   rK   r   r   r   r   4  s9    8 ]]%&; ';	.-0)r   r   c                   h    \ rS rSrS r\R                  " S5      S 5       rS rS r	S r
S rS	 rS
rg)CreateTestsi]  c                     [         R                  5       nU R                  U[        5        [         R	                  5        VVs/ s H  tpUPM     nnnU R                  WU5        g s  snnf r   )r   r   r   r   r>   assertIn)rH   rA   r,   afters       r   test_in_mainCreateTests.test_in_main_  sT    !!#b#&"/"8"8":;":":;b%  <s   A%z*enable this test when working on pystate.cc                     [        5       n[        S5       H=  n[        R                  5       n[        R	                  U5        UR                  U5        M?     U R                  [        U5      S5        g )Nd   )setr   r   r   r?   addr   len)rH   seenr,   rA   s       r   test_unique_idCreateTests.test_unique_idf  sT    usA%%'B!!"%HHRL 
 	TC(r   c                 P  ^^ [         R                  " 5       mS mUU4S jn[         R                  " US9nT   UR                  5         S S S 5        UR	                  5         [        S [        R                  5        5       5      nU R                  TU5        g ! , (       d  f       NU= f)Nc                  n   > [         R                  5       m TR                  5         TR                  5         g r   )r   r   acquirerelease)rA   locks   r   f%CreateTests.test_in_thread.<locals>.fs  s#    %%'BLLNLLNr   r2   c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r   rA   r,   s      r   r   -CreateTests.test_in_thread.<locals>.<genexpr>}       >%=62B%=   )	r5   Lockr6   r7   r9   r  r   r>   r  )rH   r*  r:   r  rA   r)  s       @@r   test_in_threadCreateTests.test_in_threadp  st    ~~	 A&GGI 	>]%;%;%=>>b% 	 Ts   B
B%c                 V   [         R                  5        VVs/ s H  tpUPM     snnu  n[         R                  5       n[        U[	        S5      5      n[        UR                  5       5      n[        S [         R                  5        5       5      nU R                  XsXF15        g s  snnf )Nz
            import _interpreters
            id = _interpreters.create()
            print(id)
            assert isinstance(id, int)
            c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   5CreateTests.test_in_subinterpreter.<locals>.<genexpr>  r/  r0  )	r   r>   r   r$   r   r   r   r  r   )rH   rA   r,   r   id1r   id2r  s           r   test_in_subinterpreter"CreateTests.test_in_subinterpreter  s    "/"8"8":;":":;""$#v '    #))+>]%;%;%=>>s 01 <s   B%c                 z  ^^ [         R                  5        VVs/ s H  tpUPM     snnu  n[         R                  5       mS mUU4S jn[        R                  " US9nUR                  5         UR                  5         [        S [         R                  5        5       5      nU R                  XcTT15        g s  snnf )Nc                  b   > [        T[        S5      5      n [        U R                  5       5      mg )Nz|
                import _interpreters
                id = _interpreters.create()
                print(id)
                )r$   r   r   r   )r   r7  r8  s    r   r*  6CreateTests.test_in_threaded_subinterpreter.<locals>.f  s-    c6 + $ C
 ciik"Cr   r2   c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   >CreateTests.test_in_threaded_subinterpreter.<locals>.<genexpr>  r/  r0  )	r   r>   r   r5   r6   r7   r9   r  r   )	rH   rA   r,   r   r*  r:   r  r7  r8  s	          @@r   test_in_threaded_subinterpreter+CreateTests.test_in_threaded_subinterpreter  s    "/"8"8":;":":;""$	# A&			>]%;%;%=>>sC 01# <s   B7c                    [        S [        R                  5        5       5      n/ n[        S5       H(  n[        R	                  5       nUR                  U5        M*     U H  n[        R                  U5        M     [        R	                  5       n[        S [        R                  5        5       5      nU R                  XQU1-  5        g )Nc              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   5CreateTests.test_after_destroy_all.<locals>.<genexpr>       ?&>FBR&>r0  r   c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   rD    r/  r0  )r  r   r>   r   r   appendr?   r   )rH   beforer   r,   rA   r  s         r   test_after_destroy_all"CreateTests.test_after_destroy_all  s    ?m&<&<&>??qA%%'BJJrN  B!!"%  !!#>]%;%;%=>>".r   c                    [        S [        R                  5        5       5      n[        R                  5       n[        R                  5       n[        R                  5       n[        R	                  U5        [        R	                  U5        [        R                  5       n[        S [        R                  5        5       5      nU R                  XaXS1-  5        g )Nc              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   6CreateTests.test_after_destroy_some.<locals>.<genexpr>  rE  r0  c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   rM    r/  r0  )r  r   r>   r   r?   r   )rH   rH  r7  r8  id3rA   r  s          r   test_after_destroy_some#CreateTests.test_after_destroy_some  s    ?m&<&<&>??""$""$""$c"c"!!#>]%;%;%=>>" 23r   rK   N)rL   rM   rN   rO   r  r  r  r#  r2  r9  r@  rI  rP  rP   rK   r   r   r  r  ]  s?    ! ]]?@) A)! 22(/4r   r  c                   P    \ 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)DestroyTestsi  c                    [         R                  5       n[         R                  5       n[         R                  5       n[        S [         R                  5        5       5      nU R	                  X$5        [         R                  U5        [        S [         R                  5        5       5      nU R                  X%5        U R	                  X5        U R	                  X55        g )Nc              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   (DestroyTests.test_one.<locals>.<genexpr>  rE  r0  c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   rV    r/  r0  )r   r   r  r>   r  r?   assertNotIn)rH   r7  r8  rO  rH  r  s         r   test_oneDestroyTests.test_one  s    ""$""$""$?m&<&<&>??c"c">]%;%;%=>>$c!c!r   c                    [        S [        R                  5        5       5      n[        5       n[        S5       H(  n[        R	                  5       nUR                  U5        M*     [        S [        R                  5        5       5      nU R                  XQU-  5        U H  n[        R                  U5        M     [        S [        R                  5        5       5      nU R                  Xa5        g )Nc              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   (DestroyTests.test_all.<locals>.<genexpr>  s     @'?VRb'?r0  r   c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   r]    rE  r0  c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   r]    r/  r0  )r  r   r>   r   r   r   r   r?   )rH   initialr   r,   rA   rH  r  s          r   test_allDestroyTests.test_all  s    @}'='='?@@eqA%%'BGGBK  ?m&<&<&>??3/B!!"% >]%;%;%=>>(r   c                 z  ^ ^ [         R                  5        VVs/ s H  tpUPM     snnu  mT R                  [         R                  5         [         R	                  T5        S S S 5        UU 4S jn[
        R                  " US9nUR                  5         UR                  5         g s  snnf ! , (       d  f       NP= f)Nc                     > TR                  [        R                  5         [        R                  T 5        S S S 5        g ! , (       d  f       g = fr   )r   r   r@   r?   )r   rH   s   r   r*  !DestroyTests.test_main.<locals>.f  s2    ""=#A#AB%%d+ CBBs   A  
Ar2   )	r   r>   r   r@   r?   r5   r6   r7   r9   )rH   rA   r,   r*  r:   r   s   `    @r   r   DestroyTests.test_main  s    "/"8"8":;":":;}==>!!$' ?	, A&			 <>>s   B&B,,
B:c                     [         R                  5       n[         R                  U5        U R                  [        5         [         R                  U5        S S S 5        g ! , (       d  f       g = fr   )r   r   r?   r   r
   rH   rA   s     r   r  #DestroyTests.test_already_destroyed  sG    !!#b!78!!"% 988r
  c                     U R                  [        5         [        R                  S5        S S S 5        g ! , (       d  f       g = fr  )r   r
   r   r?   rG   s    r   r   DestroyTests.test_does_not_exist  s+    78!!), 988r  c                     U R                  [        5         [        R                  S5        S S S 5        g ! , (       d  f       g = fr  )r   r   r   r?   rG   s    r   r  DestroyTests.test_bad_id  s*    z*!!"% +**r  c                 B   [         R                  5        VVs/ s H  tpUPM     snnu  n[         R                  5       n[        SU S35      n[         R	                  X5        [        S [         R                  5        5       5      nU R                  XSU15        g s  snnf )NzY
            import _interpreters
            try:
                _interpreters.destroy(zV)
            except _interpreters.InterpreterError:
                pass
            c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   1DestroyTests.test_from_current.<locals>.<genexpr>  r/  r0  r   r>   r   r   r   r  r   )rH   rA   r,   r   r   r  s         r   test_from_currentDestroyTests.test_from_current  s    "/"8"8":;":":;!!# ' (*d +  	  ,>]%;%;%=>>r
+ <s   Bc                 j   [         R                  5        VVs/ s H  tpUPM     snnu  n[         R                  5       n[         R                  5       n[        SU S35      n[         R	                  XF5        [        S [         R                  5        5       5      nU R                  XsU15        g s  snnf )NzD
            import _interpreters
            _interpreters.destroy()
            c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   1DestroyTests.test_from_sibling.<locals>.<genexpr>  r/  r0  rq  )rH   rA   r,   r   r7  r8  r   r  s           r   test_from_siblingDestroyTests.test_from_sibling  s    "/"8"8":;":":;""$""$ ##&% (  	  ->]%;%;%=>>s, <s   B/c                    ^ [         R                  5       mU4S jn[        R                  " US9nUR	                  5         UR                  5         g )Nc                  0   > [         R                  T 5        g r   )r   r?   rA   s   r   r*  .DestroyTests.test_from_other_thread.<locals>.f  s    !!"%r   r2   )r   r   r5   r6   r7   r9   )rH   r*  r:   rA   s      @r   test_from_other_thread#DestroyTests.test_from_other_thread  s:    !!#	& A&			r   c                    [         R                  5        VVs/ s H  tpUPM     snnu  n[         R                  5       n[        U5         U R	                  [         R                  U5      SU S3S9  U R                  [         R                  SU S3S9   [         R                  U5        S S S 5        U R	                  [         R                  U5      5        S S S 5        g s  snnf ! , (       d  f       NA= f! , (       d  f       g = f)NzInterp z& should be running before destruction.)msgz%Should not be able to destroy interp z while it's still running.)	r   r>   r   r<   r[   r)   r   r@   r?   )rH   rA   r,   r   r!   s        r   test_still_runningDestroyTests.test_still_running  s    "/"8"8":;":":;%%'fOOM44V<")&1W X  Z ""=#A#A)NvhVp'q # s%%f-s OOM44V<=  <s s	 s*   C
A
C6C%*,C6%
C3	/C66
DrK   N)rL   rM   rN   rO   rY  ra  r   r  r  r  rr  rx  r~  r  rP   rK   r   r   rS  rS    s4    ")&-&,-
>r   rS  c                   :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )CommonTestsi*  c                 T   > [         TU ]  5         [        R                  5       U l        g r   supersetUpr   r   rA   rH   	__class__s    r   r  CommonTests.setUp+      &&(r   c                 ,   SnU R                  [        U5         [        R                  U R                  SS5        S S S 5        U R                  [        U5         [        R                  U R                  SSS9  S S S 5        U R                  [        U5         [        R                  U R                  SSS9  S S S 5        U R                  [        U5         [        R                  U R                  S SS9  S S S 5        SnU R                  [        U5         [        R                  U R                  S5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nexpected 'shared' to be a dictarX   sharedc                      g r   rK   rK   r   r   <lambda>-CommonTests.test_signatures.<locals>.<lambda>9      Dr   zE_interpreters.set___main___attrs\(\) argument 2 must be dict, not intassertRaisesRegex	TypeErrorr   execrA   r   run_funcset___main___attrsrH   r  s     r   test_signaturesCommonTests.test_signatures/  s   .##Is3twwQ/ 4##Is3twwA6 4##Is3$$TWWc!$< 4##Is3""477L"C 4 W##Is3,,TWWa8 43 43333333 43s;   "E  E E#!E4!F 
E
E #
E14
F
Fc                    SnU R                  [        U5         [        R                  U R                  SS S9  S S S 5        U R                  [        U5         [        R                  U R                  SS S9  S S S 5        U R                  [        U5         [        R                  U R                  S S S9  S S S 5        SnU R                  [        U5         [        R                  U R                  S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nr= f! , (       d  f       g = f)Nr  r  r  c                      g r   rK   rK   r   r   r  6CommonTests.test_invalid_shared_none.<locals>.<lambda>F  r  r   zmust be dict, not Noner  r  s     r   test_invalid_shared_none$CommonTests.test_invalid_shared_none?  s    .##Is3twwD9 4##Is3$$TWWc$$? 4##Is3""477L"F 4&##Is3,,TWWd; 43 433333 43s/    D  D!D"!D3 
D
D"
D03
Ec                    SS0nSnU R                  [        U5         [        R                  U R                  SUS9  S S S 5        U R                  [        U5         [        R                  U R                  SUS9  S S S 5        U R                  [        U5         [        R                  U R                  S US9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N_= f! , (       d  f       g = f)Nu   r   zsurrogates not allowedr  r  c                      g r   rK   rK   r   r   r  :CommonTests.test_invalid_shared_encoding.<locals>.<lambda>T  r  r   )r  UnicodeEncodeErrorr   r  rA   r   r  )rH   
bad_sharedr  s      r   test_invalid_shared_encoding(CommonTests.test_invalid_shared_encodingK  s    ]
&##$6<twwJ? =##$6<$$TWWc*$E =##$6<""477L"L =<	 =<<<<<s#    C C!C%
C
C"%
C3r|  )
rL   rM   rN   rO   r  r  r  r  rP   __classcell__r  s   @r   r  r  *  s    )9 
<	M 	Mr   r  c                      ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
\R                  " 5       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\R6                  " S5      S 5       rSrU =r$ )RunStringTestsiW  c                 T   > [         TU ]  5         [        R                  5       U l        g r   r  r  s    r   r  RunStringTests.setUpY  r  r   c                     [        S5      u  pU   [        R                  U R                  U5        UR	                  5       nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Nprint("it worked!", end="")
it worked!)r   r   r   rA   r    r   )rH   r   filer   s       r   test_successRunStringTests.test_success]  sP    '(EF$$TWWf5))+C  	l+	 Ts   1A
A*c                   ^ ^ [        S5      u  mnU   UU 4S jn[        R                  " US9nUR                  5         UR	                  5         UR                  5       nS S S 5        T R                  WS5        g ! , (       d  f       N!= f)Nr  c                  F   > [         R                  TR                  T 5        g r   )r   r   rA   )r   rH   s   r   r*  (RunStringTests.test_in_thread.<locals>.fh  s    ((&9r   r2   r  )r   r5   r6   r7   r9   r    r   )rH   r  r*  r:   r   r   s   `    @r   r2  RunStringTests.test_in_threade  sh    '(EF:   *AGGIFFH))+C  	l+ Ts   AA::
Bc                     [         R                  5       n[        S5      u  p#U   [         R                  X5        UR	                  5       nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Nz
            import threading
            def f():
                print('it worked!', end='')

            t = threading.Thread(target=f)
            t.start()
            t.join()
            r  r   r   r   r   r    r   )rH   	subinterpr   r  r   s        r   test_create_thread!RunStringTests.test_create_threadr  s^    !((*	' )  $$Y7))+C  	l+	 Ts   &A%%
A3c                    U R                  S5         Sn[        R                  S5      n[        SU S35      u  p4U   [        R	                  X#5        UR                  5       nS S S 5        U R                  WU5        S S S 5        U R                  S5         [        R                  S5      n[        S5      u  p4U   [        R	                  X#5        UR                  5       nS S S 5        U R                  WS5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NK= f! , (       d  f       g = f)	Nisolatedspam spam spam spam spama<  
                import threading
                def f():
                    print('it worked!', end='')

                try:
                    t = threading.Thread(target=f, daemon=True)
                    t.start()
                    t.join()
                except RuntimeError:
                    print('z', end='')
                znot isolatedlegacyz
                import threading
                def f():
                    print('it worked!', end='')

                t = threading.Thread(target=f, daemon=True)
                t.start()
                t.join()
                r  )rZ   r   r   r   r   r    r   rH   r   r  r   r  r   s         r   test_create_daemon_thread(RunStringTests.test_create_daemon_thread  s   \\*%1H%,,Z8I+ 
1 %: &- LF ((;iik  S(+' &* \\.)%,,X6I+ - LF ((;iik  S,/ *)  &%@  *)sF   +D&D#D%D7;&D&!D7
D	D
D#&
D4	0D77
Ec           	         [         R                  5       n/ SQnU HU  nU R                  U5         [         R                  U[	        US95        [         R                  USU< S35        S S S 5        MW     g ! , (       d  f       Mi  = f)N)NrV   rU   *   )r^   zassert(obj == ))r   r   rZ   r  dictr   )rH   r!   objectsr^   s       r   test_shareable_types#RunStringTests.test_shareable_types  so    %%'
 Cc"00#G(($SG1- #" ""s   9A55
B	c                     Sn[         R                  5       n[        SU S35      u  p4U   [         R                  X#5        UR	                  5       nS S S 5        U R                  WU5        g ! , (       d  f       N!= f)Nr  z
            import os, sys
            try:
                os.execl(sys.executable)
            except RuntimeError:
                print('z', end='')
            r  r  s         r   test_os_execRunStringTests.test_os_exec  st    -!((*	' -
 !z ")  $$Y7))+C  	h'	 Ts   &A++
A9c                    SS K nUR                  SSS9 nUR                  S5        UR                  5         Sn[	        SUR
                   SU S	35      n[        R                  U R                  U5        UR                  S5        UR                  5       nU R                  XS5        S S S 5        g ! , (       d  f       g = f)
Nr   zw+r   r   r   r  z
                import os
                try:
                    os.fork()
                except RuntimeError:
                    with open('zE', 'w', encoding='utf-8') as out:
                        out.write('z')
                )tempfileNamedTemporaryFiler8   flushr   rg   r   r   rA   seekr    r   )rH   r  r  r   r   contents         r   	test_forkRunStringTests.test_fork  s    (((@DJJrNJJL1H ! 
 !%		{ +$$,: . F $$TWWf5IIaLiikGW/# A@@s   BB00
B>c                    [        U R                  5         U R                  [        R                  5         [        R                  U R                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nprint("spam"))r<   rA   r   r   r@   r   rG   s    r   test_already_running#RunStringTests.test_already_running  sT    dgg""=#A#AB((/B C BB s"    A9!A(A9(
A6	2A99
Bc                 @   SnU[        S [        R                  5        5       5      ;   a/  US-  nU[        S [        R                  5        5       5      ;   a  M/  U R                  [        5         [        R                  US5        S S S 5        g ! , (       d  f       g = f)Nr   c              3   (   #    U  H  tpUv   M
     g 7fr   rK   r-  s      r   r   5RunStringTests.test_does_not_exist.<locals>.<genexpr>  s     B)Avr)Ar0  rX   r  )r  r   r>   r   r
   r   rh  s     r   r  "RunStringTests.test_does_not_exist  su    CB)?)?)ABBB!GB CB)?)?)ABBB78$$R9 988s   /B
Bc                     U R                  [        5         [        R                  SS5        S S S 5        g ! , (       d  f       g = f)Nr   r  )r   r   r   r   rG   s    r   test_error_idRunStringTests.test_error_id  s,    z*$$R9 +**	   6
Ac                     U R                  [        5         [        R                  SS5        S S S 5        g ! , (       d  f       g = f)NrV   r  )r   r  r   r   rG   s    r   r  RunStringTests.test_bad_id  s,    y)$$V_= *))r  c                     U R                  [        5         [        R                  U R                  S5        S S S 5        g ! , (       d  f       g = f)NrW   r   r  r   r   rA   rG   s    r   test_bad_scriptRunStringTests.test_bad_script  s0    y)$$TWWb1 *))   !A  
Ac                     U R                  [        5         [        R                  U R                  S5        S S S 5        g ! , (       d  f       g = f)Ns   print("spam")r  rG   s    r   test_bytes_for_script$RunStringTests.test_bytes_for_script  s1    y)$$TWW.>? *))r  c                 ~     " S S[         5      n[        U R                  U" S5      5      nU R                  US5        g )Nc                       \ rS rSrSrg)<RunStringTests.test_str_subclass_string.<locals>.StrSubclassi  rK   Nrq   rK   r   r   StrSubclassr    s    r   r  zprint(1 + 2)z3
)strr$   rA   r   )rH   r  outputs      r   test_str_subclass_string'RunStringTests.test_str_subclass_string  s/    $#$TWWk.&AB'r   c                    [         R                  " 5       u  pSSS S.n[        SU S35      n[        R	                  U R
                  U5        [        R                  U R
                  U5        [        US5       n[        R                  " U5      nS S S 5        U R                  WS   S5        U R                  US	   S
5        U R                  US   S5        U R                  US   5        g ! , (       d  f       Nb= f)N   hams   -1)rV   rY   cheddarz
            eggs = int(eggs)
            spam = 42
            result = spam + eggs

            ns = dict(vars())
            del ns['__builtins__']
            import pickle
            with open(C, 'wb') as chan:
                pickle.dump(ns, chan)
            rbrV   r  rY   r   result)   r  )r   r   r   r   r  rA   r   r   pickleloadr   assertIsNonerH   r   r   r  r   channss          r   test_with_sharedRunStringTests.test_with_shared  s    wwy 
   c 
 
 	((&9  &1!T]dT"B  	FR(FR(Hr*"Y-( ]s   9C,,
C:c                    [         R                  U R                  [        S5      5        SS0n[        S5      n[         R	                  U R                  U5        [         R                  U R                  U5        [
        R                  " 5       u  p4[        SU S35      n[         R                  U R                  U5        [        US5       n[        R                  " U5      nS S S 5        U R                  WS   S   S	5        U R                  US
   S   S5        U R                  US   S5        g ! , (       d  f       NT= f)Nzj
            spam = 'eggs'
            ns1 = dict(vars())
            del ns1['__builtins__']
            rV   r  zL
            ns2 = dict(vars())
            del ns2['__builtins__']
        zr
            ns = dict(vars())
            del ns['__builtins__']
            import pickle
            with open(r  r  ns1rY   ns2)r   r   rA   r   r  r   r   r   r  r   r   )rH   r  r   r   r   r  r  s          r   test_shared_overwrites%RunStringTests.test_shared_overwrites  s     & 2 + 	 &!   	((&9  &1wwy  c 	  	  &1!T]dT"B  	E6*F3E6*F3FV, ]s   D00
D>c                 z   [         R                  " 5       u  pSS0n[        SU S35      n[        R	                  U R
                  U5        [        R                  U R
                  U5        [        US5       n[        R                  " U5      nS S S 5        U R                  WS   S5        g ! , (       d  f       N$= f)NrL   s   not __main__z
            spam = 42

            ns = dict(vars())
            del ns['__builtins__']
            import pickle
            with open(r  r  )r   r   r   r   r  rA   r   r   r  r   r   r  s          r   #test_shared_overwrites_default_vars2RunStringTests.test_shared_overwrites_default_vars>  s    wwyo.  c   	((&9  &1!T]dT"B  	J9 ]s   7B,,
B:c                    [         R                  " 5       u  p[        R                  U R                  [        SU S35      5        [        US5       n[        R                  " U5      nS S S 5        [         R                  " 5       u  p[        R                  U R                  [        SU S35      5        [        US5       n[        R                  " U5      nS S S 5        U R                  SW5        U R                  SU5        U R                  SW5        U R                  SU5        g ! , (       d  f       N= f! , (       d  f       Nh= f)Nz
            spam = True

            ns = dict(vars())
            del ns['__builtins__']
            import pickle
            with open(zd, 'wb') as chan:
                pickle.dump(ns, chan)
            del ns, pickle, chan
            r  z
            eggs = False

            ns = dict(vars())
            del ns['__builtins__']
            import pickle
            with open(r  rV   rY   )r   r   r   r   rA   r   r   r  r   r  rX  )rH   r   r   r  r  r	  s         r   test_main_reusedRunStringTests.test_main_reusedR  s   wwy  & 6 c 	2 	+ 		 !T]d++d#C  wwy  & 6 c 2 + 	 !T]d++d#C  	fc"%fc"fc"' ] ]s   D( D9(
D69
Ec           
      ~   [         R                  " 5       u  p[        SU S35      n[        R	                  U R
                  U5        [        US5       n[        R                  " U5      nS S S 5        WR                  S5        UR                  S5        U R                  US0 S S S SS.5        g ! , (       d  f       NJ= f)	Nz
            spam = 42

            ns = dict(vars())
            ns['__builtins__'] = str(ns['__builtins__'])
            import pickle
            with open(r  r  __builtins__
__loader____main__r  )rL   __annotations____doc____package____spec__rV   )r   r   r   r   r   rA   r   r  r   popr   )rH   r   r   r   r  r  s         r    test_execution_namespace_is_main/RunStringTests.test_execution_namespace_is_mains  s    wwy  c   	  &1!T]dT"B  	~
|"! 	 ]s   B..
B<zblocking foreverc                 L   [        S5      n[        R                  " 5        n[        R                  " USU5      n[        R
                  " U5       nUR                  5       nS S S 5        S S S 5        U R                  WS5        g ! , (       d  f       N)= f! , (       d  f       N2= f)Na  
        from textwrap import dedent
        import threading
        import _interpreters
        id = _interpreters.create()
        def f():
            _interpreters.run_string(id, dedent('''
                import time
                # Give plenty of time for the main interpreter to finish.
                time.sleep(1_000_000)
                '''))

        t = threading.Thread(target=f)
        t.start()
        r!   r   )r   r   temp_dirr   make_scriptspawn_pythonwaitr   )rH   r   dirnamefilenameprocretcodes         r   test_still_running_at_exit)RunStringTests.test_still_running_at_exit  s~       7$00(FKH++H5))+ 6  
 	!$ 65  s#   /BB!B
B	B
B#r|  )rL   rM   rN   rO   r  r  r2  r  r  r  r  r   requires_forkr  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r&  rP   r  r  s   @r   r  r  W  s    ),,,"%0N (  0 0*C
::>2@():->:(#B8 ]]%&% '%r   r  c                   x   ^  \ rS rSrU 4S jrS rSS.S jrS rS rS	 r	S
 r
S rS rS rS rS rS rSrU =r$ )RunFailedTestsi  c                 T   > [         TU ]  5         [        R                  5       U l        g r   r  r  s    r   r  RunFailedTests.setUp  r  r   c                    ^ SS K nUR                  5       mU R                  U4S j5        [        R	                  U R
                  [        ST< S35      5        [        R                  " TX5      $ )Nr   c                  0   > [         R                  " T 5      $ r   )r   rmtree)tempdirs   r   r  +RunFailedTests.add_module.<locals>.<lambda>  s    	 0 0 9r   z7
            import sys
            sys.path.insert(0, ru  )	r  mkdtemp
addCleanupr   r   rA   r   r   r  )rH   modnametextr  r0  s       @r   
add_moduleRunFailedTests.add_module  se    ""$9:  & 6  '{ +2 + 	 (('@@r   Ffailsc                   [         R                  " 5       u  p4 [        SU SU S35      R                  [        U5      5      nU(       a`  [        R                  U R                  U5      nU R                  US 5        U[         R                  " U5        [         R                  " U5        $ [        R                  U R                  U5      nU R                  US 5         [         R                  " U5        [         R                  " U5        g !   e = f! [         R                  " U5        [         R                  " U5        f = f)Nz9
                import os, sys
                os.write(z, b'0')

                # This raises an exception:
                {}

                # Nothing from here down should ever run.
                os.write(z{, b'1')
                class NeverError(Exception): pass
                raise NeverError  # never raised
                )r   r   r   formatr   r   rA   assertIsNotcloser   r    r   )rH   r5  r9  r   r   r   errr  s           r   
run_scriptRunFailedTests.run_script  s    wwy	 !     VF4L)  #..tww?  d+ HHQKHHQK $..tww?c4( HHQKHHQK	
 HHQKHHQKs   A$D
 *2D
 
DD .D>c                 z   [        U[        5      (       a  UnS nOUR                  nU R                  USS9nU R	                  UR
                  R                  U5        Uc0  U R	                  UR                  R                  S5      S   U5        U$ U R	                  UR                  SR                  XB5      5        U$ )NTr8  :r   z{}: {})	
isinstancer  rL   r?  r   rv   	formattedsplitr;  )rH   exctyper  r   exctype_nameexcinfos         r   _assert_run_failed!RunFailedTests._assert_run_failed  s    gs##"LG"++L //&/5 	..=;W..44S9!<)+  W..%__\?A r   c                 *    U R                  US U5        g r   rI  )rH   rF  r   s      r   assert_run_failed RunFailedTests.assert_run_failed  s    v6r   c                 (    U R                  XU5        g r   rL  )rH   rF  r  r   s       r   assert_run_failed_msg$RunFailedTests.assert_run_failed_msg  s    f5r   c                    U R                  S5         U R                  [        S5        S S S 5        U R                  S5         U R                  [        S5        S S S 5        U R                  S5         U R                  [        SS5        S S S 5        U R                  S5         U R                  [        SS	5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nb= f! , (       d  f       g = f)
Nzsys.exit(0)z-
                sys.exit(0)
                z
sys.exit()zG
                import sys
                sys.exit()
                zsys.exit(42)42zI
                import sys
                sys.exit(42)
                
SystemExitz6
                raise SystemExit(42)
                )rZ   rM  rT  rP  rG   s    r   	test_exitRunFailedTests.test_exit  s    \\-("": 0  ) \\,'"": 0  ( \\.)&&z4 :  * \\,'&&z4 :  ('% )( (' *) ('s/   CC2C&#C7
C
C#&
C47
Dc                 2    U R                  [        SS5        g )NrV   z1
            raise Exception("spam")
            )rP  rx   rG   s    r   test_plain_exception#RunFailedTests.test_plain_exception  s    ""9f 7 	r   c                 L   [        S5      nU R                  S5         U R                  [        U5        S S S 5        U R                  S5         SnU R	                  X!5      nU R                  [        SU S35        S S S 5        g ! , (       d  f       NV= f! , (       d  f       g = f)Nz
            x = 1 + 2
            y = 2 + 4
            z = 4 + 8

            # missing close paren
            print("spam"

            if x + y + z < 20:
                ...
            r   modulespam_spam_spamz
                import r   )r   rZ   rM  SyntaxErrorr6  )rH   r   r4  r#  s       r   test_invalid_syntax"RunFailedTests.test_invalid_syntax  s     
 
 \\(#"";7 $ \\(#&Gw7H""; 5y !1  $# $# $#s   B.B
B
B#c                 0    U R                  [        S5        g )Nz+
            res = spam + eggs
            )rM  	NameErrorrG   s    r   test_NameErrorRunFailedTests.test_NameError)  s    y + 	r   c                 0    U R                  [        S5        g )Nz'
            object().spam
            )rM  AttributeErrorrG   s    r   test_AttributeError"RunFailedTests.test_AttributeError/  s    ~ 0 	r   c                 0    U R                  [        S5        g )Nz
            raise ExceptionGroup('exceptions', [
                Exception('spam'),
                ImportError('eggs'),
            ])
            )rM  ExceptionGrouprG   s    r   test_ExceptionGroup"RunFailedTests.test_ExceptionGroup5  s    ~ 0 	r   c                 *    U R                  SSS5        g )NMyErrorrV   zj
            class MyError(Exception):
                pass
            raise MyError('spam')
            )rP  rG   s    r   test_user_defined_exception*RunFailedTests.test_user_defined_exception=  s    ""9f 7 	r   r|  )rL   rM   rN   rO   r  r6  r?  rI  rM  rP  rU  rX  r^  rb  rf  rj  rn  rP   r  r  s   @r   r*  r*    sP    )A ). @*764
. r   r*  c                   j   ^  \ rS rSrU 4S jrS rS rS rS r\	R                  S 5       rS rS	rU =r$ )
RunFuncTestsiE  c                 T   > [         TU ]  5         [        R                  5       U l        g r   r  r  s    r   r  RunFuncTests.setUpG  r  r   c                 R   [         R                  " 5       u  pS n[        R                  U R                  [        US95        [        R                  U R                  U5        [        USS9 nUR                  5       nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Nc                      SS K n [        [        SSS9 nU R                  " U5         [	        SSS9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fNr   r   r   r   r  r   )end
contextlibr   r   redirect_stdoutprintry  r;   s     r   r   )RunFuncTests.test_success.<locals>.scriptM  H    aw/5//6,B/ 7 0/66 0/!   AAA
A	A
A"r   r   r   r  )
r   r   r   r  rA   r  r  r   r    r   )rH   r   r   r   outfiler   s         r   r  RunFuncTests.test_successK  sy    wwy	0 	(($)<tww/!g&',,.C ' 	l+ '&s   ,B
B&c                 D  ^ ^^ [         R                  " 5       u  nmS mUU U4S jn[        R                  " US9nUR	                  5         UR                  5         [        USS9 nUR                  5       nS S S 5        T R                  WS5        g ! , (       d  f       N!= f)Nc                      SS K n [        [        SSS9 nU R                  " U5         [	        SSS9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = frv  rx  r|  s     r   r   +RunFuncTests.test_in_thread.<locals>.script]  r~  r  c                     > [         R                  TR                  [        TS95        [         R	                  TR                  T 5        g )Nr  )r   r  rA   r  r  )r   rH   r   s   r   r*  &RunFuncTests.test_in_thread.<locals>.fc  s/    ,,TWWdQi@""477F3r   r2   r   r   r  )	r   r   r5   r6   r7   r9   r   r    r   )rH   r   r*  r:   r  r   r   r   s   `     @@r   r2  RunFuncTests.test_in_thread[  sw    wwy1	0	4 A&			!g&',,.C ' 	l+ '&s   %B
Bc                 j   [         R                  " 5       u  pS nUR                  n[        R	                  U R
                  [        US95        [        R                  U R
                  U5        [        USS9 nUR                  5       nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Nc                      SS K n [        [        SSS9 nU R                  " U5         [	        SSS9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = frv  rx  r|  s     r   r   -RunFuncTests.test_code_object.<locals>.scriptr  r~  r  r  r   r   r  )r   r   __code__r   r  rA   r  r  r   r    r   )rH   r   r   r   coder  r   s          r   test_code_objectRunFuncTests.test_code_objecto  s    wwy	0 (($)<tww-!g&',,.C ' 	l+ '&s   8B$$
B2c                    ^ SmU4S jnU R                  [        5         [        R                  U R                  U5        S S S 5        g ! , (       d  f       g = f)NTc                     > g r   rK   rV   s   r   r   )RunFuncTests.test_closure.<locals>.script  s    r   r   r   r   r  rA   )rH   r   rV   s     @r   test_closureRunFuncTests.test_closure  s=    	 z*""477F3 +**s   !A		
Ac                     S nU R                  [        5         [        R                  U R                  U5        S S S 5        g ! , (       d  f       g = f)Nc                      g)NrV   rK   rK   r   r   r   .RunFuncTests.test_return_value.<locals>.script  s    r   r  rH   r   s     r   test_return_valueRunFuncTests.test_return_value  s5    	z*""477F3 +**s   !A
Ac                    U R                  S5         SS jnU R                  [        5         [        R	                  U R
                  U5        S S S 5        S S S 5        U R                  S5         S nU R                  [        5         [        R	                  U R
                  U5        S S S 5        S S S 5        U R                  S5         S nU R                  [        5         [        R	                  U R
                  U5        S S S 5        S S S 5        U R                  S5         SS	.S
 jnU R                  [        5         [        R	                  U R
                  U5        S S S 5        S S S 5        U R                  S5         S nU R                  [        5         [        R	                  U R
                  U5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNQ= f! , (       d  f       GN[= f! , (       d  f       GN= f! , (       d  f       GN$= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nargsc                     g r   rK   )r  bs     r   r   &RunFuncTests.test_args.<locals>.script      r   z*argsc                      g r   rK   )r  s    r   r   r    r  r   z**kwargsc                      g r   rK   )kwargss    r   r   r    r  r   kwonlyTr  c                     g r   rK   r  s    r   r   r    r  r   posonlyc                    g r   rK   r  s    r   r   r    r  r   )r   )rZ   r   r   r   r  rA   r  s     r   	test_argsRunFuncTests.test_args  s   \\&!"":.&&tww7 / " \\'" "":.&&tww7 / # \\*%""":.&&tww7 / & \\(## "":.&&tww7 / $ \\)$"":.&&tww7 / %$+ /. "! /. #" /. &% /. $# /. %$s   G!!GG!/H!G3)H
H)#!HH)%I!H;#II.!I>I.
G	G!!
G03
H	=H
H
H&	!H))
H8;
I		I
I
I+	'I..
I<r|  )rL   rM   rN   rO   r  r  r2  r  r  r  expectedFailurer  r  rP   r  r  s   @r   rq  rq  E  s@    ), ,(,$4 4 48 8r   rq  r  r   )*ry  r   r   r  r   textwrapr   r5   r  testr   test.supportr   r   r   import_moduler   r	   r
   r   r$   r-   contextmanagerr<   rB   TestCaserD   rR   r   r   r   r   r   r   r  rS  r  r  r*  rq  rL   r   rK   r   r   <module>r     si     	  
     & " & ++O<!//0CD  2	.
4  ( x    05x(( 05fOB** OBd
( 
.8 ..'h '.)8 )*&)X &)R`4( `4Fg>8 g>T*M( *MZN%X N%b
ZX Zzi88 i8X zMMO r   