
    F\ho                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  \R4                  r " S	 S
\R6                  5      r\ R:                  S 5       r " S S\R>                  \5      r \!S:X  a  \RD                  " 5         gg)    N)support)import_helper)	os_helper)script_helper)socket_helper)warnings_helper)ExtraAssertionsc                   >   ^  \ rS rSrU 4S jrSU 4S jjrS rSrU =r$ )LogCaptureHandler   c                 X   > [         TU ]  [        R                  " 5       5        / U l        g N)super__init__ioStringIOrecords)self	__class__s    (/usr/lib/python3.13/test/test_support.pyr   LogCaptureHandler.__init__   s    '    c                 Z   > U R                   R                  U5        [        TU ]  U5        g r   )r   appendr   emit)r   recordr   s     r   r   LogCaptureHandler.emit#   s!    F#Vr   c                     e r    )r   r   s     r   handleErrorLogCaptureHandler.handleError'   s    r   )r   )returnN)	__name__
__module____qualname____firstlineno__r   r   r    __static_attributes____classcell__)r   s   @r   r   r      s     r   r   c               #      #    [        5       n [        R                  " 5       nUR                  U 5         U v   UR	                  U 5        g ! UR	                  U 5        f = f7fr   )r   logging	getLogger
addHandlerremoveHandler)handlerroot_loggers     r   _caplogr0   +   sO     !G##%K7#+!!'*!!'*s   1A A
 A 
