
    <eZ)                         	 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 ej        dk    ZdZej        dk    Z G d d	ej                  Zed
k    r ej                     dS dS )    N)support)assert_python_okassert_python_failure)	os_helperwin32)CPOSIXvxworksc                   6   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dS )UTF8ModeTests 0)
PYTHONUTF8PYTHONLEGACYWINDOWSFSENCODINGPYTHONCOERCECLOCALEc                 R    t          j        t           j        d           }|t          v S )N)locale	setlocaleLC_CTYPEPOSIX_LOCALES)selflocs     */usr/lib/python3.11/test/test_utf8_mode.pyposix_localezUTF8ModeTests.posix_locale   s!    v55}$%    F)failurec                    t          | j        fi |}|rt          |i |}|d         }nt          |i |}|d         }|                                                    d          S )N      z
)dictDEFAULT_ENVr   r   decoderstrip)r   r   argskwouts        r   
get_outputzUTF8ModeTests.get_output   sv    $"))b)) 	'444Ca&CC"D/B//Ca&Czz||""6***r   zWindows has no POSIX localec                     d}t           D ]^}|                     |          5  |                     d||          }|                     |d           d d d            n# 1 swxY w Y   _d S )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(   s    7  	+ 	+CS)) + +oodDo==  c***+ + + + + + + + + + + + + + +	+ 	+s   /AA!	$A!	c                    d}|                      ddd|          }|                     |d           |                      ddd|          }|                     |d           |                      ddd|          }|                     |d           t          r2|                      ddd|d	          }|                     |d           d S d S )
Nr)   -Xutf8r,   r-   zutf8=1utf8=0r   )r   )r'   r/   
MS_WINDOWSr   r0   r&   s      r   test_xoptionzUTF8ModeTests.test_xoption1   s    7oodFD$77c""" oodHdD99c"""oodHdD99c""" 	' //$d@C " E ECS#&&&&&	' 	'r   c                    d}|                      d|d          }|                     |d           |                      d|d          }|                     |d           |                      ddd|d          }|                     |d           t          r1|                      ddd|dd	          }|                     |d           |                                 s/|                      d
d|d          }|                     |d           |                      d|dd          }|                     d|                                           d S )Nr)   r,   r-   r   r   r3   r5   r4   r   r   -ExxxT)r   r   z-invalid PYTHONUTF8 environment variable value)r'   r/   r6   r   assertInr#   r7   s      r   test_env_varzUTF8ModeTests.test_env_varE   si   7oodDSo99c"""oodDSo99c""" oodHdDSoIIc""" 	' //$ds@C " E ECS#&&&   "" 	'//$ds/CCCS#&&& oodDUDoIIEjjll	$ 	$ 	$ 	$ 	$r   c                    t          j        d          }t          rd}nd}|                     ddd|          }|                     ||           t          r3|                     ddd|dd	          }|                     |d
           d S d S )Nz
            import sys
            print("{}/{}".format(sys.getfilesystemencoding(),
                                 sys.getfilesystemencodeerrors()))
        zutf-8/surrogatepasszutf-8/surrogateescaper3   r4   r,   strictr-   r;   zmbcs/replace)textwrapdedentr6   r'   r/   )r   r0   expectedr&   s       r   test_filesystemencodingz%UTF8ModeTests.test_filesystemencodinge   s          	/,HH.HoodFD$77h''' 	2 //$d-5@C " E EC S.11111	2 	2r   c                    t          j        d          }|                     ddd|d          }|                     |                                g d           |                     ddd|d          }|                     |                                g d	           |                     ddd|d
          }|                     |                                g d           d S )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/namereplacerH   )rB   rC   r'   r/   
splitlinesr7   s      r   
test_stdiozUTF8ModeTests.test_stdio|   s0        oodFD$/1  3 3))< < <	= 	= 	= oodFD$/7  9 9))@ @ @	A 	A 	A
 oodFD$/=  ? ?))< < <	= 	= 	= 	= 	=r   c                     t          j        d          }t          }|                     d||d          }|                     |                                d           d S )Nz
            import sys
            filename = sys.argv[1]
            with open(filename) as fp:
                print(f"{fp.encoding}/{fp.errors}")
        r,   r-   r:   zutf-8/strict)rB   rC   __file__r'   r/   lower)r   r0   filenamer&   s       r   test_iozUTF8ModeTests.test_io   s\         oodD(soCCn55555r   Nc                 t   t           }g }|r|                    d|           |r|                    d|           t          j        d          |d                    |          fz  }|                     d||d          }|sd}|sd	}|                     |                                | d
