o
    GXh                    @   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	 d dl
mZ d dl
mZ zd dlZW n eyE   dZY nw zd dlZW n eyY   dZdZY nw 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r	e)e*e' qG d+d, d,ejZ+g d-Z,G d.d/ d/ejZ-G d0d1 d1ejZ.G d2d3 d3ejZ/G d4d5 d5ejZ0G d6d7 d7ejZ1g d8Z2e3e d9rSe24d: e3e d;r^e24d< d=gZ5G d>d? d?ejeZ6G d@dA dAejZ7G dBdC dCejZ8G dDdE dEejZ9G dFdG dGeejZ:G dHdI dIeejZ;G dJdK dKejZ<G dLdM dMejZ=G dNdO dOejZ>g dPZ?dQdRgdSgg dTdUgdVgdWZ@zd dlAZAW n ey   dZAY nw e?4dX dYdZge@dX< zd dlBZBW n
 ey   Y nw e?4d[ d\ge@d[< G d]d^ d^ejZCi ZDd_d` ZEG dadb dbejZFeGejHdckddG dedf dfejZIG dgdh dhejZJG didj djejZKG dkdl dlejZLeMedu dmG dndo doejZNG dpdq dqejZOG drds dsejZPG dtdu duejZQeRdvkr}eS  dS dS )w    N)mock)support)	os_helper)warnings_helperc                    s    fdd}|S )Nc                    s     | |t| f d S N)assertEquallen)inputexpectcoderself :/opt/python-3.10.19/usr/lib/python3.10/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__9      
zQueue.__init__c                 C   s   |  j |7  _ d S r   r'   )r   charsr   r   r   write<      zQueue.writer   c                 C   sD   |dk r| j }| j d d | _ |S | j d | }| j |d  | _ |S Nr   r'   )r   sizesr   r   r   read?   s   z
Queue.readN)r   )r   r   r   __doc__r*   r-   r2   r   r   r   r   r&   5   s
    r&   c                   @      e Zd Zdd Zdd ZdS )MixInCheckStateHandlingc           	      C   s   t t|d D ]^}t| }||d | }| }| |d t |d sI||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ur1   idZpart1stateZpart2r   r   r   check_state_handling_decodeK   s   
z3MixInCheckStateHandling.check_state_handling_decodec           	      C   sz   t t|d D ]2}t| }||d | }| }t| }|| |||d  d}| |||  qd S )Nr6   T)r7   r	   r8   getincrementalencoderencoder;   r>   r   r@   r   r   r   check_state_handling_encodea   s   
z3MixInCheckStateHandling.check_state_handling_encodeN)r   r   r   rF   rI   r   r   r   r   r5   J   s    r5   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dD ]\}}|t|g || 7 }| 	|| q| 	| d | 	|j
d t| j }d}t|| j|ddD ]\}}||t|g7 }| 	|| qU| 	|ddd | 	|jd |  d}t|| j|ddD ]\}}||t|g7 }| 	|| q| 	|ddd | 	|jd || j}	| 	|dtdd |	D | j d S )N     Tstrictc                 S   s   g | ]}t |gqS r   bytes.0cr   r   r   
<listcomp>   s    z*ReadTest.check_partial.<locals>.<listcomp>)r&   r8   	getreaderrA   ziprH   r-   rP   r2   r   
bytebufferr9   r:   r)   resetjoin
iterdecode)
r   r
   ZpartialresultsqrresultrS   ZpartialresultrD   encodedr   r   r   check_partialm   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 ]\}}	||d d d |	  ||d d d  qC |d|dd|  |d|d	d| tdD ]U}
|D ]P}	d
|
d |	 d  } |}td
D ]} |jdd|
d |	   |jddd q |}td
D ]} |jd	d|
d   |jd	dd qqqd S )Nc                    s"   t |  j}t j|S r   ioBytesIOrH   rA   r8   rU   )r
   streamr   r   r   rU         z)ReadTest.test_readline.<locals>.getreaderTc                    s8    | }g }	 |j ||d}|sn|| qd|S )NT)r0   keepends|)readlineappendrY   )r
   rf   r0   readerlinesline)rU   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   あrL   rg   P   azxxx
rf   xxx)TN)r   	enumerateri   rY   r7   rh   )r   rm   r1   Z	sexpectedZsexpectednoendsZlineendsZvwZvworC   Zlineendr0   rj   r   )rU   r   r   test_readline   sV   





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.rL   c                     s"   t  j} tj| S r   r`   )rc   datar   r   r   rU      re   z8ReadTest.test_mixed_readline_and_read.<locals>.getreaderr   r6   d   (      )r0   r,      j   )rY   r   rh   r2   r	   	readlines)r   rk   rU   fr   ry   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 ]\}}| |||  qd 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<%
rp   zimport logging
z+log=logging.getLogger("Snakelets.logger")
rp   rp   zuser=self.SessionCtx.user
z-storageEngine=self.SessionCtx.storageEngine
rp   rp   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")
rp   zshowdate=None
rp   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                
rL   )	ra   rb   rY   rH   rA   r8   rU   rw   r   )r   r1   rc   rj   rC   rl   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 )NrK   zfooFru   fooz
barrL   ZbarZbazTro   zbarzfoo
)r&   r8   	getwriterrA   rU   r-   r   rh   )r   r[   writerrj   r   r   r   test_readlinequeueH  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.
rL   rH   rA   ra   rb   r8   rU   r   rh   )r   s1s2s3r1   rc   rj   r   r   r   test_bug1098990_ac  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.
rL   r   )	r   r   r   r   Zs4Zs5r1   rc   rj   r   r   r   test_bug1098990_bp  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|| |  qzd S )Nu      []backslashreplacez[\udc80]namereplacexmlcharrefreplacez
[&#56448;]ignore[]replacez[?]   []z[??]rL   ))   𐿿A)[])r   r      surrogatepassc                 s   s    | ]}d | V  qdS )\x%02xNr   )rR   br   r   r   	<genexpr>  s    z0ReadTest.test_lone_surrogates.<locals>.<genexpr>)assertRaisesUnicodeEncodeErrorrH   rA   r   r	   ill_formed_sequenceUnicodeDecodeErrorr:   ill_formed_sequence_replacerY   )	r   ZbombeforeZafterZbefore_sequenceZafter_sequenceZtest_stringZtest_sequencer   r   r   r   test_lone_surrogates  st   









zReadTest.test_lone_surrogatesc                 C   s   d | jd}tdt|D ]%}t| jd}| ||d | d | |||d  dd qd | jd}tdt|D ]$}t| jd}| ||d | d | |||d  d qBd S )Nu   r   r6   rL   Tu   )rH   rA   r7   r	   r8   r9   r   r:   )r   rz   rC   decr   r   r   test_incremental_surrogatepass  s   z'ReadTest.test_incremental_surrogatepassN)r   r   r   r_   rx   r   r   r   r   r   r   r   r   r   r   r   r   rJ   l   s    +;0E,rJ   c                   @   d   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      t | j\}}}}t }||}|d |d | }| || jkp+|| j	k t|}||}| 
| d d S Nspamspamspamr8   lookuprA   ra   rb   r-   getvaluer?   spamlespamber   r2   r   _rj   r   r1   r   rD   r   r   r   test_only_one_bom     


zUTF32Test.test_only_one_bomc                 C   T   t d}t| j|}| t|j t d}t| j|}| t|j d S )N   s   ra   rb   r8   rU   rA   r   UnicodeErrorr2   r   r1   r   r   r   r   test_badbom     

