a
    äze­8  ã                   @   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 u 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   ú1/usr/lib/python3.9/test/multibytecodec_support.pyÚsetUp   s    





zTestBase.setUpc                 C   sŒ   g }| j D ].}| d¡}| ¡ }dd„ |D ƒ}| |¡ q
t|Ž D ]D\}}|  |¡d }|  || d¡¡ | jrB|  ||  |¡d ¡ qBd S )Nó   
c                 S   s   g | ]}|d  ‘qS )r   r   )Ú.0Úliner   r   r   Ú
<listcomp>*   ó    z-TestBase.test_chunkcoding.<locals>.<listcomp>r   úutf-8)	ÚtstringÚsplitÚpopÚappendÚzipr   ÚassertEqualÚroundtriptestr   )r   Ztstring_linesÚbÚlinesZlastZnativeÚutf8Úur   r   r   Útest_chunkcoding$   s    

zTestBase.test_chunkcodingc                 C   sÊ   | j D ]¾\}}}t|tƒr"| j}n| j}|r´|||ƒd }|| ju r||  t|ƒtu t|ƒ¡ |  ||d|| j	|||f ¡ qÄ|  t|ƒtu t|ƒ¡ |  ||d|| j	|||f ¡ q|  
t|||¡ qd S )Nr   ú%a.decode(%r, %r)=%a != %aú%a.encode(%r, %r)=%a != %a)Ú
codectestsÚ
isinstanceÚbytesr   r   Ú
assertTrueÚtypeÚstrr%   r   ÚassertRaisesÚUnicodeError©r   ÚsourceÚschemeZexpectedÚfuncÚresultr   r   r   Útest_errorhandle2   s0    


ÿÿÿ
ÿÿÿzTestBase.test_errorhandlec                 C   s0   | j r|  d¡ d}|  |  |d¡d d¡ d S )Nú$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 )	Nr<   r   ©Úcodepoint2namec                    sx   t | tƒstd|  ƒ‚g }| j| j| j… D ]:}t|ƒˆ v rT| dˆ t|ƒ  ¡ q,| dt|ƒ ¡ q,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ÚcrB   r   r   ÚxmlcharnamereplaceY   s    
z>TestBase.test_customreplace_encode.<locals>.xmlcharnamereplaceztest.xmlcharnamereplaceu   Â«â„œÂ» = âŒ©áˆ´âŒªs*   &laquo;&real;&raquo; = &lang;&#4660;&rang;)	r>   r?   Zhtml.entitiesrC   r
   Úregister_errorÚxmlcharnametestr%   r   )r   rN   ÚsinZsoutr   rB   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©rH   ©rK   r   r   r   Ú	myreplaceo   s    z7TestBase.test_callback_returns_bytes.<locals>.myreplaceútest.cjktestÚabcÚdefr   s
   abc1234def)r
   rO   r   Úunmappedunicoder%   )r   rU   Úencr   r   r   Útest_callback_returns_bytesn   s    z$TestBase.test_callback_returns_bytesc                    sH   ‡ fdd„}t  d|¡ g d¢g d tƒ fD ]‰ |  t| j| jd¡ q*d S )Nc                    s
   ˆ | j fS r   rS   rT   ©Úretr   r   rU   v   s    z7TestBase.test_callback_wrong_objects.<locals>.myreplacerV   )r   é   é   )r
   rO   rF   r4   rE   r   rY   ©r   rU   r   r\   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)ÚintrH   rT   r   r   r   rU      s    z4TestBase.test_callback_long_index.<locals>.myreplacerV   ÚabcdÚefgh)s	   abcdxefghé	   c                 S   s   dt jd fS )Nrb   r   )ÚsysÚmaxsizerT   r   r   r   rU   …   s    )r
   rO   r%   r   rY   r4   Ú
IndexErrorr`   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)rb   Nr   rT   r   r   r   rU   Œ   s    z4TestBase.test_callback_None_index.<locals>.myreplacerV   )r
   rO   r4   rE   r   rY   r`   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)ÚlimitrH   rT   ©rU   r   r   rU   “   s    
