a
    ze                    @   s
  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	 zd dl
Z
W n eyr   dZ
Y n0 zd dlZW n ey   dZdZY n0 eejZdd 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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'Z#e#D ] Z$e%e$d(kre&e'e$ qG d)d* d*ejZ(g d+Z)G d,d- d-ejZ*G d.d/ d/ejZ+G d0d1 d1ejZ,G d2d3 d3ejZ-G d4d5 d5ejZ.g d6Z/e0e d7re/1d8 e0e d9re/1d: d;gZ2G d<d= d=ejeZ3G d>d? d?ejZ4G d@dA dAejZ5G dBdC dCejZ6G dDdE dEeejZ7G dFdG dGeejZ8G dHdI dIejZ9G dJdK dKejZ:G dLdM dMejZ;g dNZ<dOdPgdQgg dRdSgdTgdUZ=zd dl>Z>W n ey   dZ>Y n0 e<1dV dWdXge=dV< zd dl?Z?W n ey   Y n0 e<1dY dZge=dY< G d[d\ d\ejZ@i ZAd]d^ ZBe CeB zd d_lDmEZE W n ey@   d`da ZEY n0 G dbdc dcejZFeGejHddkdeG dfdg dgejZIG dhdi diejZJG djdk dkejZKG dldm dmejZLeMe
du dnG dodp dpejZNG dqdr drejZOG dsdt dtejZPeQdukreR  dS )v    N)mock)supportc                    s    fdd}|S )Nc                    s     | |t| f d S N)assertEquallen)inputexpectcoderself &/usr/lib/python3.9/test/test_codecs.pycheck   s    zcoding_checker.<locals>.checkr   )r   r   r   r   r
   r   coding_checker   s    r   c           
         s   ddl m}m}m} ddlm}m mmm	} dddG  fdddt j
}|||||}|d	|d
f}| }	|| d|	S )Nr   )POINTERWINFUNCTYPEWinDLL)BOOLBYTEWCHARUINTDWORD      i  c                       s@   e Zd Zdfd  fd  fdfdfd fgZdS )z'is_code_page_present.<locals>.CPINFOEXWZMaxCharSizeZDefaultCharZLeadByteZUnicodeDefaultCharZCodePageZCodePageNameN)__name__
__module____qualname__Z_fields_r   r   ZMAX_DEFAULTCHARZMAX_LEADBYTESZMAX_PATHr   r   r   r   	CPINFOEXW&   s   


r   ZGetCPInfoExWZkernel32)ctypesr   r   r   Zctypes.wintypesr   r   r   r   r   Z	Structure)
cpr   r   r   r   r   r   Z	prototypeZGetCPInfoExinfor   r   r   is_code_page_present   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 r   _buffer)r   bufferr   r   r   __init__7   s    zQueue.__init__c                 C   s   |  j |7  _ d S r   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   )r   r   r   __doc__r(   r*   r.   r   r   r   r   r$   3   s   r$   c                   @   s   e Zd Zdd Zdd ZdS )MixInCheckStateHandlingc           	      C   s   t t|d D ]}t| }||d | }| }| |d t |d s||d d d df | 	||d   | 
||  t| }|| |||d  d}| 
|||  qd S )N   r   T)ranger   codecsgetincrementaldecoderdecodegetstateassertIsInstanceintsetstate
assertTruer   	r   encodingur-   idZpart1stateZpart2r   r   r   check_state_handling_decodeI   s    
z3MixInCheckStateHandling.check_state_handling_decodec           	      C   sz   t t|d D ]d}t| }||d | }| }t| }|| |||d  d}| |||  qd S )Nr1   T)r2   r   r3   getincrementalencoderencoder6   r9   r   r;   r   r   r   check_state_handling_encode_   s    
z3MixInCheckStateHandling.check_state_handling_encodeN)r   r   r   rA   rD   r   r   r   r   r0   H   s   r0   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}t|| j|D ]0\}}|t|g || 7 }| 	|| q.| 	| d | 	|j
d t| j }d}t|| j|D ](\}}||t|g7 }| 	|| q| 	|ddd | 	|jd |  d}t|| j|D ]*\}}||t|g7 }| 	|| q| 	|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>   rF   z*ReadTest.check_partial.<locals>.<listcomp>)r$   r3   	getreaderr<   ziprC   r*   rI   r.   r   
bytebufferr4   r5   r'   resetjoin
iterdecode)
r   r   ZpartialresultsqrresultrL   Zpartialresultr?   encodedr   r   r   check_partialk   s8    zReadTest.check_partialc                    s  fdd d fdd	}d}d}d} ||d|  ||d	|  ||dd
|  ||d	d
| d}g }g }t|D ]8\}}	||d d d |	  ||d d d  q |d|dd|  |d|d	d| tdD ]}
|D ]}	d
|
d |	 d  } |}td
D ]6} |jdd|
d |	   |jddd q4 |}td
D ]2} |jd	d|
d   |jd	dd q|qqd S )Nc                    s"   t |  j}t j|S r   ioBytesIOrC   r<   r3   rN   )r   streamr   r   r   rN      s    z)ReadTest.test_readline.<locals>.getreaderTc                    s6    | }g }|j ||d}|s q,|| qd|S )N)r,   keepends|)readlineappendrR   )r   r^   r,   readerlinesline)rN   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
   )

u       u   あrG   r_   P   azxxx
r^   xxx)TN)r   	enumeratera   rR   r2   r`   )r   re   r-   Z	sexpectedZsexpectednoendsZlineendsZvwZvwor>   Zlineendr,   rb   r   )rN   r   r   test_readline   sP    





zReadTest.test_readlinec                    s2  g d}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 )N)zHumpty Dumpty sat on a wall,
z!Humpty Dumpty had a great fall.
z-All the king's horses and all the king's menz#Couldn't put Humpty together again.rG   c                     s"   t  j} tj| S r   rY   )r\   datar   r   r   rN      s    z8ReadTest.test_mixed_readline_and_read.<locals>.getreaderr   r1   d   (      )r,   r)      j   )rR   r   r`   r.   r   	readlines)r   rc   rN   fr   rq   r   test_mixed_readline_and_read   s:    
.*z%ReadTest.test_mixed_readline_and_readc                 C   sV   g d}t d|| j}t| j|}t|D ]\}}| |||  q8d S )N)=z:<%!--===================================================
z,    BLOG index page: show recent articles,
z7    today's articles, or articles of a specific date.
z>========================================================--%>
z!<%@inputencoding="ISO-8859-1"%>
z<%@pagetemplate=TEMPLATE.y%>
z$<%@import=import frog.util, frog%>
z!<%@import=import frog.objects%>
z9<%@import=from frog.storageerrors import StorageError%>
z<%
rh   zimport logging
z+log=logging.getLogger("Snakelets.logger")
rh   rh   zuser=self.SessionCtx.user
z-storageEngine=self.SessionCtx.storageEngine
rh   rh   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")
rh   zshowdate=None
rh   zarg=self.Request.getArg()
zif arg=="today":
z,    #-------------------- TODAY'S ARTICLES
z-    self.write("<h2>Today's articles</h2>")
z(    showdate = frog.util.isodatestr() 
.    entries = readArticlesFromDate(showdate)
zelif arg=="active":
z4    #-------------------- ACTIVE ARTICLES redirect
z     self.Yredirect("active.y")
zelif arg=="login":
z/    #-------------------- LOGIN PAGE redirect
z    self.Yredirect("login.y")
zelif arg=="date":
z7    #-------------------- ARTICLES OF A SPECIFIC DATE
z2    showdate = self.Request.getParameter("date")
zV    self.write("<h2>Articles written on %s</h2>"% frog.util.mediumdatestr(showdate))
r{   zelse:
z+    #-------------------- RECENT ARTICLES
z,    self.write("<h2>Recent articles</h2>")
z.    dates=storageEngine.listBlogEntryDates()
z    if dates:
z        entries=[]
z        SHOWAMOUNT=10
z         for showdate in dates:
zW            entries.extend( readArticlesFromDate(showdate, SHOWAMOUNT-len(entries)) )
z*            if len(entries)>=SHOWAMOUNT:
z                break
z                
rG   )	rZ   r[   rR   rC   r<   r3   rN   ro   r   )r   r-   r\   rb   r>   rd   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 )NrF   zfooFrm   fooz
barrG   ZbarZbazTrg   zbarzfoo
)r$   r3   	getwriterr<   rN   r*   r   r`   )r   rT   writerrb   r   r   r   test_readlinequeueF  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.
rG   rC   r<   rZ   r[   r3   rN   r   r`   )r   s1s2s3r-   r\   rb   r   r   r   test_bug1098990_aa  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.
rG   r   )	r   r   r   r   Zs4Zs5r-   r\   rb   r   r   r   test_bug1098990_bn  s    
zReadTest.test_bug1098990_b   �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}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|| |  qd S )Nu      []backslashreplacez[\udc80]namereplacexmlcharrefreplacez
[&#56448;]ignore[]replacez[?]   []z[??]rG   ))   𐿿A)[])r   r      surrogatepassc                 s   s   | ]}d | V  qdS )\x%02xNr   )rK   br   r   r   	<genexpr>  s   z0ReadTest.test_lone_surrogates.<locals>.<genexpr>)assertRaisesUnicodeEncodeErrorrC   r<   r   r   ill_formed_sequenceUnicodeDecodeErrorr5   ill_formed_sequence_replacerR   )	r   ZbombeforeZafterZbefore_sequenceZafter_sequenceZtest_stringZtest_sequencer   r   r   r   test_lone_surrogates  sr    









zReadTest.test_lone_surrogatesc                 C   s   d | jd}tdt|D ]J}t| jd}| ||d | d | |||d  dd qd | jd}tdt|D ]H}t| jd}| ||d | d | |||d  d qd S )Nu   r   r1   rG   Tu   )rC   r<   r2   r   r3   r4   r   r5   )r   rr   r>   decr   r   r   test_incremental_surrogatepass  s    z'ReadTest.test_incremental_surrogatepassN)r   r   r   rX   rp   rz   r|   r   r   r   r   r   r   r   r   r   r   rE   j   s   +;0E,rE   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 )	UTF32Testutf-32little          ܀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r3   lookupr<   rZ   r[   r*   getvaluer:   spamlespamber   r.   r   _rb   r   r-   ry   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 )N   s   rZ   r[   r3   rN   r<   r   UnicodeErrorr.   r   r-   ry   r   r   r   test_badbom  s    