zUTF32Test.test_badbomc                 C      |  dg d d S )N    ÿĀ￿𐀀)rL   rL   rL   rL   rL   rL   rL    r   r   r       ÿr   r   r       ÿĀr   r   r       ÿĀ￿r   r   r   r   r_   rd   r   r   r   test_partial     zUTF32Test.test_partialc                 C   0   |  dtddd |  dtddd d S N)r   r6      r   T)rL   r6   r   r   r8   utf_32_decoderd   r   r   r   test_handlers     zUTF32Test.test_handlersc                 C      |  ttjddd d S N   rN   T)r   r   r8   r   rd   r   r   r   test_errors     
zUTF32Test.test_errorsc                 C   (   |  | jd| j |  | jd| j d S Nr   rF   rA   r   r   rd   r   r   r   test_decoder_state     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   rA   sys	byteorderr   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    
	r   c                   @   4   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   r   Nr   )rL   rL   rL   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   r   r   $  r   zUTF32LETest.test_partialc                 C      |  d| jd d S )N   𐈃s    r   rH   rA   rd   r   r   r   test_simple?     zUTF32LETest.test_simplec                 C   r   r   )r   r   r8   utf_32_le_decoderd   r   r   r   r   B  r   zUTF32LETest.test_errorsc                 C      d}|  dt|d  d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   r   )r   r8   r   r   r^   r   r   r   r   F     zUTF32LETest.test_issue8941N	r   r   r   rA   r   r   r   r   r   r   r   r   r   r          r   c                   @   r   )UTF32BETest	utf-32-ber   c                 C   r   r   r   rd   r   r   r   r   R  r   zUTF32BETest.test_partialc                 C   r   )Nr   s    r   rd   r   r   r   r   m  r   zUTF32BETest.test_simplec                 C   r   r   )r   r   r8   utf_32_be_decoderd   r   r   r   r   p  r   zUTF32BETest.test_errorsc                 C   r   )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   r   )r   r8   r   r   r   r   r   r   t  r   zUTF32BETest.test_issue8941Nr   r   r   r   r   r   N  r   r   c                   @   r   )	UTF16Testutf-16r         ܀s   s p a m s p a m s    s p a m s p a mc                 C   r   r   r   r   r   r   r   r     r   zUTF16Test.test_only_one_bomc                 C   r   )Ns   r   r   r   r   r   r   r     r   zUTF16Test.test_badbomc                 C   r   )Nr   )rL   rL   rL   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   r   r     r   zUTF16Test.test_partialc                 C   r   r   )r   r8   utf_16_decoderd   r   r   r   r     r   zUTF16Test.test_handlersc                 C   r   r   )r   r   r8   r   rd   r   r   r   r     r   zUTF16Test.test_errorsc                 C   r   r   r   rd   r   r   r   r     r   zUTF16Test.test_decoder_statec                 C   s   d}| | j}| tjtj ttjd}|| W d    n1 s&w   Y  t	dt
f tjtjd| jd}W d    n1 sGw   Y  | | | | W d    d S 1 sbw   Y  d S )NzHello
world
wbrL   UrA   )rH   rA   
addCleanupr   unlinkTESTFNopenr-   r   Zcheck_warningsDeprecationWarningr8   r   r2   )r   r   r1   fprj   r   r   r   test_bug691291  s   "zUTF16Test.test_bug691291N)r   r   r   rA   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   |  s    
	r   c                   @   ,   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   r   Nr   )rL   r   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   r   r     r   zUTF16LETest.test_partialc                 C   B   g d}|D ]\}}|  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  rN   Tzutf-16ler   )r   r   r8   utf_16_le_decoder   r:   r   testsrawexpectedr   r   r   r        	
zUTF16LETest.test_errorsc                 C   ,   |  d| jd |  d| jd d S )Nr   s    ީr   rH   rA   r:   rd   r   r   r   test_nonbmp     zUTF16LETest.test_nonbmpNr   r   r   rA   r   r   r   r  r   r   r   r   r        r  c                   @   r  )
UTF16BETest	utf-16-ber   c                 C   r   r  r   rd   r   r   r   r     r   zUTF16BETest.test_partialc                 C   r  )N)r  )s    Ar	  )s	    A B C DZr
  )s    r   )s    r   )s     Ar  )s     Ar  rN   Tzutf-16ber   )r   r   r8   utf_16_be_decoder   r:   r  r   r   r   r     r  zUTF16BETest.test_errorsc                 C   r  )Nr   s    r  rd   r   r   r   r  %  r  zUTF16BETest.test_nonbmpNr  r   r   r   r   r    r  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	   ���rK   c                 C   r   )N    ÿ߿ࠀ￿𐀀)r   r   r   r       ÿ߿r  r      ÿ߿ࠀr  r      ÿ߿ࠀ￿r   r   r   r  r   rd   r   r   r   r   1  r   zUTF8Test.test_partialc                 C   s    d}|  | j||| j d S )Nu    ÿĀ߿ࠀ￿􏿿)rF   rA   rH   )r   rB   r   r   r   r   G  s   zUTF8Test.test_decoder_statec              	   C   sZ   dD ](\}}}| j |||d | || j|| W d    n1 s%w   Y  qd S )N)   []r   r   )r"  r   u   [��])r"  surrogateescape   [])r"  r   z
[\x80\xff]rz   error_handlerr  )subTestr   r:   rA   r   rz   r&  r  r   r   r   test_decode_errorL  s   zUTF8Test.test_decode_errorc                    s   t    | d| jd| jd  | t}d| jd W d    n1 s*w   Y  |j}| |j	|j
|j d d S )Nr   r#  s   []u   []u   )superr   r   rH   rA   BOMr   r   	exceptionobjectstartend)r   cmexc	__class__r   r   r   X  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 s_w   Y  | t	 d	| jd W d    d S 1 s|w   Y  d S )
Nu	   abcdefr   s	   abcdefu   𐿿s   𐿿r   s   []s   abcs   abcz)
r   rH   rA   r+  r:   r?   r8   lookup_errorr   r   rd   r   r   r   test_surrogatepass_handlerd  s,   "z#UTF8Test.test_surrogatepass_handlerc              	   C   s   g d}dD ]}dD ]	}| ||  q
q|d |D ]'}| j|d t| j }| t|j| W d    n1 s>w   Y  qd S )N)                  r   )         s      s      s   s      s   s   )   r8  )s   s   s   s   s   s   s   rz   )	ri   extendr'  r8   r9   rA   r   r   r:   )r   casesprefixsuffixrz   r   r   r   r   test_incremental_errorsw  s   
z UTF8Test.test_incremental_errors)r   r   r   rA   r   r   r+  r   r   r)  r   r5  rH  __classcell__r   r   r2  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 	
rL      +sX   +AAAAAQACAAMABAAFAAYABwAIAAsADAAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwBcAH4Afw-)	r   rH   rA   r:   rY   sortedsetrP   r7   )r   Zset_dZset_owsZother_asciir   r   r   
test_ascii  s"   zUTF7Test.test_asciic                 C   r   )N   a+-b cdĀe𐀀f) rt   rt   a+za+-a+-brU  rU  rU  rU  za+-b a+-b crV  rV  rV  rV  u   a+-b c	   a+-b cdrW  rW  rW  rW  u   a+-b cdĀ   a+-b cdĀerX  rX  rX  rX  rX  rX  rX  u   a+-b cdĀe𐀀rS  r   rd   r   r   r   r     r   zUTF7Test.test_partialc              	   C   sn   g d}|D ].\}}| j |d | ttj|dd | |dd| W d    n1 s/w   Y  qd S )N))s   bu   �b)s   ab   a�b)s   abu   a��b)s   a+IK   a�)s   a+IK-brY  )s   a+IK,brY  )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+@brY  r  rN   TrK  r   )r'  r   r   r8   utf_7_decoder   r:   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  rd   r   r   r   r    s    zUTF7Test.test_nonbmpc              	   C   sZ   g d}|D ]$\}}| j |d | |dd| W d    n1 s%w   Y  qd S )N))s   a+2AE-bu   ab)s   a+2AEbrY  )s   a+2AErZ  )s   a+2AEA-brY  )s   a+2AH-brY  )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^  ra  rK  r   r'  r   r:   r  r   r   r   r     s   zUTF7Test.test_lone_surrogatesN)	r   r   r   rA   rR  r   r   r  r   r   r   r   r   rJ    s    'rJ  c                   @   r4   )UTF16ExTestc                 C   s   |  ttjdddd d S )Nr   rN   r   T)r   r   r8   utf_16_ex_decoderd   r   r   r   r     s   zUTF16ExTest.test_errorsc                 C   s   |  ttj d S r   )r   	TypeErrorr8   re  rd   r   r   r   test_bad_args  r.   zUTF16ExTest.test_bad_argsN)r   r   r   r   rg  r   r   r   r   rd    s    rd  c                   @   $   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)rj     )arrayr   r8   readbuffer_encode)r   rl  r   r   r   
test_array  s
   zReadBufferTest.test_arrayc                 C   s   |  tdd d S )NrL   rK   r   )r   r8   rm  rd   r   r   r   
