o
    GXh2                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZG dd dZG dd dZG dd de	Z
G dd	 d	e	ZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd dejZedkrqe  dS dS )    Nc                   @   s   e Zd Zdd Zdd ZdS )	PosReturnc                 C   s
   d| _ d S Nr   )posself r   B/opt/python-3.10.19/usr/lib/python3.10/test/test_codeccallbacks.py__init__   s   
zPosReturn.__init__c                 C   s>   | j }|}|dk rt|j| }||jkrt|j| _ d|fS )Nr   <?>)r   lenobjectstart)r   excZoldposZrealposr   r   r   handle   s   
zPosReturn.handleN__name__
__module____qualname__r	   r   r   r   r   r   r   	   s    r   c                   @   s   e Zd ZdddZdd ZdS )RepeatedPosReturnr
   c                 C   s   || _ d| _d| _d S r   )replr   count)r   r   r   r   r   r	      s   
zRepeatedPosReturn.__init__c                 C   s0   | j dkr|  j d8  _ | j| jfS | j|jfS )Nr      )r   r   r   end)r   r   r   r   r   r       s   
zRepeatedPosReturn.handleN)r
   r   r   r   r   r   r      s    
r   c                   @      e Zd Zdd ZdS )BadStartUnicodeEncodeErrorc                 C      t | ddddd g | _d S Nascii r   r   bad)UnicodeEncodeErrorr	   r   r   r   r   r   r	   (      
z#BadStartUnicodeEncodeError.__init__Nr   r   r   r	   r   r   r   r   r   '       r   c                   @   r   )BadObjectUnicodeEncodeErrorc                 C   r   r   )r    r	   r   r   r   r   r   r	   .   r!   z$BadObjectUnicodeEncodeError.__init__Nr"   r   r   r   r   r$   -   r#   r$   c                   @   r   )NoEndUnicodeDecodeErrorc                 C   s    t | dtdddd | `d S Nr       r   r   r   )UnicodeDecodeErrorr	   	bytearrayr   r   r   r   r   r	   4   s   z NoEndUnicodeDecodeError.__init__Nr"   r   r   r   r   r%   3   r#   r%   c                   @   r   )BadObjectUnicodeDecodeErrorc                 C   s"   t | dtdddd g | _d S r&   )r(   r	   r)   r   r   r   r   r   r	   :   s   
z$BadObjectUnicodeDecodeError.__init__Nr"   r   r   r   r   r*   9   r#   r*   c                   @   r   )NoStartUnicodeTranslateErrorc                 C      t | dddd | `d S Nr   r   r   r   )UnicodeTranslateErrorr	   r   r   r   r   r   r	   @      z%NoStartUnicodeTranslateError.__init__Nr"   r   r   r   r   r+   ?   r#   r+   c                   @   r   )NoEndUnicodeTranslateErrorc                 C   r,   r-   )r.   r	   r   r   r   r   r   r	   F   r/   z#NoEndUnicodeTranslateError.__init__Nr"   r   r   r   r   r0   E   r#   r0   c                   @   r   )NoObjectUnicodeTranslateErrorc                 C   r,   r-   )r.   r	   r   r   r   r   r   r	   L   r/   z&NoObjectUnicodeTranslateError.__init__Nr"   r   r   r   r   r1   K   r#   r1   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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'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSS )TCodecCallbackTestc                 C   s0   d}|  |ddd |  |ddd d S )Nu   スパモ änd eggsr   xmlcharrefreplaces&   &#12473;&#12497;&#12514; &#228;nd eggslatin-1s!   &#12473;&#12497;&#12514; nd eggsassertEqualencode)r   sr   r   r   test_xmlcharrefreplaceR   s   

z(CodecCallbackTest.test_xmlcharrefreplacec                 C   d   dd }t d| d}d}| |dd| d}| |dd| d	}| |d
d| d S )Nc              	   S   s   t | tstd|  g }| j| j| j D ]#}z|dtjj	t
|   W q ty9   |dt
|  Y qw d|| jfS )Ndon't know how to handle %rz&%s;&#%d;r   )
isinstancer    	TypeErrorr   r   r   appendhtmlZentitiesZcodepoint2nameordKeyErrorjoinr   lcr   r   r   xmlcharnamereplaced   s   
zECodecCallbackTest.test_xmlcharnamereplace.<locals>.xmlcharnamereplaceztest.xmlcharnamereplaceu   «ℜ» = 〈ሴ€〉s0   &laquo;&real;&raquo; = &lang;&#4660;&euro;&rang;r   s$   &real; = &lang;&#4660;&euro;&rang;r4   s   &real; = &lang;&#4660;&rang;iso-8859-15codecsregister_errorr6   r7   )r   rG   sinsoutr   r   r   test_xmlcharnamereplace`   s   z)CodecCallbackTest.test_xmlcharnamereplacec                 C   r:   )Nc              	   S   s`   t | tstd|  g }| j| j| j D ]}|t|dt	|  qdd
| | jfS )Nr;   z0x%xz
[1m%s[0mz, )r=   r    r>   r   r   r   r?   unicodedatanamerA   rC   rD   r   r   r   uninamereplace   s   
z=CodecCallbackTest.test_uninamereplace.<locals>.uninamereplaceztest.uninamereplaceu   ¬ሴ€耀sN   [1mNOT SIGN, ETHIOPIC SYLLABLE SEE, EURO SIGN, CJK UNIFIED IDEOGRAPH-8000[0mr   sE   [1mETHIOPIC SYLLABLE SEE, EURO SIGN, CJK UNIFIED IDEOGRAPH-8000[0mr4   sA   [1mETHIOPIC SYLLABLE SEE[0m[1mCJK UNIFIED IDEOGRAPH-8000[0mrH   rI   )r   rQ   rL   rM   r   r   r   test_uninamereplacez   s   	z%CodecCallbackTest.test_uninamereplacec                 C   P   d}d}|  |dd| d}|  |dd| d}|  |dd| d S )	N   a¬ሴ€耀􏿿s!   a\xac\u1234\u20ac\u8000\U0010ffffr   backslashreplaces   a\u1234\u20ac\u8000\U0010ffffr4   s   a\u1234\u8000\U0010ffffrH   r5   r   rL   rM   r   r   r   test_backslashescape   s   z&CodecCallbackTest.test_backslashescapec                 C   rS   )	NrT   s[   a\N{NOT SIGN}\N{ETHIOPIC SYLLABLE SEE}\N{EURO SIGN}\N{CJK UNIFIED IDEOGRAPH-8000}\U0010ffffr   namereplacesP   a\N{ETHIOPIC SYLLABLE SEE}\N{EURO SIGN}\N{CJK UNIFIED IDEOGRAPH-8000}\U0010ffffr4   sD   a\N{ETHIOPIC SYLLABLE SEE}\N{CJK UNIFIED IDEOGRAPH-8000}\U0010ffffrH   r5   rV   r   r   r   test_nameescape   s   z!CodecCallbackTest.test_nameescapec                 C   sJ   dd }t d| d}d}| |dd| d}| t|jdd d S )Nc                 S   sB   t | tstd|  | j| j| jd  dkrd| jd fS | )Nr;      s    )r=   r(   r>   r   r   r   r   r   r   relaxedutf8   s
   
z>CodecCallbackTest.test_decoding_callbacks.<locals>.relaxedutf8ztest.relaxedutf8s   a bcüu	   a b cü  utf-8s   )rJ   rK   r6   decodeassertRaisesr(   )r   r]   rL   rM   r   r   r   test_decoding_callbacks   s   
z)CodecCallbackTest.test_decoding_callbacksc                 C   s   t dd dD }d}d}| t|d|d | d}| ttj|d| d	|td
< d}d}| t|d|d | d|td
< | ttj|d| d S )Nc                 s   s*    | ]}t |td |  dfV  qdS )rZ   r   N)rA   bytesupper.0rF   r   r   r   	<genexpr>   s   ( z7CodecCallbackTest.test_charmapencode.<locals>.<genexpr>Zabcdefghabcs   AABBCCstrictr   ZabcAs   XYZ?ZabcDEFs   AABBCCXYZXYZXYZreplaceZXYZ)dictr6   rJ   charmap_encoder`   UnicodeErrorrA   r>   )r   charmaprL   rM   r   r   r   test_charmapencode   s   z$CodecCallbackTest.test_charmapencodec                 C   s   dd }t d| dd }t d| d}| |ddd	 | |ddd
 | dddd | dddd | t ddtddid d | dddd | dddd d S )Nc                    sj   t  j j}t tr fdd|D }nt tr% fdd|D }ntd  dd|  jfS )Nc                    s   g | ]}d t  j|  qS z<%d>)rA   r   re   r   r\   r   r   
<listcomp>   s    zFCodecCallbackTest.test_callbacks.<locals>.handler1.<locals>.<listcomp>c                       g | ]	}d  j |  qS rp   r   rq   r\   r   r   rr          r;   [%s]r   )ranger   r   r=   r    r(   r>   rC   )r   rrE   r   r\   r   handler1   s   

z2CodecCallbackTest.test_callbacks.<locals>.handler1ztest.handler1c                    sJ   t  tstd   fddt j jD }dd|  jd fS )Nr;   c                    rs   rp   rt   rq   r\   r   r   rr      ru   zFCodecCallbackTest.test_callbacks.<locals>.handler2.<locals>.<listcomp>rv   r   r   )r=   r(   r>   rw   r   r   rC   )r   rE   r   r\   r   handler2   s   
z2CodecCallbackTest.test_callbacks.<locals>.handler2ztest.handler2s    r   z [<129>][<128>][<255>]z [<129>][<128>]s   \u3042\u3xxxunicode-escapeu   あ[<92><117><51>]xxxs   \u3042\u3xxu   あ[<92><117><51>]xx   abcazr   zz[<98>][<99>]u   güßrks   g[<252><223>]rku   güßs   g[<252><223>])rJ   rK   r6   r_   charmap_decoderA   r7   )r   ry   rz   r8   r   r   r   test_callbacks   sB   






z CodecCallbackTest.test_callbacksc                    s   g d}|D ]}t d| t | qd |dd |D 7 } fdddD D ]}dD ]}|D ]}z||| W q0 tyC   Y q0w q,q(d S )	N)rh   ignorerj   r3   rU   rX   test.  c                 S   s   g | ]}d | qS )r   r   )re   errr   r   r   rr   %      z6CodecCallbackTest.test_longstrings.<locals>.<listcomp>c                    s   g | ]}|  qS r   r   )re   r8   rE   r   r   rr   &  r   )x   あu   aä)r   r4   
iso-8859-1rH   r^   utf-7utf-16utf-32)rJ   rK   lookup_errorr7   rm   )r   errorsr   Zuniencr   r   r   test_longstrings  s    z"CodecCallbackTest.test_longstringsc           
      C   s   | j t|g|d d R   | j t|g|dg R   g d}tt|D ]8}|D ]3}t|t|| u r6q)g }tt|D ]}||krJ|| q>|||  q>| j t|g|R   q)q%|| }	| t|	| d S )Nztoo much)Zspams   eggss   spam*   g      ?N)r`   r>   rw   r   typer?   r6   str)
