
    daf?)                         d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
 ddlmZmZ dZej                  dk(  Z G d d	ej"                        Zed
k(  r ej(                          yy)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                   ,   e Zd ZddddZd ZdddZ ej                  ed      d	        Z	d
 Z
d Zd Zd Zd ZddZd Zd Zd Zd Z ej                  ed      d        Zd Z ej                  ed       ej.                         d               Zy)UTF8ModeTests 0)
PYTHONUTF8PYTHONLEGACYWINDOWSFSENCODINGPYTHONCOERCECLOCALEc                 Z    t        j                  t         j                  d       }|t        v S )N)locale	setlocaleLC_CTYPEPOSIX_LOCALES)selflocs     ./root/Python-3.12.4/Lib/test/test_utf8_mode.pyposix_localezUTF8ModeTests.posix_locale   s#    v5}$%    F)failurec                    t        | j                  fi |}|rt        |i |}|d   }nt        |i |}|d   }|j	                         j                  d      S )N      z
)dictDEFAULT_ENVr   r   decoderstrip)r   r   argskwouts        r   
get_outputzUTF8ModeTests.get_output   sa    $"")b)'44Ca&C"D/B/Ca&Czz|""6**r   zWindows has no POSIX localec                     d}t         D ]C  }| j                  |      5  | j                  d||      }| j                  |d       d d d        E y # 1 sw Y   PxY w)N&import sys; print(sys.flags.utf8_mode)LC_ALL-c1)r   subTestr'   assertEqual)r   coder   r&   s       r   test_posix_localezUTF8ModeTests.test_posix_locale'   sb    7  	+CS) +oodDo=  c*+ +	++ +s   'AA	c                 J   d}| j                  ddd|      }| j                  |d       | j                  ddd|      }| j                  |d       | j                  ddd|      }| j                  |d       t        r)| j                  ddd|d	      }| j                  |d       y y )
Nr)   -Xutf8r,   r-   zutf8=1utf8=0r   )r   )r'   r/   r   r   r0   r&   s      r   test_xoptionzUTF8ModeTests.test_xoption0   s    7oodFD$7c" oodHdD9c"oodHdD9c" //$d@C " ECS#& r   c                 &   d}| j                  d|d      }| j                  |d       | j                  d|d      }| j                  |d       | j                  ddd|d      }| j                  |d       t        r)| j                  ddd|dd	      }| j                  |d       | j                         s'| j                  d
d|d      }| j                  |d       | j                  d|dd      }| j	                  d|j                                y )Nr)   r,   r-   r   r   r3   r5   r4   r   r   -ExxxT)r   r   z-invalid PYTHONUTF8 environment variable value)r'   r/   r   r   assertInr#   r6   s      r   test_env_varz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                     t        j                  d      }t        rd}nd}| j                  ddd|      }| j	                  ||       t        r*| j                  ddd|dd	      }| j	                  |d
       y y )Nz
            import sys
            print("{}/{}".format(sys.getfilesystemencoding(),
                                 sys.getfilesystemencodeerrors()))
        zutf-8/surrogatepasszutf-8/surrogateescaper3   r4   r,   strictr-   r:   zmbcs/replace)textwrapdedentr   r'   r/   )r   r0   expectedr&   s       r   test_filesystemencodingz%UTF8ModeTests.test_filesystemencodingd   s        ,H.HoodFD$7h' //$d-5@C " EC S.1 r   c                 ~   t        j                  d      }| j                  ddd|d      }| j                  |j	                         g d       | j                  ddd|d      }| j                  |j	                         g d	       | j                  ddd|d
      }| j                  |j	                         g d       y )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}")
        r3   r4   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/namereplacerG   )rA   rB   r'   r/   
splitlinesr6   s      r   
test_stdiozUTF8ModeTests.test_stdio{   s        oodFD$/1  3)<	= oodFD$/7  9)@	A
 oodFD$/=  ?)<	=r   c                     t        j                  d      }t        }| j                  d||d      }| j	                  |j                         d       y )Nz
            import sys
            filename = sys.argv[1]
            with open(filename) as fp:
                print(f"{fp.encoding}/{fp.errors}")
        r,   r-   r9   zutf-8/strict)rA   rB   __file__r'   r/   lower)r   r0   filenamer&   s       r   test_iozUTF8ModeTests.test_io   sH        oodD(soCn5r   Nc                 B   t         }g }|r|j                  d|       |r|j                  d|       t        j                  d      |dj	                  |      fz  }| j                  d||d      }|sd}|sd	}| j                  |j                         | d
