B
    18™\N:  ã               @   sx   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
 G dd„ dƒZG dd„ dejƒZd	d
„ ZdS )é    N)ÚHTTPException)Úsupport)ÚBytesIOc               @   sÄ   e Zd ZdZdZdZdZdZdZdZ	dZ
dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd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 ),ÚTestBaseÚ Né   r   u   í»®c             C   sX   | j d krt | j¡| _ | j j| _| j j| _| j j| _| j j| _	| j j
| _
| j j| _d S )N)ÚcodecÚcodecsÚlookupÚencodingÚencodeÚdecodeÚstreamreaderÚreaderÚstreamwriterÚwriterÚincrementalencoderÚincrementaldecoder)Úself© r   ú_/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/multibytecodec_support.pyÚsetUp   s    





zTestBase.setUpc             C   s    g }xD| j D ]:}| d¡}| ¡ }|dks.t‚dd„ |D ƒ}| |¡ qW xPt|Ž D ]D\}}|  |¡d }|  || d¡¡ | jrT|  ||  	|¡d ¡ qTW d S )Nó   
ó    c             S   s   g | ]}|d  ‘qS )r   r   )Ú.0Úliner   r   r   ú
<listcomp>*   s    z-TestBase.test_chunkcoding.<locals>.<listcomp>r   zutf-8)
ÚtstringÚsplitÚpopÚAssertionErrorÚappendÚzipr   ÚassertEqualÚroundtriptestr   )r   Ztstring_linesÚbÚlinesÚlastZnativeÚutf8Úur   r   r   Útest_chunkcoding$   s    
zTestBase.test_chunkcodingc             C   sÎ   xÈ| j D ]¾\}}}t|tƒr$| j}n| j}|r¶|||ƒd }|| jkr~|  t|ƒtkt|ƒ¡ |  ||d|| j	|||f ¡ qÆ|  t|ƒtkt|ƒ¡ |  ||d|| j	|||f ¡ q|  
t|||¡ qW d S )Nr   z%a.decode(%r, %r)=%a != %az%a.encode(%r, %r)=%a != %a)Ú
codectestsÚ
isinstanceÚbytesr   r   Ú
assertTrueÚtypeÚstrr#   r   ÚassertRaisesÚUnicodeError)r   ÚsourceÚschemeÚexpectedÚfuncÚresultr   r   r   Útest_errorhandle2   s$    



zTestBase.test_errorhandlec             C   s0   | j r|  d¡ d}|  |  |d¡d d¡ d S )Nz$encoding contains full ISO 10646 mapu   à¬“à¬£à­  nd eggsÚxmlcharrefreplacer   s   &#2835;&#2851;&#2912; nd eggs)Úhas_iso10646ÚskipTestr#   r   )r   Úsr   r   r   Útest_xmlcharrefreplaceI   s    
zTestBase.test_xmlcharrefreplacec                sj   | j r|  d¡ ddlm‰  ‡ fdd„}t d|¡ | jrF| j\}}nd}d}|  |  |d¡d |¡ d S )	Nz$encoding contains full ISO 10646 mapr   )Úcodepoint2namec                s|   t | tƒstd|  ƒ‚g }xP| j| j| j… D ]:}t|ƒˆ krV| dˆ t|ƒ  ¡ q.| dt|ƒ ¡ q.W d |¡| jfS )Nzdon't know how to handle %rz&%s;z&#%d;r   )	r,   ÚUnicodeEncodeErrorÚ	TypeErrorÚobjectÚstartÚendÚordr!   Újoin)ÚexcÚlÚc)r>   r   r   ÚxmlcharnamereplaceY   s    
z>TestBase.test_customreplace_encode.<locals>.xmlcharnamereplaceztest.xmlcharnamereplaceu   Â«â„œÂ» = âŒ©áˆ´âŒªs*   &laquo;&real;&raquo; = &lang;&#4660;&rang;)	r:   r;   Zhtml.entitiesr>   r	   Úregister_errorÚxmlcharnametestr#   r   )r   rI   ÚsinZsoutr   )r>   r   Útest_customreplace_encodeS   s    

