
    daf                       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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j@                  jC                  ejD                  ejF                  dejH                  jJ                   dejH                  jL                         Z'ej@                  jQ                  ej@                  jC                  e'd            sdZ'd Z)d Z* G d d      Z+ G d de+ejX                        Z- G d de+ejX                        Z. G d dejX                        Z/ G d de+ejX                        Z0 G d de+ejX                        Z1 G d de+ejX                        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     */root/Python-3.12.4/Lib/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%   3   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
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.tearDownO   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_interpreterR   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_subinterpretersu   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=   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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   s7    ==? 	+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   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)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   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   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_pymain4  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_loopA  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_structseqI  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[   rU   r   r   s      r   test_simple_initialization_apiz-EmbeddingTests.test_simple_initialization_apiU  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[   rU   r   )r7   r   r|   rY   rZ   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   )r7   r   rY   rZ   s       r   test_ucnhash_capi_resetz&EmbeddingTests.test_ucnhash_capi_reset  s3    )001JDQSej01r   N)rs   rt   ru   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   requires_specializationr   r   rv   r   r   rx   rx      sn    G+>?*%)7V"""""""
"
=: $$$= %$=L2r   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  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_VerboseFlagrS   ))Py_LegacyWindowsFSEncodingFlagr   ))Py_LegacyWindowsStdioFlagr  c                     d | _         y r?   )EXPECTED_CONFIG)clss    r   tearDownClasszInitConfigTests.tearDownClassB  s     #r   c                 `    i }|D ]&  }d|v r|j                  dd      \  }}|||<   "d||<   ( |S )N=r   T)split)r7   xoptions_listr   optr$   values         r   main_xoptionszInitConfigTests.main_xoptionsG  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#   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   decodejsonloadsJSONDecodeErrorfail)r7   r#   r   rV   procrH   s         r   _get_expected_config_implz)InitConfigTests._get_expected_config_implQ  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   r5  rI  items
isinstancer!   rL   )r7   r6  configs
config_keyconfig_valueconfigr$   r=  s           r   _get_expected_configz$InitConfigTests._get_expected_configp  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)   r/   r   z./_testembedrP  r   r   )rQ  rK  GET_DEFAULT_CONFIG
API_COMPATIGNORE_CONFIGUTF8_MODE_ERRORSr   r1   r   r   abspathr0   r4   r:  r   rL   COPY_PRE_CONFIG)r7   expected_preconfigexpectedr#   apimodify_path_cbrM  rS  r$   r=  default_executablerP  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 )NrS  )r   r!   rK  rV  poprU   )r7   rM  r[  rS  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 )NrP  r   r+   r   )r   r   getrL  r   rb   lowerremovesuffixr   r.   r/   r!   rK  rV  rb  rU   )r7   rM  r[  rP  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 )NrS  rP  r
   r   r   global_config)r   DEFAULT_GLOBAL_CONFIGCOPY_GLOBAL_CONFIGrb   COPY_GLOBAL_PRE_CONFIGrU   )	r7   rM  rS  rP  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_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*   rA  )r%   updateAPI_ISOLATEDPRE_CONFIG_ISOLATED
