B
    u9aú ã            f   @   sv  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	 yd dl
Z
W n ek
rx   dZ
dZY nX e
 e
j¡Zdd„ ZG dd„ deƒZG d	d
„ d
ƒZG dd„ deƒZG dd„ deejƒZG dd„ deejƒZG dd„ deejƒZG dd„ deejƒZG dd„ deejƒZG dd„ deejƒZG dd„ deejƒZe ejdkd¡G dd„ deejƒƒZG dd „ d eejƒZG d!d"„ d"ejƒZ G d#d$„ d$ejƒZ!G d%d&„ d&eejƒZ"G d'd(„ d(ejƒZ#G d)d*„ d*ejƒZ$d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=gZ%x(e%D ] Z&e'e&ƒd>kre(e)e&ƒƒ qW G d?d@„ d@ejƒZ*G dAdB„ dBejƒZ+dCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldHdmdng-Z,G dodp„ dpejƒZ-G dqdr„ drejƒZ.G dsdt„ dtejƒZ/G dudv„ dvejƒZ0G dwdx„ dxejƒZ1dydzd{d|d}d~dd€dd‚dƒd„d…d†d‡dˆd‰dŠd‹dŒddŽddd‘d’d“d”d•d–d—d˜d™dšd›dœddž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ÈdÉdÊdËdÌdÍdÎdÏdÐdÑdÒdÓdÔdÕdÖd×dØdÙdÚdÛdÜdÝdÞgfZ2e3e dßƒrôe2 4dà¡ e3e dáƒr
e2 4dâ¡ dÒdÙgZ5G dãdä„ däejeƒZ6G dådæ„ dæejƒZ7G dçdè„ dèejƒZ8G dédê„ dêejƒZ9G dëdì„ dìejƒZ:G dídî„ dîejƒZ;G dïdð„ dðejƒZ<G dñdò„ dòejƒZ=G dódô„ dôejƒZ>dõdöd÷døgZ?dùdúgdûgdüdýdþgdÿgd gdœZ@yd dlAZAW n ek
r   dZAY n X e? 4d¡ ddge@d< yd dlBZBW n ek
rN   Y nX e? 4d¡ dge@d< G dd„ dejƒZCi ZDd	d
„ ZEe  FeE¡ yd dlGmHZH W n" ek
rÐ   dd„ ZHY nX G dd„ dejƒZIe ejdkd¡G dd„ dejƒƒZJG dd„ dejƒZKG dd„ dejƒZLG dd„ dejƒZMeNdkrre O¡  dS (  é    N)Úmock)Úsupportéÿÿÿÿc                s   ‡ ‡fdd„}|S )Nc                s   ˆ  ˆ | ƒ|t| ƒf¡ d S )N)ÚassertEqualÚlen)ÚinputÚexpect)ÚcoderÚself© ú!/usr/lib/python3.7/test_codecs.pyÚcheck   s    zcoding_checker.<locals>.checkr   )r
   r	   r   r   )r	   r
   r   Úcoding_checker   s    r   c               @   s*   e Zd ZdZdd„ Zdd„ Zd
dd„Zd	S )ÚQueuezF
    queue: write bytes at one end, read bytes from the other end
    c             C   s
   || _ d S )N)Ú_buffer)r
   Úbufferr   r   r   Ú__init__   s    zQueue.__init__c             C   s   |  j |7  _ d S )N)r   )r
   Úcharsr   r   r   Úwrite!   s    zQueue.writer   c             C   sH   |dk r"| j }| j d d… | _ |S | j d |… }| j |d … | _ |S d S )Nr   )r   )r
   ÚsizeÚsr   r   r   Úread$   s    z
Queue.readN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r      s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚMixInCheckStateHandlingc       	      C   sÖ   xÐt t|ƒd ƒD ]¼}t |¡ƒ }| |d |… ¡}| ¡ }|  |d t¡ |d s”| |d d d… df¡ |  	| |d ¡ ¡ |  
|| ¡ ¡ t |¡ƒ }| |¡ | ||d … d¡}|  
||| ¡ qW d S )Né   r   T)Úranger   ÚcodecsÚgetincrementaldecoderÚdecodeÚgetstateÚassertIsInstanceÚintÚsetstateÚ
assertTruer   )	r
   ÚencodingÚur   ÚiÚdÚpart1ÚstateÚpart2r   r   r   Úcheck_state_handling_decode0   s    
z3MixInCheckStateHandling.check_state_handling_decodec       	      C   s~   xxt t|ƒd ƒD ]d}t |¡ƒ }| |d |… ¡}| ¡ }t |¡ƒ }| |¡ | ||d … d¡}|  ||| ¡ qW d S )Nr   T)r   r   r   ÚgetincrementalencoderÚencoder"   r%   r   )	r
   r'   r(   r   r)   r*   r+   r,   r-   r   r   r   Úcheck_state_handling_encodeF   s    
z3MixInCheckStateHandling.check_state_handling_encodeN)r   r   r   r.   r1   r   r   r   r   r   /   s   r   c               @   sX   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dZ
dd„ Zdd„ ZdS )ÚReadTestc       
   	   C   sœ  t dƒ}t | j¡|ƒ}d}xFt| | j¡|ƒD ]0\}}| t|gƒ¡ || ¡ 7 }|  	||¡ q0W |  	| ¡ d¡ |  	|j
d¡ t | j¡ƒ }d}x>t| | j¡|ƒD ](\}}|| t|gƒ¡7 }|  	||¡ q¨W |  	| dd¡d¡ |  	|jd¡ | ¡  d}x@t| | j¡|ƒD ]*\}}|| t|gƒ¡7 }|  	||¡ qW |  	| dd¡d¡ |  	|jd¡ | | j¡}	|  	|d t dd„ |	D ƒ| j¡¡¡ d S )Nó    Ú Tc             S   s   g | ]}t |gƒ‘qS r   )Úbytes)Ú.0Úcr   r   r   ú
<listcomp>z   s    z*ReadTest.check_partial.<locals>.<listcomp>)r   r   Ú	getreaderr'   Úzipr0   r   r5   r   r   Ú
bytebufferr    r!   r   ÚresetÚjoinÚ
iterdecode)
r
   r   ZpartialresultsÚqÚrÚresultr7   Zpartialresultr*   Úencodedr   r   r   Úcheck_partialR   s6    zReadTest.check_partialc                sÐ  ‡fdd„‰ d‡ fdd„	}d}d}d}ˆ  ||dƒ|¡ ˆ  ||d	ƒ|¡ ˆ  ||dd
ƒ|¡ ˆ  ||d	d
ƒ|¡ d}g }g }xDt|ƒD ]8\}}	| |d d d |	 ¡ | |d d d ¡ qˆW ˆ  |d |¡dƒd |¡¡ ˆ  |d |¡d	ƒd |¡¡ xÊtdƒD ]¾}
x¶|D ]®}	d
|
d |	 d  }ˆ |ƒ}xBtd
ƒD ]6}ˆ  |jdd|
d |	 ¡ ˆ  |jddd¡ q>W ˆ |ƒ}x>td
ƒD ]2}ˆ  |jd	d|
d ¡ ˆ  |jd	dd¡ qŠW qW q
W d S )Nc                s"   t  |  ˆ j¡¡}t ˆ j¡|ƒS )N)ÚioÚBytesIOr0   r'   r   r9   )r   Ústream)r
   r   r   r9   ~   s    z)ReadTest.test_readline.<locals>.getreaderTc                s:   ˆ | ƒ}g }x"|j ||d}|s"P | |¡ qW d |¡S )N)r   Úkeependsú|)ÚreadlineÚappendr=   )r   rG   r   ÚreaderÚlinesÚline)r9   r   r   Úreadalllines‚   s    z,ReadTest.test_readline.<locals>.readalllinesu   foo
bar
bazspamâ€¨eggsu   foo
|bar
|baz|spamâ€¨|eggszfoo|bar|baz|spam|eggsFé
   )Ú
z
úu   â€¨éÈ   u   ã‚r4   rH   éP   Úazxxx
)rG   Úxxx)TN)r   Ú	enumeraterJ   r=   r   rI   )r
   rN   r   Z	sexpectedZsexpectednoendsZlineendsZvwZvwor)   Zlineendr   rK   r   )r9   r
   r   Útest_readline}   sH    






zReadTest.test_readlinec                s6  ddddg}d  |¡‰ ‡ ‡fdd„}|ƒ }ˆ | ¡ |d ¡ ˆ | ¡ d  |d	d … ¡¡ ˆ | ¡ d¡ |ƒ }ˆ | ¡ |d ¡ ˆ | d	¡|d	 d ¡ ˆ | d¡d¡ ˆ | d
¡ˆ t|d ƒd	 d … d d
… ¡ |ƒ }ˆ | ¡ |d ¡ ˆ | ¡ |d	d … ¡ ˆ | ¡ d¡ |ƒ }ˆ |jdddˆ d d… ¡ ˆ | ¡ ˆ dd … ¡ ˆ | ¡ d¡ |ƒ }ˆ |jdddˆ d d… ¡ ˆ | d	¡ˆ d ¡ ˆ | d¡d¡ ˆ | d
¡ˆ dd… ¡ |ƒ }ˆ |jdddˆ d d… ¡ ˆ | ¡ |d dd … g|d	d …  ¡ ˆ | ¡ d¡ d S )Nz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.r4   c                 s"   t  ˆ  ˆj¡¡} t ˆj¡| ƒS )N)rD   rE   r0   r'   r   r9   )rF   )Údatar
   r   r   r9   ¾   s    z8ReadTest.test_mixed_readline_and_read.<locals>.getreaderr   r   éd   é(   é   )r   r   é   éj   )r=   r   rI   r   r   Ú	readlines)r
   rL   r9   Úfr   )rX   r
   r   Útest_mixed_readline_and_read¸   s@    
.*z%ReadTest.test_mixed_readline_and_readc          =   C   sÐ   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$d%d&d'd(d)d*d d+d,d-d.d/d0d1d2d3d4d5d6g=}t  d7 |¡ | j¡¡}t | j¡|ƒ}x$t|ƒD ]\}}|  ||| ¡ q°W d S )8Nz:<%!--===================================================
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<%
z
zimport logging
z+log=logging.getLogger("Snakelets.logger")
zuser=self.SessionCtx.user
z-storageEngine=self.SessionCtx.storageEngine
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")
zshowdate=None
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() 
z.    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))
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                
r4   )	rD   rE   r=   r0   r'   r   r9   rV   r   )r
   r   rF   rK   r)   rM   r   r   r   Útest_bug1175396è   s‚    zReadTest.test_bug1175396c             C   sN  t dƒ}t | j¡|ƒ}t | j¡|ƒ}| d¡ |  |jddd¡ | d¡ |  |jddd¡ |  |jddd¡ | d	¡ |  |jddd	¡ |  |jddd¡ | d¡ |  |jd
dd¡ | d¡ |  |jd
dd¡ |  |jd
dd¡ | d	¡ |  |jd
dd	¡ |  |jd
dd¡ | d¡ |  |jd
dd¡ d S )Nr3   zfooF)rG   Úfooz
barr4   ZbarZbazTrP   zbarzfoo
)r   r   Ú	getwriterr'   r9   r   r   rI   )r
   r?   ÚwriterrK   r   r   r   Útest_readlinequeue-  s*    






zReadTest.test_readlinequeuec             C   s~   d}d}d}|| |   | j¡}t |¡}t | j¡|ƒ}|  | ¡ |¡ |  | ¡ |¡ |  | ¡ |¡ |  | ¡ d¡ d S )NzAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
z`offending line: ladfj askldfj klasdj fskla dfzaskdj fasklfj laskd fjasklfzzzzaa%whereisthis!!!
znext line.
r4   )r0   r'   rD   rE   r   r9   r   rI   )r
   Ús1Ús2Ús3r   rF   rK   r   r   r   Útest_bug1098990_aH  s    
zReadTest.test_bug1098990_ac       	      C   s®   d}d}d}d}d}|| | | |   | j¡}t |¡}t | j¡|ƒ}|  | ¡ |¡ |  | ¡ |¡ |  | ¡ |¡ |  | ¡ |¡ |  | ¡ |¡ |  | ¡ d¡ d S )Nzaaaaaaaaaaaaaaaaaaaaaaaa
zbbbbbbbbbbbbbbbbbbbbbbbb
zstillokay:bbbbxx
zbroken!!!!badbad
zagainokay.
r4   )r0   r'   rD   rE   r   r9   r   rI   )	r
   rf   rg   rh   Zs4Zs5r   rF   rK   r   r   r   Útest_bug1098990_bU  s    
zReadTest.test_bug1098990_bu   ï¿½c       	      C   s  |   tdj| j¡ |  d | jd¡d | j¡¡ |  d | jd¡d | j¡¡ |  d | jd¡d | j¡¡ |  d | jd¡d	 | j¡¡ |  d | jd
¡d | j¡¡ |  d | jd¡d	 | j¡¡ |  d | jd
¡d | j¡¡ d | j¡}xdD ]\}}| | j¡t|ƒd … }| | j¡t|ƒd … }|d | }|| | j | }|   t|j| j¡ |  | | jd¡|¡ |  | | jd¡|¡ |  | | jd¡|| ¡ |  | | jd
¡|| j	 | ¡ d 
dd„ | jD ƒ¡}|  | | jd¡|| | ¡ qøW d S )Nu   í €u   [í²€]Úbackslashreplacez[\udc80]ÚnamereplaceÚxmlcharrefreplacez
[&#56448;]Úignorez[]Úreplacez[?]u   [í €í²€]z[??]r4   ))u   ð¿¿ÚA)ú[ú])rp   u   ð¿¿u   í²€Úsurrogatepassc             s   s   | ]}d | V  qdS )z\x%02xNr   )r6   Úbr   r   r   ú	<genexpr>  s   z0ReadTest.test_lone_surrogates.<locals>.<genexpr>)ÚassertRaisesÚUnicodeEncodeErrorr0   r'   r   r   Úill_formed_sequenceÚUnicodeDecodeErrorr!   Úill_formed_sequence_replacer=   )	r
   ZbomZbeforeZafterZbefore_sequenceZafter_sequenceZtest_stringZtest_sequencerk   r   r   r   Útest_lone_surrogatesh  sJ    


zReadTest.test_lone_surrogatesc             C   sæ   d  | jd¡}x\tdt|ƒƒD ]J}t | j¡dƒ}|  | |d |… ¡d¡ |  | ||d … d¡d¡ qW d  | jd¡}xftdt|ƒƒD ]T}t | j¡dƒ}|  | |d |… ¡d¡ | jdk}|  | ||d … |¡d¡ qŠW d S )Nu   í¤rs   r   r4   Tu   í°‚Úcp65001)r0   r'   r   r   r   r    r   r!   )r
   rX   r)   ÚdecÚfinalr   r   r   Útest_incremental_surrogatepass”  s     
z'ReadTest.test_incremental_surrogatepassN)r   r   r   rC   rW   r`   ra   re   ri   rj   rz   r{   r   r   r   r   r   r2   Q   s   +;0E,r2   c               @   sd   e Zd ZdZejdkrdZndZdZdZdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	UTF32Testzutf-32Úlittles   €Ü  s     Ü€s$   ÿþ  s   p   a   m   s   p   a   m   s$     þÿ   s   p   a   m   s   p   a   mc             C   s€   t  | j¡\}}}}t ¡ }||ƒ}| d¡ | d¡ | ¡ }|  || jkpV|| j	k¡ t |¡}||ƒ}|  
| ¡ d¡ d S )NÚspamÚspamspam)r   Úlookupr'   rD   rE   r   Úgetvaluer&   ÚspamleÚspamber   r   )r
   Ú_rK   rd   r   r_   r*   r   r   r   Útest_only_one_bom´  s    


