
    dafx                     *
   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d dlZd dlZd dlm	Z	 d dl
mZ d dlmZ 	 d dlZ	 d dlZ	 d dlZ ej$                  ej&                        Zd Zd Z G d d	e      Z G d
 d      Z G d de      Z G d deej6                        Z G d deej6                        Z G d deej6                        Z G d deej6                        Z G d deej6                        Z  G d deej6                        Z! G d deej6                        Z" G d deej6                        Z# G d dej6                        Z$ G d  d!ej6                        Z% G d" d#e"ej6                        Z& G d$ d%ej6                        Z'g d&Z(e(D ]  Z) e*e)      d'k7  s e+ e,e)               G d( d)ej6                        Z-g d*Z. G d+ d,ej6                        Z/ G d- d.ej6                        Z0 G d/ d0ej6                        Z1 G d1 d2ej6                        Z2 G d3 d4ej6                        Z3 G d5 d6ej6                        Z4 G d7 d8ej6                        Z5g d9Z6 e7e d:      re6jq                  d;        e7e d<      re6jq                  d=       d>gZ9 G d? d@ej6                  e      Z: G dA dBej6                        Z; G dC dDej6                        Z< G dE dFej6                        Z= G dG dHeej6                        Z> G dI dJeej6                        Z? G dK dLej6                        Z@ G dM dNej6                        ZA G dO dPej6                        ZBg dQZCdRdSgdTgg dUdVgdWgdXZD	 d dlEZEeCjq                  dY       dZd[geDdY<   	 d dlFZFeCjq                  d\       d]geDd\<    G d^ d_ej6                        ZGi ZHd` ZI G da dbej6                        ZJ ej                  ej                  dck(  dd       G de dfej6                               ZM G dg dhej6                        ZN G di djej6                        ZO G dk dlej6                        ZP ej                  edu dm       G dn doej6                               ZR G dp dqej6                        ZS G dr dsej6                        ZT G dt duej6                        ZUeVdvk(  r ej                          yy# e$ r dZY w xY w# e$ r dZY w xY w# e$ r dZdZY w xY w# e$ r dZEY |w xY w# e$ r Y lw xY w)w    N)mock)support)	os_helperc                       fd}|S )Nc                 L    j                   |       |t        |       f       y N)assertEquallen)inputexpectcoderselfs     +/root/Python-3.12.4/Lib/test/test_codecs.pycheckzcoding_checker.<locals>.check!   s     uE
';<     )r   r   r   s   `` r   coding_checkerr       s    =Lr   c                    
 ddl m}m}m} ddlm}m
mmm	} ddd G 
fddt         j                        } ||| ||            } |d	 |d
      f      } |       }	 || d|	      S )Nr   )POINTERWINFUNCTYPEWinDLL)BOOLBYTEWCHARUINTDWORD      i  c                   Z    e Zd ZdW fdW  W z  fdW  W z  fdW fdW fdW W z  fgZy)'is_code_page_present.<locals>.CPINFOEXWMaxCharSizeDefaultCharLeadByteUnicodeDefaultCharCodePageCodePageNameN)__name__
__module____qualname___fields_)r   MAX_DEFAULTCHARMAX_LEADBYTESMAX_PATHr   r   s   r   	CPINFOEXWr!   -   sH    "D)"D$89m!34)51&#U8^46r   r/   GetCPInfoExWkernel32)ctypesr   r   r   ctypes.wintypesr   r   r   r   r   	Structure)cpr   r   r   r   r   r/   	prototypeGetCPInfoExinfor   r,   r-   r.   r   r   s             @@@@@@r   is_code_page_presentr9   &   sv    33>>MOH6 6F$$ 6 D$wy/ABI^VJ-?@AK;Dr1d##r   c                   $    e Zd ZdZd Zd ZddZy)QueuezF
    queue: write bytes at one end, read bytes from the other end
    c                     || _         y r	   _buffer)r   buffers     r   __init__zQueue.__init__>   s	    r   c                 .    | xj                   |z  c_         y r	   r=   )r   charss     r   writezQueue.writeA   s    r   c                     |dk  r"| j                   }| j                   d d | _         |S | j                   d | }| j                   |d  | _         |S Nr   r=   )r   sizess      r   readz
Queue.readD   sP    6A<<+DLHUd#A<<.DLHr   N)r   )r(   r)   r*   __doc__r@   rC   rH   r   r   r   r;   r;   :   s    r   r;   c                       e Zd Zd Zd Zy)MixInCheckStateHandlingc                 \   t        t        |      dz         D ]  } t        j                  |             }|j	                  |d |       }|j                         }| j                  |d   t               |d   s]|j                  |d   d d df       | j                  |j	                  |d                 | j                  ||j                                 t        j                  |             }|j                  |       |j	                  ||d  d      }| j                  |||z           y )N   r   T)ranger   codecsgetincrementaldecoderdecodegetstateassertIsInstanceintsetstate
assertTruer
   	r   encodingurG   idpart1statepart2s	            r   check_state_handling_decodez3MixInCheckStateHandling.check_state_handling_decodeP   s   s1vax 	-A6,,X68AHHQrUOEJJLE!!%(C0 8

E!HRaL!,-AHHU1X$6 67  

5 7,,X68AJJuHHQqrUD)EQe,'	-r   c                 b   t        t        |      dz         D ]  } t        j                  |             }|j	                  |d |       }|j                         } t        j                  |             }|j                  |       |j	                  ||d  d      }| j                  |||z           y )NrM   T)rN   r   rO   getincrementalencoderencoderR   rU   r
   rW   s	            r   check_state_handling_encodez3MixInCheckStateHandling.check_state_handling_encodef   s    s1vax 	-A6,,X68AHHQrUOEJJLE6,,X68AJJuHHQqrUD)EQe,	-r   N)r(   r)   r*   r_   rc   r   r   r   rK   rK   O   s    -,-r   rK   c                   F    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dZ
d	 Zd
 Zy)ReadTestc                    t        d      } t        j                  | j                        |      }d}t	        |j                  | j                        |d      D ]E  \  }}|j                  t        |g             ||j                         z  }| j                  ||       G | j                  |j                         d       | j                  |j                  d        t        j                  | j                               }d}t	        |j                  | j                        |d      D ]5  \  }}||j                  t        |g            z  }| j                  ||       7 | j                  |j                  dd      d       | j                  |j                  d       |j                          d}t	        |j                  | j                        |d      D ]5  \  }}||j                  t        |g            z  }| j                  ||       7 | j                  |j                  dd      d       | j                  |j                  d       |j                  | j                        }	| j                  |dj                  t        j                   |	D cg c]  }t        |g       c}| j                                     y c c}w )Nr    Tstrict)r;   rO   	getreaderrX   ziprb   rC   bytesrH   r
   
bytebufferrP   rQ   r?   resetjoin
iterdecode)
r   r   partialresultsqrresultcpartialresultr[   encodeds
             r   check_partialzReadTest.check_partialr   sF   
 #J+FT]]+A."%ell4==&A>Z^"_ 	4QGGE1#JaffhFV]3	4
 	2&s+ 8F((79"%ell4==&A>Z^"_ 	4QahhuaSz**FV]3	4 	#t,b13' 	
	"%ell4==&A>Z^"_ 	4QahhuaSz**FV]3	4 	#t,b13' ,,t}}-GGF%%7&CauaSz&CT]]ST	
&Cs   Kc                 >     fddfd	}d}d}d} j                   ||d      |        j                   ||d      |        j                   ||dd      |        j                   ||dd      |       d	}g }g }t        |      D ]<  \  }}	|j                  |d
z  d
z   dz  |	z          |j                  |d
z  d
z   dz         >  j                   |dj                  |      d      dj                  |              j                   |dj                  |      d      dj                  |             t	        d      D ]  }
|D ]  }	d|
dz  |	z   dz   z  } |      }t	        d      D ]L  } j                  |j                  d      |
dz  |	z           j                  |j                  d      d       N  |      }t	        d      D ]I  } j                  |j                  d      |
dz          j                  |j                  d      d       K   y )Nc                     t        j                  | j                  j                              } t	        j
                  j                        |      S r	   ioBytesIOrb   rX   rO   rj   )r   streamr   s     r   rj   z)ReadTest.test_readline.<locals>.getreader   s:    ZZT]] ;<F26##DMM26::r   Tc                      |       }g }	 |j                  ||      }|sn|j                  |       (dj                  |      S )N)rF   keepends|)readlineappendro   )r   r   rF   readerlineslinerj   s         r   readalllinesz,ReadTest.test_readline.<locals>.readalllines   sN    u%FED8DT"	 
 88E?"r   u   foo
bar
bazspam eggsu   foo
|bar
|baz|spam |eggszfoo|bar|baz|spam|eggsF
   )

u       u   あrg   r   P   azxxx
r   xxx)TN)r
   	enumerater   ro   rN   r   )r   r   rG   	sexpectedsexpectednoendslineendsvwvworZ   lineendrF   r   rj   s   `           @r   test_readlinezReadTest.test_readline   s/   	;	# .9	1a.	:a/Aar2I>a3_E1%h/ 	-LQIIquSy(*W45JJ#c	8+,	- 	bggbk48#((2,Gbggbk59388C=I "I 	D# S7*W45"1r A$$6S7* $$6 #1r A$$7S $$7	r   c                 `    g d}dj                  |       fd} |       } j                  |j                         |d           j                  |j                         dj                  |dd                j                  |j                         d        |       } j                  |j                         |d           j                  |j                  d      |d   d           j                  |j                  d      d        j                  |j                  d      t	        |d         dz   d  d d         |       } j                  |j                         |d           j                  |j                         |dd          j                  |j                         d        |       } j                  |j                  dd	      d d         j                  |j                         dd          j                  |j                         d        |       } j                  |j                  dd	      d d         j                  |j                  d      d           j                  |j                  d      d        j                  |j                  d      d