zUTF32Test.test_badbomc                 C   s   |  dg d d S )N    ÿĀ￿𐀀)rG   rG   rG   rG   rG   rG   rG    r   r   r       ÿr   r   r       ÿĀr   r   r       ÿĀ￿r   r   r   r   rX   r]   r   r   r   test_partial  s    zUTF32Test.test_partialc                 C   s0   |  dtddd |  dtddd d S N)r   r1      r   T)rG   r1   r   r   r3   utf_32_decoder]   r   r   r   test_handlers  s    zUTF32Test.test_handlersc                 C   s   |  ttjddd d S N   strictT)r   r   r3   r   r]   r   r   r   test_errors	  s    
zUTF32Test.test_errorsc                 C   s(   |  | jd| j |  | jd| j d S Nr   rA   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                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀r   s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    r   )r   Z
encoded_leZ
encoded_ber   r   r   test_issue8941  s    zUTF32Test.test_issue8941N)r   r   r   r<   sys	byteorderr   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 )UTF32LETest	utf-32-ler   c                 C   s   |  dg d d S Nr   )rG   rG   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   r   r   r   r   "  s    zUTF32LETest.test_partialc                 C   s   |  d| jd d S )N   𐈃s    r   rC   r<   r]   r   r   r   test_simple=  s    zUTF32LETest.test_simplec                 C   s   |  ttjddd d S r   )r   r   r3   utf_32_le_decoder]   r   r   r   r   @  s    
zUTF32LETest.test_errorsc                 C   s   d}|  dt|d  d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   r   )r   r3   r   r   rW   r   r   r   r   D  s    zUTF32LETest.test_issue8941N	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 )UTF32BETest	utf-32-ber   c                 C   s   |  dg d d S r   r   r]   r   r   r   r   P  s    zUTF32BETest.test_partialc                 C   s   |  d| jd d S )Nr   s    r   r]   r   r   r   r   k  s    zUTF32BETest.test_simplec                 C   s   |  ttjddd d S r   )r   r   r3   utf_32_be_decoder]   r   r   r   r   n  s    
zUTF32BETest.test_errorsc                 C   s   d}|  dt|d  d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   r   )r   r3   r   r   r   r   r   r   r  s    zUTF32BETest.test_issue8941Nr   r   r   r   r   r   L  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 )	UTF16Testutf-16r         ܀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 r   r   r   r   r   r   r     s    


zUTF16Test.test_only_one_bomc                 C   sT   t d}t| j|}| t|j t d}t| j|}| t|j d S )Ns   r   r   r   r   r   r   r     s    

zUTF16Test.test_badbomc                 C   s   |  dg d d S )Nr   )rG   rG   rG   r   r   r   r   r   r   r   r   r   r   r   r   r]   r   r   r   r     s    zUTF16Test.test_partialc                 C   s0   |  dtddd |  dtddd d S r   )r   r3   utf_16_decoder]   r   r   r   r     s    zUTF16Test.test_handlersc                 C   s   |  ttjddd d S r   )r   r   r3   r   r]   r   r   r   r     s    
zUTF16Test.test_errorsc                 C   s(   |  | jd| j |  | jd| j d S 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    n1 sL0    Y  tdt	f$ t
jtjd| jd}W d    n1 s0    Y  |  | | | W d    n1 s0    Y  d S )NzHello
world
wbrG   Ur<   )rC   r<   
addCleanupr   unlinkTESTFNopenr*   Zcheck_warningsDeprecationWarningr3   r   r.   )r   r   r-   fprb   r   r   r   test_bug691291  s    (2zUTF16Test.test_bug691291N)r   r   r   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z  s   
	r   c                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
UTF16LETest	utf-16-ler   c                 C   s   |  dg d d S Nr   )rG   r   r   r   r   r   r   r   r   r   r   r   r   r]   r   r   r   r     s    zUTF16LETest.test_partialc                 C   sB   g d}|D ]0\}}|  ttj|dd | |dd| qd S )N)r   r   )s   A Z   A�)s	   A B C D Z   ABCD�)s    r   )s    Ar   )s    A    �A)s    A r   r   Tzutf-16ler   )r   r   r3   utf_16_le_decoder   r5   r   testsrawexpectedr   r   r   r     s    	
zUTF16LETest.test_errorsc                 C   s,   |  d| jd |  d| jd d S )Nr   s    ީr   rC   r<   r5   r]   r   r   r   test_nonbmp  s    zUTF16LETest.test_nonbmpNr   r   r   r<   r   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 )
UTF16BETest	utf-16-ber   c                 C   s   |  dg d d S r   r   r]   r   r   r   r      s    zUTF16BETest.test_partialc                 C   sB   g d}|D ]0\}}|  ttj|dd | |dd| qd S )N)r   )s    Ar   )s	    A B C DZr   )s    r   )s    r   )s     Ar   )s     Ar   r   Tzutf-16ber   )r   r   r3   utf_16_be_decoder   r5   r   r   r   r   r     s    	
zUTF16BETest.test_errorsc                 C   s,   |  d| jd |  d| jd d S )Nr   s    r   r]   r   r   r   r   "  s    zUTF16BETest.test_nonbmpNr   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 )UTF8Testutf-8s   u	   ���rF   c                 C   s   |  dg d d S )N    ÿ߿ࠀ￿𐀀)r   r   r   r       ÿ߿r   r       ÿ߿ࠀr   r       ÿ߿ࠀ￿r   r   r   r   r   r]   r   r   r   r   .  s    zUTF8Test.test_partialc                 C   s    d}|  | j||| j d S )Nu    ÿĀ߿ࠀ￿􏿿)rA   r<   rC   )r   r=   r   r   r   r   D  s    zUTF8Test.test_decoder_statec              	   C   sZ   dD ]P\}}}| j |||d& | || j|| W d    q1 sJ0    Y  qd S )N)   []r   r   )r  r   u   [��])r  surrogateescape   [])r  r   z
[\x80\xff]rr   error_handlerr   )subTestr   r5   r<   r   rr   r  r   r   r   r   test_decode_errorI  s    zUTF8Test.test_decode_errorc                    s   t    | d| jd| jd  | t}d| jd W d    n1 sT0    Y  |j}| |j	|j
|j d d S )Nr   r  s   []u   []u   )superr   r   rC   r<   BOMr   r   	exceptionobjectstartend)r   cmexc	__class__r   r   r   U  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    n1 s0    Y  | t	 d	| jd W d    n1 s0    Y  d S )
Nu	   abcdefr   s	   abcdefu   𐿿s   𐿿r   s   []s   abcs   abcz)
r   rC   r<   r  r5   r:   r3   lookup_errorr   r   r]   r   r   r   test_surrogatepass_handlera  s(    ,z#UTF8Test.test_surrogatepass_handlerc              	   C   s   g d}dD ]}dD ]}| ||  qq|d |D ]N}| j|d. t| j }| t|j| W d    q81 s|0    Y  q8d S )N)                  r   )         s      s      s   s      s   s   )   r  )s   s   s   s   s   s   s   rr   )	ra   extendr  r3   r4   r<   r   r   r5   )r   Zcasesprefixsuffixrr   r   r   r   r   test_incremental_errorst  s    
z UTF8Test.test_incremental_errors)r   r   r   r<   r   r   r  r   r   r	  r   r  r'  __classcell__r   r   r  r   r   (  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 )UTF7Test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 	
rG      +sX   +AAAAAQACAAMABAAFAAYABwAIAAsADAAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwBcAH4Afw-)	r   rC   r<   r5   rR   sortedsetrI   r2   )r   Zset_dZset_owsZother_asciir   r   r   
test_ascii  s"    zUTF7Test.test_asciic                 C   s   |  dg d d S )N   a+-b cdĀe𐀀f) rl   rl   a+za+-a+-br4  r4  r4  r4  za+-b a+-b cr5  r5  r5  r5  u   a+-b c	   a+-b cdr6  r6  r6  r6  u   a+-b cdĀ   a+-b cdĀer7  r7  r7  r7  r7  r7  r7  u   a+-b cdĀe𐀀r2  r   r]   r   r   r   r     s    zUTF7Test.test_partialc              	   C   sn   g d}|D ]\\}}| j |d8 | ttj|dd | |dd| W d    q1 s^0    Y  qd S )N))s   bu   �b)s   ab   a�b)s   abu   a��b)s   a+IK   a�)s   a+IK-br8  )s   a+IK,br8  )s   a+IKx   a€�)s   a+IKx-b   a€�b)s   a+IKwgrr:  )s	   a+IKwgr-br;  )s   a+IKwgr,r:  )s
   a+IKwgr,-bu	   a€�-b)s   a+IKwgrB
   a€€�)s
   a+IKwgrB-b   a€€�b)s
   a+/,+IKw-b   a�€b)s   a+//,+IKw-br>  )s   a+///,+IKw-b   a￿�€b)s   a+////,+IKw-br?  )s   a+IKw-bu   a€b�)s   a+IKwbr;  )s   a+@br8  r   r   Tr*  r   )r  r   r   r3   utf_7_decoder   r5   r   r   r   r   r     s    
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   +IKwgrNgB3KAr   r]   r   r   r   r     s     zUTF7Test.test_nonbmpc              	   C   sZ   g d}|D ]H\}}| j |d$ | |dd| W d    q1 sJ0    Y  qd S )N))s   a+2AE-bu   ab)s   a+2AEbr8  )s   a+2AEr9  )s   a+2AEA-br8  )s   a+2AH-br8  )s
   a+IKzYAQ-bu   a€b)s
   a+IKzYAQbr;  )s   a+IKzYAQA-br;  )s
   a+IKzYAd-br;  )s   a+IKwgrNgB-bu   a€€b)s   a+IKwgrNgBbr=  )s
   a+IKwgrNgBr<  )s   a+IKwgrNgBA-br=  r@  r*  r   r  r   r5   r   r   r   r   r     s    zUTF7Test.test_lone_surrogatesN)	r   r   r   r<   r1  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)r   r   r3   utf_16_ex_decoder]   r   r   r   r     s    zUTF16ExTest.test_errorsc                 C   s   |  ttj d S r   )r   	TypeErrorr3   rD  r]   r   r   r   test_bad_args  s    zUTF16ExTest.test_bad_argsN)r   r   r   r   rF  r   r   r   r   rC    s   rC  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   r      spam)rH     )arrayr   r3   readbuffer_encode)r   rJ  r   r   r   
