a
    ze;                     @   s   d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZg dZ	G dd dej
ZG dd dej
ZG d	d
 d
ej
ZG dd dej
ZG dd dej
ZG dd dej
ZG dd dej
ZG dd deZedkre  dS )    )support)TESTFNN)gb2312gbkgb18030hz	big5hkscscp932	shift_jiseuc_jpeuc_jisx0213shift_jisx0213euc_jis_2004shift_jis_2004cp949euc_krjohabbig5cp950
iso2022_jpiso2022_jp_1iso2022_jp_2iso2022_jp_2004iso2022_jp_3iso2022_jp_ext
iso2022_krc                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )Test_MultibyteCodecc                 C   sD   t D ]:}| d|d | td|d | d|d qd S )N     )ALL_CJKENCODINGSassertEqualdecodestrencodeselfenc r'   ./usr/lib/python3.9/test/test_multibytecodec.pytest_nullcoding   s    z#Test_MultibyteCodec.test_nullcodingc                 C   s    t D ]}| d|d qd S )Nabcd   abcd)r   r    r#   r$   r'   r'   r(   test_str_decode$   s    z#Test_MultibyteCodec.test_str_decodec                 C   s2   t d}dd }t d| | t|dd d S )Nzeuc-krc                 S   s   dt jd fS )Nr      )sysmaxsize)excr'   r'   r(   <lambda>*   r   zBTest_MultibyteCodec.test_errorcallback_longindex.<locals>.<lambda>ztest.cjktests   applehamspam)codecs
getdecoderregister_errorassertRaises
IndexError)r%   ZdecZ	myreplacer'   r'   r(   test_errorcallback_longindex(   s    
z0Test_MultibyteCodec.test_errorcallback_longindexc                 C   s4   d}t dt j tD ]}| ||dd qd S )Nu,  ztest.ignorer   )r2   r4   ignore_errorsr   r    r#   )r%   datar&   r'   r'   r(    test_errorcallback_custom_ignore/   s    z4Test_MultibyteCodec.test_errorcallback_custom_ignorec              	   C   s<   z*t D ]}d|}t| qW tt ntt 0 d S )Nz# coding: {}
)r   formatexecr   unlinkr   )r%   r&   coder'   r'   r(   test_codingspec6   s
    
z#Test_MultibyteCodec.test_codingspecc                 C   s$   |  ttjd  |  ttjd  d S N)r5   AttributeError_multibytecodecZMultibyteStreamReaderZMultibyteStreamWriterr%   r'   r'   r(   test_init_segfault>   s    z&Test_MultibyteCodec.test_init_segfaultc                 C   s"   t D ]}| tt|d qd S Nr   )r   r5   	TypeErrorr2   r3   r$   r'   r'   r(   test_decode_unicodeE   s    z'Test_MultibyteCodec.test_decode_unicodeN)
__name__
__module____qualname__r)   r,   r7   r:   r?   rD   rG   r'   r'   r'   r(   r      s   r   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )Test_IncrementalEncoderc                 C   s   t d }| |dd | | d  | |ddd | | d  | |ddd | |dd	d | | d  d S )
Nr   u   파이썬 마을s   ̽ u	   ☆∼☆Ts   ١r   r   Fr2   getincrementalencoderr    r#   resetr%   encoderr'   r'   r(   test_statelessL   s    z&Test_IncrementalEncoder.test_statelessc                 C   s   t d }| |dd | |dd | |dd | |ddd | | d  | |dd	 | |dd | |d
dd | |d
dd d S )Njisx0213   æ̀      ær      ̀T      r   rL   rO   r'   r'   r(   test_statefulY   s    z%Test_IncrementalEncoder.test_statefulc                 C   s   t d }| |dd | t|jd | |dd | t|jd | | d  | |dd | |dd | t|jd | |d	d
d d S )NrR   rU   r   u   ģu   ̀ærT   rV   rX   r   TrW   )r2   rM   r    r#   r5   UnicodeEncodeErrorrN   rO   r'   r'   r(   test_stateful_keep_bufferl   s    z1Test_IncrementalEncoder.test_stateful_keep_bufferc                 C   s   t d }| }| |dd || | |dd | |dd | }| |dd || | |dd d S )Nr   rS   rT   rU   r   rV   )r2   rM   getstater    r#   setstate)r%   rP   Zinitial_stateZpartial_stater'   r'   r(   $test_state_methods_with_buffer_statex   s    

