
    z%i                       d dl mZ 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j0                  d	k(  Zd Zd
ZdZdZd
ZdZdZ dZ!ejD                  jG                  ejH                  ejJ                  dejL                  jN                   dejL                  jP                         Z)ejD                  jU                  ejD                  jG                  e)d            sdZ)d Z+d Z, G d d      Z- G d de-ej\                        Z/ G d de-ej\                        Z0 G d dej\                        Z1 G d de-ej\                        Z2 G d de-ej\                        Z3 G d  d!e-ej\                        Z4e5d"k(  r ejl                          yy)#    )support)import_helper)	os_helper)requires_specializationN)
namedtupleztest module requires subprocessnt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     C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_embed.pydebug_buildr   0   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&   6   s=    
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
executable
MS_WINDOWSr   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   r8   r7   r9   s    r   tearDownzEmbeddingTestsMixin.tearDownR   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)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   s$    	6}}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]   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   sw    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?   rC   r]   rt    r   r   r(   r(   ?   s&    $ 37)-!4%)!F1!r   r(   c                   z    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d        Zd Zy)EmbeddingTestsi  c                 p    | j                         D ]#  }|d   }| j                  |j                  d       % y )Nr   0)rt   rW   id)r9   runrs   s      r   test_subinterps_mainz#EmbeddingTests.test_subinterps_main   s7    ==? 	+Cq6DTWWc*	+r   c           	          | j                         D ][  }|^}}}t        |j                        }t        |      D ]0  \  }}| j	                  |j                  t        ||z   dz                2 ] y )Nr   )rt   intr}   	enumeraterW   str)r9   r~   rs   subs_mainidisubs           r   test_subinterps_different_idsz,EmbeddingTests.test_subinterps_different_ids   sj    ==? 	>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)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 ? ##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]   rW   range
INIT_LOOPSr2   )r9   r[   r\   r   liness        r   r   z-EmbeddingTests.test_repeated_init_and_inittab   sw    001QRSb!.3Az!|.DE9QCt$E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   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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 )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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 )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  sv    	 $%JJOOCHH5L00=3 1 HSD 	
 	os+b!r   c                 v    	 | j                  d      \  }}| j                  |d       | j                  |d       y )Ntest_bpo20891r+   r]   rW   r9   r[   r\   s      r   r   zEmbeddingTests.test_bpo20891%  s=    	 00ASb!b!r   c                 v    	 | j                  d      \  }}| j                  |d       | j                  |d       y )Ntest_initialize_twicer+   r   r   s      r   r   z$EmbeddingTests.test_initialize_twice.  s>    	 001HISb!b!r   c                     	 | j                  d      \  }}| j                  |j                         d       | j                  |d       y )Ntest_initialize_pymainz6Py_Main() after Py_Initialize: sys.argv=['-c', 'arg2']r+   r]   rW   rstripr   s      r   r   z%EmbeddingTests.test_initialize_pymain7  sE    	 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 )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  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]   rW   r   )r9   scriptfpcoder[   r\   s         r   test_finalize_structseqz&EmbeddingTests.test_finalize_structseqL  sn     !!"<=&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]   rW   r   r   s      r   test_simple_initialization_apiz-EmbeddingTests.test_simple_initialization_apiX  s.     001LMSmj89r   c                     t        j                  d      }| j                  } |d|      \  }}| j                  |dt        z         y )Na#              import dis
            import importlib._bootstrap
            import opcode
            import test.test_dis

            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(test.test_dis.ADAPTIVE_WARMUP_DELAY):
                func(importlib._bootstrap, ["x"], lambda *args: None)

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

            print("Tests passed")
        r   r   )textwrapdedentr]   rW   r   )r9   r   r~   r[   r\   s        r   >test_specialized_static_code_gets_unspecialized_at_Py_FINALIZEzMEmbeddingTests.test_specialized_static_code_gets_unspecialized_at_Py_FINALIZE^  sK        > ++0$7S.;<r   c                 d    d}| j                  d|      \  }}| j                  |dt        z         y )Nzprint('\N{digit nine}')r   z9