d         |       } j                  |j                  dd	      d d         j                  |j                         |d   dd  g|dd  z           j                  |j                         d       y )N)zHumpty Dumpty sat on a wall,
z!Humpty Dumpty had a great fall.
z-All the king's horses and all the king's menz#Couldn't put Humpty together again.rg   c                      t        j                  j                  j                              }  t	        j
                  j                        |       S r	   r{   )r~   datar   s    r   rj   z8ReadTest.test_mixed_readline_and_read.<locals>.getreader   s:    ZZDMM :;F26##DMM26::r   r   rM   d   (      )rF   rB      j   )ro   r
   r   rH   r   	readlines)r   r   rj   fr   s   `   @r   test_mixed_readline_and_readz%ReadTest.test_mixed_readline_and_read   s   8 wwu~	;
 KuQx027759#562& KuQx0E!HQK0B'd3uQx=1+<+=&>t&DE KuQx0ab	22& KRq148<48,2& KRq148<DG,B'd1Sk2 KRq148<q!"qr(BC2&r   c                     g d}t        j                  dj                  |      j                  | j                              } t        j                  | j                        |      }t        |      D ]  \  }}| j                  |||           y )N)=z:<%!--===================================================
z,    BLOG index page: show recent articles,
z7    today's articles, or articles of a specific date.
z>========================================================--%>
z!<%@inputencoding="ISO-8859-1"%>
z<%@pagetemplate=TEMPLATE.y%>
z$<%@import=import frog.util, frog%>
z!<%@import=import frog.objects%>
z9<%@import=from frog.storageerrors import StorageError%>
z<%
r   zimport logging
z+log=logging.getLogger("Snakelets.logger")
r   r   zuser=self.SessionCtx.user
z-storageEngine=self.SessionCtx.storageEngine
r   r   z-def readArticlesFromDate(date, count=None):
z2    entryids=storageEngine.listBlogEntries(date)
z%    entryids.reverse() # descending
z    if count:
z#        entryids=entryids[:count]
z
    try:
z\        return [ frog.objects.BlogEntry.load(storageEngine, date, Id) for Id in entryids ]
z    except StorageError,x:
z6        log.error("Error loading articles: "+str(x))
z,        self.abort("cannot load articles")
r   zshowdate=None
r   zarg=self.Request.getArg()
zif arg=="today":
z,    #-------------------- TODAY'S ARTICLES
z-    self.write("<h2>Today's articles</h2>")
z(    showdate = frog.util.isodatestr() 
.    entries = readArticlesFromDate(showdate)
zelif arg=="active":
z4    #-------------------- ACTIVE ARTICLES redirect
z     self.Yredirect("active.y")
zelif arg=="login":
z/    #-------------------- LOGIN PAGE redirect
z    self.Yredirect("login.y")
zelif arg=="date":
z7    #-------------------- ARTICLES OF A SPECIFIC DATE
z2    showdate = self.Request.getParameter("date")
zV    self.write("<h2>Articles written on %s</h2>"% frog.util.mediumdatestr(showdate))
r   zelse:
z+    #-------------------- RECENT ARTICLES
z,    self.write("<h2>Recent articles</h2>")
z.    dates=storageEngine.listBlogEntryDates()
z    if dates:
z        entries=[]
z        SHOWAMOUNT=10
z         for showdate in dates:
zW            entries.extend( readArticlesFromDate(showdate, SHOWAMOUNT-len(entries)) )
z*            if len(entries)>=SHOWAMOUNT:
z                break
z                
rg   )	r|   r}   ro   rb   rX   rO   rj   r   r
   )r   rG   r~   r   rZ   r   s         r   test_bug1175396zReadTest.test_bug1175396  sx    >
~ BGGAJ--dmm<=0!!$--08"6* 	)IQT1Q4(	)r   c                    t        d      } t        j                  | j                        |      } t        j                  | j                        |      }|j                  d       | j                  |j                  d      d       |j                  d       | j                  |j                  d      d       | j                  |j                  d      d       |j                  d	       | j                  |j                  d      d	       | j                  |j                  d      d       |j                  d       | j                  |j                  d
      d       |j                  d       | j                  |j                  d
      d       | j                  |j                  d
      d       |j                  d	       | j                  |j                  d
      d	       | j                  |j                  d
      d       |j                  d       | j                  |j                  d
      d       y )Nr   zfooFr   fooz
barrg   barbazTr   zbarzfoo
)r;   rO   	getwriterrX   rj   rC   r
   r   )r   rr   writerr   s       r   test_readlinequeuezReadTest.test_readlinequeueM  s   #J0!!$--030!!$--03 	W%8%@Y%8"=%8%@U%8%@%8"= 	W$7AY$7>$7AU$7?$7<Y$7Cr   c                    d}d}d}||z   |z   j                  | j                        }t        j                  |      } t	        j
                  | j                        |      }| j                  |j                         |       | j                  |j                         |       | j                  |j                         |       | j                  |j                         d       y )NzAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
z`offending line: ladfj askldfj klasdj fskla dfzaskdj fasklfj laskd fjasklfzzzzaa%whereisthis!!!
znext line.
rg   rb   rX   r|   r}   rO   rj   r
   r   )r   s1s2s3rG   r~   r   s          r   test_bug1098990_azReadTest.test_bug1098990_ah  s    RqU2Xdmm,A0!!$--08*B/*B/*B/*B/r   c                 Z   d}d}d}d}d}||z   |z   |z   |z   j                  | j                        }t        j                  |      } t	        j
                  | j                        |      }| j                  |j                         |       | j                  |j                         |       | j                  |j                         |       | j                  |j                         |       | j                  |j                         |       | j                  |j                         d       y )Nzaaaaaaaaaaaaaaaaaaaaaaaa
zbbbbbbbbbbbbbbbbbbbbbbbb
zstillokay:bbbbxx
zbroken!!!!badbad
zagainokay.
rg   r   )	r   r   r   r   s4s5rG   r~   r   s	            r   test_bug1098990_bzReadTest.test_bug1098990_bu  s    ++##U2Xb[^##DMM2A0!!$--08*B/*B/*B/*B/*B/*B/r      �c                    | j                  t        dj                  | j                         | j	                  dj                  | j                  d      dj                  | j                               | j	                  dj                  | j                  d      dj                  | j                               | j	                  dj                  | j                  d      dj                  | j                               | j	                  dj                  | j                  d      d	j                  | j                               | j	                  dj                  | j                  d
      dj                  | j                               | j	                  dj                  | j                  d      d	j                  | j                               | j	                  dj                  | j                  d
      dj                  | j                               dj                  | j                        }dD ]  \  }}|j                  | j                        t        |      d  }|j                  | j                        t        |      d  }|dz   |z   }||z   | j                  z   |z   }| j                  t        |j                  | j                         | j	                  |j                  | j                  d      |       | j	                  |j                  | j                  d      |       | j	                  |j                  | j                  d      ||z          | j	                  |j                  | j                  d
      || j                  z   |z          dj                  d | j                  D              }| j	                  |j                  | j                  d      ||z   |z           y )Nu      []backslashreplacez[\udc80]namereplacexmlcharrefreplacez
[&#56448;]ignore[]replacez[?]   []z[??]rg   ))   𐿿A)[])r   r      surrogatepassc              3   &   K   | ]	  }d |z    yw)\x%02xNr   ).0bs     r   	<genexpr>z0ReadTest.test_lone_surrogates.<locals>.<genexpr>  s      'J+, (11} 'Js   )assertRaisesUnicodeEncodeErrorrb   rX   r
   r   ill_formed_sequenceUnicodeDecodeErrorrQ   ill_formed_sequence_replacero   )	r   bombeforeafterbefore_sequenceafter_sequencetest_stringtest_sequencer   s	            r   test_lone_surrogateszReadTest.test_lone_surrogates  s<   ,hoot}}M**4==:LM$++DMM:	<**4==-H$++DMM:	<**4==:MN%,,T]];	=**4==(CT]]3	5**4==)Ddmm4	6 	)00IT]]3	5)00	Jt}}5	7 ii&3 	@MFE$mmDMM:3s89EO"\\$--8SCN 8+e3K ?2!5568FGM0-2F2F"mm-[//0?A*, ]11$--2AC(* ]11$--J#e^-]11$--K#d&F&FFNP!ww 'J040H0H'J  J]11$--AST#&66>@+	@r   c                    dj                  | j                  d      }t        dt        |            D ]p  } t	        j
                  | j                        d      }| j                  |j                  |d |       d       | j                  |j                  ||d  d      d       r dj                  | j                  d      }t        dt        |            D ]o  } t	        j
                  | j                        d      }| j                  |j                  |d |       d       | j                  |j                  ||d        d       q y )Nu   r   rM   rg   Tu   )rb   rX   rN   r   rO   rP   r
   rQ   )r   r   rZ   decs       r   test_incremental_surrogatepassz'ReadTest.test_incremental_surrogatepass  s    t}}o>q#d)$ 	CA=&..t}}=oNCSZZRa126SZZQR$7B	C
 t}}o>q#d)$ 	=A=&..t}}=oNCSZZRa126SZZQR18<	=r   N)r(   r)   r*   rx   r   r   r   r   r   r   r   r   r   r   r   r   re   re   q   s?    )
V9v.'`C)JD600" #+*@X=r   re   c                   j    e Zd ZdZej
                  dk(  rdZndZdZdZd Z	d Z
d	 Zd
 Zd Zd Zd Zy)	UTF32Testutf-32little          ܀s$     s   p   a   m   s   p   a   m   s$        s   p   a   m   s   p   a   mc                    t        j                  | j                        \  }}}}t        j                         } ||      }|j                  d       |j                  d       |j                         }| j                  || j                  k(  xs || j                  k(         t        j                  |      } ||      }| j                  |j                         d       y NspamspamspamrO   lookuprX   r|   r}   rC   getvaluerV   spamlespamber
   rH   r   _r   r   rG   r   r[   s          r   test_only_one_bomzUTF32Test.test_only_one_bom      "MM$--8!F6JJL1I		JJLT[[(<A,<=JJqM1I:.r   c                 l   t        j                  d      } t        j                  | j                        |      }| j                  t        |j                         t        j                  d      } t        j                  | j                        |      }| j                  t        |j                         y )N   s   r|   r}   rO   rj   rX   r   UnicodeErrorrH   r   rG   r   s      r   test_badbomzUTF32Test.test_badbom  s|    JJy!+FT]]+A.,/JJy!+FT]]+A.,/r   c                 ,    | j                  dg d       y )N    ÿĀ￿𐀀)rg   rg   rg   rg   rg   rg   rg    r   r   r       ÿr   r   r       ÿĀr   r   r       ÿĀ￿r   r   r   r   rx   r   s    r   test_partialzUTF32Test.test_partial  s    ,	
r   c                     | j                  dt        j                  ddd             | j                  dt        j                  ddd             y N)r   rM      r   T)rg   rM   r   r
   rO   utf_32_decoder   s    r   test_handlerszUTF32Test.test_handlers
  H    --gy$G	I--gxF	Hr   c                 R    | j                  t        t        j                  ddd       y N   ri   T)r   r   rO   r  r   s    r   test_errorszUTF32Test.test_errors  "    ,f.B.B!8T	3r   c                     | j                  | j                  d| j                         | j                  | j                  d| j                         y Nr   r_   rX   r   r   r   s    r   test_decoder_statezUTF32Test.test_decoder_state  >    (()3T[[	B(()3T[[	Br   c                     d}| j                  dt        j                  |      d          d}| j                  dt        j                  |      d          y )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀r   s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    r  )r   
encoded_le
encoded_bes      r   test_issue8941zUTF32Test.test_issue8941  sW     F
,--j9!<	>E
,--j9!<	>r   N)r(   r)   r*   rX   sys	byteorderr   r   r   r   r   r   r  r	  r  r  r   r   r   r   r     sT    H
}} 11FFFF/0
>H3B>r   r   c                   ,    e Zd ZdZdZd Zd Zd Zd Zy)UTF32LETest	utf-32-ler   c                 ,    | j                  dg d       y Nr   )rg   rg   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s    r   r   zUTF32LETest.test_partial)      ,	
r   c                 Z    | j                  dj                  | j                        d       y )N   𐈃s    r
   rb   rX   r   s    r   test_simplezUTF32LETest.test_simpleD  "    ,,T]];=PQr   c                 R    | j                  t        t        j                  ddd       y r  )r   r   rO   utf_32_le_decoder   s    r   r	  zUTF32LETest.test_errorsG  "    ,f.E.E!8T	3r   c                 X    d}| j                  dt        j                  |      d          y )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r  r   )r
   rO   r#  r   rw   s     r   r  zUTF32LETest.test_issue8941K  -     -,009!<	>r   N	r(   r)   r*   rX   r   r   r   r	  r  r   r   r   r  r  %  "    H-
6R3>r   r  c                   ,    e Zd ZdZdZd Zd Zd Zd Zy)UTF32BETest	utf-32-ber   c                 ,    | j                  dg d       y r  r   r   s    r   r   zUTF32BETest.test_partialW  r  r   c                 Z    | j                  dj                  | j                        d       y )Nr  s    r  r   s    r   r   zUTF32BETest.test_simpler  r!  r   c                 R    | j                  t        t        j                  ddd       y r  )r   r   rO   utf_32_be_decoder   s    r   r	  zUTF32BETest.test_errorsu  r$  r   c                 X    d}| j                  dt        j                  |      d          y )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r  r   )r
   rO   r0  r&  s     r   r  zUTF32BETest.test_issue8941y  r'  r   Nr(  r   r   r   r+  r+  S  r)  r   r+  c                   p    e Zd ZdZej
                  dk(  rdZndZdZdZd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)	UTF16Testutf-16r         ܀s   s p a m s p a m s    s p a m s p a mc                    t        j                  | j                        \  }}}}t        j                         } ||      }|j                  d       |j                  d       |j                         }| j                  || j                  k(  xs || j                  k(         t        j                  |      } ||      }| j                  |j                         d       y r   r   r   s          r   r   zUTF16Test.test_only_one_bom  r   r   c                 l   t        j                  d      } t        j                  | j                        |      }| j                  t        |j                         t        j                  d      } t        j                  | j                        |      }| j                  t        |j                         y )Ns   r   r   r   s      r   r   zUTF16Test.test_badbom  s}    JJ{#+FT]]+A.,/JJ*++FT]]+A.,/r   c                 ,    | j                  dg d       y )Nr   )rg   rg   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   s    r   r   zUTF16Test.test_partial  s    ,	
r   c                     | j                  dt        j                  ddd             | j                  dt        j                  ddd             y r   )r
   rO   utf_16_decoder   s    r   r  zUTF16Test.test_handlers  r  r   c                 R    | j                  t        t        j                  ddd       y r  )r   r   rO   r;  r   s    r   r	  zUTF16Test.test_errors  r
  r   c                     | j                  | j                  d| j                         | j                  | j                  d| j                         y r  r  r   s    r   r  zUTF16Test.test_decoder_state  r  r   c                    d}|j                  | j                        }| j                  t        j                  t        j
                         t        t        j
                  d      5 }|j                  |       d d d        t        j                  t        j
                  d| j                        5 }| j                  |j                         |       d d d        y # 1 sw Y   cxY w# 1 sw Y   y xY w)NzHello
world
wbrs   rX   )rb   rX   
addCleanupr   unlinkTESTFNopenrC   rO   r
   rH   )r   r   rG   fpr   s        r   test_bug691291zUTF16Test.test_bug691291  s    
 "IIdmm$	(()*:*:;)""D) 	RHHQK	[[))3"&--1 	04:V[[]B/	0 	0	 		0 	0s   &C0!C&C#&C/c                    dD ]u  }| j                  t              5 }t        j                  t        j
                  || j                         d d d        | j                  dt        j                               w dD ]u  }| j                  t              5 }t        j                  t        j
                  || j                         d d d        | j                  dt        j                               w y # 1 sw Y   xY w# 1 sw Y   =xY w)N)UrUzr+Ur@  zinvalid mode)rtwtatzr+tz'can't have text and binary mode at once)
r   
ValueErrorrO   rD  r   rC  rX   assertInstr	exception)r   modecms      r   test_invalid_modeszUTF16Test.test_invalid_modes  s    & 	=D"":. L"I,,dT]]KLMM.#bll*;<	=
 . 	-D"":. L"I,,dT]]KLMMCbll+-	-	L L
L Ls   1C61D6C?	D	N)r(   r)   r*   rX   r  r  r   r   r   r   r   r   r  r	  r  rF  rS  r   r   r   r3  r3    sS    H
}} ))@F@F/0
*H3B0
-r   r3  c                   &    e Zd ZdZdZd Zd Zd Zy)UTF16LETest	utf-16-ler5  c                 ,    | j                  dg d       y Nr   )rg   r   r   r   r   r   r   r   r   r   r   r   r   r   s    r   r   zUTF16LETest.test_partial      ,	
r   c                     g d}|D ]N  \  }}| j                  t        t        j                  |dd       | j	                  |j                  dd      |       P y )N)r  r   )s   A Z   A�)s	   A B C D Z   ABCD�)s    r   )s    Ar   )s    A    �A)s    A r^  ri   Tzutf-16ler   )r   r   rO   utf_16_le_decoder
   rQ   r   testsrawexpecteds       r   r	  zUTF16LETest.test_errors  [    
 # 	JMC0&2I2I!8T3SZZ
I>I	Jr   c                     | j                  dj                  | j                        d       | j                  dj                  | j                        d       y )Nr  s    ީr
   rb   rX   rQ   r   s    r   test_nonbmpzUTF16LETest.test_nonbmp
  G    ,,T]];,	.,33DMMB%	'r   Nr(   r)   r*   rX   r   r   r	  rg  r   r   r   rU  rU        H%
&J'r   rU  c                   &    e Zd ZdZdZd Zd Zd Zy)UTF16BETest	utf-16-ber6  c                 ,    | j                  dg d       y rX  r   r   s    r   r   zUTF16BETest.test_partial  rY  r   c                     g d}|D ]N  \  }}| j                  t        t        j                  |dd       | j	                  |j                  dd      |       P y )N)r[  )s    Ar\  )s	    A B C DZr]  )s    r   )s    r   )s     Ar^  )s     Ar^  ri   Tzutf-16ber   )r   r   rO   utf_16_be_decoder
   rQ   r`  s       r   r	  zUTF16BETest.test_errors'  rd  r   c                     | j                  dj                  | j                        d       | j                  dj                  | j                        d       y )Nr  s    rf  r   s    r   rg  zUTF16BETest.test_nonbmp6  rh  r   Nri  r   r   r   rl  rl    rj  r   rl  c                   L     e Zd ZdZdZdZdZd Zd Zd Z	 fdZ
d	 Zd
 Z xZS )UTF8Testutf-8s   u	   ���r   c                 ,    | j                  dg d       y )N    ÿ߿ࠀ￿𐀀)r   r   r   r       ÿ߿rw  rw      ÿ߿ࠀrx  rx      ÿ߿ࠀ￿ry  ry  ry  rv  r   r   s    r   r   zUTF8Test.test_partialB  s    2	
r   c                 t    d}| j                  | j                  ||j                  | j                               y )Nu    ÿĀ߿ࠀ￿􏿿)r_   rX   rb   )r   rY   s     r   r  zUTF8Test.test_decoder_stateX  s.    @(()*AHHT]],C	Er   c                     dD ]O  \  }}}| j                  |||      5  | j                  |j                  | j                  |      |       d d d        Q y # 1 sw Y   \xY w)N)   []r   r   )r}  r   u   [��])r}  surrogateescape   [])r}  r   z
[\x80\xff]r   error_handlerrc  )subTestr
   rQ   rX   r   r   r  rc  s       r   test_decode_errorzUTF8Test.test_decode_error]  sp    .
 		+)D- 4}'/  1 +  T]]M!J!)++ +		++ +s   -AA	c                    t         |           | j                  dj                  | j                  d      | j
                  dz          | j                  t              5 }dj                  | j                  d       d d d        j                  }| j                  |j                  |j                  |j                   d       y # 1 sw Y   IxY w)Nr   r~  s   []u   []u   )superr   r
   rb   rX   BOMr   r   rP  objectstartend)r   rR  exc	__class__s      r   r   zUTF8Test.test_lone_surrogatesi  s    $& 	**4==:KLI-	/ 12 	Lb"))$--9JK	LllCIIcgg6G	L 	Ls   CCc                 j   | j                  dj                  | j                  d      | j                  dz          | j                  dj                  | j                  d      | j                  dz          | j                  dj                  | j                  d      | j                  dz          | j                  dj	                  | j                  d      d       | j                  dj	                  | j                  d      d       | j                  t        j                  d             | j                  t              5  dj	                  | j                  d       d d d        | j                  t              5  d	j	                  | j                  d       d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)
Nu	   abcdefr   s	   abcdefu   𐿿s   𐿿r   s   []s   abcs   abcz)
r
   rb   rX   r  rQ   rV   rO   lookup_errorr   r   r   s    r   test_surrogatepass_handlerz#UTF8Test.test_surrogatepass_handleru  ss   ..t}}oN$99	;+224==/R$CC	E)00P$AA	C 	.55dmm_U'	)8??_+	- 	++O<=12 	B!!$--A	B12 	C""4==/B	C 	C	B 	B	C 	Cs   =F7F)F&)F2c                 X   g d}dD ]  }dD ]  }|j                  ||z            |j                  d       |D ]b  }| j                  |      5   t        j                  | j
                               }| j                  t        |j                  |       d d d        d y # 1 sw Y   oxY w)N)                  r  )         s      s      s   s      s   s   )   r  )s   s   s   s   s   s   s   r   )	r   extendr  rO   rP   rX   r   r   rQ   )r   casesprefixsuffixr   r   s         r   test_incremental_errorsz UTF8Test.test_incremental_errors  s     P> 	.F + .Vf_-.	.
 	 N 	O  	HD4( HAf224==AC!!"4cjj$GH H	HH Hs   AB  B)	)r(   r)   r*   rX   r   r   r  r   r  r  r   r  r  __classcell__r  s   @r   rs  rs  <  s;    H)".
C
,E

+
HC&Hr   rs  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)UTF7Testutf-7c                 z   d}| j                  |j                  | j                        |j                  d             | j                  |j                  d      j                  | j                        |       d}| j                  |j                  | j                        |j                  d             | j                  |j                  d      j                  | j                        |       | j                  dj                  | j                        d       | j                  dj                  | j                        d       d}| j                  |j                  | j                        |j                  d             | j                  |j                  d      j                  | j                        |       dj	                  t        t        t        t        d            j                               t        ||z   d	z   |z         z
              }| j                  |j                  | j                        d
       y )NzGABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?asciiz !"#$%&*;<=>@[]^_`{|}za+bs   a+-bz 	
rg      +sX   +AAAAAQACAAMABAAFAAYABwAIAAsADAAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwBcAH4Afw-)	r
   rb   rX   rQ   ro   sortedsetrl   rN   )r   set_dset_owsother_asciis        r   
test_asciizUTF7Test.test_ascii  s    	dmm4ell76KLg.55dmmDeL'dmm4ell76KLg.55dmmDeLdmm4g>6>4==1299W3EF7+224==A2FggfSuT{);)B)B)D%E%()<r)A%B&C D E++DMM:D	Er   c                 ,    | j                  dg d       y )N   a+-b cdĀe𐀀f) r   r   a+za+-a+-br  r  r  r  za+-b a+-b cr  r  r  r  u   a+-b c	   a+-b cdr  r  r  r  u   a+-b cdĀ   a+-b cdĀer  r  r  r  r  r  r  u   a+-b cdĀe𐀀r  r   r   s    r   r   zUTF7Test.test_partial      .!$	
r   c           	          g d}|D ]i  \  }}| j                  |      5  | j                  t        t        j                  |dd       | j                  |j                  dd      |       d d d        k y # 1 sw Y   vxY w)N))s   bu   �b)s   ab   a�b)s   abu   a��b)s   a+IK   a�)s   a+IK-br  )s   a+IK,br  )s   a+IKx   a€�)s   a+IKx-b   a€�b)s   a+IKwgrr  )s	   a+IKwgr-br  )s   a+IKwgr,r  )s
   a+IKwgr,-bu	   a€�-b)s   a+IKwgrB
   a€€�)s
   a+IKwgrB-b   a€€�b)s
   a+/,+IKw-b   a�€b)s   a+//,+IKw-br  )s   a+///,+IKw-b   a￿�€b)s   a+////,+IKw-br  )s   a+IKw-bu   a€b�)s   a+IKwbr  )s   a+@br  rb  ri   Tr  r   )r  r   r   rO   utf_7_decoder
   rQ   r`  s       r   r	  zUTF7Test.test_errors  s    
. # 	KMC#& K!!"4f6I6I #Xt5  GY!?JK K	KK Ks   A
A44A=	c                 `   | j                  dj                  | j                        d       | j                  dj                  | j                        d       | j                  dj                  | j                        d       | j                  dj                  | j                        d       | j                  dj                  | j                        d       | j                  dj                  | j                        d       | j                  dj                  | j                        d       | j                  dj                  | j                        d	       | j                  d	j                  | j                        d       | j                  d
j                  | j                        d       y )Nu   𐒠s   +2AHcoA-u   s   +2AHcoAu   €𐒠s
   +IKzYAdyg-s	   +IKzYAdygu
   €€𐒠s   +IKwgrNgB3KA-s   +IKwgrNgB3KArf  r   s    r   rg  zUTF7Test.test_nonbmp  sF   ,,T]];[I..t}}={K++DMM:LI**4==9<H+224==A=Q--dmm<>PQ,,T]];=OP188G)	+)00?1	3//>1	3r   c                     g d}|D ]B  \  }}| j                  |      5  | j                  |j                  dd      |       d d d        D y # 1 sw Y   OxY w)N))s   a+2AE-bu   ab)s   a+2AEbr  )s   a+2AEr  )s   a+2AEA-br  )s   a+2AH-br  )s
   a+IKzYAQ-bu   a€b)s
   a+IKzYAQbr  )s   a+IKzYAQA-br  )s
   a+IKzYAd-br  )s   a+IKwgrNgB-bu   a€€b)s   a+IKwgrNgBbr  )s
   a+IKwgrNgBr  )s   a+IKwgrNgBA-br  r  r  r   r  r
   rQ   r`  s       r   r   zUTF7Test.test_lone_surrogates  sh    
 # 	KMC#& K  GY!?JK K	KK Ks   #AA	N)	r(   r)   r*   rX   r  r   r	  rg  r   r   r   r   r  r    s$    HE4%
NK<3Kr   r  c                       e Zd Zd Zd Zy)UTF16ExTestc                 T    | j                  t        t        j                  dddd       y )Nr  ri   r   T)r   r   rO   utf_16_ex_decoder   s    r   r	  zUTF16ExTest.test_errors"  s$    ,f.E.EwPXZ[]abr   c                 L    | j                  t        t        j                         y r	   )r   	TypeErrorrO   r  r   s    r   test_bad_argszUTF16ExTest.test_bad_args%  s    )V%<%<=r   N)r(   r)   r*   r	  r  r   r   r   r  r     s    c>r   r  c                       e Zd Zd Zd Zd Zy)ReadBufferTestc                 v    dd l }| j                  t        j                  |j                  dd            d       y )Nr   r      spam)r     )arrayr
   rO   readbuffer_encode)r   r  s     r   
test_arrayzReadBufferTest.test_array*  s/    $$U[[g%>?	
r   c                 N    | j                  t        j                  d      d       y )Nrg   r   r   )r
   rO   r  r   s    r   
test_emptyzReadBufferTest.test_empty1  s    11"5x@r   c                     | j                  t        t        j                         | j                  t        t        j                  d       y N*   )r   r  rO   r  r   s    r   r  zReadBufferTest.test_bad_args4  s0    )V%=%=>)V%=%=rBr   N)r(   r)   r*   r  r  r  r   r   r   r  r  (  s    
ACr   r  c                   F    e Zd ZdZej
                  Zd Zd Zd Z	d Z
d Zy)UTF8SigTest	utf-8-sigc                 ,    | j                  dg d       y )N   ﻿ ÿ߿ࠀ￿𐀀)rg   rg   rg   rg   rg   u   ﻿   ﻿ r     ﻿ ÿr     ﻿ ÿ߿r  r     ﻿ ÿ߿ࠀr  r     ﻿ ÿ߿ࠀ￿r  r  r  r  r   r   s    r   r   zUTF8SigTest.test_partial<  s    8	
r   c                 <    | j                  t        dd      d       y )N   ﻿r  rg   r
   rO  r   s    r   test_bug1601501zUTF8SigTest.test_bug1601501X  s    _k:B?r   c                      t        j                  d             }d}| j                  |j                  |j	                  d            |       y )Nr  r   )rO   rP   r
   rQ   rb   )r   r[   rG   s      r   test_bomzUTF8SigTest.test_bom\  s>    5F((57!((;"78!<r   c                    d}t         j                  dz   }t        j                  d      }d gt        t	        dd            z   g dz   D ]  } |t        j                  |            }t        j                         }	 ||j                  |      }n|j                         }|sn|j                  |       9|j                         }| j                  ||        y Nu   ABC¡∀XYZs   ABC¡∀XYZr  rM      )@   r        i   )rO   BOM_UTF8rj   listrN   r|   r}   StringIOrH   rC   r   r
   	r   	unistring
bytestringr   sizehintistreamostreamr   gots	            r   test_stream_bomzUTF8SigTest.test_stream_boma  s    (	__'DD
!!+.eArl!3312 	-HRZZ
34GkkmG'"<<1D"<<>Dd#  ""$CS),	-r   c                    d}d}t        j                  d      }d gt        t        dd            z   g dz   D ]  } |t	        j
                  |            }t	        j                         }	 ||j                  |      }n|j                         }|sn|j                  |       9|j                         }| j                  ||        y r  )rO   rj   r  rN   r|   r}   r  rH   rC   r   r
   r  s	            r   test_stream_barezUTF8SigTest.test_stream_barew  s    (	2
!!+.eArl!3312 	-HRZZ
34GkkmG'"<<1D"<<>Dd#  ""$CS),	-r   N)r(   r)   r*   rX   rO   r  r  r   r  r  r  r  r   r   r   r  r  8  s*    H
//C
8@=
-,-r   r  c                   $    e Zd Zd Zd Zd Zd Zy)EscapeDecodeTestc                     | j                  t        j                  d      d       | j                  t        j                  t                     d       y )Nr   r  )r
   rO   escape_decode	bytearrayr   s    r   r  zEscapeDecodeTest.test_empty  s:    --c2H=--ik:HEr   c                     t         j                  }t        d      D ]4  }t        |g      }|dk7  s| j	                   ||dz         |dz   df       6 y )Nr     \   0r   )rO   r  rN   rl   r
   r   rQ   r   s      r   test_rawzEscapeDecodeTest.test_raw  sU    %%s 	BAqc
AEz  D!1AHa=A	Br   c           	         t         j                  }t        | |      } |dd        |dd        |dd        |dd        |d	d
        |dd        |dd        |dd        |dd        |dd        |dd        |dd
        |dd        |dd        |dd        |dd        |d d!        |d"d        |d#d!       t        d$d%      D ]  }t	        |g      }|d&vr-| j                  t              5   |d'|z   d'|z          d d d        | j                  t              5   |d'|j                         z   d'|j                         z          d d d         | j                  t              5   |d(d(       d d d        | j                  t              5   |d)d)       d d d        | j                  t              5   |d*d*       d d d        t        d+d,      D ]9  }| j                  t              5   |d-|z  t	        |d.z  g             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# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)/N   [\
]   []   [\"]s   ["]   [\']s   [']   [\\]s   [\]   [\a]s   []   [\b]s   []   [\t]s   [	]   [\n]s   [
]   [\v]s   []   [\f]s   []   [\r]s   []   [\7]   [\78]s   [8]   [\41]s   [!]   [\418]s   [!8]   [\101]s   [A]   [\1010]s   [A0]   [\x41]   [\x410]a   {   s   abfnrtvxr     \8   \9   \r  r     \%o   )rO   r  r   rN   rl   assertWarnsDeprecationWarningupperr   rQ   r   rZ   r   s        r   test_escapezEscapeDecodeTest.test_escape  sb   %%tV,ihhh h	"h	"h	"h	"h	"h	"h	"h	"i$i j'"j&!k7#j&!k7#r3 	<Aqc
A#%%&89 0%!)UQY/0!!"45 <eaggi'):;< <	< 01 	"&&!	"01 	"&&!	"01 	()Y'	(uf% 	7A!!"45 7gk5!e)#567 7	70 0< <	" 	"	" 	"	( 	(7 7sH   <H),H*4
H7
I
I8IH'	*H4	7I III$	c                    t         j                  }| j                  t        |d       | j                  t        |d       | j	                   |dd      d       | j	                   |dd      d       | j                  t        |d       | j                  t        |d	       | j	                   |d
d      d       | j	                   |d
d      d       y )Ns   \xs   [\x]s   [\x]\xr   )r  r   r   )   [?]?r   s   \x0s   [\x0]s   [\x0]\x0)r     )r.  r/  )rO   r  r   rM  r
   )r   rQ   s     r   r	  zEscapeDecodeTest.test_errors  s    %%*ff5*fh7
H5zB
I6E*fg6*fi8h7Di8,Gr   N)r(   r)   r*   r  r  r,  r	  r   r   r   r  r    s    FB%7N	Hr   r  ))u"   ليهمابتكلموشعربي؟s   egbpdaj6bu4bxfgehfvwxn)u   他们为什么不说中文s   ihqwcrb4cv8a8dqg056pqjye)u   他們爲什麽不說中文s   ihqwctvzc91f659drss3x8bo0yb)u   Pročprostěnemluvíčeskys   Proprostnemluvesky-uyb24dma41a)u,   למההםפשוטלאמדבריםעבריתs   4dbcagdahymbxekheh6e0a7fei0b)uZ   यहलोगहिन्दीक्योंनहींबोलसकतेहैंs,   i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd)u6   なぜみんな日本語を話してくれないのかs&   n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa)uH   세계의모든사람들이한국어를이해한다면얼마나좋을까sE   989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c)u8   почемужеонинеговорятпорусскиs    b1abfaaepdrnnbgefbaDotcwatmq2g4l)u*   PorquénopuedensimplementehablarenEspañols-   PorqunopuedensimplementehablarenEspaol-fmd56a)u-   TạisaohọkhôngthểchỉnóitiếngViệts,   TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g)u   3年B組金八先生s   3B-ww4c5e180e575a65lsy2b)u"   安室奈美恵-with-SUPER-MONKEYSs(   -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n)u'   Hello-Another-Way-それぞれの場所s(   Hello-Another-Way--fc4qua05auwb3674vfr0b)u   ひとつ屋根の下2s   2-u9tlzr9756bt3uc0v)u   MajiでKoiする5秒前s   MajiKoi5-783gue6qz075azm5e)u   パフィーdeルンバs   de-jg4avhby1noc0d)u   そのスピードでs   d9juau41awczczp)z-> $1.00 <-s   -> $1.00 <--r   c                       e Zd Zd Zd Zd Zy)PunycodeTestc                     t         D ]V  \  }}| j                  t        |j                  d      d      j	                         t        |d      j	                                X y Npunycoder  )punycode_testcasesr
   rO  rb   lowerr   unipunys      r   test_encodezPunycodeTest.test_encode;  sT    + 		IC CJJz*G4::<D'"((*		r   c                     t         D ]g  \  }}| j                  ||j                  d             |j                  d      j                  d      }| j                  ||j                  d             i y r3  )r5  r
   rQ   rb   r7  s      r   test_decodezPunycodeTest.test_decodeG  s`    + 	;ICS$++j"9:;;w'..w7DS$++j"9:	;r   c                 2   ddt               fdg}|D ]w  \  }}}| j                  ||      5  t        |t              r#| j	                  t         |j
                  d|       n"| j                  |j                  d|      |       d d d        y y # 1 sw Y   xY w)N   xn--w&ri   )r>  r   zxn-)r9  errorsr4  )r   r  
isinstance	Exceptionr   rQ   r
   )r   	testcasesr9  r?  rc  s        r   test_decode_invalidz PunycodeTest.test_decode_invalidM  s    ,.1(
	 '0 	P"D&(47 Ph	2%%lDKKVT$$T[[V%DhO	P P	PP Ps   ABB	N)r(   r)   r*   r:  r<  rC  r   r   r   r1  r1  :  s    
;
Pr   r1  )-)s%   foo­͏᠆᠋bar​⁠baz︀︈️﻿s	   foobarbaz)s   CAFEs   cafe)s   ßs   ss)s   İs   i̇)s   Ńͺs   ń ιNN)s   ǰ ªs   ǰ a)s   ᾷs   ᾶι)   ǰrE  )   ΐrF  )   ΰrG  )   ẖrH  )   ὖrI  )    rJ  )s    rJ  )s    N)s    rJ  )s   ​r   )s   　rJ  )   rK  )s   N)s   ᠎N)r  r   )s   𝅵N)s   N)s   󱈴N)s   􏈴N)s   򏿾N)s   􏿿N)s   N)s   �N)s   ⿵N)s   ́s   ́)s   ‎N)s   ‪N)s   󠀁N)s   󠁂N)s   foo־barN)s	   fooﵐbarN)s	   fooﹶbars	   foo َbar)s   ا1N)   ا1بrL  rD  )s   X­ßİ℡ǰ ªΰ s   xssi̇telǰ aΰ )s   Xß㌖İ℡⒟㌀s*   xssキロメートルi̇tel(d)アパートc                       e Zd Zd Zy)NameprepTestc           	      R   ddl m} t        t              D ]X  \  }\  }}|t	        |dd      }|| j                  t        ||       3t	        |dd      }	 | j                   ||      |       Z y # t        $ r+}t        j                  d|dz   t	        |      fz        d }~ww xY w)Nr   )namepreprt  r   zTest 3.%d: %srM   )encodings.idnarP  r   nameprep_testsrO  r   r   r
   rA  r   
TestFailed)r   rP  posorigpreppedes         r   test_nameprepzNameprepTest.test_nameprep  s    +$-n$= 	P C$|tWo6D!!,$?gw@P$$Xd^W=	P ! P!,,_As1v-NOOPs   A22	B&;&B!!B&N)r(   r)   r*   rX  r   r   r   rN  rN    s    Pr   rN  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	IDNACodecTestc                     | j                  t        dd      d       | j                  t        dd      d       | j                  t        dd      d       | j                  t        dd      d	       y )
N
   python.orgidna
python.org   python.org.python.org.   xn--pythn-mua.org   pythön.org   xn--pythn-mua.org.   pythön.org.r  r   s    r   test_builtin_decodez!IDNACodecTest.test_builtin_decode	  sa    ]F3\B^V4mD16:OL2F;=MNr   c                    | j                  dj                  d      d       | j                  dj                  d      d       | j                  dj                  d      d       | j                  dj                  d      d	       y )
Nr^  r]  r\  r`  r_  rb  ra  rd  rc  r
   rb   r   s    r   test_builtin_encodez!IDNACodecTest.test_builtin_encode  sq    ,,V4mD--f5~F//79MN)008:OPr   c                     | j                  t        d      5  dj                  d       d d d        | j                  t        d      5  dj                  d       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)Nzway too longsT  xn--016caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar]  ztoo longsN   xn--016caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)assertRaisesRegexr   rQ   r   s    r    test_builtin_decode_length_limitz.IDNACodecTest.test_builtin_decode_length_limit  sm    ##L.A 	3"**62	3##L*= 	1 ((0	1 	1	3 	3	1 	1s   A"A."A+.A7c                      t        j                  d      t        j                  d            }|j	                  d       | j                  |j	                         d       y )Nr]     abc   rg   )rO   rj   r|   r}   rH   r
   )r   rs   s     r   test_streamzIDNACodecTest.test_stream  sC    $FV$RZZ%78	q	2&r   c                 L   | j                  dj                  t        j                  d dD        d            d       | j                  dj                  t        j                  d dD        d            d       | j                  dj                  t        j                  d	 d
D        d            d       | j                  dj                  t        j                  d d
D        d            d        t        j                  d             }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  dd      d       |j                          | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  dd      d       y )Nrg   c              3   4   K   | ]  }t        |g        y wr	   rl   r   ru   s     r   r   z8IDNACodecTest.test_incremental_decode.<locals>.<genexpr>"  s     &IauaSz&I   r\  r]  r^  c              3   4   K   | ]  }t        |g        y wr	   rr  rs  s     r   r   z8IDNACodecTest.test_incremental_decode.<locals>.<genexpr>&  s     &JauaSz&Jrt  r_  r`  c              3   4   K   | ]  }t        |g        y wr	   rr  rs  s     r   r   z8IDNACodecTest.test_incremental_decode.<locals>.<genexpr>*       &QauaSz&Qrt  rc  rd  c              3   4   K   | ]  }t        |g        y wr	   rr  rs  s     r   r   z8IDNACodecTest.test_incremental_decode.<locals>.<genexpr>.  rw  rt  s   xn--xams	   ple-9ta.ou	   äxample.s   rgr   Torgs   rg.zorg.)r
   ro   rO   rp   rP   rQ   rn   )r   decoders     r   test_incremental_decodez%IDNACodecTest.test_incremental_decode   s   GGF%%&I=&I6RS	
 	GGF%%&J>&JFST	
 	GGF%%&Q;P&QSYZ[	
 	GGF%%&Q;P&QSYZ[	

 7&..v68
5r:7G.3T2E:
5r:7G/8T2B7r   c                    | j                  dj                  t        j                  dd            d       | j                  dj                  t        j                  dd            d       | j                  dj                  t        j                  dd            d       | j                  dj                  t        j                  dd            d        t        j                  d             }| j                  |j                  d	      d       | j                  |j                  d
      d       | j                  |j                  dd      d       |j                          | j                  |j                  d	      d       | j                  |j                  d      d       | j                  |j                  dd      d       y )Nr   r^  r]  r\  r`  r_  rd  rc  u   äxz	ample.orgs   xn--xample-9ta.rg   Ts   orgz
ample.org.s   xn--xample-9ta.org.)r
   ro   rO   
iterencodera   rb   rn   )r   encoders     r   test_incremental_encodez%IDNACodecTest.test_incremental_encode>  sn   HHV&&|V<=	
 	HHV&&}f=>	
 	HHV&&'7@A!	
 	HHV&&'7@A!	

 7&..v680#646HID16:0#657MND137r   c                     dj                  dd       dj                  dd       dD ]F  }| j                  t        dj                   d|       | j                  t        dj                  d|       H y)z$Only supports "strict" error handlerr^  r]  ri   r\  )r   r   r   r~  N)rb   rQ   r   rA  r   r?  s     r   r	  zIDNACodecTest.test_errorsZ  sj    FH-VX.# 	6Fi)<)<ffMi$$ff6	6r   N)
r(   r)   r*   re  rh  rk  ro  r{  r  r	  r   r   r   rZ  rZ    s'    OQ1'
8<886r   rZ  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y)CodecsModuleTestc                    | j                  t        j                  dd      d       | j                  t        t        j                         | j                  t        j                  d      d       | j                  t
        t        j                  dd       | j                  t        j                  dd      d       | j                  t        j                  d	dd
      d       y )N   latin-1   äöürm  abcr  r  objrX      []r   r?  r   )r
   rO   rQ   r   r  r   r   s    r   r<  zCodecsModuleTest.test_decodeg  s    	B'	))V]]3v.6,fmmWgN 	?YO'	)y'(K	r   c                    | j                  t        j                  dd      d       | j                  t        t        j                         | j                  t
        t        j                  dd       | j                  t        j                  d      d       | j                  t        t        j                  dd	       | j                  t        j                  dd
      d       | j                  t        j                  dd	d      d       y )Nr  r  r  r   __spam__r  rm  u   ÿffr  r     [ÿ]r   r  r  )r
   rO   rb   r   r  LookupErrorr   r   s    r   r:  zCodecsModuleTest.test_encodet  s    ~yA(	*)V]]3+v}}eZHu-v6,fmmXwO 	>IN(	*xJ	 r   c                     | j                  t        t        j                         | j                  t        t        j                  d       y r  )r   r  rO   registerr   s    r   test_registerzCodecsModuleTest.test_register  s,    )V__5)V__b9r   c                 z   d}t        j                         }t        j                  |       | j	                  t
        t        j                  |       |j                  |       |j                          t        j                  |       | j	                  t        t        j                  |       |j                          y )Nnonexistent_codec_name)r   MockrO   r  r   r  r   assert_called_with
reset_mock
unregisterr  assert_not_called)r   namesearch_functions      r   test_unregisterz CodecsModuleTest.test_unregister  s~    '))+()V]]D9**40""$/*+v}}d;))+r   c                     | j                  t        t        j                         | j                  t        t        j                  d       | j                  t        t        j                  d       y )Nr   )r   r  rO   r   r  r   s    r   test_lookupzCodecsModuleTest.test_lookup  sB    )V]]3+v}}jA+v}}c:r   c                     | j                  t        t        j                         | j                  t        t        j                  d       y Nr  )r   r  rO   
getencoderr  r   s    r   test_getencoderz CodecsModuleTest.test_getencoder  0    )V%6%67+v'8'8*Er   c                     | j                  t        t        j                         | j                  t        t        j                  d       y r  )r   r  rO   
getdecoderr  r   s    r   test_getdecoderz CodecsModuleTest.test_getdecoder  r  r   c                     | j                  t        t        j                         | j                  t        t        j                  d       y r  )r   r  rO   rj   r  r   s    r   test_getreaderzCodecsModuleTest.test_getreader  0    )V%5%56+v'7'7Dr   c                     | j                  t        t        j                         | j                  t        t        j                  d       y r  )r   r  rO   r   r  r   s    r   test_getwriterzCodecsModuleTest.test_getwriter  r  r   c                    t        j                  t         j                        }| j                  t         j                  t         j                  |       	 t        j                  t         j                  d       t        j                  d      }| j                  |j                  d       y # t         j                  $ r | j                  d       Y Xw xY w)Ntr_TRztest needs Turkish localeASCIIr  )
locale	setlocaleLC_CTYPErA  ErrorskipTestrO   r   r
   r  )r   	oldlocaleru   s      r   test_lookup_issue1813z&CodecsModuleTest.test_lookup_issue1813  s     $$V__5	((&//9E	7V__g6 MM'")	 || 	7MM56	7s   $B* *$CCc                     d}| j                  |t        j                         t        j                  D ]  }t        t        |        y )N),rb   rQ   r  	CodecInfoCodecIncrementalEncoderIncrementalDecoderStreamReaderStreamWriterr   r  r  ra   rP   rj   r   register_errorr  strict_errorsreplace_errorsignore_errorsxmlcharrefreplace_errorsbackslashreplace_errorsnamereplace_errorsrD  EncodedFiler}  rp   r  BOM_BEBOM_LEr  	BOM_UTF16BOM_UTF16_BEBOM_UTF16_LE	BOM_UTF32BOM_UTF32_BEBOM_UTF32_LEBOM32_BEBOM32_LEBOM64_BEBOM64_LEStreamReaderWriterStreamRecoder)assertCountEqualrO   __all__getattr)r   apis     r   test_allzCodecsModuleTest.test_all  s<    
$ 	c6>>2>> 	!CFC 	!r   c                 n   | j                  t        j                  t        j                         dD ]j  }| j	                  |      5  t        j                  t        j                  |d      5 }| j                  |t
        j                         d d d        d d d        l y # 1 sw Y   xY w# 1 sw Y   xY w)N)wrs   zr+w+r   r  r  )	rA  r   rB  rC  r  rO   rD  rS   r  )r   rQ  files      r   	test_openzCodecsModuleTest.test_open  s    	(()*:*:;5 	GDd# GKK	 0 0$@GDH%%dF,E,EFG G G	GG G G Gs$   &B++!BB+B($B++B4	c                    | j                  t        t        j                  dd       | j                  t        t        j                  dd       | j                  t        t        j                  dd       | j                  t        t        j                  dd       dD ]P  }| j                  t        t        j                  dd|       | j                  t        t        j                  dd|       R y )Nr  	undefinedrm  rg   r   )ri   r   r   r   )r   r   rO   rb   rQ   r  s     r   test_undefinedzCodecsModuleTest.test_undefined  s    ,ukJ,v{K,r;G,sKHI 	<Fluk6;lv{F<	<r   c                 ^   t        j                         }t        j                  d|      5 }| j                  t              5  t        j                  t        j                  dd       d d d         |       j                  j                          d d d        y # 1 sw Y   1xY w# 1 sw Y   y xY w)Nzbuiltins.openrK  zinvalid-encoding)r   	mock_openpatchr   r  rO   rD  r   rC  closeassert_called)r   r  r  s      r   'test_file_closes_if_lookup_error_raisedz8CodecsModuleTest.test_file_closes_if_lookup_error_raised  s    NN$	ZZ3 	)t"";/ HI,,d4FGH FLL&&(		) 	)H H	) 	)s#   B#&B''B#B 	B##B,N)r(   r)   r*   r<  r:  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r  e  sM     :
,;
FFEE*!.G	<)r   r  c                   $    e Zd Zd Zd Zd Zd Zy)StreamReaderTestc                 l    t        j                  d      | _        t        j                  d      | _        y )Nrt     한
글)rO   rj   r   r|   r}   r~   r   s    r   setUpzStreamReaderTest.setUp  s%    &&w/jj!>?r   c                 ~    | j                  | j                        }| j                  |j                         ddg       y )Nu   한
u   글)r   r~   r
   r   r   r   s     r   test_readlineszStreamReaderTest.test_readlines  s/    KK$X(>?r   c                 8   | j                  t        d            }| j                  t        d      5  t	        j                  |       d d d        | j                  t        d      5  t	        j
                  |       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr  r  )r   r;   rj  r  copydeepcopyr  s     r   	test_copyzStreamReaderTest.test_copy  s|    KK;<=##I~> 	IIaL	##I~> 	MM!	 		 		 	   B%BBBc                 J   t        t        j                  dz         D ]l  }| j                  |      5  | j	                  t        d            }| j                  t        d      5  t        j                  ||       d d d        d d d        n y # 1 sw Y   xY w# 1 sw Y   xY w)NrM   protocolr  r  )	rN   pickleHIGHEST_PROTOCOLr  r   r;   rj  r  dumpsr   protor   s      r   test_picklezStreamReaderTest.test_pickle  s    622Q67 	+Eu- +KK&C DE++I~F +LLE*++ +	++ ++ +#   1B#B:BBBB"	N)r(   r)   r*   r  r  r  r  r   r   r   r  r    s    @@+r   r  c                       e Zd Zd Zd Zd Zy)StreamWriterTestc                 8    t        j                  d      | _        y )Nrt  )rO   r   r   r   s    r   r  zStreamWriterTest.setUp  s    &&w/r   c                 8   | j                  t        d            }| j                  t        d      5  t	        j                  |       d d d        | j                  t        d      5  t	        j
                  |       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr   r  )r   r;   rj  r  r  r  r  s     r   r  zStreamWriterTest.test_copy  sz    KKc
###I~> 	IIaL	##I~> 	MM!	 		 		 	r  c                 J   t        t        j                  dz         D ]l  }| j                  |      5  | j	                  t        d            }| j                  t        d      5  t        j                  ||       d d d        d d d        n y # 1 sw Y   xY w# 1 sw Y   xY w)NrM   r  r   r  )	rN   r  r  r  r   r;   rj  r  r  r  s      r   r  zStreamWriterTest.test_pickle  s    622Q67 	+Eu- +KKc
+++I~F +LLE*++ +	++ ++ +r  Nr(   r)   r*   r  r  r  r   r   r   r   r     s    0+r   r   c                       e Zd Zd Zd Zd Zy)StreamReaderWriterTestc                 l    t        j                  d      | _        t        j                  d      | _        y )Nlatin1rt  )rO   rj   r   r   r   r   s    r   r  zStreamReaderWriterTest.setUp  s&    &&x0&&w/r   c                 l   t        j                  t        d      | j                  | j                        }| j                  t        d      5  t        j                  |       d d d        | j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr   r  )	rO   r  r;   r   r   rj  r  r  r  r  s     r   r  z StreamReaderWriterTest.test_copy  s    %%eCj$++t{{K##I/CD 	IIaL	##I/CD 	MM!	 		 		 	s   B?B*B'*B3c                 ~   t        t        j                  dz         D ]  }| j                  |      5  t	        j
                  t        d      | j                  | j                        }| j                  t        d      5  t        j                  ||       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)NrM   r  r   r  )rN   r  r  r  rO   r  r;   r   r   rj  r  r  r  s      r   r  z"StreamReaderWriterTest.test_pickle   s    622Q67 	+Eu- +--eCj$++t{{S++I7KL +LLE*++ +	++ ++ +s$   AB3=B'B3'B0,B33B<	Nr  r   r   r   r  r    s    0+r   r  c                       e Zd Zd Zy)EncodedFileTestc                 T   t        j                  d      }t        j                  |dd      }| j	                  |j                         d       t        j                         }t        j                  |dd      }|j                  d       | j	                  |j                         d       y )Nr  rV  rt  s   \
  r     ü   )r|   r}   rO   r  r
   rH   rC   r   r   r   efs      r   
test_basiczEncodedFileTest.test_basic*  s}    JJ45;8$;<JJL7I6
w/r   N)r(   r)   r*   r  r   r   r   r  r  (  s    0r   r  )er  big5	big5hkscscharmapcp037cp1006cp1026cp1125cp1140cp1250cp1251cp1252cp1253cp1254cp1255cp1256cp1257cp1258cp424cp437cp500cp720cp737cp775cp850cp852cp855cp856cp857cp858cp860cp861cp862cp863cp864cp865cp866cp869cp874cp875cp932cp949cp950euc_jis_2004euc_jisx0213euc_jpeuc_krgb18030gb2312gbk	hp_roman8hzr]  
iso2022_jpiso2022_jp_1iso2022_jp_2iso2022_jp_2004iso2022_jp_3iso2022_jp_ext
iso2022_kr	iso8859_1
iso8859_10
iso8859_11
iso8859_13
iso8859_14
iso8859_15
iso8859_16	iso8859_2	iso8859_3	iso8859_4	iso8859_5	iso8859_6	iso8859_7	iso8859_8	iso8859_9johabkoi8_rkoi8_tkoi8_ukz1048latin_1mac_cyrillic	mac_greekmac_iceland
mac_latin2	mac_romanmac_turkishpalmosptcp154r4  raw_unicode_escape	shift_jisshift_jis_2004shift_jisx0213tis_620unicode_escapeutf_16	utf_16_be	utf_16_leutf_7utf_8mbcs_encodembcs
oem_encodeoemr4  c                       e Zd Zd Zej
                   ej                  edu d      d               Z	d Z
d Zd Zd Zd	 Zy)
BasicUnicodeTestc           	         d}t         D ]  }t        j                  |      j                  }|j	                  d      r|dz  }n|dk(  rd}|dk7  r2| j                  |j                  dd      |j                  dd              t        j                  |      |      \  }}| j                  |t        |      d|z          t        j                  |      |      \  }}| j                  ||d|z         |t        vrt        d      } t        j                  |      |      }d}	|D ]R  }
|j                  |
       |j                         }| j                  t!        |      t"        u t!        |             |	|z  }	T t        d      } t        j$                  |      |      }d	}|	D ]0  }
|j                  t#        |
g             ||j                         z  }2 | j                  ||d|z         |t        vs	  t        j&                  |             d}	|D ]  }
|	j)                  |
      z  }	 |	j)                  d	d
      z  }	 t        j*                  |             d	}|	D ]   }
|j-                  t#        |
g            z  }" |j-                  dd
      z  }| j                  ||d|z         d	j/                  t        j0                  t        j2                  ||      |            }| j                  ||d|z         d	j/                  t        j0                  t        j2                  d	|      |            }| j                  |d	       |dvsF	  t        j&                  |      d      dj/                  fd|D              }	 t        j*                  |      d      d	j/                  fd|	D              }| j                  ||d|z          y # t4        $ r Y w xY w# t4        $ r Y w xY w)Nabc123_codecra  rv  r   -encoding=%rr   rg   Tr]  rv  r   c              3   @   K   | ]  }j                  |        y wr	   rb   )r   ru   r~  s     r   r   z/BasicUnicodeTest.test_basics.<locals>.<genexpr>  s     0Nq1B0N   c              3   T   K   | ]  }j                  t        |g             ! y wr	   rQ   rl   )r   ru   rz  s     r   r   z/BasicUnicodeTest.test_basics.<locals>.<genexpr>  s*      0H45 18uaSz0J 0H   %()all_unicode_encodingsrO   r   r  endswithr
   r   r  r   r  broken_unicode_with_statefulr;   r   rC   rH   rV   typerl   rj   ra   rb   rP   rQ   ro   rp   r}  r  )r   rG   rX   r  r   rF   rB   rr   r   encodedresultru   chunkr   decodedresultrt   rz  r~  s                  @@r   test_basicszBasicUnicodeTest.test_basics  s   - L	CH==*//D  * Y& v~  !1!1#s!;!%c3!79 4))(3A6IQT3q6=8+CD7F--h7:MUDUA}x'?@;;#J3))(3A6 # +ALLOFFHEOODK5$8$u+F!U*M	+
 #J3))(3A6 "& 3AGGE1#J'!V[[]2M3   =83KL;;1Df::8DFG
 %(M ;%)::;!W^^B%==MDf::8DFG$&M* D%qc
)CCD!W^^C%>>M$$]A%2X%=?  WWV%6%6"--a:H&F GF$$VQ0HI  WWV%6%6"--b(;X&G HF$$VR0#33
C"H&">">x"H"R ),0NA0N(N"H&">">x"H"R(* 0H9F0H )H(()6)ACWL	CL # < ' s$   9OO%	O"!O"%	O21O2Nzneed _testcapi modulec                    d}t         D ]7  }|t        vs	 t        j                  |      d}|D ]  }|j	                  |      z  } |j	                  dd      z  }t        j
                  |      d}|D ]   }|j                  t        |g            z  }" |j                  dd      z  }| j                  ||d|z         |dvs	 t        j                  |d      dj                  fd|D              }t        j
                  |d      dj                  fd	|D              }| j                  ||d|z         : y # t        $ r Y w xY w# t        $ r Y Ww xY w)