API_PYTHONPRE_CONFIG_PYTHONPRE_CONFIG_COMPATr   CONFIG_PYTHONCONFIG_ISOLATEDCONFIG_COMPATr`  r[   rU   r   rD  rE  rF  rG  rc  rh  rr  )r7   testnameexpected_configrZ  r]  rI   r\  rs  r#   rt  rE   new_envdefault_preconfigdefault_configrY   rZ   rM  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  rU  r@   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  r@   s    r   r  z*InitConfigTests.test_preinit_compat_config%      ;Lr   c                 2    | j                  dt               y )Ntest_init_compat_configr  r  r@   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
  rS   r  r  r  r  test_init_global_configr  r  r7   	preconfigrP  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   r@  arg2r   )python3-Wcmdline_warnoption-Xcmdline_xoptionr@  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   r  iiz  always)r   r  r  test_init_from_configr  PYMEM_ALLOCATOR_MALLOCrV  r  rU  r  s      r   r  z%InitConfigTests.test_init_from_configB  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   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
  rS   r  r  r  r  r  r  r  r  r  r  test_init_python_envr  )r  rV  r  ry  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  rU  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  rU  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  ry  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   rX  r  ry  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  rw  )r7   r  r   rP  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  ry  r7   rP  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  r@   s    r   r  z,InitConfigTests.test_preinit_isolated_config!  s    =<Pr   c                 2    | j                  dt               y )Ntest_init_isolated_configr  r  r@   s    r   r  z)InitConfigTests.test_init_isolated_config$  s    :Mr   c                 2    | j                  dt               y )Ntest_preinit_python_configr  r  r@   s    r   r  z*InitConfigTests.test_preinit_python_config'  r  r   c                 2    | j                  dt               y )Ntest_init_python_configr  r  r@   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  )r7   r  s     r   r  z/InitConfigTests.test_init_dont_configure_locale-  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)r\  r]  r  )r7   rP  r  s      r   r  z"InitConfigTests.test_init_read_set6  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_addE  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()))r@  r  r  	./python3r   r	   )r   r   r   r  r   test_init_run_mainr  r  r7   r   rP  s      r   r  z"InitConfigTests.test_init_run_mainY  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  r@  r  r  r  r   r	   r   )r   r   r   r  r   r  test_init_mainz)Run Python code before _Py_InitializeMain)r\  rI   r  r  s      r   r  zInitConfigTests.test_init_maine  s]    E 6N# " ($;	
 	/#-&Q 	 	Sr   c                 N    dg dg ddddd}| j                  d|t        	       y )
Nr	   )r@  arg1-varg3./argv0r  r@  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_argvv  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   rS  rP  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whichrv  )r7   rP  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 )	NrP  r   r*   )r   r   r   r   r   r  TESTPATHtest_init_setpathTr\  r#   rt  )rQ  r  r   r   r   r0   r  rU  r7   rP  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 )NrP  r   r*   conf_program_nameconf_executable)
r   r   r   r   r   r  r  r   r   r/   r   test_init_setpath_configTr  )	rQ  r   Py_DEBUGr   r   r   r0   r  ry  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 )NrP  r   r   r   z.zipr   lib-dynload)
rQ  r   r.   version_infor   r   r0   r  majorminor)r7   r   r   rP  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+ 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 )NrP  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#   )rQ  r   r   r   r0   isdirr2   r-   rG  r   r.   r  r  r  r  r   r  r  rU  )r7   rP  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)NrP  r   r   r   r!  r   r"  r   r   r#  r$  r%  1NEGATIVE_ISPYTHONBUILDr  test_init_is_python_buildr(  rz   r   pybuilddir.txtr  r   z
$r	   )r   )r   r   r   r   )rQ  r   r   r   r0   r)  r2   r-   rG  r   r.   r  r  r  r  r   r  rU  r/   r   r  r   r`   r   rv  )r7   rP  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 )NrP  r   r   r   )rQ  r   r   r   r0   )r7   rP  all_configsr_  r*  r#   s         r   copy_paths_by_envz!InitConfigTests.copy_paths_by_enva  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!  r2  wr  r   r   r   )r   r   r   r/   r   r  r  Tr\  r#   rt  rE   )r  	sysconfigget_config_varr   r   r0   r  mkdirr   writer   r1   r6  r  rU  )r7   r  vpathr  r9  	stdlibdirfilenamer   r   r/   rP  r#   s               r   test_init_pybuilddirz$InitConfigTests.test_init_pybuilddiri  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)Nr8  zPCbuild\archr	   instrumentedr!  r2  r:  r  r   r;  r<  )r   r   r   r/   r   r   r   r  r  Fr=  )r>  r?  r   r   r  countsepr0   r  r   rA  r   r   r1   r6  r  rU  )r7   rB  r  r  r   rC  rD  r   r   r/   rP  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   r/   r   r   r  r  r  Tr=  )r  r  r  r.   r  r   r   r   r0   r  r  r  r  r  r  r   
STDLIB_DIRr   rT   r   r   r1   r>  r?  r   r  rV  r6  r  rU  )r7   r  pyvenv_homer  lib_dynload
lib_folderrD  r   r_  r/   r   r   rP  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. . .)rU  rU  )z\\?\C:////a////b. . .z\\?\C:\a\b. . .)z//a/b/c. . .\\a\b\c. . .)rV  rV  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>  s     3HQAaD3Hs   r   r*   rA  rP  r   )r   r4   r[   r%   r   r   r0   rU   rD  rE  rF  rG  zip)r7   CASESrY   rZ   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 )Nrv   )getattr	pythonapiargtypes	c_wchar_prestype)r   funcra  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_GetPythonHomerP  r   r   r   r   r/   r   )r   import_moduleget_configsrU   r:  r   r   r   )r7   rb  rj  rk  rl  rm  rn  ro  rp  rP  ra  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  ry  )r7   r   r  rP  s       r   ru  z%InitConfigTests.test_init_warnoptions7  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   rw  z$InitConfigTests.test_init_set_configR  s2    12

 	5v#/ 	 	1r   c                 &    | j                  d       y )Ntest_get_argc_argvr[   r@   s    r   ry  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   r9  r   frozen_modulesr	   r@  r  r  r  r  r   )r   r   r   r   r  r   r   r  