test_array  s
    zReadBufferTest.test_arrayc                 C   s   |  tdd d S )NrG   rF   r   )r   r3   rK  r]   r   r   r   
test_empty  s    zReadBufferTest.test_emptyc                 C   s"   |  ttj |  ttjd d S N*   )r   rE  r3   rK  r]   r   r   r   rF     s    zReadBufferTest.test_bad_argsN)r   r   r   rL  rN  rF  r   r   r   r   rG    s   rG  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 )UTF8SigTest	utf-8-sigc                 C   s   |  dg d d S )N   ﻿ ÿ߿ࠀ￿𐀀)rG   rG   rG   rG   rG   u   ﻿   ﻿ rT     ﻿ ÿrU     ﻿ ÿ߿rV  rV     ﻿ ÿ߿ࠀrW  rW     ﻿ ÿ߿ࠀ￿rX  rX  rX  rS  r   r]   r   r   r   r   (  s    zUTF8SigTest.test_partialc                 C   s   |  tddd d S )N   ﻿rR  rG   r   strr]   r   r   r   test_bug1601501D  s    zUTF8SigTest.test_bug1601501c                 C   s,   t d }d}| ||d| d S )NrR  r   )r3   r4   r   r5   rC   )r   r?   r-   r   r   r   test_bomH  s    zUTF8SigTest.test_bomc           	      C   s   d}t jd }t d}d gttdd g d D ]\}|t|}t }|d urb||}n| }|spq||	| qN|
 }| || q4d S Nu   ABC¡∀XYZs   ABC¡∀XYZrR  r1      )@   r,     i   i   )r3   BOM_UTF8rN   listr2   rZ   r[   StringIOr.   r*   r   r   	r   Z	unistringZ
bytestringrb   sizehintZistreamZostreamrr   Zgotr   r   r   test_stream_bomM  s     

zUTF8SigTest.test_stream_bomc           	      C   s   d}d}t d}d gttdd g d D ]\}|t|}t }|d ur\||}n| }|sjqv|| qH|	 }| 
|| q.d S r^  )r3   rN   rc  r2   rZ   r[   rd  r.   r*   r   r   re  r   r   r   test_stream_barec  s     
zUTF8SigTest.test_stream_bareN)r   r   r   r<   r3   rb  r  r   r\  r]  rg  rh  r   r   r   r   rQ  $  s   rQ  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 )NrF   rM  )r   r3   escape_decode	bytearrayr]   r   r   r   rN  {  s    zEscapeDecodeTest.test_emptyc                 C   sF   t j}tdD ]2}t|g}|dkr| ||d |d df qd S )Nra     \   0r   )r3   rj  r2   rI   r   r   r5   r   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! td%d&D ]}t|g}|d'vr8| t" |d(| d(|  W d    n1 s.0    Y  | t* |d(|  d(|   W d    q1 st0    Y  q| t |d)d) W d    n1 s0    Y  | t |d*d* W d    n1 s0    Y  | t |d+d+ W d    n1 s0    Y  d S ),N   [\
]   []   [\"]s   ["]   [\']s   [']   [\\]s   [\]   [\a]s   []   [\b]s   []   [\t]s   [	]   [\n]s   [
]   [\v]s   []   [\f]s   []   [\r]s   []   [\7]   [\78]s   [8]   [\41]s   [!]   [\418]s   [!8]   [\101]s   [A]   [\1010]s   [A0]s   [\501]   [\x41]   [\x410]a   {   s   abfnrtvxrl     \8   \9   \)r3   rj  r   r2   rI   assertWarnsr   upperr   r5   r   r>   r   r   r   r   test_escape  sF    






















2<**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]\xr   )rq  rv   r   )   [?]?rv   s   \x0s   [\x0]s   [\x0]\x0)rq     )r  r  )r3   rj  r   
ValueErrorr   )r   r5   r   r   r   r     s    zEscapeDecodeTest.test_errorsN)r   r   r   rN  ro  r  r   r   r   r   r   ri  z  s   %ri  ))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d ZdS )PunycodeTestc                 C   s8   t D ].\}}| t|dd t|d  qd S Npunycoder+  )punycode_testcasesr   r[  rC   lowerr   Zunipunyr   r   r   test_encode%  s
    zPunycodeTest.test_encodec                 C   sF   t D ]<\}}| ||d |dd}| ||d qd S r  )r  r   r5   rC   r  r   r   r   test_decode1  s    zPunycodeTest.test_decodec              	   C   s   ddt  fdg}|D ]j\}}}| j||dB t|trL| t |jd| n| |d|| W d    q1 st0    Y  qd S )N   xn--w&r   )r  r   zxn-)r  errorsr  )r   r  
isinstance	Exceptionr   r5   r   )r   Z	testcasesr  r  r   r   r   r   test_decode_invalid7  s    

z PunycodeTest.test_decode_invalidN)r   r   r   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   ᾶι)   ǰr  )   ΐr  )   ΰr  )   ẖr  )   ὖr  )    r  )s    r  )s    N)s    r  )s   ​rF   )s   　r  )   r  )s   N)s   ᠎N)rY  rF   )s   𝅵N)s   N)s   󱈴N)s   􏈴N)s   򏿾N)s   􏿿N)s   N)s   �N)s   ⿵N)s   ́s   ́)s   ‎N)s   ‪N)s   󠀁N)s   󠁂N)s   foo־barN)s	   fooﵐbarN)s	   fooﹶbars	   foo َbar)s   ا1N)   ا1بr  r  )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} ttD ]\}\}}|d u r*qt|dd}|d u rN| t|| qt|dd}z| ||| W q ty } z&t	
d|d t|f W Y d }~qd }~0 0 qd S )Nr   )nameprepr   r   zTest 3.%d: %sr1   )Zencodings.idnar  ro   nameprep_testsr[  r   r   r   r  r   Z
TestFailed)r   r  posZorigZpreppeder   r   r   test_nameprep  s    zNameprepTest.test_nameprepN)r   r   r   r  r   r   r   r   r    s   r  c                   @   sD   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S )IDNACodecTestc                 C   sL   |  tddd |  tddd |  tddd |  tddd	 d S )
N
   python.orgidna
