
    daf                     N   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      Z G d d      Z G d de	      Z
 G d d	e	      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d dej&                        Zedk(  r ej,                          yy)    Nc                       e Zd Zd Zd Zy)	PosReturnc                     d| _         y Nr   )posselfs    3/root/Python-3.12.4/Lib/test/test_codeccallbacks.py__init__zPosReturn.__init__   s	        c                     | j                   }|}|dk  rt        |j                        |z   }||j                  k  rt        |j                        | _         d|fS )Nr   <?>)r   lenobjectstart)r	   excoldposrealposs       r
   handlezPosReturn.handle   sP    19#**o/G cii3::DHvr   N__name__
__module____qualname__r   r    r   r
   r   r   	   s    	r   r   c                       e Zd ZddZd Zy)RepeatedPosReturnc                 .    || _         d| _        d| _        y r   )replr   count)r	   r   s     r
   r   zRepeatedPosReturn.__init__   s    	
r   c                     | j                   dkD  r-| xj                   dz  c_         | j                  | j                  fS | j                  |j                  fS )Nr      )r   r   r   end)r	   r   s     r
   r   zRepeatedPosReturn.handle    s@    ::>JJ!OJIItxx((		377##r   N)r   r   r   r   r
   r   r      s    
$r   r   c                       e Zd Zd Zy)BadStartUnicodeEncodeErrorc                 F    t         j                  | ddddd       g | _        y Nascii r   r!   bad)UnicodeEncodeErrorr   r   r   s    r
   r   z#BadStartUnicodeEncodeError.__init__(   s!    ##D'2q!UC
r   Nr   r   r   r   r   r   r
   r$   r$   '       r   r$   c                       e Zd Zd Zy)BadObjectUnicodeEncodeErrorc                 F    t         j                  | ddddd       g | _        y r&   )r*   r   r   r   s    r
   r   z$BadObjectUnicodeEncodeError.__init__.   s!    ##D'2q!UCr   Nr+   r   r   r
   r.   r.   -       r   r.   c                       e Zd Zd Zy)NoEndUnicodeDecodeErrorc                 N    t         j                  | dt        d      ddd       | `y Nr'   r   r   r!   r)   )UnicodeDecodeErrorr   	bytearrayr"   r   s    r
   r   z NoEndUnicodeDecodeError.__init__4   s#    ##D'9S>1aOHr   Nr+   r   r   r
   r2   r2   3       r   r2   c                       e Zd Zd Zy)BadObjectUnicodeDecodeErrorc                 X    t         j                  | dt        d      ddd       g | _        y r4   )r5   r   r6   r   r   s    r
   r   z$BadObjectUnicodeDecodeError.__init__:   s%    ##D'9S>1aOr   Nr+   r   r   r
   r9   r9   9   r0   r   r9   c                       e Zd Zd Zy)NoStartUnicodeTranslateErrorc                 :    t         j                  | dddd       | `y Nr(   r   r!   r)   )UnicodeTranslateErrorr   r   r   s    r
   r   z%NoStartUnicodeTranslateError.__init__@   s    &&tRAu=Jr   Nr+   r   r   r
   r<   r<   ?   s    r   r<   c                       e Zd Zd Zy)NoEndUnicodeTranslateErrorc                 :    t         j                  | dddd       | `y r>   )r?   r   r"   r   s    r
   r   z#NoEndUnicodeTranslateError.__init__F   s    &&tb!Q>Hr   Nr+   r   r   r
   rA   rA   E   r7   r   rA   c                       e Zd Zd Zy)NoObjectUnicodeTranslateErrorc                 :    t         j                  | dddd       | `y r>   )r?   r   r   r   s    r
   r   z&NoObjectUnicodeTranslateError.__init__L   s    &&tRAu=Kr   Nr+   r   r   r
   rD   rD   K   r,   r   rD   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*y))*CodecCallbackTestc                     d}| j                  |j                  dd      d       | j                  |j                  dd      d       y )Nu   スパモ änd eggsr'   xmlcharrefreplaces&   &#12473;&#12497;&#12514; &#228;nd eggslatin-1s!   &#12473;&#12497;&#12514; nd eggsassertEqualencode)r	   ss     r
   test_xmlcharrefreplacez(CodecCallbackTest.test_xmlcharrefreplaceR   sK     -HHW125	
 	HHY 343	
r   c                    d }t        j                  d|       d}d}| j                  |j                  dd      |       d}| j                  |j                  dd      |       d}| j                  |j                  d	d      |       y )
Nc                    t        | t              st        d| z        g }| j                  | j                  | j
                   D ];  }	 |j                  dt        j                  j                  t        |         z         = dj                  |      | j
                  fS # t        $ r  |j                  dt        |      z         Y w xY w)Ndon't know how to handle %rz&%s;&#%d;r(   )