|        y )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,   r-   r9   utf-8r@   /)rL   appendrA   rB   joinr'   r/   rM   )r   moduleencodingerrorsrN   r$   r0   r&   s           r   _check_io_encodingz UTF8ModeTests._check_io_encoding   s     KK)H<01KK'&,-    		$() oodD(),  . HF
!F8&<=r   c                 x    | j                  |d       | j                  |d       | j                  |dd       y )NrH   rV   namereplace)rW   )rV   rW   )rX   )r   rU   s     r   check_io_encodingzUTF8ModeTests.check_io_encoding   sC    :}=)1- 	  	Ir   c                 &    | j                  d       y )Nior\   r   s    r   test_io_encodingzUTF8ModeTests.test_io_encoding   s    t$r   c                 &    | j                  d       y )N_pyior_   r`   s    r   test_pyio_encodingz UTF8ModeTests.test_pyio_encoding   s    w'r   c           	         d}| j                  ddd|      }| j                  |d       t        D ]E  }| j                  |      5  | j                  ddd||      }| j                  |d       d d d        G y # 1 sw Y   RxY w)Nz[import locale; print(locale.getpreferredencoding(False), locale.getpreferredencoding(True))r3   r4   r,   zutf-8 utf-8r*   )r'   r/   r   r.   )r   r0   r&   r   s       r    test_locale_getpreferredencodingz.UTF8ModeTests.test_locale_getpreferredencoding   s    loodFD$7m,  	5CS) 5oodFD$soK  m45 5	55 5s   )A88B	ztest specific to Unixc                 N    dj                  d      j                  d      }j                  dd      }d fd} |d|g       t        D ])  } j                  |      5   |d|g|       d d d        + t        j
                  d	k(  st        j                  st        r|}n3t        j
                  j                  d
      rj                  d      }n|}t        D ])  } j                  |      5   |d|g|       d d d        + y # 1 sw Y   xY w# 1 sw Y   BxY w)Nu   hé€rQ   asciisurrogateescapezYimport locale, sys; print("%s:%s" % (locale.getpreferredencoding(), ascii(sys.argv[1:])))c                      j                   d| dfi |}|j                  d      d   j                         }j                  |t	        |      |       y )Nr3   r,   :r   )r'   	partitionr#   r/   rh   )utf8_optrC   r%   r&   r$   argr0   r   s        r   checkz*UTF8ModeTests.test_cmd_line.<locals>.check   sR    !$//$$cHRHC==%a(//1DT5?C8r   r4   r*   darwinaixz
iso-8859-1r5   )
encoder"   r   r.   sysplatformr   
is_androidVXWORKS
startswith)r   arg_utf8	arg_asciiro   r   c_argrn   r0   s   `     @@r   test_cmd_linezUTF8ModeTests.test_cmd_line   s   ""7+::g&JJw(9:	j	9
 	fxj!  	6CS) 6fxj56 6	6 <<8#w'9'9WE\\$$U+JJ|,EE  	5CS) 5h45 5	56 65 5s   &D7DD	D$	c                     d}| j                  dddd|      }| j                  |d       | j                  dddd|      }| j                  |d       d	}| j                  ddd
d|      }| j                  |d       y )Nz%import sys; print(sys.flags.optimize)r3   r4   z-Or,   r-   z-OO2z/import sys; print(sys.flags.ignore_environment)r;   )r'   r/   r6   s      r   test_optim_levelz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                    t         j                  j                         s| j                  d       d}| j	                  t
        j                  |       d|d}t         j                  ddd|g}t        j                  |d	      }| j                  |j                  d
|       t        |d      5 }|j                         j                         }d d d        | j                  d       y # 1 sw Y   xY w)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()r3   r4   r,   T)textr   rZ   z
True utf-8)rs   stdoutisattyskipTest
addCleanupr   unlink
executable
subprocessrunr/   
returncodeopenreadr#   )r   rN   r0   cmdprocfpr&   s          r   test_device_encodingz"UTF8ModeTests.test_device_encoding   s     zz  "MM34	(((3&\ * ~~tVT48~~c-!T2 (V, 	%'')""$C	%l+	% 	%s   .C((C1)NN)__name__
__module____qualname__r!   r   r'   unittestskipIfr   r1   r7   r>   rD   rJ   rO   rX   r\   ra   rd   rf   r{   r~   r   requires_subprocessr    r   r   r   r      s    )+"K& ). + X__Z!>?+ @+'($@2.=<
6>2I%(5 X__Z!895 :54# X__Z12 !W  ", #2,r   r   __main__)__doc__r   r   rs   rA   r   testr   test.support.script_helperr   r   test.supportr   r   r   rt   rv   TestCaser   r   mainr   r   r   <module>r      sh      
    N . <<9$D,H%% D,N zHMMO r   