
    ;e                        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                     dS dS )    Nc                       e Zd Zd Zd ZdS )	PosReturnc                     d| _         d S Nr   )posselfs    //usr/lib/python3.11/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   sQ    199#*oo/G ci3:DHvr   N__name__
__module____qualname__r   r    r   r
   r   r   	   s2          	 	 	 	 	r   r   c                       e Zd ZddZd ZdS )RepeatedPosReturnr   c                 0    || _         d| _        d| _        d S r   )replr   count)r	   r   s     r
   r   zRepeatedPosReturn.__init__   s    	


r   c                 p    | j         dk    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!OJJItx((	37##r   N)r   r   r   r   r
   r   r      s7           
$ $ $ $ $r   r   c                       e Zd Zd ZdS )BadStartUnicodeEncodeErrorc                 R    t                               | ddddd           g | _        d S Nascii r   r!   bad)UnicodeEncodeErrorr   r   r   s    r
   r   z#BadStartUnicodeEncodeError.__init__(   s+    ##D'2q!UCCC


r   Nr   r   r   r   r   r   r
   r$   r$   '   #            r   r$   c                       e Zd Zd ZdS )BadObjectUnicodeEncodeErrorc                 R    t                               | ddddd           g | _        d S r&   )r*   r   r   r   s    r
   r   z$BadObjectUnicodeEncodeError.__init__.   s+    ##D'2q!UCCCr   Nr+   r   r   r
   r.   r.   -   #            r   r.   c                       e Zd Zd ZdS )NoEndUnicodeDecodeErrorc                 b    t                               | dt          d          ddd           | `d S Nr'   r   r   r!   r)   )UnicodeDecodeErrorr   	bytearrayr"   r   s    r
   r   z NoEndUnicodeDecodeError.__init__4   s/    ##D'9S>>1aOOOHHHr   Nr+   r   r   r
   r2   r2   3   #            r   r2   c                       e Zd Zd ZdS )BadObjectUnicodeDecodeErrorc                 l    t                               | dt          d          ddd           g | _        d S r4   )r5   r   r6   r   r   s    r
   r   z$BadObjectUnicodeDecodeError.__init__:   s1    ##D'9S>>1aOOOr   Nr+   r   r   r
   r9   r9   9   r0   r   r9   c                       e Zd Zd ZdS )NoStartUnicodeTranslateErrorc                 F    t                               | dddd           | `d S Nr(   r   r!   r)   )UnicodeTranslateErrorr   r   r   s    r
   r   z%NoStartUnicodeTranslateError.__init__@   s'    &&tRAu===JJJr   Nr+   r   r   r
   r<   r<   ?   s#            r   r<   c                       e Zd Zd ZdS )NoEndUnicodeTranslateErrorc                 F    t                               | dddd           | `d S r>   )r?   r   r"   r   s    r
   r   z#NoEndUnicodeTranslateError.__init__F   s'    &&tb!Q>>>HHHr   Nr+   r   r   r
   rA   rA   E   r7   r   rA   c                       e Zd Zd ZdS )NoObjectUnicodeTranslateErrorc                 F    t                               | dddd           | `d S r>   )r?   r   r   r   s    r
   r   z&NoObjectUnicodeTranslateError.__init__L   s'    &&tRAu===KKKr   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*d)S )*CodecCallbackTestc                     d}|                      |                    dd          d           |                      |                    dd          d           d S )Nu   スパモ änd eggsr'   xmlcharrefreplaces&   &#12473;&#12497;&#12514; &#228;nd eggslatin-1s!   &#12473;&#12497;&#12514; nd eggsassertEqualencode)r	   ss     r
   test_xmlcharrefreplacez(CodecCallbackTest.test_xmlcharrefreplaceR   so     -HHW1225	
 	
 	
 	HHY 3443	
 	
 	
 	
 	
r   c                 B   d }t          j        d|           d}d}|                     |                    dd          |           d}|                     |                    dd          |           d}|                     |                    d	d          |           d S )
Nc                    t          | t                    st          d| z            g }| j        | j        | j                 D ]r}	 |                    dt          j        j	        t          |                   z             ># t          $ r( |                    dt          |          z             Y ow xY wd                    |          | j        fS )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6 E = CDDDAZ	#' 12 / //HHVdm&B3q66&JJKKKK / / /HHWs1vv-...../GGAJJ((s   :B/B32B3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GNNN<I/HII4PPP:M3LMMtTTTTTr   c                 B   d }t          j        d|           d}d}|                     |                    dd          |           d}|                     |                    dd          |           d}|                     |                    d	d          |           d S )
Nc           
      :   t          | t                    st          d| z            g }| j        | j        | j                 D ]:}|                    t          j        |dt          |          z                       ;dd
                    |          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6 E = CDDDAZ	#' 12 ? ?)!Vc!ff_==>>>>&15sw??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 	3 	3 'fG-BCCTJJJ`I/DEEtLLLeM3HII4PPPPPr   c                    d}d}|                      |                    dd          |           d}|                      |                    dd          |           d}|                      |                    dd          |           d S )	N   a¬ሴ€耀􏿿s!   a\xac\u1234\u20ac\u8000\U0010ffffr'   backslashreplaces   a\u1234\u20ac\u8000\U0010ffffrJ   s   a\u1234\u8000\U0010ffffra   rK   r	   re   rf   s      r
   test_backslashescapez&CodecCallbackTest.test_backslashescape   s     28G-?@@$GGG7I/ABBDIII4M3EFFMMMMMr   c                    d}d}|                      |                    dd          |           d}|                      |                    dd          |           d}|                      |                    dd          |           d S )	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   s     2>G];;TBBB>I}==tDDD>M=AA4HHHHHr   c                     d }t          j        d|           d}d}|                     |                    dd          |           d}|                     t
          |j        dd           d S )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   s_    c#566 E = CDDDz#)CIaK/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   s    
	 	 	 	0+>>> 9(G-?@@$GGG ",cj!#5	7 	7 	7 	7 	7r   c                    t          d dD                       }d}d}|                     t          j        |d|          d         |           d}|                     t
          t          j        |d|           d|t          d	          <   d
}d}|                     t          j        |d|          d         |           d|t          d	          <   |                     t          t          j        |d|           d S )Nc              3   ~   K   | ]8}t          |          t          d |                                z  d          fV  9dS )rx   r'   N)rZ   bytesupper.0r_   s     r
   	<genexpr>z7CodecCallbackTest.test_charmapencode.<locals>.<genexpr>   sC      QQAa		k7 ; ;<QQQQQQr   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    
 QQjQQQQQ.sHgFFqI4PPP,(=sHgVVV"C!.sIwGGJDQQQ!C)V%:CGTTTTTr   c           	         d }t          j        d|           d }t          j        d|           d}|                     |                    dd          d           |                     |                    dd          d           |                     d	                    d
d          d           |                     d                    d
d          d           |                     t          j        ddt          d          di          d         d           |                     d                    dd          d           |                     d                    dd          d           d S )Nc                 *    t           j         j                  }t           t                    r fd|D             }n6t           t
                    r fd|D             }nt          d z            dd                    |          z   j        fS )Nc                 J    g | ]}d t          j        |                   z   S z<%d>)rZ   r   r   r   r   s     r
   