test_empty      zReadBufferTest.test_emptyc                 C   "   |  ttj |  ttjd d S N*   )r   rf  r8   rm  rd   r   r   r   rg  #     zReadBufferTest.test_bad_argsN)r   r   r   rn  rp  rg  r   r   r   r   ri    s    ri  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   r   )N   ﻿ ÿ߿ࠀ￿𐀀)rL   rL   rL   rL   rL   u   ﻿   ﻿ ry     ﻿ ÿrz     ﻿ ÿ߿r{  r{     ﻿ ÿ߿ࠀr|  r|     ﻿ ÿ߿ࠀ￿r}  r}  r}  rx  r   rd   r   r   r   r   +  r   zUTF8SigTest.test_partialc                 C   s   |  tddd d S )N   ﻿rw  rL   r   strrd   r   r   r   test_bug1601501G     zUTF8SigTest.test_bug1601501c                 C   s,   t d }d}| ||d| d S )Nrw  r   )r8   r9   r   r:   rH   )r   rD   r1   r   r   r   test_bomK  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r2||}n| }|s9n|	| q(|
 }| || qd S Nu   ABC¡∀XYZs   ABC¡∀XYZrw  r6      )@   rM     i   i   )r8   BOM_UTF8rU   listr7   ra   rb   StringIOr2   r-   r   r   	r   Z	unistringZ
bytestringrj   sizehintZistreamZostreamrz   Zgotr   r   r   test_stream_bomP  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| }|s6n|| q%|	 }| 
|| qd S r  )r8   rU   r  r7   ra   rb   r  r2   r-   r   r   r  r   r   r   test_stream_baref  s&   


zUTF8SigTest.test_stream_bareN)r   r   r   rA   r8   r  r+  r   r  r  r  r  r   r   r   r   rv  '  s    rv  c                   @   4   e Zd Zd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 )NrK   ro  )r   r8   escape_decode	bytearrayrd   r   r   r   rp  ~  s   zEscapeDecodeTest.test_emptyc                 C   sF   t j}tdD ]}t|g}|dkr | ||d |d df qd S )Nr     \   0r   )r8   r  r7   rP   r   r   r:   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! 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])r8   r  r   r   r:   r   r   r   r   test_escape  s,   



















zEscapeDecodeTest.test_escapec              	   C   s  t j}t| |}tddD ]S}t|g}|dvr9| td|  |d| d|  W d    n1 s4w   Y  | td|d   |d|  d|   W d    n1 s[w   Y  q| td |dd W d    n1 sww   Y  | t |d	d	 W d    n1 sw   Y  | td
}|dd W d    n1 sw   Y  | td | 	|ddd W d    d S 1 sw   Y  d S )Na   {   s   abfnrtvxinvalid escape sequence '\\%c'r      invalid escape sequence '\\8'   \8   \9 invalid escape sequence '\\\xfa'   \invalid escape sequence '\\z'   \x\zr   )s   \zrk  )
r8   r  r   r7   rP   assertWarnsRegexr   upperassertWarnsr   r   r:   r   rC   r   r0  r   r   r   test_warnings  sF   


"zEscapeDecodeTest.test_warningsc                 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   )r  r~   r   )   [?]?r~   s   \x0s   [\x0]s   [\x0]\x0)r     )r  r  )r8   r  r   
ValueErrorr   )r   r:   r   r   r   r     s   zEscapeDecodeTest.test_errorsN)r   r   r   rp  r  r  r  r   r   r   r   r   r  }  s    r  ))u"   ليهمابتكلموشعربي؟s   egbpdaj6bu4bxfgehfvwxn)u   他们为什么不说中文s   ihqwcrb4cv8a8dqg056pqjye)u   他們爲什麽不說中文s   ihqwctvzc91f659drss3x8bo0yb)u   Pročprostěnemluvíčeskys   Proprostnemluvesky-uyb24dma41a)u,   למההםפשוטלאמדבריםעבריתs   4dbcagdahymbxekheh6e0a7fei0b)uZ   यहलोगहिन्दीक्योंनहींबोलसकतेहैंs,   i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd)u6   なぜみんな日本語を話してくれないのかs&   n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa)uH   세계의모든사람들이한국어를이해한다면얼마나좋을까sE   989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c)u8   почемужеонинеговорятпорусскиs    b1abfaaepdrnnbgefbaDotcwatmq2g4l)u*   PorquénopuedensimplementehablarenEspañols-   PorqunopuedensimplementehablarenEspaol-fmd56a)u-   TạisaohọkhôngthểchỉnóitiếngViệts,   TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g)u   3年B組金八先生s   3B-ww4c5e180e575a65lsy2b)u"   安室奈美恵-with-SUPER-MONKEYSs(   -with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n)u'   Hello-Another-Way-それぞれの場所s(   Hello-Another-Way--fc4qua05auwb3674vfr0b)u   ひとつ屋根の下2s   2-u9tlzr9756bt3uc0v)u   MajiでKoiする5秒前s   MajiKoi5-783gue6qz075azm5e)u   パフィーdeルンバs   de-jg4avhby1noc0d)u   そのスピードでs   d9juau41awczczp)z-> $1.00 <-s   -> $1.00 <--r   c                   @   rh  )PunycodeTestc                 C   s8   t D ]\}}| t|dd t|d  qd S NpunycoderL  )punycode_testcasesr   r  rH   lowerr   Zunipunyr   r   r   test_encode4  s   zPunycodeTest.test_encodec                 C   sF   t D ]\}}| ||d |dd}| ||d qd S r  )r  r   r:   rH   r  r   r   r   test_decode@  s
   zPunycodeTest.test_decodec              	   C   s   ddt  fdg}|D ]5\}}}| j||d! t|tr&| t |jd| n
| |d|| W d    n1 s:w   Y  q
d S )N   xn--w&rN   )r  r   zxn-)r  errorsr  )r   r'  
isinstance	Exceptionr   r:   r   )r   Z	testcasesr  r  r  r   r   r   test_decode_invalidF  s   

z PunycodeTest.test_decode_invalidN)r   r   r   r  r  r  r   r   r   r   r  3  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   ​rK   )s   　r  )   r  )s   N)s   ᠎N)r~  rK   )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                   @      e Zd Zdd ZdS )NameprepTestc                 C   s   ddl m} ttD ]F\}\}}|d u rq
t|dd}|d u r'| t|| q
t|dd}z
| ||| W q
 tyP } zt	
