
    ;e                    T   d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dlZd dl	Z	d dl
Z
d dlZ
d dlZd dlZd dlZd dlZd dlZd dlZd dlZej        s ej        d          e
j        dk    Zej        dk    Z eed	          Zd Zd
ZdZdZd
ZdZ dZ!dZ"e
j#        $                    ej%        ej&        dej'        j(         dej'        j)                   Z*e
j#        +                    e
j#        $                    e*d                    sdZ*d Z,d Z- G d d          Z. G d de.ej/                  Z0 G d de.ej/                  Z1 G d dej/                  Z2 G d de.ej/                  Z3 G d de.ej/                  Z4 G d  d!e.ej/                  Z5e6d"k    r ej7                     dS dS )#    )support)import_helper)	os_helperN)
namedtupleztest module requires subprocessntdarwingettotalrefcount            l    python.os.pyc                     t           j                            |           } t           j                            |           d         }|                                                    d                                          S )Nr   _d)ospathbasenamesplitextcasefoldendswith)programnames     &/usr/lib/python3.11/test/test_embed.pydebug_buildr   0   sU    gw''G7G$$Q'D==??##DMMOO444    c                      t          t          j                  } t          |           D ]}|                    d          r| |= | S )NPYTHON)dictr   environlist
startswith)envkeys     r   remove_python_envvarsr&   6   sG    
rz

CCyy  >>(## 	CJr   c                   4    e Zd Zd Zd ZdddddddZd ZdS )EmbeddingTestsMixinc                    d}t           j                            t          j                  }t
          r(t          t          j                  rdnddz   }||z  }|}n t           j                            |d          }t           j                            ||          x| _        }t           j        	                    |          s| 
                    d|z             t          j                    | _        t          j        |           d S )N
_testembedr    .exeProgramsz%r doesn't exist)r   r   dirnamesys
executable
MS_WINDOWSr   jointest_exeexistsskipTestgetcwdoldcwdchdir)selfexenamebuilddirextexepathexes         r   setUpzEmbeddingTestsMixin.setUp@   s    7??3>22 	9&s~66>44B&HCsNGGGgll8Z88G gll7G<<<w~~c"" 	4MM,s2333 ikk
r   c                 8    t          j        | j                   d S N)r   r8   r7   r9   s    r   tearDownzEmbeddingTestsMixin.tearDownR   s    
r   Nr   )r$   timeout
returncodeinputcwdc                   	 | j         g}|                    |           |0t          r)|                                }t          j        d         |d<   t          j        |t          j        t          j        d||          }	 |	                    ||          \  }	}
n.#  |
                                 |                                  xY w|j        |k    rRt          j        rFt          d| d           t          d|	            t          d|
            t          d	           |                     |j        |d
|j        |
fz             |	|
fS )N
SYSTEMROOTT)stdoutstderruniversal_newlinesr$   rG   )rF   rD   z--- z failed ---zstdout:
zstderr:
z------zbad returncode %d, stderr is %r)r3   extendr1   copyr   r!   
subprocessPopenPIPEcommunicate	terminatewaitrE   r   verboseprintassertEqual)r9   r$   rD   rE   rF   rG   argscmdpouterrs              r   run_embedded_interpreterz,EmbeddingTestsMixin.run_embedded_interpreterU   sb    	6}o

4?z? ((**C "
< 8CS$.O$.O04!$!$& & &	UGDDJS##	KKMMMFFHHH<:%%'/%))))***#c##$$$#c##$$$)z:,,-	. 	. 	. Cxs    B +Cc              #     K   |                      d          \  }}|                     |d           d}t          dd          }d}g }|                                D ]}|d                    |          k    rH|                     t          |          d           t          j        dk    rt          |           |dz  }d| 	                    t          |          d	           t          j        ||          }||                     ||            ||                                 }	t          j        dk    rt          |	           |                     |	j                   |                     |	j                   |                     |	j                   |                    |	           t          |          d	k    r$|d         }
|                     |	|
           |V  g }d S )
N&test_repeated_init_and_subinterpretersr+   zS^interp (\d+) <(0x[\dA-F]+)>, thread state <(0x[\dA-F]+)>: id\(modules\) = ([\d]+)$Interpzid interp tstate modulesr   z--- Pass {} ---r      )r]   rW   r   
splitlinesformatlenr   rU   rV   
assertLessrematchassertRegexgroups
assertTrueinterptstatemodulesappend)r9   r[   r\   
interp_patr`   numloopscurrent_runlinerg   rk   mains              r   %run_repeated_init_and_subinterpretersz9EmbeddingTestsMixin.run_repeated_init_and_subinterpretersx   s     001YZZSb!!!2
 H&@AANN$$ 	! 	!D(//9999  [!1!11555?Q&&$KKKAOOC,,a000HZ..E}  z222 VU\\^^,F""fOOFM***OOFM***OOFN+++v&&& ;1$$"1~  ...!!!! 9	! 	!r   )__name__
__module____qualname__r?   rC   r]   rt    r   r   r(   r(   ?   sj          $   37)-!4%)! ! ! ! !F1! 1! 1! 1! 1!r   r(   c                   r    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )EmbeddingTestsi  c                 z    |                                  D ]%}|d         }|                     |j        d           &d S )Nr   0)rt   rW   id)r9   runrs   s      r   test_subinterps_mainz#EmbeddingTests.test_subinterps_main   sK    ==?? 	+ 	+Cq6DTWc****	+ 	+r   c           	          |                                  D ]_}|^}}}t          |j                  }t          |          D ]3\  }}|                     |j        t          ||z   dz                        4`d S )Nr   )rt   intr}   	enumeraterW   str)r9   r~   rs   subs_mainidisubs           r   test_subinterps_different_idsz,EmbeddingTests.test_subinterps_different_ids   s    ==?? 	> 	>C ND4\\F#D// > >3  VaZ!^)<)<====>		> 	>r   c                 :   |                                  D ]}|^}}}d|v rt          j        d          |D ]b}|                     |j        |j                   |                     |j        |j                   |                     |j        |j                   cd S )N0x0zplatform prints pointers as 0x0)rt   unittestSkipTestassertNotEqualrk   rl   rm   )r9   r~   rs   r   r   r   s         r   test_subinterps_distinct_statez-EmbeddingTests.test_subinterps_distinct_state   s    ==?? 	? 	?C ND4}}
 '(IJJJ ? ? ##CJ<<<##CJ<<<##CK>>>>?	? 	?r   c                    |                      d          \  }}|                     |d           d t          dt          dz             D             }d                    |          dz   }|                     ||           d S )Ntest_repeated_init_and_inittabr+   c                     g | ]}d | d	S )z	--- Pass z ---rx   ).0r   s     r   
<listcomp>zAEmbeddingTests.test_repeated_init_and_inittab.<locals>.<listcomp>   s$    EEE$Q$$$EEEr   r   
)r]   rW   range
INIT_LOOPSr2   )r9   r[   r\   liness       r   r   z-EmbeddingTests.test_repeated_init_and_inittab   s    001QRRSb!!!EEeAz!|.D.DEEE		%  4'e$$$$$r   c                    t          t          j        d          }|                     d|          \  }}t          j        dk    r,t                       t          |           t          |           d}d}d                    g d	          }|                    |||
          }d | _	        | 
                    |                                |           d S )Nzutf-8:surrogateescape)PYTHONIOENCODINGtest_forced_io_encodingr$   r   utf-8surrogateescaper   )z--- Use defaults ---Expected encoding: defaultExpected errors: defaultzstdin: {in_encoding}:{errors}zstdout: {out_encoding}:{errors}'stderr: {out_encoding}:backslashreplacez--- Set errors only ---r   zExpected errors: ignorezstdin: {in_encoding}:ignorezstdout: {out_encoding}:ignorer   z--- Set encoding only ---Expected encoding: iso8859-1r   zstdin: iso8859-1:{errors}zstdout: iso8859-1:{errors}"stderr: iso8859-1:backslashreplacez--- Set encoding and errors ---r   zExpected errors: replacezstdin: iso8859-1:replacezstdout: iso8859-1:replacer   )in_encodingout_encodingerrors)r    r   r!   r]   r   rU   rV   r2   rc   maxDiffrW   strip)r9   r$   r[   r\   expected_stream_encodingexpected_errorsexpected_outputs          r   r   z&EmbeddingTests.test_forced_io_encoding   s    2:0GHHH001JPS0TTS?QGGG#JJJ#JJJ#* +)) %. %. %. / /2 *00,D-E'6 1 8 8
 o66666r   c                    	 t          t          j        t          j                            t
          j                            }|                     d|          \  }}t          r| j	        }n1t          j                            t          j
                    d          }d| d}|                     ||           |                     |d           d S )N)