<listcomp>zFCodecCallbackTest.test_callbacks.<locals>.handler1.<locals>.<listcomp>   s,    @@@sVc#*S/222@@@r   c                 0    g | ]}d j         |         z  S r   r   r   s     r
   r   zFCodecCallbackTest.test_callbacks.<locals>.handler1.<locals>.<listcomp>   s$    ;;;#Vcjo-;;;r   rR   [%s]r(   )ranger   r"   rT   r*   r5   rU   r\   )r   rr^   s   `  r
   handler1z2CodecCallbackTest.test_callbacks.<locals>.handler1   s    ci))A#122 E@@@@a@@@C!344 E;;;;;;; = CDDDRWWQZZ'11r   ztest.handler1c                      t           t                    st          d z             fdt           j         j                  D             }dd                    |          z   j        dz   fS )NrR   c                 0    g | ]}d j         |         z  S r   r   r   s     r
   r   zFCodecCallbackTest.test_callbacks.<locals>.handler2.<locals>.<listcomp>   s$    OOOc#*S/)OOOr   r   r(   r!   )rT   r5   rU   r   r   r"   r\   )r   r^   s   ` r
   handler2z2CodecCallbackTest.test_callbacks.<locals>.handler2   sr    c#566 E = CDDDOOOOU39cg5N5NOOOARWWQZZ'33r   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   s   	2 	2 	2 	ox888	4 	4 	4 	ox888#HHWo..+	
 	
 	
 	HHWo.. 	
 	
 	

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

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

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

 	  /::	
 	
 	

 	w88	
 	
 	
 	
 	