d|d t|f d }~ww d S )Nr   )nameprepr  r   zTest 3.%d: %sr6   )Zencodings.idnar  rw   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        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.r  rd   r   r   r   test_builtin_decode     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   rH   rd   r   r   r   test_builtin_encode  r  z!IDNACodecTest.test_builtin_encodec                 C   sr   |  td dd W d    n1 sw   Y  |  td dd W d    d S 1 s2w   Y  d S )Nztoo longsT  xn--016caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  sN   xn--016caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)assertRaisesRegexr   r:   rd   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   rL   )r8   rU   ra   rb   r2   r   )r   r\   r   r   r   test_stream  s   
zIDNACodecTest.test_streamc                 C   s<  |  dtdd dD dd |  dtdd dD dd	 |  dtd
d dD dd |  dtdd dD dd td }|  |dd |  |dd |  |dd |  |ddd |  |  |dd |  |dd |  |dd |  |ddd d S )NrL   c                 s       | ]}t |gV  qd S r   rO   rQ   r   r   r   r         z8IDNACodecTest.test_incremental_decode.<locals>.<genexpr>r  r  r  c                 s   r  r   rO   rQ   r   r   r   r     r  r  r  c                 s   r  r   rO   rQ   r   r   r   r   #  r  r  r  c                 s   r  r   rO   rQ   r   r   r   r   '  r  s   xn--xams	   ple-9ta.ou	   äxample.s   rgrK   TZorgs   rg.zorg.)r   rY   r8   rZ   r9   r:   rX   )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 )NrK   r  r  r  r  r  r  r  u   äxz	ample.orgs   xn--xample-9ta.rL   Ts   orgz
ample.org.s   xn--xample-9ta.org.)r   rY   r8   
iterencoderG   rH   rX   )r   encoderr   r   r   test_incremental_encode7  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  rN   r  )r   r   r   r#  N)rH   r:   r   r  r   r  r   r   r   r   S  s   zIDNACodecTest.test_errorsN)
r   r   r   r  r  r  r  r  r  r   r   r   r   r   r    s    r  c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zd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   rL  objrA      []r   r  r   )r   r8   r:   r   rf  r   rd   r   r   r   r  `  s   zCodecsModuleTest.test_decodec                 C   s   |  tddd | ttj | ttjdd |  tdd | ttjdd	 |  tjddd
d |  tjdd	ddd d S )Nr  r  r  r   __spam__r  r  u   ÿffrL  r     [ÿ]r   r  r  )r   r8   rH   r   rf  LookupErrorr   rd   r   r   r   r  m  s   zCodecsModuleTest.test_encodec                 C   rr  rs  )r   rf  r8   registerrd   r   r   r   test_register{  ru  zCodecsModuleTest.test_registerc                 C   s^   d}t  }t| | ttj| || |  t	| | t
tj| |  d S )NZnonexistent_codec_name)r   ZMockr8   r  r   rf  r   Zassert_called_withZ
reset_mock
unregisterr  Zassert_not_called)r   namesearch_functionr   r   r   test_unregister  s   


z CodecsModuleTest.test_unregisterc                 C   s2   |  ttj |  ttjd |  ttjd d S )Nr   )r   rf  r8   r   r  rd   r   r   r   test_lookup  s   zCodecsModuleTest.test_lookupc                 C   "   |  ttj |  ttjd d S Nr  )r   rf  r8   
getencoderr  rd   r   r   r   test_getencoder  ru  z CodecsModuleTest.test_getencoderc                 C   r  r  )r   rf  r8   
getdecoderr  rd   r   r   r   test_getdecoder  ru  z CodecsModuleTest.test_getdecoderc                 C   r  r  )r   rf  r8   rU   r  rd   r   r   r   test_getreader  ru  zCodecsModuleTest.test_getreaderc                 C   r  r  )r   rf  r8   r   r  rd   r   r   r   test_getwriter  ru  zCodecsModuleTest.test_getwriterc                 C   sl   t t j}| t jt j| z	t t jd W n t jy'   | d Y nw td}| |j	d d S )Ntr_TRztest needs Turkish localeASCIIrL  )
locale	setlocaleLC_CTYPEr   ErrorskipTestr8   r   r   r	  )r   Z	oldlocalerS   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),rH   r:   r  	CodecInfoCodecIncrementalEncoderIncrementalDecoderStreamReaderStreamWriterr   r  r  rG   r9   rU   r   register_errorr4  strict_errorsreplace_errorsignore_errorsxmlcharrefreplace_errorsbackslashreplace_errorsnamereplace_errorsr   EncodedFiler  rZ   r+  BOM_BEBOM_LEr  	BOM_UTF16BOM_UTF16_BEBOM_UTF16_LE	BOM_UTF32BOM_UTF32_BEBOM_UTF32_LEBOM32_BEBOM32_LEBOM64_BEBOM64_LEStreamReaderWriterStreamRecoder)ZassertCountEqualr8   __all__getattr)r   Zapir   r   r   test_all  s
   
zCodecsModuleTest.test_allc              
   C   s   |  tjtj dD ]6}| |' ttj|d}| |tj W d    n1 s,w   Y  W d    n1 s;w   Y  q
d S )N)wr\   zr+w+rt   rT  rL  )	r   r   r   r   r'  r8   r   r<   r8  )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| q&d S )Nr  Z	undefinedr  rL   rK   )rN   r   r   r   )r   r   r8   rH   r:   r  r   r   r   test_undefined  s   

zCodecsModuleTest.test_undefinedc              	   C   s   t  }t d|,}| t ttjdd W d    n1 s#w   Y  | j	
  W d    d S 1 s9w   Y  d S )Nzbuiltins.openZwtzinvalid-encoding)r   	mock_openpatchr   r  r8   r   r   r   closeZassert_called)r   rC  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<  rA  rB  rF  r   r   r   r   r  ^  s    r  c                   @   r4   )StreamReaderTestc                 C   s   t d| _td| _d S )Nr     한
글)r8   rU   rj   ra   rb   rc   rd   r   r   r   setUp     zStreamReaderTest.setUpc                 C   s$   |  | j}| | ddg d S )Nu   한
u   글)rj   rc   r   r   )r   r   r   r   r   test_readlines  s   zStreamReaderTest.test_readlinesN)r   r   r   rI  rK  r   r   r   r   rG    s    rG  c                   @   r  )EncodedFileTestc                 C   s\   t d}t|dd}| | d t  }t|dd}|d | | d d S )NrH  r  r  s   \
  r     ü   )ra   rb   r8   r+  r   r2   r-   r   r   r   Zefr   r   r   
test_basic  s   

zEncodedFileTest.test_basicN)r   r   r   rP  r   r   r   r   rL        rL  )erL  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 ]c}t|j}|dr|d7 }n|dkrd}| |dd|dd t||\}}| |t|d|  t	||\}}| ||d|  |t
vrtd}t||}d}	|D ]}
||
 | }| t|tu t| |	|7 }	qdtd}t||}d}|	D ]}
|t|
g || 7 }q| ||d|  |t
vrhzt| W n	 ty   Y nhw 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rhz	t|dW n
 ty?   Y qw dfdd|D }	t|d d fdd|	D }| ||d|  qd S )Nabc123Z_codecr  r   -encoding=%rrK   rL   Tr  r  r   c                 3       | ]}  |V  qd S r   rH   rQ   )r  r   r   r     r  z/BasicUnicodeTest.test_basics.<locals>.<genexpr>c                 3        | ]}  t|gV  qd S r   r:   rP   rQ   )r  r   r   r         )all_unicode_encodingsr8   r   r	  endswithr   r   r  r	   r  broken_unicode_with_statefulr&   r   r-   r2   r?   typerP   rU   rG   r  rH   r9   r:   rY   rZ   r  )r   r1   rA   r	  r   r0   r,   r[   r   encodedresultrS   chunkrj   decodedresultr]   r   )r  r  r   test_basicsn  s   






zBasicUnicodeTest.test_basicsc              	      s0  d}t D ]}|tvrzt|W n	 ty   Y n>w d}|D ]	}||7 }q|dd7 }t| d}|D ]}| t|g7 }q:| dd7 }| 	||d|  |dvrzt|dW n	 tym   Y qw d
fdd	|D }t|d d
 fd
d	|D }| 	||d|  qd S )Nr  rK   rL   Tr  r  r   c                 3   r  r   r  rQ   )cencoderr   r   r     r  z4BasicUnicodeTest.test_basics_capi.<locals>.<genexpr>c                 3   r  r   r  rQ   )cdecoderr   r   r     r  )r  r  	_testcapiZcodec_incrementalencoderr  rH   Zcodec_incrementaldecoderr:   rP   r   rY   )r   r1   rA   r  rS   r  r   )r  r  r   test_basics_capi  sH   
z!BasicUnicodeTest.test_basics_capic                 C   sr   dd }t D ]0}|dkrq|tv rqt|t||}tdD ]}|dd |	 }| 
|| q#qd S )Nz%s
%s
)AX  abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123AX  def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456r  r}   r   )r  r  r8   rU   ra   rb   rH   r7   seekr2   r   )r   r1   rA   rj   trz   r   r   r   	test_seek  s   zBasicUnicodeTest.test_seekc                 C   s:   t D ]}t|}| t| |dvr| t|d qd S )N)r  r  rt  )r  r8   r  r   rf  )r   rA   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   )r  r8   r  r   rf  )r   rA   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   )rX  )	encodingsrX  r  Zencoding_tabler   )r   rX  Z
table_typer   r   r   "test_encoding_map_type_initialized  s   
z3BasicUnicodeTest.test_encoding_map_type_initializedc                 C   sB   d}t D ]}|tvr| |||| | |||| qd S )Nr  )r  r  rF   rH   rI   )r   rB   rA   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   r  m  s    M
%r  c                   @   rh  )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    rN   r  r  r     􏿿bcr  r  abu   ab￾r   u   ab�r  r   zab\x02r  r   r  r  r  rL   )r   r8   charmap_decoder   r   rP   r7   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  rN   rt   r   rS   r   r6   r   r  ZAaZBbZCc)ZAaBbCcr     􏿿r  rL   r  r   r6   u   ￾r   r  r   r  r   r  z.character mapping must be in range\(0x110000\)r   iɚ;)
r   r8   r  r   r   rP   r7   r	   r  rf  r  r   r   r   test_decode_with_int2str_mapC  s   












z(CharmapTest.test_decode_with_int2str_mapc              
   C   s  t d}t d}t d}| tdd|||dd | tddd||dd	 | tddtj||dttjd
 df | ttjddtjd ||d | t	tjdd||d | t	tjdd||dd | tdd||dd | tdd||ddd | tdd||dd | tdd||ddd | tdd||dd | tdd||ddd d S )Nrt   r   rS   r  rN   r  r  i r  Zbcr  r6   r  i  r   r  r   r  r   r  )
ordr   r8   r  r   
maxunicodechrr   rf  r   )r   rt   r   rS   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                   @   r4   )WithStmtTestc                 C   sX   t d}t|dd}| | d W d    n1 sw   Y  | |j d S )NrM  r  r  rN  )ra   rb   r8   r+  r   r2   r?   closedrO  r   r   r   test_encodedfile	  s
   
zWithStmtTest.test_encodedfilec                 C   s^   t d}td}t||j|jd}| | d W d    d S 1 s(w   Y  d S )NrM  r  rN      ü)	ra   rb   r8   r   r8  streamreaderstreamwriterr   r2   )r   r   r$   srwr   r   r   test_streamreaderwriter
	  s   


"z$WithStmtTest.test_streamreaderwriterN)r   r   r   r  r  r   r   r   r   r  	  s    r  c                   @   r4   )	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r%|t j |D ]	}| t|d q'd S )Nmbcs_decoderv   )r8   rb  utf_8_decoder  r  re  r   r   r   utf_32_ex_decodelatin_1_decodeascii_decoder  hasattrri   r  r   rf  )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   ሴr~   s   \u1234
   \U00110000z
\U00110000r   r   rn   r   )z(\x5c\x55\x30\x30\x31\x31\x30\x30\x30\x30rn   )r   r8   unicode_escape_decoderaw_unicode_escape_decoder   r   rd   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                   @   sT   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d ZdS )UnicodeEscapeTestzunicode-escapeNc                 C   (   |  tdd |  tdd d S NrL   ro  rK   rL   r   )r   r8   unicode_escape_encoder  rd   r   r   r   rp  @	     zUnicodeEscapeTest.test_emptyc                 C   s@   t j}tddD ]}|dkr| |t|t|gdf qd S )Nr     \   r6   )r8   r  r7   r   r  rP   r   rH   r   r   r   r   test_raw_encodeD	  s   z!UnicodeEscapeTest.test_raw_encodec                 C   sF   t j}tdD ]}|dkr | |t|gd t|d df qd S )Nr  r  r  0r   )r8   r  r7   r   rP   r  r  r   r   r   test_raw_decodeJ	  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r3|t|d|   q tddD ]}|t|d|   q9|dd |dd d S )N	s   \tro   s   \nrq   s   \r\s   \\r  z	
r   r  r     €   \u20ac   𝄠
   \U0001d120)r8   r  r   r7   r  rH   r   rH   r   r   r   r   r   test_escape_encodeP	  s   





z$UnicodeEscapeTest.test_escape_encodec                 C   s   t j}t| |}|dd |dd |dd |dd |d	d
 |dd |dd |dd |dd |dd |dd |dd
 |dd |dd |dd |dd |d d! |d"d |d#d! |d$d% |d&d' d S )(Nr  r   r  z["]r  z[']r  z[\]r  z[]r  z[]r  z[	]r  z[
]r  z[]r  z[]r  z[]r  r  z[8]r  z[!]r  z[!8]r  z[A]r  z[A0]r  r  r  r  r  r  )r8   r  r   r  r   r   r   test_escape_decode_	  s.   




















z$UnicodeEscapeTest.test_escape_decodec              	   C   s  t j}t| |}tddD ]]}t|g}|dvr;| td|  |d| dt|  W d    n1 s6w   Y  | dvrj| td|d   |d|  dt|d   W d    n1 sew   Y  q| td	 |d
d W d    n1 sw   Y  | 	t |dd W d    n1 sw   Y  | td}|dd W d    n1 sw   Y  | td | 
|ddd W d    d S 1 sw   Y  d S )Nr  r  s	   abfnrtuvxr  r  r   s   UNr  r  r  z\8r  z\9r  r  u   \úr  r  r   )z\zrk  )r8   r  r   r7   rP   r  r   r  r  r  r   r  r   r   r   test_decode_warningsx	  sH   


 "z&UnicodeEscapeTest.test_decode_warningsc              	   C      t j}dD ]Q\}}t|D ]H}| 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      urk     Urk  r  r     [\   ]   ]\r   r   r      [�]�r  rL   rn   r  )r8   r  r7   r   r   r   r	   r   r:   rS   rD   rC   rz   r   r   r   test_decode_errors	  $    
	z$UnicodeEscapeTest.test_decode_errorsc                 C   r   )N    	
\ÿ￿𐀀) rL   rL   rL   r   r    	r   	
r   	
r   	
\r  r  r      	
\ÿr  r  r  r  r  
    	
\ÿ￿r  r  r  r  r  r  r  r  r  r  r   rd   r   r   r   r   	  r   zUnicodeEscapeTest.test_partial)r   r   r   rA   r   rp  r  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   r  r  )r   r8   raw_unicode_escape_encoder  rd   r   r   r   rp  	  r  zRawUnicodeEscapeTest.test_emptyc                 C   s6   t j}tdD ]}| |t|t|gdf qd S )Nr  r6   )r8   r  r7   r   r  rP   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 )Nr  r  r  r   )r8   r  r7   r   rP   r  r  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 )	Nr     uUr   r  r  r  r  r  )r8   r  r   r7   r  rP   r  r   r   r   r  	     

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 )	Nr  r   r  r   r  r  r  r  )r8   r  r   r7   rP   r  )r   r:   r   r   r   r   r   r  	  r!  z'RawUnicodeEscapeTest.test_escape_decodec              	   C   r	  )N)r  r  r  r  r  r  r  r   r   r   r  r  r  r  )r8   r  r7   r   r   r   r	   r  r   r   r   r  	  r  z'RawUnicodeEscapeTest.test_decode_errorsc                 C   r   )Nr  )r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rd   r   r   r   r   	  r   z!RawUnicodeEscapeTest.test_partial)r   r   r   rA   r   rp  r  r  r  r  r  r   r   r   r   r   r  	  s    		r  c                   @   r  )EscapeEncodeTestc              	   C   s|   g d}|D ]#\}}| j |d | t|| W d    n1 s$w   Y  q| ttjd | ttjtd d S )N))rK   ro  )   foobar)r#  r~   )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  rC  r   rj  )r'  r   r8   escape_encoder   rf  r  )r   r  rz   outputr   r   r   r  
  s   
z#EscapeEncodeTest.test_escape_encodeN)r   r   r   r  r   r   r   r   r"  
  rQ  r"  c                   @   ,   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   r:   rH   rd   r   r   r   	test_utf81
  s   zSurrogateEscapeTest.test_utf8c                 C   ,   |  dddd |  dddd d S )Nr)  rL  r#  r*  r+  rd   r   r   r   rR  =
     zSurrogateEscapeTest.test_asciic                 C   r-  )Ns   foobarz
iso-8859-3r#  u	   foobarr+  rd   r   r   r   test_charmapD
  r.  z SurrogateEscapeTest.test_charmapc                 C   s   |  dddd d S )Nu   r  r#  s   r  rd   r   r   r   test_latin1K
  s   zSurrogateEscapeTest.test_latin1N)r   r   r   r,  rR  r/  r0  r   r   r   r   r(  /
  s
    r(  c                   @   r  )BomTestc              	   C   s  d}d}|  tjtj |D ]=}tjtjd|d0}|| || |d | |	 |d  |d | |	 |d  W d    n1 sMw   Y  tjtjd|d.}||d  | 
| d |d || |d | |	 | W d    n1 sw   Y  tjtjd|d2}|j|d  | 
|j d |jd |j| |d | |	 | W d    n1 sw   Y  tjtjd|d(}|| ||  || |d | |	 |d  W d    n	1 s	w   Y  tjtjd|d,}|j| |j|j  |j| |d | |	 |d  W d    n	1 sGw   Y  qd S )NZ
1234567890)r   r  r  r   r   r   r>  r   r   r   )r   r   r   r   r8   r   r-   r  r   r2   ZassertNotEqualtellr   )r   rz   r  rA   r   r   r   r   
test_seek0R
  sX   




	


	




	
zBomTest.test_seek0N)r   r   r   r3  r   r   r   r   r1  Q
  r  r1  )base64_codecuu_codecquopri_codec	hex_codecbase64base_64uu)quopriquoted_printablequotedprintablehexrot13)r4  r5  r6  r7  rot_13
zlib_codecrV   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0 t||\}}| |t| t||\}}| |t| | || W d    n1 sCw   Y  qd S )Nr  r   )	rP   r7   bytes_transform_encodingsr'  r8   r  r   r	   r  )r   ZbinputrA   or0   rC   r   r   r   r  
  s   zTransformCodecTest.test_basicsc              	   C   n   t D ]2}| j|d" td|}t|t|}| }| |d W d    n1 s/w   Y  qd S Nr   r6  )	rF  r'  r8   rH   rU   ra   rb   r2   r   r   rA   sinrj   Zsoutr   r   r   	test_read
     zTransformCodecTest.test_readc              	   C   rH  rI  )	rF  r'  r8   rH   rU   ra   rb   rh   r   rJ  r   r   r   rx   
  rM  z TransformCodecTest.test_readlinec              	   C   s   d}t D ]L}| j|d< |}t|}t||}t||}| || t|}t||}| || t||}| || W d    n1 sKw   Y  qd S )Ns   12345r   )rF  r'  
memoryviewr8   rH   r   r:   )r   ZoriginalrA   rz   viewZview_encodedZview_decodedr   r   r   test_buffer_api_usage
  s    z(TransformCodecTest.test_buffer_api_usagec              
   C   s   d}t D ]A}| j|d1 d}||}| t|}|| W d    n1 s*w   Y  | |jj W d    n1 s@w   Y  qd S )Nzbad input typer   zM{!r} is not a text encoding; use codecs.encode\(\) to handle arbitrary codecs)	rF  r'  formatr  r  rH   assertIsNoner,  	__cause__)r   	bad_inputrA   fmtmsgfailurer   r   r   /test_text_to_binary_denylists_binary_transforms
  s   
zBTransformCodecTest.test_text_to_binary_denylists_binary_transformsc                 C   s@   d}|  t| dd W d    d S 1 sw   Y  d S )NzR^'rot_13' is not a text encoding; use codecs.encode\(\) to handle arbitrary codecszjust an example messager@  )r  r  rH   r   rV  r   r   r   -test_text_to_binary_denylists_text_transforms
  s   "z@TransformCodecTest.test_text_to_binary_denylists_text_transformsc              
   C   s   d}t D ]]}| j|dM t||}d}||}| t| || W d    n1 s0w   Y  | t| t|| W d    n1 sMw   Y  W d    n1 s\w   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)	rF  r'  r8   rH   rQ  r  r  r:   r  )r   rz   rA   Zencoded_datarU  rV  r   r   r   /test_binary_to_text_denylists_binary_transforms
  s    
zBTransformCodecTest.test_binary_to_text_denylists_binary_transformsc              
   C   s   dt dfD ]<}| j|d, d}| t|}|d W d    n1 s'w   Y  | |jj W d    n1 s=w   Y  qd S )Ns	   immutables   mutable)rT  zR^'rot_13' is not a text encoding; use codecs.decode\(\) to handle arbitrary codecsr@  )r  r'  r  r  r:   rR  r,  rS  )r   rT  rV  rW  r   r   r   -test_binary_to_text_denylists_text_transforms
  s   z@TransformCodecTest.test_binary_to_text_denylists_text_transformszRequires zlib supportc                 C   V   d}|  t|}tdd W d    n1 sw   Y  | |jjt|j d S )Nz(^decoding with 'zlib_codec' codec failed   hellorA  r  r  r8   r:   r<   r,  rS  r  r   rV  rW  r   r   r   !test_custom_zlib_error_is_wrapped  s   
z4TransformCodecTest.test_custom_zlib_error_is_wrappedc                 C   r]  )Nz'^decoding with 'hex_codec' codec failedr^  r7  r_  r`  r   r   r    test_custom_hex_error_is_wrapped  s   
z3TransformCodecTest.test_custom_hex_error_is_wrappedc              
   C   sp   t  D ]1\}}t|j}|D ]$}| j|d t|}| |j| W d    n1 s/w   Y  qqd S )N)alias)transform_aliasesitemsr8   r   r	  r'  r   )r   