Nr|  r   rg   Tr  r  r   c              3   @   K   | ]  }j                  |        y wr	   r  )r   ru   cencoders     r   r   z4BasicUnicodeTest.test_basics_capi.<locals>.<genexpr>  s     0O1C0Or  c              3   T   K   | ]  }j                  t        |g             ! y wr	   r  )r   ru   cdecoders     r   r   z4BasicUnicodeTest.test_basics_capi.<locals>.<genexpr>  s*      0H45 19qc
0K 0Hr  )r  r  	_testcapicodec_incrementalencoderrb   codec_incrementaldecoderrQ   rl   r
   r  ro   )r   rG   rX   r  ru   r  r  r  s         @@r   test_basics_capiz!BasicUnicodeTest.test_basics_capi  s    - !	CH;;?(AA(KH
 %(M <%);;<!X__R%>>M(AA(KH$&M* E%s)DDE!X__S$%??M$$]A%2X%=? #33
C#,#E#EhPX#Y ),0OQ0O(O#,#E#EhPX#Y(* 0H9F0H )H(()6)ACA!	C
 # ( ' s#   EE	EE	E#"E#c                 D   ddz  }t         D ]  }|dk(  r	|t        v r t        j                  |      t	        j
                  |j                  |                  }t        d      D ]6  }|j                  dd       |j                         }| j                  ||       8  y )Nz%s
