
    6bh                    f   d dl mZ d dlmZmZ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d dlZej*                  s ej,                  d      ej.                  dk(  Zd ZdZdZd	ZdZdZd
ZdZ ejB                  jE                  ejF                  ejH                  dejJ                  jL                   dejJ                  jN                         Z(ejB                  jS                  ejB                  jE                  e(d            sdZ(d Z*d Z+ G d d      Z, G d de,ejZ                        Z. G d de,ejZ                        Z/ G d dejZ                        Z0 G d de,ejZ                        Z1 G d de,ejZ                        Z2e3dk(  r ejh                          yy)    )support)import_helper	os_helper
MS_WINDOWSN)
namedtupleztest module requires subprocessdarwin            l    python.os.pyc                     t         j                  j                  |       } t         j                  j                  |       d   }|j	                         j                  dj	                               S )Nr   _d)ospathbasenamesplitextcasefoldendswith)programnames     9/opt/python-3.12.12/usr/lib/python3.12/test/test_embed.pydebug_buildr   .   sL    ggw'G77G$Q'D==?##DMMO44    c                      t        t        j                        } t        |       D ]  }|j	                  d      s| |=  | S )NPYTHON)dictr   environlist
startswith)envkeys     r   remove_python_envvarsr%   4   s8    
rzz
CCy>>(#C  Jr   c                   2    e Zd Zd Zd ZdddddddZd Zy)EmbeddingTestsMixinc                    d}t         j                  j                  t        j                        }t
        r(t        t        j                        rdnddz   }||z  }|}n t         j                  j                  |d      }t         j                  j                  ||      x| _        }t         j                  j                  |      s| j                  d|z         t        j                         | _        t        j                  |       y )N
_testembedr    .exeProgramsz%r doesn't exist)r   r   dirnamesys
executabler   r   jointest_exeexistsskipTestgetcwdoldcwdchdir)selfexenamebuilddirextexepathexes         r   setUpzEmbeddingTestsMixin.setUp>   s    77??3>>2&s~~64B&HCsNGGggll8Z8G ggll7G<<ww~~c"MM,s23 iik
r   c                 B    t        j                  | j                         y N)r   r6   r5   r7   s    r   tearDownzEmbeddingTestsMixin.tearDownP   s    
r   Nr   )r#   timeout
returncodeinputcwdc                   | j                   g}|j                  |       |,t        r&|j                         }t        j
                  d   |d<   t        j                  |t        j                  t        j                  d||      }	 |j                  ||      \  }	}
|j                  |k7  rFt        j                  r6t        d| d       t        d|	        t        d|
        t        d	       | j!                  |j                  |d
|j                  |
fz         |	|
fS #  |j                          |j                           xY w)z'Runs a test in the embedded interpreter
SYSTEMROOTT)stdoutstderruniversal_newlinesr#   rE   )rD   rB   z--- z failed ---zstdout:
zstderr:
z------zbad returncode %d, stderr is %r)r1   extendr   copyr   r    
subprocessPopenPIPEcommunicate	terminatewaitrC   r   verboseprintassertEqual)r7   r#   rB   rC   rD   rE   argscmdpouterrs              r   run_embedded_interpreterz,EmbeddingTestsMixin.run_embedded_interpreterS   s!    }}o

4?z ((*C "

< 8CS$.OO$.OO04!$!$&	UGDJS#
 <<:%'//D[)*IcU#$IcU#$(Oz:,,,-	. Cx	KKMFFHs   D   #Ec              #   Z  K   | j                  d      \  }}| j                  |d       d}t        dd      }d}g }|j                         D ][  }|dj	                  |      k(  r?| j                  t        |      d       t        j                  dkD  rt        |       |dz  }W| j                  t        |      d	       t        j                  ||      }|| j                  ||        ||j                          }	t        j                  dkD  rt        |	       | j                  |	j                         | j                  |	j                          | j                  |	j"                         |j%                  |	       t        |      d	k(  s?|d   }
| j                  |	|
       | g }^ y w)
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[   rU   r   
splitlinesformatlenr   rS   rT   
assertLessrematchassertRegexgroups
assertTrueinterptstatemodulesappend)r7   rY   rZ   
interp_patr^   numloopscurrent_runlinere   ri   mains              r   %run_repeated_init_and_subinterpretersz9EmbeddingTestsMixin.run_repeated_init_and_subinterpretersv   sr    001YZSb!2
 H&@ANN$D(//99  [!115??Q&$KAOOC,a0HHZ.E}  z2 U\\^,F"fOOFMM*OOFMM*OOFNN+v& ;1$"1~  .!! 9 %s   FF+
!F+)__name__
__module____qualname__r=   rA   r[   rr    r   r   r'   r'   =   s&    $ 37)-!4%)!F1!r   r'   c                       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ej&                  d        Zd Zd Zd Zy)EmbeddingTestsi  c                 p    | j                         D ]#  }|d   }| j                  |j                  d       % y )Nr   0)rr   rU   id)r7   runrq   s      r   test_subinterps_mainz#EmbeddingTests.test_subinterps_main   s3    ==?Cq6DTWWc* @r   c           	          | j                         D ][  }|^}}}t        |j                        }t        |      D ]0  \  }}| j	                  |j                  t        ||z   dz                2 ] y )Nr   )rr   intr{   	enumeraterU   str)r7   r|   rq   subs_mainidisubs           r   test_subinterps_different_idsz,EmbeddingTests.test_subinterps_different_ids   sa    ==?C ND4\F#D/3  VaZ!^)<= *	 @r   c                 ^   | j                         D ]  }|^}}}d|v rt        j                  d      |D ]t  }| j                  |j                  |j                         | j                  |j
                  |j
                         | j                  |j                  |j                         v  y )N0x0zplatform prints pointers as 0x0)rr   unittestSkipTestassertNotEqualri   rj   rk   )r7   r|   rq   r   r   r   s         r   test_subinterps_distinct_statez-EmbeddingTests.test_subinterps_distinct_state   s    ==?C ND4}
 ''(IJJ ##CJJ<##CJJ<##CKK>  @r   c                     | j                  d      \  }}| j                  |d       t        dt        dz         D cg c]  }d| d
 }}dj	                  |      dz   }| j                  ||       y c c}w )Ntest_repeated_init_and_inittabr*   r   z	--- Pass z ---
)r[   rU   range
INIT_LOOPSr0   )r7   rY   rZ   r   liness        r   r   z-EmbeddingTests.test_repeated_init_and_inittab   sz    001QRSb!.3Az!|.DE.D9QCt$.DE		% 4'e$ Fs   A2c                 p   t        t        j                  d      }| j                  d|      \  }}t        j
                  dkD  r t                t        |       t        |       d}d}dj                  g d	      }|j                  |||
      }d | _	        | j                  |j                         |       y )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   rS   rT   r0   ra   maxDiffrU   strip)r7   r#   rY   rZ   expected_stream_encodingexpected_errorsexpected_outputs          r   r   z&EmbeddingTests.test_forced_io_encoding   s    2::0GH001JPS0TS??QG#J#J#* +)) %. /2 *00,D-E'6 1 8
 o6r   c                    t        t        j                  t        j                  j	                  t
        j                              }| j                  d|      \  }}t        r| j                  }n2t        j                  j	                  t        j                         d      }d| d}| j                  ||       | j                  |d       y)	z
        Checks some key parts of the C-API that need to work before the runtime
        is initialized (via Py_Initialize()).
        )
