
    ;e8                         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          Z G d dej                  Zd	 ZdS )
    N)HTTPException)support)BytesIOc                       e Zd ZdZdZdZdZdZdZdZ	dZ
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestBase N   r   u   c                    | j         t          j        | 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selfs    2/usr/lib/python3.11/test/multibytecodec_support.pysetUpzTestBase.setUp   sm    :t}55DJj'j'j-j-"&*"?"&*"?    c                    g }| j         D ]T}|                    d          }|                                }|dk    sJ d |D             }|                    |           Ut	          | D ]\  }}|                     |          d         }|                     ||                    d                     | j        r/|                     ||                     |          d                    d S )N   
r   c                     g | ]}|d z   S )r    ).0lines     r   
<listcomp>z-TestBase.test_chunkcoding.<locals>.<listcomp>*   s    444dTE\444r   r   utf-8)	tstringsplitpopappendzipr   assertEqualroundtriptestr   )r   tstring_linesblineslastnativeutf8us           r   test_chunkcodingzTestBase.test_chunkcoding$   s     	( 	(AGGENNE99;;D3;;;;44e444E  ''''/ 	< 	<LFDF##A&AQG 4 4555! <  Q):;;;		< 	<r   c                 l   | j         D ]*\  }}}t          |t                    r| j        }n| j        }|r |||          d         }|| j        u rb|                     t          |          t          u t          |                     |                     |||d| j	        d|d|d|	           |                     t          |          t          u t          |                     |                     |||d| j	        d|d|d|	           | 
                    t          |||           ,d S )Nr   .decode(, )= != .encode()
codectests
isinstancebytesr   r   
assertTruetypestrr*   r   assertRaisesUnicodeErrorr   sourceschemeexpectedfuncresults         r   test_errorhandlezTestBase.test_errorhandle2   sm   (, 	F 	F$FFH&%(( #{{ Fff--a04;&&OODLLC$7fFFF$$VX(.vvvvvv(0&23 3 3 3
 OODLLE$94<<HHH$$VX(.vvvvvv(0&23 3 3 3
 !!,ffEEEE)	F 	Fr   c                     | 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   ss     r   test_xmlcharrefreplacezTestBase.test_xmlcharrefreplaceI   sb     	BMM@AAA(KK.//2,	
 	
 	
 	
 	
r   c                    | j         r|                     d           ddlm fd}t	          j        d|           | j        r| j        \  }}nd}d}|                     |                     |d          d         |           d S )NrJ   r   )codepoint2namec                    t          | t                    st          d| z            g }| j        | j        | j                 D ]d}t          |          v r,|                    dt          |                   z             ?|                    dt          |          z             ed                    |          | 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crQ   s      r   xmlcharnamereplacez>TestBase.test_customreplace_encode.<locals>.xmlcharnamereplaceY   s    c#566 E = CDDDAZ	#' 12 / /q66^++HHVnSVV&<<====HHWs1vv-....GGAJJ((r   ztest.xmlcharnamereplaceu   «ℜ» = 〈ሴ〉s*   &laquo;&real;&raquo; = &lang;&#4660;&rang;)	rL   rM   html.entitiesrQ   r   register_errorxmlcharnametestr*   r   )r   r]   sinsoutrQ   s       @r   test_customreplace_encodez"TestBase.test_customreplace_encodeS   s     	BMM@AAA000000		) 		) 		) 		) 		) 	79KLLL 	A,IC7C@DS$=? ??@BCG	I 	I 	I 	I 	Ir   c                     d }t          j        d|           |                     d| j        z   dz   d          d         }|                     |d           d S )Nc                     d| j         fS )Ns   1234rW   rZ   s    r   	myreplacez7TestBase.test_callback_returns_bytes.<locals>.myreplaceo   s    SW%%r   test.cjktestabcdefr   s
   abc1234def)r   r_   r   unmappedunicoder*   )r   rh   encs      r   test_callback_returns_bytesz$TestBase.test_callback_returns_bytesn   sf    	& 	& 	&ni888kk%$"66>OOPQRm,,,,,r   c                     fd}t          j        d|           g dg d t                      fD ])|                     t          | j        | j        d           *d S )Nc                     | j         fS r   rf   )rZ   rets    r   rh   z7TestBase.test_callback_wrong_objects.<locals>.myreplacev   s    >!r   ri   )r	         )r   r_   rU   r@   rT   r   rl   )r   rh   rq   s     @r   test_callback_wrong_objectsz$TestBase.test_callback_wrong_objectsu   s    	" 	" 	" 	" 	"ni888IIr42 	. 	.Cid6J,. . . .	. 	.r   c                    d }t          j        d|           |                     |                     d| j        z   dz   d          d           d }t          j        d|           |                     t          | j        | j        d           d S )Nc                 .    dt          | j                  fS )Nx)intrW   rg   s    r   rh   z4TestBase.test_callback_long_index.<locals>.myreplace   s    SW&&r   ri   abcdefgh)s	   abcdxefgh	   c                 $    dt           j        dz   fS )Nrw   r	   )sysmaxsizerg   s    r   rh   z4TestBase.test_callback_long_index.<locals>.myreplace   s    q))r   )r   r_   r*   r   rl   r@   
IndexErrorr   rh   s     r   test_callback_long_indexz!TestBase.test_callback_long_index~   s    	' 	' 	'ni888Vd.B%BV%K%35 56G	I 	I 	I	* 	* 	*ni888*dk43G(	* 	* 	* 	* 	*r   c                     d }t          j        d|           |                     t          | j        | j        d           d S )Nc                     dS )N)rw   Nr    rg   s    r   rh   z4TestBase.test_callback_None_index.<locals>.myreplace   s    ;r   ri   )r   r_   r@   rT   r   rl   r   s     r   test_callback_None_indexz!TestBase.test_callback_None_index   sT    	 	 	ni888)T[$2F(	* 	* 	* 	* 	*r   c                     fdd_         t          j        d           |                     |                     d| j        z   dz   d          d           d S )Nc                 P    j         dk    rxj         dz  c_         dS d| j        fS )Nr   r	   )REPLACEDr   TERMINAL)limitrW   )rZ   rh   s    r   rh   z8TestBase.test_callback_backward_index.<locals>.myreplace   s2    ""1$&"CG,,r   rs   ri   ry   rz   )s4   abcdREPLACEDabcdREPLACEDabcdREPLACEDabcdTERMINALefghr{   )r   r   r_   r*   r   rl   r   s    @r   test_callback_backward_indexz%TestBase.test_callback_backward_index   s    	- 	- 	- 	- 	- 	ni888Vd.B%BV%K%35 5L	N 	N 	N 	N 	Nr   c                     d }t          j        d|           |                     |                     d| j        z   dz   d          d           d S )Nc                     d| j         dz   fS )Nr   rr   rf   rg   s    r   rh   z7TestBase.test_callback_forward_index.<locals>.myreplace   s    !,,r   ri   ry   rz   )s   abcdREPLACEDghr{   )r   r_   r*   r   rl   r   s     r   test_callback_forward_indexz$TestBase.test_callback_forward_index   sp    	- 	- 	-ni888Vd.B%BV%K%35 56L	N 	N 	N 	N 	Nr   c                     d }t          j        d|           |                     t          | j        | j        d           d S )Nc                     dS )N)TERMd   r    rg   s    r   rh   z:TestBase.test_callback_index_outofbound.<locals>.myreplace   s     =r   ri   )r   r_   r@   r   r   rl   r   s     r   test_callback_index_outofboundz'TestBase.test_callback_index_outofbound   sT    	! 	! 	!ni888*dk43G(	* 	* 	* 	* 	*r   c                 &   t          j        d          }d gt          t          dd                    z   g dz   D ]} |t	          | j        d                             }t	                      }|                                 }	 ||                    |          }n|                                }|sn+|                    |          }|	                    |           Z| 
                    |                                | j        d                    d S )Nr$   r	   !   @         i   i   r   )r   	getreaderlistranger   r%   r   readr   writer*   getvalue)r   
UTF8Readersizehintistreamostreamencoderdataes           r   test_incrementalencoderz TestBase.test_incrementalencoder   s   %g..
eArll!3!331112 	B 	BH ja!9!9::GiiG--//G	!'"<<11DD"<<>>D NN4((a   	! W--//aAAAA!	B 	Br   c                    t          j        d          }d dgt          t          dd                    z   g dz   D ]}t	          | j        d                   } |t	                                }|                                 }	 |                    |          }|sn+|                    |          }|	                    |           C| 
                    |                                | j        d                    d S )Nr$   r	   r   r   r   )r   	getwriterr   r   r   r%   r   r   r   r   r*   r   )r   
UTF8Writerr   r   r   decoderr   r2   s           r   test_incrementaldecoderz TestBase.test_incrementaldecoder   s   %g..
r
T%2,,%7%771112 	B 	BHdl1o..G j++G--//G%||H-- %t,,AMM!$$$% W--//aAAAA	B 	Br   c                    | j         }|                                 }|                     t          |j        |d           d|_        |                     |                    |d          d           |                                 d }t          j	        d|           d|_        |                     |                    |d          d           d|_        |                     |                    |d          d           d S )NTignorer   c                     d| j         fS )Ncalledrf   rg   s    r   tempreplacezDTestBase.test_incrementalencoder_error_callback.<locals>.tempreplace   s    cg&&r   ztest.incremental_error_callbacks   called)
rl   r   r@   rS   r   errorsr*   resetr   r_   )r   invr   r   s       r   &test_incrementalencoder_error_callbackz/TestBase.test_incrementalencoder_error_callback   s    "##%%,ahTBBB#t,,c222					' 	' 	'?MMM4#t,,i888 #t,,c22222r   c                    t          j        d          }dD ]}d dgt          t          dd                    z   g dz   D ]}|                     t          | j        d                             } |t                                }t          ||          }	  ||          }|sn2|dk    r|                    |           n|	                    |           @| 
                    |                                | j        d                    ˌ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   rF   r   s           r   test_streamreaderzTestBase.test_streamreader   s1   %g..
5 	F 	FD!2JeArll););;5556 F F++gdl1o&>&>??$*WYY//w--,4>>D {****40000d+++,   !1!1!3!3T\!_EEEEF	F 	Fr   c                 <   d}t          j        d          }|D ]}d gt          t          dd                    z   g dz   D ]} |t	          | j        d                             }|                     t	                                }t          ||          }	 | ||          }n
 |            }|sn2|dk    r|                    |           n|	                    |           M| 
                    |                                | j        d                    ؐd S )Nr   r$   r	   r   r   r   r   )r   r   r   r   r   r%   r   r   r   r   r*   r   )	r   	readfuncsr   r   r   r   r   rF   r   s	            r   test_streamwriterzTestBase.test_streamwriter   sG   5	%g..
 	F 	FD!FT%2,,%7%775556 F F$*WT\!_%=%=>>++gii00w--,+#tH~~#tvv {****40000d+++,   !1!1!3!3T\!_EEEE%F	F 	Fr   c                 t    t                      }|                     |          }|                                 d S r   )r   r   r   )r   streamr   s      r   "test_streamwriter_reset_no_pendingz+TestBase.test_streamwriter_reset_no_pending  s/     V$$r   c                     |                                  }|                     t                    5  |`d d d            d S # 1 swxY w Y   d S r   )r   r@   AttributeErrorr   )r   r   s     r   $test_incrementalencoder_del_segfaultz-TestBase.test_incrementalencoder_del_segfault  s    ##%%~.. 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ?AA)__name__
__module____qualname__r   r   r%   r:   r+   rL   r`   rl   r   r3   rH   rO   rc   rn   rt   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r      st       HEGJMLOO@ @ @< < <F F F.
 
 
I I I6- - -. . .* * ** * *N N NN N N* * *B B B(B B B"3 3 3(F F F&F F F0      r   r   c                   N    e Zd Zg Zg Zg Zg Zd Zd Zd Z	d Z
d Zd Zd Zd Zd	S )
TestBase_Mappingc                     	 |                                                                   d S # t          t          f$ r! |                     d| j        z              Y d S w xY w)NzCould not retrieve )open_mapping_filecloseOSErrorr   rM   
mapfileurlr   s    r   r   zTestBase_Mapping.setUp$  ss    	A""$$**,,,,,' 	A 	A 	AMM/?@@@@@@	As   &* .AAc                 8    t          j        | j        d          S )Nr$   )r   )r   open_urlresourcer   r   s    r   r   z"TestBase_Mapping.open_mapping_file*  s    ''JJJJr   c                     | j                             d          r|                                  d S |                                  d S )Nz.xml)r   endswith_test_mapping_file_ucm_test_mapping_file_plainr   s    r   test_mapping_filez"TestBase_Mapping.test_mapping_file-  sJ    ?##F++ 	,'')))))))+++++r   c                 r   d }i }|                                  5 }|D ] }|s n|                    d          d                                         }t          |          dk    rH|d         d d         dk    r|                     d|           t                              |d         dd                    }t          |          dk    rd|d         k    r ||d                   }t          |          d	k    s||v r|||<   |                     ||           d d d            d S # 1 swxY w Y   d S )
Nc                 f    d                     d |                     d          D                       S )Nr   c              3   P   K   | ]!}t          t          |d                     V  "dS )   N)chrrx   )r!   rw   s     r   	<genexpr>zMTestBase_Mapping._test_mapping_file_plain.<locals>.unichrs.<locals>.<genexpr>5  s0      AAq3s1bzz??AAAAAAr   +)rY   r&   )rN   s    r   unichrsz:TestBase_Mapping._test_mapping_file_plain.<locals>.unichrs4  s-    77AAAGGCLLAAAAAAr   #r   rr   0xzInvalid line: r	   r   i  )r   r&   lenfailr<   fromhexrX   
_testpoint)r   r   urt_wafr"   r   csetchunichs           r   r   z)TestBase_Mapping._test_mapping_file_plain3  s   	B 	B 	B ##%% 	/ / / Ezz#q)//11t99>>72A2;$&&II7t77888tAwqrr{33v;;!##q	(9(9Q((u::''5F?? &u....'	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   DD,,D03D0c                 Z   |                                  5 }|                                }d d d            n# 1 swxY w Y   t          j        d|          }|D ]R\  }}t	          t          |d                    }t                              |          }|                     ||           Sd S )Nz'<a u="([A-F0-9]{4})" b="([0-9A-F ]+)"/>r   )	r   r   refindallr   rx   r<   r   r   )r   r   ucmdataucunicodedr   codechs           r   r   z'TestBase_Mapping._test_mapping_file_ucmN  s    ##%% 	ffhhG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ZA7KK 	+ 	+JCC%%E]]5))FOOFE****	+ 	+s   6::c                 .    | j         D ]} | j        |  d S r   )supmapsr   )r   mappings     r   test_mapping_supplementalz*TestBase_Mapping.test_mapping_supplementalW  s/    | 	& 	&GDOW%%%	& 	&r   c                     ||f| j         vr.|                     |                    | j                  |           ||f| j        vr+|                     t          || j                  |           d S d S r   )pass_enctestr*   r   r   pass_dectestr?   )r   r   r   s      r   r   zTestBase_Mapping._testpoint[  sz    E?$"333U\\$-88&AAAE?$"333S77????? 43r   c                    | j         D ]K\  }}}t          |t                    r|j        }n|j        }|rt          |t                    rs || j        |          }|                     t          |          t          u t          |                     | 	                    |||d| j        d|d|d|	            || j        |          }|                     t          |          t          u t          |                     | 	                    |||d| j        d|d|d|	           )| 
                    t          || j        |           Md S )Nr5   r6   r7   r8   r9   )r:   r;   r<   r   r   r   r=   r>   r?   r*   r@   rA   rB   s         r   rH   z!TestBase_Mapping.test_errorhandlea  s   (, 	M 	M$FFH&%(( %}} Mfe,, 3!T$-88FOODLLC$7fFFF$$VX(.vvvvvv(0&23 3 3 3
 "T$-88FOODLLE$94<<HHH$$VX(.vvvvvv(0&23 3 3 3
 !!,dmVLLLL+	M 	Mr   N)r   r   r   r   r   r   r:   r   r   r   r   r   r   r   rH   r    r   r   r   r     s        LLGJA A AK K K, , ,/ / /6+ + +& & &@ @ @M M M M Mr   r   c                    t           j                            t           j                            t                    d          }t          t           j                            || dz             d          5 }|                                }d d d            n# 1 swxY w Y   t          t           j                            || dz             d          5 }|                                }d d d            n# 1 swxY w Y   ||fS )Ncjkencodingsz.txtrbz	-utf8.txt)ospathrY   dirname__file__openr   )r   dirr   encodedr1   s        r   load_teststringr  y  s6   
',,rwx00.
A
AC	bgll3v..	5	5 &&((              	bgll3{ 233T	:	: avvxx              D=s$   4BBBC22C69C6)r   r   r   r}   unittesthttp.clientr   testr   ior   r   TestCaser   r  r    r   r   <module>r
     s     				 				 



  % % % % % %            L L L L L L L L^YM YM YM YM YMx( YM YM YMv    r   