isinstancer*   	TypeErrorr   r   r"   appendhtmlentitiescodepoint2nameordKeyErrorjoinr   lcs      r
   xmlcharnamereplacezECodecCallbackTest.test_xmlcharnamereplace.<locals>.xmlcharnamereplaced   s    c#56 = CDDAZZ		#''2 //HHVdmm&B&B3q6&JJK/
 GGAJ((   /HHWs1v-./s   8B&CCztest.xmlcharnamereplaceu   «ℜ» = 〈ሴ€〉s0   &laquo;&real;&raquo; = &lang;&#4660;&euro;&rang;r'   s$   &real; = &lang;&#4660;&euro;&rang;rJ   s   &real; = &lang;&#4660;&rang;iso-8859-15codecsregister_errorrL   rM   )r	   r`   sinsouts       r
   test_xmlcharnamereplacez)CodecCallbackTest.test_xmlcharnamereplace`   s    		) 	%'9	; :BG-FGN<I/HI4P:M3LMtTr   c                    d }t        j                  d|       d}d}| j                  |j                  dd      |       d}| j                  |j                  dd      |       d}| j                  |j                  d	d      |       y )
Nc           
      4   t        | t              st        d| z        g }| j                  | j                  | j
                   D ]3  }|j                  t        j                  |dt        |      z               5 ddj                  |      z  | j
                  fS )NrR   z0x%xz
[1m%s[0mz, )rT   r*   rU   r   r   r"   rV   unicodedatanamerZ   r\   r]   s      r
   uninamereplacez=CodecCallbackTest.test_uninamereplace.<locals>.uninamereplace   s    c#56 = CDDAZZ		#''2 ?))!Vc!f_=>?&15sww??r   z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[0mrJ   sA   [1mETHIOPIC SYLLABLE SEE[0m[1mCJK UNIFIED IDEOGRAPH-8000[0mra   rb   )r	   rl   re   rf   s       r
   test_uninamereplacez%CodecCallbackTest.test_uninamereplacez   s    	@ 	!>	3 'fG-BCTJ`I/DEtLeM3HI4Pr   c                     d}d}| j                  |j                  dd      |       d}| j                  |j                  dd      |       d}| j                  |j                  dd      |       y )	N   a¬ሴ€耀􏿿s!   a\xac\u1234\u20ac\u8000\U0010ffffr'   backslashreplaces   a\u1234\u20ac\u8000\U0010ffffrJ   s   a\u1234\u8000\U0010ffffra   rK   r	   re   rf   s      r
   test_backslashescapez&CodecCallbackTest.test_backslashescape   sl     28G-?@$G7I/ABDI4M3EFMr   c                     d}d}| j                  |j                  dd      |       d}| j                  |j                  dd      |       d}| j                  |j                  dd      |       y )	Nro   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}\U0010ffffrJ   sD   a\N{ETHIOPIC SYLLABLE SEE}\N{CJK UNIFIED IDEOGRAPH-8000}\U0010ffffra   rK   rq   s      r
   test_nameescapez!CodecCallbackTest.test_nameescape   so     2>G];TB>I}=tD>M=A4Hr   c                     d }t        j                  d|       d}d}| j                  |j                  dd      |       d}| j	                  t
        |j                  dd       y )Nc                     t        | t              st        d| z        | j                  | j                  | j                  dz    dk(  rd| j                  dz   fS | )NrR      s    )rT   r5   rU   r   r   r   s    r
   relaxedutf8z>CodecCallbackTest.test_decoding_callbacks.<locals>.relaxedutf8   sU    c#56 = CDDzz#))CIIaK0K?		!,,	r   ztest.relaxedutf8s   a bcüu	   a b cü  utf-8s   )rc   rd   rL   decodeassertRaisesr5   )r	   r{   re   rf   s       r
   test_decoding_callbacksz)CodecCallbackTest.test_decoding_callbacks   sf    
	 	0+> 9(G-?@$G ",cjj!#5	7r   c                    t        d dD              }d}d}| j                  t        j                  |d|      d   |       d}| j	                  t
        t        j                  |d|       d|t        d	      <   d
}d}| j                  t        j                  |d|      d   |       d|t        d	      <   | j	                  t        t        j                  |d|       y )Nc              3   l   K   | ],  }t        |      t        d |j                         z  d      f . yw)rx   r'   N)rZ   bytesupper.0r_   s     r
   	<genexpr>z7CodecCallbackTest.test_charmapencode.<locals>.<genexpr>   s*     QAa	k7 ;<Qs   24abcdefghabcs   AABBCCstrictr   abcAs   XYZ?abcDEFs   AABBCCXYZXYZXYZreplaceXYZ)dictrL   rc   charmap_encoder~   UnicodeErrorrZ   rU   )r	   charmapre   rf   s       r
   test_charmapencodez$CodecCallbackTest.test_charmapencode   s    
 QjQQ..sHgFqI4P,(=(=sHgV"C!..sIwGJDQ!C)V%:%:CGTr   c           	      n   d }t        j                  d|       d }t        j                  d|       d}| j                  |j                  dd      d       | j                  |j                  dd      d       | j                  d	j                  d
d      d       | j                  dj                  d
d      d       | j                  t        j                  ddt        d      di      d   d       | j                  dj                  dd      d       | j                  dj                  dd      d       y )Nc                    t        | j                  | j                        }t        | t              r)|D cg c]  }dt        | j                  |         z   }}n>t        | t              r |D cg c]  }d| j                  |   z   }}nt        d| z        ddj                  |      z  | j                  fS c c}w c c}w )N<%d>rR   [%s]r(   )
ranger   r"   rT   r*   rZ   r   r5   rU   r\   )r   rr   r^   s       r
   handler1z2CodecCallbackTest.test_callbacks.<locals>.handler1   s    cii)A#12>?@sVc#**S/22@@C!349:;#Vcjjo-;; = CDDRWWQZ'11 A;s   "B8.B=ztest.handler1c                    t        | t              st        d| z        t        | j                  | j
                        D cg c]  }d| j                  |   z   }}ddj                  |      z  | j
                  dz   fS c c}w )NrR   r   r   r(   r!   )rT   r5   rU   r   r   r"   r   r\   )r   r   r^   s      r
   handler2z2CodecCallbackTest.test_callbacks.<locals>.handler2   ss    c#56 = CDD5:399cgg5NOc#**S/)OAORWWQZ'33 Ps   A?z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>])rc   rd   rL   r}   charmap_decoderZ   rM   )r	   r   r   rN   s       r
   test_callbacksz CodecCallbackTest.test_callbacks   s5   	2 	ox8	4 	ox8#HHWo.+	
 	HHWo. 	

 	$$%5G&	

 	##$4oF%	

 	!!&/CHc?KAN	

 	  /:	

 	w8	