r   c                    g d}|D ],}t          j        d|z   t          j        |                     -d|d |D             z  }fddD             D ]3}dD ].}|D ])}	 |                    ||           # t          $ r Y &w xY w/4d S )N)r   ignorer   rI   rp   rt   test.  c                     g | ]}d |z   S )r   r   )r   errs     r
   r   z6CodecCallbackTest.test_longstrings.<locals>.<listcomp>%  s    555cGcM555r   c                     g | ]}|z  S r   r   )r   rN   r^   s     r
   r   z6CodecCallbackTest.test_longstrings.<locals>.<listcomp>&  s    <<<QQqS<<<r   )x   あu   aä)r'   rJ   
iso-8859-1ra   r|   utf-7utf-16utf-32)rc   rd   lookup_errorrM   r   )r	   errorsr   uniencr^   s        @r
   test_longstringsz"CodecCallbackTest.test_longstrings  s    6 6 6  	K 	KC!'C-1DS1I1IJJJJ55V5555<<<<":<<< 	 	C>  !  C

3,,,,'   	 	s   A66
B	B	c                 0    | j         t          |g|d d         R    | j         t          |g|dgz   R   g d}t          t          |                    D ]}|D ]}t	          |          t	          ||                   u r'g }t          t          |                    D ]9}||k    r|                    |           |                    ||                    : | j         t          |g|R    || }	|                     t          |	          |           d S )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/  sT    	)W9tCRCy9999)WE
|0CEEEE???	s4yy!! 	A 	AA% 
A 
A>>T$q']]22s4yy)) 1 1A!tt 1111 Q0000!!)W@x@@@@@
A gtnS3'''''r   c                 n   |                      t          g dd           |                      t          g dd           |                      t          g dd           |                      t          g dd           |                      t          g d	d
           |                      t          g dd           d S )N)r'      gürkr!   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22T	
 	
 	
 	
 	
r   c                     |                      t          dt          d          dddgd           |                      t          dt          d          dddgd           d S )	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  sv    &&i
++Q6:F	
 	
 	

 	&&i
++Q6:D	
 	
 	
 	
 	
r   c                 2   |                      t          g dd           |                      t          g dd           |                      t          g dd           |                      t          g dd           |                      t          g d	d
           d S )N)r   r!   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                    |                      t          t          j        d           |                      t          t          j        t	          d                     |                      t
          t          j        t          ddddd                     |                      t          t          j        t          dt          d          ddd                     |                      t          t          j        t          dddd                     d S )Nr   r   r'   r   r   r!      )	r~   rU   rc   strict_errors	Exceptionr*   r5   r6   r?   r   s    r
   test_badandgoodstrictexceptionsz1CodecCallbackTest.test_badandgoodstrictexceptions  s    	
 	
 	
 	 f	
 	
 	
 	 w!Q??	
 	
 	

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

 	! !(Aq&99	
 	
 	
 	
 	
r   c                 &   |                      t          t          j        d           |                      t          t          j        t	          d                     |                     t          j        t          ddddd                    d           |                     t          j        t          dt          d          ddd                    d           |                     t          j        t          dddd                    d           d S )	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EG G	
 	
 	

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

 	 %j!Q??A A	
 	
 	
 	
 	
r   c                    |                      t          t          j        d           |                      t          t          j        t	          d                     |                      t          t          j        t                                 |                      t          t          j        t                                 |                     t          j        t          ddddd                    d           |                     t          j        t          dt          d          ddd                    d	           |                     t          j        t          dddd                    d	           d S )
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EG G	
 	
 	

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

 	!%j!Q??A A	
 	
 	
 	
 	
r   c                    |                      t          t          j        d           |                      t          t          j        t	          d                     |                      t          t          j        t          dt          d          ddd                     |                      t          t          j        t          dddd                     d}|d	z  }d
                    d |D                       }| 	                    t          j        t          dd|z   dz   ddt          |          z   d                    d
                    d |D                       dt          |          z   f           d S )Nr   r   r'   r   r   r!   r   )r   r!   	   
   c   d   i  r   i'  '  i 順 i?B @B )i   i  r(   c              3   4   K   | ]}t          |          V  d S Nchrr   s     r
   r   zOCodecCallbackTest.test_badandgoodxmlcharrefreplaceexceptions.<locals>.<genexpr>  s(      ''qCFF''''''r   r   bc              3       K   | ]	}d |z  V  
dS )rS   Nr   r   s     r
   r   zOCodecCallbackTest.test_badandgoodxmlcharrefreplaceexceptions.<locals>.<genexpr>  s&      --QWq[------r   )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I	
 	
 	

 	+!(Aq&99	
 	
 	

GG''B'''''+"7C!GcM#$a#a&&j&: :  WW--"-----q3q66z:	
 	
 	
 	
 	
r   c                    |                      t          t          j        d           |                      t          t          j        t	          d                     g d}|D ]\  }}|                     |          5  |                     t          j        t          dd|z   dz   ddt          |          z   d                    |dt          |          z   f           |                     t          j        t          d|z   dz   ddt          |          z   d                    |dt          |          z   f           d d d            n# 1 swxY w Y   g d	}|D ]\  }}|                     |
          5  |                     t          j        t          dt          d|z   dz             ddd                    |df           d d d            n# 1 swxY w Y   d S )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*7C!GcM+,a#a&&j&B BC C CFF