python.org   python.org.python.org.   xn--pythn-mua.org   pythön.org   xn--pythn-mua.org.   pythön.org.rZ  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 )
Nr  r  r  r  r  r  r  r  r  r   rC   r]   r   r   r   test_builtin_encode  s    z!IDNACodecTest.test_builtin_encodec                 C   sp   |  td dd W d    n1 s,0    Y  |  td dd W d    n1 sb0    Y  d S )Nztoo longsT  xn--016caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  sN   xn--016caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)assertRaisesRegexr   r5   r]   r   r   r    test_builtin_decode_length_limit  s    (z.IDNACodecTest.test_builtin_decode_length_limitc                 C   s2   t dtd}|d | | d d S )Nr     abc   rG   )r3   rN   rZ   r[   r.   r   )r   rU   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 )NrG   c                 s   s   | ]}t |gV  qd S r   rH   rJ   r   r   r   r     rF   z8IDNACodecTest.test_incremental_decode.<locals>.<genexpr>r  r  r  c                 s   s   | ]}t |gV  qd S r   rH   rJ   r   r   r   r     rF   r  r  c                 s   s   | ]}t |gV  qd S r   rH   rJ   r   r   r   r     rF   r  r  c                 s   s   | ]}t |gV  qd S r   rH   rJ   r   r   r   r     rF   s   xn--xams	   ple-9ta.ou	   äxample.s   rgrF   TZorgs   rg.zorg.)r   rR   r3   rS   r4   r5   rQ   )r   decoderr   r   r   test_incremental_decode
  s4    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 )NrF   r  r  r  r  r  r  r  u   äxz	ample.orgs   xn--xample-9ta.rG   Ts   orgz
ample.org.s   xn--xample-9ta.org.)r   rR   r3   
iterencoderB   rC   rQ   )r   encoderr   r   r   test_incremental_encode(  s0    z%IDNACodecTest.test_incremental_encodec                 C   sJ   d dd ddd dD ](}| tdj d| | tdjd| qdS )z$Only supports "strict" error handlerr  r  r   r  )r   r   r   r  N)rC   r5   r   r  r   r  r   r   r   r   D  s    zIDNACodecTest.test_errorsN)
r   r   r   r  r  r  r  r  r  r   r   r   r   r   r    s   r  c                   @   st   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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 )N   latin-1   äöür  abcr   r+  objr<      []r   r  r   )r   r3   r5   r   rE  r   r]   r   r   r   r  Q  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 )Nr  r  r  r}   __spam__r  r  u   ÿffr+  r     [ÿ]r   r  rq  )r   r3   rC   r   rE  LookupErrorr   r]   r   r   r   r  ^  s    zCodecsModuleTest.test_encodec                 C   s"   |  ttj |  ttjd d S rO  )r   rE  r3   registerr]   r   r   r   test_registerl  s    zCodecsModuleTest.test_registerc                 C   s2   |  ttj |  ttjd |  ttjd d S )Nr   )r   rE  r3   r   r  r]   r   r   r   test_lookupp  s    zCodecsModuleTest.test_lookupc                 C   s"   |  ttj |  ttjd d S Nr  )r   rE  r3   
getencoderr  r]   r   r   r   test_getencoderu  s    z CodecsModuleTest.test_getencoderc                 C   s"   |  ttj |  ttjd d S r  )r   rE  r3   
getdecoderr  r]   r   r   r   test_getdecodery  s    z CodecsModuleTest.test_getdecoderc                 C   s"   |  ttj |  ttjd d S r  )r   rE  r3   rN   r  r]   r   r   r   test_getreader}  s    zCodecsModuleTest.test_getreaderc                 C   s"   |  ttj |  ttjd d S r  )r   rE  r3   r~   r  r]   r   r   r   test_getwriter  s    zCodecsModuleTest.test_getwriterc                 C   sl   t t j}| t jt j| zt t jd W n t jyN   | d Y n0 td}| |j	d d S )Ntr_TRztest needs Turkish localeASCIIr+  )
locale	setlocaleLC_CTYPEr   ErrorskipTestr3   r   r   name)r   Z	oldlocalerL   r   r   r   test_lookup_issue1813  s    
z&CodecsModuleTest.test_lookup_issue1813c                 C   s,   d}|  |tj tjD ]}tt| qd S )N),rC   r5   r  	CodecInfoCodecIncrementalEncoderIncrementalDecoderStreamReaderStreamWriterr   r  r  rB   r4   rN   r~   register_errorr  strict_errorsreplace_errorsignore_errorsxmlcharrefreplace_errorsbackslashreplace_errorsnamereplace_errorsr   EncodedFiler  rS   r  BOM_BEBOM_LErb  	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assertCountEqualr3   __all__getattr)r   Zapir   r   r   test_all  s    
zCodecsModuleTest.test_allc              
   C   s   |  tjtj dD ]l}| |N ttj|d}| |tj W d    n1 sX0    Y  W d    q1 sv0    Y  qd S )N)wrU   zr+w+rl   r3  r+  )	r   r   r   r   r  r3   r   r7   r  )r   modefiler   r   r   	test_open  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 dD ],}|  ttjdd| |  ttjdd| qLd S )Nr  Z	undefinedr  rG   rF   )r   r   r   r   )r   r   r3   rC   r5   r  r   r   r   test_undefined  s    

zCodecsModuleTest.test_undefinedc              	   C   s~   t  }t d|V}| t  ttjdd W d    n1 sF0    Y  | j	
  W d    n1 sp0    Y  d S )Nzbuiltins.openZwtzinvalid-encoding)r   	mock_openpatchr   r  r3   r   r   r   closeZassert_called)r   r
  r  r   r   r   'test_file_closes_if_lookup_error_raised  s
    .z8CodecsModuleTest.test_file_closes_if_lookup_error_raisedN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r	  r  r   r   r   r   r  O  s   r  c                   @   s   e Zd Zdd Zdd ZdS )StreamReaderTestc                 C   s   t d| _td| _d S )Nr      한
글)r3   rN   rb   rZ   r[   r\   r]   r   r   r   setUp  s    zStreamReaderTest.setUpc                 C   s$   |  | j}| | ddg d S )Nu   한
u   글)rb   r\   r   rx   )r   ry   r   r   r   test_readlines  s    zStreamReaderTest.test_readlinesN)r   r   r   r  r  r   r   r   r   r    s   r  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 )Nr  r   r   s   \
  r     ü   )rZ   r[   r3   r  r   r.   r*   r   r   ry   Zefr   r   r   
test_basic  s    

zEncodedFileTest.test_basicN)r   r   r   r  r   r   r   r   r    s   r  )er+  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_escapeutf_16	utf_16_be	utf_16_leutf_7utf_8Zmbcs_encodembcsZ
oem_encodeZoemr  c                   @   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}t D ]}t|j}|dr.|d7 }n|dkr:d}| |dd|dd t||\}}| |t|d|  t	||\}}| ||d|  |t
vrVtd}t||}d}	|D ]6}
||
 | }| t|tu t| |	|7 }	qtd}t||}d}|	D ]"}
|t|
g || 7 }q | ||d|  |t
vrzt| W n ty   Y n0 d}	|D ]}
|	|
7 }	q|	dd	7 }	t|  d}|	D ]}
| t|
g7 }q| dd	7 }| ||d|  dtt|||}| ||d|  dttd||}| |d |d
vrzt|dW n ty   Y q0 dfdd|D }	t|d d fdd|	D }| ||d|  qd S )Nabc123Z_codecr_  r   -encoding=%rrF   rG   Tr  rp  r   c                 3   s   | ]}  |V  qd S r   rC   rJ   )r  r   r   r     rF   z/BasicUnicodeTest.test_basics.<locals>.<genexpr>c                 3   s   | ]}  t|gV  qd S r   r5   rI   rJ   )r  r   r   r     s   )all_unicode_encodingsr3   r   r  endswithr   r   r  r   r  broken_unicode_with_statefulr$   r~   r*   r.   r:   typerI   rN   rB   r  rC   r4   r5   rR   rS   r  )r   r-   r<   r  r   r,   r)   rT   r   encodedresultrL   chunkrb   decodedresultrV   r   )r  r  r   test_basicsS  s    





zBasicUnicodeTest.test_basicsc              	      s2  d}t D ]"}|tvrzt|W n ty6   Y n|0 d}|D ]}||7 }q@|dd7 }t| d}|D ]}| t|g7 }qv| dd7 }| 	||d|  |dvrzt|dW n ty   Y q0 d
fdd	|D }t|d d
 fd