codec_namealiasesZexpected_namerc  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
)r8   rH   r   r:   )r   r^   Z	unescapedr   r   r   test_quopri_stateless!  s   z(TransformCodecTest.test_quopri_statelessc                 C   s   |  ttjdd d S )NrK   zuu-codec)r   r  r8   r:   rd   r   r   r   test_uu_invalid)  r  z"TransformCodecTest.test_uu_invalidN)r   r   r   r  rL  rx   rP  rX  rZ  r[  r\  unittest
skipUnlessrB  ra  rb  rh  ri  rj  r   r   r   r   rE  
  s    


rE  c                 C   s
   t | S r   )_TEST_CODECSget)rf  r   r   r   _get_test_codec8  r+   ro  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(   d| _ tt | tjt t| _d S )NZexception_chaining_test)rf  r8   r  ro  r   r  RuntimeErrorobj_to_raiserd   r   r   r   rI  >  s   

	zExceptionChainingTest.setUpc                 C   s"   t | jd  tj| jd  d S r   )rm  poprf  r  _cacherd   r   r   r   tearDownL  s   zExceptionChainingTest.tearDownc                 C   s    t j||| jd}|t| j< d S )N)r	  )r8   r  rf  rm  )r   rH   r:   Z
codec_infor   r   r   	set_codecQ  s   zExceptionChainingTest.set_codecc                 c   sl    d || j|j|}| ||}|V  W d    n1 sw   Y  | |jj| | |jjj d S )Nz${} with {!r} codec failed \({}: {}\))	rQ  rf  r   r  r<   r,  rS  ZassertIsNotNone__traceback__)r   Z	operationexc_typerV  Zfull_msgZcaughtr   r   r   assertWrappedV  s   z#ExceptionChainingTest.assertWrappedc                 O   s   | j r   rr  )r   argskwdsr   r   r   	raise_obj_  s   zExceptionChainingTest.raise_objc                 C   s  || _ | | j| j | d|| d| j W d    n1 s#w   Y  | d|| td| j W d    n1 sAw   Y  | d|| d| j W d    n1 s^w   Y  | d|| td| j W d    d S 1 s}w   Y  d S )NrA   	str_inputZdecoding   bytes input)rr  rv  r}  ry  rH   rf  r8   r:   )r   rr  rV  rx  r   r   r   check_wrappedc  s   "z#ExceptionChainingTest.check_wrappedc                 C   s   |  td d S )NrL   r  rq  rd   r   r   r   test_raise_by_typeo  s   z(ExceptionChainingTest.test_raise_by_typec                 C   s   d}|  t|| d S )NThis should be wrappedr  rY  r   r   r   test_raise_by_valuer  s   z)ExceptionChainingTest.test_raise_by_valuec                 C   *   d}G dd dt }| |||| d S )Nr  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   MyRuntimeErrorx  s    r  rq  r  r   rV  r  r   r   r   )test_raise_grandchild_subclass_exact_sizev     z?ExceptionChainingTest.test_raise_grandchild_subclass_exact_sizec                 C   r  )Nr  c                   @   s   e Zd ZdS )zVExceptionChainingTest.test_raise_subclass_with_weakref_support.<locals>.MyRuntimeErrorN)r   r   r   r   r   r   r   r  ~  s    r  r  r  r   r   r   (test_raise_subclass_with_weakref_support|  r  z>ExceptionChainingTest.test_raise_subclass_with_weakref_supportc                    s   fdd}|  || | t| d| j W d    n1 s#w   Y  | t| td| j W d    n1 s@w   Y  | t| d| j W d    n1 s\w   Y  | t| td| j W d    d S 1 szw   Y  d S )Nc                     s    r   r   r{  r|  rz  r   r   r}       z:ExceptionChainingTest.check_not_wrapped.<locals>.raise_obj	str inputr  )rv  r  rq  rH   rf  r8   r:   )r   rr  rV  r}  r   rz  r   check_not_wrapped  s   "z'ExceptionChainingTest.check_not_wrappedc                 C       G dd dt }| |d d S )Nc                   @   r  )zKExceptionChainingTest.test_init_override_is_not_wrapped.<locals>.CustomInitc                 S   s   d S r   r   rd   r   r   r   r*     r  zTExceptionChainingTest.test_init_override_is_not_wrapped.<locals>.CustomInit.__init__N)r   r   r   r*   r   r   r   r   
CustomInit  r  r  rL   rq  r  )r   r  r   r   r   !test_init_override_is_not_wrapped     z7ExceptionChainingTest.test_init_override_is_not_wrappedc                 C   r  )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__)clsr2  r   r   r    s   zQExceptionChainingTest.test_new_override_is_not_wrapped.<locals>.CustomNew.__new__)r   r   r   r  rI  r   r   r2  r   	CustomNew  s    r  rL   r  )r   r  r   r   r    test_new_override_is_not_wrapped  r  z6ExceptionChainingTest.test_new_override_is_not_wrappedc                 C   s(   d}t |}d|_| |d| d S )NzThis should NOT be wrappedr6   z^{}$)rq  attrr  rQ  )r   rV  r1  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 )Nr6   1r  rq  rd   r   r   r   test_non_str_arg_is_not_wrapped  s   z5ExceptionChainingTest.test_non_str_arg_is_not_wrappedc                 C   s   d}|  tddd| d S )Nz^\('a', 'b', 'c'\)$rt   r   rS   r  )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w   Y  | t| td| j W d    n1 s:w   Y  | t| d| j W d    n1 sVw   Y  | t| td| j W d    d S 1 stw   Y  d S )Nz^unknown encoding: {}$r  r  )rQ  rf  r  r  rH   r8   r:   rY  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 sGw   Y  d	}|| j}| t| d
| j W d    d S 1 slw   Y  d S )Nc                  _      dS )N)
not bytes!r   r   r  r   r   r   encode_to_str  r  zSExceptionChainingTest.test_unflagged_non_text_codec_handling.<locals>.encode_to_strc                  _   r  )N)   not str!r   r   r  r   r   r   decode_to_bytes  r  zUExceptionChainingTest.test_unflagged_non_text_codec_handling.<locals>.decode_to_bytesr  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  )	rv  r8   rH   rf  r   r:   rQ  r  rf  )r   r  r  r^   decodedrU  rV  r   r   r   &test_unflagged_non_text_codec_handling  s"   "z<ExceptionChainingTest.test_unflagged_non_text_codec_handlingN)r   r   r   rI  ru  rv  
contextlibcontextmanagerry  r}  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rp  <  s(    
rp  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   rt      ar  )r   r  r8   code_page_encodecode_page_decodeOSErrorrd   r   r   r   test_invalid_code_page  r  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 )	Nrs       ÿs    rN   TCP_UTF8r   )r  r   r8   r  r   r  r  rd   r   r   r   test_code_page_name  s   z CodePageTest.test_code_page_namec                 C   s   |D ]a\}}}|d urXz
t |||d}W n ty2 } z| d||||f  W Y d }~nd }~ww | |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 != %ar6   )	r8   r  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 ]W\}}}|d urOz	t |||}W n ty1 } z| d||||f  W Y d }~nd }~ww | |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 != %ar6   )r8   r  r   r  r   r	   r   )r   r#   r  textr  r  r^   r  r   r   r   check_encode  s(   