O	     2-cAgm./SVVVE EF F CFF
O	                
 
 
  	 	DAqA&&    2*7IdQho4N4N+,a9 9: : F	                	 	s&   ;CE		E	E	6AGG	G	c                    |                      t          t          j        d           |                      t          t          j        t	          d                     |                      t          t          j        t          dt          d          ddd                     |                      t          t          j        t          dddd                     g d}|D ]\  }}|                     |	          5  | 	                    t          j        t          dd
|z   dz   ddt          |          z   d                    |dt          |          z   f           d d d            n# 1 swxY w Y   d S )Nr   r   r'   r   r   r!   r   ))r   z\N{HIRAGANA LETTER A}r   )u   ﯹzW\N{ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM})u   󠁿z\N{CANCEL TAG}r   r   r   r   r  r   r   )r~   rU   rc   namereplace_errorsr   r5   r6   r?   r  rL   r*   r   )r	   r	  rN   r   s       r
   $test_badandgoodnamereplaceexceptionsz6CodecCallbackTest.test_badandgoodnamereplaceexceptionsS  s   $	
 	
 	
 	$	
 	
 	
 	%w	'(:(:Aq&II	
 	
 	

 	%!(Aq&99	
 	
 	

 
 
  	 	DAq!$$    -*7C!GcM+,a#a&&j&B BC C CFF
O	                	 	s   5A"E##E'	*E'	c                    t          j        d          }|                     t          |d           |                     t          |t	          d                     |                     t          |t          dddd                     dD ]]}|                     |          5  |                     t          |t          d	|ddd                     d d d            n# 1 swxY w Y   ^|                      |t          d	d
ddd                    d           |                     t          |t          d	t          d          ddd                     |                      |t          d	t          d          ddd                    d           d S )Nsurrogateescaper   r      r   r!   )r   u   u   r  r'   u   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  s   !'!45F!G!G!	
 	
 	
 	!	
 	
 	
 	"!(Aq&99	
 	
 	
 + 	 	A!$$  !!&*&w1a@@                 	"""7J1fEEG G	
 	
 	

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

 	"""7Ii,@,@!QOOQ Q	
 	
 	
 	
 	
s    .CC	!C	c                    t          j        d          }|                     t          |d           |                     t          |t	          d                     |                     t          |t          dddd                     dD ]}|                     |          5  |                     t          |t          |d	ddd                     |                     t          |t          |d		                    |          ddd                     d d d            n# 1 swxY w Y   d
D ]j}|                     |          5  |                     t          |t          d|dt          |          d                     d d d            n# 1 swxY w Y   kg d}|D ]\  }}}}|                     |||          5  |                      |t          |d	|z   dz   ddt          |          z   d                    |dt          |          z   f           |                      |t          |t          d|d |         z   dz             dd|z   d                    |d d         d|z   f           d d d            n# 1 swxY w Y   d S )Nsurrogatepassr   r   r   r   r!   )r|   utf-16leutf-16beutf-32leutf-32beencodingr   )r   r   r  r  r'   ))r|   r   s   r   )r  r   s    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?CC	
 	
 	
 		
 	
 	
 	 !(Aq&99	
 	
 	
 M 	 	Cs++ 
 
!!&(&sCAv>>  
 !!&(&sCJJsOOQ6JJ  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6 	 	A!$$  !!&(&w1c!fffEE                
 
 
" " 	 	LCAqs;;    ((*3a#+,a#a&&j&B BC C CFF
O	     ((*3	$2A2,:M0N0N+,a!eV= => > rrUAEN	                	 	s8    A.DD	!D	 ;FF	F	8B4I88I<	?I<	c                     d}d}|D ]kt          j        dfd           |D ]$}|                     t          dj        |d           %dD ]'\  }}|                     t          |j        |d           (ld S )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CC  !!O%	   ! 
 
e
 !!L%	   
	 	r   c                 ^   |                      t          j        t          j        d                     |                      t          j        t          j        d                     |                      t          j        t          j        d                     |                      t          j        t          j        d                     |                      t          j        t          j        d                     |                      t          j        t          j        d                     d S )Nr   r   rI   rp   rt   )rL   rc   r   r   r   r   r  r  r   s    r
   test_lookupzCodecCallbackTest.test_lookup  s   -v/B8/L/LMMM-v/B8/L/LMMM-v/B8/L/LMMM+ 344	
 	
 	
 	* 233	
 	
 	
 	%..	
 	
 	
 	
 	