z8TestBase.test_callback_backward_index.<locals>.myreplacer_   rV   rd   re   )s4   abcdREPLACEDabcdREPLACEDabcdREPLACEDabcdTERMINALefghrf   )rm   r
   rO   r%   r   rY   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 )Nrl   r^   rS   rT   r   r   r   rU       s    z7TestBase.test_callback_forward_index.<locals>.myreplacerV   rd   re   )s   abcdREPLACEDghrf   )r
   rO   r%   r   rY   r`   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   rT   r   r   r   rU   §   s    z:TestBase.test_callback_index_outofbound.<locals>.myreplacerV   )r
   rO   r4   ri   r   rY   r`   r   r   r   Útest_callback_index_outofbound¦   s
    ÿz'TestBase.test_callback_index_outofboundc                 C   sž   t  d¡}d gttddƒƒ g d¢ D ]r}|t| jd ƒƒ}tƒ }|  ¡ }|d ur^| |¡}n| ¡ }|slq‚| |¡}| 	|¡ qJ|  
| ¡ | jd ¡ q&d S )Nr   r   é!   ©é@   é€   é   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¡}d dgttddƒƒ g d¢ D ]b}t| jd ƒ}|tƒ ƒ}|  ¡ }| |¡}|s^qtqL| |¡}| 	|¡ qL|  
| ¡ | jd ¡ q(d S )Nr   éÿÿÿÿr   rs   rt   r   )r
   Ú	getwriterry   rz   r   r    r   r{   r   r|   r%   r}   )r   Ú
UTF8Writerr   r€   r   Údecoderrƒ   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 )NZcalledrS   rT   r   r   r   ÚtempreplaceÜ   s    zDTestBase.test_incrementalencoder_error_callback.<locals>.tempreplaceztest.incremental_error_callbacks   called)
rY   r   r4   rD   r   Úerrorsr%   Úresetr
   rO   )r   Úinvr„   rŒ   r   r   r   Ú&test_incrementalencoder_error_callbackÒ   s    z/TestBase.test_incrementalencoder_error_callbackc                 C   s¨   t  d¡}dD ]”}d dgttddƒƒ g d¢ D ]p}|  t| jd ƒ¡}|tƒ ƒ}t||ƒ}||ƒ}|sjqŠ|dkr~| |¡ q\| 	|¡ q\|  
| ¡ | jd ¡ q0qd S )	Nr   ©r{   ÚreadlineÚ	readlinesr†   r   rs   rt   r   r“   )r
   r‡   ry   rz   r   r   r    ÚgetattrÚ
writelinesr|   r%   r}   )r   rˆ   Únamer   r€   r   r9   rƒ   r   r   r   Útest_streamreaderæ   s    
ÿ

zTestBase.test_streamreaderc           	      C   sº   d}t  d¡}|D ]¢}d gttddƒƒ g d¢ D ]€}|t| jd ƒƒ}|  tƒ ¡}t||ƒ}|d urp||ƒ}n|ƒ }|s|qœ|dkr| |¡ q^| 	|¡ q^|  
| ¡ | jd ¡ q2qd S )Nr‘   r   r   rs   rt   r“   r   )r
   rx   ry   rz   r   r    r   r”   r•   r|   r%   r}   )	r   Z	readfuncsr~   r–   r   r€   r   r9   rƒ   r   r   r   Útest_streamwriterù   s$    
ÿ