z"TestBase.test_customreplace_encodec             C   s>   dd„ }t  d|¡ |  d| j d d¡d }|  |d¡ d S )Nc             S   s
   d| j fS )Ns   1234)rC   )rF   r   r   r   Ú	myreplaceo   s    z7TestBase.test_callback_returns_bytes.<locals>.myreplaceztest.cjktestÚabcÚdefr   s
   abc1234def)r	   rJ   r   Úunmappedunicoder#   )r   rN   Úencr   r   r   Útest_callback_returns_bytesn   s    z$TestBase.test_callback_returns_bytesc                sN   ‡ fdd„}t  d|¡ x0dddgg d tƒ fD ]‰ |  t| j| jd¡ q.W d S )Nc                s
   ˆ | j fS )N)rC   )rF   )Úretr   r   rN   v   s    z7TestBase.test_callback_wrong_objects.<locals>.myreplaceztest.cjktestr   é   é   )r	   rJ   rA   r1   r@   r   rQ   )r   rN   r   )rT   r   Útest_callback_wrong_objectsu   s
    z$TestBase.test_callback_wrong_objectsc             C   s^   dd„ }t  d|¡ |  |  d| j d d¡d¡ dd„ }t  d|¡ |  t| j| jd¡ d S )Nc             S   s   dt | jƒfS )NÚx)ÚintrC   )rF   r   r   r   rN      s    z4TestBase.test_callback_long_index.<locals>.myreplaceztest.cjktestÚabcdÚefgh)s	   abcdxefghé	   c             S   s   dt jd fS )NrX   r   )ÚsysÚmaxsize)rF   r   r   r   rN   …   s    )r	   rJ   r#   r   rQ   r1   Ú
IndexError)r   rN   r   r   r   Útest_callback_long_index~   s    
z!TestBase.test_callback_long_indexc             C   s,   dd„ }t  d|¡ |  t| j| jd¡ d S )Nc             S   s   dS )N)rX   Nr   )rF   r   r   r   rN   Œ   s    z4TestBase.test_callback_None_index.<locals>.myreplaceztest.cjktest)r	   rJ   r1   r@   r   rQ   )r   rN   r   r   r   Útest_callback_None_index‹   s    z!TestBase.test_callback_None_indexc                s@   ‡ fdd„‰ dˆ _ t dˆ ¡ |  |  d| j d d¡d¡ d S )Nc                s*   ˆ j dkrˆ  j d8  _ dS d| jfS d S )Nr   r   )ÚREPLACEDr   ZTERMINAL)ÚlimitrC   )rF   )rN   r   r   rN   “   s    
z8TestBase.test_callback_backward_index.<locals>.myreplacerV   ztest.cjktestrZ   r[   )s4   abcdREPLACEDabcdREPLACEDabcdREPLACEDabcdTERMINALefghr\   )rc   r	   rJ   r#   r   rQ   )r   r   )rN   r   Útest_callback_backward_index’   s    z%TestBase.test_callback_backward_indexc             C   s6   dd„ }t  d|¡ |  |  d| j d d¡d¡ d S )Nc             S   s   d| j d fS )Nrb   rU   )rC   )rF   r   r   r   rN       s    z7TestBase.test_callback_forward_index.<locals>.myreplaceztest.cjktestrZ   r[   )s   abcdREPLACEDghr\   )r	   rJ   r#   r   rQ   )r   rN   r   r   r   Útest_callback_forward_indexŸ   s    z$TestBase.test_callback_forward_indexc             C   s,   dd„ }t  d|¡ |  t| j| jd¡ d S )Nc             S   s   dS )N)ZTERMéd   r   )rF   r   r   r   rN   §   s    z:TestBase.test_callback_index_outofbound.<locals>.myreplaceztest.cjktest)r	   rJ   r1   r_   r   rQ   )r   rN   r   r   r   Útest_callback_index_outofbound¦   s    z'TestBase.test_callback_index_outofboundc             C   s¬   t  d¡}xœd gttddƒƒ dddddg D ]v}|t| jd ƒƒ}tƒ }|  ¡ }x:|d k	rh| |¡}n| ¡ }|svP | |¡}| 	|¡ qTW |  
| ¡ | jd	 ¡ q.W d S )
Nzutf-8r   é!   é@   é€   é   i   i   r   )r	   Ú	getreaderÚlistÚranger   r   r   Úreadr   Úwriter#   Úgetvalue)r   Ú
UTF8ReaderÚsizehintÚistreamÚostreamÚencoderÚdataÚer   r   r   Útest_incrementalencoder­   s    