r   c                    fd}t          j        d|           dD ]K\  }}|                    |d          }|                     |dz   dz                       |                     LdD ]\  }}|                     |          5  |                     t                    5 }|                    |d           d d d            n# 1 swxY w Y   |j        }|                     |j        d           |                     |j	        d	           |                     |j
        |           d d d            n# 1 swxY w Y   d S )
Nc                 d    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   6    #122 'cg&9C?@@@r   test.replacing))r'      [¤]r   )r      [€]u   ½¾)ra   r5  u   œŸ[]))r|      []   🐍)r   r9  r:  )r   r9  r:  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 	A 	A 	A 	A 	.777!
 	B 	BC
 ,,s$455CS3:#3";";C"@"@AAAA!
 	4 	4C
 s++ 4 4&&'9:: 8bLL&67778 8 8 8 8 8 8 8 8 8 8 8 8 8 8l  A...  !,,,  U3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s7   D5#C:D5C

D5C
AD55D9	<D9	c                    fd}t          j        d|           dD ]\  }}|                     |          5  |                     t                    5 }|                    |d           d d d            n# 1 swxY w Y   |j        }|                     |j        d           |                     |j	        d           |                     |j
        |           d d d            n# 1 swxY w Y   d S )Nc                 d    t          | t                    r	| j        fS t          d| z            r0  r1  r2  s    r
   	unencreplzHCodecCallbackTest.test_encode_unencodable_replacement.<locals>.unencrepl<  s7    #122 Ecg& = CDDDr   ztest.unencreplhandler))r'   r5     ½)r   r6  u   œ)ra   r5  rB  )r|   r9     )r   r9  rC  )r   r9  rC  r  r!   rx   )rc   rd   r  r~   r*   rM   r;  rL   r   r"   r   )r	   rA  r   r<  r=  r   r   s         @r
   #test_encode_unencodable_replacementz5CodecCallbackTest.test_encode_unencodable_replacement;  s   	E 	E 	E 	E 	E
 	5yAAA!
 	4 	4C s++ 4 4&&'9:: ?bLL&=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?l  A...  !,,,  U3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s6   C'A8,C'8A<<C'?A< AC''C+	.C+	c           	      Z   fd}t          j        d|           dD ]\  }}|                     |          5  |                    |d          }|                     |d                    |          z   d                    |          z              d d d            n# 1 swxY w Y   d S )Nc                 d    t          | t                    r	| j        fS t          d| z            r0  r1  r2  s    r
   r   z?CodecCallbackTest.test_encode_bytes_replacement.<locals>.handleT  r3  r   r4  ))r'   r5     )r   r6  rG  )ra   r5  rG  )r|   r9  rG  )r  r9  rG  )r  r9  rG  )r  r9     )r  r9  rH  r  r7  r8  )rc   rd   r  rM   rL   )r	   r   r   r<  r%  r   s        @r
   test_encode_bytes_replacementz/CodecCallbackTest.test_encode_bytes_replacementS  s"   	A 	A 	A 	A 	A 	.777	!
 	P 	PC s++ P Pll3(899  cjjoo&<szz#&NOOOP P P P P P P P P P P P P P P	P 	Ps   ABB#	&B#	c                    fd}t          j        d|           d}g t          j        dddg          t          j        dg d          R D ]\  }|                     |	          5  |                     t                    5 }|                    |d           d d d            n# 1 swxY w Y   |j        }| 	                    |j
        d
           | 	                    |j        d           | 	                    |j        |           | 	                    |j        d           d d d            n# 1 swxY w Y   d S )Nc                 d    t          | t                    r	| j        fS t          d| z            r0  r1  r2  s    r
   r   zCCodecCallbackTest.test_encode_odd_bytes_replacement.<locals>.handlej  r3  r   r4  r9  )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   r;  rL   r   r"   r   reason)r	   r   r<  r   r=  r   r   s         @r
   !test_encode_odd_bytes_replacementz3CodecCallbackTest.test_encode_odd_bytes_replacementi  s   	A 	A 	A 	A 	A 	.777