r   exctypeargsmsgZ	wrongargsiZwrongargZcallargsjr   r   r   r   check_exceptionobjectargs/  s    z+CodecCallbackTest.check_exceptionobjectargsc                 C   sp   |  tg dd |  tg dd |  tg dd |  tg dd |  tg d	d
 |  tg dd d S )N)r      gürkr   rZ   ouchz?'ascii' codec can't encode character '\xfc' in position 1: ouch)r   r   r      r   z;'ascii' codec can't encode characters in position 1-3: ouch)r   u   üxr   r   r   z?'ascii' codec can't encode character '\xfc' in position 0: ouch)r   u   Āxr   r   r   zA'ascii' codec can't encode character '\u0100' in position 0: ouch)r   u   ￿xr   r   r   zA'ascii' codec can't encode character '\uffff' in position 0: ouch)r   u   𐀀xr   r   r   zE'ascii' codec can't encode character '\U00010000' in position 0: ouch)r   r    r   r   r   r   test_unicodeencodeerrorH  s<   z)CodecCallbackTest.test_unicodeencodeerrorc                 C   s<   |  tdtddddgd |  tdtddddgd d S )	Nr   s   grkr   rZ   r   z8'ascii' codec can't decode byte 0xfc in position 1: ouch   z6'ascii' codec can't decode bytes in position 1-2: ouch)r   r(   r)   r   r   r   r   test_unicodedecodeerrorh  s   z)CodecCallbackTest.test_unicodedecodeerrorc                 C   s^   |  tg dd |  tg dd |  tg dd |  tg dd |  tg d	d
 d S )N)r   r   rZ   r   z4can't translate character '\xfc' in position 1: ouch)u   gĀrkr   rZ   r   z6can't translate character '\u0100' in position 1: ouch)u   g￿rkr   rZ   r   z6can't translate character '\uffff' in position 1: ouch)u   g𐀀rkr   rZ   r   z:can't translate character '\U00010000' in position 1: ouch)r   r   r   r   z0can't translate characters in position 1-2: ouch)r   r.   r   r   r   r   test_unicodetranslateerrort  s2   z,CodecCallbackTest.test_unicodetranslateerrorc              
   C   s~   |  ttjd |  ttjtd |  ttjtddddd |  ttjtdtdddd |  ttjtdddd d S )Nr   r   r   r   r   r      )	r`   r>   rJ   strict_errors	Exceptionr    r(   r)   r.   r   r   r   r   test_badandgoodstrictexceptions  s2   z1CodecCallbackTest.test_badandgoodstrictexceptionsc              
   C   s   |  ttjd |  ttjtd | ttdddddd | ttdtddddd | tt	ddddd d S )	Nr   r   r      aあbr   rZ   )r   rZ      ab)
r`   r>   rJ   ignore_errorsrm   r6   r    r(   r)   r.   r   r   r   r   test_badandgoodignoreexceptions  s8   z1CodecCallbackTest.test_badandgoodignoreexceptionsc              
   C   s   |  ttjd |  ttjtd |  ttjt  |  ttjt  | ttdddddd | tt	dt