z TestBase.test_incrementalencoderc             C   sž   t  d¡}xŽd dgttddƒƒ ddddd	g D ]f}t| jd
 ƒ}|tƒ ƒ}|  ¡ }x*| |¡}|shP qV| |¡}| 	|¡ qVW |  
| ¡ | jd ¡ q0W d S )Nzutf-8éÿÿÿÿr   rh   ri   rj   rk   i   i   r   )r	   Ú	getwriterrm   rn   r   r   r   ro   r   rp   r#   rq   )r   Ú
UTF8Writerrs   rt   ru   Údecoderrw   r)   r   r   r   Útest_incrementaldecoderÁ   s    



z TestBase.test_incrementaldecoderc             C   sŽ   | j }|  ¡ }|  t|j|d¡ d|_|  | |d¡d¡ | ¡  dd„ }t 	d|¡ d|_|  | |d¡d¡ d|_|  | |d¡d¡ d S )NTÚignorer   c             S   s
   d| j fS )NÚcalled)rC   )rF   r   r   r   ÚtempreplaceÜ   s    zDTestBase.test_incrementalencoder_error_callback.<locals>.tempreplaceztest.incremental_error_callbacks   called)
rQ   r   r1   r?   r   Úerrorsr#   Úresetr	   rJ   )r   Úinvrx   r   r   r   r   Ú&test_incrementalencoder_error_callbackÒ   s    z/TestBase.test_incrementalencoder_error_callbackc             C   sº   t  d¡}xªdD ]¢}xœd dgttddƒƒ dddd	d
g D ]t}|  t| jd ƒ¡}|tƒ ƒ}t||ƒ}x0||ƒ}|svP |dkrŠ| |¡ qh| 	|¡ qhW |  
| ¡ | jd ¡ q:W qW d S )Nzutf-8)ro   ÚreadlineÚ	readlinesrz   r   rh   ri   rj   rk   i   i   r   r‡   )r	   r{   rm   rn   r   r   r   ÚgetattrÚ
writelinesrp   r#   rq   )r   r|   Únamers   rt   ru   r6   rw   r   r   r   Útest_streamreaderæ   s    



zTestBase.test_streamreaderc       	      C   sÌ   d}t  d¡}x¸|D ]°}xªd gttddƒƒ ddddd	g D ]„}|t| jd ƒƒ}|  tƒ ¡}t||ƒ}x@|d k	r|||ƒ}n|ƒ }|sˆP |d
krœ| |¡ qj| 	|¡ qjW |  
| ¡ | jd ¡ q<W qW d S )N)ro   r†   r‡   zutf-8r   rh   ri   rj   rk   i   i   r‡   r   )r	   rl   rm   rn   r   r   r   rˆ   r‰   rp   r#   rq   )	r   Z	readfuncsrr   rŠ   rs   rt   ru   r6   rw   r   r   r   Útest_streamwriterù   s$    