|            d S )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-   r:   utf-8rA   /)rM   appendrB   rC   joinr'   r/   rN   )r   moduleencodingerrorsrO   r$   r0   r&   s           r   _check_io_encodingz UTF8ModeTests._check_io_encoding   s      	2KK0H00111 	.KK,&,,---     		$() oodD(),  . .  	H 	F&<&<F&<&<=====r   c                     |                      |d           |                      |d           |                      |dd           d S )NrI   rW   namereplace)rX   )rW   rX   )rY   )r   rV   s     r   check_io_encodingzUTF8ModeTests.check_io_encoding   sg    :::}===)1- 	  	I 	I 	I 	I 	Ir   c                 0    |                      d           d S )Nior]   r   s    r   test_io_encodingzUTF8ModeTests.test_io_encoding   s    t$$$$$r   c                 0    |                      d           d S )N_pyior`   ra   s    r   test_pyio_encodingz UTF8ModeTests.test_pyio_encoding   s    w'''''r   c           	      6   d}|                      ddd|          }|                     |d           t          D ]`}|                     |          5  |                      ddd||          }|                     |d           d d d            n# 1 swxY w Y   ad S )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7m,,,  	5 	5CS)) 5 5oodFD$soKK  m4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5s   1BB	B	ztest specific to Unixc                     d                     d                              d          }                    dd          }d fd} |d|g           t          D ]?}                     |          5   |d|g|           d d d            n# 1 swxY w Y   @t          j        d	k    st          j        st          r|}n7t          j        	                    d
          r                    d          }n|}t          D ]?}                     |          5   |d|g|           d d d            n# 1 swxY w Y   @d S )Nu   hé€rR   asciisurrogateescapezYimport locale, sys; print("%s:%s" % (locale.getpreferredencoding(), ascii(sys.argv[1:])))c                      j         d| dfi |}|                    d          d                                         }                    |t	          |          |           d S )Nr3   r,   :r   )r'   	partitionr#   r/   ri   )utf8_optrD   r%   r&   r$   argr0   r   s        r   checkz*UTF8ModeTests.test_cmd_line.<locals>.check   sj    !$/$$cHHRHHC==%%a(//11DT5??C88888r   r4   r*   darwinaixz
iso-8859-1r5   )
encoder"   r   r.   sysplatformr   
is_androidVXWORKS
startswith)r   arg_utf8	arg_asciirp   r   c_argro   r0   s   `     @@r   test_cmd_linezUTF8ModeTests.test_cmd_line   s   ""7++::g&&JJw(9::	j	9 	9 	9 	9 	9 	9 	9
 	fxj!!!  	6 	6CS)) 6 6fxj55556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 <8##w'9#W#EE\$$U++ 	JJ|,,EEE  	5 	5CS)) 5 5h44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5s$   9BB	B	D99D=	 D=	c                 (   d}|                      dddd|          }|                     |d           |                      dddd|          }|                     |d           d	}|                      ddd
d|          }|                     |d           d S )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/   r7   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                                        s|                     d           d}|                     t
          j        |           d|d}t           j        ddd|g}t          j	        |d	          }| 
                    |j        d
|           t          |d          5 }|                                                                }d d d            n# 1 swxY w Y   | 
                    |d           d S )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   r[   z
True utf-8)rt   stdoutisattyskipTest
addCleanupr   unlink
executable
subprocessrunr/   
returncodeopenreadr#   )r   rO   r0   cmdprocfpr&   s          r   test_device_encodingz"UTF8ModeTests.test_device_encoding   s@    z  "" 	5MM3444	((333&   ~tVT48~c---!T222 (V,,, 	%''))""$$C	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%l+++++s   0'C##C'*C')NN)__name__
__module____qualname__r!   r   r'   unittestskipIfr6   r1   r8   r?   rE   rK   rP   rY   r]   rb   re   rg   r|   r   r   requires_subprocessr    r   r   r   r      s       )+" K& & & ). + + + + + X_Z!>??+ + @?+' ' '($ $ $@2 2 2.= = =<
6 
6 
6> > > >2I I I% % %( ( (5 5 5 X_Z!8995 5 :954# # # X_Z12 2 !W "", , #"2 2, , ,r   r   __main__)r   r   rt   rB   r   testr   test.support.script_helperr   r   test.supportr   ru   r6   r   rw   TestCaser   r   mainr   r   r   <module>r      s         



         N N N N N N N N " " " " " " lg%
<9$D, D, D, D, D,H% D, D, D,N zHMOOOOO r   