r   c                 F   g d}|D ].  }t        j                  d|z   t        j                  |             0 d}||D cg c]  }d|z   	 c}z  }dD cg c]  }||z  	 c}D ]#  }dD ]  }|D ]  }	 |j                  ||         % y c c}w c c}w # t        $ r Y 2w xY w)N)r   ignorer   rI   rp   rt   ztest.  )x   あu   aä)r'   rJ   
iso-8859-1ra   r|   utf-7utf-16utf-32)rc   rd   lookup_errorrM   r   )r	   errorserrr^   rN   uniencs          r
   test_longstringsz"CodecCallbackTest.test_longstrings  s    6  	KC!!'C-1D1DS1IJ	KV5cGcM55":<QQqS< 	C> ! C

3,	 6< ( s   B
B1B	B 	B 	c                     | j                   t        |g|d d    | j                   t        |g|dgz     g d}t        t        |            D ]  }|D ]z  }t	        |      t	        ||         u rg }t        t        |            D ]-  }||k(  r|j                  |       |j                  ||          /  | j                   t        |g|  |   || }	| j                  t        |	      |       y )Nztoo much)spams   eggss   spam*   g      ?N)r~   rU   r   r   typerV   rL   str)
r	   exctypeargsmsg	wrongargsiwrongargcallargsjr   s
             r
   check_exceptionobjectargsz+CodecCallbackTest.check_exceptionobjectargs/  s     	)W9tCRy9)WE
|0CE?	s4y! 	AA% 
A>T$q']2s4y) 1A!t 1 Q0	1
 "!!)W@x@
A	A tnS3'r   c                 0   | j                  t        g dd       | j                  t        g dd       | j                  t        g dd       | j                  t        g dd       | j                  t        g d	d
       | j                  t        g dd       y )N)r'      gürkr!   rx   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   s    r
   test_unicodeencodeerrorz)CodecCallbackTest.test_unicodeencodeerrorH  s    &&.N	

 	&&.I	

 	&&,N	

 	&&.P	

 	&&.P	

 	&&2T	
r   c                     | j                  t        dt        d      dddgd       | j                  t        dt        d      dddgd       y )	Nr'   s   grkr!   rx   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   r5   r6   r   s    r
   test_unicodedecodeerrorz)CodecCallbackTest.test_unicodedecodeerrorh  sR    &&i
+Q6:F	

 	&&i
+Q6:D	
r   c                     | j                  t        g dd       | j                  t        g dd       | j                  t        g dd       | j                  t        g dd       | j                  t        g d	d
       y )N)r   r!   rx   r   z4can't translate character '\xfc' in position 1: ouch)u   gĀrkr!   rx   r   z6can't translate character '\u0100' in position 1: ouch)u   g￿rkr!   rx   r   z6can't translate character '\uffff' in position 1: ouch)u   g𐀀rkr!   rx   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   s    r
   test_unicodetranslateerrorz,CodecCallbackTest.test_unicodetranslateerrort  s}    &&!%C	

 	&&!'E	

 	&&!'E	

 	&&!+I	

 	&&!%>	
r   c                    | j                  t        t        j                  d       | j                  t        t        j                  t	        d             | j                  t
        t        j                  t        ddddd             | j                  t        t        j                  t        dt        d      ddd             | j                  t        t        j                  t        dddd             y )Nr   r   r'   r   r   r!      )	r~   rU   rc   strict_errors	Exceptionr*   r5   r6   r?   r   s    r
   test_badandgoodstrictexceptionsz1CodecCallbackTest.test_badandgoodstrictexceptions  s      	
 	  f	
 	  w!Q?	

 	  w	'(:Aq&I	

 	!  !(Aq&9	
r   c                    | j                  t        t        j                  d       | j                  t        t        j                  t	        d             | j                  t        j                  t        ddddd            d       | j                  t        j                  t        dt        d      ddd            d       | j                  t        j                  t        dddd            d       y )	Nr   r   r'      aあbr!   rx   )r(   rx      ab)
r~   rU   rc   ignore_errorsr   rL   r*   r5   r6   r?   r   s    r
   test_badandgoodignoreexceptionsz1CodecCallbackTest.test_badandgoodignoreexceptions  s    	
 		
 	  "7J1fEG	

 	  "7Ii,@!QOQ	

 	  %j!Q?A	