r   )r9   r   r[   r\   s       r   test_ucnhash_capi_resetz&EmbeddingTests.test_ucnhash_capi_reset  s3    )001JDQSej01r   N)ru   rv   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r   r   rz   rz      sh    G+>?*%)7V"""""""
"
=: $= $=L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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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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  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 | _         y rA   )EXPECTED_CONFIG)clss    r   tearDownClasszInitConfigTests.tearDownClassE  s     #r   c                 `    i }|D ]&  }d|v r|j                  dd      \  }}|||<   "d||<   ( |S )N=r   T)split)r9   xoptions_listr   optr%   values         r   main_xoptionszInitConfigTests.main_xoptionsJ  sJ      	%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$   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_implT  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 rA   )r   r6  rJ  items
isinstancer"   rN   )r9   r7  configs
config_keyconfig_valueconfigr%   r>  s           r   _get_expected_configz$InitConfigTests._get_expected_configs  s    &"&"@"@"BC (+(;(;(A(A(C 	)$JF*002 $
UeT*!JJLE#s$ #)GJ	) 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*   r0   r   z./_testembedrQ  r   r   )rR  rL  GET_DEFAULT_CONFIG
API_COMPATIGNORE_CONFIGUTF8_MODE_ERRORSr1   r3   r   r   abspathr2   r6   r;  r   rN   COPY_PRE_CONFIG)r9   expected_preconfigexpectedr$   apimodify_path_cbrN  rT  r%   r>  default_executablerQ  r   pathss                 r   get_expected_configz#InitConfigTests.get_expected_config  s   ++-\*
,224 	:JC///*4S/"3'	: ""45
9J: 3 $ 2 23 ""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(=>?'' 	8C,,*23-"3'	8r   c                     t        |d         }t        |j                               D ])  \  }}|| j                  u s|j	                  |d        ||= + | j                  ||       y )NrT  )r    r"   rL  rW  poprW   )r9   rN  r\  rT  r%   r>  s         r   check_pre_configz InitConfigTests.check_pre_config  se    ',/0
x~~/0 	"JC***sD)SM	" 	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 )NrQ  r   r,   r   )r    r1   getrM  r   rd   lowerremovesuffixr   r/   r0   r"   rL  rW  rc  rW   )r9   rN  r\  rQ  r%   r>  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~~/0 	"JC***

3%SM	" 	*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 )NrT  rQ  r   r   r   global_config)r    DEFAULT_GLOBAL_CONFIGCOPY_GLOBAL_CONFIGrd   COPY_GLOBAL_PRE_CONFIGrW   )	r9   rN  rT  rQ  r\  item
global_keycore_keyopposites	            r   check_global_configz#InitConfigTests.check_global_config  s    \*
"223++ 	8D4yA~15.
Hh,28,<q!$'+$
H'-h'7$	8 // 	<D4yA~15.
Hh,6x,@qa$'+$
H'1(';$	< 	18<r   F)preconfig_apir$   ignore_stderrrG   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$   rG   rU   r+   rB  )r&   updateAPI_ISOLATEDPRE_CONFIG_ISOLATED
API_PYTHONPRE_CONFIG_PYTHONPRE_CONFIG_COMPATr    CONFIG_PYTHONCONFIG_ISOLATEDCONFIG_COMPATra  r]   rW   r   rE  rF  rG  rH  rd  ri  rs  )r9   testnameexpected_configr[  r^  rK   r]  rt  r$   ru  rG   new_envdefault_preconfigdefault_configr[   r\   rN  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r]  r  rV  rB   s    r   test_init_default_configz(InitConfigTests.test_init_default_config%  s    <*Mr   c                 2    | j                  dt               y )Ntest_preinit_compat_configr  r  rB   s    r   r  z*InitConfigTests.test_preinit_compat_config(      ;Lr   c                 2    | j                  dt               y )Ntest_init_compat_configr  r  rB   s    r   r  z'InitConfigTests.test_init_compat_config+      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  rU   r  r  r  r  test_init_global_configr  r  r9   	preconfigrQ  s      r   r  z'InitConfigTests.test_init_global_config.  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   rA  arg2r   )python3-Wcmdline_warnoption-Xcmdline_xoptionrA  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  iiz  always)r   r  r  test_init_from_configr  PYMEM_ALLOCATOR_MALLOCrW  r  rV  r  s      r   r  z%InitConfigTests.test_init_from_configE  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  rU   r  r  r  r  r  r  EnvVarenv_platlibdir  r   r   r  r   r  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  rU   r  r  r  r  r  r  r  r  r  r  test_init_python_envr  )r  rW  r  rz  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  rV  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  rV  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  rz  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   r  r   r   r   r   r  test_preinit_parse_argvr  )r  r   r   rY  r  rz  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  rx  )r9   r  r   rQ  s       r   r  z,InitConfigTests.test_preinit_dont_parse_argv  sH     
	 

 	=vy#/ 	 	1r   c                 B    ddddd}| j                  d|t               y )Nr   r   r   r  r   r  test_init_isolated_flagr  r  rz  r9   rQ  s     r   r  z'InitConfigTests.test_init_isolated_flag  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_isolated1  /      #$	
 	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_isolated2  r  r   c                 2    | j                  dt               y )Ntest_preinit_isolated_configr  r  rB   s    r   r  z,InitConfigTests.test_preinit_isolated_config$  s    =<Pr   c                 2    | j                  dt               y )Ntest_init_isolated_configr  r  rB   s    r   r  z)InitConfigTests.test_init_isolated_config'  s    :Mr   c                 2    | j                  dt               y )Ntest_preinit_python_configr  r  rB   s    r   r  z*InitConfigTests.test_preinit_python_config*  r  r   c                 2    | j                  dt               y )Ntest_init_python_configr  r  rB   s    r   r  z'InitConfigTests.test_init_python_config-  r  r   c                 @    ddd}| j                  di |t               y )Nr   )r   r   test_init_dont_configure_localer  r  )r9   r  s     r   r  z/InitConfigTests.test_init_dont_configure_locale0  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   r0   r   c                 J    | j                  dd       | j                  d       y )Nr   test_path_insert1test_path_append)insertrn   )r   s    r   modify_pathz7InitConfigTests.test_init_read_set.<locals>.modify_pathA  s    KK./KK*+r   test_init_read_set)r]  r^  r  )r9   rQ  r  s      r   r  z"InitConfigTests.test_init_read_set9  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_addH  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()))rA  r  r  	./python3r   r
   )r   r   r   r  r   test_init_run_mainr  r  r9   r   rQ  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  rA  r  r  r  r   r
   r   )r   r   r   r  r   r  test_init_mainz)Run Python code before _Py_InitializeMain)r]  rK   r  r  s      r   r  zInitConfigTests.test_init_mainh  s]    E 6N# " ($;	
 	/#-&Q 	 	Sr   c                 N    dg dg ddddd}| j                  d|t        	       y )
