
    0hh?)                         S 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	J
r
  SSKJrJr  Sr\R                  S:H  r " S S	\R"                  5      r\S
:X  a  \R(                  " 5         gg)z9
Test the implementation of the PEP 540: the UTF-8 Mode.
    N)support)assert_python_okassert_python_failure)	os_helper
MS_WINDOWS)CPOSIXvxworksc                   8   \ rS rSrSSSS.rS rSS.S jr\R                  " \	S	5      S
 5       r
S rS rS rS rS rSS jrS rS rS rS r\R                  " \	S5      S 5       rS r\R                  " \	S5      \R0                  " 5       S 5       5       rSrg)UTF8ModeTests    0)
PYTHONUTF8PYTHONLEGACYWINDOWSFSENCODINGPYTHONCOERCECLOCALEc                 ^    [         R                  " [         R                  S 5      nU[        ;   $ )N)locale	setlocaleLC_CTYPEPOSIX_LOCALES)selflocs     </opt/python-3.13.8/usr/lib/python3.13/test/test_utf8_mode.pyposix_localeUTF8ModeTests.posix_locale   s#    v5}$%    F)failurec                    [        U R                  40 UD6nU(       a  [        U0 UD6nUS   nO[        U0 UD6nUS   nUR	                  5       R                  S5      $ )N      z
)dictDEFAULT_ENVr   r   decoderstrip)r   r   argskwouts        r   
get_outputUTF8ModeTests.get_output   sa    $"")b)'44Ca&C"D/B/Ca&Czz|""6**r   zWindows has no POSIX localec                     Sn[          H=  nU R                  US9   U R                  SXS9nU R                  US5        S S S 5        M?     g ! , (       d  f       MQ  = f)N&import sys; print(sys.flags.utf8_mode)LC_ALL-c1)r   subTestr)   assertEqual)r   coder   r(   s       r   test_posix_localeUTF8ModeTests.test_posix_locale'   sP    7 CS)oodDo=  c* *) !))s   #A
A	c                 N   SnU R                  SSSU5      nU R                  US5        U R                  SSSU5      nU R                  US5        U R                  SSSU5      nU R                  US5        [        (       a&  U R                  SSSUSS	9nU R                  US5        g g )
Nr,   -Xutf8r/   r0   zutf8=1utf8=0r   )r   )r)   r2   r   r   r3   r(   s      r   test_xoptionUTF8ModeTests.test_xoption0   s    7oodFD$7c" oodHdD9c"oodHdD9c": //$d@C " ECS#& r   c           	         SnU R                  SUSS9nU R                  US5        U R                  SUSS9nU R                  US5        U R                  SSSUSS9nU R                  US5        [        (       a&  U R                  SSSUSSS	9nU R                  US5        U R                  5       (       d$  U R                  S
SUSS9nU R                  US5        U R                  SUSSS9nU R	                  SUR                  5       5        g )Nr,   r/   r0   r   r   r7   r9   r8   r   r   -ExxxT)r   r   z-invalid PYTHONUTF8 environment variable value)r)   r2   r   r   assertInr%   r:   s      r   test_env_varUTF8ModeTests.test_env_varD   s   7oodDSo9c"oodDSo9c" oodHdDSoIc": //$ds@C " ECS#&   ""//$ds/CCS#& oodDUDoIEjjl	$r   c           	          [         R                  " S5      n[        (       a  SnOSnU R                  SSSU5      nU R	                  X25        [        (       a'  U R                  SSSUSSS	9nU R	                  US
5        g g )Nz
            import sys
            print("{}/{}".format(sys.getfilesystemencoding(),
                                 sys.getfilesystemencodeerrors()))
        zutf-8/surrogatepasszutf-8/surrogateescaper7   r8   r/   strictr0   r?   zmbcs/replace)textwrapdedentr   r)   r2   )r   r3   expectedr(   s       r   test_filesystemencoding%UTF8ModeTests.test_filesystemencodingd   s        :,H.HoodFD$7': //$d-5@C " EC S.1 r   c                 n   [         R                  " S5      nU R                  SSSUSS9nU R                  UR	                  5       / SQ5        U R                  SSSUSS9nU R                  UR	                  5       / S	Q5        U R                  SSSUS
S9nU R                  UR	                  5       / SQ5        g )Nz
            import sys
            print(f"stdin: {sys.stdin.encoding}/{sys.stdin.errors}")
            print(f"stdout: {sys.stdout.encoding}/{sys.stdout.errors}")
            print(f"stderr: {sys.stderr.encoding}/{sys.stderr.errors}")
        r7   r8   r/   r   )PYTHONIOENCODING)zstdin: utf-8/surrogateescapezstdout: utf-8/surrogateescapestderr: utf-8/backslashreplacelatin1)zstdin: iso8859-1/strictzstdout: iso8859-1/strictz"stderr: iso8859-1/backslashreplacez:namereplace)zstdin: utf-8/namereplacezstdout: utf-8/namereplacerN   )rG   rH   r)   r2   
