o
    g
                    @   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jZ:G dHdI dIe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 F/Users/admin/.pyenv/versions/3.10.0/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m	} dddG  fdddt j
}|||||}|d	|d
f}| }	|| d|	S )Nr   )POINTERWINFUNCTYPEWinDLL)BOOLUINTBYTEWCHARr   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 ]\}}|t|g || 7 }| 	|| q| 	| d | 	|j
d t| j }d}t|| j|D ]\}}||t|g7 }| 	|| qQ| 	|ddd | 	|jd |  d}t|| j|D ]\}}||t|g7 }| 	|| q| 	|ddd | 	|jd || j}	| 	|dtdd |	D | j d S )N     Tc                 S   s   g | ]}t |gqS r   bytes.0cr   r   r   
<listcomp>   s    z*ReadTest.check_partial.<locals>.<listcomp>)r&   r8   	getreaderrA   ziprH   r-   rN   r2   r   
bytebufferr9   r:   r)   resetjoin
iterdecode)
r   r
   ZpartialresultsqrresultrQ   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   rS   )r
   streamr   r   r   rS         z)ReadTest.test_readline.<locals>.getreaderTc                    s8    | }g }	 |j ||d}|sq|| qd|S )NT)r0   keepends|)readlineappendrW   )r
   rd   r0   readerlinesline)rS   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   re   P   azxxx
rd   xxx)TN)r   	enumeraterg   rW   r7   rf   )r   rk   r1   Z	sexpectedZsexpectednoendsZlineendsZvwZvworC   Zlineendr0   rh   r   )rS   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^   )ra   datar   r   r   rS      rc   z8ReadTest.test_mixed_readline_and_read.<locals>.getreaderr   r6   d   (      )r0   r,      j   )rW   r   rf   r2   r	   	readlines)r   ri   rS   fr   rw   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<%
rn   zimport logging
z+log=logging.getLogger("Snakelets.logger")
rn   rn   zuser=self.SessionCtx.user
z-storageEngine=self.SessionCtx.storageEngine
rn   rn   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")
rn   zshowdate=None
rn   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   )	r_   r`   rW   rH   rA   r8   rS   ru   r   )r   r1   ra   rh   rC   rj   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Frs   fooz
barrL   ZbarZbazTrm   zbarzfoo
)r&   r8   	getwriterrA   rS   r-   r   rf   )r   rY   writerrh   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   r_   r`   r8   rS   r   rf   )r   s1s2s3r1   ra   rh   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   ra   rh   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   )rP   br   r   r   	<genexpr>  s    z0ReadTest.test_lone_surrogates.<locals>.<genexpr>)assertRaisesUnicodeEncodeErrorrH   rA   r   r	   ill_formed_sequenceUnicodeDecodeErrorr:   ill_formed_sequence_replacerW   )	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   rx   rC   decr   r   r   test_incremental_surrogatepass  s   z'ReadTest.test_incremental_surrogatepassN)r   r   r   r]   rv   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   r_   r`   r-   getvaluer?   spamlespamber   r2   r   _rh   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   r_   r`   r8   rS   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]   rb   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_decoderb   r   r   r   test_handlers     zUTF32Test.test_handlersc                 C      |  ttjddd d S N   strictT)r   r   r8   r   rb   r   r   r   test_errors     
zUTF32Test.test_errorsc                 C   (   |  | jd| j |  | jd| j d S Nr   rF   rA   r   r   rb   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   rb   r   r   r   r   $  r   zUTF32LETest.test_partialc                 C      |  d| jd d S )N   𐈃s    r   rH   rA   rb   r   r   r   test_simple?     zUTF32LETest.test_simplec                 C   r   r   )r   r   r8   utf_32_le_decoderb   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   rb   r   r   r   r   R  r   zUTF32BETest.test_partialc                 C   r   )Nr   s    r   rb   r   r   r   r   m  r   zUTF32BETest.test_simplec                 C   r   r   )r   r   r8   utf_32_be_decoderb   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   rb   r   r   r   r     r   zUTF16Test.test_partialc                 C   r   r   )r   r8   utf_16_decoderb   r   r   r   r     r   zUTF16Test.test_handlersc                 C   r   r   )r   r   r8   r   rb   r   r   r   r     r   zUTF16Test.test_errorsc                 C   r   r   r   rb   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   fprh   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   rb   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
  r   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:   rb   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   rb   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
  r   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  rb   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   rb   r   r   r   r   0  r   zUTF8Test.test_partialc                 C   s    d}|  | j||| j d S )Nu    ÿĀ߿ࠀ￿􏿿)rF   rA   rH   )r   rB   r   r   r   r   F  s   zUTF8Test.test_decoder_statec              	   C   sZ   dD ](\}}}| j |||d | || j|| W d    q1 s%w   Y  qd S )N)   []r   r   )r!  r   u   [��])r!  surrogateescape   [])r!  r   z