Nr
   )rA  arg1-varg3./argv0r  rA  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_argvy  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  )r9   rT  rQ  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   r0   )r1   r3   MACOSshutilwhichrw  )r9   rQ  r   r0   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 )	NrQ  r   r+   )r   r   r   r   r   r  TESTPATHtest_init_setpathTr]  r$   ru  )rR  r  r   r   r   r2   r  rV  r9   rQ  r`  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 )NrQ  r   r+   conf_program_nameconf_executable)
r   r   r   r   r   r  r  r   r   r0   r  test_init_setpath_configTr  )	rR  r   Py_DEBUGr   r   r   r2   r  rz  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 )NrQ  r   r   r   z.zipr   lib-dynload)
rR  r1   r/   version_infor   r   r2   r  majorminor)r9   r   r   rQ  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normpathr2   makedirsr1   fnmatchr.   r3   listdirr  copyfiler   copystat)r9   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+ ZAq'2VQ(?fVWAXYZ
 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 )NrQ  r   r   Unable to find home in Libr   DLLsr   r   r   r   r   r   r   r   r   r   r   r  TESTHOMEr   test_init_setpythonhomer]  r$   )rR  r   r   r   r2   isdirr4   r.   rH  r1   r/   r  r  r  r  r   r  r  rV  )r9   rQ  r`  	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)NrQ  r   r   r!  r"  r   r#  r   r   r$  r%  r&  1NEGATIVE_ISPYTHONBUILDr  test_init_is_python_buildr)  r|   r   pybuilddir.txtr  r   z