zTestBase.test_streamwriterc                 C   s   t ƒ }|  |¡}| ¡  d S r   )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   ƒ n1 s,0    Y  d S r   )r   r4   ÚAttributeErrorr   )r   r„   r   r   r   Ú$test_incrementalencoder_del_segfault  s    z-TestBase.test_incrementalencoder_del_segfault)Ú__name__Ú
__module__Ú__qualname__r   r	   r    r.   r&   r>   rP   rY   r   r+   r;   rA   rR   r[   ra   rj   rk   ro   rp   rr   r…   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<   z|   ¡  ¡  W n& ttfy6   |  d| j ¡ Y n0 d S )NzCould not retrieve )Úopen_mapping_fileÚcloseÚOSErrorr   r?   Ú
mapfileurlr   r   r   r   r   $  s    zTestBase_Mapping.setUpc                 C   s   t  | j¡S r   )r   Z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_plainr   r   r   r   Útest_mapping_file-  s    
z"TestBase_Mapping.test_mapping_filec                 C   sô   dd„ }i }|   ¡ Ì}|D ]¶}|s& qÒ| d¡d  ¡ }t|ƒdkrFq|d d d… dkrj|  d|›¡ t |d dd … ¡}t|ƒdkršd	|d kršq||d ƒ}t|ƒd
ks||v r¼q|||< |  ||¡ qW d   ƒ n1 sæ0    Y  d S )Nc                 S   s   d  dd„ |  d¡D ƒ¡S )Nr   c                 s   s   | ]}t t|d ƒƒV  qdS )é   N)Úchrrc   )r   rb   r   r   r   Ú	<genexpr>5  r   zMTestBase_Mapping._test_mapping_file_plain.<locals>.unichrs.<locals>.<genexpr>ú+)rJ   r!   )r@   r   r   r   Úunichrs4  s    z:TestBase_Mapping._test_mapping_file_plain.<locals>.unichrsú#r   r^   Ú0xzInvalid line: r   rv   iýÿ  )r¡   r!   ÚlenZfailr0   ÚfromhexrI   Ú
_testpoint)r   r­   Zurt_waÚfr   rƒ   ÚcsetchÚunichr   r   r   r§   3  s&    
z)TestBase_Mapping._test_mapping_file_plainc                 C   sr   |   ¡ }| ¡ }W d   ƒ n1 s&0    Y  t d|¡}|D ],\}}tt|dƒƒ}t |¡}|  ||¡ q@d S )Nz'<a u="([A-F0-9]{4})" b="([0-9A-F ]+)"/>r©   )	r¡   r{   ÚreÚfindallrª   rc   r0   r±   r²   )r   r³   ZucmdataZucZuniZcodedrµ   Zcodechr   r   r   r¦   N  s    
&
z'TestBase_Mapping._test_mapping_file_ucmc                 C   s   | j D ]}| j|Ž  qd S r   )Úsupmapsr²   )r   Úmappingr   r   r   Útest_mapping_supplementalW  s    
z*TestBase_Mapping.test_mapping_supplementalc                 C   sH   ||f| j vr"|  | | j¡|¡ ||f| jvrD|  t|| jƒ|¡ d S r   )Úpass_enctestr%   r   r   Úpass_dectestr3   )r   r´   rµ   r   r   r   r²   [  s    zTestBase_Mapping._testpointc                 C   sÖ   | j D ]Ê\}}}t|tƒr"|j}n|j}|r¾t|tƒrz|| j|ƒ}|  t|ƒtu t|ƒ¡ |  	||d|| j|||f ¡ qÐ|| j|ƒ}|  t|ƒtu t|ƒ¡ |  	||d|| j|||f ¡ q|  
t|| j|¡ qd S )Nr,   r-   )r.   r/   r0   r   r   r   r1   r2   r3   r%   r4   r5   r6   r   r   r   r;   a  s2    


ÿÿÿ
ÿÿÿz!TestBase_Mapping.test_errorhandleN)r   rž   rŸ   r»   r¼   r¸   r.   r   r¡   r¨   r§   r¦   rº   r²   r;   r   r   r   r   r      s   	r    c                 C   sž   t j t j t¡d¡}tt j || d ¡dƒ}| ¡ }W d   ƒ n1 sL0    Y  tt j || d ¡dƒ}| ¡ }W d   ƒ n1 sŒ0    Y  ||fS )NZcjkencodingsz.txtÚrbz	-utf8.txt)ÚosÚpathrJ   ÚdirnameÚ__file__Úopenr{   )r–   Údirr³   Úencodedr)   r   r   r   Úload_teststringy  s    &&rÅ   )r
   r¾   r¶   rg   ZunittestZhttp.clientr   Útestr   Úior   r   ZTestCaser    rÅ   r   r   r   r   Ú<module>   s     [