d	|D }| 	||d|  qd S )Nrr  rF   rG   Trt  ru  r   c                 3   s   | ]}  |V  qd S r   rv  rJ   )cencoderr   r   r     rF   z4BasicUnicodeTest.test_basics_capi.<locals>.<genexpr>c                 3   s   | ]}  t|gV  qd S r   rw  rJ   )cdecoderr   r   r     s   )rx  rz  	_testcapiZcodec_incrementalencoderr  rC   Zcodec_incrementaldecoderr5   rI   r   rR   )r   r-   r<   r|  rL   r~  r   )r  r  r   test_basics_capi  s@    

z!BasicUnicodeTest.test_basics_capic                 C   sr   dd }t D ]`}|dkrq|tv r$qt|t||}tdD ]$}|dd |	 }| 
|| qFqd S )Nz%s
%s
)AX  abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123AX  def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456r  ru   r   )rx  rz  r3   rN   rZ   r[   rC   r2   seekr.   r   )r   r-   r<   rb   trr   r   r   r   	test_seek  s    zBasicUnicodeTest.test_seekc                 C   s:   t D ]0}t|}| t| |dvr| t|d qd S )N)r  r  rP  )rx  r3   r  r   rE  )r   r<   r  r   r   r   test_bad_decode_args  s
    
z%BasicUnicodeTest.test_bad_decode_argsc                 C   s$   t D ]}t|}| t| qd S r   )rx  r3   r  r   rE  )r   r<   r  r   r   r   test_bad_encode_args  s    
z%BasicUnicodeTest.test_bad_encode_argsc                 C   s&   ddl m} t|j}| || d S )Nr   )r  )	encodingsr  r{  Zencoding_tabler   )r   r  Z
table_typer   r   r   "test_encoding_map_type_initialized  s    
z3BasicUnicodeTest.test_encoding_map_type_initializedc                 C   sB   d}t D ]4}|tvr| |||| | |||| qd S )Nrr  )rx  rz  rA   rC   rD   )r   r=   r<   r   r   r   r     s
    z#BasicUnicodeTest.test_decoder_stateN)r   r   r   r  r   Zcpython_onlyr  r  r  r  r  r   r   r   r   r   rq  R  s   M
%rq  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 )N    r   r  r  r     􏿿bcr  r  abu   ab￾r   u   ab�r  r   zab\x02r  r   r  r  ra  rG   )r   r3   charmap_decoder   r   rI   r2   r   r   Zallbytesr   r   r   test_decode_with_string_map  sV    


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 | t	dtjdddd	dd | t	dtjdddd	dd d S )Nr  r   rl   r   rL   r   r1   r   r  ZAaZBbZCc)ZAaBbCcr     􏿿r  rG   r  r   r1   u   ￾r   r  r   r  r   ra  z.character mapping must be in range\(0x110000\)r   iɚ;)
r   r3   r  r   r   rI   r2   r   r  rE  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 )Nrl   r   rL   r  r   r  r  i r  Zbcr  r1   r  i  r   r  r   r  r   r  )
ordr   r3   r  r   
maxunicodechrr   rE  r   )r   rl   r   rL   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    s   7tr  c                   @   s   e Zd Zdd Zdd ZdS )WithStmtTestc                 C   sX   t d}t|dd }| | d W d    n1 s>0    Y  | |j d S )Nr  r  r   r  )rZ   r[   r3   r  r   r.   r:   closedr  r   r   r   test_encodedfile  s    
.zWithStmtTest.test_encodedfilec                 C   s\   t d}td}t||j|jd }| | d W d    n1 sN0    Y  d S )Nr  r   r      ü)	rZ   r[   r3   r   r  streamreaderstreamwriterr   r.   )r   ry   r"   srwr   r   r   test_streamreaderwriter  s    


z$WithStmtTest.test_streamreaderwriterN)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 )	TypesTestc                 C   sf   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 |D ]}| t|d qNd S )Nmbcs_decodern   )r3   rA  utf_8_decoder   r   rD  r   r   r   utf_32_ex_decodelatin_1_decodeascii_decoder  hasattrra   r  r   rE  )r   Zdecodersr  r   r   r   test_decode_unicode  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   ሴrv   s   \u1234
   \U00110000z
\U00110000r   r   rf   r   )z(\x5c\x55\x30\x30\x31\x31\x30\x30\x30\x30rf   )r   r3   unicode_escape_decoderaw_unicode_escape_decoder   r   r]   r   r   r   test_unicode_escape	  s    zTypesTest.test_unicode_escapeN)r   r   r   r  r  r   r   r   r   r    s   r  c                   @   sL   e Z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 )UnicodeEscapeTestzunicode-escapeNc                 C   s(   |  tdd |  tdd d S NrG   rM  rF   rG   r   )r   r3   unicode_escape_encoder  r]   r   r   r   rN  %	  s    zUnicodeEscapeTest.test_emptyc                 C   s@   t j}tddD ]*}|dkr| |t|t|gdf qd S )N       \   r1   )r3   r  r2   r   r  rI   r   rC   r   r   r   r   test_raw_encode)	  s    z!UnicodeEscapeTest.test_raw_encodec                 C   sF   t j}tdD ]2}|dkr| |t|gd t|d df qd S )Nra  r  rm  0r   )r3   r  r2   r   rI   r  rn  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 td	D ]&}t|d
vr@|t|d|   q@tddD ]}|t|d|   qr|dd |dd d S )N	s   \trg   s   \nri   s   \r\s   \\r  z	
r   r  ra     €   \u20ac   𝄠
   \U0001d120)r3   r  r   r2   r  rC   r   rC   r   r   r   r   r   test_escape_encode5	  s    





z$UnicodeEscapeTest.test_escape_encodec              	   C   sD  t j}t| |}|dd |dd |dd |dd |d	d
 |dd |dd |dd |dd |dd |dd |dd
 |dd |dd |dd |dd |d d! |d"d |d#d! |d$d% |d&d' td(d)D ]}t|g}|d*vrF| t& |d+| d,t|  W d    n1 s<0    Y  | d-vr| t. |d+|  d,t|d.   W d    q1 s0    Y  q| t |d/d0 W d    n1 s0    Y  | t |d1d2 W d    n1 s 0    Y  | t |d3d4 W d    n1 s60    Y  d S )5Nrp  r   rr  z["]rs  z[']rt  z[\]ru  z[]rv  z[]rw  z[	]rx  z[
]ry  z[]rz  z[]r{  z[]r|  r}  z[8]r~  z[!]r  z[!8]r  z[A]r  z[A0]r  r  r  r  r  r  r  r  s	   abfnrtuvxrl  r  s   UNr  r  z\8r  z\9r  u   \ú)	r3   r  r   r2   rI   r  r   r  r  r  r   r   r   test_escape_decodeD	  sJ    























6@**z$UnicodeEscapeTest.test_escape_decodec              	   C   s   t j}dD ]\}}t|D ]}| t|d| d|   | t|d| d|  d  d| d|  d | d|  }| ||ddt|f | ||d	d
t|f qq
| t|d | |ddd | |dd	d d S )N))   xr      urI     UrI  rl  rm     [\   ]   ]\r   r   r      [�]�r  rG   rf   r  )r3   r  r2   r   r   r   r   r   r5   rL   r?   r>   rr   r   r   r   test_decode_errorsk	  s"     
z$UnicodeEscapeTest.test_decode_errorsc                 C   s   |  dg d d S )N    	
\ÿ￿𐀀) rG   rG   rG   r   r    	r   	
r   	
r   	
\r  r  r      	
\ÿr  r  r  r  r  
    	
\ÿ￿r  r  r  r  r  r  r  r  r  r  r   r]   r   r   r   r   {	  s    zUnicodeEscapeTest.test_partialr   r   r   r<   r   rN  r  r  r  r  r  r   r   r   r   r   r   	  s   'r  c                   @   sL   e Z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 )RawUnicodeEscapeTestzraw-unicode-escapeNc                 C   s(   |  tdd |  tdd d S r  )r   r3   raw_unicode_escape_encoder  r]   r   r   r   rN  	  s    zRawUnicodeEscapeTest.test_emptyc                 C   s6   t j}tdD ]"}| |t|t|gdf qd S )Nra  r1   )r3   r  r2   r   r  rI   r  r   r   r   r  	  s    z$RawUnicodeEscapeTest.test_raw_encodec                 C   s>   t j}tdD ]*}| |t|gd t|d df qd S )Nra  rm  r  r   )r3   r  r2   r   rI   r  rn  r   r   r   r  	  s    z$RawUnicodeEscapeTest.test_raw_decodec                 C   sZ   t j}t| |}tdD ](}|dvr|dt| dt|g  q|dd |dd d S )	Nra     uUr  rl  r  r  r  r  )r3   r  r   r2   r  rI   r  r   r   r   r  	  s    

z'RawUnicodeEscapeTest.test_escape_encodec                 C   sZ   t j}t| |}tdD ](}|dvr|dt|g dt|  q|dd |dd d S )	Nra  r  rl  r  r  r  r  r  )r3   r  r   r2   rI   r  )r   r5   r   r   r   r   r   r  	  s    

z'RawUnicodeEscapeTest.test_escape_decodec              	   C   s   t j}dD ]\}}t|D ]}| t|d| d|   | t|d| d|  d  d| d|  d | d|  }| ||ddt|f | ||d	d
t|f qq
| t|d | |ddd | |dd	d d S )N)r  r  rl  rm  r  r  r  r   r   r   r  r  r  r  )r3   r  r2   r   r   r   r   r  r   r   r   r  	  s"     
z'RawUnicodeEscapeTest.test_decode_errorsc                 C   s   |  dg d d S )Nr  )r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r]   r   r   r   r   	  s    z!RawUnicodeEscapeTest.test_partialr  r   r   r   r   r  	  s   		r  c                   @   s   e Zd Zdd ZdS )EscapeEncodeTestc              	   C   s|   g d}|D ]F\}}| j |d" | t|| W d    q1 sH0    Y  q| ttjd | ttjtd d S )N))rF   rM  )   foobar)r  rv   )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  r#  r   rH  )r  r   r3   escape_encoder   rE  rk  )r   r   rr   outputr   r   r   r  	  s    
2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 )N   foobarr   r  	   foobars   u	   r   r5   rC   r]   r   r   r   	test_utf8
  s    zSurrogateEscapeTest.test_utf8c                 C   s,   |  dddd |  dddd d S )Nr  r+  r  r  r  r]   r   r   r   r1  
  s    zSurrogateEscapeTest.test_asciic                 C   s,   |  dddd |  dddd d S )Ns   foobarz
iso-8859-3r  u	   foobarr  r]   r   r   r   test_charmap
  s    z SurrogateEscapeTest.test_charmapc                 C   s   |  dddd d S )Nu   r  r  s   r  r]   r   r   r   test_latin1%
  s    zSurrogateEscapeTest.test_latin1N)r   r   r   r  r1  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 |D ]~}tjtjd|d`}|| || |d | |	 |d  |d | |	 |d  W d    n1 s0    Y  tjtjd|d\}||d  | 