ddddd	 | ttddddd	 d S )
Nr   r   r   r   r   rZ   )ri   rZ   r   )   �rZ   )r`   r>   rJ   replace_errorsrm   r$   r*   r6   r    r(   r)   r.   r   r   r   r    test_badandgoodreplaceexceptions  sL   z2CodecCallbackTest.test_badandgoodreplaceexceptionsc                 C   s   |  ttjd |  ttjtd |  ttjtdtdddd |  ttjtdddd d}|d	7 }d
dd |D }| 	tt
dd| d ddt| dd
dd |D dt| f d S )Nr   r   r   r   r   r   r   )r   r   	   
   c   d   i  r   i'  '  i 順 i?B @B )i   i  r   c                 s   s    | ]}t |V  qd S Nchrrd   r   r   r   rf         zOCodecCallbackTest.test_badandgoodxmlcharrefreplaceexceptions.<locals>.<genexpr>r}   bc                 s   s    | ]}d | V  qdS )r<   Nr   rd   r   r   r   rf     r   )r`   r>   rJ   xmlcharrefreplace_errorsrm   r(   r)   r.   rC   r6   r    r   )r   csr8   r   r   r   *test_badandgoodxmlcharrefreplaceexceptions  s>   z<CodecCallbackTest.test_badandgoodxmlcharrefreplaceexceptionsc                 C   sL  |  ttjd |  ttjtd g d}|D ]S\}}| j|dA | ttdd| d ddt| d|dt| f | tt	d| d ddt| d|dt| f W d    n1 sfw   Y  qg d	}|D ]1\}}| j|d
 | tt
