
    6bh                     V   d dl Z 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    B/opt/python-3.12.12/usr/lib/python3.12/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__5   s#    ##D'9S>1aOHr   Nr+   r   r   r
   r2   r2   4       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   :   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__A   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__G   s    &&tb!Q>Hr   Nr+   r   r   r
   rA   rA   F   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__M   s    &&tRAu=Kr   Nr+   r   r   r
   rD   rD   L   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*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_xmlcharrefreplaceS   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>.xmlcharnamereplacee   s    c#56 = CDDAZZ		#''2/HHVdmm&B&B3q6&JJK 3
 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_xmlcharnamereplacea   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_=> 3&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_uninamereplace{   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+     QjAa	k7 ;<js   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>?@asVc#**S/22a@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   sv    c#56 = CDD5:399cgg5NO5Nc#**S/)5NA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 C!!'C-1D1DS1IJ V5VcGcMV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_exceptionobjectargs0  s     	)W9tCRy9)WE
|0CE?	s4y!A%>T$q']2s4y)A!t 1 Q0	 *
 "!!)W@x@ & " 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_unicodeencodeerrorI  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_unicodedecodeerrori  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_unicodetranslateerroru  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     'BqCFBs   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_badandgoodnamereplaceexceptionsT  s$   $$	
 	$$	
 	%%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  sC   !'!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  s   %22?C	
 		
 	 !(Aq&9	
 MCs+!!&(&sCAv>
 !!&(&sCJJsOQ6J ,+ M 6A!$!!&(&w1c!ffE %$ 6
" "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    sr   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!
C
 ,,s$45CS3:#3";";C"@A!
!
C
 s+&&'9:bLL&67 ;ll  A.  !,  U3 ,+!
 ;: ,+s%   <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!
C s+&&'9:bLL&=> ;ll  A.  !,  U3 ,+!
 ;: ,+s$   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>.handleU  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_replacementT  s    	A 	.7	!
C s+ll3(89  cjjo&<szz#&NO ,+	!
 ,+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>.handlek  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_replacementj  s   	A 	.7
7 $f~/
 7>@
IC s6&&'9:bLL&67 ;ll  A.  !,  U3  -EF 76
 ;: 76s%   +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  si    GGQ'QSVQ'(68W8WX+CFc" G , (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      \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   rk  r   r   r
   Dre        !r   rn  r      )r~   rL  r}   rc   rd   rU   r   r   r   rL   
IndexErrorr   r   r   rh  sys
maxunicode)r	   rW  r^  handlerrn  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   <?>0ra  s   <?><?>rb  r!   rx   s   <?>r   r   c                       e Zd Zd Zy).CodecCallbackTest.test_encodehelper.<locals>.Dc                     t         r   rg  ri  s     r
   rk  z:CodecCallbackTest.test_encodehelper.<locals>.D.__getitem__	  rl  r   Nrm  r   r   r
   rn  r|    ro  r   rn  )r   r   rI   rp   rt   r`  rp  i,  )r~   rL  rM   rc   rd   rU   r   r   r   rL   rq  r   r   r   rh  )r	   rx  rz  rt  rn  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ClF,A,A63QUW[P\]j&*?*?acRi)>)>dTW[Y	I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	   rt  	testcasesr   r)   r2  decodeds          r
   test_decodehelper_bug36819z,CodecCallbackTest.test_decodehelper_bug36819  s    #C(ow~~>
	 "HCMM#&,Es+ ",,sO<  ,7 ,+ "++s   ,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   rr  platformr   r   r   r~   r*   rM   r1  rL   r   r"   r   code_page_encoder}   r   )r	   rt  r2  	encodingsr   r3  r   encodeds           r
   test_encodehelper_bug36819z,CodecCallbackTest.test_encodehelper_bug36819#  sB   #%ow~~>D	m_$	<<7"ICs+ "&&'9:bLLo6 ;ll  A.  !,  U3 ,+  <<7"GM""#56"''UOD 7,,CSYY*SWWa(SZZ/Cs+ !#,,sO<  !4lC ,+  <<7"GM--c5/JGWQZ..0,?WQZU4	 #1 ;: ,+ 76 ,+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   rg  ri  s     r
   rk  z=CodecCallbackTest.test_translatehelper.<locals>.D.__getitem__V  rl  r   Nrm  r   r   r
   rn  r  U  ro  r   rn  r   rp  r!   r   )r   r~   rh  	translaterr  rs  rU   )r	   rn  s     r
   test_translatehelperz&CodecCallbackTest.test_translatehelperO  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\  sN    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)r[  r  c                 N    t        | t              rd| _        yt        d| z        )Nr      䉂r   rR   rT   r5   r   rU   rz   s    r
   	replacingzACodecCallbackTest.test_mutating_decode_handler.<locals>.replacings  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_mutating_decode_handler.<locals>.mutating  s(    #12 
$ = CDDr   ztest.mutatingr  )rc   rd   r~   rU   r}   rL   )r	   baddatar  r  datar  s         r
   test_mutating_decode_handlerz.CodecCallbackTest.test_mutating_decode_handlerh  s    
	E 	.	: 'Xt""9-H&67 .- !(	E 	ox8 !(XtT[[?CXN !( .-s   BB'	c                     t         j                  fd}t        j                  d|       dddd f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
        |t        d      d d dd
        |dd	d
        |ddd        |ddd
        |t        d      d d dd
       y )Nc                     t        | t              rUj                  | j                  d | j                         }|+|d   | j                  | j                  d  z   | _        d|d   fS t        d| z        )Nr   u   Єr!   rR   )rT   r5   getr   r"   AssertionError)r   r   r  s     r
   r  zOCodecCallbackTest.test_mutating_decode_handler_unicode_escape.<locals>.mutating  so    #12HHSZZ12=!"1

3778(<!<CJ$ad++ !>!DEEr   test.mutating2)rY  r   )s   xxx\r   )s   x\r!   )rZ  s   \x3s   \x5c                     j                  t              5 }j                   | d      |t        |       f       d d d        j	                  |t        j                               y # 1 sw Y   /xY w)Nr  )assertWarnsDeprecationWarningrL   r   assertInr   warning)r2  expectedr   r3  r}   r	   s       r
   checkzLCodecCallbackTest.test_mutating_decode_handler_unicode_escape.<locals>.check  sZ    !!"45  /?!@8SQVZBXY 6MM#s2::/ 65s   %A**A3s   \x0n\zu   Є
\zzinvalid escape sequence '\z's   \x0n\501u   Є
Łz$invalid octal escape sequence '\501's   \x0zu   Є\zs   \x3n\zru   Є
\zrs   \x3zru   Є\zrs   \x3z5u   Є\z5s   \x3z5xr   s   \x3z5xyra  s   \x5n\zs   \x5n\501s   \x5zs   \x5zy)rc   unicode_escape_decoderd   
memoryview)r	   r  r  r  r}   s   `  @@r
   +test_mutating_decode_handler_unicode_escapez=CodecCallbackTest.test_mutating_decode_handler_unicode_escape  s    --	F 	.9" 

	0
 	j-)HIl,.UVh%DEk>+JKi'FGi'FGj$Sb)<9XYj%cr*L:YZj-)HIl,.UVh%DEj#CR(+7VWr   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  )rt  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  rt  r  s       @r
   test_fake_error_classz'CodecCallbackTest.test_fake_error_class  s+       !!**%%++ 120	
 &'9;PPC 3  #\\'s\C%%i:J:LM DC $ 9  #\\'s\C**I7G+HI 0 23 J DC $ Q DC JI DCs0   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  ru  r~  r  r  r  r  r  r  r  r  r   r   r
   rG   rG   Q   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F"XJ0
f4r   rG   __main__)rc   html.entitiesrW   rB  rerr  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 
h4)) h4V% zHMMO r   