PYTHONPATHtest_pre_initialization_apir   spamzsys.executable: r   r*   N)r   r   r    pathsepr0   r.   r   r[   r   r1   r4   assertInrU   )r7   r#   rY   rZ   expected_pathr   s         r   r   z*EmbeddingTests.test_pre_initialization_api  s    
 2::"**//#((*CD001NTW0XS MMMGGLLf=M,]O2>os+b!r   c                     t               }t        j                  j                  t        j
                        |d<   | j                  d|      \  }}d}| j                  ||       | j                  |d       y)z
        Checks that sys.warnoptions and sys._xoptions can be set before the
        runtime is initialized (otherwise they won't be effective).
        r   #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*   N)	r%   r   r   r0   r.   r   r[   r   rU   )r7   r#   rY   rZ   r   s        r   r   z2EmbeddingTests.test_pre_initialization_sys_options  sq    
 $%JJOOCHH5L00=3 1 HSD 	
 	os+b!r   c                 t    | j                  d      \  }}| j                  |d       | j                  |d       y)ze
        bpo-20891: Calling PyGILState_Ensure in a non-Python thread must not
        crash.
        test_bpo20891r*   Nr[   rU   r7   rY   rZ   s      r   r   zEmbeddingTests.test_bpo20891#  s8    
 00ASb!b!r   c                 t    | j                  d      \  }}| j                  |d       | j                  |d       y)zf
        bpo-33932: Calling Py_Initialize() twice should do nothing (and not
        crash!).
        test_initialize_twicer*   Nr   r   s      r   r   z$EmbeddingTests.test_initialize_twice,  s9    
 001HISb!b!r   c                     | j                  d      \  }}| j                  |j                         d       | j                  |d       y)zS
        bpo-34008: Calling Py_Main() after Py_Initialize() must not fail.
        test_initialize_pymainz6Py_Main() after Py_Initialize: sys.argv=['-c', 'arg2']r*   Nr[   rU   rstripr   s      r   r   z%EmbeddingTests.test_initialize_pymain5  s@     001IJS'_`b!r   c                     | j                  d      \  }}| j                  |j                         d       | j                  |d       y )Ntest_run_mainz%Py_RunMain(): sys.argv=['-c', 'arg2']r*   r   r   s      r   r   zEmbeddingTests.test_run_main=  s=    00AS'NOb!r   c                 ~    d}| j                  d      \  }}| j                  |d|z         | j                  |d       y )Nr_   test_run_main_loopz&Py_RunMain(): sys.argv=['-c', 'arg2']
r*   r   )r7   nlooprY   rZ   s       r   r   z!EmbeddingTests.test_run_main_loopB  sD     001EFSG%OPb!r   c                     t        j                  d      }t        |d      5 }|j                         }d d d        | j	                  d      \  }}| j                  |dt        z         y # 1 sw Y   8xY w)Nz_test_embed_structseq.pyr   encodingtest_repeated_init_execTests passed
)r   findfileopenreadr[   rU   r   )r7   scriptfpcoderY   rZ   s         r   test_finalize_structseqz&EmbeddingTests.test_finalize_structseqJ  sg     !!"<=&7+r779D ,001JDQS.;< ,+s   A++A4c                 ^    | j                  d      \  }}| j                  |dt        z         y )Ntest_repeated_simple_initz
Finalized
r[   rU   r   r   s      r   test_simple_initialization_apiz-EmbeddingTests.test_simple_initialization_apiV  s.     001LMSmj89r   c                     ddl m} t        j                  d| d      }| j                  } |d|      \  }}| j                  |dt        z         y )Nr   )ADAPTIVE_WARMUP_DELAYa              import dis
            import importlib._bootstrap
            import opcode

            def is_specialized(f):
                for instruction in dis.get_instructions(f, adaptive=True):
                    opname = instruction.opname
                    if (
                        opname in opcode._specialized_instructions
                        # Exclude superinstructions:
                        and "__" not in opname
                    ):
                        return True
                return False

            func = importlib._bootstrap._handle_fromlist

            # "copy" the code to un-specialize it:
            func.__code__ = func.__code__.replace()

            assert not is_specialized(func), "specialized instructions found"

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

            assert is_specialized(func), "no specialized instructions found"

            print("Tests passed")
        r   r   )test.test_disr   textwrapdedentr[   rU   r   )r7   r   r   r|   rY   rZ   s         r   >test_specialized_static_code_gets_unspecialized_at_Py_FINALIZEzMEmbeddingTests.test_specialized_static_code_gets_unspecialized_at_Py_FINALIZE\  s`     	8 $. 22 3	/  < ++0$7S.;<r   c                 d    d}| j                  d|      \  }}| j                  |dt        z         y )Nzprint('\N{digit nine}')r   z9
r   r7   r   rY   rZ   s       r   test_ucnhash_capi_resetz&EmbeddingTests.test_ucnhash_capi_reset  s3    )001JDQSej01r   c                    t        j                  d      }i }t        |||       |d   }~|t        j                  d      z  }| j                  d||      \  }}|j	                  d      dd  }|D cg c]  }|j                  d      d    }}d | _        t        |d	      D ]  \  }}	t        j                  |	      }
|j                         D ]D  \  }}| j                  ||
      5  |
j                  |      }| j                  ||       d d d        F | j                  |
i         | j                  |d       y c c}w # 1 sw Y   |xY w)Na   
            import test.support

            results = {}
            def add(cls, slot, own):
                value = getattr(cls, slot)
                try:
                    subresults = results[cls.__name__]
                except KeyError:
                    subresults = results[cls.__name__] = {}
                subresults[slot] = [repr(value), own]

            for cls in test.support.iter_builtin_types():
                for slot, own in test.support.iter_slot_wrappers(cls):
                    add(cls, slot, own)
            resultsz
            import json
            import sys
            text = json.dumps(results)
            print(text, file=sys.stderr)
            r   z
--- Loop #r   z ---
)start)loopclsr*   )r   r   execr[   split
rpartitionr   r   jsonloadsitemssubTestpoprU   )r7   r   nsall_expectedrY   rZ   r   resr   textresult	classnameexpectedslotss                 r   !test_static_types_inherited_slotsz0EmbeddingTests.test_static_types_inherited_slots  sM    " " VR)}(// #  	 00)66;S))L)!"-;BC7C3>>(+B/7C 2GAtZZ%F'3'9'9';#	8\\qi\8"JJy1E$$UH5 98 (< VR( 3 	b! D 98s   1D;&$E  E	c                     t        j                  d      }| j                  d|      \  }}| j                  |dt        z         y )NaC  
            try:
                import _ssl
            except ModuleNotFoundError:
                _ssl = None
            if _ssl is not None:
                _ssl.txt2obj(txt='1.3')
            print('1')

            import _queue
            _queue.SimpleQueue().put_nowait(item=None)
            print('2')
        r   z1
2
)r   r   r[   rU   r   r   s       r    test_getargs_reset_static_parserz/EmbeddingTests.test_getargs_reset_static_parser  sE         001JDQSh34r   N)rs   rt   ru   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   requires_specializationr   r   r   r   rv   r   r   rx   rx      sy    G+>?*%)7V"""""""
"
=: $$$= %$=L2*"X5r   rx   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j                  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ej(                  j*                  dddddddddddddddddei dedd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i d/dd0ej,                  d1ed2dd3dd4dd5dd6dd7dd8dd9dd:dd;dd<dd=dd>dd?eedddddd@ddej0                   dedAZerej                  dBdi        eeeddCD      Z eeed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j?                  dI       ej?                  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[ Z0d\ Z1d] Z2d^ Z3d_ Z4d` Z5da Z6db Z7dc Z8dd Z9de Z:df Z;dg Z<dh Z=di Z> e?j                  dj      dk        ZAdl ZBdm ZCdn ZDdo ZEdp ZFdq ZGdr ZHds ZIddtZJeKj                  ddu       ZMdv ZNdw ZOdx ZP e?j                  edy      dz        ZR e?j                  ed{      d|        ZTd} ZU e?j                  ed~      d        ZVd ZWd ZXd ZYd ZZd Z[d Z\y)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int_max_str_digitsfaulthandlertracemallocperf_profiling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homer/   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_bytecoderS   quietuser_site_directoryconfigure_c_stdiobuffered_stdiostdio_encodingdefault)stdio_errorsskip_source_first_linerun_command
run_modulerun_filename_install_importlibcheck_hash_pycs_modepathconfig_warnings
_init_mainuse_frozen_modules	safe_path_is_python_buildlegacy_windows_stdior	   )r   r)  r   )r   r   r   r(  r7  r   r   r  r  r  r  r4  )Py_HasFileSystemDefaultEncodingPy_HashRandomizationFlag$_Py_HasFileSystemDefaultEncodeErrors)Py_UTF8Moder   ))Py_BytesWarningFlagr   )Py_DebugFlagr%  )Py_DontWriteBytecodeFlagr&  T) Py_FileSystemDefaultEncodeErrorsr  )Py_FileSystemDefaultEncodingr  )Py_FrozenFlagr4  T)Py_IgnoreEnvironmentFlagr   T)Py_InspectFlagr"  )Py_InteractiveFlagr#  )Py_IsolatedFlagr   )Py_NoSiteFlagr  T)Py_NoUserSiteDirectoryr(  T)Py_OptimizeFlagr$  )Py_QuietFlagr'  )Py_UnbufferedStdioFlagr*  T)Py_VerboseFlagrS   ))Py_LegacyWindowsFSEncodingFlagr   ))Py_LegacyWindowsStdioFlagr9  c                     d | _         y r?   )EXPECTED_CONFIG)r   s    r   tearDownClasszInitConfigTests.tearDownClass  s     #r   c                 `    i }|D ]&  }d|v r|j                  dd      \  }}|||<   "d||<   ( |S )N=r   T)r   )r7   xoptions_listr  optr$   values         r   main_xoptionszInitConfigTests.main_xoptions  sE     Ccz 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                  j                  d      }	 t        j                  |      S # t        j                  $ r | j!                  d|       Y y 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#   rH   rI   z)failed to get the default config: stdout=z stderr=r   fail to decode stdout: )r%   r   r   r.   r/   rM   r|   rO   rC   	ExceptionrH   rI   decoder   r   JSONDecodeErrorfail)r7   r#   r   rV   procrH   s         r   _get_expected_config_implz)InitConfigTests._get_expected_config_impl  s    #%    dD1~~d%/__%/__6 ?? &&*kk_HT[[OM N N##G,	<::f%%## 	<II/z:;	<s   6C 'C54C5c                 $   t         }|j                  | j                         |_        i }|j                  j                         D ]I  \  }}i }|j                         D ]*  \  }}t	        |t
              r|j                         }|||<   , |||<   K |S r?   )r   rQ  ra  r   