r   c                    | j                  t        t        j                  d       | j                  t        t        j                  t	        d             | j                  t        t        j                  t                      | j                  t        t        j                  t                      | j                  t        j                  t        ddddd            d       | j                  t        j                  t        dt        d      ddd            d	       | j                  t        j                  t        dddd            d	       y )
Nr   r   r'   r   r!   rx   )r   rx   r   )   �rx   )r~   rU   rc   replace_errorsr   r.   r9   rL   r*   r5   r6   r?   r   s    r
    test_badandgoodreplaceexceptionsz2CodecCallbackTest.test_badandgoodreplaceexceptions  s      	
 	  	

 	!!')	

 	!!')	
 	!!"7J1fEG	

 	!!"7Ii,@!QOQ	

 	!!%j!Q?A	
r   c                    | j                  t        t        j                  d       | j                  t        t        j                  t	        d             | j                  t        t        j                  t        dt        d      ddd             | j                  t        t        j                  t        dddd             d}|d	z  }d
j                  d |D              }| j                  t        j                  t        dd|z   dz   ddt        |      z   d            d
j                  d |D              dt        |      z   f       y )Nr   r   r'   r   r   r!   r   )r   r!   	   
   c   d   i  r   i'  '  i 順 i?B @B )i   i  r(   c              3   2   K   | ]  }t        |        y wN)chrr   s     r
   r   zOCodecCallbackTest.test_badandgoodxmlcharrefreplaceexceptions.<locals>.<genexpr>  s     'qCF's   r   bc              3   &   K   | ]	  }d |z    yw)rS   Nr   r   s     r
   r   zOCodecCallbackTest.test_badandgoodxmlcharrefreplaceexceptions.<locals>.<genexpr>  s     -QWq[-s   )r~   rU   rc   xmlcharrefreplace_errorsr   r5   r6   r?   r\   rL   r*   r   )r	   csrN   s      r
   *test_badandgoodxmlcharrefreplaceexceptionsz<CodecCallbackTest.test_badandgoodxmlcharrefreplaceexceptions  s$   **	
 	**	
 	++w	'(:Aq&I	

 	++!(Aq&9	

GG'B''++"7C!GcM#$a#a&j&: WW-"--q3q6z:	
r   c                 L   | j                  t        t        j                  d       | j                  t        t        j                  t	        d             g d}|D ]  \  }}| j                  |      5  | j                  t        j                  t        dd|z   dz   ddt        |      z   d            |dt        |      z   f       | j                  t        j                  t        d|z   dz   ddt        |      z   d            |dt        |      z   f       d d d         g d	}|D ]c  \  }}| j                  |
      5  | j                  t        j                  t        dt        d|z   dz         ddd            |df       d d d        e y # 1 sw Y   =xY w# 1 sw Y   }xY w)Nr   r   ))r   z\u3042)
\x0a)r   \x61ry   \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   )r   r      brx   )r~   rU   rc   backslashreplace_errorsr   subTestrL   r*   r   r?   r5   r6   )r	   testsrN   r   r   s        r
   )test_badandgoodbackslashreplaceexceptionsz;CodecCallbackTest.test_badandgoodbackslashreplaceexceptions  s   ))	
 	))	

  	DAq!$   22*7C!GcM+,a#a&j&BC CF
O	   22-cAgm./SVVEF CF
O	 	
  	DAqA&   22*7IdQho4N+,a9: F	 	' ( s   2B$F>AFF	F#	c                    | j                  t        t        j                  d       | j                  t        t        j                  t	        d             | j                  t        t        j                  t        dt        d      ddd             | j                  t        t        j                  t        dddd             g d}|D ]r  \  }}| j                  |	      5  | j                  t        j                  t        dd
