o
    GXî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   úE/opt/python-3.10.19/usr/lib/python3.10/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¡¡ | jrI|  ||  |¡d ¡ q'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   ú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}|rZ|||ƒ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   s2   


ÿÿÿ
ÿÿÿì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r#| j\}}nd}d}|  |  |d¡d |¡ d S )	Nr=   r   ©Úcodepoint2namec                    sx   t | tƒstd|  ƒ‚g }| j| j| j… D ]}t|ƒˆ v r*| 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   ó
   d| j fS )Ns   1234©rI   ©rL   r   r   r   Ú	myreplaceo   ó   
z7TestBase.test_callback_returns_bytes.<locals>.myreplaceútest.cjktestÚabcÚdefr   s
   abc1234def)r
   rP   r   Úunmappedunicoder%   )r   rW   Ú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   rU   rV   ©Úretr   r   rW   v   rX   z7TestBase.test_callback_wrong_objects.<locals>.myreplacerY   )r   é   é   )r
   rP   rG   r5   rF   r   r\   ©r   rW   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   rV   r   r   r   rW      ó   z4TestBase.test_callback_long_index.<locals>.myreplacerY   ÚabcdÚefgh)s	   abcdxefghé	   c                 S   s   dt jd fS )Nre   r   )ÚsysÚmaxsizerV   r   r   r   rW   …   rg   )r
   rP   r%   r   r\   r5   Ú
IndexErrorrc   r   r   r   Útest_callback_long_index~   s   ÿÿÿz!TestBase.test_callback_long_indexc                 C   ó,   dd„ }t  d|¡ |  t| j| jd¡ d S )Nc                 S   ó   dS )N)re   Nr   rV   r   r   r   rW   Œ   ó   z4TestBase.test_callback_None_index.<locals>.myreplacerY   )r
   rP   r5   rF   r   r\   rc   r   r   r   Útest_callback_None_index‹   ó
   ÿ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 )Nr   r   )ÚREPLACEDr   ZTERMINAL)ÚlimitrI   rV   ©rW   r   r   rW   “   s   

z8TestBase.test_callback_backward_index.<locals>.myreplacerb   rY   rh   ri   )s4   abcdREPLACEDabcdREPLACEDabcdREPLACEDabcdTERMINALefghrj   )ru   r
   rP   r%   r   r\   r   r   rv   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 )Nrt   ra   rU   rV   r   r   r   rW       rg   z7TestBase.test_callback_forward_index.<locals>.myreplacerY   rh   ri   )s   abcdREPLACEDghrj   )r
   rP   r%   r   r\   rc   r   r   r   Útest_callback_forward_indexŸ   s   ÿÿz$TestBase.test_callback_forward_indexc                 C   ro   )Nc                 S   rp   )N)ZTERMéd   r   rV   r   r   r   rW   §   rq   z:TestBase.test_callback_index_outofbound.<locals>.myreplacerY   )r
   rP   r5   rm   r   r\   rc   r   r   r   Útest_callback_index_outofbound¦   rs   z'TestBase.test_callback_index_outofboundc                 C   s    t  d¡}d gttddƒƒ g d¢ D ]:}|t| jd ƒƒ}tƒ }|  ¡ }	 |d ur0| |¡}n| ¡ }|s7n| |¡}| 	|¡ q&|  
| ¡ | 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 ]1}t| jd ƒ}|tƒ ƒ}|  ¡ }	 | |¡}|s/n| |¡}| 	|¡ q'|  
| ¡ | jd ¡ qd S )Nr   éÿÿÿÿr   r{   r|   r   )r
   Ú	getwriterr   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   rT   )NZcalledrU   rV   r   r   r   ÚtempreplaceÜ   rX   zDTestBase.test_incrementalencoder_error_callback.<locals>.tempreplaceztest.incremental_error_callbacks   called)
r\   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 ]K}d dgttddƒƒ g d¢ D ]9}|  t| jd ƒ¡}|tƒ ƒ}t||ƒ}	 ||ƒ}|s6n|dkr@| |¡ n| 	|¡ q/|  
| ¡ | jd ¡ qqd S )	Nr   ©rƒ   ÚreadlineÚ	readlinesrŽ   r   r{   r|   r   r›   )r
   r   r   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 ]R}d gttddƒƒ g d¢ D ]A}|t| jd ƒƒ}|  tƒ ¡}t||ƒ}	 |d ur9||ƒ}n|ƒ }|s?n|dkrI| |¡ n| 	|¡ q0|  
| ¡ | jd ¡ qq	d S )Nr™   r   r   r{   r|   r›   r   )r
   r€   r   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   ƒ d S 1 sw   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   r\   r   r,   r<   rB   rS   r^   rd   rn   rr   rw   rx   rz   r   r’   r˜   rŸ   r    r¢   r¤   r   r   r   r   r      s8    

	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 d S  ttfy   |  d| j ¡ Y d S w )NzCould not retrieve )Úopen_mapping_fileÚcloseÚOSErrorr   r@   Ú
mapfileurlr   r   r   r   r   $  s
   ÿzTestBase_Mapping.setUpc                 C   s   t j| jddS )Nr   )r   )r   Zopen_urlresourcer¬   r   r   r   r   r©   *  s   z"TestBase_Mapping.open_mapping_filec                 C   s$   | j  d¡r|  ¡  d S |  ¡  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 }|   ¡ o}|D ][}|s n^| d¡d  ¡ }t|ƒdkr#q|d d d… dkr5|  d|›¡ t |d dd … ¡}t|ƒdkrMd	|d krMq||d ƒ}t|ƒd
ks]||v r^q|||< |  ||¡ qW d   ƒ d S W d   ƒ d S 1 s|w   Y  d S )Nc                 S   s   d  dd„ |  d¡D ƒ¡S )Nr   c                 s   s    | ]
}t t|d ƒƒV  qdS )é   N)Úchrrf   )r   re   r   r   r   Ú	<genexpr>5  s   € 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   ra   Ú0xzInvalid line: r   r~   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w   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²   rf   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   sL   ||f| j vr|  | | j¡|¡ ||f| jvr$|  t|| jƒ|¡ d S 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 ]e\}}}t|tƒr|j}n|j}|r_t|tƒr=|| 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  s4   


ÿÿÿ
ÿÿÿë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 s&w   Y  tt j || d ¡dƒ}| ¡ }W d   ƒ ||fS 1 sIw   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¾   rk   ZunittestZhttp.clientr   Útestr   Úior   r   ZTestCaser¨   rÍ   r   r   r   r   Ú<module>   s     [