[\x80\xff]rx   error_handlerr  )subTestr   r:   rA   r   rx   r%  r  r   r   r   test_decode_errorK  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   W  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   rb   r   r   r   test_surrogatepass_handlerc  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    q1 s>w   Y  qd S )N)                  r   )         s      s      s   s      s   s   )   r7  )s   s   s   s   s   s   s   rx   )	rg   extendr&  r8   r9   rA   r   r   r:   )r   casesprefixsuffixrx   r   r   r   r   test_incremental_errorsv  s   
z UTF8Test.test_incremental_errors)r   r   r   rA   r   r   r*  r   r   r(  r   r4  rG  __classcell__r   r   r1  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:   rW   sortedsetrN   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) rr   rr   a+za+-a+-brT  rT  rT  rT  za+-b a+-b crU  rU  rU  rU  u   a+-b c	   a+-b cdrV  rV  rV  rV  u   a+-b cdĀ   a+-b cdĀerW  rW  rW  rW  rW  rW  rW  u   a+-b cdĀe𐀀rR  r   rb   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    q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-brX  )s   a+IK,brX  )s   a+IKx   a€�)s   a+IKx-b   a€�b)s   a+IKwgrrZ  )s	   a+IKwgr-br[  )s   a+IKwgr,rZ  )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+@brX  r  r   TrJ  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  rb   r   r   r   r    s    zUTF7Test.test_nonbmpc              	   C   sZ   g d}|D ]$\}}| j |d | |dd| W d    q1 s%w   Y  qd S )N))s   a+2AE-bu   ab)s   a+2AEbrX  )s   a+2AErY  )s   a+2AEA-brX  )s   a+2AH-brX  )s
   a+IKzYAQ-bu   a€b)s
   a+IKzYAQbr[  )s   a+IKzYAQA-br[  )s
   a+IKzYAd-br[  )s   a+IKwgrNgB-bu   a€€b)s   a+IKwgrNgBbr]  )s
   a+IKwgrNgBr\  )s   a+IKwgrNgBA-br]  r`  rJ  r   r&  r   r:   r  r   r   r   r     s   zUTF7Test.test_lone_surrogatesN)	r   r   r   rA   rQ  r   r   r  r   r   r   r   r   rI    s    'rI  c                   @   r4   )UTF16ExTestc                 C   s   |  ttjdddd d S )Nr   r   r   T)r   r   r8   utf_16_ex_decoderb   r   r   r   r     s   zUTF16ExTest.test_errorsc                 C   s   |  ttj d S r   )r   	TypeErrorr8   rd  rb   r   r   r   test_bad_args  r.   zUTF16ExTest.test_bad_argsN)r   r   r   r   rf  r   r   r   r   rc    s    rc  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)ri     )arrayr   r8   readbuffer_encode)r   rk  r   r   r   
test_array  s
   zReadBufferTest.test_arrayc                 C   s   |  tdd d S )NrL   rK   r   )r   r8   rl  rb   r   r   r   
test_empty     zReadBufferTest.test_emptyc                 C   "   |  ttj |  ttjd d S N*   )r   re  r8   rl  rb   r   r   r   rf  "     zReadBufferTest.test_bad_argsN)r   r   r   rm  ro  rf  r   r   r   r   rh    s    rh  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   ﻿   ﻿ rx     ﻿ ÿry     ﻿ ÿ߿rz  rz     ﻿ ÿ߿ࠀr{  r{     ﻿ ÿ߿ࠀ￿r|  r|  r|  rw  r   rb   r   r   r   r   *  r   zUTF8SigTest.test_partialc                 C   s   |  tddd d S )N   ﻿rv  rL   r   strrb   r   r   r   test_bug1601501F     zUTF8SigTest.test_bug1601501c                 C   s,   t d }d}| ||d| d S )Nrv  r   )r8   r9   r   r:   rH   )r   rD   r1   r   r   r   test_bomJ  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| }|s9q?|	| q(|
 }| || qd S Nu   ABC¡∀XYZs   ABC¡∀XYZrv  r6      )@   rL     i   i   )r8   BOM_UTF8rS   listr7   r_   r`   StringIOr2   r-   r   r   	r   Z	unistringZ