isinstancer!   rL   )r7   r   configs
config_keyconfig_valueconfigr$   rW  s           r   _get_expected_configz$InitConfigTests._get_expected_config  s    &"&"@"@"BC (+(;(;(A(A(C$JF*002
UeT*!JJLE#s 3 #)GJ )D r   c                    | j                         }|d   }|j                         D ]  \  }}	|	| j                  u s||   ||<    |d   r	|t        k(  rdD ]  }| j                  ||<    |d   s| j                  |d<   |d   dk(  rb|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                  j                  |d         }
n2t        j                  j                  t        j                         d      }
|d   | j                  u r|
|d<   |d   | j                  u r|
|d<   |d   | j                  u rd|d<   |d   }|j                         D ]  \  }}	|	| j                  u s||   ||<    |d   | j                  ur_|d   }|5|j                  t        j                  j                        }g ||d   |d<   |!|d   j                         |d<    ||d          | j                   D ]  }||vs||   ||<    y )N
pre_configr   )r  r  r+  r-  r   r   r  r   r  r+  r-  r   r  r)   r/   r  z./_testembedrg  r  r  )rh  r   GET_DEFAULT_CONFIG
API_COMPATIGNORE_CONFIGUTF8_MODE_ERRORSr   r1   r   r   abspathr0   r4   r   r   rL   COPY_PRE_CONFIG)r7   expected_preconfigr   r#   apimodify_path_cbrd  rj  r$   rW  default_executablerg  r  pathss                 r   get_expected_configz#InitConfigTests.get_expected_config  s   ++-\*
,224JC///*4S/"3' 5 ""45
9J: $ 2 2: ""45 /3.@.@{+k*a/-.$2I2II29./+,0G0GG040E0E,-()T-D-DD-4)*'4+B+BB+<(!%n%T-D-DD!#.1I!J!#biik<!HL!T%<%<<%7H\"%&$*A*AA*<H&'N#t'>'>>'5H^$""..*JC/// &s + )*$2D2DD%&67N)&,,RWW__=2\E2\HEZ<[2\./)2:;P2Q2V2V2X./x(=>?''C,,*23-"3' (r   c                     t        |d         }t        |j                               D ])  \  }}|| j                  u s|j	                  |d        ||= + | j                  ||       y )Nrj  )r   r!   r   rm  r   rU   )r7   rd  r   rj  r$   rW  s         r   check_pre_configz InitConfigTests.check_pre_config   s`    ',/0
x~~/0JC***sD)SM 1 	X.r   c                    t        |d         }t        r|j                  dx}      }|rt        |t              rt|d t        |j                         j                  d             }t        t        j                        r+|d t        |j                         j                  d             }|||<   t        |j                               D ])  \  }}|| j                  u s|j                  |d        ||= + | j                  ||       y )Nrg  r  r+   r   )r   r   getrc  r   rb   lowerremovesuffixr   r.   r/   r!   r   rm  r   rU   )r7   rd  r   rg  r$   rW  s         r   check_configzInitConfigTests.check_config  s    gh'(JJn4s5EE3/Fs5;;=#=#=f#EFGs~~.!"H3u{{}'A'A$'G#HIE#sx~~/0JC***