zCodePageTest.check_encodec                 C      |  dd | dd d S )Nr  )r  rN   r  )   ｄ騾rN      )r  rN   N)r  r   r  )r  r   s   [y])u   [€]r   s   [?])r  r   s   [\xff])r  r   s)   [\N{LATIN SMALL LETTER Y WITH DIAERESIS}])r  r   s   [&#255;])u   rN   N)   []r#  r  )r  r   N)r  rN   r  )r  rN   r  )r  rN   N)r  r   r   )r  r   u   [�])r  r   z[\xff])r  r#  r  )r  r   N)    abcrN   N)r  r   z abc)r  r   u   � abc)r  r   z\x81 abcr  r  rd   r   r   r   
test_cp932  s   zCodePageTest.test_cp932c                 C   r  )Ni  )r  )   é€rN      )r  rN   r   )   ŁrN   N)r  r   rK   )r  r      L)   r#     )r  r   N)r  )r  rN   r  )r   rN   r  r  rd   r   r   r   test_cp1252)  s   zCodePageTest.test_cp1252c                 C   s    d}|  |d | |d d S )N  )r  )r  rN      +AOkgrA-)r  rN      +2//f/w-)r   rN      +3IA-)r   rN      +//0-)r  )r  rN   r  )r  rN   r  )r  rN   r   )r  rN   r   )s   [+/]rN   r   )r  rN   r  r  r   r#   r   r   r   test_cp_utf7;  s   zCodePageTest.test_cp_utf7c                 C   s,   |  dd |  | jd | | jd d S )Nr  ))   r      騾)r  r   u   �騾))   􏿿r   r  )r  r   u   �􏿿))	   [􏿿]r   s   [􏿿])r  r   s   [􏿿?])r  r  r  rd   r   r   r   test_multibyte_encodingO  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|  qt jr8t
d|  q| t	ddd d S )Nro   i,  i-  i.  i1  i3  i5  i  i  r  r  r  r#   z  skipping cp=rt  )u	   r  )r   verboser   stdoutr-   r7   r%   r   r8   r  printr  r   r   r   test_code_page_decode_flags]  s   
z(CodePageTest.test_code_page_decode_flagsc                 C   st   t dddd}| |d t dddd}| |d t dddd}| |d	 t dd
dd}| |d d S )Nr     rN   Fr  s   )r  r   s   )u   騾騾rk  r  r  )r8   r  r   )r   r  r   r   r   test_incrementalp  s"   zCodePageTest.test_incrementalc                 C   sL   t jddd td}| |jd W d    d S 1 sw   Y  d S )Nz_winapi.GetACPr  )Zreturn_valueZcp123r  )r   rD  r8   r   r   r	  )r   codecr   r   r   test_mbcs_alias  s   
"zCodePageTest.test_mbcs_aliasl           F)r0   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  r6   s
   r   r  r#  Tr   rn   Z