$r
   )r   )r   r   r   r   )rR  r   r   r   r2   r*  r4   r.   rH  r1   r/   r  r  r  r  r   r  rV  r0   r   r  r   rb   r   rw  )r9   rQ  r`  r+  r   r   r   r   r,  r-  r.  r$   r  r  s                 r   #test_init_is_python_build_with_homez3InitConfigTests.test_init_is_python_build_with_home(  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J 	Ha57WW5E5EVz%5%@%@%B1%EF6HN
12	H #&::-F[ $ 8 8 8 G JN1MMV&1K  Q:F#-3 	 	8	H 	Hs   =A+LLc                     | j                         }|d   d   }t        j                  j                  j	                  |      }||d<   d|i}|S )NrQ  r   r   r   )rR  r   r   r   r2   )r9   rQ  all_configsr`  r+  r$   s         r   copy_paths_by_envz!InitConfigTests.copy_paths_by_envd  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+   libdirr"  r3  wr  r   r   r   )r   r   r   r0   r   r  r  Tr]  r$   ru  rG   )r  	sysconfigget_config_varr   r   r2   r  mkdirr   writer   r3   r7  r  rV  )r9   r  vpathr  r:  	stdlibdirfilenamer   r   r0   rQ  r$   s               r   test_init_pybuilddirz$InitConfigTests.test_init_pybuilddirl  sj    $$& 	C& ,,W5;EFWW\\&&1F((feU)KLIHHVww||F,<=Hhf5 ! ! #'":":"<&/#&,#J$-$<$<]$K(77A#-(':'F ((0C""#<f'1s156 # C9	C 	C! !	C 	C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)Nr9  zPCbuild\archr
   instrumentedr"  r3  r;  r  r   r<  r=  )r   r   r   r0   r   r   r   r  r  Fr>  )r?  r@  r   r   r  countsepr2   r  r   rB  r   r   r3   r7  r  rV  )r9   rC  r  r  r   rD  rE  r   r   r0   rQ  r$   s               r   test_init_pybuilddir_win32z*InitConfigTests.test_init_pybuilddir_win32  s    ((1 77E"((0A5WW\\&.9F$$V, 	DWW%%bggll65&ABF((feU)KLIww||F,<=Hhf5 ! ! #'":":"<&(ggll6277;K;KL_`bLc;d&e#&,#&/#J$*%#-( %':'	F ((0C""#<f'1s16F # D7	D 	D! !	D 	D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  r"  r   z
pyvenv.cfgr;  r  r   z	home = %sfilez$include-system-site-packages = falser=  r   r   )r   r   r   r   r0   r   r   r  r  r  Tr>  )r  r  r  r/   r  r1   r   r   r2   r  r  r  r  r  r  r   
STDLIB_DIRr   rV   r   r   r3   r?  r@  r   r	  rW  r7  r  rV  )r9   r  pyvenv_homer  lib_dynload
lib_folderrE  r   r`  r0   r   r   rQ  r$   s                 r   test_init_pyvenv_cfgz$InitConfigTests.test_init_pyvenv_cfg  s    $$& ;	C&((*;	C.9""C ggll;+.>>-3CII;a		{+K+8: K(WW\\+u=
J'GGLL!3!3W=GGLLW5
 ww||FL9Hhf5 GkK/b9<2FG ,,.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s;	C ;	C ;	C(G G);	C ;	C ;	C ;	C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. . .)rV  rV  )z\\?\C:////a////b. . .z\\?\C:\a\b. . .)z//a/b/c. . .\\a\b\c. . .)rW  rW  za. . .z\ar  r   c              3   &   K   | ]	  }|d      yw)r   Nrx   ).0cs     r   	<genexpr>z=InitConfigTests.test_getpath_abspath_win32.<locals>.<genexpr>  s     3HQAaD3Hs   r   r+   rB  rQ  r   )r   r6   r]   r&   r   r   r2   rW   rE  rF  rG  rH  zip)r9   CASESr[   r\   resultsr   r\  results           r   test_getpath_abspath_win32z*InitConfigTests.test_getpath_abspath_win32  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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 )Nrx   )getattr	pythonapiargtypes	c_wchar_prestype)r   funcrb  s     r   get_funcz8InitConfigTests.test_global_pathconfig.<locals>.get_func#  s.    6++T2DDM!++DLKr   
Py_GetPathPy_GetPrefixPy_GetExecPrefixPy_GetProgramNamePy_GetProgramFullPathPy_GetPythonHomerQ  r   r   r   r   r0   r   )r   import_moduleget_configsrW   r;  r   r   r   )r9   rc  rk  rl  rm  rn  ro  rp  rq  rQ  rb  s             @r   test_global_pathconfigz&InitConfigTests.test_global_pathconfig  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  rz  )r9   r   r  rQ  s       r   rv  z%InitConfigTests.test_init_warnoptions:  sM    + #89	&1
 	6	#- 	 	/r   c                 B    dddgd}| j                  d|t               y )Nr   r
   zerror::BytesWarning)r  r  r   test_init_set_configr  r  r  s     r   rx  z$InitConfigTests.test_init_set_configU  s2    12

 	5v#/ 	 	1r   c                 &    | j                  d       y )Ntest_get_argc_argvr]   rB   s    r   rz  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   r:  r   frozen_modulesr
   rA  r  r  r  r  r   )r   r   r   r   r  r   r   r  
TESTFROZENtest_init_use_frozen_modulesr)  )subTestreprr  rz  )r9   testsrawr\  optvalrQ  r$   s          r   r  z,InitConfigTests.test_init_use_frozen_modulesb  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+   rB  )r]   rW   rE  rF  rG  rH  )
r9   OBMALLOC
EXTENSIONSTHREADSDAEMON_THREADSFORKEXECr\  r[   r\   s
             r   r  z3InitConfigTests.test_init_main_interpreter_settingsz  s    
 4$&0>A	
 001
S 	b!	9**S/C 	h' ## 	9II/w78	9s   A- -'BBrA   )NNNN)NN)]ru   rv   rw   r   r1   rX  objectrU  rW  rV  PYMEM_ALLOCATOR_NOT_SETr|  rw  r    rz  r{  rx  ry  rZ  r/   int_infodefault_max_str_digitsr  r   r	  r  r}  r~  rl  rn  rm  rM   r6  classmethodr8  r?  rJ  rR  ra  rd  ri  rs  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  r(  r4  r7  skipIfrF  
skipUnlessrL  rT  r`  rt  rv  rx  rz  r  r  rx   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)rJ   rK   r   r   r   )r   rr  r/   r0   rO   r~   rQ   rE   r   rU   rV   rJ   rK   rW   )r9   rY   rI  s      r   test_set_configzSetConfigTests.test_set_config  s    ##K0~~tVT49VW~~c%/__%/__'.7IK ??w$++$++!//4;;D	Fr   N)ru   rv   rw   r  rx   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{  rB   s    r   r  z!AuditingTests.test_open_code_hook  s    %%&;<r   c                 &    | j                  d       y )N
test_auditr{  rB   s    r   r  zAuditingTests.test_audit  s    %%l3r   c                 &    | j                  d       y )Ntest_audit_subinterpreterr{  rB   s    r   r  z'AuditingTests.test_audit_subinterpreter      %%&ABr   c                 H    | j                  dt        j                  d       y )Ntest_audit_run_commandr   rD   rE   r]   r   SHORT_TIMEOUTrB   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  rB   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.pyr;  r   r   z
import sysrN  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 	DQ,Q':C	D	G*,GowGC))*J292G2G57S * B IIg	D 	D 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  r;  r   r   r  rN  r  test_audit_run_startupr  r  r  r  s       r   r  z$AuditingTests.test_audit_run_startup  s    '',,t{{I,<,<=E'31 	"Q&q!	"	G*,GowGC))*B292G2G57S * B IIg	" 	" IIgs   
B*!3B6 *B36Cc                 H    | j                  dt        j                  d       y )Ntest_audit_run_stdinr   r  r  rB   s    r   r  z"AuditingTests.test_audit_run_stdin  s$    %%&<.5.C.C12 	& 	4r   c                 &    | j                  d       y )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    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{  rB   s    r   r  zMiscTests.test_unicode_id_init  s     	%%&<=r   r   z(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 )Nr0  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   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  showrefcountrA  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   rH  r   groupr  )r9   r  flagr  xoptrY   rI  r[   rg   refsblockss              r   test_no_memleakzMiscTests.test_no_memleak  s*   
   	1JD$$TF+D>>4~tT4QUVC>>#)3)3):):'+-D T__a0++$$&CHHA3GE		/w78u{{1~&DQ(FT= 1  q#.  C01 1	11 1s   'D::E	N)ru   rv   rw   r  r   r  r   r   r  r  r   r	  r  rx   r   r   r  r    sc    > X__RWW_?A(A(  X))HJ1J1r   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)StdPrinterTestsr   c                     t        j                  d      }|j                  j                  }|j                  f|_        |j                  |_         ||      S )Nrb  )r   rr  rf  PyFile_NewStdPrinterc_intrg  	py_objectri  )r9   fdrb  r  s       r   create_printerzStdPrinterTests.create_printer  sM    ,,X6%//DD)/%'-'7'7$#B''r   c                 |   d}| j                   }t        j                  |      }| j                  t        j                  |       t        j
                         \  }}| j                  t        j                  |       | j                  t        j                  |       	 t        j                  ||       | j                  |      }|j                  |       t        j                  ||       t        j                  |d      }| j                  ||j                  dd             y # t        j                  ||       w xY w)Nu   unicode:é-€-!