PYTHONPATHtest_pre_initialization_apir   spamzsys.executable: r   r+   )r    r   r!   pathsepr2   r/   r   r]   r1   r3   r6   assertInrW   )r9   r$   r[   r\   expected_pathr   s         r   r   z*EmbeddingTests.test_pre_initialization_api  s    	 2:"*//#(*C*CDDD001NTW0XXS 	> MMMGLLf==M>]>>>os+++b!!!!!r   c                    	 t                      }t          j                            t          j                  |d<   |                     d|          \  }}d}|                     ||           |                     |d           d S )Nr   #test_pre_initialization_sys_optionsr   zsys.warnoptions: ['once', 'module', 'default']
sys._xoptions: {'not_an_option': '1', 'also_not_an_option': '2'}
warnings.filters[:3]: ['default', 'module', 'once']
r+   )	r&   r   r   r2   r/   r   r]   r   rW   )r9   r$   r[   r\   r   s        r   r   z2EmbeddingTests.test_pre_initialization_sys_options  s    	 $%%JOOCH55L00=3 1 H HSD 	
 	os+++b!!!!!r   c                     	 |                      d          \  }}|                     |d           |                     |d           d S )Ntest_bpo20891r+   r]   rW   r9   r[   r\   s      r   r   zEmbeddingTests.test_bpo20891%  sR    	 00AASb!!!b!!!!!r   c                     	 |                      d          \  }}|                     |d           |                     |d           d S )Ntest_initialize_twicer+   r   r   s      r   r   z$EmbeddingTests.test_initialize_twice.  sS    	 001HIISb!!!b!!!!!r   c                     	 |                      d          \  }}|                     |                                d           |                     |d           d S )Ntest_initialize_pymainz6Py_Main() after Py_Initialize: sys.argv=['-c', 'arg2']r+   r]   rW   rstripr   s      r   r   z%EmbeddingTests.test_initialize_pymain7  s\    	 001IJJS'_```b!!!!!r   c                     |                      d          \  }}|                     |                                d           |                     |d           d S )Ntest_run_mainz%Py_RunMain(): sys.argv=['-c', 'arg2']r+   r   r   s      r   r   zEmbeddingTests.test_run_main?  sT    00AAS'NOOOb!!!!!r   c                     d}|                      d          \  }}|                     |d|z             |                     |d           d S )Nra   test_run_main_loopz&Py_RunMain(): sys.argv=['-c', 'arg2']
r+   r   )r9   nloopr[   r\   s       r   r   z!EmbeddingTests.test_run_main_loopD  sY     001EFFSG%OPPPb!!!!!r   c                    t          j        d          }t          |d          5 }|                                }d d d            n# 1 swxY w Y   |                     d|          \  }}|                     |dt          z             d S )Nz_test_embed_structseq.pyr   encodingtest_repeated_init_execTests passed
)r   findfileopenreadr]   rW   r   )r9   scriptfpcoder[   r\   s         r   test_finalize_structseqz&EmbeddingTests.test_finalize_structseqL  s     !"<==&7+++ 	r7799D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	001JDQQS.;<<<<<s   AAAc                 r    |                      d          \  }}|                     |dt          z             d S )Ntest_repeated_simple_initz
Finalized
r]   rW   r   r   s      r   test_simple_initialization_apiz-EmbeddingTests.test_simple_initialization_apiX  s=     001LMMSmj899999r   c           	          ddl m} |d         }|d         }ddlm} t	          j        d| d| d| d	          }| j        } |d
|          \  }}|                     |dt          z             d S )Nr   )
_all_opmapRESUMERESUME_QUICK)QUICKENING_WARMUP_DELAYa              import importlib._bootstrap
            func = importlib._bootstrap._handle_fromlist
            code = func.__code__

            # Assert initially unquickened.
            # Use sets to account for byte order.
            if set(code._co_code_adaptive[:2]) != set([zJ, 0]):
                raise AssertionError()

            for i in range(z):
                func(importlib._bootstrap, ["x"], lambda *args: None)

            # Assert quickening worked
            if set(code._co_code_adaptive[:2]) != set([zY, 0]):
                raise AssertionError()

            print("Tests passed")
        r   r   )	disr   test.test_disr   textwrapdedentr]   rW   r   )	r9   r   resumeresume_quickr   r   r~   r[   r\   s	            r   :test_quickened_static_code_gets_unquickened_at_Py_FINALIZEzIEmbeddingTests.test_quickened_static_code_gets_unquickened_at_Py_FINALIZE^  s     	#"""""H%!.1999999   9?    4    9E       & +30$77S.;<<<<<r   c                 x    d}|                      d|          \  }}|                     |dt          z             d S )Nzprint('\N{digit nine}')r   z9
r   )r9   r   r[   r\   s       r   test_ucnhash_capi_resetz&EmbeddingTests.test_ucnhash_capi_reset  sB    )001JDQQSej011111r   N)ru   rv   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r   r   rz   rz      s       G+ + +> > >? ? ?*% % %)7 )7 )7V" " "" " """ " "" " "" " "" " "
" " "
= 
= 
=: : : =  =  =D2 2 2 2 2r   rz   c                   z   e Zd ZdZerdndZ e            Z e            Ze	e
ddddddZere                    ddi            eeedee          Z eeedddddd	          Zg d
Zi de	dddddddddddddddddddddddddddededdi dedddd gd!g d"g d#g d$dd%dd&ed'ed(ed)ed*ed+ed,ed-dd.ej        i d/ed0dd1dd2dd3dd4dd5dd6dd7dd8dd9dd:dd;dd<dd=ed>ed?dddddd@ddde dedAZere                    dBdi            eeeddCD          Z eeeddddddddddE          ZerdedB<   ddddFZdGgZg dHZer*e                    dI           e                    dJ           dZedK             ZdL Z dM Z!dN Z"	 ddOZ#dP Z$dQ Z%dR Z&	 	 	 	 ddddSddTdUZ'dV Z(dW Z)dX Z*dY Z+dZ Z,d[ Z-d\ Z.d] Z/d^ Z0d_ Z1d` Z2da Z3db Z4dc Z5dd Z6de Z7df Z8dg Z9dh Z:di Z; e<j=        dj          dk             Z>dl Z?dm Z@dn ZAdo ZBdp ZCdq ZDdr ZEds ZFddtZGeHjI        ddu            ZJdv ZKdw ZLdx ZM e<jN        edy          dz             ZO e<jP        ed{          d|             ZQd} ZR e<jP        ed~          d             ZSd ZTd ZUd ZVd ZWd ZXdS )InitConfigTestsi   surrogatepassr   r   r   )_config_init	allocator
parse_argvconfigure_localecoerce_c_localecoerce_c_locale_warn	utf8_modelegacy_windows_fs_encoding)r   r   r   r   )r   r   isolateduse_environmentr   dev_moder   )r   r   r   r   r   r   r   install_signal_handlersuse_hash_seed	hash_seedfaulthandlertracemallocimport_timecode_debug_rangesshow_ref_count	dump_refsmalloc_statsfilesystem_encodingfilesystem_errorspycache_prefixNprogram_namer   argvr+   	orig_argvxoptionswarnoptionspythonpath_envhomer0   base_executableprefixbase_prefixexec_prefixbase_exec_prefixmodule_search_pathsmodule_search_paths_set
platlibdir
stdlib_dirsite_importbytes_warningwarn_default_encodinginspectinteractiveoptimization_levelparser_debugwrite_bytecoderU   quietuser_site_directoryconfigure_c_stdiobuffered_stdiostdio_encodingstdio_errorsskip_source_first_linedefault)run_command
run_modulerun_filename_install_importlibcheck_hash_pycs_modepathconfig_warnings
_init_main_isolated_interpreteruse_frozen_modules	safe_path_is_python_buildlegacy_windows_stdior
   )r   r  r   )r   r   r   r  r&  r   r   r   r   r   r"  )Py_HasFileSystemDefaultEncodingPy_HashRandomizationFlag$_Py_HasFileSystemDefaultEncodeErrors)Py_UTF8Moder   ))Py_BytesWarningFlagr  )Py_DebugFlagr  )Py_DontWriteBytecodeFlagr  T) Py_FileSystemDefaultEncodeErrorsr   )Py_FileSystemDefaultEncodingr   )Py_FrozenFlagr"  T)Py_IgnoreEnvironmentFlagr   T)Py_InspectFlagr  )Py_InteractiveFlagr  )Py_IsolatedFlagr   )Py_NoSiteFlagr  T)Py_NoUserSiteDirectoryr  T)Py_OptimizeFlagr  )Py_QuietFlagr  )Py_UnbufferedStdioFlagr  T)Py_VerboseFlagrU   ))Py_LegacyWindowsFSEncodingFlagr   ))Py_LegacyWindowsStdioFlagr(  c                     d | _         d S rA   )EXPECTED_CONFIG)clss    r   tearDownClasszInitConfigTests.tearDownClass>  s     #r   c                 d    i }|D ]*}d|v r|                     dd          \  }}|||<   %d||<   +|S )N=r   T)split)r9   xoptions_listr   optr%   values         r   main_xoptionszInitConfigTests.main_xoptionsC  sQ      	% 	%Cczz YYsA..