%s
)X  abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123X  def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456r]  r   r   )r  r  rO   rj   r|   r}   rb   rN   seekrH   r
   )r   rG   rX   r   tr   s         r   	test_seekzBasicUnicodeTest.test_seek#  s    55- 
	*H6!77/V%%h/

188H;M0NOF1X *Aq!{{}  D)	*
	*r   c                     t         D ]I  }t        j                  |      }| j                  t        |       |dvs3| j                  t        |d       K y )N)r]  r4  r  )r  rO   r  r   r  )r   rX   rz  s      r   test_bad_decode_argsz%BasicUnicodeTest.test_bad_decode_args2  sL    - 	:H''1Gi133!!)Wb9		:r   c                 p    t         D ]-  }t        j                  |      }| j                  t        |       / y r	   )r  rO   r  r   r  )r   rX   r~  s      r   test_bad_encode_argsz%BasicUnicodeTest.test_bad_encode_args9  s1    - 	2H''1Gi1	2r   c                 ^    ddl m} t        |j                        }| j	                  ||       y )Nr   )r  )	encodingsr  r  encoding_tabler
   )r   r  
table_types      r   "test_encoding_map_type_initializedz3BasicUnicodeTest.test_encoding_map_type_initialized>  s%    $&//0
Z0r   c                     d}t         D ]O  }|t        vs| j                  |||j                  |             | j	                  |||j                  |             Q y )Nr|  )r  r  r_   rb   rc   )r   rY   rX   s      r   r  z#BasicUnicodeTest.test_decoder_stateD  sW    - 	RH;;001ahhx>PQ001ahhx>PQ	Rr   )r(   r)   r*   r  r   cpython_onlyunittestskipIfr  r  r  r  r  r  r  r   r   r   rz  rz    s]    NC` X__Y$&(?@#C A #CJ*:2
1Rr   rz  c                       e Zd Zd Zd Zd Zy)CharmapTestc                    | j                  t        j                  ddd      d       | j                  t        j                  ddd      d       | j                  t        t        j                  ddd       | j                  t        t        j                  ddd       | j                  t        j                  dd	d      d
       | j                  t        j                  dd	d      d
       | j                  t        j                  ddd      d       | j                  t        j                  ddd      d       | j                  t        j                  ddd      d       | j                  t        j                  ddd      d       t        t        d            }| j                  t        j                  |dd      dt        |      f       y )N    ri   r  r  rn     􏿿bcr  rn  abu   ab￾r   u   ab�rn  r   zab\x02rn  r   r  rn  r  rg   )r
   rO   charmap_decoder   r   rl   rN   r   r   allbytess     r   test_decode_with_string_mapz'CharmapTest.test_decode_with_string_mapN  s   !!/8UC	

 	!!/8^L	

 	,!!?Hd	
 	,!!?Hj	
 	!!/9dC	

 	!!/9jI	

 	!!/3EtL	

 	!!/3EzR	

 	!!/8TB	

 	!!/8ZH	

 s$!!(Hb9X	
r   c                    | j                  t        j                  dddddd      d       | j                  t        j                  dddd	d
d      d       | j                  t        j                  dddddd      d       | j                  t        j                  dddddd      d       | j                  t        t        j                  ddddd       | j                  t        t        j                  ddddd d       | j                  t        t        j                  dddddd       | j                  t        j                  ddddd      d       | j                  t        j                  ddddd d      d       | j                  t        j                  dddddd      d       | j                  t        j                  ddddd      d       | j                  t        j                  ddddd d      d       | j                  t        j                  dddddd      d       | j                  t        j                  ddddd      d       | j                  t        j                  ddddd d      d       | j                  t        j                  dddddd      d       t        t        d            }| j                  t        j                  |di       dt        |      f       | j                  t        dt        j                  dddd	dd       | j                  t        dt        j                  dddd	dd       y )Nr  ri   r   r   ru   r   rM   r   r  AaBbCc)AaBbCcrn     􏿿r  rg   r  r   rM   u   ￾r   r  r   r  r   r  z.character mapping must be in range\(0x110000\)r   iɚ;)
r
   rO   r  r   r   rl   rN   r   rj  r  r  s     r   test_decode_with_int2str_mapz(CharmapTest.test_decode_with_int2str_map  st   !!/8&)cc":<	
 	!!/8&*t"=?	
 	!!/8&2ss"CE	
 	!!/8&)cb"9;	
 	,!!?H'*s#3	

 	,!!?H'*st#<	
 	,!!?H'*sx#@	

 	!!/9&)c"24	
 	!!/9&)cd";=	
 	!!/9&)ch"?A	
 	!!/3E&)c"24	
 	!!/3E&)cd";=	
 	!!/3E&)ch"?A	
 	!!/8&)c"24	
 	!!/8&)cd";=	
 	!!/8&)ch"?A	
 s$!!(Hb9X	

 	y>!!X34B'?	
 	y>!!X34I'F	
r   c           
         t        d      }t        d      }t        d      }| j                  t        j                  dd|||d      d       | j                  t        j                  ddd||d      d	       | j                  t        j                  ddt        j
                  ||d      t        t        j
                        d