7 $f~/ /
 7>>>@ @
 
 	G 	GIC s66 G G&&'9:: 8bLL&67778 8 8 8 8 8 8 8 8 8 8 8 8 8 8l  A...  !,,,  U333  -EFFFG G G G G G G G G G G G G G G	G 	Gs7   +D3B)D3)B--D30B-1A6D33D7	:D7	c                     |                      t          t          j        d           |                      t          t          j        dd           d S )Nr   z
test.dummy)r~   rU   rc   rd   r   s    r
   test_badregistercallz&CodecCallbackTest.test_badregistercall  sB     	)V%:B???)V%:L"MMMMMr   c                 P    |                      t          t          j                   d S r   )r~   rU   rc   r   r   s    r
   test_badlookupcallz$CodecCallbackTest.test_badlookupcall  s#     	)V%899999r   c                 R    |                      t          t          j        d           d S )Ntest.unknown)r~   LookupErrorrc   r   r   s    r
   test_unknownhandlerz%CodecCallbackTest.test_unknownhandler  s%     	+v':NKKKKKr   c                     d}d                     d |D                       }t          j        dt          j                   dD ]}dD ]}|                    ||           d S )N)r!      r   2   r   i  r   i  r   iP  r   i  r   r(   c                 ,    g | ]}t          |          S r   r   )r   r   s     r
   r   z;CodecCallbackTest.test_xmlcharrefvalues.<locals>.<listcomp>  s    '''SVV'''r   test.xmlcharrefreplace)r'   ra   )rI   r\  )r\   rc   rd   r   rM   )r	   vrN   r   r   s        r
   test_xmlcharrefvaluesz'CodecCallbackTest.test_xmlcharrefvalues  s    GG''Q'''((68WXXX+ 	# 	#CF # #c""""#	# 	#r   c           	         |                      t          dj        dd           d }t          j        d|           |                      t
          dj        dd           |                      t
          dj        dd           |                      t
          dj        dd           |                      t
          d	j        dd           |                      t
          d
j        dd           |                      t
          dj        dd           d }t          j        d|           |                      t
          dj        dd           t                      }t          j        d|j                   d|_        | 	                    d                    dd          d           d|_        | 	                    d                    dd          d           d|_        |                      t          dj        dd           d|_        | 	                    d                    dd          d           d|_        | 	                    d                    dd          d           d|_        |                      t          dj        dd           d|_        | 	                    d                    dd          d            G d dt                    }|                      t          t          j        dddd i           |                      t          t          j        dd |                       |                      t
          t          j        dddt          j        dz   i           d S ) Nr   r'   rU  c                     dS Nr   r   rz   s    r
   baddecodereturn1z=CodecCallbackTest.test_decodehelper.<locals>.baddecodereturn1      2r   ztest.baddecodereturn1   \r   s   \x0s   \x0ys
   \Uffffeeees   \uyyyyraw-unicode-escapec                     dS 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dS ).CodecCallbackTest.test_decodehelper.<locals>.Dc                     t           r   
ValueErrorr	   keys     r
   __getitem__z:CodecCallbackTest.test_decodehelper.<locals>.D.__getitem__        r   Nr   r   r   ru  r   r   r
   Dro    #        ! ! ! ! !r   rx  r      )r~   rV  r}   rc   rd   rU   r   r   r   rL   
IndexErrorr   r   r   rr  sys
maxunicode)r	   rb  rh  handlerrx  s        r
   test_decodehelperz#CodecCallbackTest.test_decodehelper  s?    	+w~wOOO	 	 	57GHHH)W^W>UVVV)U\3CE\]]])W^5EG^___)X_6FH_```)^%:<LNefff)Z%68LNefff	 	 	57GHHH)W^W>UVVV++.??? 2BCCVLLL 2BCCXNNN *how@PQQQ 2BCCVLLL 2BCCUKKK *how@PQQQ ++,@BRSSU[\\\	! 	! 	! 	! 	! 	! 	! 	! 	,(=wSWY]R^___*f&;WhPQPQPSPSTTT)V%:GXPTVYVdefVfOghhhhhr   c           	         |                      t          dj        dd           d }t          j        d|           |                      t
          dj        dd           d }t          j        d|           |                      t
          dj        dd           t                      }t          j        d|j                   d	|_        | 	                    d
                    dd          d           d|_        | 	                    d
                    dd          d           d|_        |                      t          d
j        dd           d|_        | 	                    d
                    dd          d           d|_        | 	                    d
                    dd          d           d|_        |                      t          d