3%SM 1 	*r   c                 h   |d   }|d   }t        | j                        }| j                  D ]0  }t        |      dk(  r|\  }}}||   rdnd||<   $|\  }}||   ||<   2 | j                  D ]0  }t        |      dk(  r|\  }}}||   rdnd||<   $|\  }}||   ||<   2 | j                  |d   |       y )Nrj  rg  r
   r   r   global_config)r   DEFAULT_GLOBAL_CONFIGCOPY_GLOBAL_CONFIGrb   COPY_GLOBAL_PRE_CONFIGrU   )	r7   rd  rj  rg  r   item
global_keycore_keyopposites	            r   check_global_configz#InitConfigTests.check_global_config  s    \*
"223++D4yA~15.
Hh,28,<q!$'+$
H'-h'7$ , //D4yA~15.
Hh,6x,@qa$'+$
H'1(';$ 0 	18<r   F)preconfig_apir#   ignore_stderrrE   c                   t               }||j                  |       |}||}|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 |}| j                  |||||       | j                  |||
      \  }}||d   sd}|"|	s | j                  |j                         |       	 t        j                   |      }| j'                  |       | j)                  ||       | j+                  |       |S # t        j"                  $ r | j%                  d|       Y `w xY w)N)r#   rE   rS   r*   r[  )r%   updateAPI_ISOLATEDPRE_CONFIG_ISOLATED
API_PYTHONPRE_CONFIG_PYTHONPRE_CONFIG_COMPATr   CONFIG_PYTHONCONFIG_ISOLATEDCONFIG_COMPATrv  r[   rU   r   r   r   r^  r_  rx  r}  r  )r7   testnameexpected_configrq  rs  rI   rr  r  r#   r  rE   new_envdefault_preconfigdefault_configrY   rZ   rd  s                    r   check_all_configsz!InitConfigTests.check_all_configs-  s   
 ()?NN3 ML( $ 8 8j( $ 6 6 $ 6 6%!#!"3J7IJ" O*!//NL !11N!//N~AA  !3!0!$!$n	6
 0058c 1 CS>/)"<FmSZZ\62	9jjoG 	g'9:'?3  ) ## 	9II/w78	9s   E 'FFc                 2    | j                  dt               y )Ntest_init_initialize_configrr  r  rl  r@   s    r   test_init_default_configz(InitConfigTests.test_init_default_configc  s    <*Mr   c                 2    | j                  dt               y )Ntest_preinit_compat_configr  r  r@   s    r   r  z*InitConfigTests.test_preinit_compat_configf      ;Lr   c                 2    | j                  dt               y )Ntest_init_compat_configr  r  r@   s    r   r  z'InitConfigTests.test_init_compat_configi      8jIr   c                 `    ddi}ddddgdddddddddd}| j                  d||t        	       y )
Nr   r   z./globalvarr   default::BytesWarningr	   )r  r  r   r  r"  r#  r$  r&  rS   r'  r*  r(  r4  test_init_global_configr  r  r7   	preconfigrg  s      r   r  z'InitConfigTests.test_init_global_configl  s`    
	 *34"##$#$
  	8&)#- 	 	/r   c                 L   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gdg ddd	dg di dg 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d1| j                  d2dd3d4dd5}| j                  d6||t        7       y )8Nr   r   r   r   r   r  r  {   r  r	   r  r  r  r	  r  r+  	iso8859-1r-  replacer  conf_pycache_prefixr  z./conf_program_namer  rZ  arg2r  )python3-Wcmdline_warnoption-Xcmdline_xoptionrZ  passr  r   r  )zconfig_xoption1=3zconfig_xoption2=config_xoption3r  r  )r  r  config_warnoptionr/  pass
r  r   r"  r#  r$  r&  rS   r'  r)  r*  r(  r  r  my_platlibdirr  r7  iiz  always)r  r3  r4  test_init_from_configr  PYMEM_ALLOCATOR_MALLOCrm  r  rl  r  s      r   r  z%InitConfigTests.test_init_from_config  s   /
	7
%q7
Q7
 7
 1	7

 a7
 17
  7
 a7
 A7
 k7
 I7
 37
 17
  T6N!7