0123456701iu(   6701234567r   r	   r8   r  r   r0   r^   r  r   r   r   test_large_input  s   zCodePageTest.test_large_inputr~   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  rn   r  r   Tr6   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   r  r  r  r  r  r  r  r  r  r  r  r  r   Z
bigmemtestr  r  r   r   r   r   r    s"    !
r  c                   @   r  )	ASCIITestc                 C      |  ddd d S )Nr  rL  s   abc123r  rd   r   r   r   r    rq  zASCIITest.test_encodec              	   C   X   dD ]'\}}}| j |||d | |d|| W d    n1 s$w   Y  qd S )N))	   [ÿ€]r   r  )r  r   s   [???])r  r   s   [&#128;&#255;&#8364;])u   [ÿ€򫳞]r   s   [\x80\xff\u20ac\U000abcde]r$  r#  r"  r%  rL  r'  r   rH   r(  r   r   r   test_encode_error     zASCIITest.test_encode_errorc                 C   <   |  t ddd W d    d S 1 sw   Y  d S )Nu   ÿrL  r#  r   r   rH   rd   r   r   r   !test_encode_surrogateescape_error     "z+ASCIITest.test_encode_surrogateescape_errorc                 C   r  )Nr  rL  r  )r   r:   rd   r   r   r   r    rq  zASCIITest.test_decodec              	   C   r  )Nr!  r%  rL  rc  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                   @   r'  )