j        dd           d|_         G d dt                    }dD ]}|                      t          t          j        d|dd i           |                      t          t          j        d| |                       |                      t
          t          j        d|ddi           d S )Nr   r'   rU  c                     dS ra  r   rz   s    r
   badencodereturn1z=CodecCallbackTest.test_encodehelper.<locals>.badencodereturn1  rc  r   ztest.badencodereturn1c                     dS rg  r   rz   s    r
   badencodereturn2z=CodecCallbackTest.test_encodehelper.<locals>.badencodereturn2  ri  r   ztest.badencodereturn2rj  r   u   ÿ0s   <?>0rk  s   <?><?>rl  r!   rx   s   <?>r   r   c                       e Zd Zd ZdS ).CodecCallbackTest.test_encodehelper.<locals>.Dc                     t           r   rq  rs  s     r
   ru  z:CodecCallbackTest.test_encodehelper.<locals>.D.__getitem__  rv  r   Nrw  r   r   r
   rx  r    ry  r   rx  )r   r   rI   rp   rt   rj  rz  i,  )r~   rV  rM   rc   rd   rU   r   r   r   rL   r{  r   r   r   rr  )r	   r  r  r~  rx  r   s         r
   test_encodehelperz#CodecCallbackTest.test_encodehelper  s    	+v}g~NNN	 	 	57GHHH)V]G=TUUU	 	 	57GHHH)V]G=TUUU++.??? 1ABBGLLL 1ABBINNN *gng?OPPP 1ABBGLLL 1ABBFKKK *gng?OPPP	! 	! 	! 	! 	! 	! 	! 	!I 	Z 	ZClF,A63QUW[P\]]]j&*?aaccRRRi)>dTW[YYYY		Z 	Zr   c                 b   t          d          }t          j        d|j                   g d}|D ]~\  }}d                    |          |z   }|                     |          5  d|_        |                    |d          }|                     |d           d d d            n# 1 swxY w Y   d S )Nr   test.bug36819)r'  r(  )r  s   ܀)r  s     ܀)z
iso-8859-6r   abcdr  rZ  abcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdxabcdx)	r   rc   rd   r   rM   r  r   r}   rL   )r	   r~  	testcasesr   r)   r<  decodeds          r
   test_decodehelper_bug36819z,CodecCallbackTest.test_decodehelper_bug36819  s   #C((ow~>>>
 
 
	 " 	8 	8HCMM#&&,Es++ 8 8 ",,sO<<  ,7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8s   #4B##B'	*B'	c                    t                      }t          j        d|j                   d}g d}|dgz  }t          j        dk    rddg}d|_        |D ]}|                     |	          5  d
|_        | 	                    t                    5 }|                    |d           d d d            n# 1 swxY w Y   |j        }|                     |j        d           |                     |j        d           |                     |j        |           d d d            n# 1 swxY w Y   t          j        dk    rd
|_        | 	                    t                    5 }t          j        d|d           d d d            n# 1 swxY w Y   |j        }|                     |j        d           |                     |j        d           |                     |j        |           d|_        |D ]v}|                     |	          5  d
|_        |                    |d          }|                     |                    |          d           d d d            n# 1 swxY w Y   wt          j        dk    rvd
|_        t          j        d|d          }|                     |d                                         d           |                     |d         t'          |                     d S d S )Nr  u   abcd)r'   latin1r|   r   r   ra   win32mbcsoemrC  r  rZ  r   rY  i  r   r  r   r!   )r   rc   rd   r   r|  platformr   r  r   r~   r*   rM   r;  rL   r   r"   r   code_page_encoder}   r   )r	   r~  r<  	encodingsr   r=  r   encodeds           r
   test_encodehelper_bug36819z,CodecCallbackTest.test_encodehelper_bug36819"  s   #%%ow~>>>DDD	m_$	<7""I 	4 	4Cs++ 4 4 "&&'9:: 7bLLo6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7l  A...  !,,,  U3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 <7""GM""#566 E"'UODDDE E E E E E E E E E E E E E E,CSY***SWa(((SZ/// 	D 	DCs++ D D !#,,sO<<  !4!4lCCCD D D D D D D D D D D D D D D <7""GM-c5/JJGWQZ..00,???WQZU44444	 #"s\   *"DB/#D/B33D6B37ADD"	%D"	E>>FFAII	I	c                      G d dt                     }|                     t          dj        dt          j        dz   i           |                     t          dj        ddi           d S )Nc                       e Zd Zd ZdS )1CodecCallbackTest.test_translatehelper.<locals>.Dc                     t           r   rq  rs  s     r
   ru  z=CodecCallbackTest.test_translatehelper.<locals>.D.__getitem__U  rv  r   Nrw  r   r   r
   rx  r  T  ry  r   rx  r   rz  r!   r   )r   r~   rr  	translater|  r}  rU   )r	   rx  s     r
   test_translatehelperz&CodecCallbackTest.test_translatehelperN  sz    	! 	! 	! 	! 	! 	! 	! 	! 	*f&6s~a?O8PQQQ)V%5bzBBBBBr   c           	          t          d          dt          d          dt          d          dt          d          di}d	D ]}d
