
    /hhS                     p   S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  SS/rSrSrSr/ S	Qr\R"                  S
:X  a  SrSrO\R"                  R%                  S5      (       a  \R'                  S5        O_\R"                  R%                  S5      (       a  SrSrO:\R"                  S:X  a  SrO'\R"                  S:X  a  SrO\R"                  S:X  a  SrSrS	r\" \R"                  S;  =(       a    \" \ S5      =(       a	    \" \ S5      5      rS rSr\" S\5      r " S S\5      rSrSrSqSqSq S r! " S S\RD                  5      r# " S  S!\#5      r$\	RJ                  \RL                  " \RN                  " S"5      S#5       " S$ S%\#5      5       5       r(S& r)\*S':X  a  \RV                  " 5         gg)(    N)
namedtuple)support)run_python_until_endCzinvalid.asciiasciiT)zC.UTF-8zC.utf8UTF-8androidutf-8linuxPOSIXaixz	iso8859-1darwincygwinFvxworks)r   r   nl_langinfoCODESETc                     Sn[         (       a  US-  nUR                  U 5      n[        SUSS9u  p4UR                  S:H  $ )Nz=import locale; print(locale.setlocale(locale.LC_CTYPE, '{}'))z>; import sys; sys.exit(not locale.nl_langinfo(locale.CODESET))-c PYTHONCOERCECLOCALEr   )_check_nl_langinfo_CODESETformatr   rc)locale_namecmd_fmtcmdresultpy_cmds        D/opt/python-3.13.8/usr/lib/python3.13/test/test_c_locale_coercion.py_set_locale_in_subprocessr!   V   sD    MG!!SS
..
%C)$LNF99>    zBfsencoding stdin_info stdout_info stderr_info lang lc_ctype lc_allEncodingDetailsc                   Z    \ rS rSrSR	                  / SQ5      r\S 5       r\S 5       rSr	g)r#   d   ;)zimport sys, osz"print(sys.getfilesystemencoding())z2print(sys.stdin.encoding + ':' + sys.stdin.errors)z4print(sys.stdout.encoding + ':' + sys.stdout.errors)z4print(sys.stderr.encoding + ':' + sys.stderr.errors)z(print(os.environ.get('LANG', 'not set'))z,print(os.environ.get('LC_CTYPE', 'not set'))z*print(os.environ.get('LC_ALL', 'not set'))c                 T   US-   nUc  SnUR                  U5      /S-  nUR                  UR                  S5      5        UR                  SS5      nU(       a  [        n	OUR                  SS5      n	UR                  SS5      n
XU
4n[	        U " U/UQUQ76 R                  5       5      $ )	Nz:{}surrogateescape   backslashreplaceLANGznot setLC_CTYPELC_ALL)r   appendgetCLI_COERCION_TARGETdict_asdict)clscoercion_expectedfs_encodingstream_encodingstream_errorsenv_vars_streamstream_infoexpected_langexpected_lc_ctypeexpected_lc_allenv_infos               r    get_expected_details$EncodingDetails.get_expected_detailsq   s     "E)  .M~~m459 	7>>*<=> VY7 3 (Z C",,x; _DC=k=H=EEGHHr"   c                 x   [        SSSU R                  40 UD6u  p#UR                  S:X  d  UR                  U5        UR                  R                  S5      R                  5       n[        U " U6 R                  5       5      nUR                  R                  S5      R                  5       R                  5       nXV4$ )Nz-Xzutf8=0r   r   r   )r   CHILD_PROCESS_SCRIPTr   failoutdecode
splitlinesr1   r2   errrstrip)r3   r8   r   r   stdout_lineschild_encoding_detailsstderr_liness          r    get_child_details!EncodingDetails.get_child_details   s     .(D#":":

 yyA~KKzz((1<<>!%c<&8&@&@&B!Czz((188:EEG%33r"    N)
__name__
__module____qualname____firstlineno__joinrB   classmethodr?   rL   __static_attributes__rN   r"   r    r#   r#   d   s@    88 	% 	 I I* 4 4r"   zPython runtime initialized with LC_CTYPE=C (a locale with default ASCII encoding), which may cause Unicode compatibility problems. Using C.UTF-8, C.utf8, or UTF-8 (if available) as alternative Unicode-compatible locales is recommended.zPython detected LC_CTYPE=C: LC_CTYPE coerced to {} (set another locale or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).c                     [         b  g / q [         H*  n [        U 5      (       d  M  [         R                  U 5        M,     [         (       a"  [         S   q[
        R                  [        5      q[        R                  (       a  [        S[         < 35        [        S[        < 35        [        S[        < 35        [        S[        < 35        [        S[        < 35        [        S[        < 35        [        S[        < 35        g g )	Nr   zAVAILABLE_TARGETS = z EXPECTED_C_LOCALE_EQUIVALENTS = z$EXPECTED_C_LOCALE_STREAM_ENCODING = z EXPECTED_C_LOCALE_FS_ENCODING = z$EXPECT_COERCION_IN_DEFAULT_LOCALE = z_C_UTF8_LOCALES = z_check_nl_langinfo_CODESET = )AVAILABLE_TARGETS_C_UTF8_LOCALESr!   r.   r0   CLI_COERCION_WARNING_FMTr   CLI_COERCION_WARNINGr   verboseprintEXPECTED_C_LOCALE_EQUIVALENTS!EXPECTED_C_LOCALE_STREAM_ENCODINGEXPECTED_C_LOCALE_FS_ENCODING!EXPECT_COERCION_IN_DEFAULT_LOCALEr   )target_locales    r    setUpModulerb      s    
 $ )$]33$$]3 ) /27>>?RS$%6$9:;01N0QRS45V4YZ[01N0QRS45V4YZ["?"567-.H-KLM r"   c                       \ rS rSrS rSrg)_LocaleHandlingTestCase   c                     [         R                  U5      nUu  p[         R                  UUUUU5      n
U R                  X5        Uc  / nU R                  X5        g N)r#   rL   r?   assertEqual)selfr8   expected_fs_encodingexpected_stream_encodingexpected_stream_errorsexpected_warningsr4   r   encoding_detailsrK   expected_detailss              r    _check_child_encoding_details5_LocaleHandlingTestCase._check_child_encoding_details   sh     !228<)/&*?? $"
 	)<$ "9r"   rN   N)rO   rP   rQ   rR   rp   rU   rN   r"   r    rd   rd      s    :r"   rd   c                   0    \ rS rSr\S 5       rS rS rSrg)LocaleConfigurationTests   c                 F    [         (       d  [        R                  " S5      eg )Nz No C-with-UTF-8 locale available)rW   unittestSkipTest)r3   s    r    
setUpClass#LocaleConfigurationTests.setUpClass   s!     ! ##$FGG !r"   c                    S U l         SnSnSSSSSS.nS H_  n[         HR  nUS:X  a  US:X  a  M  U R                  UUS9   UR                  5       nXVU'   U R	                  UUUS S SS	9  S S S 5        MT     Ma     g ! , (       d  f       Mj  = f)
Nr
   r   r+   r,   r-   r   PYTHONIOENCODINGr+   r,   r+   r   env_varconfigured_localeFrl   rm   r4   maxDiffrW   subTestcopyrp   ri   rj   rk   base_var_dictr   locale_to_setvar_dicts          r    )test_external_target_locale_configurationBLocaleConfigurationTests.test_external_target_locale_configuration   s     &#*  #% "
 ,G!2 f$')A\\'4A " C,113H(5W%66x7K7ONRIMIN 7 P	C C "3 ,C C    )A::
B	c                    S U l         SnSnSSSSSS.nS H_  n[         HR  nUS:X  a  US:X  a  M  U R                  UUS9   UR                  5       nXVU'   U R	                  UUUSS S	S
9  S S S 5        MT     Ma     g ! , (       d  f       Mj  = f)Nr
   r   r   r{   r}   r+   r~   strictFr   r   r   s          r    test_with_ioencoding-LocaleConfigurationTests.test_with_ioencoding  s     &#*  #% '
 ,G!2 f$')A\\'4A " C,113H(5W%66x7K7ONVIMIN 7 P	C C "3 ,C Cr   r   N)	rO   rP   rQ   rR   rT   rx   r   r   rU   rN   r"   r    rs   rs      s%     H H!PF Pr"   rs   PY_COERCE_C_LOCALEz(C locale coercion disabled at build timec                   F    \ rS rSr  SS jrS rS rS rS rS r	S	 r
S
rg)LocaleCoercionTestsi@  Nc                 f   S U l         [        (       d  [        n[        nSnU(       a  [        /nSSSSSS.nUR                  U5        Ub  X7S'   U R                  SUS9   [        (       a  UnUn	OS nSn	[        R                  (       a  U[        /:X  a  S nU R                  UUUS UU	5        S S S 5        [         HQ  n
S HH  nU R                  UU
USS9   UR                  5       nXU'   U R                  UUUS UU5        S S S 5        MJ     MS     g ! , (       d  f       Nj= f! , (       d  f       Mq  = f)	NFr   r{   r   T)default_localer   r}   )r   nominal_localer   r|   )r   rW   r_   r^   LEGACY_LOCALE_WARNINGupdater   r`   r   
is_androidrZ   rp   r]   r   )ri   r5   r6   coerce_c_localerm   r4   
extra_varsr   _expected_warnings_coercion_expectedr   r   r   s                r    _check_c_locale_coercion,LocaleCoercionTests._check_c_locale_coercionF  sf   "   7K?O % %:$;! #% "
 	Z(&3B/0 \\.=  ?00%6"%6"%)"%*"
 ""&+?*@@%)"..}/:/>/3/A/AC?. ;M/\\'1>6E35 " 7  -113H(5W%66x7B7F7;7H7HJ7 7 0 ;/? ?27 7s   AD+D!
D!
D0c                 &    U R                  SSS S9  g )Nr
   r   r   ri   s    r     test_PYTHONCOERCECLOCALE_not_set4LocaleCoercionTests.test_PYTHONCOERCECLOCALE_not_set  s    %%gw%Mr"   c                 8    S H  nU R                  SSUS9  M     g )N)r   1truefalser
   r   r   )ri   settings     r    !test_PYTHONCOERCECLOCALE_not_zero5LocaleCoercionTests.test_PYTHONCOERCECLOCALE_not_zero  s#     2G))'7G)T 2r"   c                 2    U R                  SSS[        /S9  g )Nr
   warn)r   rm   )r   rZ   r   s    r    $test_PYTHONCOERCECLOCALE_set_to_warn8LocaleCoercionTests.test_PYTHONCOERCECLOCALE_set_to_warn  s#    %%gw6<9M8N 	& 	Pr"   c                 n    U R                  [        [        SSS9  U R                  [        [        SSSS9  g )N0F)r   r4   r   r   r-   r4   )r   r_   r^   r   s    r    $test_PYTHONCOERCECLOCALE_set_to_zero8LocaleCoercionTests.test_PYTHONCOERCECLOCALE_set_to_zero  sE    %%&C&G698= 	& 	?
 	%%&C&G69-08=	 	& 	?r"   c           	      |    U R                  [        [        S SSS9  U R                  [        [        SS[        /SS9  g )Nr   Fr   r   )r   r-   rm   r4   )r   r_   r^   r   r   s    r    test_LC_ALL_set_to_C(LocaleCoercionTests.test_LC_ALL_set_to_C  sN    %%&C&G6:-08=	 	& 	? 	%%&C&G6<-09N8O8= 	& 	?r"   c                    [         R                  " [         R                  S 5      nU R                  [         R                  [         R                  U5         [         R                  " [         R                  S5      nWS:X  a  U R                  S5        U[        ;   a  U R                  SU-  5        Sn[        [        R                  SS9n[        R                  " [        R                  SU/[        R                  US	S
9nU R!                  UR"                  R%                  5       U5        g ! [         R                   a$  nU R                  [        U5      5         S nANS nAff = f)Nr   r   z.test requires LC_CTYPE locale different than Czcoerced LC_CTYPE locale: %sz=import locale; print(locale.setlocale(locale.LC_CTYPE, None))r   r   r   T)stdoutenvtext)locale	setlocaler,   
addCleanupErrorskipTeststrTARGET_LOCALESr1   osenviron
subprocessrunsys
executablePIPErh   r   rH   )ri   old_loclocecoder   r   s          r    #test_PYTHONCOERCECLOCALE_set_to_one7LocaleCoercionTests.test_PYTHONCOERCECLOCALE_set_to_one  s   ""6??D9((&//7C	"""6??B7C #:MMJK. MM7#=> O2::37nncnndD9$.OO!$"&( 	**,c2 || 	"MM#a&!!	"s   %D+ +E#?EE#r   )NT)rO   rP   rQ   rR   r   r   r   r   r   r   r   rU   rN   r"   r    r   r   @  s3     4837	LJ\NUP??3r"   r   c                  .    [         R                  " 5         g rg   )r   reap_childrenrN   r"   r    tearDownModuler     s    r"   __main__),r   r   r   r   	sysconfigrv   collectionsr   testr   test.support.script_helperr   r]   r^   r_   r`   r   platform
startswithr.   rX   boolhasattrr   r!   _fields_EncodingDetailsr#   r   rY   rW   r0   rZ   rb   TestCaserd   rs   cpython_only
skipUnlessget_config_varr   r   rO   mainrN   r"   r    <module>r      s    	  
   "  ; "%o 6  %, ! '  %) !/ <<9(/%$+!\\W%%
 "((1\\U##(3%$/!\\X$+!\\X ).%\\Y(/%$+! 1 "LL++ FM"FI  O/9 94& 94| J     N<:h// :@MP6 MP^ 		Y--.BC?AS31 S3A S3l zMMO r"   