Latin1Testc              	   C   R   dD ]$\}}| j ||d | |d| W d    n1 s!w   Y  qd S )N))r  r  )u   éÿs   rz   r  latin1r  r   rz   r  r   r   r   r       zLatin1Test.test_encodec              	   C   r  )N))   [€]r   r  )r  r   s   [??])u	   [€򫳞]r   s   [\u20ac\U000abcde])r  r   s   [&#8364;&#56448;]r  r%  r  r  r(  r   r   r   test_encode_errors  r  zLatin1Test.test_encode_errorsc                 C   r  )Nu   €r  r#  r  rd   r   r   r   r    r  z,Latin1Test.test_encode_surrogateescape_errorc              	   C   r  )N))r  r  )r"  u   [ÿ]r  r  rc  r  r   r   r   r    r  zLatin1Test.test_decodeN)r   r   r   r  r  r  r  r   r   r   r   r    s
    r  c                   @   r'  )
StreamRecoderTestc                 C   sR   t  }td}t||j|jtjj	tjj
}|ddg | | d d S )NrL  r     bs   ab)ra   rb   r8   r   r9  rH   r:   r  rL  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  )ra   rb   r8   r   r9  rH   r:   r  r  r"  r#  r-   r   r   )r   r  r  r  r  r   r   r   
test_write   s   
zStreamRecoderTest.test_writec                 C   s|   t dd}t|dd}| | d |d | | d | | d | | d | | d d S )	Nzline1
line2
line3
r  r  s   line1
r   s   line2
s   line3
rK   )ra   rb   rH   r8   r+  r   rh   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
)	ra   rb   rH   r8   r+  r  r-   r   rh   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().
    )rL  u   ulatin1:§éu   u255:ÿu   UCS:é€􏿿u   surrogates:)s
   blatin1:s   b255:u   rN   c                 C      t |d|S r/   )r  ZEncodeLocaleEx)r   r  r  r   r   r   rH   2     zLocaleCodecTest.encodec                 C   s   | j D ]]}| j|dM z	|| j|}W n/ tyD   | t}| || W d    n1 s2w   Y  t|j}| 	|d Y nw | ||}| 
|| W d    n1 s[w   Y  qd S )N)r  z!encode error: pos=[0-9]+, reason=)STRINGSr'  rH   ENCODINGr   r   rq  r  r,  ZassertRegexr   )r   r  r  r  r0  errmsgr^   r   r   r   check_encode_strings5  s"   

z$LocaleCodecTest.check_encode_stringsc                 C      |  d d S NrN   r	  rd   r   r   r   test_encode_strictC  r  z"LocaleCodecTest.test_encode_strictc                 C   r
  Nr#  r  rd   r   r   r   test_encode_surrogateescapeF  r  z+LocaleCodecTest.test_encode_surrogateescapec              
   C   f   z|  dd W n# ty+ } zt|dkr | | jd n W Y d }~nd }~ww | d d S )NrL   r   unsupported error handlerz4 encoder doesn't support surrogatepass error handler)rH   r  r  r  r  r	  r   r1  r   r   r   test_encode_surrogatepassI     z)LocaleCodecTest.test_encode_surrogatepassc                 C   L   |  t}| dd W d    n1 sw   Y  | t|jd d S )NrL   r   r  )r   r  rH   r   r  r,  r   r0  r   r   r   %test_encode_unsupported_error_handlerU     z5LocaleCodecTest.test_encode_unsupported_error_handlerc                 C   r  r/   )r  ZDecodeLocaleEx)r   r^   r  r   r   r   r:   Z  r  zLocaleCodecTest.decodec                 C   sX  | j dk}|r
d}nd}t| j}| jD ]2}z|| j |}||vr'|| W n ty3   d }Y nw |rF|| j d}||krF|| q|D ]`}| j|dP z	|| j |}W n2 t	y   | 
t}	| || W d    n1 sxw   Y  t|	j}
| |
d|
 Y nw | ||}| || W d    n1 sw   Y  qId S )Nr  r#  rN   r   )r^   zdecode error: )r  r  BYTES_STRINGSr  rH   ri   r   r'  r:   r   r   rq  r  r,  r?   
startswithr   )r   r  Zis_utf8Zencode_errorsstringsr  r^   Zencoded2r  r0  r  r  r   r   r   check_decode_strings]  sH   





z$LocaleCodecTest.check_decode_stringsc                 C   r
  r  r  rd   r   r   r   test_decode_strict  r  z"LocaleCodecTest.test_decode_strictc                 C   r
  r  r  rd   r   r   r   test_decode_surrogateescape  r  z+LocaleCodecTest.test_decode_surrogateescapec              
   C   r  )NrK   r   r  z4 decoder doesn't support surrogatepass error handler)r:   r  r  r  r  r  r  r   r   r   test_decode_surrogatepass  r  z)LocaleCodecTest.test_decode_surrogatepassc                 C   r  )NrK   r   r  )r   r  r:   r   r  r,  r  r   r   r   %test_decode_unsupported_error_handler  r  z5LocaleCodecTest.test_decode_unsupported_error_handlerNrM   )r   r   r   r3   r   getfilesystemencodingr  r  r  Z
SURROGATESrH   r	  r  r  r  r  r:   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      t dd}| |d d S )NzCaesar liked ciphersrot-13zPnrfne yvxrq pvcuref)r8   rH   r   )r   
ciphertextr   r   r   r    rJ  zRot13Test.test_encodec                 C   r$  )NzRg gh, Oehgr?r%  zEt tu, Brute?)r8   r:   r   )r   	plaintextr   r   r   r    rJ  zRot13Test.test_decodec                 C   &   t d }|d}| |d d S )Nr%  zABBA nag Cheryl BakerzNOON ant Purely Onxre)r8   rG   rH   r   )r   r  r&  r   r   r   r       
z!Rot13Test.test_incremental_encodec                 C   r(  )Nr%  zterra Ares envy thazgreen Nerf rail gun)r8   r9   r:   r   )r   r  r'  r   r   r   r    r)  z!Rot13Test.test_incremental_decodeN)r   r   r   r3   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)ra   r  r  r@  r?  r  r2   r   )r   ZinfileZoutfileZ
plain_textr   r   r   test_rot13_func  s   

zRot13UtilTest.test_rot13_funcN)r   r   r   r3   r+  r   r   r   r   r*    s    r*  c                   @   s    e Zd ZdZdd Zdd ZdS )CodecNameNormalizationTestzTest codec name normalizationc                    s   d d fdd}t | | t j| |  t d |  t d |  t d |  t d |  t d	 | t d
 | t d | t d | t d | t d d S )N)r6   r   r  rk  )NNNNc                    s   | dkr S S )Naaa_8r   r   ZFOUNDZ	NOT_FOUNDr   r   r
    s   zFCodecNameNormalizationTest.test_codecs_lookup.<locals>.search_functionr-  zAAA-8zAAA---8zAAA   8u
   aaaé€-8zAAA.8zAAA...8zBBB-8zBBB.8u   aé€-8)r8   r  r   r  r   r   )r   r
  r   r.  r   test_codecs_lookup  s   
z-CodecNameNormalizationTest.test_codecs_lookupc                 C   sj   t j}| |dd | |dd | |dd | |dd | |dd | |dd d S )Nr  u   utfé€􏿿-8zutf   8zUTF 8ZUTF_8zutf.8zutf...8)r  normalize_encodingr   )r   	normalizer   r   r   !test_encodings_normalize_encoding  s   z<CodecNameNormalizationTest.test_encodings_normalize_encodingN)r   r   r   r3   r/  r2  r   r   r   r   r,    s    r,  __main__)Tr8   r  ra   r  r   rk  r  r   testr   Ztest.supportr   r   r  ImportErrorr"   ZSIZEOF_WCHAR_TZsizeofZc_wcharr   r%   r-  r&   r5   rJ   ZTestCaser   r   r   r   r  r  r  rJ  rd  ri  rv  r  r  rC   r	   r  reprr  r  r  r  r  rG  rL  r  r  ri   r  r  r  r  r  r  r  r"  r(  r1  rF  rd  rB  rD  rE  rm  ro  rp  rl  platformr  r  r  r  ZskipIfr  r#  r*  r,  r   mainr   r   r   r   <module>   s    "  V`..W,,^ VJg! ] h

  y) S"9


   W'%.q
%