U % $r   c                    t                      }t          j        d          }t          j        dd|g}t          j        ||t
          j        t
          j                  }|j        rt          d|j
        d|j                  |j
                            d          }	 t          j        |          S # t          j        $ r |                     d|           Y d S w xY w)	Na4  
            import json
            import sys
            import _testinternalcapi

            configs = _testinternalcapi.get_configs()

            data = json.dumps(configs)
            data = data.encode('utf-8')
            sys.stdout.buffer.write(data)
            sys.stdout.buffer.flush()
        z-S-c)r$   rJ   rK   z)failed to get the default config: stdout=z stderr=r   fail to decode stdout: )r&   r   r   r/   r0   rO   r~   rQ   rE   	ExceptionrJ   rK   decodejsonloadsJSONDecodeErrorfail)r9   r$   r   rX   procrJ   s         r   _get_expected_config_implz)InitConfigTests._get_expected_config_implM  s   #%%     dD1~d%/_%/_6 6 6 ? 	N M&*kM M=A[M M N N N##G,,	<:f%%%# 	< 	< 	<II:::;;;;;;	<s    B4 4'CCc                 4   t           }|j        |                                 |_        i }|j                                        D ]T\  }}i }|                                D ]3\  }}t	          |t
                    r|                                }|||<   4|||<   U|S rA   )r   r@  rT  items
isinstancer"   rN   )r9   rA  configs
config_keyconfig_valueconfigr%   rH  s           r   _get_expected_configz$InitConfigTests._get_expected_configl  s    &"&"@"@"B"BC (+(;(A(A(C(C 	) 	)$JF*0022 $ $
UeT** )!JJLLE#s"(GJr   c                    |                                  }|d         }|                                D ]\  }}	|	| j        u r||         ||<   |d         r|t          k    rdD ]}| j        ||<   |d         s
| j        |d<   |d         dk    rU|d         | j        u rd|d<   |d         | j        u r
| j        |d<   |d	         | j        u rd|d	<   |d
         | j        u rd|d
<   t          r| j        }
nf|d         | j        ur&t          j	        
                    |d                   }
n1t          j	                            t          j                    d          }
|d         | j        u r|
|d<   |d         | j        u r|
|d<   |d         | j        u rd|d<   |d         }|                                D ]\  }}	|	| j        u r||         ||<   |d         | j        urm|d         }|3|                    t          j	        j                  }g ||d         |d<   |.|d                                         |d<    ||d                    | j        D ]}||vr||         ||<   d S )N
pre_configr   )r   r   r  r  r   r   r   r   r   r  r  r   r   r*   r0   r  z./_testembedr[  r	  r  )r\  rV  GET_DEFAULT_CONFIG
API_COMPATIGNORE_CONFIGUTF8_MODE_ERRORSr1   r3   r   r   abspathr2   r6   rE  r   rN   COPY_PRE_CONFIG)r9   expected_preconfigexpectedr$   apimodify_path_cbrX  r^  r%   rH  default_executabler[  r  pathss                 r   get_expected_configz#InitConfigTests.get_expected_config|  s    ++--\*
,2244 	: 	:JC///*4S/"3'!"45 	3
9J9J: 3 3 $ 2!"45 	A /3.@{+k*a//-.$2III29./+,0GGG040E,-()T-DDD-4)*'4+BBB+<( 	I!%n%T-DDD!#.1I!J!J!#bikk<!H!HL!T%<<<%7H\"%&$*AAA*<H&'N#t'>>>'5H^$""..** 	, 	,JC/// &s)*$2DDD%&67N)&,,RW_==2\E2\HEZ<[2\./)2:;P2Q2V2V2X2X./x(=>???' 	8 	8C,,,*23-"3'	8 	8r   c                     t          |d                   }t          |                                          D ]'\  }}|| j        u r|                    |d            ||= (|                     ||           d S )Nr^  )r    r"   rV  ra  poprW   )r9   rX  rf  r^  r%   rH  s         r   check_pre_configz InitConfigTests.check_pre_config  s    ',/00
x~~//00 	" 	"JC***sD)))SMX.....r   c                    t          |d                   }t          r|                    dx}          }|rt          |t                    r|d t          |                                                    d                             }t          t          j
                  r<|d t          |                                                    d                             }|||<   t          |                                          D ]'\  }}|| j        u r|                    |d            ||= (|                     ||           d S )Nr[  r   r,   r   )r    r1   getrW  r   rd   lowerremovesuffixr   r/   r0   r"   rV  ra  rm  rW   )r9   rX  rf  r[  r%   rH  s         r   check_configzInitConfigTests.check_config  s.   gh'(( 	$JJn4s55E $E3// $Fs5;;==#=#=f#E#EFFFGs~.. J!"H3u{{}}'A'A$'G'G#H#H"HIE#sx~~//00 	" 	"JC***

3%%%SM*****r   c                    |d         }|d         }t          | j                  }| j        D ];}t          |          dk    r|\  }}}||         rdnd||<   +|\  }}||         ||<   <| j        D ];}t          |          dk    r|\  }}}||         rdnd||<   +|\  }}||         ||<   <|                     |d         |           d S )Nr^  r[  r   r   r   global_config)r    DEFAULT_GLOBAL_CONFIGCOPY_GLOBAL_CONFIGrd   COPY_GLOBAL_PRE_CONFIGrW   )	r9   rX  r^  r[  rf  item
global_keycore_keyopposites	            r   check_global_configz#InitConfigTests.check_global_config  s   \*
"233+ 	8 	8D4yyA~~15.
Hh,28,<'Cqq!$$'+$
H'-h'7$$/ 	< 	<D4yyA~~15.
Hh,6x,@'Gqqa$$'+$
H'1(';$$18<<<<<r   F)preconfig_apir$   ignore_stderrrG   c                4   t                      }||                    |           |}||}|t          k    r| j        }n|t          k    r| j        }n| j        }|i }t          |fi |}|i }|t          k    r| j        }n|t          k    r| j	        }n| j
        }t          |fi |}|                     |||||           |                     |||
          \  }}|