dtd| d ddd|df W d    n1 sw   Y  qrd S )Nr   r   ))r   z\u3042)
\x0a)r}   \x61r[   \x00)   ÿ\xff)u   Āz\u0100)u   ￿z\uffff)u   𐀀z
\U00010000u   􏿿z
\U0010ffff   z\ud800   z\udfff   z\ud800\udfffr   r   r}   r   r   ))   ar   )   
r   )    r   )r   r   )rb   r      brZ   )r`   r>   rJ   backslashreplace_errorsrm   subTestr6   r    r   r.   r(   r)   )r   testsr8   rx   r   r   r   r   )test_badandgoodbackslashreplaceexceptions  sZ   z;CodecCallbackTest.test_badandgoodbackslashreplaceexceptionsc                 C   s   |  ttjd |  ttjtd |  ttjtdtdddd |  ttjtdddd g d}|D ]7\}}| j|d	% | 	tt
dd
| d ddt| d|dt| f W d    n1 sgw   Y  q5d S )Nr   r   r   r   r   r   r   ))r   z\N{HIRAGANA LETTER A}r   )u   ﯹzW\N{ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM})u   󠁿z\N{CANCEL TAG}r   r   r   r   r   r}   r   )r`   r>   rJ   namereplace_errorsrm   r(   r)   r.   r   r6   r    r   )r   r   r8   rx   r   r   r   $test_badandgoodnamereplaceexceptionsS  sD   z6CodecCallbackTest.test_badandgoodnamereplaceexceptionsc                 C   s   t d}| t|d | t|td | t|tdddd dD ]%}| j|d | t|td	|ddd W d    n1 sCw   Y  q#| |td	d
dddd | t	|t	d	t
dddd | |t	d	t
ddddd d S )Nsurrogateescaper   r      r   r   )r}   u   u   r   r   u   abrZ   )   rZ   r   s   ab)r   rZ   )rJ   r   r`   r>   rm   r.   r   r    r6   r(   r)   )r   Zsurrogateescape_errorsr8   r   r   r   (test_badandgoodsurrogateescapeexceptions  sT   
z:CodecCallbackTest.test_badandgoodsurrogateescapeexceptionsc                 C   s  t d}| t|d | t|td | t|tdddd dD ]5}| j|d% | t|t|d	ddd | t|t|d		|ddd W d    n1 sSw   Y  q#d
D ]'}| j|d | t|td|dt
|d W d    n1 s}w   Y  q[g d}|D ]\\}}}}| j|||dF | |t|d	| d ddt
| d|dt
| f | |t|td|d |  d dd| d|d d d| f W d    n1 sw   Y  qd S )Nsurrogatepassr   r   r   r   r   )r^   utf-16leutf-16beutf-32leutf-32beencodingr}   )r   r   r   r   r   ))r^   r   s   r   )r   r   s    rZ   )r   r   s    rZ   )r   r   s      r   )r   r   s      r   )r^   r   s   r   )r   r   s   rZ   )r   r   s   rZ   )r   r   s     r   )r   r   s     r   )r^   r   s   r   )r   r   s    rZ   )r   r   s    rZ   )r   r   s        r   )r   r   s        r   )r   r   rb   r   r   r   )rJ   r   r`   r>   rm   r.   r   r    r(   r7   r   r6   r)   )r   Zsurrogatepass_errorsr   r8   r   r   nr   r   r   &test_badandgoodsurrogatepassexceptions  sz   