zUTF32Test.test_only_one_bomc             C   sT   t  d¡}t | j¡|ƒ}|  t|j¡ t  d¡}t | j¡|ƒ}|  t|j¡ d S )Ns   ÿÿÿÿs   ÿÿÿÿÿÿÿÿ)rD   rE   r   r9   r'   rv   ÚUnicodeErrorr   )r
   r   r_   r   r   r   Útest_badbomÃ  s    

zUTF32Test.test_badbomc             C   s@   |   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g¡ d S )Nu    Ã¿Ä€ï¿¿ð€€r4   ú u    Ã¿u    Ã¿Ä€u    Ã¿Ä€ï¿¿)rC   )r
   r   r   r   Útest_partialÌ  s4    zUTF32Test.test_partialc             C   s0   |   dt ddd¡¡ |   dt ddd¡¡ d S )N)u   ï¿½r   ó   ro   T)r4   r   rn   )r   r   Úutf_32_decode)r
   r   r   r   Útest_handlersë  s    zUTF32Test.test_handlersc             C   s   |   ttjddd¡ d S )Nó   ÿÚstrictT)rv   ry   r   r   )r
   r   r   r   Útest_errorsñ  s    
zUTF32Test.test_errorsc             C   s(   |   | jd| j¡ |   | jd| j¡ d S )Nrƒ   )r.   r'   r†   r‡   )r
   r   r   r   Útest_decoder_stateõ  s    
zUTF32Test.test_decoder_statec             C   s8   d}|   dt |¡d ¡ d}|   dt |¡d ¡ d S )Ns  ÿþ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  u   ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€r   s    þÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                )r   r   r   )r
   Z
encoded_leZ
encoded_ber   r   r   Útest_issue8941û  s    zUTF32Test.test_issue8941N)r   r   r   r'   ÚsysÚ	byteorderrx   r†   r‡   r‰   r‹   r   r   r“   r”   r•   r   r   r   r   r€   ¦  s   
	r€   c               @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚUTF32LETestz	utf-32-les   €Ü  c             C   s8   |   dddddddddddddddddddddg¡ d S )Nu    Ã¿Ä€ï¿¿ð€€r4   rŒ   u    Ã¿u    Ã¿Ä€u    Ã¿Ä€ï¿¿)rC   )r
   r   r   r   r   
  s,    zUTF32LETest.test_partialc             C   s   |   d | j¡d¡ d S )Nu   ðˆƒs    )r   r0   r'   )r
   r   r   r   Útest_simple%  s    zUTF32LETest.test_simplec             C   s   |   ttjddd¡ d S )Nr‘   r’   T)rv   ry   r   Úutf_32_le_decode)r
   r   r   r   r“   (  s    
zUTF32LETest.test_errorsc             C   s   d}|   dt |¡d ¡ d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   u   ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€r   )r   r   rš   )r
   rB   r   r   r   r•   ,  s    zUTF32LETest.test_issue8941N)	r   r   r   r'   rx   r   r™   r“   r•   r   r   r   r   r˜     s   r˜   c               @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚUTF32BETestz	utf-32-bes     Ü€c             C   s8   |   dddddddddddddddddddddg¡ d S )Nu    Ã¿Ä€ï¿¿ð€€r4   rŒ   u    Ã¿u    Ã¿Ä€u    Ã¿Ä€ï¿¿)rC   )r
   r   r   r   r   8  s,    zUTF32BETest.test_partialc             C   s   |   d | j¡d¡ d S )Nu   ðˆƒs    )r   r0   r'   )r
   r   r   r   r™   S  s    zUTF32BETest.test_simplec             C   s   |   ttjddd¡ d S )Nr‘   r’   T)rv   ry   r   Úutf_32_be_decode)r
   r   r   r   r“   V  s    
zUTF32BETest.test_errorsc             C   s   d}|   dt |¡d ¡ d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   u   ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€ð€€r   )r   r   rœ   )r
   rB   r   r   r   r•   Z  s    zUTF32BETest.test_issue8941N)	r   r   r   r'   rx   r   r™   r“   r•   r   r   r   r   r›   4  s   r›   c               @   sd   e Zd ZdZejdkrdZndZdZdZdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	UTF16Testzutf-16r   s   €Üs   Ü€s   ÿþs p a m s p a m s   þÿ s p a m s p a mc             C   s€   t  | j¡\}}}}t ¡ }||ƒ}| d¡ | d¡ | ¡ }|  || jkpV|| j	k¡ t |¡}||ƒ}|  
| ¡ d¡ d S )Nr‚   rƒ   )r   r„   r'   rD   rE   r   r…   r&   r†   r‡   r   r   )r
   rˆ   rK   rd   r   r_   r*   r   r   r   r‰   l  s    


zUTF16Test.test_only_one_bomc             C   sT   t  d¡}t | j¡|ƒ}|  t|j¡ t  d¡}t | j¡|ƒ}|  t|j¡ d S )Ns   ÿÿs   ÿÿÿÿ)rD   rE   r   r9   r'   rv   rŠ   r   )r
   r   r_   r   r   r   r‹   {  s    

zUTF16Test.test_badbomc             C   s,   |   dddddddddddddddg¡ d S )Nu    Ã¿Ä€ï¿¿ð€€r4   rŒ   u    Ã¿u    Ã¿Ä€u    Ã¿Ä€ï¿¿)rC   )r
   r   r   r   r   „  s     zUTF16Test.test_partialc             C   s0   |   dt ddd¡¡ |   dt ddd¡¡ d S )N)u   ï¿½r   rŽ   ro   T)r4   r   rn   )r   r   Úutf_16_decode)r
   r   r   r   r   ™  s    zUTF16Test.test_handlersc             C   s   |   ttjddd¡ d S )Nr‘   r’   T)rv   ry   r   rž   )r
   r   r   r   r“   Ÿ  s    
zUTF16Test.test_errorsc             C   s(   |   | jd| j¡ |   | jd| j¡ d S )Nrƒ   )r.   r'   r†   r‡   )r
   r   r   r   r”   £  s    
zUTF16Test.test_decoder_statec          	   C   s”   d}|  | j¡}|  tjtj¡ ttjdƒ}| |¡ W d Q R X t dt	f¡ t
jtjd| jd}W d Q R X | |  | ¡ |¡ W d Q R X d S )NzHello
world
Úwbr4   ÚU)r'   )r0   r'   Ú
addCleanupr   ÚunlinkÚTESTFNÚopenr   Úcheck_warningsÚDeprecationWarningr   r   r   )r
   rf   r   ÚfprK   r   r   r   Útest_bug691291©  s    zUTF16Test.test_bug691291N)r   r   r   r'   r–   r—   rx   r†   r‡   r‰   r‹   r   r   r“   r”   r¨   r   r   r   r   r   b  s   
	r   c               @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚUTF16LETestz	utf-16-les   €Üc             C   s(   |   dddddddddddddg¡ d S )Nu    Ã¿Ä€ï¿¿ð€€r4   rŒ   u    Ã¿u    Ã¿Ä€u    Ã¿Ä€ï¿¿)rC   )r
   r   r   r   r   ¼  s    zUTF16LETest.test_partialc             C   sP   dddddddg}x8|D ]0\}}|   ttj|dd	¡ |  | d
d¡|¡ qW d S )N)r‘   u   ï¿½)s   A Zu   Aï¿½)s	   A B C D Zu   ABCDï¿½)s    Øu   ï¿½)s    ØAu   ï¿½)s    ØA u   ï¿½A)s    ÜA u   ï¿½Ar’   Tzutf-16lero   )rv   ry   r   Úutf_16_le_decoder   r!   )r
   ÚtestsÚrawÚexpectedr   r   r   r“   Ï  s    

zUTF16LETest.test_errorsc             C   s,   |   d | j¡d¡ |   d | j¡d¡ d S )Nu   ðˆƒs    ØÞ)r   r0   r'   r!   )r
   r   r   r   Útest_nonbmpÞ  s    zUTF16LETest.test_nonbmpN)r   r   r   r'   rx   r   r“   r®   r   r   r   r   r©   ¸  s
   r©   c               @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚUTF16BETestz	utf-16-bes   Ü€c             C   s(   |   dddddddddddddg¡ d S )Nu    Ã¿Ä€ï¿¿ð€€r4   rŒ   u    Ã¿u    Ã¿Ä€u    Ã¿Ä€ï¿¿)rC   )r
   r   r   r   r   è  s    zUTF16BETest.test_partialc             C   sP   dddddddg}x8|D ]0\}}|   ttj|dd	¡ |  | d
d¡|¡ qW d S )N)r‘   u   ï¿½)s    Aÿu   Aï¿½)s	    A B C DZu   ABCDï¿½)s   Ø u   ï¿½)s   Ø Üu   ï¿½)s   Ø  Au   ï¿½A)s   Ü  Au   ï¿½Ar’   Tzutf-16bero   )rv   ry   r   Úutf_16_be_decoder   r!   )r
   r«   r¬   r­   r   r   r   r“   û  s    

zUTF16BETest.test_errorsc             C   s,   |   d | j¡d¡ |   d | j¡d¡ d S )Nu   ðˆƒs   Ø Þ)r   r0   r'   r!   )r
   r   r   r   r®   
  s    zUTF16BETest.test_nonbmpN)r   r   r   r'   rx   r   r“   r®   r   r   r   r   r¯   ä  s
   r¯   c                   sT   e Zd ZdZdZdZdZdd„ Zdd„ Zd	d
„ Z	‡ fdd„Z
dd„ Zdd„ Z‡  ZS )ÚUTF8Testzutf-8s   í²€u	   ï¿½ï¿½ï¿½r3   c             C   s.   |   ddddddddddddddddg¡ d S )Nu    Ã¿ß¿à €ï¿¿ð€€rŒ   u    Ã¿u    Ã¿ß¿u    Ã¿ß¿à €u    Ã¿ß¿à €ï¿¿)rC   )r
   r   r   r   r     s"    zUTF8Test.test_partialc             C   s    d}|   | j|| | j¡¡ d S )Nu    Â€Ã¿Ä€ß¿à €ï¿¿ô¿¿)r.   r'   r0   )r
   r(   r   r   r   r”   ,  s    zUTF8Test.test_decoder_statec          
   C   sJ   xDdD ]<\}}}| j |||d |  | | j|¡|¡ W d Q R X qW d S )N))s   [€ÿ]rn   z[])s   [€ÿ]ro   u   [ï¿½ï¿½])s   [€ÿ]Úsurrogateescapeu   [í²€í³¿])s   [€ÿ]rk   z
[\x80\xff])rX   Úerror_handlerr­   )ÚsubTestr   r!   r'   )r
   rX   r³   r­   r   r   r   Útest_decode_error1  s    
zUTF8Test.test_decode_errorc          	      sn   t ƒ  ¡  |  d | jd¡| jd ¡ |  t¡}d | jd¡ W d Q R X |j}|  |j	|j
|j… d¡ d S )Nu   [í²€]r²   s   [€]u   [í²€í €í¿¿]u   í €í¿¿)Úsuperr{   r   r0   r'   ÚBOMrv   rw   Ú	exceptionÚobjectÚstartÚend)r
   ÚcmÚexc)Ú	__class__r   r   r{   =  s    
zUTF8Test.test_lone_surrogatesc          	   C   sÜ   |   d | jd¡| jd ¡ |   d | jd¡| jd ¡ |   d | jd¡| jd ¡ |   d | jd¡d¡ |   d | jd¡d¡ |  t d¡¡ |  t	¡ d | jd¡ W d Q R X |  t	¡ d	 | jd¡ W d Q R X d S )
Nu	   abcí €defrs   s	   abcí €defu   ð¿¿í €s   ð¿¿í €u   [í €í²€]s   [í €í²€]s   abcí s   abcí z)
r   r0   r'   r·   r!   r&   r   Úlookup_errorrv   ry   )r
   r   r   r   Útest_surrogatepass_handlerI  s    z#UTF8Test.test_surrogatepass_handlerc          
   C   sŽ   dddddddg}x(dD ] }xd	D ]}|  || ¡ q"W qW | d
