
    dafm                     f   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dlZd dl	m
Z
 d dlmZ d dlmZ  ej                  d      Z ej                  d      Zd Zd&d	Zd&d
Ze j(                  d        Zd Z G d dej.                        Z G d dej.                        Z G d dej.                        Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d d e      Z! G d! d"e      Z" G d# d$e      Z#e$d%k(  r ejJ                          yy)'    N)dedent)support)import_helper)script_helper_xxsubinterpreters	_testcapic                     t        j                         \  }}| j                  dd      }t        d| d| d      }|t	        |d      fS )N
z
                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        7/root/Python-3.12.4/Lib/test/test__xxsubinterpreters.py_captured_scriptr      s^    779DAq~~d$89H # 
 		 G DW---    c                     t        |      \  }}|5  t        j                  | ||       |j                         cd d d        S # 1 sw Y   y xY wN)r   interpreters
run_stringread)interprequestsharedr   rpipes        r   _run_outputr#   !   sC    $W-MFE	 7zz|  s   'AAc                     |t         j                  }t        j                  |d      D ]  }t        j	                  |       s y  t        d      )NF)errorzinterp is not running)r   SHORT_TIMEOUTsleeping_retryr   
is_runningRuntimeError)r   timeout_s      r   _wait_for_interp_to_runr,   (   sO     ''##G59 4""6*4 233r   c              #   <   K   t        j                         \  } fd}t        j                  |      }|j	                          t                d  t        |dd      5 }|j                  d       d d d        |j                          y # 1 sw Y   xY ww)Nc                  L    t         j                   t        d d             y )Nz7
            # wait for "signal"
            with open(zG, encoding="utf-8") as rpipe:
                rpipe.read()
            )r   r   r   )r   r   s   r   runz_running.<locals>.run8   s.     4c 0 ) 	r   targetr   r   r   done)	r   r   	threadingThreadstartr,   r   writejoin)r   r   r/   tspiper   s   `    @r   _runningr:   5   sx     779DAq 	$AGGIF#		aw	' 5FFFH s   A!B%B7BBBc                      t         j                         D ]  } | dk(  r		 t         j                  |          y # t        $ r Y -w xY w)Nr   )r   list_alldestroyr)   ids    r   clean_up_interpretersr@   J   sK    ##% 7	  $	
  		s   7	AAc                       e Zd Zd Zy)TestBasec                     t                y r   )r@   selfs    r   tearDownzTestBase.tearDownV   s    r   N)__name__
__module____qualname__rF    r   r   rB   rB   T   s     r   rB   c                       e Zd Zd Zd Zy)IsShareableTestsc                     g d}|D ]@  }| j                  |      5  | j                  t        j                  |             d d d        B y # 1 sw Y   MxY w)N)N   spamspam
   i)subTest
assertTruer   is_shareable)rE   
shareablesobjs      r   test_default_shareablesz(IsShareableTests.test_default_shareables_   sZ    
  	4Cc" 4 --c244 4	44 4s   %AA	c                 V    G d d      } G d dt               }ddt        dt        t        t               t	               d| |d	       |d
      g}|D ]I  }| j                  t        |            5  | j                  t        j                  |             d d d        K y # 1 sw Y   VxY w)Nc                       e Zd Zd Zd Zy)3IsShareableTests.test_not_shareable.<locals>.Cheesec                     || _         y r   name)rE   r\   s     r   __init__z<IsShareableTests.test_not_shareable.<locals>.Cheese.__init__p   s	     	r   c                     | j                   S r   r[   rD   s    r   __str__z;IsShareableTests.test_not_shareable.<locals>.Cheese.__str__r   s    yy r   N)rG   rH   rI   r]   r_   rJ   r   r   CheeserY   o   s    !!r   r`   c                       e Zd ZdZy)5IsShareableTests.test_not_shareable.<locals>.SubByteszA subclass of a shareable type.N)rG   rH   rI   __doc__rJ   r   r   SubBytesrb   u   s    1r   rd   TF.g      Y@WensleydalerN   )