"  "#7
, !-7
.  /7
:  ;7
D 8E7
H 1I7
J QK7
L qM7
N 1O7
P !!Q7
R aS7
T qU7
V QW7
X  Y7
Z a[7
\ "1]7
^ A_7
` /a7
b "4#5#5c7
d e7
f #($,#$m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dgd| j                  ddd}| j                  d||t                y )!Nr   r  r   r  *   r  r	   r  r   r  r  r  r"  r$  r  /my/pathr  env_pycache_prefixr&  rS   r*  r+  r  r-  r  r(  EnvVarenv_platlibdir  r  r  r  r  r7  r  test_init_compat_envr  r  r  s      r   r  z$InitConfigTests.test_init_compat_env  s   /
	
Q

 1
 a	

 1
  
 A
 q
 !!
 j
 2
 a
 q
 a
 k
  I!
" "1#
$ $:*#'#5#5"&/
2 	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dgd| j                  ddd}| j                  d||t                y )!Nr   r  r  r  r  r  r	   r  r   r  r  r  r"  r$  r  r  r  r  r&  rS   r*  r+  r  r-  r  r(  r  r  r  r  test_init_python_envr  )r  rm  r  r  r  s      r   r  z$InitConfigTests.test_init_python_env  s   /
	
Q

 1
 a	

 1
  
 A
 q
 !!
 j
 2
 a
 q
 a
 k
  I!
" "1#
$ $:*#'#5#5"&/
2 	5vy#- 	 	/r   c                 t    t        t              }t        dddg      }| j                  d||t               y )Nr   r   r,  r   r  r  test_init_env_dev_moder  )r   PYMEM_ALLOCATOR_DEBUGr  rl  r  s      r   r  z&InitConfigTests.test_init_env_dev_mode  s@    #89	q#$#,+/ 	7#- 	 	/r   c                 t    t        t              }t        dddg      }| j                  d||t               y )Nr  r   r,  r  test_init_env_dev_mode_allocr  )r   r  r  rl  r  s      r   r  z,InitConfigTests.test_init_env_dev_mode_alloc  s@    #9:	q#$#,+/ 	=vy#- 	 	/r   c                 T    dt         i}dddgd}| j                  d||t               y )Nr   r   r,  )r  r   r  test_init_dev_moder  )r  r  r  r  s      r   r  z"InitConfigTests.test_init_dev_mode  sB    .
	 %;

 	3VY#- 	 	/r   c           	          dt         i}dgg dt        j                  j                  d      dddgdgdd}| j	                  d||t
        	       y )
Nr   	script.py)r  r  dev-Pr  r   r,  r  )r  r  r1  r   r  r  r  r7  test_preinit_parse_argvr  )r  r   r   ro  r  r  r  s      r   r  z'InitConfigTests.test_preinit_parse_argv   sd     .
	 !MDGGOOK8%;	
 	8&)#- 	 	/r   c                 R    ddi}g d}||dd}| j                  d||t               y )Nr   r   )	r  -E-Ir  r  r  r  utf8r  )r  r  r   test_preinit_dont_parse_argvr  r  r  )r7   r  r  rg  s       r   r  z,InitConfigTests.test_preinit_dont_parse_argv3  sH     
	 

 	=vy#/ 	 	1r   c                 B    ddddd}| j                  d|t               y )Nr   r   r   r7  r   r(  test_init_isolated_flagr  r  r  r7   rg  s     r   r  z'InitConfigTests.test_init_isolated_flagE  s-     #$	
 	8&jQr   c                 B    ddddd}| j                  d|t               y )Nr   r   r  test_preinit_isolated1r  r  r  s     r   r  z&InitConfigTests.test_preinit_isolated1N  /      #$	
 	7ZPr   c                 B    ddddd}| j                  d|t               y )Nr   r   r  test_preinit_isolated2r  r  r  s     r   r  z&InitConfigTests.test_preinit_isolated2X  r  r   c                 2    | j                  dt               y )Ntest_preinit_isolated_configr  r  r@   s    r   r  z,InitConfigTests.test_preinit_isolated_configb  s    =<Pr   c                 2    | j                  dt               y )Ntest_init_isolated_configr  r  r@   s    r   r  z)InitConfigTests.test_init_isolated_confige  s    :Mr   c                 2    | j                  dt               y )Ntest_preinit_python_configr  r  r@   s    r   r  z*InitConfigTests.test_preinit_python_configh  r  r   c                 2    | j                  dt               y )Ntest_init_python_configr  r  r@   s    r   r  z'InitConfigTests.test_init_python_configk  r  r   c                 @    ddd}| j                  di |t               y )Nr   )r   r   test_init_dont_configure_localer  r  )r7   r  s     r   r  z/InitConfigTests.test_init_dont_configure_localen  s0     !" 
	 	@"i#- 	 	/r   zSas of 3.11 this test no longer works because path calculations do not occur on readc                 H    dddd}d }| j                  d|t        |       y )Nz./init_read_setmy_executable)r  r/   r  c                 J    | j                  dd       | j                  d       y )Nr   test_path_insert1test_path_append)insertrl   )r   s    r   modify_pathz7InitConfigTests.test_init_read_set.<locals>.modify_path  s    KK./KK*+r   test_init_read_set)rr  rs  r  )r7   rg  r  s      r   r  z"InitConfigTests.test_init_read_setw  s9     .).

	, 	3V#-.9 	 	;r   c                 N    dg dg dg dd}| j                  d|t               y )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  s3    
3
" 	2F
Kr   c                 Z    d}ddgdd|dgd|dz   dd}| j                  d	|t        
       y )NRimport _testinternalcapi, json; print(json.dumps(_testinternalcapi.get_configs()))rZ  r  r  	./python3r   r	   )r  r  r  r/  r   test_init_run_mainr  r  r7   r   rg  s      r   r  z"InitConfigTests.test_init_run_main  sK    E 6N#T48'$;
 	3VLr   c                 ^    d}ddgdd|dgd|dz   ddd	}| j                  d
|t        d       y )Nr   rZ  r  r  r  r   r	   r   )r  r  r  r/  r   r5  test_init_mainz)Run Python code before _Py_InitializeMain)rr  rI   r  r  s      r   r  zInitConfigTests.test_init_main  s]    E 6N# " ($;	
 	/#-&Q 	 	Sr   c                 N    dg dg ddddd}| j                  d|t        	       y )
Nr	   )rZ  arg1-varg3./argv0r  rZ  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_argv  s3    0N%# 
 	5v:Nr   c                 T    ddi}dg dg ddd}| j                  d||t               y )Nr   r   r
  r  )r   r  r  r  test_init_dont_parse_argvr  r  )r7   rj  rg  s      r   r  z)InitConfigTests.test_init_dont_parse_argv  sB    !

 IN%	
 	:FJ#- 	 	/r   c                     t         rd}| j                  }n.d}t        r| j                  }nt        j                  |      xs d}|j                  |||d       y )Nr   r  r*   )r  r  r/   )r   r1   MACOSshutilwhichr  )r7   rg  r  r/   s       r   default_program_namez$InitConfigTests.default_program_name  sQ    #LJ$L!]]
#\\,7=2
()$
 	r   c                     | j                         }|d   d   }|dddddd}| j                  |       dt        j                  j                  j                  |      i}| j                  d|t        |d       y )	Nrg  r  r*   )r  r  r  r  r  r  TESTPATHtest_init_setpathTrr  r#   r  )rh  r  r   r   r   r0   r  rl  r7   rg  ru  r#   s       r   r  z!InitConfigTests.test_init_setpath  s    **,x !67 $) " 	
 	!!&)277??//672F#-3-1 	 	3r   c                     | j                         }|d   d   }|dddddt        j                   dddd
}dt        j                  j
                  j                  |      i}| j                  d|t        |d	
       y )Nrg  r  r*   conf_program_nameconf_executable)
r  r  r  r  r  r  r6  r  r  r/   r  test_init_setpath_configTr  )	rh  r   Py_DEBUGr   r   r   r0   r  r  r  s       r   r  z(InitConfigTests.test_init_setpath_config  s    **,x !67 $) " &-&6&6"6/0+
  277??//6796#-3d 	 	Lr   c           
      <   | j                         }||d   d   }||d   d   }t        r|d   d   S t        j                  }t        j
                  j                  |t        j                  d|j                   |j                   d      t        j
                  j                  |t        j                  d|j                   d|j                         t        j
                  j                  |t        j                  d|j                   d|j                   d      gS )Nrg  r  r  r   z.zipr   lib-dynload)
rh  r   r.   version_infor   r   r0   r  majorminor)r7   r  r  rg  vers        r   r  z#InitConfigTests.module_search_paths  s    **,>H%h/F *84K(#$9::""CVS^^%cii[4@BVS^^%cii[#))=?[#..%cii[#))=}N r   c           	   #     K   t        j                         5 }t        j                  j	                  |      }|rRt        j                  j                  t        j                  j                  ||            }t        j                  |       t        rdd l	}t        j                  j                  | j                        }t        j                  |      D ]g  }|j                  |d      st        j                  t        j                  j                  ||      t        j                  j                  ||             i t        j                  j                  |t        j                  j                  | j                              }t        j                  | j                  |       t        j                   | j                  |       || _        | d d d        y # 1 sw Y   y xY ww)Nr   z*.dll)tempfileTemporaryDirectoryr   r   realpathnormpathr0   makedirsr   fnmatchr-   r1   listdirr  copyfiler   copystat)r7   subdirtmpdirr*  exedirf	exec_copys          r   tmpdir_with_pythonz"InitConfigTests.tmpdir_with_python!  s,     ((*f WW%%f-F))"'',,vv*FGF#7F+Aq'2VQ(?fVWAXY ,
 VRWW-=-=dmm-LMIOODMM95OODMM95%DML/ +**s$   G$CG)C&G	G$G!G$c           	         | j                         }|d   d   }t        j                  j                  j	                  |      }|D ]  }t        j                  j                  |      s#t        j                  j                  t        j                  j	                  |d            sat        j                  j                  |      } n | j                  d|       x}}t        rGt        j                  j	                  |d      }|d   t        j                  j	                  |d      |g}	n|t        j                  j                   dt        j                  j                   }
t        j                  j	                  |t        j                  d	|
       }| j                  ||
      }	||	||||||d}| j!                  |       ||d}| j#                  d|t$        |       y )Nrg  r  r   Unable to find home in Libr   DLLsr   r   r  r  r  r  r  r  r  r  r  r  TESTHOMEr   test_init_setpythonhomerr  r#   )rh  r   r   r   r0   isdirr2   r-   r_  r   r.   r   r!  r"  r  r  r  r  rl  )r7   rg  ru  	paths_strr   r  r  r  stdlibexpected_pathsversionr#   s               r   r<  z'InitConfigTests.test_init_setpythonhome=  s   **,x !67GGOO((/	D77==&ww~~bggll49:wwt,  II/y9:##WW\\$.F $AhT6(BFKN))//0#2B2B2H2H1IJGWW\\$&	8JKF!55Tt5TN #1!& +' 	
 	!!&)y98&#-3 	 	8r   c           	      6   | j                         }|d   d   }t        j                  j                  j	                  |      }|D ]  }t        j                  j                  |      s#t        j                  j                  t        j                  j	                  |d            sat        j                  j                  |      } n | j                  d|       x}}t        rGt        j                  j	                  |d      }|d   t        j                  j	                  |d      |g}	n|t        j                  j                   dt        j                  j                   }
t        j                  j	                  |t        j                  d	|
       }| j                  ||
      }	||	||||||d}||d}d|d<   d|d<   | j!                  d|t"        |       d|d<   d|d<   t        j                  j                  t        j$                        }t'        t        j                  j	                  |d      d      5 }t        j                  j)                  t        j                  j	                  ||j+                          dj-                         d               |	t        rdnd<   d d d        t        s?t        j.                  x}}| j                  |      d   |	d<   |j1                  ||||       | j!                  d|t"        |       y # 1 sw Y   hxY w)Nrg  r  r   r5  r6  r   r7  r   r   r8  r9  r:  1NEGATIVE_ISPYTHONBUILDr8  test_init_is_python_buildr=  rz   r   pybuilddir.txtr  r   z
$r	   )r  )r  r  r  r  )rh  r   r   r   r0   r>  r2   r-   r_  r   r.   r   r!  r"  r  r  r  rl  r/   r   r(  r   r`   r  r  )r7   rg  ru  r?  r   r  r  r  r@  rA  rB  r#   r0  r1  s                 r   #test_init_is_python_build_with_homez3InitConfigTests.test_init_is_python_build_with_homef  s   **,x !67GGOO((/	D77==&ww~~bggll49:wwt,  II/y9:##WW\\$.F $AhT6(BFKN))//0#2B2B2H2H1IJGWW\\$&	8JKF!55Tt5TN #1!& +' 	
  y9(+$%%&!":F#-3 	 	8 ),$%%&!"0"'',,v'786Ja57WW5E5EVz%5%@%@%B1%EF6HN
12 K #&::-F[ $ 8 8 8 G JN1MMV&1K  Q:F#-3 	 	8 KJs   =A+LLc                     | j                         }|d   d   }t        j                  j                  j	                  |      }||d<   d|i}|S )Nrg  r  r  r   )rh  r   r   r   r0   )r7   rg  all_configsru  r?  r#   s         r   copy_paths_by_envz!InitConfigTests.copy_paths_by_env  sR    //1H%&;<GGOO((/	#, Y'
r   zSee test_init_pybuilddir_win32c           	         | j                         5 }t        j                  d      xs d}d}t        j                  j                  ||      }t        j                  j                  t        j                  j                  ||d            }t        j                  |       t        j                  j                  |d      }t        |dd      5 }|j                  |       d d d        | j                         }||d	<   ||d
<   | j                  }	t        j                  d      t        j                  d      |	|	||d}
| j                  |
      }| j                  d|