| d |d || |d | |	 | W d    n1 s0    Y  tjtjd|dd}|j|d  | 
|j d |jd |j| |d | |	 | W d    n1 s0    Y  tjtjd|dP}|| ||  || |d | |	 |d  W d    n1 s0    Y  tjtjd|dX}|j| |j|j  |j| |d | |	 |d  W d    q1 s0    Y  qd S )NZ
1234567890)r   r   r   r   r   r   r  r   r   r   )r   r   r   r   r3   r   r*   r  r   r.   ZassertNotEqualtellr   )r   rr   r   r<   ry   r   r   r   
test_seek0,
  sJ    




2


0
0


4
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_codecrO   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}tD ]}| j|d` t||\}}| |t| t||\}}| |t| | || W d    q1 s0    Y  qd S )Nra  r   )	rI   r2   bytes_transform_encodingsr  r3   r  r   r   r  )r   Zbinputr<   or,   r>   r   r   r   r  
  s    zTransformCodecTest.test_basicsc              	   C   sn   t D ]d}| j|dD td|}t|t|}| }| |d W d    q1 s^0    Y  qd S Nr   r  )	r  r  r3   rC   rN   rZ   r[   r.   r   r   r<   sinrb   Zsoutr   r   r   	test_read
  s    zTransformCodecTest.test_readc              	   C   sn   t D ]d}| j|dD td|}t|t|}| }| |d W d    q1 s^0    Y  qd S r  )	r  r  r3   rC   rN   rZ   r[   r`   r   r  r   r   r   rp   
  s    z TransformCodecTest.test_readlinec              	   C   s   d}t D ]}| j|dx |}t|}t||}t||}| || t|}t||}| || t||}| || W d    q1 s0    Y  qd S )Ns   12345r   )r  r  