¡ xB|D ]:}| j|d$ t | j¡ƒ }|  t|j|¡ W d Q R X qLW d S )Nó   €ó   ¿ó   Àó   Áó   õó   ör‘   )ó   Âó   ßó   às   à ó   ïs   ï¿ó   ðs   ðs   ð€ó   ôs   ôs   ô¿)ó   rÃ   )s   à€s   àŸs   í €s   í¿¿s   ð€s   ðs   ô)rX   )	rJ   Úextendr´   r   r    r'   rv   ry   r!   )r
   ZcasesÚprefixÚsuffixrX   r}   r   r   r   Útest_incremental_errors\  s    



z UTF8Test.test_incremental_errors)r   r   r   r'   rx   rz   r·   r   r”   rµ   r{   rÀ   rÑ   Ú__classcell__r   r   )r¾   r   r±     s   r±   Úwin32zcp65001 is a Windows-only codecc               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚCP65001Testr|   c             C   s¬   ddddddddd	g	}x|D ]ˆ\}}}|d k	r’y|  d
|¡}W n6 tk
rt } z|  d|||f ¡ W d d }~X Y nX |  ||d||||f ¡ q|  t|j d
|¡ qW d S )N)Úabcr’   s   abc)u   Ã©â‚¬r’   s   Ã©â‚¬)u   ô¿¿r’   s   ô¿¿)u   í²€r’   N)u   í²€rn   r3   )u   í²€ro   ó   ?)u   í²€rk   s   \udc80)u   í²€rl   s   \udc80)u   í²€rs   s   í²€r|   z1Unable to encode %a to cp65001 with errors=%r: %sz!%a.encode("cp65001", %r)=%a != %a)r0   rw   Úfailr   rv   )r
   r«   ÚtextÚerrorsr­   rB   Úerrr   r   r   Útest_encodes  s*     zCP65001Test.test_encodec             C   s²   ddddddddd	d
ddg}x|D ]ˆ\}}}|d k	r˜y|  d|¡}W n6 tk
rz } z|  d|||f ¡ W d d }~X Y nX |  ||d||||f ¡ q"|  t|j d|¡ q"W d S )N)s   abcr’   rÕ   )s   Ã©â‚¬r’   u   Ã©â‚¬)s   ô¿¿r’   u   ô¿¿)s   ï¿½r’   u   ï¿½)s   [Ã©]r’   u   [Ã©])s   [ÿ]r’   N)s   [ÿ]rn   z[])s   [ÿ]ro   u   [ï¿½])s   [ÿ]r²   u   [í³¿])s   [í²€]r’   N)s   [í²€]rn   z[])s   [í²€]ro   u   [ï¿½ï¿½ï¿½]r|   z3Unable to decode %a from cp65001 with errors=%r: %sz!%a.decode("cp65001", %r)=%a != %a)r!   ry   r×   r   rv   )r
   r«   r¬   rÙ   r­   ÚdecodedrÚ   r   r   r   Útest_decode  s0     zCP65001Test.test_decodec             C   sœ   |   tdjd¡ |   tdj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 S )Nu   í €r|   s   í €u   [í²€]rk   s   [\udc80]rl   rm   s
   [&#56448;]r²   s   [€]rn   s   []ro   s   [?])rv   rw   r0   ry   r!   r   )r
   r   r   r   r{   «  s    z CP65001Test.test_lone_surrogatesc             C   sd   |   d dd¡d¡ |   d dd¡d¡ |   d dd¡d¡ |   d dd¡d¡ |  t d¡¡ d S )Nu	   abcí €defr|   rs   s	   abcí €defu   ð¿¿í €s   ð¿¿í €)r   r0   r!   r&   r   r¿   )r
   r   r   r   rÀ   »  s    z&CP65001Test.test_surrogatepass_handlerN)r   r   r   r'   rÛ   rÝ   r{   rÀ   r   r   r   r   rÔ   n  s
   rÔ   c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚUTF7Testzutf-7c             C   s  d}|   | | j¡| d¡¡ |   | d¡ | j¡|¡ d}|   | | j¡| d¡¡ |   | d¡ | j¡|¡ |   d | j¡d¡ |   d | j¡d¡ d}|   | | j¡| d¡¡ |   | d¡ | j¡|¡ d ttttdƒƒ ¡ ƒt|| d	 | ƒ ƒ¡}|   | | j¡d
¡ d S )NzGABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?Úasciiz !"#$%&*;<=>@[]^_`{|}za+bs   a+-bz 	
r4   é€   ú+sX   +AAAAAQACAAMABAAFAAYABwAIAAsADAAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwBcAH4Afw-)	r   r0   r'   r!   r=   ÚsortedÚsetr5   r   )r
   Zset_dZset_oZwsZother_asciir   r   r   Ú
test_asciiÊ  s    zUTF7Test.test_asciic          #   C   sP   |   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g ¡ d S )Nu   a+-b cÂ€dÄ€eð€€frT   za+za+-za+-bza+-b za+-b cu   a+-b cÂ€u	   a+-b cÂ€du   a+-b cÂ€dÄ€u   a+-b cÂ€dÄ€eu   a+-b cÂ€dÄ€eð€€)rC   )r
   r   r   r   r   ä  sD    zUTF7Test.test_partialc             C   s‚   ddddddddd	d
ddddddddddg}xP|D ]H\}}| j |d. |  ttj|dd¡ |  | dd¡|¡ W d Q R X q2W d S )N)s   ÿbu   ï¿½b)s   aÿbu   aï¿½b)s   aÿÿbu   aï¿½ï¿½b)s   a+IKu   aï¿½)s   a+IK-bu   aï¿½b)s   a+IK,bu   aï¿½b)s   a+IKxu   aâ‚¬ï¿½)s   a+IKx-bu   aâ‚¬ï¿½b)s   a+IKwgru   aâ‚¬ï¿½)s	   a+IKwgr-bu   aâ‚¬ï¿½b)s   a+IKwgr,u   aâ‚¬ï¿½)s
   a+IKwgr,-bu	   aâ‚¬ï¿½-b)s   a+IKwgrBu
   aâ‚¬â‚¬ï¿½)s
   a+IKwgrB-bu   aâ‚¬â‚¬ï¿½b)s
   a+/,+IKw-bu   aï¿½â‚¬b)s   a+//,+IKw-bu   aï¿½â‚¬b)s   a+///,+IKw-bu   aï¿¿ï¿½â‚¬b)s   a+////,+IKw-bu   aï¿¿ï¿½â‚¬b)s   a+IKw-bÿu   aâ‚¬bï¿½)s   a+IKwÿbu   aâ‚¬ï¿½b)r¬   r’   Tzutf-7ro   )r´   rv   ry   r   Úutf_7_decoder   r!   )r
   r«   r¬   r­   r   r   r   r“     s2    

zUTF7Test.test_errorsc             C   sÌ   |   d | j¡d¡ |   d | j¡d¡ |   d | j¡d¡ |   d | j¡d¡ |   d | j¡d¡ |   d | j¡d¡ |   d | j¡d¡ |   d | j¡d	¡ |   d	 | j¡d¡ |   d
 | j¡d¡ d S )Nu   ð’ s   +2AHcoA-u   í í² s   +2AHcoAu   â‚¬ð’ s
   +IKzYAdyg-s	   +IKzYAdygu
   â‚¬â‚¬ð’ s   +IKwgrNgB3KA-s   +IKwgrNgB3KA)r   r0   r'   r!   )r
   r   r   r   r®   (  s    zUTF7Test.test_nonbmpc             C   s`   ddddddddd	d
dddg}x<|D ]4\}}| j |d |  | dd¡|¡ W d Q R X q$W d S )N)s   a+2AE-bu   aí b)s   a+2AEÿbu   aï¿½b)s   a+2AEu   aï¿½)s   a+2AEA-bu   aï¿½b)s   a+2AH-bu   aï¿½b)s
   a+IKzYAQ-bu   aâ‚¬í b)s
   a+IKzYAQÿbu   aâ‚¬ï¿½b)s   a+IKzYAQA-bu   aâ‚¬ï¿½b)s
   a+IKzYAd-bu   aâ‚¬ï¿½b)s   a+IKwgrNgB-bu   aâ‚¬â‚¬í b)s   a+IKwgrNgBÿbu   aâ‚¬â‚¬ï¿½b)s
   a+IKwgrNgBu
   aâ‚¬â‚¬ï¿½)s   a+IKwgrNgBA-bu   aâ‚¬â‚¬ï¿½b)r¬   zutf-7ro   )r´   r   r!   )r
   r«   r¬   r­   r   r   r   r{   7  s     zUTF7Test.test_lone_surrogatesN)	r   r   r   r'   rä   r   r“   r®   r{   r   r   r   r   rÞ   Ç  s   'rÞ   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚUTF16ExTestc             C   s   |   ttjdddd¡ d S )Nr‘   r’   r   T)rv   ry   r   Úutf_16_ex_decode)r
   r   r   r   r“   N  s    zUTF16ExTest.test_errorsc             C   s   |   ttj¡ d S )N)rv   Ú	TypeErrorr   rç   )r
   r   r   r   Útest_bad_argsQ  s    zUTF16ExTest.test_bad_argsN)r   r   r   r“   ré   r   r   r   r   ræ   L  s   ræ   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚReadBufferTestc             C   s&   dd l }|  t |  dd¡¡d¡ d S )Nr   rt   s   spam)s   spamé   )Úarrayr   r   Úreadbuffer_encode)r
   rì   r   r   r   Ú
test_arrayV  s    zReadBufferTest.test_arrayc             C   s   |   t d¡d¡ d S )Nr4   )r3   r   )r   r   rí   )r
   r   r   r   Ú
test_empty]  s    zReadBufferTest.test_emptyc             C   s"   |   ttj¡ |   ttjd¡ d S )Né*   )rv   rè   r   rí   )r
   r   r   r   ré   `  s    zReadBufferTest.test_bad_argsN)r   r   r   rî   rï   ré   r   r   r   r   rê   T  s   rê   c               @   s>   e Zd ZdZejZdd„ Zdd„ Zdd„ Z	dd	„ Z
d
d„ ZdS )ÚUTF8SigTestz	utf-8-sigc             C   s:   |   ddddddddddddddddddddddg¡ d S )	Nu   ï»¿ Ã¿ß¿à €ï¿¿ð€€r4   u   ï»¿u   ï»¿ u   ï»¿ Ã¿u   ï»¿ Ã¿ß¿u   ï»¿ Ã¿ß¿à €u   ï»¿ Ã¿ß¿à €ï¿¿)rC   )r
   r   r   r   r   h  s.    zUTF8SigTest.test_partialc             C   s   |   tddƒd¡ d S )Ns   ï»¿z	utf-8-sigr4   )r   Ústr)r
   r   r   r   Útest_bug1601501„  s    zUTF8SigTest.test_bug1601501c             C   s,   t  d¡ƒ }d}|  | | d¡¡|¡ d S )Nz	utf-8-sigr‚   )r   r    r   r!   r0   )r
   r*   r   r   r   r   Útest_bomˆ  s    zUTF8SigTest.test_bomc       	      C   s¤   d}t jd }t  d¡}x†d gttddƒƒ dddd	d
g D ]`}|t |¡ƒ}t ¡ }x0|d k	rl| |¡}n| ¡ }|szP | 	|¡ qXW | 
¡ }|  ||¡ q<W d S )Nu   ABCÂ¡âˆ€XYZs   ABCÂ¡âˆ€XYZz	utf-8-sigr   é   é@   rà   é   i   i   )r   ÚBOM_UTF8r9   Úlistr   rD   rE   ÚStringIOr   r   r…   r   )	r
   Ú	unistringÚ
bytestringrK   ÚsizehintÚistreamÚostreamrX   Úgotr   r   r   Útest_stream_bom  s     

zUTF8SigTest.test_stream_bomc       	      C   sž   d}d}t  d¡}x†d gttddƒƒ dddd	d
g D ]`}|t |¡ƒ}t ¡ }x0|d k	rf| |¡}n| ¡ }|stP | |¡ qRW | 	¡ }|  
||¡ q6W d S )Nu   ABCÂ¡âˆ€XYZs   ABCÂ¡âˆ€XYZz	utf-8-sigr   rõ   rö   rà   r÷   i   i   )r   r9   rù   r   rD   rE   rú   r   r   r…   r   )	r
   rû   rü   rK   rý   rþ   rÿ   rX   r   r   r   r   Útest_stream_bare£  s     
zUTF8SigTest.test_stream_bareN)r   r   r   r'   r   rø   r·   r   ró   rô   r  r  r   r   r   r   rñ   d  s   rñ   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚEscapeDecodeTestc             C   s*   |   t d¡d¡ |   t tƒ ¡d¡ d S )Nr3   )r3   r   )r   r   Úescape_decodeÚ	bytearray)r
   r   r   r   rï   º  s    zEscapeDecodeTest.test_emptyc             C   sJ   t j}x>tdƒD ]2}t|gƒ}|dkr|  ||d ƒ|d df¡ qW d S )Nr÷   ó   \ó   0é   )r   r  r   r5   r   )r
   r!   rt   r   r   r   Útest_raw¾  s
    