t        |d|       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NVPATHr*   libdirr6  rG  wr  r   r   r  r  )r  r  r  r/   r  r  r  Trr  r#   r  rE   )r3  	sysconfigget_config_varr   r   r0   r(  mkdirr   writer  r1   rK  r  rl  )r7   r/  vpathr.  rN  	stdlibdirfilenamer   r  r/   rg  r#   s               r   test_init_pybuilddirz$InitConfigTests.test_init_pybuilddir  sU    $$&& ,,W5;EFWW\\&&1F((feU)KLIHHVww||F,<=Hhf5  6 #'":":"<&/#&,#J$-$<$<]$K(77A#-(':'F ((0C""#<f'1s156 # C9 '& 65 '&s%   B=E>E2 B	E>2E;	7E>>FzSee test_init_pybuilddirc           
         t        j                  d      }d}t        j                  j	                  |      j                  t        j                        dk(  r t        j                  j                  |d      }| j                  |      5 }t        j                  j	                  t        j                  j                  ||            }t        j                  j	                  t        j                  j                  ||d            }t        j                  j                  |d      }t        |dd	      5 }|j                  |       d d d        | j                         }t        j                  j                  |t        j                  j                  |d
               |d
<   ||d<   ||d<   | j                  }	|||	|	||||d}
| j                  |
      }| j                  d|
