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d„ |D ƒ}| |¡ qt|Ž D ]"\}}|  |¡d }|  || d¡¡ | jrC|  ||  |¡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   )	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   ó
   d| j fS )Ns   1234©rH   ©rK   r   r   r   Ú	myreplaceo   ó   
z7TestBase.test_callback_returns_bytes.<locals>.myreplaceútest.cjktestÚabcÚdefr   s
   abc1234def)r
   rO   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   rW   z7TestBase.test_callback_wrong_objects.<locals>.myreplacerX   )r   é   é   )r
   rO   rF   r4   rE   r   r[   ©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)ÚintrH   rU   r   r   r   rV      ó   z4TestBase.test_callback_long_index.<locals>.myreplacerX   ÚabcdÚefgh)s	   abcdxefghé	   c                 S   s   dt jd fS )Nrd   r   )ÚsysÚmaxsizerU   r   r   r   rV   …   rf   )r
   rO   r$   r   r[   r4   Ú
IndexErrorrb   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)rd   Nr   rU   r   r   r   rV   Œ   ó   z4TestBase.test_callback_None_index.<locals>.myreplacerX   )r
   rO   r4   rE   r   r[   rb   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)ÚlimitrH   rU   ©rV   r   r   rV   “   s   

z8TestBase.test_callback_backward_index.<locals>.myreplacera   rX   rg   rh   )s4   abcdREPLACEDabcdREPLACEDabcdREPLACEDabcdTERMINALefghri   )rt   r
   rO   r$   r   r[   r   r   ru   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 )Nrs   r`   rT   rU   r   r   r   rV       rf   z7TestBase.test_callback_forward_index.<locals>.myreplacerX   rg   rh   )s   abcdREPLACEDghri   )r
   rO   r$   r   r[   rb   r   r   r   Útest_callback_forward_indexŸ   s   ÿÿz$TestBase.test_callback_forward_indexc                 C   rn   )Nc                 S   ro   )N)ZTERMéd   r   rU   r   r   r   rV   §   rp   z:TestBase.test_callback_index_outofbound.<locals>.myreplacerX   )r
   rO   r4   rl   r   r[   rb   r   r   r   Útest_callback_index_outofbound¦   rr   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   rz   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Úignoreó    c                 S   rS   )NZcalledrT   rU   r   r   r   ÚtempreplaceÜ   rW   zDTestBase.test_incrementalencoder_error_callback.<locals>.tempreplaceztest.incremental_error_callbacks   called)
r[   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 ]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   rz   r{   r   r›   )r
   rŽ   r€   r   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 ]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   rz   r{   r›   r   )r
   r   r€   r   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   ƒ d S 1 sw   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   r[   r   r+   r;   rA   rR   r]   rc   rm   rq   rv   rw   ry   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)Úchrre   )r   rd   r   r   r   Ú	<genexpr>5  s   € 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   r}   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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²   re   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   sL   ||f| j vr|  | | j¡|¡ ||f| jvr$|  t|| jƒ|¡ d S 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 ]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.   r/   r0   r   r   r   r1   r2   r3   r$   r4   r5   r6   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ÚpathrJ   ÚdirnameÚ__file__Úopenr‚   )rž   Údirr»   Úencodedr)   r   r   r   Úload_teststringy  s   
ÿ

ÿþrÍ   )r
   rÆ   r¾   rj   ZunittestZhttp.clientr   Útestr   Úior   r   ZTestCaser¨   rÍ   r   r   r   r   Ú<module>   s     [