|d         sd}|*|	s(|                     |                                |           	 t          j        |          }n-# t          j        $ r |                     d|           Y nw xY w|                     ||           |                     ||           |                     |           |S )N)r$   rG   rU   r+   rL  )r&   updateAPI_ISOLATEDPRE_CONFIG_ISOLATED
API_PYTHONPRE_CONFIG_PYTHONPRE_CONFIG_COMPATr    CONFIG_PYTHONCONFIG_ISOLATEDCONFIG_COMPATrk  r]   rW   r   rO  rP  rQ  rR  rn  rs  r}  )r9   testnameexpected_configre  rh  rK   rg  r~  r$   r  rG   new_envdefault_preconfigdefault_configr[   r\   rX  s                    r   check_all_configsz!InitConfigTests.check_all_configs  s	   
 ())?NN3 ML(( $ 8j(( $ 6 $ 6%!#!"3JJ7IJJ" O*!/NNL  !1NN!/N~AAAA  !3!0!$!$n	6 	6 	6
 0058c 1 C CS>/)"<>FmSZZ\\6222	9jooGG# 	9 	9 	9II77788888	9 	g'9:::'?333  )))s   D* *'EEc                 >    |                      dt                     d S )Ntest_init_initialize_configrg  r  r`  rB   s    r   test_init_default_configz(InitConfigTests.test_init_default_config  s"    <*MMMMMr   c                 >    |                      dt                     d S )Ntest_preinit_compat_configr  r  rB   s    r   r  z*InitConfigTests.test_preinit_compat_config!  "    ;LLLLLr   c                 >    |                      dt                     d S )Ntest_init_compat_configr  r  rB   s    r   r  z'InitConfigTests.test_init_compat_config$  "    8jIIIIIr   c                 l    ddi}ddddgdddddddddd}|                      d||t          	           d S )
Nr   r   z./globalvarr   default::BytesWarningr
   )r   r  r  r  r  r  r  r  rU   r  r  r  r"  test_init_global_configr  r  r9   	preconfigr[  s      r   r  z'InitConfigTests.test_init_global_config'  sy    
	 *34"##$#$
 
  	8&)#- 	 	/ 	/ 	/ 	/ 	/r   c                 N   t           dd}i dddddddd	d
ddddddddddddddddddgdg ddd	dg ddg di d d!d"dd#dd$dd%dd&d	d'dd(dd)dd*dd+dd,dd-dd.d/d0| j        d1dd2d3ddd4}|                     d5||t          6           d S )7Nr   r   r   r   r   r   r   {   r   r
   r   r   r   r   r  	iso8859-1r  replacer   conf_pycache_prefixr   z./conf_program_namer   rK  arg2r   )python3-Wcmdline_warnoption-Xcmdline_xoptionrK  passr  r   r   )zconfig_xoption1=3zconfig_xoption2=config_xoption3r  r  )r  r  config_warnoptionr  pass
r  r  r  r  r  r  rU   r  r  r  r  r   r  my_platlibdirr	  r&  r!  always)r"  r$  test_init_from_configr  PYMEM_ALLOCATOR_MALLOCra  r  r`  r  s      r   r  z%InitConfigTests.test_init_from_config>  sX   /
 
	7
%q7
Q7
 7
 1	7

 17
  7
 a7
 A7
 k7
 I7
 37
 17
 T6N7
   " " "!7
* !+7
,    -7
8    97
 7
B 8C7
F 1G7
H QI7
J qK7
L 1M7
N !!O7
P aQ7
R qS7
T QU7
V  W7
X aY7
Z "1[7
\ A]7
^ /_7
` "4#5a7
b c7
f #Hg7
 7
h $%%&m7
 7
 7
p 	6	#- 	 	/ 	/ 	/ 	/ 	/r   c                     dt           i}i ddddddddd	d
dddddddddddd
dddd
dddddd
dddgd| j        dd}|                     d||t                     d S ) Nr   r   r   r   *   r   r
   r   r   r   r   r  r  r  /my/pathr   env_pycache_prefixr  rU   r  r  r  r  r  r  r   EnvVarenv_platlibdirr  r  r	  r&  test_init_compat_envr  r  r  s      r   r  z$InitConfigTests.test_init_compat_env~  s4   /
	
Q

 1
 1	

  
 A
 q
 !!
 j
 2
 a
 q
 a
 k
 I
  "1!
" A#
$ %:*#'#5+
 
 
. 	5vy#- 	 	/ 	/ 	/ 	/ 	/r   c                     t           dd}i ddddddddd	d
dddddddddddd
dddd
dddddd
dddgd| j        dd}|                     d||t                     d S ) Nr   r  r   r   r  r   r
   r   r   r   r   r  r  r  r  r   r  r  rU   r  r  r  r  r  r  r   r  r  r  test_init_python_envr  )r  ra  r  r  r  s      r   r  z$InitConfigTests.test_init_python_env  s9   /
 
	
Q

 1
 1	

  
 A
 q
 !!
 j
 2
 a
 q
 a
 k
 I
  "1!
" A#
$ %:*#'#5+
 
 
. 	5vy#- 	 	/ 	/ 	/ 	/ 	/r   c                     t          t                    }t          dddg          }|                     d||t                     d S )Nr   r   r  r   r   r  test_init_env_dev_moder  )r    PYMEM_ALLOCATOR_DEBUGr  r`  r  s      r   r  z&InitConfigTests.test_init_env_dev_mode  sd    #8999	q#$#,+/ / / 	7#- 	 	/ 	/ 	/ 	/ 	/r   c                     t          t                    }t          dddg          }|                     d||t                     d S )Nr  r   r  r  test_init_env_dev_mode_allocr  )r    r  r  r`  r  s      r   r  z,InitConfigTests.test_init_env_dev_mode_alloc  sd    #9:::	q#$#,+/ / / 	=vy#- 	 	/ 	/ 	/ 	/ 	/r   c                 b    dt           i}dddgd}|                     d||t                     d S )Nr   r   r  )r   r   r  test_init_dev_moder  )r  r  r  r  s      r   r  z"InitConfigTests.test_init_dev_mode  s[    .
	 %;
 

 	3VY#- 	 	/ 	/ 	/ 	/ 	/r   c           	          dt           i}dgg dt          j                            d          dddgdgdd}|                     d||t
          	           d S )