zTestBase.test_streamwriterc             C   s   t ƒ }|  |¡}| ¡  d S )N)r   r   rƒ   )r   Ústreamr   r   r   r   Ú"test_streamwriter_reset_no_pending  s    
z+TestBase.test_streamwriter_reset_no_pendingc          	   C   s&   |   ¡ }|  t¡
 |`W d Q R X d S )N)r   r1   ÚAttributeErrorr‚   )r   rx   r   r   r   Ú$test_incrementalencoder_del_segfault  s    z-TestBase.test_incrementalencoder_del_segfault)Ú__name__Ú
__module__Ú__qualname__r   r   r   r+   r$   r:   rK   rQ   r   r*   r8   r=   rM   rS   rW   r`   ra   rd   re   rg   ry   r~   r…   r‹   rŒ   rŽ   r   r   r   r   r   r      s6   

	r   c               @   s\   e Zd Zg Zg Zg Zg 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 )ÚTestBase_Mappingc          	   C   s>   y|   ¡  ¡  W n( ttfk
r8   |  d| j ¡ Y nX d S )NzCould not retrieve )Úopen_mapping_fileÚcloseÚOSErrorr   r;   Ú
mapfileurl)r   r   r   r   r   $  s    zTestBase_Mapping.setUpc             C   s   t  | j¡S )N)r   Úopen_urlresourcer˜   )r   r   r   r   r•   *  s    z"TestBase_Mapping.open_mapping_filec             C   s"   | j  d¡r|  ¡  n|  ¡  d S )Nz.xml)r˜   ÚendswithÚ_test_mapping_file_ucmÚ_test_mapping_file_plain)r   r   r   r   Útest_mapping_file-  s    
z"TestBase_Mapping.test_mapping_filec       	   	   C   s8  dd„ }i }|   ¡ }x|D ]}|s,P | d¡d  ¡  ¡ }t|ƒdkrPq t|d ƒ}|dkrtt|d@ gƒ}nz|dkr¦t|d	? |d
? d@ |d? d@ |d@ gƒ}nH|dkrÎt|d
? |d? d@ |d@ gƒ}n |dkr t|d? |d@ gƒ}nq ||d ƒ}t|ƒdks ||krq |||< |  ||¡ q W W d Q R X d S )Nc          	   S   s   d  tttt|  d¡ƒƒ¡S )Nr   ú+)rE   ÚmapÚchrÚevalr   )r<   r   r   r   Ú<lambda>4  r   z;TestBase_Mapping._test_mapping_file_plain.<locals>.<lambda>ú#r   rU   é   éÿ   i   é   é   é   i   rk   r   iýÿ  )r•   r   ÚstripÚlenr¡   r-   rD   Ú
_testpoint)	r   ZunichrsZurt_waÚfr   rw   ZcsetvalÚcsetchÚunichr   r   r   rœ   3  s4    z)TestBase_Mapping._test_mapping_file_plainc          	   C   sb   |   ¡ }| ¡ }W d Q R X t d|¡}x4|D ],\}}tt|dƒƒ}t |¡}|  ||¡ q.W d S )Nz'<a u="([A-F0-9]{4})" b="([0-9A-F ]+)"/>r§   )	r•   ro   ÚreÚfindallr    rY   r-   Úfromhexr«   )r   r¬   ZucmdataZucÚuniZcodedr®   Zcodechr   r   r   r›   T  s    

z'TestBase_Mapping._test_mapping_file_ucmc             C   s   x| j D ]}| j|Ž  qW d S )N)Úsupmapsr«   )r   Úmappingr   r   r   Útest_mapping_supplemental]  s    z*TestBase_Mapping.test_mapping_supplementalc             C   sH   ||f| j kr"|  | | j¡|¡ ||f| jkrD|  t|| jƒ|¡ d S )N)Úpass_enctestr#   r   r   Úpass_dectestr0   )r   r­   r®   r   r   r   r«   a  s    zTestBase_Mapping._testpointc             C   sÚ   xÔ| j D ]Ê\}}}t|tƒr$|j}n|j}|rÀt|tƒr||| j|ƒ}|  t|ƒtkt|ƒ¡ |  	||d|| j|||f ¡ qÒ|| j|ƒ}|  t|ƒtkt|ƒ¡ |  	||d|| j|||f ¡ q|  
t|| j|¡ qW d S )Nz%a.decode(%r, %r)=%a != %az%a.encode(%r, %r)=%a != %a)r+   r,   r-   r   r   r   r.   r/   r0   r#   r1   r2   )r   r3   r4   r5   r6   r7   r   r   r   r8   g  s&    



z!TestBase_Mapping.test_errorhandleN)r‘   r’   r“   r¶   r·   r³   r+   r   r•   r   rœ   r›   rµ   r«   r8   r   r   r   r   r”     s   !	r”   c          	   C   sv   t j t j t¡d¡}tt j || d ¡dƒ}| ¡ }W d Q R X tt j || d ¡dƒ}| ¡ }W d Q R X ||fS )NZcjkencodingsz.txtÚrbz	-utf8.txt)ÚosÚpathrE   ÚdirnameÚ__file__Úopenro   )rŠ   Údirr¬   Úencodedr(   r   r   r   Úload_teststring  s    rÀ   )r	   r¹   r¯   r]   ÚunittestÚhttp.clientr   Útestr   Úior   r   ÚTestCaser”   rÀ   r   r   r   r   Ú<module>   s     a