bytesNotImplementedtypeobject	ExceptionrQ   reprassertFalser   rS   )rE   r`   rd   not_shareablesrU   s        r   test_not_shareablez#IsShareableTests.test_not_shareablen   s    	! 	!	2u 	2
 }%!" " 	4Cd3i( 4   --c244 4	44 4s   /%BB(	N)rG   rH   rI   rV   rn   rJ   r   r   rL   rL   ]   s    44r   rL   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	ShareableTypeTestsc                    |D ]|  }| j                  |      5  t        j                  |      }t        j                  |      }| j	                  ||       | j                  t        |      t        |             d d d        ~ y # 1 sw Y   xY wr   )rQ   r   get_crossinterp_datarestore_crossinterp_dataassertEqualassertIsrh   )rE   valuesrU   xidgots        r   _assert_valuesz!ShareableTypeTests._assert_values   s}     	4Cc" 444S988=  c*d3ic34 4	44 4s   A!BB	c                     dD ]X  }| j                  |      5  t        j                  |      }t        j                  |      }| j	                  ||       d d d        Z y # 1 sw Y   exY w)Nr   )rQ   r   rr   rs   ru   )rE   rU   rw   rx   s       r   test_singletonsz"ShareableTypeTests.test_singletons   sg     	(Cc" (44S988= c3'( (	(( (s   =AA(	c                 *    | j                  ddg       y )NrN   i'  ry   rD   s    r   
test_typeszShareableTypeTests.test_types   s     	r   c                 H    | j                  d t        dd      D               y )Nc              3   D   K   | ]  }|j                  d dd        yw)   littleT)signedN)to_bytes).0is     r   	<genexpr>z0ShareableTypeTests.test_bytes.<locals>.<genexpr>   s'      5 ! JJq(4J@ 5s      )ry   rangerD   s    r   
test_byteszShareableTypeTests.test_bytes   s#     5%*2s^5 	5r   c                 *    | j                  g d       y )N)zhello worldu   你好世界 r}   rD   s    r   	test_strszShareableTypeTests.test_strs   s    ?@r   c                     | j                  t        j                  t        dd      t        j
                  t        j
                   dz
  g             y )Nr   r      )ry   	itertoolschainr   sysmaxsizerD   s    r   test_intzShareableTypeTests.test_int   s<    IOOE"cN-0[[3;;,:J,KM 	Nr   c                 2   t         j                  dz   t         j                   dz
  ddz  g}|D ]O  }| j                  |      5  | j                  t              5  t
        j                  |       d d d        d d d        Q y # 1 sw Y   xY w# 1 sw Y   hxY w)Nr   r     )r   r   rQ   assertRaisesOverflowErrorr   rr   )rE   intsr   s      r   test_non_shareable_intz)ShareableTypeTests.test_non_shareable_int   s    KK!O[[L1tG

  	6Aa 6&&}5 6221566 6	66 66 6s$   BB.BB
BB	N)
rG   rH   rI   ry   r{   r~   r   r   r   r   rJ   r   r   rp   rp      s'    4(5AN	6r   rp   c                       e Zd Zd Zy)ModuleTestsc                 @    t        t        j                         d       y )Nz*import _xxsubinterpreters as _interpreters)r#   r   createrD   s    r   test_import_in_interpreterz&ModuleTests.test_import_in_interpreter   s    !8	
r   N)rG   rH   rI   r   rJ   r   r   r   r      s    
r   r   c                       e Zd Zd Zd Zd Zy)ListAllTestsc                 z    t         j                         }t         j                         }| j                  ||g       y r   )r   get_mainr<   rt   )rE   mainidss      r   test_initialzListAllTests.test_initial   s0    $$&##%tf%r   c                     t         j                         }t         j                         }t         j                         }t         j                         }| j	                  ||||g       y r   )r   r   r   r<   rt   rE   r   firstsecondr   s        r   test_after_creatingz ListAllTests.test_after_creating   sQ    $$&##%$$&##%tUF34r   c                     t         j                         }t         j                         }t         j                         }t         j                  |       t         j	                         }| j                  |||g       y r   )r   r   r   r=   r<   rt   r   s        r   test_after_destroyingz"ListAllTests.test_after_destroying   s\    $$&##%$$&U###%tVn-r   N)rG   rH   rI   r   r   r   rJ   r   r   r   r      s    &
5.r   r   c                       e Zd Zd Zd Zy)GetCurrentTestsc                     t         j                         }t         j                         }| j                  ||       | j	                  |t         j
                         y r   )r   r   get_currentrt   assertIsInstanceInterpreterID)rE   r   curs      r   	test_mainzGetCurrentTests.test_main   sD    $$&&&(d#c<#=#=>r   c                 &   t         j                         }t         j                         }t        |t	        d            }t        |j                               }t         j                         \  }}| j                  ||       | j                  ||       y )Nz
            import _xxsubinterpreters as _interpreters
            cur = _interpreters.get_current()
            print(cur)
            assert isinstance(cur, _interpreters.InterpreterID)
            )
r   r   r   r#   r   intstripr<   rt   assertNotEqual)rE   r   r   outr   r+   expecteds          r   test_subinterpreterz#GetCurrentTests.test_subinterpreter   sz    $$&$$&&& * #  #))+"++-8h'C&r   N)rG   rH   rI   r   r   rJ   r   r   r   r      s    ?'r   r   c                       e Zd Zd Zd Zy)GetMainTestsc                     t         j                         \  }t         j                         }| j                  ||       | j	                  |t         j
                         y r   )r   r<   r   rt   r   r   )rE   r   r   s      r   test_from_mainzGetMainTests.test_from_main   sF    !**,
$$&x(dL$>$>?r   c                     t         j                         \  }t         j                         }t        |t	        d            }t        |j                               }| j                  ||       y )Nz
            import _xxsubinterpreters as _interpreters
            main = _interpreters.get_main()
            print(main)
            assert isinstance(main, _interpreters.InterpreterID)
            )r   r<   r   r#   r   r   r   rt   )rE   r   r   r   r   s        r   test_from_subinterpreterz%GetMainTests.test_from_subinterpreter  sZ    !**,
$$&&& * #  399;x(r   N)rG   rH   rI   r   r   rJ   r   r   r   r      s    @
)r   r   c                   Z    e Zd Zd Z ej
                  d      d        Zd Zd Zd Z	d Z
y)	IsRunningTestsc                 t    t         j                         }| j                  t         j                  |             y r   )r   r   rR   r(   )rE   r   s     r   r   zIsRunningTests.test_main  s'    $$&//56r   zFails on FreeBSDc                 D   t         j                         }| j                  t         j                  |             t	        |      5  | j                  t         j                  |             d d d        | j                  t         j                  |             y # 1 sw Y   .xY wr   )r   r   rl   r(   r:   rR   rE   r   s     r   r   z"IsRunningTests.test_subinterpreter  sv    $$&0089f 	=OOL33F;<	=0089	= 	=s   %BBc                     t         j                         }t        |t        d| d            }| j	                  |j                         d       y )Nz`
            import _xxsubinterpreters as _interpreters
            if _interpreters.is_running(zZ):
                print(True)
            else:
                print(False)
            True)r   r   r#   r   rt   r   )rE   r   r   s      r   r   z'IsRunningTests.test_from_subinterpreter  sO    $$&&& .))/ 1* #  	f-r   c                     t         j                         }t         j                  |       | j                  t              5  t         j                  |       d d d        y # 1 sw Y   y xY wr   )r   r   r=   r   r)   r(   r   s     r   test_already_destroyedz%IsRunningTests.test_already_destroyed)  sO    $$&V$|, 	,##F+	, 	, 	,   AA'c                     | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wNi@B )r   r)   r   r(   rD   s    r   test_does_not_existz"IsRunningTests.test_does_not_exist/  s3    |, 	/##I.	/ 	/ 	/   5>c                     | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wNr   )r   