|z   dz   ddt        |      z   d            |dt        |      z   f       d d d        t y # 1 sw Y   xY w)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~   rU   rc   namereplace_errorsr   r5   r6   r?   r   rL   r*   r   )r	   r   rN   r   s       r
   $test_badandgoodnamereplaceexceptionsz6CodecCallbackTest.test_badandgoodnamereplaceexceptionsS  s4   $$	
 	$$	
 	%%w	'(:Aq&I	

 	%%!(Aq&9	

  	DAq!$   --*7C!GcM+,a#a&j&BC CF
O	 	 s   AD<<E	c                    t        j                  d      }| j                  t        |d       | j                  t        |t	        d             | j                  t        |t        dddd             dD ]A  }| j                  |      5  | j                  t        |t        d	|ddd             d d d        C | j                   |t        d	d
ddd            d       | j                  t        |t        d	t        d      ddd             | j                   |t        d	t        d      ddd            d       y # 1 sw Y   xY w)Nsurrogateescaper   r      r   r!   )r   u   u   r   r'   u   abrx   )   rx   r   s   ab)r  rx   )rc   r   r~   rU   r   r?   r   r*   rL   r5   r6   )r	   surrogateescape_errorsrN   s      r
   (test_badandgoodsurrogateescapeexceptionsz:CodecCallbackTest.test_badandgoodsurrogateescapeexceptions  sQ   !'!4!45F!G!	
 	!	
 	"!(Aq&9	
 + 	A!$ !!&*&w1a@ 	 	""7J1fEG	

 	"w	$AvF	

 	""7Ii,@!QOQ	
! s   %D77E 	c                 &   t        j                  d      }| j                  t        |d       | j                  t        |t	        d             | j                  t        |t        dddd             dD ]t  }| j                  |      5  | j                  t        |t        |d	ddd             | j                  t        |t        |d	j                  |      ddd             d d d        v d
D ]J  }| j                  |      5  | j                  t        |t        d|dt        |      d             d d d        L g d}|D ]  \  }}}}| j                  |||      5  | j                   |t        |d	|z   dz   ddt        |      z   d            |dt        |      z   f       | j                   |t        |t        d|d | z   dz         dd|z   d            |d d d|z   f       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)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    rx   )r  r   s    rx   )r  r   s      r   )r  r   s      r   )r|   r   s   r   )r  r   s   rx   )r  r   s   rx   )r  r   s     r   )r  r   s     r   )r|   r   s   r   )r  r   s    rx   )r  r   s    rx   )r  r   s        r   )r  r   s        r   )r  r   r   r   r   r   )rc   r   r~   rU   r   r?   r   r*   r5   rM   r   rL   r6   )r	   surrogatepass_errorsr   rN   r   r   ns          r
   &test_badandgoodsurrogatepassexceptionsz8CodecCallbackTest.test_badandgoodsurrogatepassexceptions  sH   %22?C	
 		
 	 !(Aq&9	
 M 	Cs+ 
!!&(&sCAv>
 !!&(&sCJJsOQ6J
 
	 6 	A!$ !!&(&w1c!ffE 	
" " 	LCAqs;   (*3a#+,a#a&j&BC CF
O	   (*3	$2A,:M0N+,a!eV=> rUAEN	 	G
 
 0 s&   AG- .G:BH-G7	:H	H	c                     d}d}|D ]p  t        j                  dfd       |D ]$  }| j                  t        dj                  |d       & dD ]'  \  }}| j                  t        |j
                  |d       ) r y )N)	r   foo)r!   rx   r   r  r!   r   r  Nr  r  r  r  )r'   rJ   r   ra   ztest.badhandlerc                     S r   r   )r   ress    r
   <lambda>z:CodecCallbackTest.test_badhandlerresults.<locals>.<lambda>  s    s r   r   )r'   r   r|   r   )r   s   +x-)rc   rd   r~   rU   rM   r}   )r	   resultsencsr   r   r  s        @r
   test_badhandlerresultsz(CodecCallbackTest.test_badhandlerresults  s    x@ 	C!!"3]C !!OO%	! 
e
 !!LL%	
	r   c                 h   | j                  t        j                  t        j                  d             | j                  t        j                  t        j                  d             | j                  t        j                  t        j                  d             | j                  t        j
                  t        j                  d             | j                  t        j                  t        j                  d             | j                  t        j                  t        j                  d             y )Nr   r   rI   rp   rt   )rL   rc   r   r   r   r   r   r  r   s    r
   test_lookupzCodecCallbackTest.test_lookup  s    --v/B/B8/LM--v/B/B8/LM--v/B/B8/LM++ 34	
 	** 23	
 	%%.	