z8CodecCallbackTest.test_badandgoodsurrogatepassexceptionsc                    sf   d}d}|D ]* t d fdd |D ]}| tdj|d qdD ]\}}| t|j|d q"qd S )N)	r   foo)r   rZ   r   r   r   r   r   Nr   r   r   r   )r   r4   r   rH   ztest.badhandlerc                    s    S r   r   )r   resr   r   <lambda>  s    z:CodecCallbackTest.test_badhandlerresults.<locals>.<lambda>r   )r   r   r^   r   )r   s   +x-)rJ   rK   r`   r>   r7   r_   )r   resultsZencsr   rb   r   r   r   test_badhandlerresults  s(   z(CodecCallbackTest.test_badhandlerresultsc                 C   s|   |  tjtd |  tjtd |  tjtd |  tjtd |  tjtd |  tjtd d S )Nrh   r   r3   rU   rX   )r6   rJ   r   r   r   r   r   r   r   r   r   r   test_lookup  s   zCodecCallbackTest.test_lookupc              
      s    fdd}t d| dD ]\}} ||d}| |d  d | qdD ]N\}} | j|d; | t}||d W d    n1 sKw   Y  |j}| |jd	 | |j	d
 | |j
| W d    n1 srw   Y  q)d S )Nc                        t | tr
 | jfS td|  Nr;   r=   r    r   r>   r\   r   r   r   r         

zBCodecCallbackTest.test_encode_nonascii_replacement.<locals>.handletest.replacing))r      [¤]rg   )r      [€]u   ½¾)rH   r   u   œŸ[]))r^      []   🐍)r   r   r   )r   r   r   r   r   rZ   )rJ   rK   r7   r6   r   r`   r    	exceptionr   r   r   )r   r   r   inputr   cmr   r   r   r    test_encode_nonascii_replacement  s"   z2CodecCallbackTest.test_encode_nonascii_replacementc              
      s    fdd}t d| dD ]N\}} | j|d; | t}||d W d    n1 s0w   Y  |j}| |jd | |j	d | |j
| W d    n1 sWw   Y  qd S )Nc                    r   r   r   r\   r   r   r   	unencrepl<  s   

zHCodecCallbackTest.test_encode_unencodable_replacement.<locals>.unencreplztest.unencreplhandler))r   r      ½)r   r   u   œ)rH   r   r   )r^   r      )r   r   r   )r   r   r   r   r   rZ   )rJ   rK   r   r`   r    r7   r   r6   r   r   r   )r   r   r   r   r   r   r   r   r   #test_encode_unencodable_replacement;  s   z5CodecCallbackTest.test_encode_unencodable_replacementc              	      s    fdd}t d| dD ]1\}} | j|d ||d}| |d|  d|  W d    n1 s:w   Y  qd S )Nc                    r   r   r   r\   r   r   r   r   T  r   z?CodecCallbackTest.test_encode_bytes_replacement.<locals>.handler   ))r   r      )r   r   r  )rH   r   r  )r^   r   r  )r   r   r  )r   r   r  )r   r      )r   r   r  r   r   r   )rJ   rK   r   r7   r6   )r   r   r   r   r   r   r   r   test_encode_bytes_replacementS  s   
"z/CodecCallbackTest.test_encode_bytes_replacementc              
      s    fdd}t d| d}g tdddgtdg d	R D ]U\} | j| d