memoryviewr3   rC   r   r5   )r   Zoriginalr<   rr   viewZview_encodedZview_decodedr   r   r   test_buffer_api_usage
  s    z(TransformCodecTest.test_buffer_api_usagec              
   C   s   d}t D ]}| j|db d}||}| t|}|| W d    n1 sT0    Y  | |jj W d    q1 s0    Y  qd S )Nzbad input typer   zM{!r} is not a text encoding; use codecs.encode\(\) to handle arbitrary codecs)	r  r  formatr  r  rC   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    n1 s00    Y  d S )NzR^'rot_13' is not a text encoding; use codecs.encode\(\) to handle arbitrary codecszjust an example messager  )r  r  rC   r   r  r   r   r   .test_text_to_binary_blacklists_text_transforms
  s    zATransformCodecTest.test_text_to_binary_blacklists_text_transformsc              
   C   s   d}t D ]}| j|d t||}d}||}| t| || W d    n1 s`0    Y  | t| t|| W d    n1 s0    Y  W d    q1 s0    Y  qd S )Ns6   encode first to ensure we meet any format restrictionsr   zM{!r} is not a text encoding; use codecs.decode\(\) to handle arbitrary codecs)	r  r  r3   rC   r
  r  r  r5   rk  )r   rr   r<   Zencoded_datar  r  r   r   r   0test_binary_to_text_blacklists_binary_transforms
  s    
(zCTransformCodecTest.test_binary_to_text_blacklists_binary_transformsc              
   C   s   dt dfD ]x}| j|dX d}| t|}|d W d    n1 sN0    Y  | |jj W d    q1 sz0    Y  qd S )Ns	   immutables   mutable)r  zR^'rot_13' is not a text encoding; use codecs.decode\(\) to handle arbitrary codecsr  )rk  r  r  r  r5   r  r  r  )r   r  r  r  r   r   r   .test_binary_to_text_blacklists_text_transforms
  s    (zATransformCodecTest.test_binary_to_text_blacklists_text_transformszRequires zlib supportc                 C   sV   d}|  t|}tdd W d    n1 s20    Y  | |jjt|j d S )Nz(^decoding with 'zlib_codec' codec failed   hellor  r  r  r3   r5   r7   r  r  r{  r   r  r  r   r   r   !test_custom_zlib_error_is_wrapped
  s    *
z4TransformCodecTest.test_custom_zlib_error_is_wrappedc                 C   sV   d}|  t|}tdd W d    n1 s20    Y  | |jjt|j d S )Nz'^decoding with 'hex_codec' codec failedr  r  r  r  r   r   r    test_custom_hex_error_is_wrapped
  s    *
z3TransformCodecTest.test_custom_hex_error_is_wrappedc              
   C   sp   t  D ]b\}}t|j}|D ]H}| j|d( t|}| |j| W d    q 1 s^0    Y  q qd S )N)alias)transform_aliasesitemsr3   r   r  r  r   )r   
codec_namealiasesZexpected_namer  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
)r3   rC   r   r5   )r   rW   Z	unescapedr   r   r   test_quopri_stateless
  s    z(TransformCodecTest.test_quopri_statelessc                 C   s   |  ttjdd d S )NrF   zuu-codec)r   r  r3   r5   r]   r   r   r   test_uu_invalid  s    z"TransformCodecTest.test_uu_invalidN)r   r   r   r  r  rp   r	  r  r  r  r  unittest
skipUnlessr  r  r  r   r!  r"  r   r   r   r   r   
  s   


r   c                 C   s
   t | S r   )_TEST_CODECSgetr  r   r   r   _get_test_codec  s    r(  )_forget_codecc                 C   s   d S r   r   r'  r   r   r   r)    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 r   )	reprr[  idr  normalize_encodingr  r  RuntimeErrorobj_to_raise)r   Z	unique_idr   r   r   r     s    		zExceptionChainingTest.setUpc                 C   sD   t | jd  tj| jd  zt| j W n ty>   Y n0 d S r   )r%  popr  r  _cacher)  KeyErrorr]   r   r   r   tearDown5  s    zExceptionChainingTest.tearDownc                 C   s    t j||| jd}|t| j< d S )N)r  )r3   r  r  r%  )r   rC   r5   Z
codec_infor   r   r   	set_codec>  s    zExceptionChainingTest.set_codecc                 c   sj   d || j|j|}| ||}|V  W d    n1 s<0    Y  | |jj| | |jjj d S )Nz${} with {!r} codec failed \({}: {}\))	r
  r  r   r  r7   r  r  ZassertIsNotNone__traceback__)r   Z	operationexc_typer  Zfull_msgZcaughtr   r   r   assertWrappedC  s    $z#ExceptionChainingTest.assertWrappedc                 O   s
   | j d S r   r/  )r   argskwdsr   r   r   	raise_objL  s    zExceptionChainingTest.raise_objc                 C   s  || _ | | j| j | d|| d| j W d    n1 sF0    Y  | d|| td| j W d    n1 s0    Y  | d|| d| j W d    n1 s0    Y  | d|| td| j W d    n1 s0    Y  d S )Nr<   	str_inputZdecoding   bytes input)r/  r4  r;  r7  rC   r  r3   r5   )r   r/  r  r6  r   r   r   check_wrappedP  s    *,*z#ExceptionChainingTest.check_wrappedc                 C   s   |  td d S )NrG   r>  r.  r]   r   r   r   test_raise_by_type\  s    z(ExceptionChainingTest.test_raise_by_typec                 C   s   d}|  t|| d S )NThis should be wrappedr?  r  r   r   r   test_raise_by_value_  s    z)ExceptionChainingTest.test_raise_by_valuec                 C   s*   d}G dd dt }| |||| d S )NrA  c                   @   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   MyRuntimeErrore  s   rD  r.  r>  r   r  rD  r   r   r   )test_raise_grandchild_subclass_exact_sizec  s    z?ExceptionChainingTest.test_raise_grandchild_subclass_exact_sizec                 C   s*   d}G dd dt }| |||| d S )NrA  c                   @   s   e Zd ZdS )zVExceptionChainingTest.test_raise_subclass_with_weakref_support.<locals>.MyRuntimeErrorN)r   r   r   r   r   r   r   rD  k  s   rD  rE  rF  r   r   r   (test_raise_subclass_with_weakref_supporti  s    z>ExceptionChainingTest.test_raise_subclass_with_weakref_supportc                    s    fdd}|  || | t| d| j W d    n1 sF0    Y  | t| td| j W d    n1 s0    Y  | t| d| j W d    n1 s0    Y  | t| td| j W d    n1 s0    Y  d S )Nc                     s    d S r   r   r9  r:  r8  r   r   r;  p  s    z:ExceptionChainingTest.check_not_wrapped.<locals>.raise_obj	str inputr=  )r4  r  r.  rC   r  r3   r5   )r   r/  r  r;  r   r8  r   check_not_wrappedo  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 r   r   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   rL  rG   r.  rK  )r   rL  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 r   )r
  __new__)clsr  r   r   rO    s    zQExceptionChainingTest.test_new_override_is_not_wrapped.<locals>.CustomNew.__new__)r   r   r   rO  r(  r   r   r  r   	CustomNew  s   rQ  rG   rM  )r   rQ  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 wrappedr1   z^{}$)r.  attrrK  r
  )r   r  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 )Nr1   1rK  r.  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'\)$rl   r   rL   rV  )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    n1 s:0    Y  | t| td| j W d    n1 st0    Y  | t| d| j W d    n1 s0    Y  | t| td| j W d    n1 s0    Y  d S )Nz^unknown encoding: {}$rJ  r=  )r
  r  r  r  rC   r3   r5   r  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    n1 s0    Y  d	}|| j}| t| d
| j W d    n1 s0    Y  d S )Nc                  _   s   dS )N)
not bytes!r   r   rI  r   r   r   encode_to_str  s    zSExceptionChainingTest.test_unflagged_non_text_codec_handling.<locals>.encode_to_strc                  _   s   dS )N)   not str!r   r   rI  r   r   r   decode_to_bytes  s    zUExceptionChainingTest.test_unflagged_non_text_codec_handling.<locals>.decode_to_bytesrZ  r\  zd^{!r} encoder returned 'str' instead of 'bytes'; use codecs.encode\(\) to encode to arbitrary types$r<  zd^{!r} decoder returned 'bytes' instead of 'str'; use codecs.decode\(\) to decode to arbitrary types$r=  )	r4  r3   rC   r  r   r5   r
  r  rE  )r   r[  r]  rW   decodedr  r  r   r   r   &test_unflagged_non_text_codec_handling  s    *z<ExceptionChainingTest.test_unflagged_non_text_codec_handlingN)r   r   r   r  r3  r4  
contextlibcontextmanagerr7  r;  r.  r>  r@  rB  rG  rH  rK  rN  rR  rT  rW  rX  rY  r_  r   r   r   r   r*    s&   	
r*  win32z"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ejdddddd  Zd!S )"CodePageTest  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   rl      ar  )r   r  r3   code_page_encodecode_page_decodeOSErrorr]   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 )	Nr8       ÿs    r   TCP_UTF8r   )r  r   r3   rf  r   rg  rl  r]   r   r   r   test_code_page_name  s    z CodePageTest.test_code_page_namec                 C   s   |D ]\}}}|d urzt |||d}W n: tyd } z"| d||||f  W Y d }~n
d }~0 0 | |d |d||||d |f  | |d d | |d t| q| tt j|||d qd S )NTz2Unable to decode %a from "cp%s" with errors=%r: %sr   z%a.decode("cp%s", %r)=%a != %ar1   )	r3   rg  r   failr   ZassertGreaterEqualZassertLessEqualr   r   )r   r!   r   r   r  r   r^  errr   r   r   check_decode  s$    
zCodePageTest.check_decodec                 C   s   |D ]\}}}|d urzt |||}W n: tyb } z"| d||||f  W Y d }~n
d }~0 0 | |d |d||||d |f  | |d t| q| tt j||| qd S )Nz0Unable to encode %a to "cp%s" with errors=%r: %sr   z%a.encode("cp%s", %r)=%a != %ar1   )r3   rf  r   rn  r   r   r   )r   r!   r   textr  r   rW   ro  r   r   r   check_encode  s"    

zCodePageTest.check_encodec                 C   s   |  dd | dd d S )Nrj  )r  r   r  )   ｄ騾r      )rk  r   N)r  r   rq  )r  r   s   [y])u   [€]r   s   [?])r  r   s   [\xff])r  r   s)   [\N{LATIN SMALL LETTER Y WITH DIAERESIS}])r  r   s   [&#255;])u   r   N)   []r  r  )rv  r   N)r  r   r  )ru  r   rt  )r  r   N)r  r   r   )r  r   u   [�])r  r   z[\xff])r  r  rv  )r  r   N)    abcr   N)rx  r   z abc)rx  r   u   � abc)rx  r   z\x81 abcrr  rp  r]   r   r   r   
test_cp932  s    zCodePageTest.test_cp932c                 C   s   |  dd | dd d S )Ni  )rs  )   é€r      )rk  r   r   )   Łr   N)r}  r   rF   )r}  r      L)   r     )r  r   N)rw  )r|  r   r{  )r   r   rk  ry  r]   r   r   r   test_cp1252  s    zCodePageTest.test_cp1252c                 C   s    d}|  |d | |d d S )N  )rs  )r{  r      +AOkgrA-)r  r      +2//f/w-)r   r      +3IA-)r   r      +//0-)rw  )r  r   r{  )r  r   r  )r  r   r   )r  r   r   )s   [+/]r   r   )r  r   r  ry  r   r!   r   r   r   test_cp_utf7(  s    zCodePageTest.test_cp_utf7c                 C   s,   |  dd |  | jd | | jd d S )Nrj  ))   r      騾)r  r   u   �騾))   􏿿r   r  )r  r   u   �􏿿))	   [􏿿]r   s   [􏿿])r  r   s   [􏿿?])rp  rl  rr  r]   r   r   r   test_multibyte_encoding<  s    z$CodePageTest.test_multibyte_encodingc                 C   s   t jrtjd ddddddgtdd	d
R D ]>}t|r\| t	|ddd|  q2t jr2t
d|  q2| t	ddd d S )Nrg   i,  i-  i.  i1  i3  i5  i  i  r  r  r  r!   z  skipping cp=rP  )u	   r  )r   verboser   stdoutr*   r2   r#   r   r3   rg  printr  r   r   r   test_code_page_decode_flagsJ  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 )Nrj     r   Fr  s   )r  r   s   )u   騾騾rI  r  r  )r3   rg  r   )r   r^  r   r   r   test_incremental]  s"    zCodePageTest.test_incrementalc                 C   sJ   t jddd( td}| |jd W d    n1 s<0    Y  d S )Nz_winapi.GetACPr  )Zreturn_valueZcp123rp  )r   r  r3   r   r   r  )r   codecr   r   r   test_mbcs_aliasp  s    
zCodePageTest.test_mbcs_aliasl           F)r,   Zmemusedry_runc                 C   s   d|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   01234567r  r1   s
   r   rj  r  Tr   rf   Z
0123456701iu(   6701234567r   r   r3   rg  r   r,   rW   r^  r   r   r   test_large_inputw  s    zCodePageTest.test_large_inputrv   c                 C   s   d|d  }|  t||d d  td|dd}|  |d t| ~|  t|d | |  |d d d d	 |  |d d
d  d d S )Ns
   0123456턀r  rf   rd  r   Tr1   r   u   0123456턀01iu   56턀0123456턀r  r  r   r   r   test_large_utf8_input  s    z"CodePageTest.test_large_utf8_inputN)r   r   r   rl  ri  rm  rp  rr  rz  r  r  r  r  r  r  r   Z
bigmemtestr  r  r   r   r   r   rc    s    !
rc  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 )Nrr  r+  s   abc123r  r]   r   r   r   r    s    zASCIITest.test_encodec              	   C   sX   dD ]N\}}}| j |||d$ | |d|| W d    q1 sH0    Y  qd S )N))	   [ÿ€]r   rq  )r  r   s   [???])r  r   s   [&#128;&#255;&#8364;])u   [ÿ€򫳞]r   s   [\x80\xff\u20ac\U000abcde]r  r  r  r  r+  r  r   rC   r  r   r   r   test_encode_error  s    zASCIITest.test_encode_errorc                 C   s:   |  t ddd W d    n1 s,0    Y  d S )Nu   ÿr+  r  r   r   rC   r]   r   r   r   !test_encode_surrogateescape_error  s    z+ASCIITest.test_encode_surrogateescape_errorc                 C   s   |  ddd d S )Nr  r+  r  )r   r5   r]   r   r   r   r    s    zASCIITest.test_decodec              	   C   sX   dD ]N\}}}| j |||d$ | |d|| W d    q1 sH0    Y  qd S )Nr  r  r+  rB  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   sR   dD ]H\}}| j ||d" | |d| W d    q1 sB0    Y  qd S )N))r  r  )u   éÿs   rr   r   latin1r  r   rr   r   r   r   r   r    s    zLatin1Test.test_encodec              	   C   sX   dD ]N\}}}| j |||d$ | |d|| W d    q1 sH0    Y  qd S )N))   [€]r   rq  )r  r   s   [??])u	   [€򫳞]r   s   [\u20ac\U000abcde])r  r   s   [&#8364;&#56448;]r  r  r  r  r  r   r   r   test_encode_errors  s    zLatin1Test.test_encode_errorsc                 C   s:   |  t ddd W d    n1 s,0    Y  d S )Nu   €r  r  r  r]   r   r   r   r    s    z,Latin1Test.test_encode_surrogateescape_errorc              	   C   sR   dD ]H\}}| j ||d" | |d| W d    q1 sB0    Y  qd S )N))r  r  )r  u   [ÿ]r  r  rB  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+  re     bs   ab)rZ   r[   r3   r   r   rC   r5   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   àñér   )rZ   r[   r3   r   r   rC   r5   r  ro  r  r  r*   r   r   )r   r  r  r  rq  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
r   r   s   line1
r   s   line2
s   line3
rF   )rZ   r[   rC   r3   r  r   r`   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
r   r   r   s   
abc
s   789
r   s   1
s   abc
)	rZ   r[   rC   r3   r  r  r*   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  zneed _testcapi modulec                   @   s   e Zd ZdZe ZdZdZdZ	dddZ
dd	 Zd
d Zdd Zdd Zdd Zd ddZdd Zdd Zdd Zdd Zdd ZdS )!LocaleCodecTestzD
    Test indirectly _Py_DecodeUTF8Ex() and _Py_EncodeUTF8Ex().
    )r+  u   ulatin1:§éu   u255:ÿu   UCS:é€􏿿u   surrogates:)s
   blatin1:s   b255:u   r   c                 C   s   t |d|S r+   )r  ZEncodeLocaleEx)r   rq  r  r   r   r   rC     s    zLocaleCodecTest.encodec                 C   s   | j D ]}| j|d z|| j|}W n^ ty   | t}| || W d    n1 sd0    Y  t|j}| 	|d Y n0 | ||}| 