d   r  r  )	STDOUT_FDr   dup
addCleanupclosepipedup2r  rB  r   rW   encode)r9   message	stdout_fdstdout_fd_copyrfdwfdprinterdatas           r   
test_writezStdPrinterTests.test_write  s    1NN		*.1779S#&#&	/ GGC#)))4GMM'"GGNI.wwsC w~~f6HIJ GGNI.s   8D# #D;c                 $   | j                   }| j                  |      }| j                  |j                         |       | j                  |j	                         t        j                  |             |j                          |j                          y rA   )r  r  rW   filenoisattyr   flushr  r9   r  r  s      r   test_methodszStdPrinterTests.test_methods4  sc    ^^%%b))2.)299R=9r   c                 |    | j                   }| j                  |      }t        j                  | t	        |             y rA   )r  r  r   check_disallow_instantiationtyper  s      r   test_disallow_instantiationz+StdPrinterTests.test_disallow_instantiation<  s/    ^^%%b),,T4=Ar   N)ru   rv   rw   r  r  r  r  r  rx   r   r   r  r    s    
 I(K.Br   r  __main__)7testr   test.supportr   r   r   r   collectionsr   r  rE  r   os.pathrf   r  rO   r/   r?  r  r   has_subprocess_supportr   r   r1   platformr  r  r  r  rV  rz  rx  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
     s    & " 0  "   	  	   
   %%
(

=
>>ggo
		!    



 cjj#..S##$Ac&6&6&<&<%=>@	ww~~bggll>7;<N5j! j!Z]2((*;*; ]2~E()8+<+< E(P(FX&& F 3C'):): 3Cl31#X%6%6 31l0B)8+<+< 0Bf zHMMO r   