TESTFROZENtest_init_use_frozen_modulesr(  )subTestreprr  ry  )r7   testsrawr[  optvalrP  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*   rA  )r[   rU   rD  rE  rF  rG  )
r7   OBMALLOC
EXTENSIONSTHREADSDAEMON_THREADSFORKEXECr[  rY   rZ   s
             r   r  z3InitConfigTests.test_init_main_interpreter_settingsw  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   rW  objectrT  rV  rU  PYMEM_ALLOCATOR_NOT_SETr{  rv  r   ry  rz  rw  rx  rY  r.   int_infodefault_max_str_digitsr  r   r  r~  r|  r}  rk  rm  rl  rK   r5  classmethodr7  r>  rI  rQ  r`  rc  rh  rr  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'  r3  r6  skipIfrE  
skipUnlessrK  rS  r_  rs  ru  rw  ry  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   rq  r.   r/   rM   r|   rO   rC   r   rS   rT   rH   rI   rU   )r7   rW   rH  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_hookrz  r@   s    r   r  z!AuditingTests.test_open_code_hook  s    %%&;<r   c                 &    | j                  d       y )N
test_auditrz  r@   s    r   r  zAuditingTests.test_audit  s    %%l3r   c                 &    | j                  d       y )Ntest_audit_subinterpreterrz  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.pyr:  r   r   z
import sysrM  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   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  rM  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  r@   s    r   r  z"AuditingTests.test_audit_run_stdin  s$    %%&<.5.C.C12 	& 	4r   c                 &    | j                  d       y )Ntest_get_incomplete_framerz  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_initrz  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 )Nr/  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  showrefcountr@  T)rH   rI   textr   z!^\[(-?\d+) refs, (-?\d+) blocks\]zunexpected output: r   r	   )r  stmt)r.   r/   rM   r|   rO   STDOUTrU   rC   rH   r   rd   re   rG  r   groupr  )r7   r  flagr  xoptrW   rH  rY   re   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)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  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 )Nra  )r   rq  re  PyFile_NewStdPrinterc_intrf  	py_objectrh  )r7   fdra  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  rA  r   rU   encode)r7   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 r?   )r  r  rU   filenoisattyr   flushr  r7   r  r  s      r   test_methodszStdPrinterTests.test_methods1  sc    ^^%%b))2.)299R=9r   c                 |    | j                   }| j                  |      }t        j                  | t	        |             y r?   )r  r  r   check_disallow_instantiationtyper  s      r   test_disallow_instantiationz+StdPrinterTests.test_disallow_instantiation9  s/    ^^%%b),,T4=Ar   N)rs   rt   ru   r  r  r  r  r  rv   r   r   r  r    s    
 I(K.Br   r  __main__)5testr   test.supportr   r   r   r   collectionsr   r  rD  r   os.pathrd   r  rM   r.   r>  r  r   has_subprocess_supportr   platformr  r  r  r  rU  ry  rw  r   MAX_HASH_SEEDr   r0   r   r  r  r  r  STDLIB_INSTALLisfiler   r%   r'   TestCaserx   r   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]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   