r   c                 `   fd}t        j                  d|       dD ]?  \  }}|j                  |d      }| j                  |dz   dz   j                  |             A dD ]  \  }}| j	                  |      5  | j                  t              5 }|j                  |d       d d d        j                  }| j                  |j                  d       | j                  |j                  d	       | j                  |j                  |       d d d         y # 1 sw Y   txY w# 1 sw Y   xY w)
Nc                 \    t        | t              r| j                  fS t        d| z        NrR   rT   r*   r"   rU   r   r   s    r
   r   zBCodecCallbackTest.test_encode_nonascii_replacement.<locals>.handle   -    #12cgg&9C?@@r   test.replacing))r'      [¤]r   )r      [€]u   ½¾)ra   r+  u   œŸ[]))r|      []   🐍)r   r/  r0  )r   r/  r0  r  r!   rx   )rc   rd   rM   rL   r   r~   r*   	exceptionr   r"   r   )r	   r   r   inputr  cmr   r   s          @r
    test_encode_nonascii_replacementz2CodecCallbackTest.test_encode_nonascii_replacement  s)   	A 	.7!
 	BC
 ,,s$45CS3:#3";";C"@A	B!
 	4C
 s+ 4&&'9: 8bLL&678ll  A.  !,  U34 4	48 84 4s%   <D$D%A(D$D!D$$D-	c                    fd}t        j                  d|       dD ]  \  }}| j                  |      5  | j                  t              5 }|j                  |d       d d d        j                  }| j                  |j                  d       | j                  |j                  d       | j                  |j                  |       d d d         y # 1 sw Y   txY w# 1 sw Y   xY w)Nc                 \    t        | t              r| j                  fS t        d| z        r&  r'  r(  s    r
   	unencreplzHCodecCallbackTest.test_encode_unencodable_replacement.<locals>.unencrepl<  s-    #12cgg& = CDDr   ztest.unencreplhandler))r'   r+     ½)r   r,  u   œ)ra   r+  r8  )r|   r/     )r   r/  r9  )r   r/  r9  r  r!   rx   )rc   rd   r   r~   r*   rM   r1  rL   r   r"   r   )r	   r7  r   r2  r3  r   r   s         @r
   #test_encode_unencodable_replacementz5CodecCallbackTest.test_encode_unencodable_replacement;  s    	E
 	5yA!
 	4C s+ 4&&'9: ?bLL&=>?ll  A.  !,  U34 4	4? ?4 4s$   C C!A(C CC  C)	c           	      0   fd}t        j                  d|       dD ]i  \  }}| j                  |      5  |j                  |d      }| j	                  |dj                  |      z   dj                  |      z          d d d        k y # 1 sw Y   vxY w)Nc                 \    t        | t              r| j                  fS t        d| z        r&  r'  r(  s    r
   r   z?CodecCallbackTest.test_encode_bytes_replacement.<locals>.handleT  r)  r   r*  ))r'   r+     )r   r,  r=  )ra   r+  r=  )r|   r/  r=  )r  r/  r=  )r  r/  r=  )r  r/     )r  r/  r>  r  r-  r.  )rc   rd   r   rM   rL   )r	   r   r   r2  r  r   s        @r
   test_encode_bytes_replacementz/CodecCallbackTest.test_encode_bytes_replacementS  s    	A 	.7	!
 	PC s+ Pll3(89  cjjo&<szz#&NOP P	PP Ps   A	BB	c                 v   fd}t        j                  d|       d}g t        j                  dddg      t        j                  dg d      D ]  \  }| j	                  |	      5  | j                  t              5 }|j                  |d       d d d        j                  }| j                  |j                  d
       | j                  |j                  d       | j                  |j                  |       | j                  |j                  d       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nc                 \    t        | t              r| j                  fS t        d| z        r&  r'  r(  s    r
   r   zCCodecCallbackTest.test_encode_odd_bytes_replacement.<locals>.handlej  r)  r   r*  r/  )r  r  r   r   )r  r  )r   s   abr   s   abcde)r  r   r!   rx   zsurrogates not allowed)rc   rd   	itertoolsproductr   r~   r*   rM   r1  rL   r   r"   r   reason)r	   r   r2  r   r3  r   r   s         @r
   !test_encode_odd_bytes_replacementz3CodecCallbackTest.test_encode_odd_bytes_replacementi  s1   	A 	.7
7 $f~/
 7>@
 	GIC s6 G&&'9: 8bLL&678ll  A.  !,  U3  -EFG G	G8 8G Gs%   +D/D#BD/#D,(D//D8	c                     | j                  t        t        j                  d       | j                  t        t        j                  dd       y )Nr   z
test.dummy)r~   rU   rc   rd   r   s    r
   test_badregistercallz&CodecCallbackTest.test_badregistercall  s6     	)V%:%:B?)V%:%:L"Mr   c                 L    | j                  t        t        j                         y r   )r~   rU   rc   r   r   s    r
   test_badlookupcallz$CodecCallbackTest.test_badlookupcall  s     	)V%8%89r   c                 N    | j                  t        t        j                  d       y )Ntest.unknown)r~   LookupErrorrc   r   r   s    r
   test_unknownhandlerz%CodecCallbackTest.test_unknownhandler  s     	+v':':NKr   c                     d}dj                  |D cg c]  }t        |       c}      }t        j                  dt        j                         dD ]  }dD ]  }|j                  ||         y c c}w )N)r!      r   2   r   i  r   i  r   iP  r   i  r   r(   test.xmlcharrefreplace)r'   ra   )rI   rQ  )r\   r   rc   rd   r   rM   )r	   vr   rN   r   r   s         r
   test_xmlcharrefvaluesz'CodecCallbackTest.test_xmlcharrefvalues  sn    GGQ'SV'(68W8WX+ 	#CF #c"#	# (s   A0c           	      V   | j                  t        dj                  dd       d }t        j                  d|       | j                  t
        dj                  dd       | j                  t
        dj                  dd       | j                  t
        dj                  dd       | j                  t
        d	j                  dd       | j                  t
        d
j                  dd       | j                  t
        dj                  dd       d }t        j                  d|       | j                  t
        dj                  dd       t               }t        j                  d|j                         d|_        | j                  dj                  dd      d       d|_        | j                  dj                  dd      d       d|_        | j                  t        dj                  dd       d|_        | j                  dj                  dd      d       d|_        | j                  dj                  dd      d       d|_        | j                  t        dj                  dd       d|_        | j                  dj                  dd      d        G d dt              }| j                  t        t        j                  dddd i       | j                  t        t        j                  dd |              | j                  t
        t        j                  dddt        j                   dz   i       y ) Nr   r'   rK  c                      yNr   r   rz   s    r
   baddecodereturn1z=CodecCallbackTest.test_decodehelper.<locals>.baddecodereturn1      r   ztest.baddecodereturn1   \r   s   \x0s   \x0ys
   \Uffffeeees   \uyyyyraw-unicode-escapec                      yN)r   Nr   rz   s    r
   baddecodereturn2z=CodecCallbackTest.test_decodehelper.<locals>.baddecodereturn2      r   ztest.baddecodereturn2test.posreturnr   s   0z<?>0z<?><?>r!   rx   r   r      s   \uyyyy0c                       e Zd Zd Zy).CodecCallbackTest.test_decodehelper.<locals>.Dc                     t         r   
ValueErrorr	   keys     r
   __getitem__z:CodecCallbackTest.test_decodehelper.<locals>.D.__getitem__        r   Nr   r   r   rj  r   r   r
   Drd        !r   rm  r      )r~   rL  r}   rc   rd   rU   r   r   r   rL   
IndexErrorr   r   r   rg  sys
maxunicode)r	   rW  r]  handlerrm  s        r
   test_decodehelperz#CodecCallbackTest.test_decodehelper  s    	+w~~wO	57GH)W^^W>UV)U\\3CE\])W^^5EG^_)X__6FH_`)^%:%:<LNef)Z%6%68LNef	57GH)W^^W>UV+.? 2BCVL 2BCXN *hoow@PQ 2BCVL 2BCUK *hoow@PQ ++,@BRSU[\	! 	! 	,(=(=wSWY]R^_*f&;&;WhPQPST)V%:%:GXPTVYVdVdefVfOghr   c           	         | j                  t        dj                  dd       d }t        j                  d|       | j                  t
        dj                  dd       d }t        j                  d|       | j                  t
        dj                  dd       t               }t        j                  d|j                         d	|_        | j                  d