Nr   	script.py)r  r  dev-Pr  r   r  r  )r   r   r  r   r   r  r   r&  test_preinit_parse_argvr  )r  r   r   rc  r  r  r  s      r   r  z'InitConfigTests.test_preinit_parse_argv  s     .
	 !MDDDGOOK88%;	
 	
 	8&)#- 	 	/ 	/ 	/ 	/ 	/r   c                 ^    ddi}g d}||dd}|                      d||t                     d S )Nr   r   )	r  -E-Ir  r  r  r  utf8r  )r   r   r   test_preinit_dont_parse_argvr  r  r  )r9   r  r   r[  s       r   r  z,InitConfigTests.test_preinit_dont_parse_argv  sk     
	   
 

 	=vy#/ 	 	1 	1 	1 	1 	1r   c                 N    ddddd}|                      d|t                     d S )Nr   r   r   r&  r   r  test_init_isolated_flagr  r  r  r9   r[  s     r   r  z'InitConfigTests.test_init_isolated_flag  s>     #$	
 
 	8&jQQQQQr   c                 N    ddddd}|                      d|t                     d S )Nr   r   r  test_preinit_isolated1r  r  r  s     r   r  z&InitConfigTests.test_preinit_isolated1  @      #$	
 
 	7ZPPPPPr   c                 N    ddddd}|                      d|t                     d S )Nr   r   r  test_preinit_isolated2r  r  r  s     r   r  z&InitConfigTests.test_preinit_isolated2  r  r   c                 >    |                      dt                     d S )Ntest_preinit_isolated_configr  r  rB   s    r   r  z,InitConfigTests.test_preinit_isolated_config  s"    =<PPPPPr   c                 >    |                      dt                     d S )Ntest_init_isolated_configr  r  rB   s    r   r  z)InitConfigTests.test_init_isolated_config  s"    :MMMMMr   c                 >    |                      dt                     d S )Ntest_preinit_python_configr  r  rB   s    r   r  z*InitConfigTests.test_preinit_python_config  r  r   c                 >    |                      dt                     d S )Ntest_init_python_configr  r  rB   s    r   r  z'InitConfigTests.test_init_python_config"  r  r   c                 L    ddd}|                      di |t                     d S )Nr   )r   r   test_init_dont_configure_localer  r  )r9   r  s     r   r  z/InitConfigTests.test_init_dont_configure_locale%  sI     !" 
 
	 	@"i#- 	 	/ 	/ 	/ 	/ 	/r   zSas of 3.11 this test no longer works because path calculations do not occur on readc                 T    dddd}d }|                      d|t          |           d S )Nz./init_read_setmy_executable)r   r0   r  c                 \    |                      dd           |                     d           d S )Nr   test_path_insert1test_path_append)insertrn   )r   s    r   modify_pathz7InitConfigTests.test_init_read_set.<locals>.modify_path6  s0    KK.///KK*+++++r   test_init_read_set)rg  rh  r  )r9   r[  r  s      r   r  z"InitConfigTests.test_init_read_set.  s\     .).
 

	, 	, 	, 	3V#-.9 	 	; 	; 	; 	; 	;r   c                 Z    dg dg dg dd}|                      d|t                     d S )Nr   )config_xoptionr  sysadd_xoptionr   )ignore:::cmdline_warnoptionzignore:::sysadd_warnoptionzignore:::config_warnoption)r  r  r  r  r  )r   r   r  r   test_init_sys_addr  r  r  s     r   r  z!InitConfigTests.test_init_sys_add=  sb        
3 3 3
 
" 	2F
KKKKKr   c                 f    d}ddgdd|dgd|dz   dd}|                      d	|t          
           d S )NRimport _testinternalcapi, json; print(json.dumps(_testinternalcapi.get_configs()))rK  r  r  	./python3r   r
   )r   r   r   r  r   test_init_run_mainr  r  r9   r   r[  s      r   r  z"InitConfigTests.test_init_run_mainQ  s\    E 6N#T48'$;
 
 	3VLLLLLr   c                 j    d}ddgdd|dgd|dz   ddd	}|                      d
|t          d           d S )Nr  rK  r  r  r  r   r
   r   )r   r   r   r  r   r#  test_init_mainz)Run Python code before _Py_InitializeMain)rg  rK   r  r  s      r   r  zInitConfigTests.test_init_main]  sz    E 6N# " ($;	
 	
 	/#-&Q 	 	S 	S 	S 	S 	Sr   c                 Z    dg dg ddddd}|                      d|t          	           d S )
Nr
   )rK  arg1-varg3./argv0r  rK  r  r  r  r  r   r  r   )r   r   r   r   r  r   test_init_parse_argvr  r  r  s     r   r  z$InitConfigTests.test_init_parse_argvn  sP    000NNN%# 
 
 	5v:NNNNNr   c                 `    ddi}dg dg ddd}|                      d||t                     d S )Nr   r   r  r   )r   r   r   r   test_init_dont_parse_argvr  r  )r9   r^  r[  s      r   r  z)InitConfigTests.test_init_dont_parse_argvy  sg    !

 IIINNN%	
 
 	:FJ#- 	 	/ 	/ 	/ 	/ 	/r   c                     t           r
d}| j        }n'd}t          r| j        }nt          j        |          pd}|                    |||d           d S )Nr   r  r+   )r   r  r0   )r1   r3   MACOSshutilwhichr  )r9   r[  r   r0   s       r   default_program_namez$InitConfigTests.default_program_name  su     	>#LJJ$L >!]

#\,77=2
()$
 
 	 	 	 	 	r   c                    |                                  }|d         d         }|dddddd}|                     |           dt          j        j                            |          i}|                     d|t          |d           d S )	Nr[  r	  r+   )r	  r  r  r  r  r  TESTPATHtest_init_setpathTrg  r$   r  )r\  r  r   r   r   r2   r  r`  r9   r[  rj  r$   s       r   r  z!InitConfigTests.test_init_setpath  s    **,,x !67 $) " 	
 	
 	!!&)))27?//6672F#-3-1 	 	3 	3 	3 	3 	3r   c                     |                                  }|d         d         }|dddddt           dddd
}dt          j        j                            |          i}|                     d|t          |d	
           d S )Nr[  r	  r+   conf_program_nameconf_executable)
r	  r  r  r  r  r  r%  r   r  r0   r
  test_init_setpath_configTr  )r\  Py_DEBUGr   r   r   r2   r  r  r  s       r   r  z(InitConfigTests.test_init_setpath_config  s    **,,x !67 $) " &.,/0+
 
  27?//66796#-3d 	 	L 	L 	L 	L 	Lr   c           
         |                                  }||d         d         }||d         d         }t          r|d         d         S t          j        }t          j                            |t          j        d|j         |j	         d          t          j                            |t          j        d|j         d|j	                   t          j                            |t          j        d|j         d|j	         d          gS )Nr[  r  r	  r   z.zipr   lib-dynload)
r\  r1   r/   version_infor   r   r2   r  majorminor)r9   r  r  r[  vers        r   r	  z#InitConfigTests.module_search_paths  s    **,,>H%h/F *84K 	(#$9::"CVS^@ci@@@@B BVS^=ci==#)==? ?[#.=ci==#)==}N N r   c           	   #     K   t          j                    5 }t          j                            |          }|rQt          j                            t          j                            ||                    }t          j        |           t          rdd l	}t          j        
                    | j                  }t          j        |          D ]i}|	                    |d          rQt          j        t          j                            ||          t          j                            ||                     jt          j                            |t          j                            | j                            }t          j        | j        |           t          j        | j        |           || _        |V  d d d            d S # 1 swxY w Y   d S )Nr   z*.dll)tempfileTemporaryDirectoryr   r   realpathnormpathr2   makedirsr1   fnmatchr.   r3   listdirr  copyfiler   copystat)r9   subdirtmpdirr  exedirf	exec_copys          r   tmpdir_with_pythonz"InitConfigTests.tmpdir_with_python  s      (** 	f W%%f--F $))"',,vv*F*FGGF### Z77F++ Z ZAq'22 ZVQ(?(?fVWAXAXYYY VRW-=-=dm-L-LMMIODM9555ODM9555%DMLLL/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   F!GGGc           	         |                                  }|d         d         }t          j        j                            |          }|D ]}t          j                            |          s"t          j                            t          j                            |d                    r!t          j                            |          } n|                     d|           |x}}t          rJt          j                            |d          }|d         t          j                            |d          |g}	njt          j        j         dt          j        j         }