bytestringrh   sizehintZistreamZostreamrx   Zgotr   r   r   test_stream_bomO  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| }|s6q<|| q%|	 }| 
|| qd S r  )r8   rS   r  r7   r_   r`   r  r2   r-   r   r   r  r   r   r   test_stream_baree  s&   


zUTF8SigTest.test_stream_bareN)r   r   r   rA   r8   r  r*  r   r  r  r  r  r   r   r   r   ru  &  s    ru  c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
EscapeDecodeTestc                 C   s*   |  tdd |  tt d d S )NrK   rn  )r   r8   escape_decode	bytearrayrb   r   r   r   ro  }  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   rN   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! td%d&D ]K}t|g}|d'vr| t |d(| d(|  W d    n1 sw   Y  | t |d(|  d(|   W d    qq1 sw   Y  qq| t |d)d) W d    n1 sw   Y  | t |d*d* W d    n1 sw   Y  | t |d+d+ W d    d S 1 sw   Y  d S ),N   [\
]   []   [\"]s   ["]   [\']s   [']   [\\]s   [\]   [\a]s   []   [\b]s   []   [\t]s   [	]   [\n]s   [
]   [\v]s   []   [\f]s   []   [\r]s   []   [\7]   [\78]s   [8]   [\41]s   [!]   [\418]s   [!8]   [\101]s   [A]   [\1010]s   [A0]s   [\501]   [\x41]   [\x410]a   {   s   abfnrtvxr     \8   \9   \)r8   r  r   r7   rN   assertWarnsr   upperr   r:   r   rC   r   r   r   r   test_escape  sP   





















$zEscapeDecodeTest.test_escapec                 C   s   t j}| t|d | t|d | |ddd | |ddd | t|d | t|d	 | |d
dd | |d
dd d S )Ns   \xs   [\x]s   [\x]\xr   )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   ro  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                   @   rg  )PunycodeTestc                 C   s8   t D ]\}}| t|dd t|d  qd S NpunycoderK  )punycode_testcasesr   r  rH   lowerr   Zunipunyr   r   r   test_encode'  s   zPunycodeTest.test_encodec                 C   sF   t D ]\}}| ||d |dd}| ||d qd S r  )r  r   r:   rH   r  r   r   r   test_decode3  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    q
1 s:w   Y  q
d S )N   xn--w&r   )r  r   zxn-)r  errorsr  )r   r&  
isinstance	Exceptionr   r:   r   )r   Z	testcasesr  r  r  r   r   r   test_decode_invalid9  s   

z PunycodeTest.test_decode_invalidN)r   r   r   r  r  r  r   r   r   r   r  &  s    r  )-)s%   foo­͏᠆᠋bar​⁠baz︀︈️﻿s	   foobarbaz)s   CAFEs   cafe)s   ßs   ss)s   İs   i̇)s   Ńͺs   ń ιNN)s   ǰ ªs   ǰ a)s   ᾷs   ᾶι)   ǰr  )   ΐr  )   ΰr  )   ẖr  )   ὖr  )    r  )s    r  )s    N)s    r  )s   ​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  ru   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                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )IDNACodecTestc                 C   sL   |  tddd |  tddd |  tddd |  tddd	 d S )
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~  rb   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   rb   r   r   r   test_builtin_encode  r  z!IDNACodecTest.test_builtin_encodec                 C   s2   t dtd}|d | | d d S )Nr     abc   rL   )r8   rS   r_   r`   r2   r   )r   rZ   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   rM   rO   r   r   r   r         z8IDNACodecTest.test_incremental_decode.<locals>.<genexpr>r  r  r  c                 s   r  r   rM   rO   r   r   r   r     r  r  r  c                 s   r  r   rM   rO   r   r   r   r     r  r  r  c                 s   r  r   rM   rO   r   r   r   r     r  s   xn--xams	   ple-9ta.ou	   äxample.s   rgrK   TZorgs   rg.zorg.)r   rW   r8   rX   r9   r:   rV   )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   rW   r8   
iterencoderG   rH   rV   )r   encoderr   r   r   test_incremental_encode$  s0   z%IDNACodecTest.test_incremental_encodec                 C   sJ   d dd ddd dD ]}| tdj d| | tdjd| qdS )z$Only supports "strict" error handlerr  r  r   r  )r   r   r   r"  N)rH   r:   r   r  r   r  r   r   r   r   @  s   zIDNACodecTest.test_errorsN)	r   r   r   r  r  r  r  r  r   r   r   r   r   r    s    r  c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zd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   rK  objrA      []r   r  r   )r   r8   r:   r   re  r   rb   r   r   r   r  M  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   ÿffrK  r     [ÿ]r   r  r  )r   r8   rH   r   re  LookupErrorr   rb   r   r   r   r  Z  s   zCodecsModuleTest.test_encodec                 C   rq  rr  )r   re  r8   registerrb   r   r   r   test_registerh  rt  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   re  r   Zassert_called_withZ
reset_mock
unregisterr  Zassert_not_called)r   namesearch_functionr   r   r   test_unregisterl  s   