zEscapeDecodeTest.test_rawc          
   C   s¼  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!ƒ x~td%d&ƒD ]p}t|gƒ}|d'kr$|  t¡ |d(| d(| ƒ W d Q R X |  t¡  |d(| ¡  d(| ¡  ƒ W d Q R X qäW |  t¡ |d)d)ƒ W d Q R X |  t¡ |d*d*ƒ W d Q R X |  t¡ |d+d+ƒ W d Q R X d S ),Ns   [\
]s   []s   [\"]s   ["]s   [\']s   [']s   [\\]s   [\]s   [\a]s   []s   [\b]s   []s   [\t]s   [	]s   [\n]s   [
]s   [\v]s   []s   [\f]s   []s   [\r]s   []s   [\7]s   [\78]s   [8]s   [\41]s   [!]s   [\418]s   [!8]s   [\101]s   [A]s   [\1010]s   [A0]s   [\501]s   [\x41]s   [\x410]éa   é{   s   abfnrtvxr  s   \8s   \9s   \ú)r   r  r   r   r5   ÚassertWarnsr¦   Úupper)r
   r!   r   r)   rt   r   r   r   Útest_escapeÅ  sF    






















(zEscapeDecodeTest.test_escapec             C   sŠ   t j}|  t|d¡ |  t|d¡ |  |ddƒd¡ |  |ddƒd¡ |  t|d¡ |  t|d	¡ |  |d
dƒd¡ |  |d
dƒd¡ d S )Ns   \xs   [\x]s   [\x]\xrn   )s   []r\   ro   )s   [?]?r\   s   \x0s   [\x0]s   [\x0]\x0)s   []é   )s   [?]?r  )r   r  rv   Ú
ValueErrorr   )r
   r!   r   r   r   r“   ê  s    zEscapeDecodeTest.test_errorsN)r   r   r   rï   r	  r  r“   r   r   r   r   r  ¹  s   %r  c               @   s   e Zd Zdd„ ZdS )ÚRecodingTestc             C   s8   t  ¡ }t |dd¡}| d¡ | ¡  |  |j¡ d S )NÚunicode_internalzutf-8rT   )rD   rE   r   ÚEncodedFiler   Úcloser&   Úclosed)r
   r_   Úf2r   r   r   Útest_recoding÷  s
    
zRecodingTest.test_recodingN)r   r   r   r  r   r   r   r   r  ö  s   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               @   s   e Zd Zdd„ Zdd„ ZdS )ÚPunycodeTestc             C   s<   x6t D ].\}}|  t| d¡dƒ ¡ t|dƒ ¡ ¡ qW d S )NÚpunycoderß   )Úpunycode_testcasesr   rò   r0   Úlower)r
   ÚuniÚpunyr   r   r   rÛ   o  s    zPunycodeTest.test_encodec             C   sJ   xDt D ]<\}}|  || d¡¡ | d¡ d¡}|  || d¡¡ qW d S )Nr  rß   )r  r   r!   r0   )r
   r  r  r   r   r   rÝ   {  s    zPunycodeTest.test_decodeN)r   r   r   rÛ   rÝ   r   r   r   r   r  n  s   r  c               @   s\   e Zd Ze edkd¡dd„ ƒZe edkd¡dd„ ƒZe edkd¡dd„ ƒZd	d
„ Z	dS )ÚUnicodeInternalTestrë   zspecific to 32-bit wchar_tc          
   C   sH  dddg}dddddg}xL|D ]D\}}t jd	kr<tt|ƒƒ}t ¡  |  || d
¡¡ W d Q R X qW xL|D ]D}t jd	kr†tt|ƒƒ}t dtf¡ |  	t
|jd
¡ W d Q R X qlW t jd	krÈd}d}nd}d}t ¡  |  	t
|jd
¡ W d Q R X t ¡  |  | d
d¡d¡ W d Q R X t ¡  |  | d
d¡|¡ W d Q R X d S )N)s    ÿÿu   ô¿¿)s     u   Ä)r3   r4   s   ÿÿÿs   €   s      ó    s        r   r  z*unicode_internal codec has been deprecateds      z\x00\x00\x11\x00s      z\x00\x11\x00\x00ro   u   ï¿½rk   )r–   r—   r5   Úreversedr   r¥   r   r!   r¦   rv   ry   )r
   ÚokZnot_okZinternalr  ZinvalidZinvalid_backslashreplacer   r   r   Útest_bug1251300ƒ  sD    

 







z#UnicodeInternalTest.test_bug1251300c          
   C   s   y(t  dtf¡ d d¡ W d Q R X W nZ tk
r‚ } z<|  d|j¡ |  d|j¡ |  d|j¡ |  d|j	¡ W d d }~X Y n
X |  
¡  d S )Nz*unicode_internal codec has been deprecateds         r  rë   r  )r   r¥   r¦   r!   ry   r   r'   r¹   rº   r»   r×   )r
   Zexr   r   r   Útest_decode_error_attributes¯  s    
 z0UnicodeInternalTest.test_decode_error_attributesc          	   C   sx   t  dt j¡ t  d¡}t dtf¡< d d¡ ¡ }|t	d|d d… |dd … f dƒdƒ}W d Q R X |  