ValueErrorr   r(   rD   s    r   test_bad_idzIsRunningTests.test_bad_id3  s3    z* 	(##B'	( 	( 	(r   N)rG   rH   rI   r   unittestskipr   r   r   r   r   rJ   r   r   r   r     s;    7 X]]%&: ':	.,/(r   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	InterpreterIDTestsc                 h    t         j                  dd      }| j                  t        |      d       y )NrP   Tforce)r   r   rt   r   rE   r?   s     r   test_with_intz InterpreterIDTests.test_with_int:  s+    ''$'7R"%r   c                      G d dt               }t        j                   |       d      }| j                  t	        |      d       y )Nc                       e Zd Zd Zy).InterpreterIDTests.test_coerce_id.<locals>.Intc                      yNrP   rJ   rD   s    r   	__index__z8InterpreterIDTests.test_coerce_id.<locals>.Int.__index__A  s    r   N)rG   rH   rI   r   rJ   r   r   Intr   @  s    r   r   Tr   rP   )strr   r   rt   r   )rE   r   r?   s      r   test_coerce_idz!InterpreterIDTests.test_coerce_id?  s;    	# 	 ''T':R"%r   c                    | j                  t        t        j                  t	                      | j                  t        t        j                  d       | j                  t        t        j                  d       | j                  t        t        j                  d       | j                  t
        t        j                  d       | j                  t        t        j                  d       y )Ng      $@10s   10r   l            )r   	TypeErrorr   r   ri   r   r   rD   s    r   r   zInterpreterIDTests.test_bad_idG  s    )\%?%?J)\%?%?F)\%?%?F)\%?%?G*l&@&@"E-)C)CUKr   c                     t         j                         }| j                  t              5  t         j	                  t        |      dz          d d d        y # 1 sw Y   y xY w)Nr   )r   r   r   r)   r   r   r   s     r   r   z&InterpreterIDTests.test_does_not_existO  sI      "|, 	4&&s2w{3	4 	4 	4s   "AAc                 h    t         j                  dd      }| j                  t        |      d       y )NrP   Tr   r   )r   r   rt   r   r   s     r   test_strzInterpreterIDTests.test_strT  s+    ''$'7R$'r   c                 h    t         j                  dd      }| j                  t        |      d       y )NrP   Tr   zInterpreterID(10))r   r   rt   rk   r   s     r   	test_reprzInterpreterIDTests.test_reprX  s,    ''$'7b#67r   c                    t         j                         }t         j                  t        |            }t         j                         }| j	                  ||k(         | j	                  ||k(         | j	                  |t        |      k(         | j	                  t        |      |k(         | j	                  |t        t        |            k(         | j	                  t        t        |            |k(         | j                  |t        t        |            dz   k(         | j                  |t        t        |            k(         | j                  |ddz  k(         | j                  |t        d      k(         | j                  |dk(         | j                  ||k(         | j                  ||k7         | j                  ||k7         | j	                  ||k7         y )Ng?r   r   infrO   )r   r   r   r   rR   floatrl   r   rE   id1id2id3s       r   test_equalityz InterpreterIDTests.test_equality\  sl   !!#((S2!!#s
#s
#s3x(CC(uSX./c#h3./c#h# 556CH-.4(e,-'$$$s
#r   N)
rG   rH   rI   r   r   r   r   r   r   r   rJ   r   r   r   r   8  s&    &
&L4
(8$r   r   c                   `    e Zd Zd Z ej
                  d      d        Zd Zd Zd Z	d Z
d Zy	)
CreateTestsc                     t         j                         }| j                  |t         j                         | j	                  |t         j                                y r   )r   r   r   r   assertInr<   r   s     r   test_in_mainzCreateTests.test_in_mainu  s=      "b,"<"<=b,//12r   z*enable this test when working on pystate.cc                     t               }t        d      D ]<  }t        j                         }t        j	                  |       |j                  |       > | j                  t        |      d       y )Nd   )setr   r   r   r=   addrt   len)rE   seenr+   r?   s       r   test_unique_idzCreateTests.test_unique_id{  sY    us 	A$$&B  $HHRL	
 	TC(r   c                 "   t        j                         d fd}t        j                  |      }5  |j                          d d d        |j	                          | j                  t        j                                y # 1 sw Y   >xY w)Nc                  n    t         j                          j                          j                          y r   )r   r   acquirerelease)r?   locks   r   fz%CreateTests.test_in_thread.<locals>.f  s#    $$&BLLNLLNr   r0   )r3   Lockr4   r5   r7   r   r   r<   )rE   r	  r8   r?   r  s      @@r   test_in_threadzCreateTests.test_in_thread  sl    ~~	 A& 	GGI		b,//12	 	s   BBc                    t         j                         \  }t         j                         }t        |t	        d            }t        |j                               }| j                  t        t         j                               |||h       y )Nz
            import _xxsubinterpreters as _interpreters
            id = _interpreters.create()
            print(id)
            assert isinstance(id, _interpreters.InterpreterID)
            )	r   r<   r   r#   r   r   r   rt   r   )rE   r   r   r   r   s        r   test_in_subinterpreterz"CreateTests.test_in_subinterpreter  so    %%'!!##v '    #))+\2245c37GHr   c                 8   t         j                         \  }t         j                         d fd}t        j                  |      }|j                          |j                          | j                  t        t         j                               |h       y )Nc                  b    t        t        d            } t        | j                               y )Nz
                import _xxsubinterpreters as _interpreters
                id = _interpreters.create()
                print(id)
                )r#   r   r   r   )r   r   r   s    r   r	  z6CreateTests.test_in_threaded_subinterpreter.<locals>.f  s-    c6 + $ C
 ciik"Cr   r0   )	r   r<   r   r3   r4   r5   r7   rt   r   )rE   r   r	  r8   r   r   s       @@r   test_in_threaded_subinterpreterz+CreateTests.test_in_threaded_subinterpreter  st    %%'!!#	# A&			\2245c37GHr   c                 n   t        t        j                               }g }t        d      D ]'  }t        j	                         }|j                  |       ) |D ]  }t        j                  |        t        j	                         }| j                  t        t        j                               ||hz         y N   )r   r   r<   r   r   appendr=   rt   rE   beforer   r+   r?   s        r   test_after_destroy_allz"CreateTests.test_after_destroy_all  s    \**,-q 	A$$&BJJrN	  	%B  $	%   "\2245v}Er   c                    t        t        j                               }t        j                         }t        j                         }t        j                         }t        j	                  |       t        j	                  |       t        j                         }| j                  t        t        j                               |||hz         y r   )r   r   r<   r   r=   rt   )rE   r  r   r   r   r?   s         r   test_after_destroy_somez#CreateTests.test_after_destroy_some  s    \**,-!!#!!#!!#S!S!  "\2245vS	7IJr   N)rG   rH   rI   r   r   r   r  r  r  r  r  r  rJ   r   r   r   r   s  sE    3 X]]?@) A)3II&FKr   r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)DestroyTestsc                    t         j                         }t         j                         }t         j                         }| j                  |t         j                                t         j	                  |       | j                  |t         j                                | j                  |t         j                                | j                  |t         j                                y r   )r   r   r   r<   r=   assertNotInr   s       r   test_onezDestroyTests.test_one  s    !!#!!#!!#c<0023S!l3356c<0023c<0023r   c                    t        t        j                               }t               }t        d      D ]'  }t        j	                         }|j                  |       ) | j                  t        t        j                               ||z         |D ]  }t        j                  |        | j                  t        t        j                               |       y r  )r   r   r<   r   r   r   rt   r=   r  s        r   test_allzDestroyTests.test_all  s    \**,-eq 	A$$&BGGBK	 	\2245v|D 	%B  $	%\2245v>r   c                 *    t         j                         \   j                  t              5  t         j	                         d d d         fd}t        j                  |      }|j                          |j                          y # 1 sw Y   FxY w)Nc                      j                  t              5  t        j                          d d d        y # 1 sw Y   y xY wr   r   r)   r   r=   )r   rE   s   r   r	  z!DestroyTests.test_main.<locals>.f  s4    ""<0 +$$T*+ + +s   6?r0   )	r   r<   r   r)   r=   r3   r4   r5   r7   )rE   r	  r8   r   s   `  @r   r   zDestroyTests.test_main  sm    %%'|, 	'  &	'	+ A&				' 	's   B		Bc                     t         j                         }t         j                  |       | j                  t              5  t         j                  |       d d d        y # 1 sw Y   y xY wr   )r   r   r=   r   r)   r   s     r   r   z#DestroyTests.test_already_destroyed  sO      "R |, 	%  $	% 	% 	%r   c                     | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wr   r#  rD   s    r   r   z DestroyTests.test_does_not_exist  s3    |, 	,  +	, 	, 	,r   c                     | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wr   )r   r   r   r=   rD   s    r   r   zDestroyTests.test_bad_id  s3    z* 	%  $	% 	% 	%r   c                     t         j                         \  }t         j                         }t        d| d      }t         j	                  ||       | j                  t        t         j                               ||h       y )Nzo
            import _xxsubinterpreters as _interpreters
            try:
                _interpreters.destroy(zD)
            except RuntimeError:
                pass
            r   r<   r   r   r   rt   r   )rE   r   r?   r   s       r   test_from_currentzDestroyTests.test_from_current  st    %%'  " ' (*d +  	F+\2245bzBr   c                 (   t         j                         \  }t         j                         }t         j                         }t        d| d      }t         j	                  ||       | j                  t        t         j                               ||h       y )NzZ
            import _xxsubinterpreters as _interpreters
            _interpreters.destroy(z)
            r(  )rE   r   r   r   r   s        r   test_from_siblingzDestroyTests.test_from_sibling  s    %%'!!#!!# ##&% (  	V,\2245c{Cr   c                     t         j                         fd}t        j                  |      }|j	                          |j                          y )Nc                  0    t         j                          y r   )r   r=   r>   s   r   r	  z.DestroyTests.test_from_other_thread.<locals>.f  s      $r   r0   )r   r   r3   r4   r5   r7   )rE   r	  r8   r?   s      @r   test_from_other_threadz#DestroyTests.test_from_other_thread  s:      "	% A&			r   c                    t         j                         \  }t         j                         }t        |      5  | j	                  t         j                  |      d| d       | j                  t        d| d      5  t         j                  |       d d d        | j	                  t         j                  |             d d d        y # 1 sw Y   6xY w# 1 sw Y   y xY w)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:   rR   r(   r   r)   r=   )rE   r   r   s      r   test_still_runningzDestroyTests.test_still_running%  s    %%'$$&f 	=OOL33F;")&1W X  Z ""<)NvhVp'q # s -$$V,- OOL33F;<	= 	=- -		= 	=s$   AC<C,CC	CCN)rG   rH   rI   r  r   r   r   r   r   r)  r+  r.  r1  rJ   r   r   r  r    s6    4	?%,%C