t          j                            |t          j        d	|
           }|                     ||
          }	||	||||||d}|                     |           ||d}|                     d|t$          |           d S )Nr[  r	  r   Unable to find home in Libr   DLLsr   r   r  r  r  r	  r  r  r  r  r  r  TESTHOMEr   test_init_setpythonhomerg  r$   )r\  r   r   r   r2   isdirr4   r.   rR  r1   r/   r  r  r  r  r	  r  r  r`  )r9   r[  rj  	paths_strr   r  r  r  stdlibexpected_pathsversionr$   s               r   r1  z'InitConfigTests.test_init_setpythonhome  s   **,,x !67GO((//	 	; 	;D7==&& w~~bgll499:: wt,, II999:::## 	UW\\$..F $AhT6(B(BFKNN)/JJ#2B2HJJGW\\$8J8J8JKKF!55Tt5TTN #1!& +' 	
 	
 	!!&)))y998&#-3 	 	8 	8 	8 	8 	8r   c           	      l   |                                  }|d         d         }t          j        j                            |          }|D ]}t          j                            |          s"t          j                            t          j                            |d                    r!t          j                            |          } n|                     d|           |x}}t          rJt          j                            |d          }|d         t          j                            |d          |g}	njt          j        j         dt          j        j         }
t          j                            |t          j        d	|
           }|                     ||
          }	||	||||||d}||d}d|d<   d|d<   |                     d|t"          |           d|d<   d|d<   t          j                            t          j                  }t'          t          j                            |d          d          5 }t          j                            t          j                            ||                                 d                                d                             |	t          rdnd<   d d d            n# 1 swxY w Y   t          sFt          j        x}}|                     |          d         |	d<   |                    ||||           |                     d|t"          |           d S )Nr[  r	  r   r*  r+  r   r,  r   r   r-  r.  r/  1NEGATIVE_ISPYTHONBUILDr'  test_init_is_python_buildr2  r|   r   pybuilddir.txtr  r   z
$r
   )r  )r  r  r  r  )r\  r   r   r   r2   r3  r4   r.   rR  r1   r/   r  r  r  r  r	  r  r`  r0   r   r  r   rb   r  r  )r9   r[  rj  r4  r   r  r  r  r5  r6  r7  r$   r%  r&  s                 r   #test_init_is_python_build_with_homez3InitConfigTests.test_init_is_python_build_with_home  sw   **,,x !67GO((//	 	; 	;D7==&& w~~bgll499:: wt,, II999:::## 	UW\\$..F $AhT6(B(BFKNN)/JJ#2B2HJJGW\\$8J8J8JKKF!55Tt5TTN #1!& +' 	
 	
  y99(+$%%&!":F#-3 	 	8 	8 	8 ),$%%&!"00"',,v'7886JJJ 	Ha57W5E5EV%5%5%5%@%@%B%B1%EFF6H 6HN
1112	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H  	Q#&:-F[ $ 8 8 8 G G JN1MMV&1K  Q Q Q:F#-3 	 	8 	8 	8 	8 	8s   ;A7J>>KKc                     |                                  }|d         d         }t          j        j                            |          }||d<   d|i}|S )Nr[  r	  r  r   )r\  r   r   r   r2   )r9   r[  all_configsrj  r4  r$   s         r   copy_paths_by_envz!InitConfigTests.copy_paths_by_envY  sT    //11H%&;<GO((//	#, Y'
r   zSee test_init_pybuilddir_win32c           	      @   |                                  5 }t          j        d          pd}d}t          j                            ||          }t          j                            t          j                            ||d                    }t          j        |           t          j                            |d          }t          |dd          5 }|	                    |           d d d            n# 1 swxY w Y   | 
                                }||d	<   ||d
<   | j        }	t          j        d          t          j        d          |	|	||d}
|                     |
          }|                     d|
t          |d|           d d d            d S # 1 swxY w Y   d S )NVPATHr+   libdirr+  r<  wr  r   r  r  )r  r  r  r0   r	  r  r  Trg  r$   r  rG   )r(  	sysconfigget_config_varr   r   r2   r  mkdirr   writer	  r3   r@  r  r`  )r9   r$  vpathr#  rC  	stdlibdirfilenamer   r	  r0   r[  r$   s               r   test_init_pybuilddirz$InitConfigTests.test_init_pybuilddira  s*    $$&& 	C& ,W55;EFW\\&&11F((feU)K)KLLIHVw||F,<==Hhf555 !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! #'":":"<"<&/#&,#J$-$<]$K$K(7AA#-(':' F ((00C""#<f'1s156 # C C C9	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs7   B=FC4(F4C8	8F;C8	<B
FFFzSee test_init_pybuilddirc           
      X   t          j        d          }d}t          j                            |                              t          j                  dk    r t          j                            |d          }|                     |          5 }t          j                            t          j                            ||                    }t          j                            t          j                            ||d                    }t          j                            |d          }t          |dd	          5 }|
                    |           d d d            n# 1 swxY w Y   |                                 }t          j                            |t          j                            |d
                             |d
<   ||d<   ||d<   | j        }	|||	|	||||d}
|                     |
          }|                     d|
t           |d|           d d d            d S # 1 swxY w Y   d S )NrB  zPCbuild\archr
   instrumentedr+  r<  rD  r  r   rE  rF  )r  r  r  r0   r  r  r	  r  r  FrG  )rH  rI  r   r   r  countsepr2   r(  r   rK  r	  r   r3   r@  r  r`  )r9   rL  r#  r$  r  rM  rN  r   r	  r0   r[  r$   s               r   test_init_pybuilddir_win32z*InitConfigTests.test_init_pybuilddir_win32  s    (11 7E""((00A55W\\&.99F$$V,, 	DW%%bgll65&A&ABBF((feU)K)KLLIw||F,<==Hhf555 !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! #'":":"<"<&(gll627;K;KL_`bLc;d;d&e&e#&,#&/#J$*%#-( %':'	 	F ((00C""#<f'1s16F # D D D7	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds8   B.H:EHE 	 H#E 	$B.HH#&H#c           
         |                                  5 }t          j                    5 }t          j        }t
          sQt          j                            |t          j	        d|j
         d|j         d          }t          j        |           nt          j                            |d          }t          j        |           t          j        t          j                            t          j        d          t          j                            |d                     t          j                            |d          }t#          |dd	          5 }t%          d
|z  |           t%          d|           d d d            n# 1 swxY w Y   |                                 }t
          s||d<   ndt          j                            |t          j                            |d                             |t          j                            |d          g}| j        }	t          j                            |t          j                            |	                    }
|}t-          j        d          |||
|	|d}t
          rF||d<   ||d<   t          j                            |d          |d<   t1          t2                     |d<   n"| j        |d<   t1          t2                     |d<   |                     |          }|                     d|t:          |d|           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   r  r+  r   z