d|¡ d S )	Nr  r  z*unicode_internal codec has been deprecatedÚabz%s""""%srë   rß   )r$  é   )r   Úregister_errorÚignore_errorsÚ
getdecoderr   r¥   r¦   r0   r!   r5   r   )r
   Údecoderr$  Zignoredr   r   r   Útest_decode_callback½  s    

z(UnicodeInternalTest.test_decode_callbackc          	   C   sf   t  dtf¡N t d¡}|  |dƒd d¡ |  |dƒd d¡ |  t d¡d d¡ W d Q R X d S )	Nz*unicode_internal codec has been deprecatedr  rT   r   u   Ã©Å‚r  s   \x00rë   )r   r¥   r¦   r   Ú
getencoderr   Úescape_encode)r
   Úencoderr   r   r   Útest_encode_lengthÉ  s    

z&UnicodeInternalTest.test_encode_lengthN)
r   r   r   ÚunittestÚ
skipUnlessÚSIZEOF_WCHAR_Tr"  r#  r*  r.  r   r   r   r   r  ‚  s   ,r  )s%   fooÂ­Íá †á ‹barâ€‹â bazï¸€ï¸ˆï¸ï»¿s	   foobarbaz)s   CAFEs   cafe)s   ÃŸs   ss)s   Ä°s   iÌ‡)s   ÅƒÍºs   Å„ Î¹)NN)s   jÌŒÂ Âªs   Ç° a)s   á¾·s   á¾¶Î¹)s   Ç°s   Ç°)s   Îs   Î)s   Î°s   Î°)s   áº–s   áº–)s   á½–s   á½–)ó    r2  )s   Â r2  )s   áš€N)s   â€€r2  )s   â€‹r3   )s   ã€€r2  )s   s   )s   Â…N)s   á ŽN)s   ï»¿r3   )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)s   Ø§1Ø¨s   Ø§1Ø¨)s   XÂ­ÃŸÄ°â„¡jÌŒÂ ÂªÎ°â€€s   xssiÌ‡telÇ° aÎ° )s   XÃŸãŒ–Ä°â„¡â’ŸãŒ€s*   xssã‚­ãƒ­ãƒ¡ãƒ¼ãƒˆãƒ«iÌ‡tel(d)ã‚¢ãƒ‘ãƒ¼ãƒˆc               @   s   e Zd Zdd„ ZdS )ÚNameprepTestc             C   s¶   ddl m} x¤ttƒD ]˜\}\}}|d kr,qt|ddƒ}|d krP|  t||¡ qt|ddƒ}y|  ||ƒ|¡ W q tk
r¬ } zt	 
d|d t|ƒf ¡‚W d d }~X Y qX qW d S )Nr   )Únameprepzutf-8rs   zTest 3.%d: %sr   )Zencodings.idnar4  rV   Únameprep_testsrò   rv   rŠ   r   Ú	Exceptionr   Z
TestFailed)r
   r4  ÚposZorigZpreppedÚer   r   r   Útest_nameprepn  s    zNameprepTest.test_nameprepN)r   r   r   r9  r   r   r   r   r3  m  s   r3  c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚIDNACodecTestc             C   sL   |   tddƒd¡ |   tddƒd¡ |   tddƒd¡ |   tddƒd	¡ d S )
Ns
   python.orgÚidnaz
python.orgs   python.org.zpython.org.s   xn--pythn-mua.orgu   pythÃ¶n.orgs   xn--pythn-mua.org.u   pythÃ¶n.org.)r   rò   )r
   r   r   r   Útest_builtin_decode‚  s    z!IDNACodecTest.test_builtin_decodec             C   sL   |   d d¡d¡ |   d d¡d¡ |   d d¡d¡ |   d d¡d	¡ d S )
Nz
python.orgr;  s
   python.orgzpython.org.s   python.org.u   pythÃ¶n.orgs   xn--pythn-mua.orgu   pythÃ¶n.org.s   xn--pythn-mua.org.)r   r0   )r
   r   r   r   Útest_builtin_encodeˆ  s    z!IDNACodecTest.test_builtin_encodec             C   s2   t  d¡t d¡ƒ}| d¡ |  | ¡ d¡ d S )Nr;  s   abcé   r4   )r   r9   rD   rE   r   r   )r
   r@   r   r   r   Útest_streamŽ  s    
zIDNACodecTest.test_streamc             C   s<  |   d t dd„ dD ƒd¡¡d¡ |   d t dd„ dD ƒd¡¡d	¡ |   d t d
d„ dD ƒd¡¡d¡ |   d t dd„ dD ƒd¡¡d¡ t d¡ƒ }|   | d¡d¡ |   | d¡d¡ |   | d¡d¡ |   | dd¡d¡ | ¡  |   | d¡d¡ |   | d¡d¡ |   | d¡d¡ |   | dd¡d¡ d S )Nr4   c             s   s   | ]}t |gƒV  qd S )N)r5   )r6   r7   r   r   r   ru   •  s    z8IDNACodecTest.test_incremental_decode.<locals>.<genexpr>s
   python.orgr;  z
python.orgc             s   s   | ]}t |gƒV  qd S )N)r5   )r6   r7   r   r   r   ru   ™  s    s   python.org.zpython.org.c             s   s   | ]}t |gƒV  qd S )N)r5   )r6   r7   r   r   r   ru     s    s   xn--pythn-mua.org.u   pythÃ¶n.org.c             s   s   | ]}t |gƒV  qd S )N)r5   )r6   r7   r   r   r   ru   ¡  s    s   xn--xams	   ple-9ta.ou	   Ã¤xample.s   rgr3   TZorgs   rg.zorg.)r   r=   r   r>   r    r!   r<   )r
   r)  r   r   r   Útest_incremental_decode“  s,    z%IDNACodecTest.test_incremental_decodec             C   sð   |   d t dd¡¡d¡ |   d t dd¡¡d¡ |   d t dd¡¡d¡ |   d t dd¡¡d¡ t d¡ƒ }|   | d	¡d¡ |   | d
¡d¡ |   | dd¡d¡ | ¡  |   | d	¡d¡ |   | d¡d¡ |   | dd¡d¡ d S )Nr3   z
python.orgr;  s
   python.orgzpython.org.s   python.org.u   pythÃ¶n.org.s   xn--pythn-mua.org.u   Ã¤xz	ample.orgs   xn--xample-9ta.r4   Ts   orgz
ample.org.s   xn--xample-9ta.org.)r   r=   r   Ú
iterencoder/   r0   r<   )r
   r-  r   r   r   Útest_incremental_encode±  s(    z%IDNACodecTest.test_incremental_encodec             C   sN   d  dd¡ d dd¡ x0dD ](}|  tdj d|¡ |  tdjd|¡ qW dS )z$Only supports "strict" error handlerz
python.orgr;  r’   s
   python.org)rn   ro   rk   r²   N)r0   r!   rv   r6  )r
   rÙ   r   r   r   r“   Í  s    
zIDNACodecTest.test_errorsN)	r   r   r   r<  r=  r?  r@  rB  r“   r   r   r   r   r:    s   r:  c               @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCodecsModuleTestc             C   sx   |   t dd¡d¡ |  ttj¡ |   t d¡d¡ |  ttjdd¡ |   tjdddd¡ |   tjd	dd
dd¡ d S )Ns   äöüzlatin-1u   Ã¤Ã¶Ã¼s   abcrÕ   r‘   rß   )Úobjr'   s   [ÿ]rn   )rÙ   z[])r   r   r!   rv   rè   ry   )r
   r   r   r   rÝ   Ú  s    zCodecsModuleTest.test_decodec             C   sŠ   |   t dd¡d¡ |  ttj¡ |  ttjdd¡ |   t d¡d¡ |  ttjdd	¡ |   tjddd
d¡ |   tjdd	ddd¡ d S )Nu   Ã¤Ã¶Ã¼zlatin-1s   äöürb   Ú__spam__rÕ   s   abcu   Ã¿ffrß   )rD  r'   u   [Ã¿]rn   )rÙ   s   [])r   r   r0   rv   rè   ÚLookupErrorrw   )r
   r   r   r   rÛ   ç  s    zCodecsModuleTest.test_encodec             C   s"   |   ttj¡ |   ttjd¡ d S )Nrð   )rv   rè   r   Úregister)r
   r   r   r   Útest_registerõ  s    zCodecsModuleTest.test_registerc             C   s2   |   ttj¡ |   ttjd¡ |   ttjd¡ d S )NrE  ú )rv   rè   r   r„   rF  )r
   r   r   r   Útest_lookupù  s    zCodecsModuleTest.test_lookupc             C   s"   |   ttj¡ |   ttjd¡ d S )NrE  )rv   rè   r   r+  rF  )r
   r   r   r   Útest_getencoderþ  s    z CodecsModuleTest.test_getencoderc             C   s"   |   ttj¡ |   ttjd¡ d S )NrE  )rv   rè   r   r(  rF  )r
   r   r   r   Útest_getdecoder  s    z CodecsModuleTest.test_getdecoderc             C   s"   |   ttj¡ |   ttjd¡ d S )NrE  )rv   rè   r   r9   rF  )r
   r   r   r   Útest_getreader  s    zCodecsModuleTest.test_getreaderc             C   s"   |   ttj¡ |   ttjd¡ d S )NrE  )rv   rè   r   rc   rF  )r
   r   r   r   Útest_getwriter
  s    zCodecsModuleTest.test_getwriterc             C   sn   t  t j¡}|  t jt j|¡ yt  t jd¡ W n  t jk
rP   |  d¡ Y nX t d¡}|  |j	d¡ d S )NÚtr_TRztest needs Turkish localeÚASCIIrß   )
ÚlocaleÚ	setlocaleÚLC_CTYPEr¡   ÚErrorZskipTestr   r„   r   Úname)r
   Z	oldlocaler7   r   r   r   Útest_lookup_issue1813  s    
z&CodecsModuleTest.test_lookup_issue1813c             C   s0   d}|   |tj¡ xtjD ]}tt|ƒ qW d S )N),r0   r!   rG  Ú	CodecInfoÚCodecÚIncrementalEncoderÚIncrementalDecoderÚStreamReaderÚStreamWriterr„   r+  r(  r/   r    r9   rc   r&  r¿   Ústrict_errorsÚreplace_errorsr'  Úxmlcharrefreplace_errorsÚbackslashreplace_errorsÚnamereplace_errorsr¤   r  rA  r>   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)ZassertCountEqualr   Ú__all__Úgetattr)r
   Zapir   r   r   Útest_all  s    zCodecsModuleTest.test_allc             C   sb   |   tjtj¡ xLdD ]D}|  |¡0 t tj|d¡}|  |tj¡ W d Q R X W d Q R X qW d S )N)Úwr@   zr+zw+rT   za+rß   )	r¡   r   r¢   r£   r´   r   r¤   r#   rn  )r
   ÚmodeÚfiler   r   r   Ú	test_open2  s
    
zCodecsModuleTest.test_openc             C   s‚   |   ttjdd¡ |   ttjdd¡ |   ttjdd¡ |   ttjdd¡ x4dD ],}|   ttjdd|¡ |   ttjdd|¡ qNW d S )NrÕ   Z	undefineds   abcr4   r3   )r’   rn   ro   rk   )rv   rŠ   r   r0   r!   )r
   rÙ   r   r   r   Útest_undefined9  s    
zCodecsModuleTest.test_undefinedN)r   r   r   rÝ   rÛ   rH  rJ  rK  rL  rM  rN  rV  rr  rv  rw  r   r   r   r   rC  Ø  s   rC  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚStreamReaderTestc             C   s   t  d¡| _t d¡| _d S )Nzutf-8s   í•œ
ê¸€)r   r9   rK   rD   rE   rF   )r
   r   r   r   ÚsetUpG  s    zStreamReaderTest.setUpc             C   s$   |   | j¡}|  | ¡ ddg¡ d S )Nu   í•œ
u   ê¸€)rK   rF   r   r^   )r
   r_   r   r   r   Útest_readlinesK  s    zStreamReaderTest.test_readlinesN)r   r   r   ry  rz  r   r   r   r   rx  E  s   rx  c               @   s   e Zd Zdd„ ZdS )ÚEncodedFileTestc             C   s\   t  d¡}t |dd¡}|  | ¡ d¡ t  ¡ }t |dd¡}| d¡ |  | ¡ d¡ d S )Ns   í•œ
ê¸€z	utf-16-lezutf-8s   \Õ
  ®zlatin-1s   Ã¼ó   ü)rD   rE   r   r  r   r   r   r…   )r
   r_   Úefr   r   r   Ú
test_basicR  s    

zEncodedFileTest.test_basicN)r   r   r   r~  r   r   r   r   r{  P  s   r{  rß   Úbig5Ú	big5hkscsÚcharmapÚcp037Zcp1006Úcp1026Úcp1125Úcp1140Úcp1250Úcp1251Úcp1252Úcp1253Úcp1254Úcp1255Úcp1256Úcp1257Úcp1258Úcp424Úcp437Úcp500Zcp720Zcp737Úcp775Úcp850Úcp852Úcp855Zcp856Úcp857Úcp858Úcp860Úcp861Úcp862Úcp863Úcp864Úcp865Úcp866Úcp869Zcp874Z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_turkishZpalmosÚptcp154r  Zraw_unicode_escapeÚ	shift_jisÚshift_jis_2004Úshift_jisx0213Útis_620Zunicode_escaper  Úutf_16Ú	utf_16_beÚ	utf_16_leÚutf_7Úutf_8Zmbcs_encodeÚmbcsZ
oem_encodeZoemc               @   sJ   e Zd Zdd„ Zejdd„ ƒZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ ZdS )ÚBasicUnicodeTestc          
      s
  d}xþt D ]ô}t |¡j}| d¡r2|d7 }n|dkr>d}|  | dd¡| dd¡¡ t ¡ R t 	|¡|ƒ\}}|  |t
|ƒd| ¡ t |¡|ƒ\}}|  ||d| ¡ W d Q R X |tkrvtdƒ}t |¡|ƒ}d}	x>|D ]6}
| |
¡ | ¡ }|  t|ƒtkt|ƒ¡ |	|7 }	qäW tdƒ}t |¡|ƒ}d}x*|	D ]"}
| t|
gƒ¡ || ¡ 7 }q>W |  ||d| ¡ |tkryt |¡ƒ ‰W n tk
r¤   Y nÜX d}	x|D ]}
|	ˆ |
¡7 }	q°W |	ˆ dd	¡7 }	t |¡ƒ ‰ d}x"|	D ]}
|ˆ  t|
gƒ¡7 }qîW |ˆ  dd	¡7 }|  ||d| ¡ d t t ||¡|¡¡}|  ||d| ¡ d t t d|¡|¡¡}|  |d¡ |d
kryt |¡dƒ‰W n tk
r°   Y qX d ‡fdd„|D ƒ¡}	t |¡dƒ‰ d ‡ fdd„|	D ƒ¡}|  ||d| ¡ qW d S )NÚabc123Z_codecrÇ  rˆ   ú-zencoding=%rr3   r4   T)r;  rØ  rn   c             3   s   | ]}ˆ   |¡V  qd S )N)r0   )r6   r7   )r-  r   r   ru     s    z/BasicUnicodeTest.test_basics.<locals>.<genexpr>c             3   s   | ]}ˆ   t|gƒ¡V  qd S )N)r!   r5   )r6   r7   )r)  r   r   ru      s   )Úall_unicode_encodingsr   r„   rU  Úendswithr   ro   r   r¥   r+  r   r(  Úbroken_unicode_with_statefulr   rc   r   r   r&   Útyper5   r9   r/   rF  r0   r    r!   r=   r>   rA  )r
   r   r'   rU  rt   r   r   r?   rd   Úencodedresultr7   ÚchunkrK   ÚdecodedresultrA   r   )r)  r-  r   Útest_basicsÖ  s|    










zBasicUnicodeTest.test_basicsc          	      sL  ddl m}m} d}x0tD ]&}|tkry||ƒ‰W n tk
rJ   Y n‚X d}x|D ]}|ˆ |¡7 }qVW |ˆ dd¡7 }||ƒ‰ d}x |D ]}|ˆ  t|gƒ¡7 }qŽW |ˆ  dd¡7 }|  	||d| ¡ |dkry||d	ƒ‰W n tk
rö   Y qX d 
‡fd
d„|D ƒ¡}||d	ƒ‰ d 
‡ fdd„|D ƒ¡}|  	||d| ¡ qW d S )Nr   )Úcodec_incrementalencoderÚcodec_incrementaldecoderrÚ  r3   r4   Tzencoding=%r)r;  rØ  rn   c             3   s   | ]}ˆ   |¡V  qd S )N)r0   )r6   r7   )Úcencoderr   r   ru   E  s    z4BasicUnicodeTest.test_basics_capi.<locals>.<genexpr>c             3   s   | ]}ˆ   t|gƒ¡V  qd S )N)r!   r5   )r6   r7   )Úcdecoderr   r   ru   G  s   )Z	_testcapirä  rå  rÜ  rÞ  rF  r0   r!   r5   r   r=   )r
   rä  rå  r   r'   rà  r7   râ  r   )rç  ræ  r   Útest_basics_capi%  s<    




z!BasicUnicodeTest.test_basics_capic             C   sz   dd }xlt D ]d}|dkrq|tkr&qt |¡t | |¡¡ƒ}x0tdƒD ]$}| dd¡ | 	¡ }|  
||¡ qJW qW d S )Nz%s
%s
)AX  abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123AX  def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456r;  r[   r   )rÜ  rÞ  r   r9   rD   rE   r0   r   Úseekr   r   )r
   r   r'   rK   ÚtrX   r   r   r   Ú	test_seekL  s    
zBasicUnicodeTest.test_seekc             C   s>   x8t D ]0}t |¡}|  t|¡ |dkr|  t|d¡ qW d S )N)r;  r  rð   )rÜ  r   r(  rv   rè   )r
   r'   r)  r   r   r   Útest_bad_decode_args[  s
    

z%BasicUnicodeTest.test_bad_decode_argsc          
   C   s<   x6t D ].}t |¡}t ¡  |  t|¡ W d Q R X qW d S )N)rÜ  r   r+  r   r¥   rv   rè   )r
   r'   r-  r   r   r   Útest_bad_encode_argsb  s    


z%BasicUnicodeTest.test_bad_encode_argsc             C   s&   ddl m} t|jƒ}|  ||¡ d S )Nr   )r…  )Ú	encodingsr…  rß  Úencoding_tabler   )r
   r…  Z
table_typer   r   r   Ú"test_encoding_map_type_initializedi  s    
z3BasicUnicodeTest.test_encoding_map_type_initializedc             C   sF   d}x<t D ]4}|tkr
|  ||| |¡¡ |  ||| |¡¡ q
W d S )NrÚ  )rÜ  rÞ  r.   r0   r1   )r
   r(   r'   r   r   r   r”   o  s
    
z#BasicUnicodeTest.test_decoder_stateN)r   r   r   rã  r   Zcpython_onlyrè  rë  rì  rí  rð  r”   r   r   r   r   rÙ  Õ  s   O'rÙ  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCharmapTestc             C   s  |   t ddd¡d¡ |   t ddd¡d¡ |  ttjddd¡ |  ttjddd¡ |   t dd	d¡d
¡ |   t dd	d¡d
¡ |   t ddd¡d¡ |   t ddd¡d¡ |   t ddd¡d¡ |   t ddd¡d¡ ttdƒƒ}|   t |dd¡dt|ƒf¡ d S )Ns    r’   rÕ   )rÕ   r>  u   ô¿¿bc)u   ô¿¿bcr>  r$  u   abï¿¾ro   )u   abï¿½r>  rk   )zab\x02r>  rn   )r$  r>  r÷   r4   )r   r   Úcharmap_decoderv   ry   r5   r   r   )r
   Úallbytesr   r   r   Útest_decode_with_string_mapy  s@    z'CharmapTest.test_decode_with_string_mapc          
   C   s   |   t ddddddœ¡d¡ |   t dddd	d
dœ¡d¡ |   t ddddddœ¡d¡ |   t ddddddœ¡d¡ |  ttjdddddœ¡ |  ttjddddd dœ¡ |  ttjddddddœ¡ |   t dddddœ¡d¡ |   t ddddd dœ¡d¡ |   t ddddddœ¡d¡ |   t dddddœ¡d¡ |   t ddddd dœ¡d¡ |   t ddddddœ¡d¡ |   t dddddœ¡d¡ |   t ddddd dœ¡d¡ |   t ddddddœ¡d¡ ttdƒƒ}|   t |di ¡dt|ƒf¡ d S )Ns    r’   rT   rt   r7   )r   r   r  )rÕ   r>  ZAaZBbZCc)ZAaBbCcr>  u   ô¿¿)u   ô¿¿bcr>  r4   )r$  r>  )r   r   u   ï¿¾ro   )u   abï¿½r>  rk   )zab\x02r>  rn   r÷   )r   r   rò  rv   ry   r5   r   r   )r
   ró  r   r   r   Útest_decode_with_int2str_map°  s‚    


z(CharmapTest.test_decode_with_int2str_mapc          
   C   sŒ  t dƒ}t dƒ}t dƒ}|  t dd|||dœ¡d¡ |  t ddd||dœ¡d	¡ |  t ddtj||dœ¡ttjƒd
 df¡ |  ttjddtjd ||dœ¡ |  t	tjdd||dœ¡ |  t	tjdd||ddœ¡ |  t dd||dœ¡d¡ |  t dd||ddœ¡d¡ |  t dd||dœ¡d¡ |  t dd||ddœ¡d¡ |  t dd||dœ¡d¡ |  t dd||ddœ¡d¡ d S )NrT   rt   r7   s    r’   )r   r   r  )rÕ   r>  iÿÿ )u   ô¿¿bcr>  Zbcr>  r   )r   r   iþÿ  ro   )u   abï¿½r>  rk   )zab\x02r>  rn   )r$  r>  )
Úordr   r   rò  r–   Ú
maxunicodeÚchrrv   rè   ry   )r
   rT   rt   r7   r   r   r   Útest_decode_with_int2int_map	  s`    


z(CharmapTest.test_decode_with_int2int_mapN)r   r   r   rô  rõ  rù  r   r   r   r   rñ  x  s   7hrñ  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚWithStmtTestc          	   C   sD   t  d¡}t |dd¡}|  | ¡ d¡ W d Q R X |  |j¡ d S )Ns   Ã¼zlatin-1zutf-8r|  )rD   rE   r   r  r   r   r&   r  )r
   r_   r}  r   r   r   Útest_encodedfilee	  s    
zWithStmtTest.test_encodedfilec          	   C   sH   t  d¡}t d¡}t ||j|jd¡}|  | ¡ d¡ W d Q R X d S )Ns   Ã¼zutf-8r’   õ   Ã¼)	rD   rE   r   r„   rn  ÚstreamreaderÚstreamwriterr   r   )r
   r_   ÚinfoÚsrwr   r   r   Útest_streamreaderwriterk	  s
    


z$WithStmtTest.test_streamreaderwriterN)r   r   r   rû  r  r   r   r   r   rú  d	  s   rú  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú	TypesTestc             C   sj   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ƒrJ| t j¡ x|D ]}|  t|d¡ qPW d S )NÚmbcs_decoderU   )r   rå   Úutf_8_decoderª   r°   rç   r   rš   rœ   Úutf_32_ex_decodeÚlatin_1_decodeÚascii_decoderò  ÚhasattrrJ   r  rv   rè   )r
   Zdecodersr)  r   r   r   Útest_decode_unicodet	  s     

zTypesTest.test_decode_unicodec             C   s¼   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |  ttjd¡ |   t dd¡d¡ |   t dd¡d	¡ |  ttjd¡ |   t dd¡d¡ |   t dd¡d	¡ d S )
Nz\u1234)u   áˆ´r\   s   \u1234s
   \U00110000z
\U00110000ro   )u   ï¿½rO   rk   )z(\x5c\x55\x30\x30\x31\x31\x30\x30\x30\x30rO   )r   r   Úunicode_escape_decodeÚraw_unicode_escape_decoderv   ry   )r
   r   r   r   Útest_unicode_escape‰	  s    zTypesTest.test_unicode_escapeN)r   r   r   r	  r  r   r   r   r   r  s	  s   r  c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚUnicodeEscapeTestc             C   s(   |   t d¡d¡ |   t d¡d¡ d S )Nr4   )r3   r   r3   )r4   r   )r   r   Úunicode_escape_encoder
  )r
   r   r   r   rï   	  s    zUnicodeEscapeTest.test_emptyc             C   sD   t j}x8tddƒD ]*}|dkr|  |t|ƒƒt|gƒdf¡ qW d S )Né    é   é\   r   )r   r  r   r   rø  r5   )r
   r0   rt   r   r   r   Útest_raw_encode¡	  s    z!UnicodeEscapeTest.test_raw_encodec             C   sJ   t j}x>tdƒD ]2}|dkr|  |t|gƒd ƒt|ƒd df¡ qW d S )Nr÷   r  r  Ú0r  )r   r
  r   r   r5   rø  )r
   r!   rt   r   r   r   Útest_raw_decode§	  s    z!UnicodeEscapeTest.test_raw_decodec             C   s®   t j}t| |ƒ}|ddƒ |ddƒ |ddƒ |ddƒ x2td	ƒD ]&}t|ƒd
krB|t|ƒd|  ¡ ƒ qBW x(tddƒD ]}|t|ƒd|  ¡ ƒ qxW |ddƒ |ddƒ d S )Nú	s   \trP   s   \nrQ   s   \rú\s   \\r  z	
z\x%02xr  r÷   u   â‚¬s   \u20acu   ð„ s
   \U0001d120)r   r  r   r   rø  r0   )r
   r0   r   rt   r   r   r   Útest_escape_encode­	  s    





z$UnicodeEscapeTest.test_escape_encodec          
   C   sÚ  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'ƒ x’td(d)ƒD ]„}t|gƒ}|d*kr2|  t¡ |d+| d,t|ƒ ƒ W d Q R X | ¡ d-krî|  t¡$ |d+| ¡  d,t|d. ƒ ƒ W d Q R X qîW |  t¡ |d/d0ƒ W d Q R X |  t¡ |d1d2ƒ W d Q R X |  t¡ |d3d4ƒ W d Q R X d S )5Ns   [\
]z[]s   [\"]z["]s   [\']z[']s   [\\]z[\]s   [\a]z[]s   [\b]z[]s   [\t]z[	]s   [\n]z[
]s   [\v]z[]s   [\f]z[]s   [\r]z[]s   [\7]s   [\78]z[8]s   [\41]z[!]s   [\418]z[!8]s   [\101]z[A]s   [\1010]z[A0]s   [\x41]s   [\x410]s   \u20acu   â‚¬s
   \U0001d120u   ð„ r
  r  s	   abfnrtuvxr  r  s   UNr  s   \8z\8s   \9z\9s   \úu   \Ãº)	r   r
  r   r   r5   r  r¦   rø  r  )r
   r!   r   r)   rt   r   r   r   Útest_escape_decode¼	  sJ    























 ,z$UnicodeEscapeTest.test_escape_decodec          	   C   sì   t j}x®dD ]¦\}}xœt|ƒD ]}|  t|d| d|  ¡ |  t|d| d|  d ¡ d| d|  d | d|  }|  ||dƒdt|ƒf¡ |  ||d	ƒd
t|ƒf¡ qW qW |  t|d¡ |  |ddƒd¡ |  |dd	ƒd¡ d S )N))ó   xr  )ó   urë   )ó   Urë   r  r  s   [\ó   ]s   ]\rn   z[]ro   u   [ï¿½]ï¿½s
   \U00110000)r4   rO   )u   ï¿½rO   )r   r
  r   rv   ry   r   r   )r
   r!   r7   r*   r)   rX   r   r   r   Útest_decode_errorsã	  s     z$UnicodeEscapeTest.test_decode_errorsN)	r   r   r   rï   r  r  r  r  r  r   r   r   r   r  œ	  s   'r  c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚRawUnicodeEscapeTestc             C   s(   |   t d¡d¡ |   t d¡d¡ d S )Nr4   )r3   r   r3   )r4   r   )r   r   Úraw_unicode_escape_encoder  )r
   r   r   r   rï   õ	  s    zRawUnicodeEscapeTest.test_emptyc             C   s:   t j}x.tdƒD ]"}|  |t|ƒƒt|gƒdf¡ qW d S )Nr÷   r   )r   r  r   r   rø  r5   )r
   r0   rt   r   r   r   r  ù	  s    z$RawUnicodeEscapeTest.test_raw_encodec             C   sB   t j}x6tdƒD ]*}|  |t|gƒd ƒt|ƒd df¡ qW d S )Nr÷   r  r  r  )r   r  r   r   r5   rø  )r
   r!   rt   r   r   r   r  þ	  s    z$RawUnicodeEscapeTest.test_raw_decodec             C   s^   t j}t| |ƒ}x4tdƒD ](}|dkr|dt|ƒ dt|gƒ ƒ qW |ddƒ |ddƒ d S )	Nr÷   s   uUr  r  u   â‚¬s   \u20acu   ð„ s
   \U0001d120)r   r  r   r   rø  r5   )r
   r0   r   rt   r   r   r   r  
  s    
 
z'RawUnicodeEscapeTest.test_escape_encodec             C   s^   t j}t| |ƒ}x4tdƒD ](}|dkr|dt|gƒ dt|ƒ ƒ qW |ddƒ |ddƒ d S )	Nr÷   s   uUr  r  s   \u20acu   â‚¬s
   \U0001d120u   ð„ )r   r  r   r   r5   rø  )r
   r!   r   rt   r   r   r   r  
  s    
 
z'RawUnicodeEscapeTest.test_escape_decodec          	   C   sì   t j}x®dD ]¦\}}xœt|ƒD ]}|  t|d| d|  ¡ |  t|d| d|  d ¡ d| d|  d | d|  }|  ||dƒdt|ƒf¡ |  ||d	ƒd
t|ƒf¡ qW qW |  t|d¡ |  |ddƒd¡ |  |dd	ƒd¡ d S )N))r  rë   )r  rë   r  r  s   [\r  s   ]\rn   z[]ro   u   [ï¿½]ï¿½s
   \U00110000)r4   rO   )u   ï¿½rO   )r   r  r   rv   ry   r   r   )r
   r!   r7   r*   r)   rX   r   r   r   r  
  s     z'RawUnicodeEscapeTest.test_decode_errorsN)	r   r   r   rï   r  r  r  r  r  r   r   r   r   r  ô	  s   		r  c               @   s   e Zd Zdd„ ZdS )ÚEscapeEncodeTestc          
   C   sx   ddddddddg}x:|D ]2\}}| j |d	 |  t |¡|¡ W d Q R X qW |  ttjd
¡ |  ttjtdƒ¡ d S )N)r3   )r3   r   )s   foobar)s   foobarr\   )s	   spam eggs)s   spam\x00eggsé	   )s   a'b)s   a\'br>  )s   b\c)s   b\\cr>  )s   c
d)s   c\ndr>  )s   de)s   d\rer>  )s   fg)s   f\x7fgr>  )rX   r‚   s   spam)r´   r   r   r,  rv   rè   r  )r
   r«   rX   Úoutputr   r   r   r  (
  s     z#EscapeEncodeTest.test_escape_encodeN)r   r   r   r  r   r   r   r   r   &
  s   r   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚSurrogateEscapeTestc             C   sT   |   d dd¡d¡ |   d dd¡d¡ |   d dd¡d¡ |   d dd¡d¡ d S )Ns   foo€barzutf-8r²   u	   fooí²€bars   í°€u	   í³­í²°í²€)r   r!   r0   )r
   r   r   r   Ú	test_utf8<
  s    zSurrogateEscapeTest.test_utf8c             C   s,   |   d dd¡d¡ |   d dd¡d¡ d S )Ns   foo€barrß   r²   u	   fooí²€bar)r   r!   r0   )r
   r   r   r   rä   H
  s    zSurrogateEscapeTest.test_asciic             C   s,   |   d dd¡d¡ |   d dd¡d¡ d S )Ns   foo¥barz
iso-8859-3r²   u	   fooí²¥bar)r   r!   r0   )r
   r   r   r   Útest_charmapO
  s    z SurrogateEscapeTest.test_charmapc             C   s   |   d dd¡d¡ d S )Nu   í³¤í³«í³¯í³¶í³¼zlatin-1r²   s   äëïöü)r   r0   )r
   r   r   r   Útest_latin1V
  s    zSurrogateEscapeTest.test_latin1N)r   r   r   r$  rä   r%  r&  r   r   r   r   r#  :
  s   r#  c               @   s   e Zd Zdd„ ZdS )ÚBomTestc          
   C   s<  d}d}|   tjtj¡ x|D ]}tjtjd|dV}| |¡ | |¡ | d¡ |  | 	¡ |d ¡ | d¡ |  | 	¡ |d ¡ W d Q R X tjtjd|dR}| |d ¡ |  
| ¡ d¡ | d¡ | |¡ | d¡ |  | 	¡ |¡ W d Q R X tjtjd|dZ}|j |d ¡ |  
|j ¡ d¡ |j d¡ |j |¡ | d¡ |  | 	¡ |¡ W d Q R X tjtjd|dF}| |¡ | | ¡ ¡ | |¡ | d¡ |  | 	¡ |d ¡ W d Q R X tjtjd|dN}|j |¡ |j |j ¡ ¡ |j |¡ | d¡ |  | 	¡ |d ¡ W d Q R X q W d S )NZ
1234567890)zutf-16z	utf-16-lez	utf-16-bezutf-32z	utf-32-lez	utf-32-bezw+)r'   r   r  )r¡   r   r¢   r£   r   r¤   r   ré  r   r   ZassertNotEqualÚtellrd   )r
   rX   r«   r'   r_   r   r   r   Ú
test_seek0]
  sJ    











zBomTest.test_seek0N)r   r   r   r)  r   r   r   r   r'  \
  s   r'  Ú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_codecr:   ÚzlibÚ	bz2_codecÚbz2c               @   s€   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
e ed¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTransformCodecTestc          
   C   s†   t tdƒƒ}xttD ]l}| j|dV t |¡|ƒ\}}|  |t|ƒ¡ t |¡|ƒ\}}|  |t|ƒ¡ |  ||¡ W d Q R X qW d S )Nr÷   )r'   )	r5   r   Úbytes_transform_encodingsr´   r   r+  r   r   r(  )r
   Zbinputr'   Úor   r)   r   r   r   rã  ¶
  s    
zTransformCodecTest.test_basicsc          
   C   s^   xXt D ]P}| j|d: t d|¡}t |¡t |¡ƒ}| ¡ }|  |d¡ W d Q R X qW d S )N)r'   rÁ   )	r<  r´   r   r0   r9   rD   rE   r   r   )r
   r'   ÚsinrK   Úsoutr   r   r   Ú	test_readÁ
  s    
zTransformCodecTest.test_readc          
   C   s^   xXt D ]P}| j|d: t d|¡}t |¡t |¡ƒ}| ¡ }|  |d¡ W d Q R X qW d S )N)r'   rÁ   )	r<  r´   r   r0   r9   rD   rE   rI   r   )r
   r'   r>  rK   r?  r   r   r   rW   É
  s    
z TransformCodecTest.test_readlinec          
   C   s–   d}xŒt D ]„}| j|dn |}t|ƒ}t ||¡}t ||¡}|  ||¡ t|ƒ}t ||¡}|  ||¡ t ||¡}|  ||¡ W d Q R X q
W d S )Ns   12345€)r'   )r<  r´   Ú
memoryviewr   r0   r   r!   )r
   Zoriginalr'   rX   ZviewZview_encodedZview_decodedr   r   r   Útest_buffer_api_usageÑ
  s    
z(TransformCodecTest.test_buffer_api_usagec             C   sl   d}xbt D ]Z}| j|dD d}| |¡}|  t|¡}| |¡ W d Q R X |  |jj¡ W d Q R X q
W d S )Nzbad input type)r'   zM{!r} is not a text encoding; use codecs.encode\(\) to handle arbitrary codecs)	r<  r´   ÚformatÚassertRaisesRegexrF  r0   ÚassertIsNoner¸   Ú	__cause__)r
   Ú	bad_inputr'   ÚfmtÚmsgÚfailurer   r   r   Ú0test_text_to_binary_blacklists_binary_transformsã
  s    

zCTransformCodecTest.test_text_to_binary_blacklists_binary_transformsc          	   C   s*   d}|   t|¡ d d¡ W d Q R X d S )NzR^'rot_13' is not a text encoding; use codecs.encode\(\) to handle arbitrary codecszjust an example messager6  )rD  rF  r0   )r
   rI  r   r   r   Ú.test_text_to_binary_blacklists_text_transformsï
  s    zATransformCodecTest.test_text_to_binary_blacklists_text_transformsc             C   s   d}x†t D ]~}| j|dh t ||¡}d}| |¡}|  t|¡ | |¡ W d Q R X |  t|¡ t|ƒ |¡ W d Q R X W d Q R X q
W d S )Ns6   encode first to ensure we meet any format restrictions)r'   zM{!r} is not a text encoding; use codecs.decode\(\) to handle arbitrary codecs)	r<  r´   r   r0   rC  rD  rF  r!   r  )r
   rX   r'   Zencoded_datarH  rI  r   r   r   Ú0test_binary_to_text_blacklists_binary_transformsö
  s    

zCTransformCodecTest.test_binary_to_text_blacklists_binary_transformsc             C   sf   x`dt dƒfD ]P}| j|d: d}|  t|¡}| d¡ W d Q R X |  |jj¡ W d Q R X qW d S )Ns	   immutables   mutable)rG  zR^'rot_13' is not a text encoding; use codecs.decode\(\) to handle arbitrary codecsr6  )r  r´   rD  rF  r!   rE  r¸   rF  )r
   rG  rI  rJ  r   r   r   Ú.test_binary_to_text_blacklists_text_transforms  s    zATransformCodecTest.test_binary_to_text_blacklists_text_transformszRequires zlib supportc          	   C   sB   d}|   t|¡}t dd¡ W d Q R X |  |jjt|jƒ¡ d S )Nz(^decoding with 'zlib_codec' codec faileds   hellor7  )rD  r6  r   r!   r#   r¸   rF  rß  )r
   rI  rJ  r   r   r   Ú!test_custom_zlib_error_is_wrapped  s
    
z4TransformCodecTest.test_custom_zlib_error_is_wrappedc          	   C   sB   d}|   t|¡}t dd¡ W d Q R X |  |jjt|jƒ¡ d S )Nz'^decoding with 'hex_codec' codec faileds   hellor-  )rD  r6  r   r!   r#   r¸   rF  rß  )r
   rI  rJ  r   r   r   Ú test_custom_hex_error_is_wrapped  s
    
z3TransformCodecTest.test_custom_hex_error_is_wrappedc             C   sd   x^t  ¡ D ]R\}}t |¡j}x<|D ]4}| j|d t |¡}|  |j|¡ W d Q R X q$W q
W d S )N)Úalias)Útransform_aliasesÚitemsr   r„   rU  r´   r   )r
   Ú
codec_nameÚaliasesZexpected_namerQ  rÿ  r   r   r   Útest_aliases$  s    

zTransformCodecTest.test_aliasesc             C   s4   t  dd¡}|  |d¡ d}|  t  |d¡|¡ d S )Ns   space tab	eol 
zquopri-codecs   space=20tab=09eol=20
s   space tab eol
)r   r0   r   r!   )r
   rB   Z	unescapedr   r   r   Útest_quopri_stateless,  s    z(TransformCodecTest.test_quopri_statelessc             C   s   |   ttjdd¡ d S )Nr3   zuu-codec)rv   r  r   r!   )r
   r   r   r   Útest_uu_invalid4  s    z"TransformCodecTest.test_uu_invalidN)r   r   r   rã  r@  rW   rB  rK  rL  rM  rN  r/  r0  r8  rO  rP  rV  rW  rX  r   r   r   r   r;  ´
  s   
	r;  c             C   s
   t  | ¡S )N)Ú_TEST_CODECSÚget)rT  r   r   r   Ú_get_test_codecC  s    r[  )Ú_forget_codecc             C   s   d S )Nr   )rT  r   r   r   r\  K  s    r\  c               @   s¦   e Zd Zdd„ Zdd„ Zdd„ Zejdd„ ƒZd	d
„ Z	e
fdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )&ÚExceptionChainingTestc             C   s.   t | ƒtt| ƒƒ }t |¡ ¡ | _t| _d S )N)	Úreprrò   Úidrî  Únormalize_encodingr  rT  ÚRuntimeErrorÚobj_to_raise)r
   Z	unique_idr   r   r   ry  Q  s    		zExceptionChainingTest.setUpc             C   sF   t  | jd ¡ tj | jd ¡ yt| jƒ W n tk
r@   Y nX d S )N)rY  ÚpoprT  rî  Ú_cacher\  ÚKeyError)r
   r   r   r   ÚtearDownf  s    zExceptionChainingTest.tearDownc             C   s    t j||| jd}|t| j< d S )N)rU  )r   rW  rT  rY  )r
   r0   r!   Z
codec_infor   r   r   Ú	set_codeco  s    
zExceptionChainingTest.set_codecc          	   c   sV   d  || j|j|¡}|  ||¡}|V  W d Q R X |  |jj|¡ |  |jjj¡ d S )Nz${} with {!r} codec failed \({}: {}\))	rC  rT  r   rD  r#   r¸   rF  ZassertIsNotNoneÚ__traceback__)r
   Z	operationÚexc_typerI  Zfull_msgZcaughtr   r   r   ÚassertWrappedt  s    z#ExceptionChainingTest.assertWrappedc             O   s
   | j ‚d S )N)rb  )r
   ÚargsÚkwdsr   r   r   Ú	raise_obj}  s    zExceptionChainingTest.raise_objc          	   C   s¶   || _ |  | j| j¡ |  d||¡ d | j¡ W d Q R X |  d||¡ t d| j¡ W d Q R X |  d||¡ d | j¡ W d Q R X |  d||¡ t d| j¡ W d Q R X d S )Nr'   Ú	str_inputZdecodings   bytes input)rb  rg  rm  rj  r0   rT  r   r!   )r
   rb  rI  ri  r   r   r   Úcheck_wrapped  s    z#ExceptionChainingTest.check_wrappedc             C   s   |   td¡ d S )Nr4   )ro  ra  )r
   r   r   r   Útest_raise_by_type  s    z(ExceptionChainingTest.test_raise_by_typec             C   s   d}|   t|ƒ|¡ d S )NzThis should be wrapped)ro  ra  )r
   rI  r   r   r   Útest_raise_by_value  s    z)ExceptionChainingTest.test_raise_by_valuec             C   s*   d}G dd„ dt ƒ}|  ||ƒ||¡ d S )NzThis should be wrappedc               @   s   e Zd ZdZdS )zWExceptionChainingTest.test_raise_grandchild_subclass_exact_size.<locals>.MyRuntimeErrorr   N)r   r   r   Ú	__slots__r   r   r   r   ÚMyRuntimeError–  s   rs  )ra  ro  )r
   rI  rs  r   r   r   Ú)test_raise_grandchild_subclass_exact_size”  s    z?ExceptionChainingTest.test_raise_grandchild_subclass_exact_sizec             C   s*   d}G dd„ dt ƒ}|  ||ƒ||¡ d S )NzThis should be wrappedc               @   s   e Zd ZdS )zVExceptionChainingTest.test_raise_subclass_with_weakref_support.<locals>.MyRuntimeErrorN)r   r   r   r   r   r   r   rs  œ  s   rs  )ra  ro  )r
   rI  rs  r   r   r   Ú(test_raise_subclass_with_weakref_supportš  s    z>ExceptionChainingTest.test_raise_subclass_with_weakref_supportc          	      s°   ‡ fdd„}|   ||¡ |  t|¡ d | j¡ W d Q R X |  t|¡ t d| j¡ W d Q R X |  t|¡ d | j¡ W d Q R X |  t|¡ t d| j¡ W d Q R X d S )Nc                 s   ˆ ‚d S )Nr   )rk  rl  )rb  r   r   rm  ¡  s    z:ExceptionChainingTest.check_not_wrapped.<locals>.raise_objz	str inputs   bytes input)rg  rD  ra  r0   rT  r   r!   )r
   rb  rI  rm  r   )rb  r   Úcheck_not_wrapped   s    z'ExceptionChainingTest.check_not_wrappedc             C   s    G dd„ dt ƒ}|  |d¡ d S )Nc               @   s   e Zd Zdd„ ZdS )zKExceptionChainingTest.test_init_override_is_not_wrapped.<locals>.CustomInitc             S   s   d S )Nr   )r
   r   r   r   r   ¯  s    zTExceptionChainingTest.test_init_override_is_not_wrapped.<locals>.CustomInit.__init__N)r   r   r   r   r   r   r   r   Ú
CustomInit®  s   rw  r4   )ra  rv  )r
   rw  r   r   r   Ú!test_init_override_is_not_wrapped­  s    z7ExceptionChainingTest.test_init_override_is_not_wrappedc             C   s    G dd„ dt ƒ}|  |d¡ d S )Nc                   s   e Zd Z‡ fdd„Z‡  ZS )zIExceptionChainingTest.test_new_override_is_not_wrapped.<locals>.CustomNewc                s   t ƒ  | ¡S )N)r¶   Ú__new__)Úcls)r¾   r   r   ry  µ  s    zQExceptionChainingTest.test_new_override_is_not_wrapped.<locals>.CustomNew.__new__)r   r   r   ry  rÒ   r   r   )r¾   r   Ú	CustomNew´  s   r{  r4   )ra  rv  )r
   r{  r   r   r   Ú test_new_override_is_not_wrapped³  s    z6ExceptionChainingTest.test_new_override_is_not_wrappedc             C   s(   d}t |ƒ}d|_|  |d |¡¡ d S )NzThis should NOT be wrappedr   z^{}$)ra  Úattrrv  rC  )r
   rI  r½   r   r   r   Ú&test_instance_attribute_is_not_wrapped¹  s    z<ExceptionChainingTest.test_instance_attribute_is_not_wrappedc             C   s   |   tdƒd¡ d S )Nr   Ú1)rv  ra  )r
   r   r   r   Útest_non_str_arg_is_not_wrapped¿  s    z5ExceptionChainingTest.test_non_str_arg_is_not_wrappedc             C   s   d}|   tdddƒ|¡ d S )Nz^\('a', 'b', 'c'\)$rT   rt   r7   )rv  ra  )r
   Zmsg_rer   r   r   Ú!test_multiple_args_is_not_wrappedÂ  s    z7ExceptionChainingTest.test_multiple_args_is_not_wrappedc          	   C   s¤   d  | j¡}|  t|¡ d | j¡ W d Q R X |  t|¡ t d| j¡ W d Q R X |  t|¡ d | j¡ W d Q R X |  t|¡ t d| j¡ W d Q R X d S )Nz^unknown encoding: {}$z	str inputs   bytes input)rC  rT  rD  rF  r0   r   r!   )r
   rI  r   r   r   Ú%test_codec_lookup_failure_not_wrappedÇ  s    z;ExceptionChainingTest.test_codec_lookup_failure_not_wrappedc          	   C   s¼   dd„ }dd„ }|   ||¡ t d | j¡}|  |d¡ t d | j¡}|  |d¡ d}| | j¡}|  t|¡ d | j¡ W d Q R X d	}| | j¡}|  t|¡ d
 | j¡ W d Q R X d S )Nc              _   s   dS )N)z
not bytes!r   r   )rk  rl  r   r   r   Úencode_to_strÙ  s    zSExceptionChainingTest.test_unflagged_non_text_codec_handling.<locals>.encode_to_strc              _   s   dS )N)s   not str!r   r   )rk  rl  r   r   r   Údecode_to_bytesÛ  s    zUExceptionChainingTest.test_unflagged_non_text_codec_handling.<locals>.decode_to_bytesz
not bytes!s   not str!zd^{!r} encoder returned 'str' instead of 'bytes'; use codecs.encode\(\) to encode to arbitrary types$rn  zd^{!r} decoder returned 'bytes' instead of 'str'; use codecs.decode\(\) to decode to arbitrary types$s   bytes input)	rg  r   r0   rT  r   r!   rC  rD  rè   )r
   rƒ  r„  rB   rÜ   rH  rI  r   r   r   Ú&test_unflagged_non_text_codec_handlingÓ  s    z<ExceptionChainingTest.test_unflagged_non_text_codec_handlingN)r   r   r   ry  rf  rg  Ú
contextlibÚcontextmanagerrj  rm  ra  ro  rp  rq  rt  ru  rv  rx  r|  r~  r€  r  r‚  r…  r   r   r   r   r]  O  s$   		r]  z"code pages are specific to Windowsc               @   s€   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zejdddddd„ ƒZdS )ÚCodePageTestiéý  c             C   sL   |   ttjdd¡ |   ttjdd¡ |   ttjdd¡ |   ttjdd¡ d S )Nr   rT   ó   ar  )rv   r  r   Úcode_page_encodeÚcode_page_decodeÚOSError)r
   r   r   r   Útest_invalid_code_page÷  s    z#CodePageTest.test_invalid_code_pagec          	   C   sJ   |   tdtjdd¡ |   tdtjdddd¡ |   tdtj| jddd¡ d S )	Nr   i¤  õ   Ã¿s    r’   TÚCP_UTF8r‘   )rD  rw   r   rŠ  ry   r‹  r  )r
   r   r   r   Útest_code_page_nameý  s    z CodePageTest.test_code_page_namec             C   sÎ   xÈ|D ]À\}}}|d k	r°yt  |||d¡}W n8 tk
rd } z|  d||||f ¡ W d d }~X Y nX |  |d |d||||d |f ¡ |  |d d¡ |  |d t|ƒ¡ q|  tt j|||d¡ qW d S )NTz2Unable to decode %a from "cp%s" with errors=%r: %sr   z%a.decode("cp%s", %r)=%a != %ar   )	r   r‹  ry   r×   r   ZassertGreaterEqualZassertLessEqualr   rv   )r
   Úcpr«   r¬   rÙ   r­   rÜ   rÚ   r   r   r   Úcheck_decode  s    "zCodePageTest.check_decodec             C   sº   x´|D ]¬\}}}|d k	ržyt  |||¡}W n8 tk
rb } z|  d||||f ¡ W d d }~X Y nX |  |d |d||||d |f ¡ |  |d t|ƒ¡ q|  tt j|||¡ qW d S )Nz0Unable to encode %a to "cp%s" with errors=%r: %sr   z%a.encode("cp%s", %r)=%a != %ar   )r   rŠ  rw   r×   r   r   rv   )r
   r‘  r«   rØ   rÙ   r­   rB   rÚ   r   r   r   Úcheck_encode  s    "zCodePageTest.check_encodec             C   s   |   dd¡ |  dd¡ d S )Ni¤  ))rÕ   r’   s   abc)u   ï½„é¨¾r’   s   ‚„é€)rŽ  r’   N)u   [Ã¿]rn   s   [])u   [Ã¿]ro   s   [y])u   [â‚¬]ro   s   [?])u   [Ã¿]rk   s   [\xff])u   [Ã¿]rl   s)   [\N{LATIN SMALL LETTER Y WITH DIAERESIS}])u   [Ã¿]rm   s   [&#255;])u   í³¿r’   N)u   [í³¿]r²   s   [ÿ])u   [í³¿]rs   N))s   abcr’   rÕ   )s   ‚„é€r’   u   ï½„é¨¾)s   [ÿ]r’   N)s   [ÿ]rn   z[])s   [ÿ]ro   u   [ï¿½])s   [ÿ]rk   z[\xff])s   [ÿ]r²   u   [í³¿])s   [ÿ]rs   N)s    abcr’   N)s    abcrn   z abc)s    abcro   u   ï¿½ abc)s    abcrk   z\x81 abc)r“  r’  )r
   r   r   r   Ú
test_cp932'  s    zCodePageTest.test_cp932c             C   s   |   dd¡ |  dd¡ d S )Niä  ))rÕ   r’   s   abc)u   Ã©â‚¬r’   s   é€)rŽ  r’   r‘   )u   År’   N)u   Årn   r3   )u   Åro   ó   L)u   í²˜r²   ó   ˜)u   í²˜rs   N))s   abcr’   rÕ   )s   é€r’   u   Ã©â‚¬)r‘   r’   rŽ  )r“  r’  )r
   r   r   r   Útest_cp1252H  s    
zCodePageTest.test_cp1252c             C   s    d}|   |d¡ |  |d¡ d S )Nièý  ))rÕ   r’   s   abc)u   Ã©â‚¬r’   s   +AOkgrA-)u   ô¿¿r’   s   +2//f/w-)u   í²€r’   s   +3IA-)u   ï¿½r’   s   +//0-))s   abcr’   rÕ   )s   +AOkgrA-r’   u   Ã©â‚¬)s   +2//f/w-r’   u   ô¿¿)s   +3IA-r’   u   í²€)s   +//0-r’   u   ï¿½)s   [+/]r’   z[])s   [ÿ]r’   u   [Ã¿])r“  r’  )r
   r‘  r   r   r   Útest_cp_utf7Z  s
    zCodePageTest.test_cp_utf7c             C   s,   |   dd¡ |   | jd¡ |  | jd¡ d S )Ni¤  ))s   „é€rn   u   é¨¾)s   „é€ro   u   ï¿½é¨¾))s   ÿô¿¿rn   u   ô¿¿)s   ÿô¿¿ro   u   ï¿½ô¿¿))u	   [ô¿¿í²€]rn   s   [ô¿¿])u	   [ô¿¿í²€]ro   s   [ô¿¿?])r’  r  r“  )r
   r   r   r   Útest_multibyte_encodingn  s    z$CodePageTest.test_multibyte_encodingc             C   sF   x,dt ddƒd˜D ]}|  t |d
¡d¡ qW |  t dd
¡d¡ d S )Né,Ä  é-Ä  é.Ä  é1Ä  é3Ä  é5Ä  iªÞ  i´Þ  éèý  s   abc)rÕ   r>  rð   )u	   ï¡ï¢ï£r>  )rš  r›  rœ  r  rž  rŸ  )r   )r   r   r   r‹  )r
   r‘  r   r   r   Útest_code_page_decode_flags|  s
    z(CodePageTest.test_code_page_decode_flagsc             C   st   t  dddd¡}|  |d¡ t  dddd¡}|  |d¡ t  dddd¡}|  |d	¡ t  dd
dd¡}|  |d¡ d S )Ni¤  ó   ‚r’   F)r4   r   s   é€é)u   é¨¾r  s   é€é€)u   é¨¾é¨¾rë   s   abc)rÕ   r>  )r   r‹  r   )r
   rÜ   r   r   r   Útest_incremental…  s    zCodePageTest.test_incrementalc          	   C   s6   t jddd t d¡}|  |jd¡ W d Q R X d S )Nz_winapi.GetACPr  )Zreturn_valueZcp123rØ  )r   Zpatchr   r„   r   rU  )r
   Úcodecr   r   r   Útest_mbcs_alias˜  s    
zCodePageTest.test_mbcs_aliasl        é   F)r   ZmemuseZdry_runc             C   sŽ   dd d }|   t|ƒd¡ t d|dd¡}|   |d t|ƒ¡ ~|   t|d	 ƒ|d ¡ |   |d	 d d
… d¡ |   |d	 dd … d¡ d S )Ns   01234567iÿÿÿs
   …†êëìïüýþÿl       i¤  r²   Tr   r   rO   Z
0123456701iìÿÿÿu(   6701234567í²…í²†í³ªí³«í³¬í³¯í³¼í³½í³¾í³¿)r   r   r   r‹  )r
   rB   rÜ   r   r   r   Útest_large_inputŸ  s    zCodePageTest.test_large_inputN)r   r   r   r  r  r  r’  r“  r”  r—  r˜  r™  r¡  r£  r¥  r   Z
bigmemtestr§  r   r   r   r   rˆ  ñ  s   !	rˆ  c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	ASCIITestc             C   s   |   d d¡d¡ d S )NrÚ  rß   s   abc123)r   r0   )r
   r   r   r   rÛ   ³  s    zASCIITest.test_encodec          
   C   sH   xBdD ]:\}}}| j |||d |  | d|¡|¡ W d Q R X qW d S )N))u	   [Â€Ã¿â‚¬]rn   s   [])u	   [Â€Ã¿â‚¬]ro   s   [???])u	   [Â€Ã¿â‚¬]rm   s   [&#128;&#255;&#8364;])u   [Â€Ã¿â‚¬ò«³ž]rk   s   [\x80\xff\u20ac\U000abcde])u   [í²€í³¿]r²   s   [€ÿ])rX   r³   r­   rß   )r´   r   r0   )r
   rX   r³   r­   r   r   r   Útest_encode_error¶  s    
zASCIITest.test_encode_errorc          	   C   s&   |   t¡ d dd¡ W d Q R X d S )Nu   í²€Ã¿rß   r²   )rv   rw   r0   )r
   r   r   r   Ú!test_encode_surrogateescape_errorÄ  s    z+ASCIITest.test_encode_surrogateescape_errorc             C   s   |   d d¡d¡ d S )Ns   abcrß   rÕ   )r   r!   )r
   r   r   r   rÝ   É  s    zASCIITest.test_decodec          
   C   sH   xBdD ]:\}}}| j |||d |  | d|¡|¡ W d Q R X qW d S )N))s   [€ÿ]rn   z[])s   [€ÿ]ro   u   [ï¿½ï¿½])s   [€ÿ]r²   u   [í²€í³¿])s   [€ÿ]rk   z
[\x80\xff])rX   r³   r­   rß   )r´   r   r!   )r
   rX   r³   r­   r   r   r   rµ   Ì  s    
zASCIITest.test_decode_errorN)r   r   r   rÛ   r©  rª  rÝ   rµ   r   r   r   r   r¨  ²  s
   r¨  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
Latin1Testc          
   C   sB   x<dD ]4\}}| j ||d |  | d¡|¡ W d Q R X qW d S )N))rÕ   s   abc)u   Â€Ã©Ã¿s   €éÿ)rX   r­   Úlatin1)r´   r   r0   )r
   rX   r­   r   r   r   rÛ   Ú  s    zLatin1Test.test_encodec          
   C   sH   xBdD ]:\}}}| j |||d |  | d|¡|¡ W d Q R X qW d S )N))u   [â‚¬í²€]rn   s   [])u   [â‚¬í²€]ro   s   [??])u	   [â‚¬ò«³ž]rk   s   [\u20ac\U000abcde])u   [â‚¬í²€]rm   s   [&#8364;&#56448;])u   [í²€í³¿]r²   s   [€ÿ])rX   r³   r­   r¬  )r´   r   r0   )r
   rX   r³   r­   r   r   r   Útest_encode_errorsâ  s    
zLatin1Test.test_encode_errorsc          	   C   s&   |   t¡ d dd¡ W d Q R X d S )Nu   í²€â‚¬r¬  r²   )rv   rw   r0   )r
   r   r   r   rª  ð  s    z,Latin1Test.test_encode_surrogateescape_errorc          
   C   sB   x<dD ]4\}}| j ||d |  | d¡|¡ W d Q R X qW d S )N))s   abcrÕ   )s   [€ÿ]u   [Â€Ã¿])rX   r­   r¬  )r´   r   r!   )r
   rX   r­   r   r   r   rÝ   õ  s    zLatin1Test.test_decodeN)r   r   r   rÛ   r­  rª  rÝ   r   r   r   r   r«  Ù  s   r«  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚStreamRecoderTestc             C   sR   t  ¡ }t d¡}t ||j|jtjj	tjj
¡}| ddg¡ |  | ¡ d¡ d S )Nrß   r‰  ó   bs   ab)rD   rE   r   r„   ro  r0   r!   rî  rß   r[  r\  Ú
writelinesr   r…   )r
   Úbior¤  Úsrr   r   r   Útest_writelinesÿ  s    
z!StreamRecoderTest.test_writelinesc             C   s^   t  ¡ }t d¡}t ||j|jtjj	tjj
¡}d}| | d¡¡ |  | ¡ | d¡¡ d S )Nr¬  u   Ã Ã±Ã©zutf-8)rD   rE   r   r„   ro  r0   r!   rî  r×  r[  r\  r   r   r…   )r
   r±  r¤  r²  rØ   r   r   r   Ú
test_write  s    
zStreamRecoderTest.test_writec             C   s|   t  d d¡¡}t |dd¡}|  | ¡ d¡ | d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ d S )	Nzline1
line2
line3
z	utf-16-lezutf-8s   line1
r   s   line2
s   line3
r3   )rD   rE   r0   r   r  r   rI   ré  )r
   r±  r²  r   r   r   Útest_seeking_read  s    
z#StreamRecoderTest.test_seeking_readc             C   s€   t  d d¡¡}t |dd¡}| d¡ | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ |  | ¡ d	¡ |  | ¡ d¡ d S )
Nz
123456789
z	utf-16-lezutf-8r  s   
abc
s   789
r   s   1
s   abc
)	rD   rE   r0   r   r  ré  r   r   rI   )r
   r±  r²  r   r   r   Útest_seeking_write  s    


z$StreamRecoderTest.test_seeking_writeN)r   r   r   r³  r´  rµ  r¶  r   r   r   r   r®  þ  s   r®  Ú__main__)Pr   r†  rD   rQ  r–   r/  rî  r   Ztestr   ZctypesÚImportErrorr1  ZsizeofZc_wcharr   r¹   r   r   r2   ZTestCaser€   r˜   r›   r   r©   r¯   r±   r0  ÚplatformrÔ   rÞ   ræ   rê   rñ   r  r  r  r)   r   Úprintr^  r  r  r5  r3  r:  rC  rx  r{  rÜ  r  rJ   rÞ  rÙ  rñ  rú  r  r  r  r   r#  r'  r<  rR  r8  r:  r;  rY  r[  rG  Ú_codecsr\  r]  rˆ  r¨  r«  r®  r   Úmainr   r   r   r   Ú<module>   s  
"  W`..V,,^W U=

TWm

 $ m)X2":
 
 #
 @'%.