z<Test_IncrementalEncoder.test_state_methods_with_buffer_statec                 C   s   t d }| |dd | }| |dd | }| |dd || | |dd || | |dd d S )Nr   z   z   あs   $B$"s   (Bzs   $")r2   rM   r    r#   r\   r]   )r%   rP   Zen_stateZjp_stater'   r'   r(   (test_state_methods_with_non_buffer_state   s    

z@Test_IncrementalEncoder.test_state_methods_with_non_buffer_statec                 C   s   t d }| | d |d | | tdd |d | | d t d }| | tdd |d	 | | td
d d S )Nr   r   rU   s   æ        littlerV   r   s	    BB      ra   s	    B      )r2   rM   r    r\   r#   int
from_bytes)r%   Zbuffer_state_encoderZnon_buffer_state_encoderr'   r'   r(   $test_getstate_returns_expected_value   s2    





z<Test_IncrementalEncoder.test_getstate_returns_expected_valuec                 C   s,   t d }tdd}| t|j| d S )Nr   s   	                rc   )r2   rM   rd   re   r5   UnicodeErrorr]   )r%   rP   Zpending_size_niner'   r'   r(   "test_setstate_validates_input_size   s    z:Test_IncrementalEncoder.test_setstate_validates_input_sizec                 C   s,   t d }tdd}| t|j| d S )Nr   s
           rc   )r2   rM   rd   re   r5   UnicodeDecodeErrorr]   )r%   rP   Zinvalid_utf8r'   r'   r(   #test_setstate_validates_input_bytes   s    z;Test_IncrementalEncoder.test_setstate_validates_input_bytesc                 C   s6   t dd}| |dd | |dd d S )Nz	shift-jisbackslashreplace   ÿs   \xff
   
)r2   rM   r    r#   rO   r'   r'   r(   test_issue5640   s    z&Test_IncrementalEncoder.test_issue5640N)rH   rI   rJ   rQ   rY   r[   r^   rb   rf   rh   rj   ro   r'   r'   r'   r(   rK   J   s    		rK   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Test_IncrementalDecoderc                 C   sF   t d }| |dd | |dd | |dd d S )Nr   s   ̽u   파이s    u
   썬 마을r   r   )r2   getincrementaldecoderr    r!   r%   decoderr'   r'   r(   	test_dbcs   s    z!Test_IncrementalDecoder.test_dbcsc                 C   s|   t d }| |dd | t|jdd | |dd | |dd | t|jdd | |dd d S )	Nr   s   u   파r   T   u   이s   ̽)r2   rq   r    r!   r5   ri   rr   r'   r'   r(   test_dbcs_keep_buffer   s    
z-Test_IncrementalDecoder.test_dbcs_keep_bufferc                 C   s   t d }d}| ||d d | |ddd | ||d d | |dd	 | |d
d	 | |ddd	 | | d  | |dd | ||d d | t|jdd | |dd	 d S )Nz
iso2022-jp      (r      BT   $s   B@$u   世s   @$@s   @$z@$r   )r2   rq   r    r!   rN   r5   ri   )r%   rs   ZESCr'   r'   r(   test_iso2022   s    z$Test_IncrementalDecoder.test_iso2022c                 C   s*   t D ] }t| }| t|jd qd S rE   )r   r2   rq   r5   rF   r!   )r%   r&   rs   r'   r'   r(   rG      s    z+Test_IncrementalDecoder.test_decode_unicodec                 C   s   t d }| |dd | \}}| |d | |dd | \}}| |d | |dd | \}}| |d |||f | |dd | \}}| |d |d | | d d S )	Nr   s   u   うr      r      )s   abci[)r2   rq   r    r!   r\   r]   )r%   rs   Zpending1_Zpending2flags2Zpending3Zpending4r'   r'   r(   test_state_methods   s     
z*Test_IncrementalDecoder.test_state_methodsc                 C   sP   t d }| t|jd | t|jd | t|jd | t|jd d S )Nr   {   )invalidr   )s   1234r   )s	   123456789r   )r2   rq   r5   rF   r]   rg   rr   r'   r'   r(   test_setstate_validates_input  s
    z5Test_IncrementalDecoder.test_setstate_validates_inputN)	rH   rI   rJ   rt   rv   r{   rG   r   r   r'   r'   r'   r(   rp      s   	rp   c                   @   s   e Zd Zdd ZdS )Test_StreamReaderc              	   C   s   zpt td}z|d W |  n
|  0 tj tdd}z| t|jd W |  n
|  0 W t	t nt	t 0 d S )Nwb   r   )encoding   )
openr   writecloser2   r5   ri   readr   r=   )r%   fr'   r'   r(   test_bug1728403  s    
z!Test_StreamReader.test_bug1728403N)rH   rI   rJ   r   r'   r'   r'   r(   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Test_StreamWriterc                 C   sh   t  }td|}|d | | d |d | | d |d | | d d S )Nr   123   123   𒍅s   12379   가¬s   123797501ioBytesIOr2   	getwriterr   r    getvaluer%   scr'   r'   r(   test_gb18030.  s    