|| W d    q1 s0    Y  qd S )N)rq  z!encode error: pos=[0-9]+, reason=)STRINGSr  rC   ENCODINGr   r   r.  r[  r  ZassertRegexr   )r   r  rq  r   r  errmsgrW   r   r   r   check_encode_strings"  s    
*
z$LocaleCodecTest.check_encode_stringsc                 C   s   |  d d S Nr   r  r]   r   r   r   test_encode_strict0  s    z"LocaleCodecTest.test_encode_strictc                 C   s   |  d d S Nr  r  r]   r   r   r   test_encode_surrogateescape3  s    z+LocaleCodecTest.test_encode_surrogateescapec              
   C   sf   z|  dd W nF tyV } z.t|dkr@| | jd n W Y d }~n
d }~0 0 | d d S )NrG   r   unsupported error handlerz4 encoder doesn't support surrogatepass error handler)rC   r  r[  r  r  r  r   r  r   r   r   test_encode_surrogatepass6  s    z)LocaleCodecTest.test_encode_surrogatepassc                 C   sL   |  t}| dd W d    n1 s,0    Y  | t|jd d S )NrG   r   r  )r   r  rC   r   r[  r  r   r  r   r   r   %test_encode_unsupported_error_handlerB  s    *z5LocaleCodecTest.test_encode_unsupported_error_handlerc                 C   s   t |d|S r+   )r  ZDecodeLocaleEx)r   rW   r  r   r   r   r5   G  s    zLocaleCodecTest.decodec                 C   s\  | j dk}|rd}nd}t| j}| jD ]d}z$|| j |}||vrN|| W n tyf   d }Y n0 |r(|| j d}||kr(|| q(|D ]}| j|d z|| j |}W nf t	y   | 
t}	| || W d    n1 s0    Y  t|	j}
| |
d|
 Y n0 | ||}| || W d    q1 sL0    Y  qd S )Nr   r  r   r   )rW   zdecode error: )r  rc  BYTES_STRINGSr  rC   ra   r   r  r5   r   r   r.  r[  r  r:   
startswithr   )r   r  Zis_utf8Zencode_errorsstringsrq  rW   Zencoded2r   r  r  r^  r   r   r   check_decode_stringsJ  s6    



*
z$LocaleCodecTest.check_decode_stringsc                 C   s   |  d d S r  r  r]   r   r   r   test_decode_strictl  s    z"LocaleCodecTest.test_decode_strictc                 C   s   |  d d S r  r  r]   r   r   r   test_decode_surrogateescapeo  s    z+LocaleCodecTest.test_decode_surrogateescapec              
   C   sf   z|  dd W nF tyV } z.t|dkr@| | jd n W Y d }~n
d }~0 0 | d d S )NrF   r   r  z4 decoder doesn't support surrogatepass error handler)r5   r  r[  r  r  r  r  r   r   r   test_decode_surrogatepassr  s    z)LocaleCodecTest.test_decode_surrogatepassc                 C   sL   |  t}| dd W d    n1 s,0    Y  | t|jd d S )NrF   r   r  )r   r  r5   r   r[  r  r  r   r   r   %test_decode_unsupported_error_handler~  s    *z5LocaleCodecTest.test_decode_unsupported_error_handlerN)r   )r   )r   r   r   r/   r   getfilesystemencodingr  r  r  Z
SURROGATESrC   r  r  r  r  r  r5   r  r  r  r  r  r   r   r   r   r    s"   

"r  c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )	Rot13Testz"Test the educational ROT-13 codec.c                 C   s   t dd}| |d d S )NzCaesar liked ciphersrot-13zPnrfne yvxrq pvcuref)r3   rC   r   )r   
ciphertextr   r   r   r    s    zRot13Test.test_encodec                 C   s   t dd}| |d d S )NzRg gh, Oehgr?r  zEt tu, Brute?)r3   r5   r   )r   	plaintextr   r   r   r    s    zRot13Test.test_decodec                 C   s&   t d }|d}| |d d S )Nr  zABBA nag Cheryl BakerzNOON ant Purely Onxre)r3   rB   rC   r   )r   r  r  r   r   r   r    s    
z!Rot13Test.test_incremental_encodec                 C   s&   t d }|d}| |d d S )Nr  zterra Ares envy thazgreen Nerf rail gun)r3   r4   r5   r   )r   r  r  r   r   r   r    s    
z!Rot13Test.test_incremental_decodeN)r   r   r   r/   r  r  r  r  r   r   r   r   r    s
   r  c                   @   s   e Zd ZdZdd ZdS )Rot13UtilTestzTest the ROT-13 codec via rot13 function,
    i.e. the user has done something like:
    $ echo "Hello World" | python -m encodings.rot_13
    c                 C   sB   t d}t  }tj|| |d | }| |d d S )Nz)Gb or, be abg gb or, gung vf gur dhrfgvbar   z)To be, or not to be, that is the question)rZ   rd  r  r  r  r  r.   r   )r   ZinfileZoutfileZ
plain_textr   r   r   test_rot13_func  s    

zRot13UtilTest.test_rot13_funcN)r   r   r   r/   r  r   r   r   r   r    s   r  __main__)Sr3   r`  rZ   r  r   r#  r  r   testr   r  ImportErrorr    ZSIZEOF_WCHAR_TZsizeofZc_wcharr   r#   r  r$   r0   rE   ZTestCaser   r   r   r   r   r   r   r)  rC  rG  rQ  ri  r  r>   r   r  r+  r  r  r  r  r  r  r  rx  r  ra   rz  rq  r  r  r  r  r  r  r  r  r  r  r  r  r   r%  r(  r  _codecsr)  r*  r$  platformrc  r  r  r  ZskipIfr  r  r  r   mainr   r   r   r   <module>   s   

"  V`..V,,^ V>g! ]uh

  y) S"9



 
 # W'%.q
