a
    ññ"h­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   úC/opt/python-3.9.21/usr/lib/python3.9/test/multibytecodec_support.pyÚsetUp   s    





zTestBase.setUpc                 C   s˜   g }| j D ]:}| d¡}| ¡ }|dks,J ‚dd„ |D ƒ}| |¡ q
t|Ž D ]D\}}|  |¡d }|  || d¡¡ | jrN|  ||  |¡d ¡ qNd S )Nó   
ó    c                 S   s   g | ]}|d  ‘qS )r   r   )Ú.0Úliner   r   r   Ú
<listcomp>*   r   z-TestBase.test_chunkcoding.<locals>.<listcomp>r   úutf-8)	ÚtstringÚsplitÚpopÚ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Ê   | 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   )	r0   ÚUnicodeEncodeErrorÚ	TypeErrorÚobjectÚstartÚendÚordr#   Újoin)ÚexcÚlÚcrC   r   r   ÚxmlcharnamereplaceY   s    
z>TestBase.test_customreplace_encode.<locals>.xmlcharnamereplaceztest.xmlcharnamereplaceu   Â«â„œÂ» = âŒ©áˆ´âŒªs*   &laquo;&real;&raquo; = &lang;&#4660;&rang;)	r?   r@   Zhtml.entitiesrD   r
   Úregister_errorÚxmlcharnametestr%   r   )r   rO   ÚsinZsoutr   rC   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©rI   ©rL   r   r   r   Ú	myreplaceo   s    z7TestBase.test_callback_returns_bytes.<locals>.myreplaceútest.cjktestÚabcÚdefr   s
   abc1234def)r
   rP   r   Úunmappedunicoder%   )r   rV   Ú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   rT   rU   ©Úretr   r   rV   v   s    z7TestBase.test_callback_wrong_objects.<locals>.myreplacerW   )r   é   é   )r
   rP   rG   r5   rF   r   rZ   ©r   rV   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)ÚintrI   rU   r   r   r   rV      s    z4TestBase.test_callback_long_index.<locals>.myreplacerW   ÚabcdÚefgh)s	   abcdxefghé	   c                 S   s   dt jd fS )Nrc   r   )ÚsysÚmaxsizerU   r   r   r   rV   …   s    )r
   rP   r%   r   rZ   r5   Ú
IndexErrorra   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)rc   Nr   rU   r   r   r   rV   Œ   s    z4TestBase.test_callback_None_index.<locals>.myreplacerW   )r
   rP   r5   rF   r   rZ   ra   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)ÚlimitrI   rU   ©rV   r   r   rV   “   s    
z8TestBase.test_callback_backward_index.<locals>.myreplacer`   rW   re   rf   )s4   abcdREPLACEDabcdREPLACEDabcdREPLACEDabcdTERMINALefghrg   )rn   r
   rP   r%   r   rZ   r   r   ro   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 )Nrm   r_   rT   rU   r   r   r   rV       s    z7TestBase.test_callback_forward_index.<locals>.myreplacerW   re   rf   )s   abcdREPLACEDghrg   )r
   rP   r%   r   rZ   ra   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   rU   r   r   r   rV   §   s    z:TestBase.test_callback_index_outofbound.<locals>.myreplacerW   )r
   rP   r5   rj   r   rZ   ra   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   rt   ru   r   )r
   Ú	getwriterrz   r{   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calledrT   rU   r   r   r   ÚtempreplaceÜ   s    zDTestBase.test_incrementalencoder_error_callback.<locals>.tempreplaceztest.incremental_error_callbacks   called)
rZ   r   r5   rE   r   Úerrorsr%   Úresetr
   rP   )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   rt   ru   r   r”   )r
   rˆ   rz   r{   r   r   r    ÚgetattrÚ
writelinesr}   r%   r~   )r   r‰   Únamer€   r   r‚   r:   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   rt   ru   r”   r   )r
   ry   rz   r{   r   r    r   r•   r–   r}   r%   r~   )	r   Z	readfuncsr   r—   r€   r   r‚   r:   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   r5   Ú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?   rQ   rZ   r   r,   r<   rB   rS   r\   rb   rk   rl   rp   rq   rs   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)Úchrrd   )r   rc   r   r   r   Ú	<genexpr>5  r   zMTestBase_Mapping._test_mapping_file_plain.<locals>.unichrs.<locals>.<genexpr>ú+)rK   r!   )rA   r   r   r   Úunichrs4  s    z:TestBase_Mapping._test_mapping_file_plain.<locals>.unichrsú#r   r_   Ú0xzInvalid line: r   rw   iýÿ  )r¢   r!   ÚlenZfailr1   ÚfromhexrJ   Ú
_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«   rd   r1   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_dectestr4   )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/   r0   r1   r   r   r   r2   r3   r4   r%   r5   r6   r7   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ÚpathrK   ÚdirnameÚ__file__Úopenr|   )r—   Údirr´   Úencodedr*   r   r   r   Úload_teststringy  s    &&rÆ   )r
   r¿   r·   rh   ZunittestZhttp.clientr   Útestr   Úior   r   ZTestCaser¡   rÆ   r   r   r   r   Ú<module>   s     [