z   df       | j                  t        t        j                  ddt        j
                  dz   ||d       | j                  t        t        j                  dd||d       | j                  t        t        j                  dd||dd       | j                  t        j                  dd||d      d       | j                  t        j                  dd||dd      d       | j                  t        j                  dd||d      d       | j                  t        j                  dd||dd      d       | j                  t        j                  dd||d      d       | j                  t        j                  dd||dd      d       y )Nr   r   ru   r  ri   r  r  i r  bcrn  rM   r  i  r   r  r   r  r   r  )
ordr
   rO   r  r  
maxunicodechrr   r  r   )r   r   r   ru   s       r   test_decode_with_int2int_mapz(CharmapTest.test_decode_with_int2int_map  sV   HHH!!/8&'A!"46	
 	!!/8&.1";=	
 	!!/8&)nnq"AC 4'+	
 	)!!?H'*~~'9aA#F	

 	,!!?H'(Q<	

 	,!!?H'(Q6#:	

 	!!/9&'A,0	
 	!!/9&'A&"9;	
 	!!/3E&'A,0	
 	!!/3E&'A&"9;	
 	!!/8&'A,0	
 	!!/8&'A&"9;	
r   N)r(   r)   r*   r  r  r  r   r   r   r  r  M  s    5
nr
hI
r   r  c                       e Zd Zd Zd Zy)WithStmtTestc                     t        j                  d      }t        j                  |dd      5 }| j	                  |j                         d       d d d        | j                  |j                         y # 1 sw Y   %xY w)Nr  r  rt  r  )r|   r}   rO   r  r
   rH   rV   closedr  s      r   test_encodedfilezWithStmtTest.test_encodedfileF	  s_    JJ{#9g6 	1"RWWY0	1!	1 	1s   !A22A;c                    t        j                  d      }t        j                  d      }t        j                  ||j
                  |j                  d      5 }| j                  |j                         d       d d d        y # 1 sw Y   y xY w)Nr  rt  ri      ü)	r|   r}   rO   r   r  streamreaderstreamwriterr
   rH   )r   r   r8   srws       r   test_streamreaderwriterz$WithStmtTest.test_streamreaderwriterL	  sp    JJ{#}}W%&&q$*;*;'+'8'8(D 	1GJSXXZ0	1 	1 	1s   !BB
N)r(   r)   r*   r  r  r   r   r   r  r  E	  s    "1r   r  c                       e Zd Zd Zd Zy)	TypesTestc                 
   t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  g}t        t         d      r|j                  t         j                         |D ]  }| j!                  t"        |d        y )Nmbcs_decoder   )rO   r  utf_8_decoder_  rp  r  r  r#  r0  utf_32_ex_decodelatin_1_decodeascii_decoder  hasattrr   r  r   r  )r   decodersrz  s      r   test_decode_unicodezTypesTest.test_decode_unicodeU	  s     ######  ######!!!!
 6=)OOF../ 	9Gi%8	9r   c                    | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j	                  t
        t        j                  d       | j                  t        j                  dd      d       | j                  t        j                  dd      d	       | j	                  t
        t        j                  d       | j                  t        j                  dd      d       | j                  t        j                  dd      d	       y )
Nz\u1234)u   ሴr   s   \u1234
   \U00110000z