splitlinesr:   s      r   
test_stdioUTF8ModeTests.test_stdio{   s        oodFD$/1  3)<	= oodFD$/7  9)@	A
 oodFD$/=  ?)<	=r   c                     [         R                  " S5      n[        nU R                  SXSS9nU R	                  UR                  5       S5        g )Nz
            import sys
            filename = sys.argv[1]
            with open(filename) as fp:
                print(f"{fp.encoding}/{fp.errors}")
        r/   r0   r>   zutf-8/strict)rG   rH   __file__r)   r2   lower)r   r3   filenamer(   s       r   test_ioUTF8ModeTests.test_io   sF        oodDsoCn5r   Nc                 h   [         n/ nU(       a  UR                  SU< 35        U(       a  UR                  SU< 35        [        R                  " S5      USR	                  U5      4-  nU R                  SXdSS9nU(       d  SnU(       d  S	nU R                  UR                  5       U S
U 35        g )Nz	encoding=zerrors=z
            import sys
            from %s import open
            filename = sys.argv[1]
            with open(filename, %s) as fp:
                print(f"{fp.encoding}/{fp.errors}")
        z, r/   r0   r>   utf-8rF   /)rT   appendrG   rH   joinr)   r2   rU   )r   moduleencodingerrorsrV   r&   r3   r(   s           r   _check_io_encoding UTF8ModeTests._check_io_encoding   s     KK)H<01KK'&,-    		$() oodD),  . HF
!F8&<=r   c                 f    U R                  USS9  U R                  USS9  U R                  USSS9  g )NrO   r_   namereplace)r`   )r_   r`   )ra   )r   r^   s     r   check_io_encodingUTF8ModeTests.check_io_encoding   sC    :}=)1- 	  	Ir   c                 &    U R                  S5        g )Niorf   r   s    r   test_io_encodingUTF8ModeTests.test_io_encoding   s    t$r   c                 &    U R                  S5        g )N_pyiorj   rk   s    r   test_pyio_encoding UTF8ModeTests.test_pyio_encoding   s    w'r   c           
      
   SnU R                  SSSU5      nU R                  US5        [         H?  nU R                  US9   U R                  SSSXS9nU R                  US5        S S S 5        MA     g ! , (       d  f       MS  = f)Nz[import locale; print(locale.getpreferredencoding(False), locale.getpreferredencoding(True))r7   r8   r/   zutf-8 utf-8r-   )r)   r2   r   r1   )r   r3   r(   r   s       r    test_locale_getpreferredencoding.UTF8ModeTests.test_locale_getpreferredencoding   sx    loodFD$7m, CS)oodFD$oK  m4 *) !))s   %A33
B	ztest specific to Unixc                 x  ^ ^^ SR                  S5      mTR                  S5      nTR                  SS5      nSmUUU 4S jnU" SU/5        [         H$  nT R                  US9   U" SU/US9  S S S 5        M&     [        R
                  S	:X  d   [        R                  (       d  [        (       a  UnO8[        R
                  R                  S
5      (       a  TR                  S5      nOUn[         H$  nT R                  US9   U" SU/US9  S S S 5        M&     g ! , (       d  f       M  = f! , (       d  f       MJ  = f)Nu   hé€rZ   asciisurrogateescapezYimport locale, sys; print("%s:%s" % (locale.getpreferredencoding(), ascii(sys.argv[1:])))c                    > TR                   " SU STT40 UD6nUR                  S5      S   R                  5       nTR                  U[	        U5      U5        g )Nr7   r/   :r    )r)   	partitionr%   r2   rv   )utf8_optrI   r'   r(   r&   argr3   r   s        r   check*UTF8ModeTests.test_cmd_line.<locals>.check   sP    //$$cHRHC==%a(//1DT5?C8r   r8   r-   darwinaixz
iso-8859-1r9   )
encoder$   r   r1   sysplatformr   
is_androidVXWORKS
startswith)r   arg_utf8	arg_asciir}   r   c_argr|   r3   s   `     @@r   test_cmd_lineUTF8ModeTests.test_cmd_line   s    ""7+::g&JJw(9:	j	9
 	fxj! CS)fxj5 *) ! <<8#w'9'9WWE\\$$U++JJ|,EE CS)h4 *) ! *) *)s   $
D
D*
D'	*
D9	c                     SnU R                  SSSSU5      nU R                  US5        U R                  SSSSU5      nU R                  US5        S	nU R                  SSS
SU5      nU R                  US5        g )Nz%import sys; print(sys.flags.optimize)r7   r8   z-Or/   r0   z-OO2z/import sys; print(sys.flags.ignore_environment)r@   )r)   r2   r:   s      r   test_optim_levelUTF8ModeTests.test_optim_level   s    
 7oodFD$=c"oodFE4>c"@oodFD$=c"r   z@os.device_encoding() doesn't implement the UTF-8 Mode on Windowsc                    [         R                  R                  5       (       d  U R                  S5        SnU R	                  [
        R                  U5        SU< S3n[         R                  SSSU/n[        R                  " USS	9nU R                  UR                  S
U5        [        USS9 nUR                  5       R                  5       nS S S 5        U R                  WS5        g ! , (       d  f       N!= f)Nzsys.stdout is not a TTYzout.txtz5import os, sys; fd = sys.stdout.fileno(); out = open(z], "w", encoding="utf-8"); print(os.isatty(fd), os.device_encoding(fd), file=out); out.close()r7   r8   r/   T)textr   rd   z
True utf-8)r   stdoutisattyskipTest
addCleanupr   unlink
executable
subprocessrunr2   
returncodeopenreadr%   )r   rV   r3   cmdprocfpr(   s          r   test_device_encoding"UTF8ModeTests.test_device_encoding   s     zz  ""MM34	(((3&\ * ~~tVT48~~c-!T2 (V,'')""$C -l+ -,s   /C))
C7 )NN)__name__
__module____qualname____firstlineno__r#   r   r)   unittestskipIfr   r4   r;   rC   rJ   rQ   rW   ra   rf   rl   rp   rs   r   r   r   requires_subprocessr   __static_attributes__r   r   r   r   r      s    )+"K& ). + __Z!>?+ @+'($@2.=<
6>2I%(5 __Z!895 :54# __Z12   ", #2,r   r   __main__)__doc__r   r   r   rG   r   testr   test.support.script_helperr   r   test.supportr   r   r   r   r   TestCaser   r   mainr   r   r   <module>r      sf      
    N . <<9$D,H%% D,N zMMO r   