zTest_StreamWriter.test_gb18030c                 C   sh   t  }td|}|d | | d |d | | d |d | | d d S )Nzutf-8r   r   r   s   123𒍅r   s   123𒍅가¬r   r   r'   r'   r(   
test_utf_89  s    



zTest_StreamWriter.test_utf_8c                 C   s4   t  }td|}|d | | d d S )Nr   r*   r+   r   )r%   r   wrr'   r'   r(   test_streamwriter_strwriteE  s    
z,Test_StreamWriter.test_streamwriter_strwriteN)rH   rI   rJ   r   r   r   r'   r'   r'   r(   r   -  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Test_ISO2022c                 C   s   d}d}|  |d| d S )Ns   (B:hu4:unit.ANi de familleu   :hu4:unité de familleziso2022-jp-2)r    r!   )r%   Z
iso2022jp2Zunir'   r'   r(   test_g2L  s    zTest_ISO2022.test_g2c                 C   sB   |  ddd dD ]&}d|}| tdd |D  qd S )N      ­ziso-2022-jp-2)ziso-2022-jp-2004ziso-2022-jp-3u   㐆c                 s   s   | ]}|d kV  qdS )   Nr'   ).0xr'   r'   r(   	<genexpr>U  r   z2Test_ISO2022.test_iso2022_jp_g0.<locals>.<genexpr>)ZassertNotInr#   ZassertFalseany)r%   r   er'   r'   r(   test_iso2022_jp_g0Q  s    
zTest_ISO2022.test_iso2022_jp_g0c                 C   s$   t ddD ]}t|dd q
d S )Ni   i   iso_2022_jpignore)rangechrr#   )r%   r   r'   r'   r(   test_bug1572832W  s    zTest_ISO2022.test_bug1572832N)rH   rI   rJ   r   r   r   r'   r'   r'   r(   r   K  s   r   c                   @   s<   e Zd ZdZdZdZdZee Zdd Zdd Z	d	d
 Z
dS )TestStatefulu   世世ziso-2022-jps   $B@$@$s   (Bc                 C   s   |  | j| j| j d S r@   )r    textr#   r   expected_resetrC   r'   r'   r(   test_encodec  s    zTestStateful.test_encodec                    sh   t | j  d fdd| jD }| || j |  jddd| j |  jdddd d S )Nr   c                 3   s   | ]}  |V  qd S r@   r#   )r   charrP   r'   r(   r   h  s   z7TestStateful.test_incrementalencoder.<locals>.<genexpr>r   Tfinal)	r2   rM   r   joinr   r    expectedr#   rN   r%   outputr'   r   r(   test_incrementalencoderf  s    z$TestStateful.test_incrementalencoderc                    sd   t | j  t| jd d fddt| jD }| || j |  j	dddd d S )Nr-   r   c                 3   s"   | ]\}}  ||kV  qd S r@   r   )r   indexr   rP   Z
last_indexr'   r(   r   r  s   z=TestStateful.test_incrementalencoder_final.<locals>.<genexpr>r   Tr   )
r2   rM   r   lenr   r   	enumerater    r   r#   r   r'   r   r(   test_incrementalencoder_finalo  s    z*TestStateful.test_incrementalencoder_finalN)rH   rI   rJ   r   r   r   rN   r   r   r   r   r'   r'   r'   r(   r   \  s   	r   c                   @   s$   e Zd ZdZdZdZdZee ZdS )TestHZStatefulu   聊聊r   s   ~{ADADs   ~}N)rH   rI   rJ   r   r   r   rN   r   r'   r'   r'   r(   r   x  s
   r   __main__)testr   Ztest.supportr   Zunittestr   r2   r.   rB   r   ZTestCaser   rK   rp   r   r   r   r   r   rH   mainr'   r'   r'   r(   <module>   s    . N