z CodecsModuleTest.test_unregisterc                 C   s2   |  ttj |  ttjd |  ttjd d S )Nr   )r   re  r8   r   r  rb   r   r   r   test_lookupx  s   zCodecsModuleTest.test_lookupc                 C   "   |  ttj |  ttjd d S Nr  )r   re  r8   
getencoderr  rb   r   r   r   test_getencoder}  rt  z CodecsModuleTest.test_getencoderc                 C   r  r  )r   re  r8   
getdecoderr  rb   r   r   r   test_getdecoder  rt  z CodecsModuleTest.test_getdecoderc                 C   r  r  )r   re  r8   rS   r  rb   r   r   r   test_getreader  rt  zCodecsModuleTest.test_getreaderc                 C   r  r  )r   re  r8   r   r  rb   r   r   r   test_getwriter  rt  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 )NZtr_TRztest needs Turkish localeASCIIrK  )
locale	setlocaleLC_CTYPEr   ErrorskipTestr8   r   r   r  )r   Z	oldlocalerQ   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   rS   r   register_errorr3  strict_errorsreplace_errorsignore_errorsxmlcharrefreplace_errorsbackslashreplace_errorsnamereplace_errorsr   EncodedFiler  rX   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    q
1 s;w   Y  q
d S )N)wrZ   zr+w+rr   rS  rK  )	r   r   r   r   r&  r8   r   r<   r,  )r   modefiler   r   r   	test_open  s    zCodecsModuleTest.test_openc                 C   s~   |  ttjdd |  ttjdd |  ttjdd |  ttjdd dD ]}|  ttjdd| |  ttjdd| q&d S )Nr  Z	undefinedr  rL   rK   )r   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   r7  r4  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  r0  r5  r6  r:  r   r   r   r   r  K  s    r  c                   @   r4   )StreamReaderTestc                 C   s   t d| _td| _d S )Nr     한
글)r8   rS   rh   r_   r`   ra   rb   r   r   r   setUp     zStreamReaderTest.setUpc                 C   s$   |  | j}| | ddg d S )Nu   한
u   글)rh   ra   r   r~   )r   r   r   r   r   test_readlines  s   zStreamReaderTest.test_readlinesN)r   r   r   r=  r?  r   r   r   r   r;    s    r;  c                   @   r  )EncodedFileTestc                 C   s\   t d}t|dd}| | d t  }t|dd}|d | | d d S )Nr<  r  r  s   \
  r     ü   )r_   r`   r8   r  r   r2   r-   r   r   r   Zefr   r   r   
test_basic  s   

