o
    °ó®g¿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   úQ/Users/admin/.pyenv/versions/3.10.0/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ÚlinesZ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ÚcrA   r   r   ÚxmlcharnamereplaceY   s   
z>TestBase.test_customreplace_encode.<locals>.xmlcharnamereplaceztest.xmlcharnamereplaceu   Â«â„œÂ» = âŒ©áˆ´âŒªs*   &laquo;&real;&raquo; = &lang;&#4660;&rang;)	r=   r>   Zhtml.entitiesrB   r
   Úregister_errorÚxmlcharnametestr$   r   )r   rM   ÚsinZsoutr   rA   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©rG   ©rJ   r   r   r   Ú	myreplaceo   ó   
z7TestBase.test_callback_returns_bytes.<locals>.myreplaceútest.cjktestÚabcÚdefr   s
   abc1234def)r
   rN   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   ©Zretr   r   rU   v   rV   z7TestBase.test_callback_wrong_objects.<locals>.myreplacerW   )r   é   é   )r
   rN   rE   r3   rD   r   rZ   ©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)ÚintrG   rT   r   r   r   rU      ó   z4TestBase.test_callback_long_index.<locals>.myreplacerW   ÚabcdÚefgh)s	   abcdxefghé	   c                 S   s   dt jd fS )Nrb   r   )ÚsysÚmaxsizerT   r   r   r   rU   …   rd   )r
   rN   r$   r   rZ   r3   Ú
IndexErrorr`   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)rb   Nr   rT   r   r   r   rU   Œ   ó   z4TestBase.test_callback_None_index.<locals>.myreplacerW   )r
   rN   r3   rD   r   rZ   r`   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)ÚlimitrG   rT   ©rU   r   r   rU   “   s   

z8TestBase.test_callback_backward_index.<locals>.myreplacer_   rW   re   rf   )s4   abcdREPLACEDabcdREPLACEDabcdREPLACEDabcdTERMINALefghrg   )rr   r
   rN   r$   r   rZ   r   r   rs   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 )Nrq   r^   rS   rT   r   r   r   rU       rd   z7TestBase.test_callback_forward_index.<locals>.myreplacerW   re   rf   )s   abcdREPLACEDghrg   )r
   rN   r$   r   rZ   r`   r   r   r   Útest_callback_forward_indexŸ   s   ÿÿz$TestBase.test_callback_forward_indexc                 C   rl   )Nc                 S   rm   )N)ZTERMéd   r   rT   r   r   r   rU   §   rn   z:TestBase.test_callback_index_outofbound.<locals>.myreplacerW   )r
   rN   r3   rj   r   rZ   r`   r   r   r   Útest_callback_index_outofbound¦   rp   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| ¡ }|s7qB| |¡}| 	|¡ 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/q:| |¡}| 	|¡ q'|  
| ¡ | jd ¡ qd S )Nr   éÿÿÿÿr   rx   ry   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   rR   )NZcalledrS   rT   r   r   r   ÚtempreplaceÜ   rV   zDTestBase.test_incrementalencoder_error_callback.<locals>.tempreplaceztest.incremental_error_callbacks   called)
rZ   r   r3   rC   r   Úerrorsr$   Úresetr
   rN   )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||ƒ}	 ||ƒ}|s6qF|dkr@| |¡ n| 	|¡ q/|  
| ¡ | jd ¡ qqd S )	Nr   ©r€   ÚreadlineÚ	readlinesr‹   r   rx   ry   r   r™   )r
   rŒ   r~   r   r   r   r   ÚgetattrÚ
writelinesr   r$   r‚   )r   r   Únamer„   r…   r†   r8   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?qO|dkrI| |¡ n| 	|¡ q0|  
| ¡ | jd ¡ qq	d S )Nr—   r   r   rx   ry   r™   r   )r
   r}   r~   r   r   r   r   rš   r›   r   r$   r‚   )	r   Z	readfuncsrƒ   rœ   r„   r…   r†   r8   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   r3   Ú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=   rO   rZ   r   r*   r:   r@   rQ   r\   ra   rk   ro   rt   ru   rw   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 qq| 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)Úchrrc   )r   rb   r   r   r   Ú	<genexpr>5  s   € zMTestBase_Mapping._test_mapping_file_plain.<locals>.unichrs.<locals>.<genexpr>ú+)rI   r    )r?   r   r   r   Úunichrs4  s   z:TestBase_Mapping._test_mapping_file_plain.<locals>.unichrsú#r   r^   Z0xzInvalid line: r   r{   iýÿ  )r§   r    ÚlenZfailr/   ÚfromhexrH   Ú
_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°   rc   r/   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_dectestr2   )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.   r/   r   r   r   r0   r1   r2   r$   r3   r4   r5   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ÚpathrI   Ú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     [