\U00110000r   r   r   r   )z(\x5c\x55\x30\x30\x31\x31\x30\x30\x30\x30r   )r
   rO   unicode_escape_decoderaw_unicode_escape_decoder   r   r   s    r   test_unicode_escapezTypesTest.test_unicode_escapej	  s%    	55i@-P55jA=Q99)DmT99*E}U,f.J.JN[55mYOQ_`55mEWXJ	L 	,f.N.NP^_99-SUcd99-I[\J	Lr   N)r(   r)   r*   r  r  r   r   r   r  r  T	  s    9*Lr   r  c                   >    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zy)
UnicodeEscapeTestzunicode-escapeNc                     | j                  t        j                  d      d       | j                  t        j                  d      d       y Nrg   r  r   rg   r   )r
   rO   unicode_escape_encoder  r   s    r   r  zUnicodeEscapeTest.test_empty	  s8    55b98D55c:GDr   c                     t         j                  }t        dd      D ]5  }|dk7  s	| j                   |t	        |            t        |g      df       7 y )N       \   rM   )rO   r  rN   r
   r  rl   r   rb   r   s      r   test_raw_encodez!UnicodeEscapeTest.test_raw_encode	  sM    --r3 	BAH}  A%*aA	Br   c                     t         j                  }t        d      D ];  }|dk7  s	| j                   |t	        |g      dz         t        |      dz   df       = y )Nr  r  r	  0r   )rO   r  rN   r
   rl   r  r
  s      r   test_raw_decodez!UnicodeEscapeTest.test_raw_decode	  sV    --s 	OAH}  qc
T(9!:SVc\1<MN	Or   c                    t         j                  }t        | |      } |dd        |dd        |dd        |dd       t        d	      D ]3  }t	        |      d
vs |t	        |      d|z  j                                5 t        dd      D ]%  } |t	        |      d|z  j                                '  |dd        |dd       y )N	s   \tr   s   \nr   s   \r\s   \\r  z	
r   r  r     €   \u20ac   𝄠
   \U0001d120)rO   r  r   rN   r  rb   r   rb   r   r   s       r   test_escape_encodez$UnicodeEscapeTest.test_escape_encode	  s    --tV,dFdFdFdFr 	8A1vX%c!fy1}4467	8 sC 	4A#a&9q=0023	4h
#lN+r   c           
         t         j                  }t        | |      } |dd        |dd        |dd        |dd        |d	d
        |dd        |dd        |dd        |dd        |dd        |dd        |dd
        |dd        |dd        |dd        |dd        |d d!        |d"d        |d#d!        |d$d%        |d&d'       t        d(d)      D ]  }t	        |g      }|d*vr6| j                  t              5   |d+|z   d,t        |      z          d d d        |j                         d-vs\| j                  t              5   |d+|j                         z   d,t        |d.z
        z          d d d         | j                  t              5   |d/d0       d d d        | j                  t              5   |d1d2       d d d        | j                  t              5   |d3d4       d d d        t        d5d6      D ]5  }| j                  t              5   |d7|z  t        |             d d d        7 y # 1 sw Y    xY w# 1 sw Y   vxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)8Nr  r   r  z["]r  z[']r  z[\]r  z[]r  z[]r  z[	]r  z[
]r  z[]r  z[]r  z[]r  r  z[8]r  z[!]r  z[!8]r  z[A]r  z[A0]r  r   r  r  r  r  r!  r"  s	   abfnrtuvxr  r  s   UNr  r#  z\8r$  z\9r%  u   \úr  r  r&  )	rO   r  r   rN   rl   r(  r)  r  r*  r+  s        r   test_escape_decodez$UnicodeEscapeTest.test_escape_decode	  s   --tV,ihhhh!h!h!h!h!h!h!h!i#ij&!j% k6"j% k6"j(#nl+r3 	?Aqc
A$%%&89 4%!)TCF]34wwy%%%&89 ?%!'')+TC"I-=>? ?	? 01 	!&% 	!01 	!&% 	!01 	')X&	'uf% 	+A!!"45 +gk3q6*+ +	+4 4? ?	! 	!	! 	!	' 	'+ +sH   I*I 
I
I+.
I7$JI	I	I(+I47J J	c           	      .   t         j                  }dD ]  \  }}t        |      D ]  }| j                  t        |d|z   d|z  z          | j                  t        |d|z   d|z  z   dz          d|z   d|z  z   dz   |z   d|z  z   }| j                   ||d      dt        |      f       | j                   ||d	      d
t        |      f         | j                  t        |d       | j                   |dd      d       | j                   |dd	      d       y )N))   xr      ur     Ur  r  r	     [\   ]   ]\r   r   r      [�]�r  rg   r   r  )rO   r  rN   r   r   r
   r   r   rQ   ru   r[   rZ   r   s         r   test_decode_errorsz$UnicodeEscapeTest.test_decode_errors	  s.   --3 		@DAq1X @!!"4f"'!)d1f"46!!"4f"(1*tAv"5"<>zDF*V3a7$q&@  h!7$D	9JK  i!8"2CI!>@@		@ 	,fnE98D	:NKr   c                 ,    | j                  dg d       y )N    	
\ÿ￿𐀀) rg   rg   rg   r   r    	r   	
r   	
r   	
\r  r  r      	
\ÿr  r  r  r  r  
    	
\ÿ￿r  r  r  r  r  r  r  r  r  r  r   r   s    r   r   zUnicodeEscapeTest.test_partial	  r  r   r(   r)   r*   rX   r   r  r  r  r  r  r  r   r   r   r   r  r  }	  s5    HEBO,(+TL %
r   r  c                   >    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zy)
RawUnicodeEscapeTestzraw-unicode-escapeNc                     | j                  t        j                  d      d       | j                  t        j                  d      d       y r  )r
   rO   raw_unicode_escape_encoder  r   s    r   r  zRawUnicodeEscapeTest.test_empty
  s8    99"=xH99#>Hr   c                     t         j                  }t        d      D ]/  }| j                   |t	        |            t        |g      df       1 y )Nr  rM   )rO   r  rN   r
   r  rl   r  s      r   r  z$RawUnicodeEscapeTest.test_raw_encode
  sB    11s 	>AVCF^eQCj!_=	>r   c                     t         j                  }t        d      D ]5  }| j                   |t	        |g      dz         t        |      dz   df       7 y )Nr  r	  r  r   )rO   r  rN   r
   rl   r  r
  s      r   r  z$RawUnicodeEscapeTest.test_raw_decode
  sO    11s 	KAVE1#J$56Q#q8IJ	Kr   c                     t         j                  }t        | |      }t        d      D ])  }|dvs |dt	        |      z   dt        |g      z          +  |dd        |dd       y )	Nr     uUr  r  r  r  r  r  )rO   r  r   rN   r  rl   r  s       r   r  z'RawUnicodeEscapeTest.test_escape_encode
  sf    11tV,s 	9A~dSVmUUA3Z%78	9 	h
#lN+r   c                     t         j                  }t        | |      }t        d      D ])  }|dvs |dt	        |g      z   dt        |      z          +  |dd        |dd       y )	Nr  r  r  r  r  r  r  r  )rO   r  r   rN   rl   r  )r   rQ   r   r   s       r   r  z'RawUnicodeEscapeTest.test_escape_decode
  sf    11tV,s 	9A~eeQCj($Q-8	9 	j(#nl+r   c           	      .   t         j                  }dD ]  \  }}t        |      D ]  }| j                  t        |d|z   d|z  z          | j                  t        |d|z   d|z  z   dz          d|z   d|z  z   dz   |z   d|z  z   }| j                   ||d      dt        |      f       | j                   ||d	      d
t        |      f         | j                  t        |d       | j                   |dd      d       | j                   |dd	      d       y )N)r  r  r  r	  r  r  r  r   r   r   r	  r  r
  r  )rO   r  rN   r   r   r
   r   r  s         r   r  z'RawUnicodeEscapeTest.test_decode_errors'
  s.   11( 		@DAq1X @!!"4f"'!)d1f"46!!"4f"(1*tAv"5"<>zDF*V3a7$q&@  h!7$D	9JK  i!8"2CI!>@@		@ 	,fnE98D	:NKr   c                 ,    | j                  dg d       y )Nr  )r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   s    r   r   z!RawUnicodeEscapeTest.test_partial7
  s    .	
r   r  r   r   r   r  r  
  s3    #HI>
K
,,L 
r   r  c                       e Zd Zd Zy)EscapeEncodeTestc                 ^   g d}|D ]E  \  }}| j                  |      5  | j                  t        j                  |      |       d d d        G | j	                  t
        t        j                  d       | j	                  t
        t        j                  t        d             y # 1 sw Y   xY w)N))r   r  )   foobar)r$  r   )s	   spam eggs)s   spam\x00eggs	   )s   a'b)s   a\'brn  )s   b\c)s   b\\crn  )s   c
d)s   c\ndrn  )s   de)s   d\rern  )s   fg)s   f\x7fgrn  r  r   r  )r  r
   rO   escape_encoder   r  r  )r   ra  r   outputs       r   r  z#EscapeEncodeTest.test_escape_encodeW
  s    	
 " 	ELD&4( E  !5!5d!;VDE E	E 	)V%9%96B)V%9%99W;MNE Es   &B##B,	N)r(   r)   r*   r  r   r   r   r"  r"  U
  s    Or   r"  c                   $    e Zd Zd Zd Zd Zd Zy)SurrogateEscapeTestc                    | j                  dj                  dd      d       | j                  dj                  dd      d       | j                  dj                  dd      d       | j                  dj                  dd      d       y )N   foobarrt  r~  	   foobars   u	   r
   rQ   rb   r   s    r   	test_utf8zSurrogateEscapeTest.test_utf8k
  s    --g7HI'	)..w8IJ&	( 	//9JK-	/-44W>OP(	*r   c                     | j                  dj                  dd      d       | j                  dj                  dd      d       y )Nr+  r  r~  r,  r-  r   s    r   r  zSurrogateEscapeTest.test_asciiw
  sD    --g7HI'	)..w8IJ&	(r   c                     | j                  dj                  dd      d       | j                  dj                  dd      d       y )Ns   foobarz
iso-8859-3r~  u	   foobarr-  r   s    r   test_charmapz SurrogateEscapeTest.test_charmap~
  sD    --l<MN'	)..|=NO&	(r   c                 H    | j                  dj                  dd      d       y )Nu   r  r~  s   rg  r   s    r   test_latin1zSurrogateEscapeTest.test_latin1
  s$    9@@L]^0	2r   N)r(   r)   r*   r.  r  r1  r3  r   r   r   r)  r)  i
  s    
*((2r   r)  c                       e Zd Zd Zy)BomTestc                 v   d}d}| j                  t        j                  t        j                         |D ]  }t	        j
                  t        j                  d|      5 }|j                  |       |j                  |       |j                  d       | j                  |j                         |dz         |j                  d       | j                  |j                         |dz         d d d        t	        j
                  t        j                  d|      5 }|j                  |d          | j                  |j                         d       |j                  d       |j                  |       |j                  d       | j                  |j                         |       d d d        t	        j
                  t        j                  d|      5 }|j                  j                  |d          | j                  |j                  j                         d       |j                  j                  d       |j                  j                  |       |j                  d       | j                  |j                         |       d d d        t	        j
                  t        j                  d|      5 }|j                  |       |j                  |j                                |j                  |       |j                  d       | j                  |j                         |dz         d d d        t	        j
                  t        j                  d|      5 }|j                  j                  |       |j                  j                  |j                  j                                |j                  j                  |       |j                  d       | j                  |j                         |dz         d d d         y # 1 sw Y   xY w# 1 sw Y   ixY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N
1234567890)r4  rV  rm  r   r  r,  r  r@  r   r   )rA  r   rB  rC  rO   rD  rC   r  r
   rH   assertNotEqualtellr   )r   r   ra  rX   r   s        r   
test_seek0zBomTest.test_seek0
  s     		(()*:*:; ,	5HY--thG 51q	  4!84q	  4!845 Y--thG 11Q ##AFFHa0q	q	  401 Y--thG 11tAw'##AHHMMOQ7a t$q	  401 Y--thG 51qvvx q	  4!845 Y--thG 51t$ahhmmo.t$q	  4!845 5O,	55 51 11 15 55 5sA   BO:BPB0P,A6P!BP.:P	P	P	!P+	.P8	N)r(   r)   r*   r:  r   r   r   r5  r5  
  s    55r   r5  )base64_codecuu_codecquopri_codec	hex_codecbase64base_64uu)quopriquoted_printablequotedprintablehexrot13)r;  r<  r=  r>  rot_13
zlib_codecrk   zlib	bz2_codecbz2c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
 ej                  ed	      d
        Zd Zd Zd Zd Zy)TransformCodecTestc                    t        t        d            }t        D ]  }| j                  |      5   t	        j
                  |      |      \  }}| j                  |t        |              t	        j                  |      |      \  }}| j                  |t        |             | j                  ||       d d d         y # 1 sw Y   xY w)Nr  r@  )	rl   rN   bytes_transform_encodingsr  rO   r  r
   r   r  )r   binputrX   orF   rZ   s         r   r  zTransformCodecTest.test_basics
  s    uSz"1 	,Hx0 ,7F--h7?	D  s6{37F--h7:	D  s1v.  F+, ,	,, ,s   BC  C		c                 4   t         D ]  }| j                  |      5  t        j                  d|      } t        j                  |      t        j                  |            }|j                         }| j                  |d       d d d         y # 1 sw Y   xY wNr@  r  )	rO  r  rO   rb   rj   r|   r}   rH   r
   r   rX   sinr   souts        r   	test_readzTransformCodecTest.test_read
  s    1 	0Hx0 0mmGX63))(3BJJsOD{{}  w/	0 0	00 0   A'BB	c                 4   t         D ]  }| j                  |      5  t        j                  d|      } t        j                  |      t        j                  |            }|j                         }| j                  |d       d d d         y # 1 sw Y   xY wrS  )	rO  r  rO   rb   rj   r|   r}   r   r
   rT  s        r   r   z TransformCodecTest.test_readline
  s    1 	0Hx0 0mmGX63))(3BJJsOD(  w/	0 0	00 0rX  c                    d}t         D ]  }| j                  |      5  |}t        |      }t        j                  ||      }t        j                  ||      }| j                  ||       t        |      }t        j                  ||      }| j                  ||       t        j                  ||      }| j                  ||       d d d         y # 1 sw Y   xY w)Ns   12345r@  )rO  r  
memoryviewrO   rb   r
   rQ   )r   originalrX   r   viewview_encodedview_decodeds          r   test_buffer_api_usagez(TransformCodecTest.test_buffer_api_usage   s      1 	5Hx0 
5!$'}}T84%}}T8<  t4!$'}}T84  x0%}}T8<  t4
5 
5	5
5 
5s   B'CC	c                 T   d}t         D ]  }| j                  |      5  d}|j                  |      }| j                  t        |      5 }|j                  |       d d d        | j                  j                  j                         d d d         y # 1 sw Y   9xY w# 1 sw Y   xY w)Nzbad input typer@  zM{!r} is not a text encoding; use codecs.encode\(\) to handle arbitrary codecs)	rO  r  formatrj  r  rb   assertIsNonerP  	__cause__)r   	bad_inputrX   fmtmsgfailures         r   /test_text_to_binary_denylists_binary_transformszBTransformCodecTest.test_text_to_binary_denylists_binary_transforms  s    $	1 	?Hx0 ?Kjj*++K= /$$X./!!'"3"3"="=>? ?	?
/ /	? ?s#   *BB-BBBB'	c                     d}| j                  t        |      5  dj                  d       d d d        y # 1 sw Y   y xY w)NzR^'rot_13' is not a text encoding; use codecs.encode\(\) to handle arbitrary codecszjust an example messagerG  )rj  r  rb   r   rg  s     r   -test_text_to_binary_denylists_text_transformsz@TransformCodecTest.test_text_to_binary_denylists_text_transforms  s=    C##K5 	7%,,X6	7 	7 	7s   4=c                    d}t         D ]  }| j                  |      5  t        j                  ||      }d}|j	                  |      }| j                  t        |      5  |j                  |       d d d        | j                  t        |      5  t        |      j                  |       d d d        d d d         y # 1 sw Y   MxY w# 1 sw Y    xY w# 1 sw Y   xY w)Ns6   encode first to ensure we meet any format restrictionsr@  zM{!r} is not a text encoding; use codecs.decode\(\) to handle arbitrary codecs)	rO  r  rO   rb   rb  rj  r  rQ   r  )r   r   rX   encoded_datarf  rg  s         r   /test_binary_to_text_denylists_binary_transformszBTransformCodecTest.test_binary_to_text_denylists_binary_transforms%  s     I1 		=Hx0 =%}}T8<Kjj*++K= 2 ''12++K= =l+228<== =		=2 2= == =s<   A CB<0CC)C<CCCCC	c                 <   dt        d      fD ]t  }| j                  |      5  d}| j                  t        |      5 }|j	                  d       d d d        | j                  j                  j                         d d d        v y # 1 sw Y   9xY w# 1 sw Y   xY w)Ns	   immutables   mutable)re  zR^'rot_13' is not a text encoding; use codecs.decode\(\) to handle arbitrary codecsrG  )r  r  rj  r  rQ   rc  rP  rd  )r   re  rg  rh  s       r   -test_binary_to_text_denylists_text_transformsz@TransformCodecTest.test_binary_to_text_denylists_text_transforms4  s    &	*(=> 	?I	2 ?K++K= /$$X./!!'"3"3"="=>? ?	?/ /? ?s"   BB-BBBB	zRequires zlib supportc                     d}| j                  t        j                        5 }t        j                  dd       d d d        | j                  |j                  j                  d          y # 1 sw Y   3xY w)Nz'decoding with 'zlib_codec' codec failed   hellorH  r   )r   rI  errorrO   rQ   r
   rP  	__notes__)r   rg  rh  s      r   test_custom_zlib_error_is_notedz2TransformCodecTest.test_custom_zlib_error_is_noted>  sa     8tzz* 	2gMM(L1	2g//99!<=	2 	2   A++A4c                     dd l }d}| j                  |j                        5 }t        j                  dd       d d d        | j                  |j                  j                  d          y # 1 sw Y   3xY w)Nr   z&decoding with 'hex_codec' codec failedrs  r>  )binasciir   r  rO   rQ   r
   rP  ru  )r   ry  rg  rh  s       r   test_custom_hex_error_is_notedz1TransformCodecTest.test_custom_hex_error_is_notedF  sb    6x~~. 	1'MM(K0	1g//99!<=	1 	1rw  c                 8   t         j                         D ]w  \  }}t        j                  |      j                  }|D ]N  }| j                  |      5  t        j                  |      }| j                  |j                  |       d d d        P y y # 1 sw Y   ]xY w)N)alias)transform_aliasesitemsrO   r   r  r  r
   )r   
codec_namealiasesexpected_namer|  r8   s         r   test_aliaseszTransformCodecTest.test_aliasesO  s    #4#:#:#< 	?J"MM*5::M  ?\\\. ?!==/D$$TYY>? ??	?? ?s   2BBc                     t        j                  dd      }| j                  |d       d}| j                  t        j                  |d      |       y )Ns   space tab	eol 
zquopri-codecs   space=20tab=09eol=20
s   space tab eol
)rO   rb   r
   rQ   )r   rw   	unescapeds      r   test_quopri_statelessz(TransformCodecTest.test_quopri_statelessW  sD    -- 4nE";<&	y.A9Mr   c                 P    | j                  t        t        j                  dd       y )Nr   zuu-codec)r   rM  rO   rQ   r   s    r   test_uu_invalidz"TransformCodecTest.test_uu_invalid_  s    *fmmS*Er   N)r(   r)   r*   r  rW  r   r`  ri  rl  ro  rq  r  
skipUnlessrI  rv  rz  r  r  r  r   r   r   rM  rM  
  sd    	,005$
?7=? X67> 8>>?NFr   rM  c                 ,    t         j                  |       S r	   )_TEST_CODECSget)r  s    r   _get_test_codecr  k  s    J''r   c                       e Zd Zd Zd Zd Zej                  d        Zd Z	e
f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)ExceptionNotesTestc                     d| _         t        j                  t               | j	                  t        j
                  t               t        | _        y )Nexception_notes_test)r  rO   r  r  rA  r  RuntimeErrorobj_to_raiser   s    r   r  zExceptionNotesTest.setUpq  s3    0())?; )r   c                     t         j                  | j                  d        t        j                  j                  | j                  d        y r	   )r  popr  r  _cacher   s    r   tearDownzExceptionNotesTest.tearDown  s0    $/T__d3r   c                 n    t        j                  ||| j                        }|t        | j                  <   y )N)r  )rO   r  r  r  )r   rb   rQ   