D
=r   r  c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	 e
j                         d        Zd	 Zd
 Zd Zd Zd Zd Zej(                  dd       Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej@                  d      d        Z! xZ"S )RunStringTestsc                 T    t         |           t        j                         | _        y r   )supersetUpr   r   r?   )rE   	__class__s    r   r6  zRunStringTests.setUp4  s    %%'r   c                     t        d      \  }}|5  t        j                  | j                  |       |j	                         }d d d        | j                  d       y # 1 sw Y   xY w)Nprint("it worked!", end="")
it worked!)r   r   r   r?   r   rt   )rE   r   filer   s       r   test_successzRunStringTests.test_success8  sZ    '(EF 	##DGGV4))+C	 	l+		 	s   1AA&c                     t        d      \  }|5   fd}t        j                  |      }|j                          |j	                          |j                         }d d d         j                  d       y # 1 sw Y   xY w)Nr9  c                  F    t         j                  j                          y r   )r   r   r?   )r   rE   s   r   r	  z(RunStringTests.test_in_thread.<locals>.fC  s    ''8r   r0   r:  )r   r3   r4   r5   r7   r   rt   )rE   r;  r	  r8   r   r   s   `    @r   r  zRunStringTests.test_in_thread@  sp    '(EF 	9   *AGGIFFH))+C	 	l+	 	s   AA;;Bc                     t         j                         }t        d      \  }}|5  t         j                  ||       |j	                         }d d d        | j                  d       y # 1 sw Y   xY w)Nz
            import threading
            def f():
                print('it worked!', end='')

            t = threading.Thread(target=f)
            t.start()
            t.join()
            r:  r   r   r   r   r   rt   )rE   	subinterpr   r;  r   s        r   test_create_threadz!RunStringTests.test_create_threadM  sj     '')	' )   	##Iv6))+C	 	l+		 	s   'A''A0c                 t   | j                  d      5  d}t        j                  d      }t        d| d      \  }}|5  t        j	                  ||       |j                         }d d d        | j                  |       d d d        | j                  d      5  t        j                  d      }t        d	      \  }}|5  t        j	                  ||       |j                         }d d d        | j                  d
       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   <xY w# 1 sw Y   y xY w)Nisolatedspam spam spam spam spamT)rD  a<  
                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 isolatedFz
                import threading
                def f():
                    print('it worked!', end='')

                t = threading.Thread(target=f, daemon=True)
                t.start()
                t.join()
                r:  )rQ   r   r   r   r   r   rt   rE   r   rA  r   r;  r   s         r   test_create_daemon_threadz(RunStringTests.test_create_daemon_thread^  s<   \\*% 	,1H$++T+:I+ 
1 %: &- LFD  "''	6:iik" S(+'	,* \\.) 	0$++U+;I+ - LFD  "''	6:iik" S,/	0 	0" "	, 	,@" "	0 	0sF   -D'D
&D'D. 'D"'D.
D	DD"D+	'D..D7c           	          t         j                         }g d}|D ]B  }| j                  |      5  t         j                  |d|dt	        |             d d d        D y # 1 sw Y   OxY w)N)NrO   rN   *   zassert(obj == ))rU   )r!   )r   r   rQ   r   dict)rE   r   objectsrU   s       r   test_shareable_typesz#RunStringTests.test_shareable_types  sw    $$&
  	Cc" ''$SG1-C= (  	 s   'A!!A*	c                     d}t         j                         }t        d| d      \  }}|5  t         j                  ||       |j	                         }d d d        | j                  |       y # 1 sw Y   xY w)NrE  z
            import os, sys
            try:
                os.execl(sys.executable)
            except RuntimeError:
                print('z', end='')
            r@  rF  s         r   test_os_execzRunStringTests.test_os_exec  s    - '')	' -
 !z ")   	##Iv6))+C	 	h'		 	s   'A--A6c                    dd l }|j                  dd      5 }|j                  d       |j                          d}t	        d|j
                   d| d	      }t        j                  | j                  |       |j                  d       |j                         }| j                  ||       d d d        y # 1 sw Y   y xY w)