j                  dd      d       d|_        | j                  d
j                  dd      d       d|_        | j                  t        d
j                  dd       d|_        | j                  d
j                  dd      d       d|_        | j                  d
j                  dd      d       d|_        | j                  t        d
j                  dd       d|_         G d dt              }dD ]  }| j                  t        t        j                  d|dd i       | j                  t        t        j                  d| |              | j                  t
        t        j                  d|ddi        y )Nr   r'   rK  c                      yrV  r   rz   s    r
   badencodereturn1z=CodecCallbackTest.test_encodehelper.<locals>.badencodereturn1  rX  r   ztest.badencodereturn1c                      yr\  r   rz   s    r
   badencodereturn2z=CodecCallbackTest.test_encodehelper.<locals>.badencodereturn2  r^  r   ztest.badencodereturn2r_  r   u   ÿ0s   <?>0r`  s   <?><?>ra  r!   rx   s   <?>r   r   c                       e Zd Zd Zy).CodecCallbackTest.test_encodehelper.<locals>.Dc                     t         r   rf  rh  s     r
   rj  z:CodecCallbackTest.test_encodehelper.<locals>.D.__getitem__  rk  r   Nrl  r   r   r
   rm  r{    rn  r   rm  )r   r   rI   rp   rt   r_  ro  i,  )r~   rL  rM   rc   rd   rU   r   r   r   rL   rp  r   r   r   rg  )r	   rw  ry  rs  rm  r   s         r
   test_encodehelperz#CodecCallbackTest.test_encodehelper  s    	+v}}g~N	57GH)V]]G=TU	57GH)V]]G=TU+.? 1ABGL 1ABIN *gnng?OP 1ABGL 1ABFK *gnng?OP	! 	!I 	ZClF,A,A63QUW[P\]j&*?*?acRi)>)>dTW[Y		Zr   c                 B   t        d      }t        j                  d|j                         g d}|D ]_  \  }}dj	                  |      |z   }| j                  |      5  d|_        |j                  |d      }| j                  |d       d d d        a y # 1 sw Y   lxY w)Nr   test.bug36819)r  r  )r  s   ܀)r  s     ܀)z
iso-8859-6r   abcdr  rP  abcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdx)	r   rc   rd   r   rM   r   r   r}   rL   )r	   rs  	testcasesr   r)   r2  decodeds          r
   test_decodehelper_bug36819z,CodecCallbackTest.test_decodehelper_bug36819  s    #C(ow~~>
	 " 	8HCMM#&,Es+ 8 ",,sO<  ,78 8	88 8s   ,BB	c                    t               }t        j                  d|j                         d}g d}|dgz  }t        j
                  dk(  rddg}d|_        |D ]  }| j                  |	      5  d
|_        | j                  t              5 }|j                  |d       d d d        j                  }| j                  |j                  d       | j                  |j                  d       | j                  |j                   |       d d d         t        j
                  dk(  rd
|_        | j                  t              5 }t        j"                  d|d       d d d        j                  }| j                  |j                  d       | j                  |j                  d       | j                  |j                   |       d|_        |D ]W  }| j                  |	      5  d
|_        |j                  |d      }| j                  |j%                  |      d       d d d        Y t        j
                  dk(  r`d
|_        t        j"                  d|d      }| j                  |d   j%                         d       | j                  |d   t'        |             y y # 1 sw Y   xY w# 1 sw Y   TxY w# 1 sw Y   [xY w# 1 sw Y   xY w)Nr  u   abcd)r'   latin1r|   r   r   ra   win32mbcsoemr9  r  rP  r   rO  i  r   r  r   r!   )r   rc   rd   r   rq  platformr   r   r   r~   r*   rM   r1  rL   r   r"   r   code_page_encoder}   r   )r	   rs  r2  	encodingsr   r3  r   encodeds           r
   test_encodehelper_bug36819z,CodecCallbackTest.test_encodehelper_bug36819"  sw   #%ow~~>D	m_$	<<7"I 	4Cs+ 4 "&&'9: 7bLLo67ll  A.  !,  U34 4	4 <<7"GM""#56 E"''UODE,,CSYY*SWWa(SZZ/ 	DCs+ D !#,,sO<  !4lCD D	D <<7"GM--c5/JGWQZ..0,?WQZU4	 #17 74 4E ED Ds=   ,J!	JA(J!=J.;J;JJ!!J+	.J8;K	c                      G d dt               }| j                  t        dj                  dt        j
                  dz   i       | j                  t        dj                  ddi       y )Nc                       e Zd Zd Zy)1CodecCallbackTest.test_translatehelper.<locals>.Dc                     t         r   rf  rh  s     r
   rj  z=CodecCallbackTest.test_translatehelper.<locals>.D.__getitem__U  rk  r   Nrl  r   r   r
   rm  r  T  rn  r   rm  r   ro  r!   r   )r   r~   rg  	translaterq  rr  rU   )r	   rm  s     r
   test_translatehelperz&CodecCallbackTest.test_translatehelperN  sR    	! 	! 	*f&6&6s~~a?O8PQ)V%5%5bzBr   c           	          t        d      dt        d      dt        d      dt        d      di}d	D ]  }d