t         |d|       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrM  zPCbuild\archr	   instrumentedr6  rG  rO  r  r   rP  r   )r  r  r  r/   r  r  r  r  r  FrQ  )rR  rS  r   r   r(  countsepr0   r3  r   rU  r  r   r1   rK  r  rl  )r7   rV  r.  r/  r  rW  rX  r   r  r/   rg  r#   s               r   test_init_pybuilddir_win32z*InitConfigTests.test_init_pybuilddir_win32  s    ((1 77E"((0A5WW\\&.9F$$V,WW%%bggll65&ABF((feU)KLIww||F,<=Hhf5  6 #'":":"<&(ggll6277;K;KL_`bLc;d&e#&,#&/#J$*%#-( %':'	F ((0C""#<f'1s16F # D7 -, 65 -,s&   B*H2G5B(H5G>	:HH
c           
         | j                         5 }t        j                         5 }t        j                  }t
        s`t        j                  j                  |t        j                  d|j                   d|j                   d      }t        j                  |       nt        j                  j                  |d      }t        j                  |       t        j                  t        j                  j                  t        j                   d      t        j                  j                  |d             t        j                  j                  |d      }t#        |dd	      5 }t%        d
|z  |       t%        d|       d d d        | j'                         }t
        s|d<   nat        j                  j                  |t        j                  j)                  |d               |t        j                  j                  |d      g}| j*                  }	t        j                  j                  |t        j                  j)                  |	            }
|}t-        j.                  d      |||
|	|d}t
        rK||d<   ||d<   t        j                  j                  |d      |d<   t1        t        j2                         |d<   n,| j4                  |d<   t1        t        j2                         |d<   | j7                  |      }| j9                  d|t:        |d|       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r  r6  r   z
pyvenv.cfgrO  r  r   z	home = %sfilez$include-system-site-packages = falser   r   r  )r  r  r  r  r/   r  r  r  r6  r  TrQ  )r3  r%  r&  r.   r   r   r   r   r0   r  r!  r"  r)  r  r,  r   
STDLIB_DIRr   rT   r  r   r1   rR  rS  r   r  rm  rK  r  rl  )r7   r/  pyvenv_homer#  lib_dynload
lib_folderrX  r   ru  r/   r  r  rg  r#   s                 r   test_init_pyvenv_cfgz$InitConfigTests.test_init_pyvenv_cfg  s    $$&&((*k""C ggll;+.>>-3CII;a		{+K+8: K(WW\\+u=
J'GGLL!3!3W=GGLLW5
 ww||FL9Hhf5kK/b9<2F 6 ,,.E'b	 GGLL)9)9%()CDGGLLe4 J ggll;8H8H8TUO%K(77A$/*#2(',F (3}%#.x ')ww||K'G|$/2w7G7G3G/H+, (,'9'9|$/2w7G7G3G/H+,((0C""#<f'1s156 # Cq + '&( 65' +* '&s<   L=D:L1 L$>FL1L=$L.)L11L:	6L==Mzspecific to Windowsc           	         ddddddt        j                          dfg}| j                  di t               d	t         j                  j
                  j                  d
 |D              i      \  }}| j                  |d       	 t        j                  |      }|d   d   }t        ||      D ]  \  \  }}}| j                  ||        y # t        j                  $ r | j                  d|       Y [w xY w)N)z	C:/a. . .	C:\a. . .)ri  ri  )z\\?\C:////a////b. . .z\\?\C:\a\b. . .)z//a/b/c. . .\\a\b\c. . .)rj  rj  za. . .z\ar  r   c              3   &   K   | ]	  }|d      yw)r   Nrv   ).0cs     r   	<genexpr>z=InitConfigTests.test_getpath_abspath_win32.<locals>.<genexpr>F  s     3H%QAaD%s   r   r*   r[  rg  r  )r   r4   r[   r%   r   r   r0   rU   r   r   r^  r_  zip)r7   CASESrY   rZ   r   r   r   r   s           r   test_getpath_abspath_win32z*InitConfigTests.test_getpath_abspath_win326  s    )(@04"))+c*+
 00)J(* Jrww333H%3HHJ 1 
S
 	b!	9**S/C h- 56%(%8!MQ6VX. &9	 ## 	9II/w78	9s   C 'C65C6c                 p  
 t        j                  d      
t        j                  d      }
fd} |d      } |d      } |d      } |d      } |d      } |d	      }|j                         d
   }	| j                   |       j	                  t
        j                  j                        |	d          | j                   |       |	d          | j                   |       |	d          | j                   |       |	d          | j                   |       |	d          | j                   |       |	d          y )Nctypes_testinternalcapic                 d    t        j                  |       }d|_        j                  |_        |S )Nrv   )getattr	pythonapiargtypes	c_wchar_prestype)r   funcrs  s     r   get_funcz8InitConfigTests.test_global_pathconfig.<locals>.get_funca  s.    6++T2DDM!++DLKr   
Py_GetPathPy_GetPrefixPy_GetExecPrefixPy_GetProgramNamePy_GetProgramFullPathPy_GetPythonHomerg  r  r  r  r  r/   r  )r   import_moduleget_configsrU   r   r   r   r   )r7   rt  r|  r}  r~  r  r  r  r  rg  rs  s             @r   test_global_pathconfigz&InitConfigTests.test_global_pathconfigR  s-    ,,X6)778KL	 l+
/#$67$%89 ()@ A#$67"..0:++BGGOO< 56	8)9:)+VM-BC*,f^.DE.0&2FG)+VF^<r   c                 r    g d}t        t              }ddd|g dd}| j                  d||t               y )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  )r7   r  r  rg  s       r   r  z%InitConfigTests.test_init_warnoptionsx  sM    + #89	&1
 	6	#- 	 	/r   c                 B    dddgd}| j                  d|t               y )Nr   r	   zerror::BytesWarning)r5  r   r  test_init_set_configr  r  r  s     r   r  z$InitConfigTests.test_init_set_config  s2    12

 	5v#/ 	 	1r   c                 &    | j                  d       y )Ntest_get_argc_argvr[   r@   s    r   r  z"InitConfigTests.test_get_argc_argv  s    %%&:;r   c           
          h d}|D ]c  \  }}d| }ddgdd|ddgddd	|g|d
}|rd|d	d  ind }| j                  t        |            5  | j                  d|t        |       d d d        e y # 1 sw Y   pxY w)N>   z=onr   z=offr   r*   r   rT  r   frozen_modulesr	   rZ  r  r  r  r  r   )r   r  r  r  r/  r   r  r6  
TESTFROZENtest_init_use_frozen_modulesr=  )r   reprr  r  )r7   testsrawr   optvalrg  r#   s          r   r  z,InitConfigTests.test_init_use_frozen_modules  s    
 #MC%cU+F'vtVD )'#$#H&.	F .1<QR)dCd3i(&&'Ev+53 ' @ )( # )(s   	A..A7	c                 4   d}d}d}d}d}d}||z  |z  |z  |z  dd}| j                  d	      \  }}	| j                  |	d
       	 t        j                  |      }| j                  ||       y # t        j                  $ r | j                  d|       Y <w xY w)N       i   i   i   i   T)feature_flagsown_gil#test_init_main_interpreter_settingsr*   r[  )r[   rU   r   r   r^  r_  )
r7   OBMALLOC
EXTENSIONSTHREADSDAEMON_THREADSFORKEXECr   rY   rZ   s
             r   r  z3InitConfigTests.test_init_main_interpreter_settings  s    
 4$&0>A	
 001
S 	b!	9**S/C 	h' ## 	9II/w78	9s   A- -'BBr?   )NNNN)NN)]rs   rt   ru   r   r   rn  objectrk  rm  rl  PYMEM_ALLOCATOR_NOT_SETr  r  r   r  r  r  r  rp  r.   int_infodefault_max_str_digitsr  r   r  r  r  r  r  r  r  rK   rQ  classmethodrR  rX  ra  rh  rv  rx  r}  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contextmanagerr3  r<  rH  rK  skipIfrY  
skipUnlessr_  rg  rq  r  r  r  r  r  r  rv   r   r   r   r     s   G+5;L   HM #, !   (!"
 	 .*$	 0!OJ
JAJ 	1J 	A	J 	"1J 	J 	QJ 	cllAAJ 	J 	qJ 	!J 	qJ 	QJ 	!J  	Q!J" 	#J& 	1'J( 	/)J, 	$-J. 	*/J0 	a1J2 	3J4 	R5J8 	B9J: 	r;J> 	$?J@ 	AJB 	(CJD 	-EJH 	$IJJ 	)KJL 	)MJN 	.OJP 	1QJR 	"1SJT 	cnnUJV 	(WJZ 	q[J\ 	]J^ 	 _J` 	1aJb 	qcJd 	aeJf 	gJh 	!iJj 	1kJl 	mJn 	qoJp 	QqJr 	!sJv 	,wJx +"# ) ")"2"22)SJMV "A
 	 M
 =! !O 23./ ,-$%01 	%( %% '
 	 	!! #
 	 O# #<>" 6:=8~/+=, ;?-1)-!%4 >B"%T	4lNMJ/.>/@/@/B//
//&1$RQQQNMJ/ X]] < =;=;L(
MS"	O/ 3,L2&  6'8R:8x X__Z!AB!C C!CF X%?@%D A%DN>C@ X%:;/ </6$=L/61<@0(r   r   c                       e Zd Zd Zy)SetConfigTestsc                    t        j                  d       t        j                  dddddg}t	        j
                  |t        j                  t        j                  dd	      }|j                  r:t        j                  r*t        |j                         t        |j                         | j                  |j                  d