zEncodedFileTest.test_basicN)r   r   r   rD  r   r   r   r   r@        r@  )erK  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_rZkoi8_tZ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   rO   )r  r   r   r     r  z/BasicUnicodeTest.test_basics.<locals>.<genexpr>c                 3        | ]}  t|gV  qd S r   r:   rN   rO   )r  r   r   r         )all_unicode_encodingsr8   r   r  endswithr   r   r  r	   r  broken_unicode_with_statefulr&   r   r-   r2   r?   typerN   rS   rG   r  rH   r9   r:   rW   rX   r  )r   r1   rA   r  r   r0   r,   rY   r   encodedresultrQ   chunkrh   decodedresultr[   r   )r  r  r   test_basics[  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  rO   )cencoderr   r   r     r  z4BasicUnicodeTest.test_basics_capi.<locals>.<genexpr>c                 3   r  r   r  rO   )cdecoderr   r   r     r  )r  r  	_testcapiZcodec_incrementalencoderr  rH   Zcodec_incrementaldecoderr:   rN   r   rW   )r   r1   rA   r  rQ   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   rS   r_   r`   rH   r7   seekr2   r   )r   r1   rA   rh   trx   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  rs  )r  r8   r  r   re  )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   re  )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   )rL  )	encodingsrL  r  Zencoding_tabler   )r   rL  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  Z  s    M
%r  c                   @   rg  )CharmapTestc                 C   s  |  tdddd |  tdddd | ttjddd | ttjddd |  tdd	dd
 |  tdd	dd
 |  tdddd |  tdddd |  tdddd |  tdddd ttd}|  t|dddt|f d S )N    r   r  r  r     􏿿bcr  r  abu   ab￾r   u   ab�r  r   zab\x02r  r   r  r  r  rL   )r   r8   charmap_decoder   r   rN   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  r   rr   r   rQ   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   rN   r7   r	   assertRaisesRegexre  r  r   r   r   test_decode_with_int2str_map0  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 )Nrr   r   rQ   r  r   r  r  i r  Zbcr  r6   r  i  r   r  r   r  r   r  )
ordr   r8   r  r   
maxunicodechrr   re  r   )r   rr   r   rQ   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 )NrA  r  r  rB  )r_   r`   r8   r  r   r2   r?   closedrC  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 )NrA  r  r      ü)	r_   r`   r8   r   r,  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_decodert   )r8   ra  utf_8_decoder  r  rd  r   r   r   utf_32_ex_decodelatin_1_decodeascii_decoder  hasattrrg   r  r   re  )r   Zdecodersr  r   r   r   test_decode_unicode 	  s$   
zTypesTest.test_decode_unicodec                 C   s   |  tdd |  tdd |  tdd |  tdd | ttjd |  tddd |  tddd	 | ttjd |  tddd |  tddd	 d S )
Nz\u1234)u   ሴr|   s   \u1234
   \U00110000z
\U00110000r   r   rl   r   )z(\x5c\x55\x30\x30\x31\x31\x30\x30\x30\x30rl   )r   r8   unicode_escape_decoderaw_unicode_escape_decoder   r   rb   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                   @   r  )UnicodeEscapeTestc                 C   (   |  tdd |  tdd d S NrL   rn  rK   rL   r   )r   r8   unicode_escape_encoder  rb   r   r   r   ro  )	     zUnicodeEscapeTest.test_emptyc                 C   s@   t j}tddD ]}|dkr| |t|t|gdf qd S )N       \   r6   )r8   r  r7   r   r  rN   r   rH   r   r   r   r   test_raw_encode-	  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   rN   r  r  r   r   r   test_raw_decode3	  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   \trm   s   \nro   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_encode9	  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' td(d)D ]U}t|g}|d*vr| t |d+| d,t|  W d    n1 sw   Y  | d-vr| t |d+|  d,t|d.   W d    qv1 sw   Y  qv| t |d/d0 W d    n1 sw   Y  | t |d1d2 W d    n1 sw   Y  | t |d3d4 W d    d S 1 sw   Y  d S )5Nr  r   r  z["]r  z[']r  z[\]r  z[]r  z[]r  z[	]r  z[
]r  z[]r  z[]r  z[]r  r  z[8]r  z[!]r  z[!8]r  z[A]r  z[A0]r  r  r  r  r  r  r  r  s	   abfnrtuvxr  r  s   UNr  r  z\8r  z\9r  u   \ú)	r8   r  r   r7   rN   r  r   r  r  r  r   r   r   test_escape_decodeH	  sV   






















 $z$UnicodeEscapeTest.test_escape_decodec              	   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      urj     Urj  r  r     [\   ]   ]\r   r   r      [�]�r  rL   rl   r  )r8   r  r7   r   r   r   r	   r   r:   rQ   rD   rC   rx   r   r   r   test_decode_errorso	  $    
	z$UnicodeEscapeTest.test_decode_errorsN	r   r   r   ro  r  r  r  r  r  r   r   r   r   r  (	  s    'r  c                   @   r  )RawUnicodeEscapeTestc                 C   r  r  )r   r8   raw_unicode_escape_encoder  rb   r   r   r   ro  	  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  rN   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   rN   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  rN   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   rN   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_errorsNr
  r   r   r   r   r  	  s    		r  c                   @   r  )EscapeEncodeTestc              	   C   s|   g d}|D ]#\}}| j |d | t|| W d    q1 s$w   Y  q| ttjd | ttjtd d S )N))rK   rn  )   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  rB  r   ri  )r&  r   r8   escape_encoder   re  r  )r   r  rx   outputr   r   r   r  	  s   
z#EscapeEncodeTest.test_escape_encodeN)r   r   r   r  r   r   r   r   r  	  rE  r  c                   @   r  )
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   rb   r   r   r   	test_utf8	  s   zSurrogateEscapeTest.test_utf8c                 C   ,   |  dddd |  dddd d S )Nr  rK  r"  r  r  rb   r   r   r   rQ  	     zSurrogateEscapeTest.test_asciic                 C   r  )Ns   foobarz
iso-8859-3r"  u	   foobarr  rb   r   r   r   test_charmap	  r  z SurrogateEscapeTest.test_charmapc                 C   s   |  dddd d S )Nu   r  r"  s   r  rb   r   r   r   test_latin1	  s   zSurrogateEscapeTest.test_latin1N)r   r   r   r  rQ  r  r  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    q1 sGw   Y  qd S )NZ
1234567890)r   r  r  r   r   r   r2  r   r   r   )r   r   r   r   r8   r   r-   r  r   r2   ZassertNotEqualtellr   )r   rx   r  rA   r   r   r   r   
test_seek0	  sV   




	


	




	
 zBomTest.test_seek0N)r   r   r   r  r   r   r   r   r  	  r  r  )base64_codecuu_codecquopri_codec	hex_codecbase64base_64uu)quopriquoted_printablequotedprintablehexrot13)r   r!  r"  r#  rot_13
zlib_codecrT   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    q1 sCw   Y  qd S )Nr  r   )	rN   r7   bytes_transform_encodingsr&  r8   r  r   r	   r  )r   ZbinputrA   or0   rC   r   r   r   r  B
  s   zTransformCodecTest.test_basicsc              	   C   n   t D ]2}| j|d" td|}t|t|}| }| |d W d    q1 s/w   Y  qd S Nr   r5  )	r2  r&  r8   rH   rS   r_   r`   r2   r   r   rA   sinrh   Zsoutr   r   r   	test_readM
     zTransformCodecTest.test_readc              	   C   r4  r5  )	r2  r&  r8   rH   rS   r_   r`   rf   r   r6  r   r   r   rv   U
  r9  z TransformCodecTest.test_readlinec              	   C   s   d}t D ]L}| j|d< |}t|}t||}t||}| || t|}t||}| || t||}| || W d    q1 sKw   Y  qd S )Ns   12345r   )r2  r&  
memoryviewr8   rH   r   r:   )r   ZoriginalrA   rx   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    q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)	r2  r&  formatr  r  rH   assertIsNoner+  	__cause__)r   	bad_inputrA   fmtmsgfailurer   r   r   /test_text_to_binary_denylists_binary_transformso
  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   rB  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    q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)	r2  r&  r8   rH   r=  r  r  r:   r  )r   rx   rA   Zencoded_datarA  rB  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    q1 s=w   Y  qd S )Ns	   immutables   mutable)r@  zR^'rot_13' is not a text encoding; use codecs.decode\(\) to handle arbitrary codecsr,  )r  r&  r  r  r:   r>  r+  r?  )r   r@  rB  rC  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   hellor-  r  r  r8   r:   r<   r+  r?  r  r   rB  rC  r   r   r   !test_custom_zlib_error_is_wrapped
  s   
z4TransformCodecTest.test_custom_zlib_error_is_wrappedc                 C   rI  )Nz'^decoding with 'hex_codec' codec failedrJ  r#  rK  rL  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    q1 s/w   Y  qqd S )N)alias)transform_aliasesitemsr8   r   r  r&  r   )r   
codec_namealiasesZexpected_namerO  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:   rb   r   r   r   test_uu_invalid
  r  z"TransformCodecTest.test_uu_invalidN)r   r   r   r  r8  rv   r<  rD  rF  rG  rH  unittest
skipUnlessr.  rM  rN  rT  rU  rV  r   r   r   r   r1  @
  s    


r1  c                 C   s
   t | S r   )_TEST_CODECSget)rR  r   r   r   _get_test_codec
  r+   r[  c                   @   s   e Zd Zdd Zdd Zdd Zejdd Zd	d
 Z	e
fddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&ExceptionChainingTestc                 C   s(   d| _ tt | tjt t| _d S )NZexception_chaining_test)rR  r8   r  r[  r   r  RuntimeErrorobj_to_raiserb   r   r   r   r=  
  s   

	zExceptionChainingTest.setUpc                 C   s"   t | jd  tj| jd  d S r   )rY  poprR  r  _cacherb   r   r   r   tearDown
  s   zExceptionChainingTest.tearDownc                 C   s    t j||| jd}|t| j< d S )N)r  )r8   r  rR  rY  )r   rH   r:   Z
codec_infor   r   r   	set_codec
  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 \({}: {}\))	r=  rR  r   r  r<   r+  r?  ZassertIsNotNone__traceback__)r   Z	operationexc_typerB  Zfull_msgZcaughtr   r   r   assertWrapped
  s   z#ExceptionChainingTest.assertWrappedc                 O   s   | j r   r^  )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)r^  rb  ri  re  rH   rR  r8   r:   )r   r^  rB  rd  r   r   r   check_wrapped
  s   "z#ExceptionChainingTest.check_wrappedc                 C   s   |  td d S )NrL   rl  r]  rb   r   r   r   test_raise_by_type  s   z(ExceptionChainingTest.test_raise_by_typec                 C   s   d}|  t|| d S )NThis should be wrappedrm  rE  r   r   r   test_raise_by_value	  s   z)ExceptionChainingTest.test_raise_by_valuec                 C   *   d}G dd dt }| |||| d S )Nro  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   MyRuntimeError  s    rs  r]  rl  r   rB  rs  r   r   r   )test_raise_grandchild_subclass_exact_size     z?ExceptionChainingTest.test_raise_grandchild_subclass_exact_sizec                 C   rq  )Nro  c                   @   s   e Zd ZdS )zVExceptionChainingTest.test_raise_subclass_with_weakref_support.<locals>.MyRuntimeErrorN)r   r   r   r   r   r   r   rs    s    rs  rt  ru  r   r   r   (test_raise_subclass_with_weakref_support  rw  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   rg  rh  rf  r   r   ri       z:ExceptionChainingTest.check_not_wrapped.<locals>.raise_obj	str inputrk  )rb  r  r]  rH   rR  r8   r:   )r   r^  rB  ri  r   rf  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   rb   r   r   r   r*   (  rz  zTExceptionChainingTest.test_init_override_is_not_wrapped.<locals>.CustomInit.__init__N)r   r   r   r*   r   r   r   r   
CustomInit'  r  r~  rL   r]  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__)clsr1  r   r   r  .  s   zQExceptionChainingTest.test_new_override_is_not_wrapped.<locals>.CustomNew.__new__)r   r   r   r  rH  r   r   r1  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^{}$)r]  attrr|  r=  )r   rB  r0  r   r   r   &test_instance_attribute_is_not_wrapped2  s   z<ExceptionChainingTest.test_instance_attribute_is_not_wrappedc                 C   s   |  tdd d S )Nr6   1r|  r]  rb   r   r   r   test_non_str_arg_is_not_wrapped8  s   z5ExceptionChainingTest.test_non_str_arg_is_not_wrappedc                 C   s   d}|  tddd| d S )Nz^\('a', 'b', 'c'\)$rr   r   rQ   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{  rk  )r=  rR  r  r  rH   r8   r:   rE  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   ry  r   r   r   encode_to_strR  rz  zSExceptionChainingTest.test_unflagged_non_text_codec_handling.<locals>.encode_to_strc                  _   r  )N)   not str!r   r   ry  r   r   r   decode_to_bytesT  rz  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$rj  zd^{!r} decoder returned 'bytes' instead of 'str'; use codecs.decode\(\) to decode to arbitrary types$rk  )	rb  r8   rH   rR  r   r:   r=  r  re  )r   r  r  r\   decodedrA  rB  r   r   r   &test_unflagged_non_text_codec_handlingL  s"   "z<ExceptionChainingTest.test_unflagged_non_text_codec_handlingN)r   r   r   r=  ra  rb  
contextlibcontextmanagerre  ri  r]  rl  rn  rp  rv  rx  r|  r  r  r  r  r  r  r  r   r   r   r   r\  
  s(    
r\  win32z"code pages are specific to Windowsc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zejdddddd Zejdddddd  Zd!S )"CodePageTest  c                 C   sL   |  ttjdd |  ttjdd |  ttjdd |  ttjdd d S )Nr   rr      ar  )r   r  r8   code_page_encodecode_page_decodeOSErrorrb   r   r   r   test_invalid_code_pageo  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 )	Nrg       ÿs    r   TCP_UTF8r   )r  r   r8   r  r   r  r  rb   r   r   r   test_code_page_nameu  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  r   r  )   ｄ騾r      )r  r   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   r   N)   []r"  r  )r  r   N)r  r   r  )r  r   r  )r  r   N)r  r   r   )r  r   u   [�])r  r   z[\xff])r  r"  r  )r  r   N)    abcr   N)r  r   z abc)r  r   u   � abc)r  r   z\x81 abcr  r  rb   r   r   r   
test_cp932  s   zCodePageTest.test_cp932c                 C   r  )Ni  )r  )   é€r      )r  r   r   )   Łr   N)r  r   rK   )r  r      L)   r"     )r  r   N)r  )r  r   r  )r   r   r  r  rb   r   r   r   test_cp1252  s   zCodePageTest.test_cp1252c                 C   s    d}|  |d | |d d S )N  )r  )r  r      +AOkgrA-)r  r      +2//f/w-)r   r      +3IA-)r   r      +//0-)r  )r  r   r  )r  r   r  )r  r   r   )r  r   r   )s   [+/]r   r   )r  r   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  rb   r   r   r   test_multibyte_encoding  s   z$CodePageTest.test_multibyte_encodingc                 C   s   t jr	tjd ddddddgtdd	d
R D ]}t|r.| t	|ddd|  qt jr8t
d|  q| t	ddd d S )Nrm   i,  i-  i.  i1  i3  i5  i  i  r  r  r  r#   z  skipping cp=rs  )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     r   Fr  s   )r  r   s   )u   騾騾rj  r  r  )r8   r  r   )r   r  r   r   r   test_incremental  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   r8  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   rl   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  rl   r  r   Tr6   r   u   0123456턀01iu   56턀0123456턀r  r  r   r   r   test_large_utf8_input3  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  j  s"    !
r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	ASCIITestc                 C      |  ddd d S )Nr  rK  s   abc123r  rb   r   r   r   r  C  rp  zASCIITest.test_encodec              	   C   X   dD ]'\}}}| j |||d | |d|| W d    q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$  rK  r&  r   rH   r'  r   r   r   test_encode_errorF     zASCIITest.test_encode_errorc                 C   <   |  t ddd W d    d S 1 sw   Y  d S )Nu   ÿrK  r"  r   r   rH   rb   r   r   r   !test_encode_surrogateescape_errorT     "z+ASCIITest.test_encode_surrogateescape_errorc                 C   r  )Nr  rK  r  )r   r:   rb   r   r   r   r  Y  rp  zASCIITest.test_decodec              	   C   r  )Nr   r$  rK  rb  r'  r   r   r   r(  \  s   zASCIITest.test_decode_errorN)r   r   r   r  r  r  r  r(  r   r   r   r   r  B  s    r  c                   @   r  )

Latin1Testc              	   C   R   dD ]$\}}| j ||d | |d| W d    q1 s!w   Y  qd S )N))r  r  )u   éÿs   rx   r  latin1r  r   rx   r  r   r   r   r  j  
   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_errorsr  r  zLatin1Test.test_encode_errorsc                 C   r  )Nu   €r  r"  r  rb   r   r   r   r    r  z,Latin1Test.test_encode_surrogateescape_errorc              	   C   r  )N))r  r  )r!  u   [ÿ]r  r  rb  r  r   r   r   r    r  zLatin1Test.test_decodeN)r   r   r   r  r  r  r  r   r   r   r   r  i  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 )NrK  r     bs   ab)r_   r`   r8   r   r-  rH   r:   r  rK  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  )r_   r`   r8   r   r-  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   )r_   r`   rH   r8   r  r   rf   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
)	r_   r`   rH   r8   r  r  r-   r   rf   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().
    )rK  u   ulatin1:§éu   u255:ÿu   UCS:é€􏿿u   surrogates:)s
   blatin1:s   b255:u   r   c                 C      t |d|S r/   )r  ZEncodeLocaleEx)r   r  r  r   r   r   rH        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    q1 s[w   Y  qd S )N)r  z!encode error: pos=[0-9]+, reason=)STRINGSr&  rH   ENCODINGr   r   r]  r  r+  ZassertRegexr   )r   r  r  r  r/  errmsgr\   r   r   r   check_encode_strings  s    

z$LocaleCodecTest.check_encode_stringsc                 C      |  d d S Nr   r  rb   r   r   r   test_encode_strict  r  z"LocaleCodecTest.test_encode_strictc                 C   r  Nr"  r  rb   r   r   r   test_encode_surrogateescape  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   r0  r   r   r   test_encode_surrogatepass     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   r/  r   r   r   %test_encode_unsupported_error_handler     z5LocaleCodecTest.test_encode_unsupported_error_handlerc                 C   r  r/   )r  ZDecodeLocaleEx)r   r\   r  r   r   r   r:     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    qI1 sw   Y  qId S )Nr  r"  r   r   )r\   zdecode error: )r  r  BYTES_STRINGSr  rH   rg   r   r&  r:   r   r   r]  r  r+  r?   
startswithr   )r   r  Zis_utf8Zencode_errorsZstringsr  r\   Zencoded2r  r/  r  r  r   r   r   check_decode_strings  sF   





z$LocaleCodecTest.check_decode_stringsc                 C   r  r  r  rb   r   r   r   test_decode_strict  r  z"LocaleCodecTest.test_decode_strictc                 C   r  r  r  rb   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_handlerN)r   )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  0  r>  zRot13Test.test_encodec                 C   r  )NzRg gh, Oehgr?r  zEt tu, Brute?)r8   r:   r   )r   	plaintextr   r   r   r  4  r>  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  8     
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)r_   r  r  r,  r+  r  r2   r   )r   ZinfileZoutfileZ
plain_textr   r   r   test_rot13_funcH  s   

zRot13UtilTest.test_rot13_funcN)r   r   r   r3   r  r   r   r   r   r  C  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  rj  )NNNNc                    s   | dkr S S )Naaa_8r   r   ZFOUNDZ	NOT_FOUNDr   r   r  X  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_lookupU  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_encodingk  s   z<CodecNameNormalizationTest.test_encodings_normalize_encodingN)r   r   r   r3   r  r  r   r   r   r   r  S  s    r  __main__)Tr8   r  r_   r  r   rW  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  rI  rc  rh  ru  r  r  rC   r	   r  reprr  r  r  r  r  r;  r@  r  r  rg   r  r  r  r  r  r  r  r  r  r  r2  rP  r.  r0  r1  rY  r[  r\  rX  platformr  r  r  r  ZskipIfr  r  r  r  r   mainr   r   r   r   <module>   s    "  V`..V,,^ V>g! W h

  y)X2"9


   W'%.q
%