B | t}||d W d    n1 sCw   Y  |j}| 	|j
d | 	|jd | 	|j| | 	|jd W d    n1 sqw   Y  q!d S )Nc                    r   r   r   r\   r   r   r   r   j  r   zCCodecCallbackTest.test_encode_odd_bytes_replacement.<locals>.handler   r   )r   r   r   r|   )r   r   )r   s   abr|   s   abcde)r   r   r   rZ   zsurrogates not allowed)rJ   rK   	itertoolsproductr   r`   r    r7   r   r6   r   r   r   reason)r   r   r   r   r   r   r   r   r   !test_encode_odd_bytes_replacementi  s0   z3CodecCallbackTest.test_encode_odd_bytes_replacementc                 C   s&   |  ttjd |  ttjdd d S )Nr   z
test.dummy)r`   r>   rJ   rK   r   r   r   r   test_badregistercall  s   z&CodecCallbackTest.test_badregistercallc                 C   s   |  ttj d S r   )r`   r>   rJ   r   r   r   r   r   test_badlookupcall  s   z$CodecCallbackTest.test_badlookupcallc                 C   s   |  ttjd d S )Ntest.unknown)r`   LookupErrorrJ   r   r   r   r   r   test_unknownhandler  s   z%CodecCallbackTest.test_unknownhandlerc                 C   sJ   d}d dd |D }tdtj dD ]}dD ]}||| qqd S )N)r      r   2   r   i  r   i  r   iP  r   i  r   r   c                 S   s   g | ]}t |qS r   r   )re   r   r   r   r   rr     r   z;CodecCallbackTest.test_xmlcharrefvalues.<locals>.<listcomp>test.xmlcharrefreplace)r   rH   )r3   r  )rC   rJ   rK   r   r7   )r   vr8   r   r   r   r   r   test_xmlcharrefvalues  s   z'CodecCallbackTest.test_xmlcharrefvaluesc              	   C   s  |  tdjdd dd }td| |  tdjdd |  tdjdd |  td	jdd |  td
jdd |  tdjdd |  tdjdd dd }td| |  tdjdd t }td|j d|_| 	dddd d|_| 	dddd d|_|  t
djdd d|_| 	dddd d|_| 	dddd d|_|  t
djdd d|_| 	dddd G dd dt}|  ttjdd d!d i |  ttjdd |  |  ttjdd d!tjd i d S )"Nr   r   r  c                 S      dS Nr   r   r\   r   r   r   baddecodereturn1     z=CodecCallbackTest.test_decodehelper.<locals>.baddecodereturn1ztest.baddecodereturn1   \r{      \x0s   \x0ys
   \Uffffeeees   \uyyyyraw-unicode-escapec                 S   r  N)ri   Nr   r\   r   r   r   baddecodereturn2  r  z=CodecCallbackTest.test_decodehelper.<locals>.baddecodereturn2ztest.baddecodereturn2test.posreturnr   s   0z<?>0z<?><?>r   rZ   r
   r      s   \uyyyy0c                   @   r   )z.CodecCallbackTest.test_decodehelper.<locals>.Dc                 S      t r   
ValueErrorr   keyr   r   r   __getitem__  r  z:CodecCallbackTest.test_decodehelper.<locals>.D.__getitem__Nr   r   r   r%  r   r   r   r   D  r#   r'  rh      )r`   r  r_   rJ   rK   r>   r   r   r   r6   
IndexErrorrk   rm   r   r"  sys
maxunicode)r   r  r  handlerr'  r   r   r   test_decodehelper  s@   "z#CodecCallbackTest.test_decodehelperc              	   C   st  |  tdjdd dd }td| |  tdjdd dd }td	| |  tdjdd	 t }td
|j d|_| 	ddd
d d|_| 	ddd
d d|_|  t
djdd
 d|_| 	ddd