Nr   zw+r   r   r   rE  z
                import os
                try:
                    os.fork()
                except RuntimeError:
                    with open('zE', 'w', encoding='utf-8') as out:
                        out.write('z')
                )tempfileNamedTemporaryFiler6   flushr   r\   r   r   r?   seekr   rt   )rE   rQ  r;  r   r   contents         r   	test_forkzRunStringTests.test_fork  s    (((@ 	0DJJrNJJL1H ! 
 !%		{ +$$,: . F ##DGGV4IIaLiikGWh/#	0 	0 	0s   BB44B=c                     t        | j                        5  | j                  t              5  t        j                  | j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nprint("spam"))r:   r?   r   r)   r   r   rD   s    r   test_already_runningz#RunStringTests.test_already_running  sh    dgg 	B""<0 B''AB	B 	BB B	B 	Bs"   A*!AA*A'	#A**A3c                     d}|t         j                         v r|dz  }|t         j                         v r| j                  t              5  t         j	                  |d       d d d        y # 1 sw Y   y xY w)Nr   r   rX  )r   r<   r   r)   r   r   s     r   r   z"RunStringTests.test_does_not_exist  sg    L))++!GB L))++|, 	9##B8	9 	9 	9s   
A**A3c                     | j                  t              5  t        j                  dd       d d d        y # 1 sw Y   y xY w)Nr   rX  )r   r   r   r   rD   s    r   test_error_idzRunStringTests.test_error_id  s5    z* 	9##B8	9 	9 	9   6?c                     | j                  t              5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NrO   rX  )r   r   r   r   rD   s    r   r   zRunStringTests.test_bad_id  s5    y) 	=##FO<	= 	= 	=r]  c                     | j                  t              5  t        j                  | j                  d       d d d        y # 1 sw Y   y xY wr   r   r   r   r   r?   rD   s    r   test_bad_scriptzRunStringTests.test_bad_script  s9    y) 	1##DGGR0	1 	1 	1   !A  A	c                     | j                  t              5  t        j                  | j                  d       d d d        y # 1 sw Y   y xY w)Ns   print("spam")r`  rD   s    r   test_bytes_for_scriptz$RunStringTests.test_bytes_for_script  s:    y) 	?##DGG-=>	? 	? 	?rb  c              #   l  K   | j                  t        j                        5 }d  d d d        |A| j                  t	        j
                        j                  d      d   t	        |             y | j                  t	        j
                        dj                  ||             y # 1 sw Y   xY ww)N:r   z{}: {})r   r   RunFailedErrorrt   r   	exceptionsplitformat)rE   exctyper0  caughts       r   assert_run_failedz RunStringTests.assert_run_failed  s     |::; 	v	;S!1!1288=a@ \+ S!1!12%__Wc:<	 	s    B4B(BB4(B1-B4c                     | j                  t              5  t        j                  | j                  d       d d d        y # 1 sw Y   y xY w)Nzprint("spam")rm  SyntaxErrorr   r   r?   rD   s    r   test_invalid_syntaxz"RunStringTests.test_invalid_syntax  s9    ##K0 	=##DGG^<	= 	= 	=rb  c                     | j                  t        d      5  t        j                  | j                  d       d d d        y # 1 sw Y   y xY w)NrO   zraise Exception("spam"))rm  rj   r   r   r?   rD   s    r   test_failurezRunStringTests.test_failure  s@    ##Iv6 	H##DGG-FG	H 	H 	H   !AA
c                     | j                  t        d      5  t        j                  | j                  d       d d d        y # 1 sw Y   y xY w)N42zraise SystemExit(42))rm  
SystemExitr   r   r?   rD   s    r   test_SystemExitzRunStringTests.test_SystemExit  s@    ##J5 	E##DGG-CD	E 	E 	Ers  c                 R   | j                  t              5  t        j                  | j                  t        d             d d d        | j                  t        d      5  t        j                  | j                  t        d             d d d        y # 1 sw Y   RxY w# 1 sw Y   y xY w)NzG
                import sys
                sys.exit()
                ru  zI
                import sys
                sys.exit(42)
                )rm  rv  r   r   r?   r   rD   s    r   test_sys_exitzRunStringTests.test_sys_exit  s    ##J/ 	##DGGV 5 . 	 ##J5 	##DGGV 5 . 	 		 		 	s   *B*BBB&c                    t        j                         \  }}ddd d}t        d| d      }t        j	                  | j
                  ||       t        |d      5 }t        j                  |      }d d d        | j                  d   d       | j                  |d	   d
       | j                  |d   d       | j                  |d          y # 1 sw Y   ]xY w)N   hams   -1)rO   eggs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)
            rbrO   rI  r|  r   result)   r}  )r   r   r   r   r   r?   r   pickleloadrt   assertIsNonerE   r   r   r!   r   channss          r   test_with_sharedzRunStringTests.test_with_shared  s    wwy1 
   c 
 
 	8!T] 	#dT"B	# 	FR(FR(Hr*"Y-(	# 	#s   CCc                 8   t         j                  | j                  t        d             ddi}t        d      }t         j                  | j                  ||       t	        j
                         \  }}t        d| d      }t         j                  | j                  |       t        |d      5 }t        j                  |      }d d d        | j                  d   d   d	       | j                  |d
   d   d       | j                  |d   d       y # 1 sw Y   OxY w)Nzj
            spam = 'eggs'
            ns1 = dict(vars())
            del ns1['__builtins__']
            rO   r{  zL
            ns2 = dict(vars())
            del ns2['__builtins__']
        zr
            ns = dict(vars())
            del ns['__builtins__']
            import pickle
            with open(r~  r  ns1r|  ns2)
r   r   r?   r   r   r   r   r  r  rt   )rE   r!   r   r   r   r  r  s          r   test_shared_overwritesz%RunStringTests.test_shared_overwrites  s    1 * 	 &!   	8wwy1  c 	  	0!T] 	#dT"B	# 	E6*F3E6*F3FV,	# 	#s   ,DDc                 0   t        j                         \  }}ddi}t        d| d      }t        j	                  | j
                  ||       t        |d      5 }t        j                  |      }d d d        | j                  d   d       y # 1 sw Y   xY w)NrG   s   not __main__z
            spam = 42

            ns = dict(vars())
            del ns['__builtins__']
            import pickle
            with open(r~  r  )