codec_infos       r   	set_codeczExceptionNotesTest.set_codec  s+    %%ff+/??<
(2T__%r   c              #   2  K   dj                  || j                        }| j                  |      5 }| d d d        | j                  |j                  j
                  d          |j                  j
                  j                          y # 1 sw Y   WxY ww)Nz{} with {!r} codec failedr   )rb  r  r   rN  rP  ru  clear)r   	operationexc_typerg  full_msgcaughts         r   assertNotedzExceptionNotesTest.assertNoted  s     /66T__.x( 	FL	h 0 0 : :1 =>""((*	 	s   .BBABBBc                     | j                   r	   )r  )r   argskwdss      r   	raise_objzExceptionNotesTest.raise_obj  s    r   c                    || _         | j                  | j                  | j                         | j                  d||      5  dj	                  | j
                         d d d        | j                  d||      5  t        j                  d| j
                         d d d        | j                  d||      5  dj                  | j
                         d d d        | j                  d||      5  t        j                  d| j
                         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# 1 sw Y   y xY w)NrX   	str_inputdecoding   bytes input)r  r  r  r  rb   r  rO   rQ   )r   r  rg  r  s       r   
check_notezExceptionNotesTest.check_note  s	   (t~~t~~6j(C8 	0t/	0j(C8 	8MM+t7	8j(C8 	3!!$//2	3j(C8 	;MM.$//:	; 	;	0 	0	8 	8	3 	3	; 	;s0   D8!D!4D-+!D9D!D*-D69Ec                 0    | j                  t        d       y )Nrg   r  r  r   s    r   test_raise_by_typez%ExceptionNotesTest.test_raise_by_type  s    b)r   c                 >    d}| j                  t        |      |       y )NThis should be notedr  rk  s     r   test_raise_by_valuez&ExceptionNotesTest.test_raise_by_value  s    $S)3/r   c                 X    d} G d dt               }| j                   ||      ||       y )Nr  c                       e Zd ZdZy)TExceptionNotesTest.test_raise_grandchild_subclass_exact_size.<locals>.MyRuntimeErrorr   N)r(   r)   r*   	__slots__r   r   r   MyRuntimeErrorr    s    Ir   r  r  r  r   rg  r  s      r   )test_raise_grandchild_subclass_exact_sizez<ExceptionNotesTest.test_raise_grandchild_subclass_exact_size  s(    $	\ 	s+S.Ar   c                 X    d} G d dt               }| j                   ||      ||       y )Nr  c                       e Zd Zy)SExceptionNotesTest.test_raise_subclass_with_weakref_support.<locals>.MyRuntimeErrorN)r(   r)   r*   r   r   r   r  r    s    r   r  r  r  s      r   (test_raise_subclass_with_weakref_supportz;ExceptionNotesTest.test_raise_subclass_with_weakref_support  s(    $	\ 	s+S.Ar   c                 F     G d dt               }| j                  |d       y )Nc                       e Zd Zd Zy)9ExceptionNotesTest.test_init_override.<locals>.CustomInitc                      y r	   r   r   s    r   r@   zBExceptionNotesTest.test_init_override.<locals>.CustomInit.__init__  s    r   N)r(   r)   r*   r@   r   r   r   
CustomInitr    s    r   r  rg   r  )r   r  s     r   test_init_overridez%ExceptionNotesTest.test_init_override  s    	 	 	
B'r   c                 F     G d dt               }| j                  |d       y )Nc                        e Zd Z fdZ xZS )7ExceptionNotesTest.test_new_override.<locals>.CustomNewc                 "    t         |   |       S r	   )r  __new__)clsr  s    r   r  z?ExceptionNotesTest.test_new_override.<locals>.CustomNew.__new__  s    ws++r   )r(   r)   r*   r  r  r  s   @r   	CustomNewr    s    , ,r   r  rg   r  )r   r  s     r   test_new_overridez$ExceptionNotesTest.test_new_override  s    	, 	, 		2&r   c                 n    d}t        |      }d|_        | j                  |dj                  |             y )Nr  rM   z^{}$)r  attrr  rb  )r   rg  r  s      r   test_instance_attributez*ExceptionNotesTest.test_instance_attribute  s/    $3V]]3/0r   c                 :    | j                  t        d      d       y )NrM   1r  r   s    r   test_non_str_argz#ExceptionNotesTest.test_non_str_arg  s    Q-r   c                 B    d}| j                  t        ddd      |       y )Nz^\('a', 'b', 'c'\)$r   r   ru   r  )r   msg_res     r   test_multiple_argsz%ExceptionNotesTest.test_multiple_args  s    'S#s3V<r   c                 ~   dj                  | j                        }| j                  t        |      5  dj	                  | j                         d d d        | j                  t        |      5  t        j                  d| j                         d d d        | j                  t        |      5  dj                  | j                         d d d        | j                  t        |      5  t        j                  d| j                         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   y xY w)Nz^unknown encoding: {}$z	str inputr  )rb  r  rj  r  rb   rO   rQ   rk  s     r   test_codec_lookup_failurez,ExceptionNotesTest.test_codec_lookup_failure  s    &--doo>##K5 	0t/	0##K5 	8MM+t7	8##K5 	3!!$//2	3##K5 	;MM.$//:	; 	;	0 	0	8 	8	3 	3	; 	;s/   D,!D+D'%!D3DD$'D03D<c                    d }d }| j                  ||       t        j                  d | j                        }| j	                  |d       t        j
                  d | j                        }| j	                  |d       d}|j                  | j                        }| j                  t        |      5  dj                  | j                         d d d        d}|j                  | j                        }| j                  t        |      5  dj                  | j                         d d d        y # 1 sw Y   axY w# 1 sw Y   y xY w)	Nc                       y)N)
not bytes!r   r   r  r  s     r   encode_to_strzPExceptionNotesTest.test_unflagged_non_text_codec_handling.<locals>.encode_to_str  s    "r   c                       y)N)   not str!r   r   r  s     r   decode_to_byteszRExceptionNotesTest.test_unflagged_non_text_codec_handling.<locals>.decode_to_bytes  s    !r   r  r  zd^{!r} encoder returned 'str' instead of 'bytes'; use codecs.encode\(\) to encode to arbitrary types$r  zd^{!r} decoder returned 'bytes' instead of 'str'; use codecs.decode\(\) to decode to arbitrary types$r  )	r  rO   rb   r  r
   rQ   rb  rj  r  )r   r  r  rw   decodedrf  rg  s          r   &test_unflagged_non_text_codec_handlingz9ExceptionNotesTest.test_unflagged_non_text_codec_handling  s	   	#	"}o6--doo6,/--doo6+.Fjj)##Is3 	0t/	0Fjj)##Is3 	3!!$//2	3 	3	0 	0
	3 	3s   0D,D8,D58EN)r(   r)   r*   r  r  r  
contextlibcontextmanagerr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r  o  st    )4
3
 + +  6B 
;*0BB('1.=
	;3r   r  win32z"code pages are specific to Windowsc                       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 ej                   ddd      d        Z ej                   ddd      d        Zy)CodePageTest  c                 4   | j                  t        t        j                  dd       | j                  t        t        j                  dd       | j                  t
        t        j                  dd       | j                  t
        t        j                  dd       y )Nr   r      ar"  )r   rM  rO   code_page_encodecode_page_decodeOSErrorr   s    r   test_invalid_code_pagez#CodePageTest.test_invalid_code_page  sj    *f&=&=r3G*f&=&=r4H'6#:#:CE'6#:#:CFr   c           	      
   | j                  t        dt        j                  dd       | j                  t        dt        j
                  dddd       | j                  t        dt        j
                  | j                  ddd       y )	Nr:       ÿs    ri   TCP_UTF8r  )rj  r   rO   r  r   r  r  r   s    r   test_code_page_namez CodePageTest.test_code_page_name  sp    17##S&	217##S+x	G19##T\\7Hd	Lr   c                    |D ]  \  }}}|t	 t        j                  |||d      }| j	                  d   ||d|d|d	|d   d
|	       | j                  |d   d       | j                  |d   t        |             }| j                  t        t         j                  |||d        y # t        $ r'}| j                  d|d|d|d|       Y d }~d }~ww xY w)NTzUnable to decode z	 from "cp" with errors=: r   z.decode("cp", )= != rM   )	rO   r  r   failr
   assertGreaterEqualassertLessEqualr   r   )r   r5   ra  rb  r?  rc  r  errs           r   check_decodezCodePageTest.check_decode  s    %* 	D!C#H$55b#vtLG   XB
H>? ''
A6$$WQZS:!!"4++RfdD	D * HII14b&#G H HHs   B++	C4CCc                    |D ]  \  }}}|^	 t        j                  |||      }| j	                  d   ||d|d|d|d   d	|	       | j	                  |d
   t        |             g| j                  t        t         j                  |||        y # t        $ r'}| j                  d|d|d|d|       Y d }~d }~ww xY w)NzUnable to encode z to "cpr  r  r   z.encode("cpr  r  r  rM   )rO   r  r   r  r
   r   r   )r   r5   ra  textr?  rc  rw   r  s           r   check_encodezCodePageTest.check_encode  s    &+ 	?"D&(#I$55b$GG   XRX?@   SY7!!"4++Rv?	? * III15r63H I IIs   B	CB??Cc                 L    | j                  dd       | j                  dd       y )Nr  )r  ri   rm  )   ｄ騾ri      )r  ri   N)r  r   r  )r  r   s   [y])u   [€]r   s   [?])r  r   s   [\xff])r  r   s)   [\N{LATIN SMALL LETTER Y WITH DIAERESIS}])r  r   s   [&#255;])u   ri   N)   []r~  r  )r  r   N)rm  ri   r  )r  ri   r   )r  ri   N)r  r   r   )r  r   u   [�])r  r   z[\xff])r  r~  r  )r  r   N)    abcri   N)r  r   z abc)r  r   u   � abc)r  r   z\x81 abcr  r  r   s    r   
test_cp932zCodePageTest.test_cp932-  s.    #  
 	  	#  
 	r   c                 L    | j                  dd       | j                  dd       y )Ni  )r  )   é€ri      )r  ri   r  )   Łri   N)r
  r   r   )r
  r      L)   r~     )r  r   N)r  )r	  ri   r  )r  ri   r  r  r   s    r   test_cp1252zCodePageTest.test_cp1252N  s.    $ 
!
 
	 	$ !
 	r   c                 P    d}| j                  |d       | j                  |d       y )N  )r  )r  ri      +AOkgrA-)r  ri      +2//f/w-)r   ri      +3IA-)r   ri      +//0-)r  )r  ri   r  )r  ri   r  )r  ri   r   )r  ri   r   )s   [+/]ri   r   )r  ri   r  r  r   r5   s     r   test_cp_utf7zCodePageTest.test_cp_utf7`  s3    " 
 	 	" 	
 		r   c                     | j                  dd       | j                  | j                  d       | j                  | j                  d       y )Nr  ))   r      騾)r  r   u   �騾))   􏿿r   r  )r  r   u   �􏿿))	   [􏿿]r   s   [􏿿])r  r   s   [􏿿?])r  r  r  r   s    r   test_multibyte_encodingz$CodePageTest.test_multibyte_encodingt  sM    #  
 	 	$,, )
 	 	$,, )
 	r   c                    t         j                  rt        j                  j	                  d       ddddddgt        dd	      d
D ]W  }t        |      r+| j                  t        j                  |d      dd|        9t         j                  sJt        d|        Y | j                  t        j                  dd      d       y )Nr   i,  i-  i.  i1  i3  i5  i  i  r  rm  r  r5   z  skipping cp=r  )u	   rn  )r   verboser  stdoutrC   rN   r9   r
   rO   r  printr  s     r   test_code_page_decode_flagsz(CodePageTest.test_code_page_decode_flags  s     ??JJT"%ue 2%)2+02 
	1B $B'  !8!8V!DjTVWYVZR[\??N2$/0
	1 	00V<2	4r   c                 T   t        j                  dddd      }| j                  |d       t        j                  dddd      }| j                  |d       t        j                  dddd      }| j                  |d	       t        j                  dd
dd      }| j                  |d       y )Nr     ri   Fr  s   )r  r   s   )u   騾騾r  rm  r  )rO   r  r
   )r   r  s     r   test_incrementalzCodePageTest.test_incremental  s    ))#w%H'*))#*98*/1 	-0))#*=x*/1 	"56))#*0(*/1 	*-r   c                 .   d}d| }t        j                  d|      5  	 t        j                  |      }| j	                  |j
                  d       t        j                  |       	 d d d        y # t        j                  |       w xY w# 1 sw Y   y xY w)Ni r5   z_winapi.GetACP)return_valuerv  )r   r  rO   r   r
   r  r  )r   	code_pager  codecs       r   test_mbcs_aliaszCodePageTest.test_mbcs_alias  s     	I;ZZ(yA 	((d+  V4!!$'	( 	(
 !!$'	( 	(s"   B1A1B1BBBl           F)rF   memusedry_runc                 l   d|dz  dz
  z  dz   }| j                  t        |      |dz          t        j                  d|dd      }| j                  |d   t        |             ~| j                  t        |d	         |d          | j                  |d	   d d
 d       | j                  |d	   dd  d       y )Ns   01234567r/  rM   s
   r   r  r~  Tr   r   
0123456701iu(   6701234567r
   r   rO   r  r   rF   rw   r  s       r   test_large_inputzCodePageTest.test_large_input  s    
 47A+.>?WtAv.))#w8I4PS\2WQZ'!*5CR,7CD):	;r   r   c                 `   d|dz  z  }| j                  t        |      |dz  dz         t        j                  d|dd      }| j                  |d   t        |             ~| j                  t        |d         |       | j                  |d   d d d	       | j                  |d   d
d  d       y )Ns
   0123456턀r/  r   r  r   TrM   r   u   0123456턀01iu   56턀0123456턀r/  r0  s       r   test_large_utf8_inputz"CodePageTest.test_large_utf8_input  s    
 *T1W5Wtqy2~6))%(DIS\2WQZ$/CR*;<CD)+BCr   N)r(   r)   r*   r  r  r  r  r  r  r  r  r  r!  r$  r)  r   
bigmemtestr1  r3  r   r   r   r  r    s     GGLD$? B$(4&.&
( WU1e<; =;" WU1e<D =Dr   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)	ASCIITestc                 F    | j                  dj                  d      d       y )Nr|  r  s   abc123rg  r   s    r   r:  zASCIITest.test_encode  s    19=r   c                     dD ]E  \  }}}| j                  |||      5  | j                  |j                  d|      |       d d d        G y # 1 sw Y   RxY w)N))	   [ÿ€]r   r  )r9  r   s   [???])r9  r   s   [&#128;&#255;&#8364;])u   [ÿ€򫳞]r   s   [\x80\xff\u20ac\U000abcde]r  r~  r}  r  r  r  r
   rb   r  s       r   test_encode_errorzASCIITest.test_encode_error  sl    .
 	+)D- 4}'/  1 +  Wm!D!)++ +	++ +   #AA	c                 |    | j                  t              5  dj                  dd       d d d        y # 1 sw Y   y xY w)Nu   ÿr  r~  r   r   rb   r   s    r   !test_encode_surrogateescape_errorz+ASCIITest.test_encode_surrogateescape_error  s7    12 	<):;	< 	< 	<   2;c                 F    | j                  dj                  d      d       y )Nrm  r  r  )r
   rQ   r   s    r   r<  zASCIITest.test_decode  s    w/7r   c                     dD ]E  \  }}}| j                  |||      5  | j                  |j                  d|      |       d d d        G y # 1 sw Y   RxY w)Nr|  r  r  r  r  s       r   r  zASCIITest.test_decode_error  sl    .
 		+)D- 4}'/  1 +  Wm!D!)++ +		++ +r=  N)r(   r)   r*   r:  r<  r@  r<  r  r   r   r   r6  r6    s    >+<