|z  }|j                  |        y )N&z&amp;<z&lt;>z&gt;"z&quot;)r!   r   r   r   zabc<def>ghi)rZ   r  )r	   r   r  texts       r
   test_bug828737z CodecCallbackTest.test_bug828737[  sS    HgHfHfHh	
 $ 	$A ?DNN7#	$r   c                 T   g d}d }t        j                  d|       |D ]5  \  }}| j                  t              5  |j	                  |d       d d d        7 d }t        j                  d|       |D ]'  \  }}| j                  |j	                  |d      d       ) y # 1 sw Y   xY w)N)r  )r   s   ++r  )r   r   )r   r   )r      \u123g)rZ  r  c                 N    t        | t              rd| _        yt        d| z        )Nr      䉂r   rR   rT   r5   r   rU   rz   s    r
   	replacingz?CodecCallbackTest.test_mutatingdecodehandler.<locals>.replacingr  s(    #12
$ = CDDr   r*  c                 N    t        | t              rd| _        yt        d| z        )Nr   r  rR   r  rz   s    r
   mutatingz>CodecCallbackTest.test_mutatingdecodehandler.<locals>.mutating~  s(    #12 
$ = CDDr   ztest.mutatingr  )rc   rd   r~   rU   r}   rL   )r	   baddatar  r  datar  s         r
   test_mutatingdecodehandlerz,CodecCallbackTest.test_mutatingdecodehandlerg  s    
	E 	.	: ' 	8Xt""9- 8H&678 8	8	E 	ox8 !( 	OXtT[[?CXN	O8 8s   BB'	c                     d }t        j                  d|       | j                  dj                  dd      d       | j                  dj                  dd      d       | j                  dj                  d	d      d
       | j                  dj                  dd      d
       d }t        j                  d|       | j                  dj                  dd      d       | j                  dj                  dd      d       y )Nc                 `    t        | t              rd| j                  dz   fS t        d| z        )Nr   r!   rR   )rT   r5   r   rU   rz   s    r
   forward_shorter_than_endzPCodecCallbackTest.test_crashing_decode_handler.<locals>.forward_shorter_than_end  s1    #12 #))A+.. = CDDr   ztest.forward_shorter_than_ends      z	utf-16-leu   ����Ø s      z	utf-16-bes         z	utf-32-leu   ���ᄑ s         z	utf-32-bec                 h    t        | t              rd| _        d| j                  fS t	        d| z        )Ns           r   rR   )rT   r5   r   r   rU   rz   s    r
   replace_with_longzICodecCallbackTest.test_crashing_decode_handler.<locals>.replace_with_long  s4    #12(
 #)),, = CDDr   ztest.replace_with_longr   r   u   �    r   u   �  )rc   rd   rL   r}   )r	   r  r  s      r
   test_crashing_decode_handlerz.CodecCallbackTest.test_crashing_decode_handler  s   	E 	+-E	G 	/66<>.	

 	/66<>.	

 	;BB<>*	

 	;BB<>*	
	E 	68IJNN8%=>$	
 	NN8%=>	
r   c           
         t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t        j                  d      t        j                  d      g}t        t        t        fD ]   G fddt              }|D ]:  }| j                  |      5  | j                  t        | |              d d d        <  G fddt              }|D ]K  }| j                  |      5  | j                  t        |f      5   | |              d d d        d d d        M  y # 1 sw Y   xY w# 1 sw Y   "xY w# 1 sw Y   rxY w)Nr  r  c                       e Zd ZW  ZyACodecCallbackTest.test_fake_error_class.<locals>.FakeUnicodeErrorNr   r   r   	__class__clss   r
   FakeUnicodeErrorr        	r   r  )rs  error_classc                       e Zd ZW  Zyr  r  r  s   r
   r  zACodecCallbackTest.test_fake_error_class.<locals>.FakeUnicodeError  r  r   )rc   r   r   r   r   r  r   r   r*   r5   r?   r   r   r~   rU   r   )r	   handlersr  rs  r  s       @r
   test_fake_error_classz'CodecCallbackTest.test_fake_error_class  sS       !!**%%++ 120	
 &'9;PP 	4C 3  # N\\'s\C N%%i:J:LMN NN 9  # 4\\'s\C 4**I7G+HI 4 0 2344 44	4N N4 44 4s0   EE&+E	9E&EE#E&&E/N)+r   r   r   rO   rg   rm   rr   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r!  r#  r4  r:  r?  rE  rG  rI  rM  rS  rt  r}  r  r  r  r  r  r  r  r   r   r
   rG   rG   P   s    
U4Q<NI 72U*7
r&(2
@


6
>
<&
P#
J8t,\*
XFP2
"4840P,G2N:
L

#9iv4Zl8$*5XC
$!OH0
f4r   rG   __main__)rc   html.entitiesrW   rB  rq  rj   unittestr   r   r*   r$   r.   r5   r2   r9   r?   r<   rA   rD   TestCaserG   r   mainr   r   r
   <module>r     s       
   "
$ 
$!3 "4 0 "4 #8 !6 $9 
D4)) D4N$ zHMMO r   