a
    ze$                     @   sz   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 ej	dkZ
dZej	dkZG dd dejZed	krve  dS )
    N)support)assert_python_okassert_python_failurewin32)CZPOSIXZvxworksc                   @   s   e Zd ZddddZdd Zdddd	Zeed
dd Z	dd Z
dd Zdd Zdd Zdd Zd'ddZdd Zdd Zdd Zd d! Zeed"d#d$ Zd%d& ZdS )(UTF8ModeTests 0)
PYTHONUTF8PYTHONLEGACYWINDOWSFSENCODINGZPYTHONCOERCECLOCALEc                 C   s   t t jd }|tv S )N)locale	setlocaleLC_CTYPEPOSIX_LOCALES)selfloc r   )/usr/lib/python3.9/test/test_utf8_mode.pyposix_locale   s    zUTF8ModeTests.posix_localeF)failurec                O   sR   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outr   r   r   
get_output   s    
zUTF8ModeTests.get_outputzWindows has no POSIX localec              	   C   sZ   d}t D ]L}| j|d, | jd||d}| |d W d    q1 sJ0    Y  qd S )N&import sys; print(sys.flags.utf8_mode)LC_ALL-c1)r   subTestr   assertEqual)r   coder   r   r   r   r   test_posix_locale&   s
    zUTF8ModeTests.test_posix_localec                 C   s   d}|  ddd|}| |d |  ddd|}| |d |  ddd|}| |d tr|| j ddd|dd	}| |d d S )
Nr    -Xutf8r#   r$   zutf8=1utf8=0r	   )r   )r   r&   
MS_WINDOWSr   r'   r   r   r   r   test_xoption/   s    zUTF8ModeTests.test_xoptionc                 C   s   d}| j d|dd}| |d | j d|dd}| |d | j ddd|dd}| |d tr| j ddd|ddd	}| |d |  s| j d
d|dd}| |d | j d|ddd}| d|  d S )Nr    r#   r$   r
   r	   r)   r+   r*   r
   r   -EZxxxT)r
   r   z-invalid PYTHONUTF8 environment variable value)r   r&   r,   r   ZassertInr   r-   r   r   r   test_env_varC   s&    zUTF8ModeTests.test_env_varc                 C   s^   t d}trd}nd}| ddd|}| || trZ| jddd|ddd	}| |d
 d S )Nz
            import sys
            print("{}/{}".format(sys.getfilesystemencoding(),
                                 sys.getfilesystemencodeerrors()))
        zutf-8/surrogatepasszutf-8/surrogateescaper)   r*   r#   strictr$   r0   zmbcs/replace)textwrapdedentr,   r   r&   )r   r'   expectedr   r   r   r   test_filesystemencodingc   s    
z%UTF8ModeTests.test_filesystemencodingc                 C   s   t d}| jddd|dd}| | g d | jddd|dd}| | g d	 | j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}")
        r)   r*   r#   r   )Z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/namereplacer8   )r4   r5   r   r&   
splitlinesr-   r   r   r   
test_stdioz   s&    



zUTF8ModeTests.test_stdioc                 C   s0   t d}t}| jd||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)r4   r5   __file__r   r&   )r   r'   filenamer   r   r   r   test_io   s    
zUTF8ModeTests.test_ioNc                 C   s   t }g }|r|d| |r0|d| td|d|f }| jd||dd}|sbd}|sjd	}| || 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/   zUTF-8r3   /)r<   appendr4   r5   joinr   r&   )r   moduleencodingerrorsr=   r   r'   r   r   r   r   _check_io_encoding   s"    
z UTF8ModeTests._check_io_encodingc                 C   s0   | j |dd | j |dd | j |ddd d S )Nr9   )rC   namereplace)rD   )rC   rD   )rE   )r   rB   r   r   r   check_io_encoding   s
    zUTF8ModeTests.check_io_encodingc                 C   s   |  d d S )NiorG   r   r   r   r   test_io_encoding   s    zUTF8ModeTests.test_io_encodingc                 C   s   |  d d S )NZ_pyiorI   rJ   r   r   r   test_pyio_encoding   s    z UTF8ModeTests.test_pyio_encodingc              	   C   sz   d}|  ddd|}| |d tD ]P}| j|d0 | j ddd||d}| |d W d    q$1 sj0    Y  q$d S )Nz[import locale; print(locale.getpreferredencoding(False), locale.getpreferredencoding(True))r)   r*   r#   zUTF-8 UTF-8r!   )r   r&   r   r%   )r   r'   r   r   r   r   r    test_locale_getpreferredencoding   s    z.UTF8ModeTests.test_locale_getpreferredencodingztest specific to Unixc              	      s  d d  d} dd}d fdd}|d|g tD ]@}j|d	  |d|g|d	 W d    qD1 sz0    Y  qDtjd
kstjstr|}ntj	dr d}n|}tD ]@}j|d	  |d|g|d	 W d    q1 s0    Y  qd S )Nu   hé€zutf-8asciisurrogateescapezYimport locale, sys; print("%s:%s" % (locale.getpreferredencoding(), ascii(sys.argv[1:])))c                    sB   j d| d fi |}|dd  }|t|| d S )Nr)   r#   :r   )r   	partitionr   r&   rN   )Zutf8_optr6   r   r   r   argr'   r   r   r   check   s    z*UTF8ModeTests.test_cmd_line.<locals>.checkr*   r!   darwinZaixz
iso-8859-1r+   )
encoder   r   r%   sysplatformr   Z
is_androidVXWORKS
startswith)r   Zarg_utf8Z	arg_asciirT   r   Zc_argr   rR   r   test_cmd_line   s"    

0zUTF8ModeTests.test_cmd_linec                 C   sf   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)r)   r*   z-Or#   r$   z-OO2z/import sys; print(sys.flags.ignore_environment)r1   )r   r&   r-   r   r   r   test_optim_level   s    zUTF8ModeTests.test_optim_level)NN)__name__
__module____qualname__r   r   r   unittestZskipIfr,   r(   r.   r2   r7   r;   r>   rE   rG   rK   rL   rM   r[   r]   r   r   r   r   r      s*   


 



r   __main__)r   rW   r4   ra   testr   Ztest.support.script_helperr   r   rX   r,   r   rY   ZTestCaser   r^   mainr   r   r   r   <module>   s   

 n