d d|_| 	ddd
d d|_|  t
djdd
 d|_G dd dt}dD ]%}|  ttjd|dd i |  ttjd||  |  ttjd|ddi qd S )Nr   r   r  c                 S   r  r  r   r\   r   r   r   badencodereturn1  r  z=CodecCallbackTest.test_encodehelper.<locals>.badencodereturn1ztest.badencodereturn1c                 S   r  r  r   r\   r   r   r   badencodereturn2  r  z=CodecCallbackTest.test_encodehelper.<locals>.badencodereturn2ztest.badencodereturn2r  r   u   ÿ0s   <?>0r  s   <?><?>r  r   rZ   s   <?>r   r   c                   @   r   )z.CodecCallbackTest.test_encodehelper.<locals>.Dc                 S   r   r   r!  r#  r   r   r   r%    r  z:CodecCallbackTest.test_encodehelper.<locals>.D.__getitem__Nr&  r   r   r   r   r'    r#   r'  )rh   rj   r3   rU   rX   r  r(  i,  )r`   r  r7   rJ   rK   r>   r   r   r   r6   r)  rk   rm   rl   r"  )r   r.  r/  r,  r'  r   r   r   r   test_encodehelper  s8   z#CodecCallbackTest.test_encodehelperc              	   C   s   t d}td|j g d}|D ]0\}}d|| }| j|d d|_||d}| |d W d    n1 s<w   Y  qd S )Nr   test.bug36819)r   r   )r   s   ܀)r   s     ܀)z
iso-8859-6r   Zabcdr   r  abcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdx)	r   rJ   rK   r   r7   r   r   r_   r6   )r   r,  Z	testcasesr   r   r   Zdecodedr   r   r   test_decodehelper_bug36819  s   z,CodecCallbackTest.test_decodehelper_bug36819c              
   C   s  t  }td|j d}g d}|dg7 }tjdkrddg}d|_|D ]N}| j|d	> d