pyvenv.cfgrD  r  r   z	home = %sfilez$include-system-site-packages = falserF  r   r  )r  r  r  r  r0   r	  r  r  r%  r  TrG  )r(  r  r  r/   r  r1   r   r   r2   r  r  r  r  r  r!  r   
STDLIB_DIRr   rV   r	  r   r3   rH  rI  r   r  ra  r@  r  r`  )r9   r$  pyvenv_homer  lib_dynload
lib_folderrN  r   rj  r0   r  r  r[  r$   s                 r   test_init_pyvenv_cfgz$InitConfigTests.test_init_pyvenv_cfg  s    $$&& ;	C&(**;	C.9"C  gll;+.>+KCI+K+K	+K+K+8: : K((((W\\+u==
J'''GLL!3W==GLLW55  
 w||FL99Hhf555 GkK/b9999<2FFFFG G G G G G G G G G G G G G G ,,..E 'b		 GLL)9)9%()C)CDDGLLe44 J gll;8H8H8T8TUUO%K(7AA$/*#2(', F  	A(3}%#.x ')w||K'G'G|$/2x</@/@+,, (,'9|$/2x</@/@+,((00C""#<f'1s156 # C C Cs;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	C ;	CsZ   L:D&L"&F5L"FL"F	FL"L:"L&	&L:)L&	*L::L>L>zspecific to Windowsc           	         ddddddt          j                     dfg}|                     di t                      d	t           j        j                            d
 |D                       i          \  }}|                     |d           	 t          j	        |          }n-# t          j
        $ r |                     d|           Y nw xY w|d         d         }t          ||          D ]\  \  }}}|                     ||           d S )N)z	C:/a. . .	C:\a. . .)r_  r_  )z\\?\C:////a////b. . .z\\?\C:\a\b. . .)z//a/b/c. . .\\a\b\c. . .)r`  r`  za. . .z\ar  r   c              3   &   K   | ]}|d          V  dS )r   Nrx   )r   cs     r   	<genexpr>z=InitConfigTests.test_getpath_abspath_win32.<locals>.<genexpr>  s&      3H3HQAaD3H3H3H3H3H3Hr   r   r+   rL  r[  r	  )r   r6   r]   r&   r   r   r2   rW   rO  rP  rQ  rR  zip)r9   CASESr[   r\   resultsr   rf  results           r   test_getpath_abspath_win32z*InitConfigTests.test_getpath_abspath_win32  s\    )(@04")++***+
 00)J(** Jrw333H3H%3H3H3HHHJ J 1 
 
S
 	b!!!	9*S//CC# 	9 	9 	9II77788888	9 h- 56%(%8%8 	/ 	/!MQ6VX....	/ 	/s   B# #'CCc                   
 t          j        d          
t          j        d          }
fd} |d          } |d          } |d          } |d          } |d          } |d	          }|                                d
         }	|                      |                                t
          j        j                  |	d                    |                      |            |	d                    |                      |            |	d                    |                      |            |	d                    |                      |            |	d                    |                      |            |	d                    d S )Nctypes_testinternalcapic                 X    t          j        |           }d|_        j        |_        |S )Nrx   )getattr	pythonapiargtypes	c_wchar_prestype)r   funcrj  s     r   get_funcz8InitConfigTests.test_global_pathconfig.<locals>.get_func  s+    6+T22DDM!+DLKr   
Py_GetPathPy_GetPrefixPy_GetExecPrefixPy_GetProgramNamePy_GetProgramFullPathPy_GetPythonHomer[  r	  r  r  r   r0   r  )r   import_moduleget_configsrW   rE  r   r   r   )r9   rk  rs  rt  ru  rv  rw  rx  ry  r[  rj  s             @r   test_global_pathconfigz&InitConfigTests.test_global_pathconfig	  s    ,X66)78KLL	 	 	 	 	 Xl++
x//#8$677$H%899 ()@ A A#8$677"..00:++BGO<< 56	8 	8 	8)9:::))++VM-BCCC**,,f^.DEEE..00&2FGGG))++VF^<<<<<r   c                     g d}t          t                    }ddd|g dd}|                     d||t                     d S )N)zignore:::PyConfig_Insert0r  zignore:::env1zignore:::env2zignore:::cmdline1zignore:::cmdline2r  zignore:::PySys_AddWarnOption1zignore:::PySys_AddWarnOption2zignore:::PyConfig_BeforeReadzignore:::PyConfig_AfterReadr  r   )r  z-Wignore:::cmdline1z-Wignore:::cmdline2)r   r   r  r  r   test_init_warnoptionsr  )r    r  r  r  )r9   r  r  r[  s       r   r~  z%InitConfigTests.test_init_warnoptions/  s    + + + #8999	&1 1 1
 
 	6	#- 	 	/ 	/ 	/ 	/ 	/r   c                 N    dddgd}|                      d|t                     d S )Nr   r
   zerror::BytesWarning)r#  r  r  test_init_set_configr  r  r  s     r   r  z$InitConfigTests.test_init_set_configJ  sK    12
 

 	5v#/ 	 	1 	1 	1 	1 	1r   c                 0    |                      d           d S )Ntest_get_argc_argvr]   rB   s    r   r  z"InitConfigTests.test_get_argc_argvS  s    %%&:;;;;;r   c           
         h d}|D ]\  }}d| }ddgdd|ddgddd	|g|d
}|rd|d	d          ind }|                      t          |                    5  |                     d|t          |           d d d            n# 1 swxY w Y   d S )N>   z=onr   z=offr   r+   r   rD  r   frozen_modulesr
   rK  r   r  r  r  r   )r   r   r   r   r  r   r   r%  
TESTFROZENtest_init_use_frozen_modulesr2  )subTestreprr  r  )r9   testsrawrf  optvalr[  r$   s          r   r  z,InitConfigTests.test_init_use_frozen_modulesW  s=   
 
 
 # 	@ 	@MC+c++F'vtVD )'#$#H&.	 	F .1:<QRR))dCd3ii(( @ @&&'Ev+53 ' @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@s   B  B	B	rA   )NNNN)NN)Yru   rv   rw   r   r1   rb  objectr_  ra  r`  PYMEM_ALLOCATOR_NOT_SETr  r  r    r  r  r  r  rd  r/   r  r  r  r  r  rv  rx  rw  rM   r@  classmethodrB  rI  rT  r\  rk  rn  rs  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   skipr  r  r  r  r  r  r  r  r  r	  
contextlibcontextmanagerr(  r1  r=  r@  skipIfrO  
skipUnlessrU  r]  rh  r|  r~  r  r  r  rx   r   r   r   r     ss	       G+5L;L   FHHM #, !     (!"
 	 	 	 .*$	   $0!    OI
IAI 	1I 	A	I 	"1I 	I 	QI 	I 	qI 	qI 	QI 	!I 	QI 	I" 	1#I$ 	/%I( 	$)I I* 	*+I, 	a-I. 	/I0 	R1I4 	B5I6 	r7I: 	$;I< 	=I> 	(?I@ 	-AID 	$EIF 	)GIH 	)IIJ 	.KIL 	1MIN 	"1OIP 	cnQI I IR 	(SIV 	qWIX 	YIZ 	 [I\ 	1]I^ 	q_I` 	aaIb 	cId 	!eIf 	1gIh 	iIj 	qkIl 	QmIn 	!oIr 	,sIt 	*uIx 	!!yI Iz  ) !""*l)QI I IMT  "A
 	 	 	 D  M
 d=! !  O  423./ ,-$%01  	%  (  %% '
 	 	 	 	!! #
 	 	 	 O# # [#  < < <>  " 6:=8 =8 =8 =8~/ / /+ + += = =, ;?-1)-!%4 >B"%T	4 4 4 4 4lN N NM M MJ J J/ / /.>/ >/ >/@/ / /</ / />/ / // / /
/ 
/ 
// / /&1 1 1$R R RQ Q QQ Q QQ Q QN N NM M MJ J J/ / / X] < = =; ;= =;L L L(
M 
M 
MS S S"	O 	O 	O/ / /   3 3 3,L L L2   &    6'8 '8 '8R:8 :8 :8x   X_Z!ABB!C !C CB!CF X%?@@%D %D A@%DN>C >C >C@ X%:;;/ / <;/6$= $= $=L/ / /61 1 1< < <@ @ @ @ @r   r   c                       e Zd Zd ZdS )SetConfigTestsc                 ~   t          j        d           t          j        dddddg}t	          j        |t          j        t          j        dd	          }|j        r4t          j	        r(t          |j                   t          |j                   |                     |j        d
|j        |j        |j        f           d S )N	_testcapir  r  r  z-mztest._test_embed_set_configr   backslashreplace)rJ   rK   r   r   r   )r   rz  r/   r0   rO   r~   rQ   rE   r   rU   rV   rJ   rK   rW   )r9   rY   rS  s      r   test_set_configzSetConfigTests.test_set_configq  s    #K000~tVT49VW~c%/_%/_'.7IK K K ? 	w 	$+$+!/4;D	F 	F 	F 	F 	Fr   N)ru   rv   rw   r  rx   r   r   r  r  p  s(        F F F F Fr   r  c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )AuditingTestsc                 0    |                      d           d S )Ntest_open_code_hookr  rB   s    r   r  z!AuditingTests.test_open_code_hook  s    %%&;<<<<<r   c                 0    |                      d           d S )N
test_auditr  rB   s    r   r  zAuditingTests.test_audit  s    %%l33333r   c                 0    |                      d           d S )Ntest_audit_subinterpreterr  rB   s    r   r  z'AuditingTests.test_audit_subinterpreter      %%&ABBBBBr   c                 J    |                      dt          j        d           d S )Ntest_audit_run_commandr   rD   rE   r]   r   SHORT_TIMEOUTrB   s    r   r  z$AuditingTests.test_audit_run_command  s5    %%&>.5.C12 	& 	4 	4 	4 	4 	4r   c                 J    |                      dt          j        d           d S )Ntest_audit_run_filer   r  r  rB   s    r   r  z!AuditingTests.test_audit_run_file  s5    %%&;.5.C12 	& 	4 	4 	4 	4 	4r   c                    t           j                            | j        t          j                  dz   }t          |dd          5 }t          d|           t          d|           d d d            n# 1 swxY w Y   	 i t                      d|i}| 	                    d	t          j        d
|           t          j        |           d S # t          j        |           w xY w)N.pyrD  r   r   z
import sysrW  z&sys.__interactivehook__ = lambda: NonePYTHONSTARTUPtest_audit_run_interactivehook
   rD   rE   r$   r   r   r2   r7   r   TESTFNr   rV   r&   r]   r   r  unlinkr9   startupr&  r$   s       r   r  z,AuditingTests.test_audit_run_interactivehook  s;   ',,t{I,<==E'3111 	DQ,Q'''':CCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D	G*,,GowGGC))*J292G57S * B B B IgBIgs   #A44A8;A8 7C C#c                    t           j                            | j        t          j                  dz   }t          |dd          5 }t          d|           d d d            n# 1 swxY w Y   	 i t                      d|i}| 	                    dt          j        d	|
           t          j        |           d S # t          j        |           w xY w)Nr  rD  r   r   r  rW  r  test_audit_run_startupr  r  r  r  s       r   r  z$AuditingTests.test_audit_run_startup  s   ',,t{I,<==E'3111 	"Q&q!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"	G*,,GowGGC))*B292G57S * B B B IgBIgs   A##A'*A'/7B< <Cc                 J    |                      dt          j        d           d S )Ntest_audit_run_stdinr   r  r  rB   s    r   r  z"AuditingTests.test_audit_run_stdin  s5    %%&<.5.C12 	& 	4 	4 	4 	4 	4r   c                 0    |                      d           d S )Ntest_get_incomplete_framer  rB   s    r   r  z'AuditingTests.test_get_incomplete_frame  r  r   N)ru   rv   rw   r  r  r  r  r  r  r  r  r  rx   r   r   r  r    s        = = =4 4 4C C C4 4 4
4 4 4
  
 
 
4 4 4
C C C C Cr   r  c                       e Zd Zd Z ej        ej        dk    d          d             Z ej	         e
ed          d          d             ZdS )		MiscTestsc                 0    |                      d           d S )Ntest_unicode_id_initr  rB   s    r   r  zMiscTests.test_unicode_id_init  s     	%%&<=====r   r   z(Py_FrozenMain is not exported on Windowsc                 4   t          t          j                  }d|d<   |                     d|          \  }}t          j                            d          }t          j        d| d                                          }| 	                    ||           d S )Nr9  PYTHONUNBUFFEREDtest_frozenmainr   r   z
            Frozen Hello World
            sys.argv ['./argv0', '-E', 'arg1', 'arg2']
            config program_name: ./argv0
            config executable: z|
            config use_environment: 1
            config configure_c_stdio: 1
            config buffered_stdio: 0
        )
r    r   r!   r]   r   r  r   r   lstriprW   )r9   r$   r[   r\   r0   rf  s         r   r  zMiscTests.test_frozenmain  s     2:"%001B0LLSW%%i00
? $ !+	$ $ $   VXX 	 	h'''''r   r	   z--X showrefcount requires a Python debug buildc           	         d}|D ]O\  }}d| }t           j        dddd|d|g}t          j        |t          j        t          j        d          }|                     |j        d	           |j        	                                }t          j        d
|          }|s|                     d|           t          |                    d                    }	t          |                    d                    }
|                     ||          5  |                     |	d	|           |                     |
d	|           d d d            n# 1 swxY w Y   Qd S )N))offr  )onr  )r  import __hello__)r  r  zfrozen_modules=r  r  showrefcountrK  T)rJ   rK   textr   z!^\[(-?\d+) refs, (-?\d+) blocks\]zunexpected output: r   r
   )r  stmt)r/   r0   rO   r~   rQ   STDOUTrW   rE   rJ   r   rf   rg   rR  r   groupr  )r9   r  flagr  xoptrY   rS  r[   rg   refsblockss              r   test_no_memleakzMiscTests.test_no_memleak  s   
   	1 	1JD$+T++D>4~tT4QUVC>#)3)3):'+- - -D T_a000+$$&&CHA3GGE 9		777888u{{1~~&&DQ((FT== 1 1  q#...  C0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	1s   /E		E	E	N)ru   rv   rw   r  r   r  r   r   r  r  hasattrr/   r  rx   r   r   r  r    s        > > > X_RW_?A A( (A A(  X&899HJ J1 1J J1 1 1r   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )StdPrinterTestsr   c                     t          j        d          }|j        j        }|j        f|_        |j        |_         ||          S )Nrj  )r   rz  rn  PyFile_NewStdPrinterc_intro  	py_objectrq  )r9   fdrj  r  s       r   create_printerzStdPrinterTests.create_printer  sH    ,X66%/D)/%'-'7$##B'''r   c                    d}| j         }t          j        |          }|                     t          j        |           t          j                    \  }}|                     t          j        |           |                     t          j        |           	 t          j        ||           |                     |          }|                    |           t          j        ||           n# t          j        ||           w xY wt          j	        |d          }| 
                    ||                    dd                     d S )Nu   unicode:é-€-!