|j                  |j                  |j                  f       y )N	_testcapir  r  r  z-mztest._test_embed_set_configr   backslashreplace)rH   rI   r   r   r   )r   r  r.   r/   rM   r|   rO   rC   r   rS   rT   rH   rI   rU   )r7   rW   r`  s      r   test_set_configzSetConfigTests.test_set_config  s    ##K0~~tVT49VW~~c%/__%/__'.7IK ??w$++$++!//4;;D	Fr   N)rs   rt   ru   r  rv   r   r   r  r    s    Fr   r  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)AuditingTestsc                 &    | j                  d       y )Ntest_open_code_hookr  r@   s    r   r  z!AuditingTests.test_open_code_hook  s    %%&;<r   c                 &    | j                  d       y )N
test_auditr  r@   s    r   r  zAuditingTests.test_audit  s    %%l3r   c                 &    | j                  d       y )Ntest_audit_subinterpreterr  r@   s    r   r  z'AuditingTests.test_audit_subinterpreter      %%&ABr   c                 H    | j                  dt        j                  d       y )Ntest_audit_run_commandr   rB   rC   r[   r   SHORT_TIMEOUTr@   s    r   r  z$AuditingTests.test_audit_run_command  s$    %%&>.5.C.C12 	& 	4r   c                 H    | j                  dt        j                  d       y )Ntest_audit_run_filer   r  r  r@   s    r   r  z!AuditingTests.test_audit_run_file  s$    %%&;.5.C.C12 	& 	4r   c                    t         j                  j                  | j                  t        j
                        dz   }t        |dd      5 }t        d|       t        d|       d d d        	 i t               d|i}| j                  d	t        j                  d
|       t        j                  |       y # 1 sw Y   SxY w# t        j                  |       w xY w)N.pyrO  r   r   z
import sysra  z&sys.__interactivehook__ = lambda: NonePYTHONSTARTUPtest_audit_run_interactivehook
   rB   rC   r#   r   r   r0   r5   r   TESTFNr   rT   r%   r[   r   r  unlinkr7   startupr1  r#   s       r   r  z,AuditingTests.test_audit_run_interactivehook  s    '',,t{{I,<,<=E'31Q,Q':C 2	G*,GowGC))*J292G2G57S * B IIg 21 IIgs   
B7.3C 7C Cc                    t         j                  j                  | j                  t        j
                        dz   }t        |dd      5 }t        d|       d d d        	 i t               d|i}| j                  dt        j                  d	|
       t        j                  |       y # 1 sw Y   SxY w# t        j                  |       w xY w)Nr  rO  r   r   r  ra  r  test_audit_run_startupr  r  r  r  s       r   r  z$AuditingTests.test_audit_run_startup  s    '',,t{{I,<,<=E'31Q&q! 2	G*,GowGC))*B292G2G57S * B IIg 21 IIgs   
B*!3B6 *B36Cc                 H    | j                  dt        j                  d       y )Ntest_audit_run_stdinr   r  r  r@   s    r   r  z"AuditingTests.test_audit_run_stdin  s$    %%&<.5.C.C12 	& 	4r   c                 &    | j                  d       y )Ntest_get_incomplete_framer  r@   s    r   r  z'AuditingTests.test_get_incomplete_frame  r  r   N)rs   rt   ru   r  r  r  r  r  r  r  r  r  rv   r   r   r  r    s1    =4C4
4

4
Cr   r  c                       e Zd Zd Z ej
                  ej                  dk(  d      d        Z ej                  e
j                  d      d        Zy)	MiscTestsc                 &    | j                  d       y )Ntest_unicode_id_initr  r@   s    r   r  zMiscTests.test_unicode_id_init  s     	%%&<=r   ntz(Py_FrozenMain is not exported on Windowsc                    t        t        j                        }d|d<   | j                  d|      \  }}t        j                  j                  d      }t        j                  d| d      j                         }| j                  ||       y )NrD  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   lstriprU   )r7   r#   rY   rZ   r/   r   s         r   r  zMiscTests.test_frozenmain  s     2::"%001B0LSWW%%i0
?? (  !+| ,		$  VX 	 	h'r   z--X showrefcount requires a Python debug buildc           	         d}|D ]0  \  }}d| }t         j                  dddd|d|g}t        j                  |t        j                  t        j
                  d      }| j                  |j                  d	       |j                  j                         }t        j                  d
|      }|s| j                  d|       t        |j                  d            }	t        |j                  d            }
| j                  ||      5  | j                  |	d	|       | j                  |
d	|       d d d        3 y # 1 sw Y   ?xY w)N))offr  )onr  )r  import __hello__)r  r  zfrozen_modules=r  r  showrefcountrZ  T)rH   rI   r   r   z!^\[(-?\d+) refs, (-?\d+) blocks\]zunexpected output: r   r	   )r  stmt)r.   r/   rM   r|   rO   STDOUTrU   rC   rH   r   rd   re   r_  r   groupr   )r7   r  flagr  xoptrW   r`  rY   re   refsblockss              r   test_no_memleakzMiscTests.test_no_memleak0  s   
  JD$$TF+D>>4~tT4QUVC>>#)3)3):):'+-D T__a0++$$&CHHA3GE		/w78u{{1~&DQ(FT=  q#.  C0 >=   >=s   'D::E	N)rs   rt   ru   r  r   r  r   r   r  r  r   r  r  rv   r   r   r  r    sc    > X__RWW_?A(A(  X))HJ1J1r   r  __main__)5testr   test.supportr   r   r   r   collectionsr   r  ior   r   os.pathrd   r  rM   r.   rR  r%  r   has_subprocess_supportr   platformr  r  r  r  rl  r  r  r   MAX_HASH_SEEDr   r0   r  r  r   r!  r"  STDLIB_INSTALLisfiler   r%   r'   TestCaserx   r   r  r  r  rs   rq   rv   r   r   <module>r     s    = =  "  	  	  	   
   %%
(

=
>>		!    



 cjj#..S##$Ac&6&6&<&<%=>@	ww~~bggll>7;<N5j! j!Z\5((*;*; \5~E()8+<+< E(P(FX&& F 3C'):): 3Cl31#X%6%6 31l zHMMO r   