|_| 	t
}||d W d    n1 sEw   Y  |j}| |jd | |jd | |j| W d    n1 slw   Y  q#tjdkrd
|_| 	t
}td|d W d    n1 sw   Y  |j}| |jd | |jd | |j| d|_|D ]*}| j|d	 d
|_||d}| ||d W d    n1 sw   Y  qtjdkrd
|_td|d}| |d  d | |d t| d S d S )Nr1  u   abcd)r   latin1r^   r   r   rH   win32mbcsZoemr   r   r  r   r  i  r   r2  r   r   )r   rJ   rK   r   r*  platformr   r   r   r`   r    r7   r   r6   r   r   r   Zcode_page_encoder_   r   )r   r,  r   	encodingsr   r   r   encodedr   r   r   test_encodehelper_bug36819"  sV   


z,CodecCallbackTest.test_encodehelper_bug36819c                 C   sB   G dd dt }| tdjdtjd i | tdjddi d S )Nc                   @   r   )z1CodecCallbackTest.test_translatehelper.<locals>.Dc                 S   r   r   r!  r#  r   r   r   r%  U  r  z=CodecCallbackTest.test_translatehelper.<locals>.D.__getitem__Nr&  r   r   r   r   r'  T  r#   r'  r   r(  r   r   )rk   r`   r"  	translater*  r+  r>   )r   r'  r   r   r   test_translatehelperN  s   z&CodecCallbackTest.test_translatehelperc                 C   sD   t ddt ddt ddt ddi}d	D ]}d
| }|| qd S )N&z&amp;<z&lt;>z&gt;"z&quot;)r   r   r   r   zabc<def>ghi)rA   r;  )r   rn   r   textr   r   r   test_bug828737[  s   z CodecCallbackTest.test_bug828737c              	   C   s   g d}dd }t d| |D ]\}}| t ||d W d    n1 s*w   Y  qdd }t d| |D ]\}}| ||dd q<d S )	N)r   )r   s   ++r   )r   r   )r   r   )r{      \u123g)r  rC  c                 S       t | tr
d| _dS td|  )Nr      䉂r   r;   r=   r(   r   r>   r\   r   r   r   	replacingr     
zACodecCallbackTest.test_mutating_decode_handler.<locals>.replacingr   c                 S   rD  )Nr'   rE  r;   rG  r\   r   r   r   mutating~  rI  z@CodecCallbackTest.test_mutating_decode_handler.<locals>.mutatingztest.mutatingrF  )rJ   rK   r`   r>   r_   r6   )r   ZbaddatarH  r   datarJ  r   r   r   test_mutating_decode_handlerg  s   
z.CodecCallbackTest.test_mutating_decode_handlerc                    s   t j fdd}t d| dddd fdd	}|d
dd |ddd |ddd |ddd |ddd |tdd d dd |tdd d dd |ddd |ddd |tdd d dd d S )Nc                    sZ   t | tr' | jd | j }|d ur'|d | j| jd   | _d|d fS td|  )Nr   u   Єr   r;   )r=   r(   getr   r   AssertionError)r   rx   )rK  r   r   rJ    s   
zOCodecCallbackTest.test_mutating_decode_handler_unicode_escape.<locals>.mutatingtest.mutating2)r  r   )s   xxx\r   )s   x\r   )r  s   \x3s   \x5c                    sZ    t} | d|t| f W d    n1 sw   Y  |t|j d S )NrO  )ZassertWarnsDeprecationWarningr6   r   ZassertInr   warning)r   Zexpectedr   r   )r_   r   r   r   check  s   zLCodecCallbackTest.test_mutating_decode_handler_unicode_escape.<locals>.checks   \x0n\zu   Є
\zzinvalid escape sequence '\z's   \x0zu   Є\zs   \x3n\zru   Є
\zrs   \x3zru   Є\zrs   \x3z5u   Є\z5s   \x3z5xr   s   \x3z5xyr  s   \x5n\zs   \x5zs   \x5zy)rJ   unicode_escape_decoderK   
memoryview)r   rJ  rR  r   )rK  r_   r   r   +test_mutating_decode_handler_unicode_escape  s$   z=CodecCallbackTest.test_mutating_decode_handler_unicode_escapec                 C   s   dd }t d| | dddd | dddd | d	d
dd | dddd dd }t d| | dddd | dddd d S )Nc                 S   s$   t | trd| jd fS td|  )Nr   r   r;   )r=   r(   r   r>   r\   r   r   r   forward_shorter_than_end  s   
zPCodecCallbackTest.test_crashing_decode_handler.<locals>.forward_shorter_than_endztest.forward_shorter_than_ends      z	utf-16-leu   ����Ø s      z	utf-16-bes         z	utf-32-leu   ���ᄑ s         z	utf-32-bec                 S   s&   t | trd| _d| jfS td|  )Ns           r   r;   )r=   r(   r   r   r>   r\   r   r   r   replace_with_long  s   

zICodecCallbackTest.test_crashing_decode_handler.<locals>.replace_with_longztest.replace_with_longr   r   u   �    r   u   �  )rJ   rK   r6   r_   )r   rV  rW  r   r   r   test_crashing_decode_handler  sL   

z.CodecCallbackTest.test_crashing_decode_handlerc                    s   t jt jt jt jt jt jt dt dg}tt	t
fD ]r G  fdddt}|D ]!}| j| d | t||  W d    n1 sEw   Y  q)G  fdddt}|D ]5}| j| d$ | t|f ||  W d    n1 sxw   Y  W d    n1 sw   Y  qWqd S )Nr   r   c                          e Zd Z ZdS zACodecCallbackTest.test_fake_error_class.<locals>.FakeUnicodeErrorNr   r   r   	__class__r   clsr   r   FakeUnicodeError      r_  )r,  Zerror_classc                       rY  rZ  r[  r   r]  r   r   r_    r`  )rJ   r   r   r   r   r   r   r   r    r(   r.   r   r   r`   r>   r   )r   handlersr_  r,  r   r]  r   test_fake_error_class  s6   
z'CodecCallbackTest.test_fake_error_classN),r   r   r   r9   rN   rR   rW   rY   ra   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r
  r  r  r-  r0  r3  r:  r<  rB  rL  rU  rX  rb  r   r   r   r   r2   P   sT    9 (%:.,H;6,##3r2   __main__)rJ   Zhtml.entitiesr@   r  r*  rO   Zunittestr   r   r    r   r$   r(   r%   r*   r.   r+   r0   r1   ZTestCaser2   r   mainr   r   r   r   <module>   s8             2