d   r  r  )	STDOUT_FDr   dup
addCleanupclosepipedup2r  rK  r   rW   encode)r9   message	stdout_fdstdout_fd_copyrfdwfdprinterdatas           r   
test_writezStdPrinterTests.test_write  s   1N		**.111799S#&&&#&&&	/ GC###)))44GMM'"""GNI....BGNI....wsC  w~~f6HIIJJJJJs   ?C* *Dc                 R   | j         }|                     |          }|                     |                                |           |                     |                                t          j        |                     |                                 |                                 d S rA   )r  r  rW   filenoisattyr   flushr  r9   r  r  s      r   test_methodszStdPrinterTests.test_methods  s    ^%%b))))2...))29R==999r   c                     | j         }|                     |          }t          j        | t	          |                     d S rA   )r  r  r   check_disallow_instantiationtyper  s      r   test_disallow_instantiationz+StdPrinterTests.test_disallow_instantiation  s;    ^%%b)),T4==AAAAAr   N)ru   rv   rw   r  r  r  r  r  rx   r   r   r  r    s_        
 I( ( (K K K.  B B B B Br   r  __main__)8testr   test.supportr   r   r   collectionsr   r  rO  r   os.pathrf   r  rO   r/   rH  r  r   has_subprocess_supportr   r   r1   platformr  r  r  r  r  r  r`  r  r  r   MAX_HASH_SEEDr   r2   r  r  r  r  r  STDLIB_INSTALLisfiler   r&   r(   TestCaserz   r   r  r  r  r  ru   rs   rx   r   r   <module>r     si         & & & & & & " " " " " "  " " " " " "      				  				      



      % ?
(
=
>
>>go
		!73*++    



 cj#.>S#>>c&6&<>>@ @	w~~bgll>7;;<< N5 5 5  j! j! j! j! j! j! j! j!ZX2 X2 X2 X2 X2((*; X2 X2 X2tg@ g@ g@ g@ g@)8+< g@ g@ g@T'F F F F FX& F F F 3C 3C 3C 3C 3C'): 3C 3C 3Cl31 31 31 31 31#X%6 31 31 31l0B 0B 0B 0B 0B)8+< 0B 0B 0Bf zHMOOOOO r   