|z  }|                    |           d S )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    HHgHHfHHfHHh	
 $ 	$ 	$A ?DNN7####	$ 	$r   c                 r   g d}d }t          j        d|           |D ]M\  }}|                     t                    5  |                    |d           d d d            n# 1 swxY w Y   Nd }t          j        d|           |D ]/\  }}|                     |                    |d          d           0d S )N)r'  )r   s   ++r(  )r   r   )r   r   )r      \u123g)re  r  c                 b    t          | t                    r	d| _        dS t          d| z            )Nr      䉂r   rR   rT   r5   r   rU   rz   s    r
   	replacingz?CodecCallbackTest.test_mutatingdecodehandler.<locals>.replacingr  s6    #122 E
$} = CDDDr   r4  c                 b    t          | t                    r	d| _        dS t          d| z            )Nr   r  rR   r  rz   s    r
   mutatingz>CodecCallbackTest.test_mutatingdecodehandler.<locals>.mutating~  s6    #122 E 
$} = CDDDr   ztest.mutatingr  )rc   rd   r~   rU   r}   rL   )r	   baddatar  r  datar  s         r
   test_mutatingdecodehandlerz,CodecCallbackTest.test_mutatingdecodehandlerg  s@   
 
 
	E 	E 	E 	.	::: ' 	8 	8Xt""9-- 8 8H&67778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	E 	E 	E 	ox888 !( 	O 	OXtT[[?CCXNNNN	O 	Os   A!!A%	(A%	c                 ^   d }t          j        d|           |                     d                    dd          d           |                     d                    dd          d           |                     d                    d	d          d
           |                     d                    dd          d
           d }t          j        d|           |                     d                    dd          d           |                     d                    dd          d           d S )Nc                 h    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  s;    #122 E #)A+.. = CD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                 p    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  s>    #122 E(
 #),, = CD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 	E 	+-E	G 	G 	G 	/66<> >.	
 	
 	

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

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

 	;BB<> >*	
 	
 	
	E 	E 	E 	68IJJ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 ]U}|                     |          5  |                     t          | |                       d d d            n# 1 swxY w Y   V G fddt                    }|D ]x}|                     |          5  |                     t          |f          5   | |                       d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   yd S )Nr  r  c                       e Zd Z ZdS ACodecCallbackTest.test_fake_error_class.<locals>.FakeUnicodeErrorNr   r   r   	__class__clss   r
   FakeUnicodeErrorr            			r   r  )r~  error_classc                       e Zd Z ZdS 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  r~  r  s       @r
   test_fake_error_classz'CodecCallbackTest.test_fake_error_class  s     !*%+ 12200	
 &'9;PP 	4 	4C             3      # N N\\'s\CC N N%%i:J:J:L:LMMMN N N N N N N N N N N N N N N             9      # 4 4\\'s\CC 4 4**I7G+HII 4 4 0 0 2 23334 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 44	4 	4sH   3%C$$C(+C( E4=E	E4E!!E4$E!%E44E8;E8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-  r>  rD  rI  rO  rQ  rS  rW  r^  r  r  r  r  r  r  r  r  r  r   r   r
   rG   rG   P   s       
 
 
U U U4Q Q Q<N N NI I I 7 7 72U U U*7
 7
 7
r  &( ( (2
 
 
@

 

 


 
 
6
 
 
>
 
 
<&
 &
 &
P#
 #
 #
J8 8 8t, , ,\*
 *
 *
XF F FP  2
 
 
"4 4 484 4 40P P P,G G G2N N N: : :
L L L

# 
# 
#9i 9i 9iv4Z 4Z 4Zl8 8 8$*5 *5 *5XC C C
$ 
$ 
$!O !O !OH0
 0
 0
f4 4 4 4 4r   rG   __main__)rc   html.entitiesrW   rL  r|  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4 D4 D4 D4) D4 D4 D4N$ zHMOOOOO r   