8
+r   r6  c                   $    e Zd Zd Zd Zd Zd Zy)
Latin1Testc                     dD ]B  \  }}| j                  ||      5  | j                  |j                  d      |       d d d        D y # 1 sw Y   OxY w)N))r  rm  )u   éÿs   r   rc  r  r;  r   r   rc  s      r   r:  zLatin1Test.test_encode  c    
 	BND( 4(; B  X!6AB B		BB B   "A		A	c                     dD ]E  \  }}}| j                  |||      5  | j                  |j                  d|      |       d d d        G y # 1 sw Y   RxY w)N))   [€]r   r  )rL  r   s   [??])u	   [€򫳞]r   s   [\u20ac\U000abcde])rL  r   s   [&#8364;&#56448;]r:  r  r  r;  r  s       r   test_encode_errorszLatin1Test.test_encode_errors  sl    .
 	+)D- 4}'/  1 +  X}!E!)++ +	++ +r=  c                 |    | j                  t              5  dj                  dd       d d d        y # 1 sw Y   y xY w)Nu   €r  r~  r?  r   s    r   r@  z,Latin1Test.test_encode_surrogateescape_error  s7    12 	?!!(,=>	? 	? 	?rA  c                     dD ]B  \  }}| j                  ||      5  | j                  |j                  d      |       d d d        D y # 1 sw Y   OxY w)N))rm  r  )r}  u   [ÿ]rG  r  r  rH  s      r   r<  zLatin1Test.test_decode  rI  rJ  N)r(   r)   r*   r:  rM  r@  r<  r   r   r   rE  rE    s    B+?
Br   rE  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)StreamRecoderTestc                 v   t        j                         }t        j                  d      }t        j                  ||j
                  |j                  t        j                  j                  t        j                  j                        }|j                  ddg       | j                  |j                         d       y )Nr  r     bs   ab)r|   r}   rO   r   r  rb   rQ   r  r  r  r  
writelinesr
   r   r   bior(  srs       r   test_writelinesz!StreamRecoderTest.test_writelines"  sy    jjlg&!!#u||U\\"+//">">	@\@\^
tTl#/r   c                    t        j                         }t        j                  d      }t        j                  ||j
                  |j                  t        j                  j                  t        j                  j                        }d}|j                  |j                  d             | j                  |j                         |j                  d             y )Nr  u   àñért  )r|   r}   rO   r   r  rb   rQ   r  rt  r  r  rC   r
   r   )r   rV  r(  rW  r  s        r   
test_writezStreamRecoderTest.test_write*  s    jjlh'!!#u||U\\"+//">">	@\@\^ 
X&'W)=>r   c                    t        j                  dj                  d            }t        j                  |dd      }| j                  |j                         d       |j                  d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       | j                  |j                         d       y )	Nzline1
line2
line3
rV  rt  s   line1
r   s   line2
s   line3
r   )r|   r}   rb   rO   r  r
   r   r  r   rV  rW  s      r   test_seeking_readz#StreamRecoderTest.test_seeking_read5  s    jj077DEWk:
3


3
3
3,r   c                    t        j                  dj                  d            }t        j                  |dd      }|j                  d       |j                  d       | j                  |j                         d       |j                  d       | j                  |j                         d       | j                  |j                         d	       | j                  |j                         d       y )
Nz
123456789
rV  rt  r   s   
abc
s   789
r   s   1
s   abc
)	r|   r}   rb   rO   r  r  rC   r
   r   r\  s      r   test_seeking_writez$StreamRecoderTest.test_seeking_write@  s    jj--k:;Wk: 	

1

/11r   c                    t        j                         }t        j                  d      }t        j                  ||j
                  |j                  t        j                  j                  t        j                  j                        }| j                  t        d      5  t        j                  |       d d d        | j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr  r  )r|   r}   rO   r   r  rb   rQ   r  r  r  r  rj  r  r  r  rU  s       r   r  zStreamRecoderTest.test_copyN  s    jjlg&!!#u||U\\"+//">">	@\@\^ ##I? 	IIbM	##I? 	MM"	 		 		 	s   C0C<0C9<Dc                    t        d      }t        j                  d      }t        j                  ||j                  |j
                  t        j                  j                  t        j                  j                        }t        t        j                  dz         D ]R  }| j                  |      5  | j                  t        d      5  t        j                   ||       d d d        d d d        T y # 1 sw Y   xY w# 1 sw Y   kxY w)Nr   r  rM   r  r  )r;   rO   r   r  rb   rQ   r  r  r  r  rN   r  r  r  rj  r  r  )r   rr   r(  rW  r  s        r   r  zStreamRecoderTest.test_pickleY  s    #Jg&!!!U\\5<<"+//">">	@\@\^ 622Q67 	,Eu- ,++IG ,LLU+,, ,	,, ,, ,s$   /C<C0C<0C95C<<D	N)	r(   r)   r*   rX  rZ  r]  r_  r  r  r   r   r   rQ  rQ  !  s     0	?	-2		,r   rQ  zneed _testinternalcapi modulec                       e Zd ZdZ ej
                         ZdZdZdZ	ddZ
d Zd Zd Zd	 Zd
 ZddZd Zd Zd Zd Zd Zy)LocaleCodecTestzD
    Test indirectly _Py_DecodeUTF8Ex() and _Py_EncodeUTF8Ex().
    )r  u   ulatin1:§éu   u255:ÿu   UCS:é€􏿿u   surrogates:)s
   blatin1:s   b255:u   c                 0    t        j                  |d|      S rE   )_testinternalcapiEncodeLocaleEx)r   r  r?  s      r   rb   zLocaleCodecTest.encoder  s     //a@@r   c           	         | j                   D ]^  }| j                  |      5  	 |j                  | j                  |      }| j                  ||      }| j	                  ||       d d d        ` y # t
        $ rg | j                  t              5 }| j                  ||       d d d        n# 1 sw Y   nxY wt        j                        }| j                  |d       Y zw xY w# 1 sw Y   xY w)N)r  z!encode error: pos=[0-9]+, reason=)STRINGSr  rb   ENCODINGr
   r   r   r  rO  rP  assertRegex)r   r?  r  rc  rw   rR  errmsgs          r   check_encode_stringsz$LocaleCodecTest.check_encode_stringsu  s    LL 	8D4( 
8	8#{{4==&AH #kk$7G$$Wh7
8 
8	8 * S**<8 2BD&12 2 2 .F$$V-QR	S
8 
8sF   C"A/ $C"/CB)	 	C)B2..CC"CC""C+	c                 &    | j                  d       y Nri   rl  r   s    r   test_encode_strictz"LocaleCodecTest.test_encode_strict      !!(+r   c                 &    | j                  d       y Nr~  ro  r   s    r   test_encode_surrogateescapez+LocaleCodecTest.test_encode_surrogateescape      !!"34r   c                     	 | j                  dd       | j                  d       y # t        $ r8}t        |      dk(  r| j                  | j                  d       n Y d }~Nd }~ww xY w)Nrg   r   unsupported error handlerz4 encoder doesn't support surrogatepass error handler)rb   rM  rO  r  ri  rl  r   r  s     r   test_encode_surrogatepassz)LocaleCodecTest.test_encode_surrogatepass  sm    	KKO, 	!!/2  	3x66 1 2< = > >	   & 	A'.A""A'c                     | j                  t              5 }| j                  dd       d d d        | j                  t	        j
                        d       y # 1 sw Y   /xY w)Nrg   r   rw  )r   rM  rb   r
   rO  rP  r   rR  s     r   %test_encode_unsupported_error_handlerz5LocaleCodecTest.test_encode_unsupported_error_handler  sP    z* 	0bKK./	0R\\*,GH	0 	0   AA c                 0    t        j                  |d|      S rE   )re  DecodeLocaleEx)r   rw   r?  s      r   rQ   zLocaleCodecTest.decode  s     //FCCr   c           	      P   | j                   dk(  }|rd}nd}t        | j                        }| j                  D ]j  }	 |j	                  | j                   |      }||vr|j                  |       |s8|j	                  | j                   d      }||k7  sZ|j                  |       l |D ]^  }| j                  |      5  	 |j                  | j                   |      }| j                  ||      }	| j                  |	|       d d d        ` y # t        $ r d }Y w xY w# t        $ rv | j                  t              5 }
| j                  ||       d d d        n# 1 sw Y   nxY wt        
j                        }| j                  |j!                  d      |       Y w xY w# 1 sw Y   xY w)Nrt  r~  ri   r   )rw   zdecode error: )ri  r  BYTES_STRINGSrh  rb   r   r   r  rQ   r
   r   r   r  rO  rP  rV   
startswith)r   r?  is_utf8encode_errorsstringsr  rw   encoded2rc  r  rR  rk  s               r   check_decode_stringsz$LocaleCodecTest.check_decode_strings  s   ==G+-M$Mt))*LL 	-D++dmm]C')NN7+ ;;t}}oFw&NN8,	-  	8Gg. 
8	8&~~dmmVDH #kk'6:G$$Wh7
8 
8	8 &  * Q**<8 5BGV45 5 5 .FOOF$5$56F$GP	Q
8 
8sY   1D	<F>D$F	DDF8E		FE=FFFFF%	c                 &    | j                  d       y rn  r  r   s    r   test_decode_strictz"LocaleCodecTest.test_decode_strict  rq  r   c                 &    | j                  d       y rs  r  r   s    r   test_decode_surrogateescapez+LocaleCodecTest.test_decode_surrogateescape  ru  r   c                     	 | j                  dd       | j                  d       y # t        $ r8}t        |      dk(  r| j                  | j                  d       n Y d }~Nd }~ww xY w)Nr   r   rw  z4 decoder doesn't support surrogatepass error handler)rQ   rM  rO  r  ri  r  rx  s     r   test_decode_surrogatepassz)LocaleCodecTest.test_decode_surrogatepass  sm    	KK_- 	!!/2  	3x66 1 2< = > >	rz  c                     | j                  t              5 }| j                  dd       d d d        | j                  t	        j
                        d       y # 1 sw Y   /xY w)Nr   r   rw  )r   rM  rQ   r
   rO  rP  r|  s     r   %test_decode_unsupported_error_handlerz5LocaleCodecTest.test_decode_unsupported_error_handler  sP    z* 	1bKK/0	1R\\*,GH	1 	1r~  Nrh   )r(   r)   r*   rI   r  getfilesystemencodingri  rh  r  
SURROGATESrb   rl  rp  rt  ry  r}  rQ   r  r  r  r  r  r   r   r   rc  rc  e  sm     )s((*H*G 8MJA8,5
3I
D 8D,5
3Ir   rc  c                   (    e Zd ZdZd Zd Zd Zd Zy)	Rot13Testz"Test the educational ROT-13 codec.c                 T    t        j                  dd      }| j                  |d       y )NzCaesar liked ciphersrot-13zPnrfne yvxrq pvcuref)rO   rb   r
   )r   
ciphertexts     r   r:  zRot13Test.test_encode  s$    ]]#98D
%;<r   c                 T    t        j                  dd      }| j                  |d       y )NzRg gh, Oehgr?r  zEt tu, Brute?)rO   rQ   r
   )r   	plaintexts     r   r<  zRot13Test.test_decode  s"    MM/8<	O4r   c                 ~     t        j                  d             }|j                  d      }| j                  |d       y )Nr  zABBA nag Cheryl BakerzNOON ant Purely Onxre)rO   ra   rb   r
   )r   r~  r  s      r   r  z!Rot13Test.test_incremental_encode  s7    8&..x8:^^$;<
%<=r   c                 ~     t        j                  d             }|j                  d      }| j                  |d       y )Nr  zterra Ares envy thazgreen Nerf rail gun)rO   rP   rQ   r
   )r   rz  r  s      r   r{  z!Rot13Test.test_incremental_decode  s7    8&..x8:NN#89	$9:r   N)r(   r)   r*   rI   r:  r<  r  r{  r   r   r   r  r    s    ,=5>
;r   r  c                       e Zd ZdZd Zy)Rot13UtilTestzTest the ROT-13 codec via rot13 function,
    i.e. the user has done something like:
    $ echo "Hello World" | python -m encodings.rot_13
    c                     ddl m} t        j                  d      }t        j                         } |||       |j	                  d       |j                         }| j                  |d       y )Nr   )rF  z)Gb or, be abg gb or, gung vf gur dhrfgvbaz)To be, or not to be, that is the question)encodings.rot_13rF  r|   r  r  rH   r
   )r   rF  infileoutfile
plain_texts        r   test_rot13_funczRot13UtilTest.test_rot13_func  sS    *HI++-fgQ\\^
7	9r   N)r(   r)   r*   rI   r  r   r   r   r  r    s    	9r   r  c                       e Zd ZdZd Zd Zy)CodecNameNormalizationTestzTest codec name normalizationc                 j   ddfd}t        j                  |       | j                  t         j                  |       | j	                  t        j
                  d             | j	                  t        j
                  d             | j	                  t        j
                  d             | j	                  t        j
                  d             | j	                  t        j
                  d             | j	                  t        j
                  d	             | j	                  t        j
                  d
             | j	                  t        j
                  d             | j	                  t        j
                  d             | j	                  t        j
                  d             y )N)rM   r   rn  r  )NNNNc                     | dk(  rS S )Naaa_8r   )rX   FOUND	NOT_FOUNDs    r   r  zFCodecNameNormalizationTest.test_codecs_lookup.<locals>.search_function  s    7"  r   r  zAAA-8zAAA---8zAAA   8u
   aaaé€-8zAAA.8zAAA...8zBBB-8zBBB.8u   aé€-8)rO   r  rA  r  r
   r   )r   r  r  r  s     @@r   test_codecs_lookupz-CodecNameNormalizationTest.test_codecs_lookup  s/   ,		! 	())?;g 67g 67i 89i 89.? @AFMM'$:;FMM)$<=FMM'$:;FMM'$:;FMM/$BCr   c                 D   t         j                  }| j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       y )Nrt  u   utfé€􏿿-8zutf   8zUTF 8UTF_8zutf.8zutf...8)r  normalize_encodingr
   )r   	normalizes     r   !test_encodings_normalize_encodingz<CodecNameNormalizationTest.test_encodings_normalize_encoding  s    00	7+W5#>?I9-w7 	7+W57+W59-y9r   N)r(   r)   r*   rI   r  r  r   r   r   r  r    s    'D,
:r   r  __main__)XrO   r  r  r|   r  r  r  r  r  r   testr   test.supportr   r  ImportErrorre  r2   sizeofc_wcharSIZEOF_WCHAR_Tr   r9   r  r;   rK   re   TestCaser   r  r+  r3  rU  rl  rs  r  r  r  r  r  r5  rZ   r   r   reprr1  rR  rN  rZ  r  r  r   r  r  r  r  r   r  rz  r  r  r  r  r  r"  r)  r5  rO  r}  rI  rK  rM  r  r  r  r  platformr  r6  rE  rQ  r  rc  r  r  r  r(   mainr   r   r   <module>r     s      	   
     "3
 #V]]6>>2N$(F *- -DQ=& Q=h
]>(++ ]>@+>(H-- +>\+>(H-- +>\`-(++ `-F*'(H-- *'X*'(H-- *'X[Hx** [H|CKx** CKL>(## >CX&& C S-(H-- S-l<Hx(( <H@e N 
 A
1vqyd1g
P8$$ PBVrP8$$ P(Z6H%% Z6z~)x(( ~)B+x(( +2+x(( +(+X.. +*
0h'' 
0f P 6=!  (
6<   '   
_Rx((*A _RDu
(## u
p18$$ 1&L!! &LRC
("3"3 C
JP
8X%6%6 P
fOx(( O(2(++ 2D65h 65r  y)Ei 6 $$\2',fol#- $$[1&+Wk"~F** ~FL (E3** E3R S\\W,9;XD8$$ XD;XDv$+!! $+N"B"" "BJA,)) A,H "d*,KLnIh'' nI MnIb;!! ;*9H%% 9"":!2!2 ":J zHMMO cp  I  
  FNvU  D  		sX   S S S+ -S; 
T	 SSS('S(+	S87S8;TT	TT