r   r   r   r   r   r?   r   r  r  rt   r  s          r   #test_shared_overwrites_default_varsz2RunStringTests.test_shared_overwrites_default_vars6  s    wwy1o.  c   	8!T] 	#dT"B	# 	J9	# 	#s   BBc                 |   t        j                         \  }}t        j                  | j                  t        d| d             t        |d      5 }t        j                  |      }d d d        t        j                         \  }}t        j                  | j                  t        d| d             t        |d      5 }t        j                  |      }d d d        | j                  d       | j                  d|       | j                  d       | j                  d|       y # 1 sw Y   xY w# 1 sw Y   ^xY w)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~  rO   r|  )r   r   r   r   r?   r   r   r  r  r   r  )rE   r   r   r  r  r  s         r   test_main_reusedzRunStringTests.test_main_reusedI  s    wwy1 5 c 	1 	* 		 !T] 	$d++d#C	$ wwy1 5 c 1 * 	 !T] 	$d++d#C	$ 	fc"%fc"fc"'	$ 	$	$ 	$s   D&?D2&D/2D;c           
      r   t        j                         \  }}t        d| d      }t        j	                  | j
                  |       t        |d      5 }t        j                  |      }d d d        j                  d       |j                  d       | j                  |di d d d dd       y # 1 sw Y   ExY w)	Nz
            spam = 42

            ns = dict(vars())
            ns['__builtins__'] = str(ns['__builtins__'])
            import pickle
            with open(r~  r  __builtins__
__loader____main__rI  )rG   __annotations__rc   __package____spec__rO   )r   r   r   r   r   r?   r   r  r  poprt   )rE   r   r   r   r  r  s         r    test_execution_namespace_is_mainz/RunStringTests.test_execution_namespace_is_mainj  s    wwy1  c   	0!T] 	#dT"B	# 	~
|"! 		# 	#s   B--B6zblocking foreverc                 2   t        d      }t        j                         5 }t        j                  |d|      }t        j
                  |      5 }|j                         }d d d        d d d        | j                  d       y # 1 sw Y   $xY w# 1 sw Y   (xY w)Na  
        from textwrap import dedent
        import threading
        import _xxsubinterpreters as _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waitrt   )rE   r   dirnamefilenameprocretcodes         r   test_still_running_at_exitz)RunStringTests.test_still_running_at_exit  s        	&7$00(FKH++H5 &))+&	&
 	!$& &	& 	&s#   -BBBB
	BBr   )#rG   rH   rI   r6  r<  r  rB  rG  rM  rO  r   requires_forkrV  rY  r   r\  r   ra  rd  
contextlibcontextmanagerrm  rp  rr  rw  ry  r  r  r  r  r  r   r   r  __classcell__)r7  s   @r   r3  r3  2  s    (,,,"%0N (  W0 0*B
99=1? < <=
HE)8-<:&#B8 X]]%&% '%r   r3  r  r   )&r  r   r   r  r   textwrapr   r3   r   testr   test.supportr   r   import_moduler   r   r   r#   r,   r  r:   r@   TestCaserB   rL   rp   r   r   r   r   r   r   r   r  r3  rG   r   rJ   r   r   <module>r     sF     	  
     & & +}**+?@'M''4	
	.
4  ( x    /4x(( /4d.6** .6b
( 
.8 ..'h '.)8 )*&(X &(R8$ 8$vZK( ZKz_=8 _=Dj%X j%Z zHMMO r   