AA c                      \ rS rSr\S 5       r\S 5       rS rS rS r	S r
\R                  " S5      S	 5       rS
 rS rS rS r\R&                  " 5       S 5       r\R&                  " 5       S 5       r\R&                  " 5       S 5       rS rS rS rS r\R6                  " 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(S" r)S# r*S$ r+S% r,S& r-S' r. " S( S)5      r/ " S* S+5      r0S, r1S- r2S. r3\Rh                  " \5" \6S/5      =(       a	    \5" \6S05      S15      \R6                  " 5       S2 5       5       r7\Rp                  " 5       SFS4 j5       r9\Rt                  " S55      S6 5       r;S7 r<\Rz                  " \R|                  S85      \Rz                  " \R~                  S95      \Rz                  " \R                  S:5      S; 5       5       5       rAS< rBS= rCS> rDS? rES@ rFSA rGSB rHSC rISD rJSErKg3)GTestSupport6   c                     [        [        R                  5      n[        R                  " SSS9U l        [        R                  " [        SS9U l        [        [        R                  5      US-   :X  d   eg )Nztest.support.warnings_helperz.*used in test_support.*)likez!.*You should NOT be seeing this.*   )lenwarningsfiltersr   ignore_deprecations_from_warnings_helper_tokenr#   _test_support_tokenclsorig_filter_lens     r   
setUpClassTestSupport.setUpClass7   sf    h../%,%E%E*1K&
" #*"B"B>#
 8##$!(;;;;r   c                     [        [        R                  5      n[        R                  " U R
                  U R                  5        [        [        R                  5      US-
  :X  d   eg )Nr6   )r7   r8   r9   r   clear_ignored_deprecationsr;   r<   r=   s     r   tearDownClassTestSupport.tearDownClassB   sR    h../**&&##	
 8##$!(;;;;r   c                 L   [         R                  " SS9 n[        R                  " 5         [         R                  " S[
        5        U Vs/ s H  n[        UR                  5      PM     nnSSS5        U R                  [        W5      SU5        gs  snf ! , (       d  f       N0= f)z9Test support.ignore_deprecations_from() silences warningsT)r   zYou should NOT be seeing this.Nr   )
r8   catch_warningsr   _warn_about_deprecationwarnDeprecationWarningstrmessageassertEqualr7   )r   warning_objswmessagess       r   $test_ignored_deprecations_are_silent0TestSupport.test_ignored_deprecations_are_silentK   su    $$D1\335MM:<NO0<=1AIIH= 2 	X84 > 21s   5B
B)BB
B#c                     [         R                  " S5        U R                  [        R                  [         R                  S5        g )Nftplibfoo)r   import_moduleassertRaisesunittestSkipTestr   s    r   test_import_moduleTestSupport.test_import_moduleS   s1    ##H-(++'55u	>r   c                 0    [         R                  " S5        g )NrT   )r   import_fresh_modulerZ   s    r   test_import_fresh_module$TestSupport.test_import_fresh_moduleX   s    ))(3r   c                     U R                  [        R                  " U S5      U R                  5        U R	                  [
        R                  [        R                  U S5        g )Ntest_get_attributerU   )rM   r   get_attributerb   rW   rX   rY   rZ   s    r   rb   TestSupport.test_get_attribute[   sI    ..t5IJ//	1(++W-B-BD%Pr   zfailing buildbotsc                 j    U R                  [        R                  " 5       [        R                  5        g r   )rM   r   get_original_stdoutsysstdoutrZ   s    r   test_get_original_stdout$TestSupport.test_get_original_stdout`   s    446

Cr   c                     SS K nU R                  S[        R                  5        [        R
                  " S5        U R                  S[        R                  5        g )Nr   sched)rl   assertInrg   modulesr   unloadassertNotIn)r   rl   s     r   test_unloadTestSupport.test_unloadd   s9    gs{{+W%#++.r   c                 $   [        [        SSS9 n S S S 5        [        R                  " [        5        U R	                  [
        R                  R                  [        5      5        [        R                  " [        5        g ! , (       d  f       Nu= f)NrO   utf-8encoding)openTESTFNr   unlinkassertFalseospathexists)r   fs     r   test_unlinkTestSupport.test_unlinkj   sX    &#0A 1 /0 	 10s   B
Bc                    [         R                  S-   n[        R                  R	                  US5      n[        R
                  " U5        [        R
                  " U5        [         R                  " U5        U R                  [        R                  R                  U5      5        [        R                  " [        SS5         [         R                  " U5        S S S 5        [        R
                  " U5        [        R
                  " U5        [        R                  " U[        R                  [        R                  -  5        [        R                  " [        SS5         [         R                  " U5        S S S 5        U R                  [        R                  R                  U5      5        [        R
                  " U5        [        R
                  " U5        [        R                  " US5        [        R                  " [        SS5         [         R                  " U5        S S S 5        U R                  [        R                  R                  U5      5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N`= f)Ndsubdirverboser   )r   rx   r{   r|   joinmkdirrmtreerz   r}   r   	swap_attrchmodstatS_IRUSRS_IXUSR)r   dirpath
subdirpaths      r   test_rmtreeTestSupport.test_rmtreeq   s   ""S(WW\\'84


!01w	15W% 6 	

$,,t||34w	15W% 601


!w	15W% 601 65 65 65s$    II)	I:
I&)
I7:
Jc                    [         S-   n[        USSS9 n[        SUS9  S S S 5        [        R                  R                  S[        R                  5        [        R                  " 5          [        [         5      nU R                  [         [        R                  5        [        R                  " [         5        U R                  [         [        R                  5        [        R                  S	 [         R"                  " U5        [         R$                  " S5        g ! , (       d  f       GN= f! [        R                  S	 [         R"                  " U5        [         R$                  " S5        f = f)	Nz.pyrO   rt   ru   zfoo = 1filer   __pycache__)rx   rw   printrg   r|   insertr{   curdir	importlibinvalidate_caches
__import__rm   rn   r   forgetrp   r   ry   r   )r   mod_filenamer~   mods       r   test_forgetTestSupport.test_forget   s    ~,g6!)!$ 7299%##%		,V$CMM&#++.  (VS[[1\*]+ 76 \*]+s   D,A1D- 
D*-?E,c                 p    [         R                  " [        R                  S45      nUR	                  5         g )Nr   )socketcreate_serverr   HOSTcloser   ss     r   	test_HOSTTestSupport.test_HOST   s&      -"4"4a!89		r   c                     [         R                  " 5       n[        R                  " [         R                  U45      nUR                  5         g r   )r   find_unused_portr   r   r   r   )r   portr   s      r   test_find_unused_port!TestSupport.test_find_unused_port   s4    --/  -"4"4d!;<		r   c                     [         R                   " 5       n[        R                  " U5        UR                  5         UR	                  5         g r   )r   r   	bind_portlistenr   r   s     r   test_bind_portTestSupport.test_bind_port   s-    MMO"	
		r   c                    [         R                  " 5       n[        R                  R	                  U5      n [        R                  R                  US5      nU R                  [        R                  R                  U5      5        [        R                  " U5       nU R                  X25        U R                  [        R                  R                  U5      5        SSS5        U R                  [        R                  R                  U5      5        [        R                  " U5        g! , (       d  f       NS= f! [        R                  " U5        f = f)z8Test that temp_dir() creates and destroys its directory.tempN)tempfilemkdtempr{   r|   realpathr   rz   isdirr   temp_dirrM   
assertTruer   )r   
parent_dirr|   	temp_paths       r   test_temp_dirTestSupport.test_temp_dir   s    %%'
WW%%j1
	)77<<
F3DRWW]]401##D)Y  1d 34 * RWW]]401Z( *)
 Z(s%   A$D8 A D'6D8 '
D51D8 8Ec                    [         R                  " 5        nU R                  [        R                  R                  U5      5        SSS5        U R                  [        R                  R                  W5      5        g! , (       d  f       N== f)zTest passing no path.N)r   r   r   r{   r|   r   rz   )r   r   s     r   test_temp_dir__path_none$TestSupport.test_temp_dir__path_none   sR    !YOOBGGMM)45 "y12 "!s   /A<<
B
c                    S n[         R                  " 5       n[        R                  R	                  U5      n U R                  [        R                  R                  U5      5        U R                  [        X5        U R                  [        R                  R                  U5      5        [        R                  " U5        g! [        R                  " U5        f = f)z-Test passing a directory that already exists.c                 h    [         R                  " U 5       n[        S5      e! , (       d  f       g = fNzshould not get here)r   r   	Exception)r|   r   s     r   call_temp_dirMTestSupport.test_temp_dir__existing_dir__quiet_default.<locals>.call_temp_dir   s'    ##D)Y 566 *)   #
1N)r   r   r{   r|   r   r   r   rW   FileExistsErrorshutilr   )r   r   r|   s      r   *test_temp_dir__existing_dir__quiet_default6TestSupport.test_temp_dir__existing_dir__quiet_default   s    	7 !ww%	 OOBGGMM$/0o}COOBGGMM$/0MM$FMM$s   A2C Cc                    [         R                  " 5       n[        R                  R	                  U5      n [
        R                  " 5        n[        5        n[        R                  " USS9 nU R                  X5        SSS5        UR                   Vs/ s H  n[        UR                  5      PM     nnSSS5        SSS5        U R                  [        R                  R                  U5      5        [         R"                  " U5        U R%                  W/ 5        U R                  ['        WR(                  5      S5        UR(                  S   nU R+                  UR-                  5       SU< S35        g! , (       d  f       N= fs  snf ! , (       d  f       N= f! , (       d  f       N= f! [         R"                  " U5        f = f)z=Test passing a directory that already exists with quiet=True.TquietN   r   z5tests may fail, unable to create temporary directory : )r   r   r{   r|   r   r   check_warningsr0   r   r   rM   r8   rK   rL   r   r   r   r   assertListEqualr7   r   assertStartsWith
getMessage)r   r|   recordercaplogr   rO   r8   r   s           r   'test_temp_dir__existing_dir__quiet_true3TestSupport.test_temp_dir__existing_dir__quiet_true   sD   !ww%	  //1XwyF''D9Y$$T5 :4<4E4EF4EqC		N4EF @I1
 OOBGGMM$/0MM$Xr*V^^,a0"##'(".	
 :9F @Iy11 MM$s_   F- FF,E5>FF3F5F=6F- 5
F?F
F	F
F*&F- -Gc                 Z    [         R                  " S[        R                  " S5      5        g)z?Test that a forked child process does not remove the directory.-ca  
            import os
            from test import support
            from test.support import os_helper
            with os_helper.temp_cwd() as temp_path:
                pid = os.fork()
                if pid != 0:
                    # parent process

                    # wait for the child to terminate
                    support.wait_process(pid, exitcode=0)

                    # Make sure that temp_path is still present. When the child
                    # process leaves the 'temp_cwd'-context, the __exit__()-
                    # method of the context must not remove the temporary
                    # directory.
                    if not os.path.isdir(temp_path):
                        raise AssertionError("Child removed temp_path.")
        N)r   assert_python_oktextwrapdedentrZ   s    r   test_temp_dir__forked_child'TestSupport.test_temp_dir__forked_child   s$    
 	&&tX__ > . 	r   c                    [         R                  " 5       n[        R                  " 5        n[        R                  " U5       nU R                  X25        U R                  [         R                  " 5       U5        S S S 5        S S S 5        U R                  [         R                  " 5       U5        g ! , (       d  f       N<= f! , (       d  f       NE= fr   )r{   getcwdr   r   
change_cwdrM   )r   original_cwdr   new_cwds       r   test_change_cwdTestSupport.test_change_cwd  s    yy{!Y%%i0G  4  g6 1 "
 	l3	 10 "!s#   C 7B/9C /
B=	9C  
Cc                 J   [         R                  " 5       nS n[        R                  " 5        n[         R                  R                  US5      nU R                  [        UU5        SSS5        U R                  [         R                  " 5       U5        g! , (       d  f       N4= f)z&Test passing a non-existent directory.c                 h    [         R                  " U 5       n[        S5      e! , (       d  f       g = fr   )r   r   r   )r|   r   s     r   call_change_cwdFTestSupport.test_change_cwd__non_existent_dir.<locals>.call_change_cwd  s'    %%d+w 566 ,+r   does_not_existN)	r{   r   r   r   r|   r   rW   FileNotFoundErrorrM   )r   r   r   r   non_existent_dirs        r   !test_change_cwd__non_existent_dir-TestSupport.test_change_cwd__non_existent_dir  st    yy{	7 !Z!ww||J8HI/.0 "
 	l3 "!s   8B
B"c           	      z   [         R                  " 5       n[        R                  " 5        n[         R                  R                  US5      n[        R                  " 5        n[        5        n[        R                  " USS9 nU R                  Xa5        U R                  [         R                  " 5       U5        SSS5        UR                   Vs/ s H  n[        UR                  5      PM     nnSSS5        SSS5        SSS5        U R                  W/ 5        U R                  [        WR                   5      S5        UR                   S   n	U R#                  U	R%                  5       SW< S35        g! , (       d  f       N= fs  snf ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)	z6Test passing a non-existent directory with quiet=True.r   Tr   Nr   r   Btests may fail, unable to change the current working directory to r   )r{   r   r   r   r|   r   r   r   r0   r   rM   r8   rK   rL   r   r7   r   r   r   )
r   r   r   bad_dirr   r   r   rO   r8   r   s
             r   -test_change_cwd__non_existent_dir__quiet_true9TestSupport.test_change_cwd__non_existent_dir__quiet_true  s@   yy{!Zggll:/?@G //1XwyF))'>'$$W;$$RYY[': ? 5=4E4EF4EqC		N4EF	 @I1 " 	Xr*V^^,a0"B 	
 ?> G	 @Iy11 "!s_   6F,!F,F
7E4	9F
F
.F
0F8F,4
F>F


FF
F)	%F,,
F:c                 Z   [         S-   n[        R                  " 5        n[        5        n[        R
                  " USS9    SSS5        UR                   Vs/ s H  n[        UR                  5      PM     nnSSS5        SSS5        U R                  W/ 5        U R                  [        WR                  5      S5        UR                  S   nU R                  UR                  5       SU< S35        g! , (       d  f       N= fs  snf ! , (       d  f       N= f! , (       d  f       N= f)	z0Check the warning message when os.chdir() fails._does_not_existT)r|   r   Nr   r   r   r   )rx   r   r   r0   r   r   r8   rK   rL   r   rM   r7   r   r   r   )r   r|   r   r   rO   rP   r   s          r   test_change_cwd__chdir_warning*TestSupport.test_change_cwd__chdir_warning7  s    ))++-79%%4t< =080A0AB0A1AII0AHB <E-
 	Xr*V^^,a0"	
 =<B <E9--sF   DD C5DD7D9D5
D?D
D	D
D*c                    [         R                  " 5       n[        R                  " [        S9   U R                  [         R                  R                  [         R                  " 5       5      [        5        S S S 5        U R                  [         R                  R                  [        5      5        U R                  [         R                  " 5       U5        g ! , (       d  f       Nf= f)Nname)
r{   r   r   temp_cwdrx   rM   r|   basenamerz   r}   )r   heres     r   test_temp_cwdTestSupport.test_temp_cwdK  s    yy{V,RWW--biik:FC -/0d+ -,s   AC
C#c                    [         R                  " 5       n[        R                  " SS9 nU R	                  X!5        U R                  [         R                  R                  U5      5        U R                  [         R                  " 5       U5        SSS5        U R                  [         R                  " 5       U5        g! , (       d  f       N4= f)z Test passing None to temp_cwd().Nr   )	r{   r   r   r   assertNotEqualr   r|   r   rM   )r   r   r   s      r   test_temp_cwd__name_none$TestSupport.test_temp_cwd__name_noneS  s    yy{T*g6OOBGGMM'23RYY['2 + 	l3	 +*s   A%B==
Cc                 X    U R                  [        R                  " SSSS.5      S5        g )N   r6   r   )r  r6   r   z{1: 1, 2: 2, 3: 3})rM   r   sortdictrZ   s    r   test_sortdictTestSupport.test_sortdict\  s$    ))Q!q/:<PQr   c                 "   [         R                  " 5       nU R                  [        5       n[        R
                  " US5        S S S 5        U R                  WR                  R                  [        R                  5        g ! , (       d  f       NC= f)Ns   foo)
r   make_bad_fdrW   OSErrorr{   writerM   	exceptionerrnoEBADF)r   fdcms      r   test_make_bad_fdTestSupport.test_make_bad_fd_  sZ    ""$w'2HHR  (++U[[9 ('s   B  
Bc                     [         R                  " U SSSS9  U R                  [        5         [         R                  " U S5        S S S 5        g ! , (       d  f       g = f)Nz	def classr      )linenooffsetzx=1)r   check_syntax_errorrW   AssertionErrorrZ   s    r   test_check_syntax_error#TestSupport.test_check_syntax_errore  s@    ""4QqI~.&&tU3 /..s   A
Ac                     SS K n[        R                  " S5         UR                  " S5        S S S 5        g ! , (       d  f       g = f)Nr   pprint)r   r   CleanImportrV   )r   r   s     r   test_CleanImportTestSupport.test_CleanImportj  s-    &&x0##H- 100s	   7
Ac                 f   [         R                  " SS5         U R                  S[        R                  5        U R                  S[        R                  5        S S S 5        U R                  S[        R                  5        U R                  S[        R                  5        g ! , (       d  f       NO= f)NrU   bar)r   DirsOnSysPathrm   rg   r|   rp   rZ   s    r   test_DirsOnSysPathTestSupport.test_DirsOnSysPatho  sn    ((6MM%*MM%* 7 	))	 76s   AB""
B0c                     [         R                  " 5        n[        S5        S S S 5        U R                  WR	                  5       S5        g ! , (       d  f       N/= f)Nhellohello
)r   captured_stdoutr   rM   getvalue)r   rh   s     r   test_captured_stdout TestSupport.test_captured_stdoutv  s<    $$&&'N '*I6 '&s   A
Ac                     [         R                  " 5        n[        S[        R                  S9  S S S 5        U R                  WR                  5       S5        g ! , (       d  f       N/= f)Nr)  r   r*  )r   captured_stderrr   rg   stderrrM   r,  )r   r1  s     r   test_captured_stderr TestSupport.test_captured_stderr{  sC    $$&&'

+ '*I6 '&s   A
A&c                     [         R                  " 5        nUR                  S5        UR                  S5        [	        5       nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Nr*  r   r)  )r   captured_stdinr  seekinputrM   )r   stdincaptureds      r   test_captured_stdinTestSupport.test_captured_stdin  sN    ##%KK	"JJqMwH	 &
 	7+ &%s   -A
A,c                 .    [         R                  " 5         g r   )r   
gc_collectrZ   s    r   test_gc_collectTestSupport.test_gc_collect  s    r   c                 V    U R                  [        R                  " 5       [        5        g r   )assertIsInstancer   python_is_optimizedboolrZ   s    r   test_python_is_optimized$TestSupport.test_python_is_optimized  s    g99;TBr   c                     " S S5      nU" 5       nSUl         [        R                  " USS5       nU R                  UR                   S5        U R                  US5        S S S 5        U R                  UR                   S5        [        R                  " USS5       nU R                  UR                  S5        U R                  U5        S S S 5        U R                  [        US5      5        [        R                  " USS5         U?S S S 5        U R                  [        US5      5        g ! , (       d  f       N= f! , (       d  f       Ny= f! , (       d  f       NL= f)Nc                       \ rS rSrSrg)'TestSupport.test_swap_attr.<locals>.Obji  r   N)r#   r$   r%   r&   r'   r   r   r   ObjrH    s    r   rI  r   xr  y)rJ  r   r   rM   rK  assertIsNonerz   hasattr)r   rI  objrJ  rK  s        r   test_swap_attrTestSupport.test_swap_attr  s   	 	esC+qSUUA&Q" , 	"sC+qSUUA&a  , 	c*+sC+ ,c*+ ,+ ,+ ,+s#   /D,.D=E,
D:=
E
Ec                 J   SS0n[         R                  " USS5       nU R                  US   S5        U R                  US5        S S S 5        U R                  US   S5        [         R                  " USS5       nU R                  US   S5        U R                  U5        S S S 5        U R	                  SU5        [         R                  " USS5         US	 S S S 5        U R	                  SU5        g ! , (       d  f       N= f! , (       d  f       Nh= f! , (       d  f       NC= f)NrJ  r   r  rK  )r   	swap_itemrM   rL  rp   )r   DrJ  rK  s       r   test_swap_itemTestSupport.test_swap_item  s    Gq#q)QQsVQ'Q" * 	3#q#q)QQsVQ'a  * 	a q#q)# *a  *) *) *)s#   (C2:'DD2
D 
D
D"c                   $    \ rS rSrSrSrSrSrSrg)TestSupport.RefClassi  Nr   )	r#   r$   r%   r&   
attribute1
attribute2_hidden_attribute1__magic_1__r'   r   r   r   RefClassrW    s    

!r   r\  c                   $    \ rS rSrSrSrSrSrSrg)TestSupport.OtherClassi  Nr   )	r#   r$   r%   r&   rY  
attribute3r[  __magic_2__r'   r   r   r   
OtherClassr^    s    

r   ra  c                     [         R                  " U R                  U R                  5      nU R	                  S1U5        [         R                  " U R                  U R                  5      nU R	                  SS1U5        g )NrX  r_  r`  )r   detect_api_mismatchr\  ra  rM   )r   missing_itemss     r   test_detect_api_mismatch$TestSupport.test_detect_api_mismatch  se    33DMM48OOE,733DOO48MMC,6Fr   c                    / SQn[         R                  " U R                  U R                  US9nU R	                  [        5       U5        [         R                  " U R                  U R                  US9nU R	                  [        5       U5        g )N)rX  r_  r`  not_in_either)ignore)r   rc  r\  ra  rM   set)r   ri  rd  s      r    test_detect_api_mismatch__ignore,TestSupport.test_detect_api_mismatch__ignore  si    M33tv?.33v?.r   c                     S1nS1n[         R                  " U [        UUS9  SS1n1 Skn[         R                  " U [        SUUS9  U R	                  [
        [         R                  U [        5        g )Ntempdirtemplate)extranot_exportedTextTestResultinstallHandler>   
load_testsTestProgramBaseTestSuite)zunittest.resultzunittest.casezunittest.suitezunittest.loaderzunittest.mainzunittest.runnerzunittest.signalszunittest.async_case)r   check__all__r   rX   rW   r  )r   rp  rq  s      r   test_check__all__TestSupport.test_check__all__  s}    "|T%#(*6	8 
 FT%I $)*6	8 	.'*>*>hOr   waitpidWNOHANGz need os.waitpid() and os.WNOHANGc                    [         R                  " 5         [        R                  " 5       nUS:X  a  [        R                  " S5        [         R
                  n S[         l        [        R                  " 5       n[         R                  " [         R                  5       H^  n[         R                  " [         R                  SU5         [         R                  " 5         S S S 5        [         R
                  (       d  M^    O   SU-  nU R                  XSR                  5       5        U R                  [         R
                  5        U[         l        [         R                  " 5         g ! , (       d  f       N= f! U[         l        f = f)Nr   Forig_stderrz2Warning -- reap_children() reaped child process %s)r   reap_childrenr{   fork_exitenvironment_alteredr   r   sleeping_retrySHORT_TIMEOUTr   print_warningrm   r,  r   )r   pidwas_alteredr1  _msgs         r   test_reap_childrenTestSupport.test_reap_children  s   
 	 ggi!8HHQK11	6*/G'[[]F++G,A,AB&&w'<'<mVT))+ U
 ... C GLCMM#01OOG778*5G' 	! UT +6G's,   A-E3 E"E3 :AE3 "
E0	,E3 3F Nc                    SU SU S3n[         R                  /UQSPUPn[        R                  R	                  5        VVs0 s H  u  pgUR                  S5      (       a  M  Xg_M!     nnn[        R                  " U[        R                  [        R                  SUS9n	Uc  UnU R                  U	R                  R                  5       [        U5      5        U R                  U	R                  S5        g s  snnf )	Nzfrom test.support import z; print(repr(z()))r   PYTHONT)rh   r1  universal_newlinesenvr   )rg   
executabler{   environitems
startswith
subprocessrunPIPEDEVNULLrM   rh   rstriprepr
returncode)
r   argsfuncexpectedcodecmdkeyvaluer  procs
             r   check_optionsTestSupport.check_options
  s    *4&dV4H~~11d1D1,.JJ,<,<,> 0,>jcnnX. sz,> 0~~c%/__%/%7%715"%	'
 H++-tH~>!,0s   C4"C4cpuc                    / S/S/S/S/S/S/S/S/S	/S
/S/S/SS// SQSS/SS/SS/SS/SS/4 H-  nU R                  US9   U R                  US5        S S S 5        M/     U R                  / SQSS	/5        g ! , (       d  f       MW  = f)Nz-B-sz-S-Ez-vz-b-Pz-q-Iz-bbz-vvv-Wignore-Xdev)r  r  r  faulthandler
importtimeshowrefcounttracemallocztracemalloc=3optsargs_from_interpreter_flags)r  r  r  r  subTestr  r   r  s     r    test_args_from_interpreter_flags,TestSupport.test_args_from_interpreter_flags  s    
 FFFFFFFFFGHL5M%>"< >"=!?#3
D6 4(""4)FG )(7
< 	38 6	# )(s   A99
B	c                     / S/S/S/4 H-  nU R                  US9   U R                  US5        S S S 5        M/     g ! , (       d  f       MA  = f)Nz-Oz-OOz-OOOOr  !optim_args_from_interpreter_flagsr  r  s     r   &test_optim_args_from_interpreter_flags2TestSupport.test_optim_args_from_interpreter_flags?  sT     FGI
D 4(""4)LM )(
 )(s	   <
A	zUnstable on Apple MobilezUnstable in EmscriptenzUnavailable on WASIc                 6   [         R                  " 5       n[        R                  " [        [        R
                  5      n [         R                  " 5       n[        R                  " U5        U R                  X1-
  S5        g ! [        R                  " U5        f = fNr   )r   fd_countr{   rw   __file__O_RDONLYr   rM   )r   startr  mores       r   test_fd_countTestSupport.test_fd_countK  se     ""$WWXr{{+	%%'DHHRLq) HHRLs    B   Bc                    [         R                  " 5       n[        R                  " [        R                  SU5         [        R                  " U5        S S S 5        U R                  UR                  5       U5        g ! , (       d  f       N/= f)Nr}  )r   r   r   r   r  rM   r,  )r   r  r  r1  s       r   check_print_warningTestSupport.check_print_warning\  sZ    w44mVL!!#& M*H5 MLs   A<<
B
c                 L    U R                  SS5        U R                  SS5        g )Nr  zWarning -- msg
za
bzWarning -- a
Warning -- b
)r  rZ   s    r   test_print_warningTestSupport.test_print_warningb  s)      !3	5  !?	Ar   c                     [         R                  (       d  [        R                  S:X  a   U R	                  [         R
                  5        g U R                  [         R
                  5        g )Nwin32)r   is_emscriptenrg   platformrz   has_strftime_extensionsr   rZ   s    r   test_has_strftime_extensions(TestSupport.test_has_strftime_extensionsh  s<      CLLG$;W<<=OOG;;<r   c                 ^    [         R                  " S5      n[        R                  " SU5        g )Nap  
            from test import support
            import sys

            def check(cond):
                if not cond:
                    raise AssertionError("test failed")

            # depth 1
            check(support.get_recursion_depth() == 1)

            # depth 2
            def test_func():
                check(support.get_recursion_depth() == 2)
            test_func()

            def test_recursive(depth, limit):
                if depth >= limit:
                    # cannot call get_recursion_depth() at this depth,
                    # it can raise RecursionError
                    return
                get_depth = support.get_recursion_depth()
                print(f"test_recursive: {depth}/{limit}: "
                      f"get_recursion_depth() says {get_depth}")
                check(get_depth == depth)
                test_recursive(depth + 1, limit)

            # depth up to 25
            with support.infinite_recursion(max_depth=25):
                limit = sys.getrecursionlimit()
                print(f"test with sys.getrecursionlimit()={limit}")
                test_recursive(2, limit)

            # depth up to 500
            with support.infinite_recursion(max_depth=500):
                limit = sys.getrecursionlimit()
                print(f"test with sys.getrecursionlimit()={limit}")
                test_recursive(2, limit)
        r   )r   r   r   r   )r   r  s     r   test_get_recursion_depth$TestSupport.test_get_recursion_depthn  s(     &  &N 	&&tT2r   c                   ^ U4S jmS H\  n[         R                  " U5         [         R                  " 5       nT" U5         T" US-   5        U R                  S5        S S S 5        M^     [         R                  " S5          T" S5        U R                  S5        S S S 5        g ! [         a     NRf = f! , (       d  f       M  = f! [         a     N7f = f! , (       d  f       g = f)Nc                 ,   > U (       a  T" U S-
  5        g g r  r   )depthrecursive_functions    r   r  6TestSupport.test_recursion.<locals>.recursive_function  s    "519- r   )r        i	  r   zRecursionError was not raisedr  )r   infinite_recursionget_recursion_availablefailRecursionError)r   	max_depth	availabler  s      @r   test_recursionTestSupport.test_recursion  s    	. ,I++I6#;;=	 #9-
?&y1}5 II=> 76 ,$ ''*;"1% 		9: +* &  76( "  +*s_   B4B$B4 CC
C$
B1.B40B11B44
C	
CCCC
C$c                 @   [         R                  nSnUS-  nUS-  nUS-  nU R                  U" S5      S5        U R                  U" S5      SU-  5        U R                  U" S5      [        SU-  5      5        U R                  U" S5      [        S	U-  5      5        U R                  U" S
5      U5        S HA  nU R	                  US9   U R                  [        5         U" U5        S S S 5        S S S 5        MC     g ! , (       d  f       N= f! , (       d  f       Mf  = f)Ni   0kr   3kr  z2.4mg333333@4g   1t) 3z3.5.10k10x)limit)r   _parse_memlimitrM   intr  rW   
ValueError)r   parseKiBMiBGiBTiBr  s          r   test_parse_memlimitTestSupport.test_parse_memlimit  s    ''DjDjDjta(ta#g.vC#I7tc!c'l3tc*0EE*&&z2%L 3 +* 122 +*s$   	D	C=(D=
DD
D	c                 0   SnSn[         R                  n[         R                  n [        R                  S:  a  [         R
                  " S5        U R                  [         R                  U5        U R                  [         R                  U5        SS-  U-  n[         R
                  " U S35        U R                  [         R                  [        R                  5        U R                  [         R                  XR-  5        Od[         R
                  " S5        U R                  [         R                  [        R                  5        U R                  [         R                  U5        U[         l        U[         l        g ! U[         l        U[         l        f = f)Nl        l        r  r6   d   t)r   
max_memusereal_max_memuserg   maxsizeset_memlimitrM   )r   _4GiBr  old_max_memuseold_real_max_memusebigs         r   test_set_memlimitTestSupport.test_set_memlimit  s#    ++%55	:{{U"$$T*  !3!3U;  !8!8%@fm$$uAY/  !3!3S[[A  !8!8#)D$$T*  !3!3S[[A  !8!8%@!/G&9G# "0G&9G#s   E E= =Fc                    [         R                  " S5      nU(       d  [         R                  " S5      n[        R                  R	                  U5      n[        R                  R                  U5      (       d  U R                  SU< 35        [        R                  R                  US5      n[        R                  R                  U5      (       d  U R                  SU< S35        SS1n[        R                  " U5      nU R                  [        R                  " X5      US1-  5        [        R                  R                  US	5      nU R                  [        R                  " U[        R                  " U5      5      USS
1-  5        [        R                  R                  US5      nU R                  [        R                  " U[        R                  " U5      5      U5        g )N
abs_srcdirsrcdirz,cannot access Python source code directory: Modulesz landmark is missingz.gitr   buildDocvenvObjects)	sysconfigget_config_varr{   r|   abspathr}   skipTestr   listdirrM   r   copy_python_src_ignore)r   src_dirlandmarkignorednamesr|   s         r   test_copy_python_src_ignore'TestSupport.test_copy_python_src_ignore  sv   **<8..x8G''//'* ww~~g&&MM %[* + 77<<3ww~~h''MM &\)=? @ =)

7#77G G9,	. ww||GU+77bjj>NO GV#44	6 ww||GY/77bjj>NO 	"r   c                 Z    [         R                  " 5       nU R                  U[        5        g r   )r   linked_to_muslrA  rC  )r   linkeds     r   test_linked_to_muslTestSupport.test_linked_to_musl  s     '')fd+r   r   r   )Lr#   r$   r%   r&   classmethodr@   rD   rQ   r[   r_   rb   rX   skipri   rq   r   r   r   r   requires_working_socketr   r   r   r   r   r   r   requires_forkr   r   r   r   r   r   r  r	  r  r  r!  r&  r-  r2  r:  r>  rD  rO  rT  r\  ra  re  rk  rx  
skipUnlessrM  r{   r  requires_subprocessr  requires_resourcer  r  skipIfis_apple_mobiler  is_wasir  r  r  r  r  r  r  r  r  r  r'   r   r   r   r2   r2   6   s   < < < <5>
4Q
 ]]&'D (D/!20," $$& ' $$& '
 $$& ')3  
0  444
0
(,4R:4
.
*7
7
,C,"!  G	/P0 Y/JGB	4J;=   =  D   "- #- u%"# &"#H
N __W,,.HI__W**,DE__W__&;<* = F J*6A=)3V;@!":.""H,r   r2   __main__)#
contextlibr  r   r   r*   r{   r   r   r   r  rg   r  r   r   rX   r8   testr   test.supportr   r   r   r   r   test.support.testcaser	   rx   StreamHandlerr   contextmanagerr0   TestCaser2   r#   mainr   r   r   <module>r2     s       	  	     
       & " & & ( 1			--  + +Q,(##_ Q,R zMMO r   