o
    HXhw                     @   sx  d dl mZ d dlZ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ejZdZG d	d
 d
ejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd  d ejZG d!d" d"ejZed#kre  dS dS )$    )BytesION)expat)errors)sortdictc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )SetAttributeTestc                 C   s   t jdd| _d S N!Znamespace_separator)r   ParserCreateparserself r   ;/opt/python-3.10.19/usr/lib/python3.10/test/test_pyexpat.pysetUp      zSetAttributeTest.setUpc                 C   :   |  | jjd dD ]}|| j_|  | jjt| q
d S NF)r         r   )assertIsr   buffer_textboolr   xr   r   r   test_buffer_text   
   z!SetAttributeTest.test_buffer_textc                 C   r   r   )r   r   Znamespace_prefixesr   r   r   r   r   test_namespace_prefixes   r   z(SetAttributeTest.test_namespace_prefixesc                 C   r   r   )r   r   Zordered_attributesr   r   r   r   r   test_ordered_attributes"   r   z(SetAttributeTest.test_ordered_attributesc                 C   r   r   )r   r   Zspecified_attributesr   r   r   r   r   test_specified_attributes(   r   z*SetAttributeTest.test_specified_attributesc                 C   s   |  t d| j_W d    n1 sw   Y  |  t | jj W d    n1 s-w   Y  |  tt| jtdd |  t| jjtdd |  tt| jtd d S )Nr      r   )	assertRaisesAttributeErrorr   Zreturns_unicode	TypeErrorsetattrrange__setattr__getattrr   r   r   r   test_invalid_attributes.   s   

z(SetAttributeTest.test_invalid_attributesN)	__name__
__module____qualname__r   r   r   r   r   r(   r   r   r   r   r      s    r   s  <?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<?xml-stylesheet href="stylesheet.css"?>
<!-- comment data -->
<!DOCTYPE quotations SYSTEM "quotations.dtd" [
<!ELEMENT root ANY>
<!ATTLIST root attr1 CDATA #REQUIRED attr2 CDATA #IMPLIED>
<!NOTATION notation SYSTEM "notation.jpeg">
<!ENTITY acirc "&#226;">
<!ENTITY external_entity SYSTEM "entity.file">
<!ENTITY unparsed_entity SYSTEM "entity.file" NDATA notation>
%unparsed_entity;
]>

<root attr1="value1" attr2="value2&#8000;">
<myns:subelement xmlns:myns="http://www.python.org/namespace">
     Contents of subelements
</myns:subelement>
<sub2><![CDATA[contents of CDATA section]]></sub2>
&external_entity;
&skipped_entity;

</root>
c                   @   sR   e Zd ZG dd dZg dZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )	ParseTestc                   @   s   e 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'd( Zd)d* Zd+d, Zd-d. Zd/S )0zParseTest.Outputterc                 C   s
   g | _ d S N)outr   r   r   r   __init__W   s   
zParseTest.Outputter.__init__c                 C   s$   | j dt| d t|  d S )NzStart element:  )r.   appendreprr   r   nameattrsr   r   r   StartElementHandlerZ   s   
z'ParseTest.Outputter.StartElementHandlerc                 C      | j dt|  d S )NzEnd element: r.   r1   r2   r   r4   r   r   r   EndElementHandler^      z%ParseTest.Outputter.EndElementHandlerc                 C   s(   |  }|r| jdt|  d S d S )NzCharacter data: )stripr.   r1   r2   r   datar   r   r   CharacterDataHandlera   s   z(ParseTest.Outputter.CharacterDataHandlerc                 C   $   | j dt| d t|  d S )NzPI: r0   r8   )r   targetr>   r   r   r   ProcessingInstructionHandlerf      $z0ParseTest.Outputter.ProcessingInstructionHandlerc                 C   r@   )Nz	NS decl: r0   r8   )r   prefixZurir   r   r   StartNamespaceDeclHandleri   rC   z-ParseTest.Outputter.StartNamespaceDeclHandlerc                 C   r7   )NzEnd of NS decl: r8   )r   rD   r   r   r   EndNamespaceDeclHandlerl   r;   z+ParseTest.Outputter.EndNamespaceDeclHandlerc                 C      | j d d S )NStart of CDATA sectionr.   r1   r   r   r   r   StartCdataSectionHandlero      z,ParseTest.Outputter.StartCdataSectionHandlerc                 C   rG   )NEnd of CDATA sectionrI   r   r   r   r   EndCdataSectionHandlerr   rK   z*ParseTest.Outputter.EndCdataSectionHandlerc                 C   r7   )Nz	Comment: r8   r   textr   r   r   CommentHandleru   r;   z"ParseTest.Outputter.CommentHandlerc                 G   s"   |\}}}}| j d|f  d S )NzNotation declared: %srI   )r   argsr4   baseZsysidZpubidr   r   r   NotationDeclHandlerx   s   z'ParseTest.Outputter.NotationDeclHandlerc                 G   s$   |\}}}}}| j d|f  d S )NzUnparsed entity decl: %srI   )r   rQ   Z
entityNamerR   ZsystemIdZpublicIdZnotationNamer   r   r   UnparsedEntityDeclHandler|   s   z-ParseTest.Outputter.UnparsedEntityDeclHandlerc                 C      | j d dS )NNot standaloner   rI   r   r   r   r   NotStandaloneHandler      z(ParseTest.Outputter.NotStandaloneHandlerc                 G   s*   |\}}}}| j d|dd  f  dS )NzExternal entity ref: %sr   rI   )r   rQ   contextrR   sysIdpubIdr   r   r   ExternalEntityRefHandler   s   z,ParseTest.Outputter.ExternalEntityRefHandlerc                 G      | j d|f dS )NStart doctyper   rI   r   rQ   r   r   r   StartDoctypeDeclHandler      z+ParseTest.Outputter.StartDoctypeDeclHandlerc                 C   rU   )NEnd doctyper   rI   r   r   r   r   EndDoctypeDeclHandler   rX   z)ParseTest.Outputter.EndDoctypeDeclHandlerc                 G   r]   )NEntity declarationr   rI   r_   r   r   r   EntityDeclHandler   ra   z%ParseTest.Outputter.EntityDeclHandlerc                 G   r]   )NXML declarationr   rI   r_   r   r   r   XmlDeclHandler   ra   z"ParseTest.Outputter.XmlDeclHandlerc                 G   r]   )NElement declarationr   rI   r_   r   r   r   ElementDeclHandler   ra   z&ParseTest.Outputter.ElementDeclHandlerc                 G   r]   )NAttribute list declarationr   rI   r_   r   r   r   AttlistDeclHandler   ra   z&ParseTest.Outputter.AttlistDeclHandlerc                 G   r]   )NSkipped entityr   rI   r_   r   r   r   SkippedEntityHandler   ra   z(ParseTest.Outputter.SkippedEntityHandlerc                 C      d S r-   r   r   ZuserDatar   r   r   DefaultHandler      z"ParseTest.Outputter.DefaultHandlerc                 C   rn   r-   r   ro   r   r   r   DefaultHandlerExpand   rq   z(ParseTest.Outputter.DefaultHandlerExpandN)r)   r*   r+   r/   r6   r:   r?   rB   rE   rF   rJ   rM   rP   rS   rT   rW   r\   r`   rc   re   rg   ri   rk   rm   rp   rr   r   r   r   r   	OutputterV   s0    rs   )r6   r:   r?   rB   rT   rS   rE   rF   rP   rJ   rM   rp   rr   rW   r\   r`   rc   re   rg   ri   rk   rm   c                 C   s"   | j D ]}t||t|| qdS )z{
        Set each of the callbacks defined on handler and named in
        self.handler_names on the given parser.
        N)handler_namesr$   r'   )r   r   handlerr4   r   r   r   _hookup_callbacks   s   
zParseTest._hookup_callbacksc                 C   s,   g d}t ||D ]
\}}| || q	d S )N))rf   )z1.0
iso-8859-1r   z,PI: 'xml-stylesheet' 'href="stylesheet.css"'zComment: ' comment data 'rV   )r^   )Z
quotationszquotations.dtdNr   )rh   )root)r   r   Nr   )rj   )rx   Zattr1CDATANr   )rj   )rx   Zattr2ry   Nr   z<Notation declared: ('notation', None, 'notation.jpeg', None))rd   )Zacircr      âNNNN)rd   )Zexternal_entityr   NNzentity.fileNNzPUnparsed entity decl: ('unparsed_entity', None, 'entity.file', None, 'notation')rV   rb   u?   Start element: 'root' {'attr1': 'value1', 'attr2': 'value2ὀ'}z1NS decl: 'myns' 'http://www.python.org/namespace'z>Start element: 'http://www.python.org/namespace!subelement' {}z)Character data: 'Contents of subelements'z9End element: 'http://www.python.org/namespace!subelement'zEnd of NS decl: 'myns'zStart element: 'sub2' {}rH   z+Character data: 'contents of CDATA section'rL   zEnd element: 'sub2'z0External entity ref: (None, 'entity.file', None))rl   )Zskipped_entityr   u   Character data: 'µ'zEnd element: 'root')zipassertEqual)r   
operationsZexpected_operationsZ	operationZexpected_operationr   r   r   _verify_parse_output   s   "zParseTest._verify_parse_outputc                 C   sP   |   }tjdd}| || |td |j}| | | t	t
|d d S )Nr   r	   Tu   )rs   r   r
   rv   Parser>   r.   r~   r!   r"   r'   r   r.   r   r}   r   r   r   test_parse_bytes   s   
zParseTest.test_parse_bytesc                 C   sF   |   }tjdd}| || |tdd |j}| | d S )Nr   r	   rw   T)	rs   r   r
   rv   r   r>   decoder.   r~   r   r   r   r   test_parse_str   s   zParseTest.test_parse_strc                 C   sF   |   }tjdd}| || tt}|| |j}| | d S r   )	rs   r   r
   rv   r   r>   	ParseFiler.   r~   )r   r.   r   filer}   r   r   r   test_parse_file   s   
zParseTest.test_parse_filec                 C   sn   t  }tt}|| | t j}|| W d    n1 s#w   Y  | t |j	j
t jj d S r-   )r   r
   r   r>   r   r!   errorr|   ZErrorString	exceptioncoder   ZXML_ERROR_FINISHED)r   r   r   cmr   r   r   test_parse_again  s   
zParseTest.test_parse_againN)r)   r*   r+   rs   rt   rv   r~   r   r   r   r   r   r   r   r   r,   U   s    U&
r,   c                   @   $   e Zd Zdd Zdd Zdd ZdS )NamespaceSeparatorTestc                 C   s$   t   t jd d t jdd d S )Nr	   r0   r   r
   r   r   r   r   
test_legal  s   z!NamespaceSeparatorTest.test_legalc              
   C   s   zt jdd |   W n ty& } z| t|d W Y d }~nd }~ww zt jdd |   W d S  tyO } z| t|d W Y d }~d S d }~ww )N*   r	   zJParserCreate() argument 'namespace_separator' must be str or None, not intztoo longzCnamespace_separator must be at most one character, omitted, or None)r   r
   failr#   r|   str
ValueError)r   er   r   r   test_illegal  s$   

z#NamespaceSeparatorTest.test_illegalc                 C   s   t jdd d S )N r	   r   r   r   r   r   test_zero_length*  s   	z'NamespaceSeparatorTest.test_zero_lengthN)r)   r*   r+   r   r   r   r   r   r   r   r     s    r   c                   @      e Zd Zdd Zdd ZdS )InterningTestc                    sd   t  }g   fdd}||_||_|dd  d }| t d  D ]	}| ||u  q&d S )Nc                         |  d S r-   r1   )r4   rQ   Lr   r   	collector;     z%InterningTest.test.<locals>.collectors   <e> <e/> <e></e> </e>Tr      )r   r
   r6   r:   r   r|   len
assertTrue)r   pr   tagentryr   r   r   test7  s   zInterningTest.testc                 C   sN   G dd d}t jdd}d|_||}|j|_|td | |jd d S )Nc                   @   r   )z7InterningTest.test_issue9402.<locals>.ExternalOutputterc                 S   s   || _ d | _d S r-   )r   parser_resultr   r   r   r   r   r/   I  s   
z@InterningTest.test_issue9402.<locals>.ExternalOutputter.__init__c                 S   s   | j d}|dd| _dS )Nr       Tr   )r   ExternalEntityParserCreater   r   )r   rY   rR   rZ   r[   Zexternal_parserr   r   r   r\   M  s   zPInterningTest.test_issue9402.<locals>.ExternalOutputter.ExternalEntityRefHandlerN)r)   r*   r+   r/   r\   r   r   r   r   ExternalOutputterH  s    r   r   r	   r   T)r   r
   r   r\   r   r>   r|   r   )r   r   r   r.   r   r   r   test_issue9402F  s   
zInterningTest.test_issue9402N)r)   r*   r+   r   r   r   r   r   r   r   6  s    r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zg f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 )"BufferTextTestc                 C   s&   g | _ t | _d| j_| j| j_d S Nr   )stuffr   r
   r   r   r?   r   r   r   r   r   [  s   
zBufferTextTest.setUpc              
   C   s&   |  | j|d|| jtt|f  d S )Nz%s
stuff    = %r
expected = %r)r|   r   mapr   )r   expectedZlabelr   r   r   checka  s
   
zBufferTextTest.checkc                 C   s   | j | d S r-   r   r1   rN   r   r   r   r?   f  rK   z#BufferTextTest.CharacterDataHandlerc                 C   sF   | j d|  |d}|dkrd| j_d S |dkr!d| j_d S d S )Nz<%s>zbuffer-textZyesr   nor   )r   r1   getr   r   )r   r4   r5   Zbtr   r   r   r6   i  s   
z"BufferTextTest.StartElementHandlerc                 C      | j d|  d S )Nz</%s>r   r9   r   r   r   r:   q     z BufferTextTest.EndElementHandlerc                 C   r   )Nz	<!--%s-->r   r=   r   r   r   rP   t  r   zBufferTextTest.CommentHandlerc                 C   s"   |D ]}t | j|t| | qd S r-   )r$   r   r'   )r   handlersr4   r   r   r   setHandlersw  s   zBufferTextTest.setHandlersc                 C   s   t  }| |j d S r-   )r   r
   assertFalser   r   r   r   r   test_default_to_disabled{  s   z'BufferTextTest.test_default_to_disabledc                 C   s2   |  | jj | jdd | | jdgd d S )N   <a>1<b/>2<c/>3</a>TZ123$buffered text not properly collapsed)r   r   r   r   r|   r   r   r   r   r   test_buffering_enabled  s
   z%BufferTextTest.test_buffering_enabledc                 C   2   |  dg | jdd | | jg dd d S )Nr6   s9   <a>1<b buffer-text='no'/>2
3<c buffer-text='yes'/>4
5</a>T)<a>1<b>2
3<c>z4
5z*buffering control not reacting as expectedr   r   r   r|   r   r   r   r   r   test1  s   zBufferTextTest.test1c                 C   s$   | j dd | | jdgd d S )Ns&   <a>1<b/>&lt;2&gt;<c/>&#32;
&#x20;3</a>Tz1<2> 
 3r   )r   r   r|   r   r   r   r   r   test2  s   zBufferTextTest.test2c                 C   r   )Nr6   r   T)r   r   r   r   r   r    buffered text not properly splitr   r   r   r   r   test3  s
   zBufferTextTest.test3c                 C   s:   |  ddg d | j_| jdd | | jg d d S )Nr6   r:   r   T)r   r   </b>r   </c></a>)r   r   r?   r   r|   r   r   r   r   r   test4  s   zBufferTextTest.test4c                 C   s2   |  ddg | jdd | | jg d d S )Nr6   r:   s   <a>1<b></b>2<c/>3</a>T)	r   r   r   r   r   r   r   r   r   r   r   r   r   r   test5  s
   zBufferTextTest.test5c                 C   4   |  g d | jdd | | jg dd d S )NrP   r:   r6   s   <a>1<b/>2<c></c>345</a> T)	r   r   r   r   r   r   r   Z345r   r   r   r   r   r   r   test6  s   zBufferTextTest.test6c                 C   r   )Nr   s,   <a>1<b/>2<c></c>3<!--abc-->4<!--def-->5</a> T)r   r   r   r   r   r   r   r   z
<!--abc-->4z
<!--def-->5r   r   r   r   r   r   r   test7  s   zBufferTextTest.test7N)r)   r*   r+   r   r   r?   r6   r:   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z  s"    	r   c                   @   r   )HandlerExceptionTestc                 C   s   t |r-   )RuntimeErrorr3   r   r   r   r6     s   z(HandlerExceptionTest.StartElementHandlerc                 C   s,   |  tj|d | |  |d | d S )Nr   r   )r|   ospathbasename)r   r   filenamefuncnamer   r   r   check_traceback_entry  s   z*HandlerExceptionTest.check_traceback_entryc                 C   s  t  }| j|_z|dd |   W d S  ty } zh| |jd ddd|jd    t	|j
}| t|d | |d dd	 | |d
 dd | |d dd t rwtjdkrft dks~| d|d
 d  W Y d }~d S W Y d }~d S W Y d }~d S d }~ww )Ns   <a><b><c/></b></a>Tr   az*Expected RuntimeError for element 'a', butz	 found %r   ztest_pyexpat.pytest_exceptionr   z	pyexpat.cZStartElementr   r6   win32ZARMzcall_with_frame("StartElement")r   r
   r6   r   r   r   r|   rQ   	traceback
extract_tb__traceback__r   r   	sysconfigZis_python_buildsysplatformmachineZassertIn)r   r   r   entriesr   r   r   r     s6   


"z#HandlerExceptionTest.test_exceptionN)r)   r*   r+   r6   r   r   r   r   r   r   r     s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
PositionTestc                 C      |  d d S )Ns	check_posr3   r   r   r   r6     r   z PositionTest.StartElementHandlerc                 C   r   )Nr   r   r9   r   r   r   r:     r   zPositionTest.EndElementHandlerc                 C   sd   || j j| j j| j jf}| | jt| jk d | j| j }| ||d||f  |  jd7  _d S )Nztoo many parser eventsz%Expected position %s, got position %sr   )	r   ZCurrentByteIndexZCurrentLineNumberZCurrentColumnNumberr   uptor   expected_listr|   )r   eventposr   r   r   r   r     s   
zPositionTest.check_posc                 C   sD   t  | _| j| j_| j| j_d| _g d| _d}| j|d d S )Nr   ))r   r   r   r   )r      r   r   )r      r   r   )r   r    r   r   )r         r   )r      r   r   s   <a>
 <b>
  <c/>
 </b>
</a>T)r   r
   r   r6   r:   r   r   r   )r   xmlr   r   r   r     s   



zPositionTest.testN)r)   r*   r+   r6   r:   r   r   r   r   r   r   r     s
    r   c                   @   s   e Zd Zdd ZdS )sf1296433Testc                    sL   dd }G dd dt   fdd}t }||_| t |j|d d S )Nz1<?xml version='1.0' encoding='iso8859'?><s>%s</s>A  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac                   @   s   e Zd ZdS )zAsf1296433Test.test_parse_only_xml_data.<locals>.SpecificExceptionN)r)   r*   r+   r   r   r   r   SpecificException  s    r   c                    s    r-   r   )rO   r   r   r   ru     rq   z7sf1296433Test.test_parse_only_xml_data.<locals>.handleriso8859)	Exceptionr   r
   r?   r!   r   encode)r   r   ru   r   r   r   r   test_parse_only_xml_data  s   z&sf1296433Test.test_parse_only_xml_dataN)r)   r*   r+   r   r   r   r   r   r     s    r   c                   @   sX   e 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S )ChardataBufferTestz.
    test setting of chardata buffer size
    c                 C      |  | dd d S )Ni  r   r|   small_buffer_testr   r   r   r   test_1025_bytes     z"ChardataBufferTest.test_1025_bytesc                 C   r  )Ni  r   r  r   r   r   r   test_1000_bytes  r  z"ChardataBufferTest.test_1000_bytesc                 C   s   t  }d|_| t d|_W d    n1 sw   Y  | t d|_W d    n1 s2w   Y  | ttf tjd |_W d    n1 sOw   Y  | t	 d|_W d    d S 1 shw   Y  d S )Nr   r   g      @)
r   r
   r   r!   r   buffer_sizeOverflowErrorr   maxsizer#   r   r   r   r   test_wrong_size  s   "z"ChardataBufferTest.test_wrong_sizec                 C   st   d}d}t  }| j|_d|_d|_d| _|| | | jd |j|_| | jd || | | jd d S )Ns+  <?xml version='1.0' encoding='iso8859'?><s>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</s>i   r   r   r   )	r   r
   counting_handlerr?   r	  r   nr   r|   r   xml1xml2r   r   r   r   test_unchanged_size#  s   

z&ChardataBufferTest.test_unchanged_sizec                 C   s   d}d}d}t  }| j|_d|_d|_| |jd d| _||d | |jd | | jd d|_| 	|j | |jd t
dD ]}||d qF| | jd	 d|_| |j | |jd ||d
 | | jd d S )Ns+  <?xml version='1.0' encoding='iso8859'?><a>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbs  cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc</a>r      r   F
   r   T   )r   r
   r  r?   r   r	  r|   r  r   r   r%   r   )r   r  r  Zxml3r   ir   r   r   test_disabling_buffer:  s.   z(ChardataBufferTest.test_disabling_bufferc                 C   s   |  j d7  _ d S r   )r  rN   r   r   r   r  X  r   z#ChardataBufferTest.counting_handlerc                 C   sB   dd|  d }t  }| j|_d|_d|_d| _|| | jS )Ns+   <?xml version='1.0' encoding='iso8859'?><s>   as   </s>r  r   r   )r   r
   r  r?   r	  r   r  r   )r   Z
buffer_lenr   r   r   r   r   r  [  s   
z$ChardataBufferTest.small_buffer_testc                 C   s~   d}d}t  }| j|_d|_d|_| |jd d| _||d | jd9  _| |jd ||d	 | | jd d S )
Ns.  <?xml version='1.0' encoding='iso8859'?><a><s>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  aaa</s><s>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</s></a>r   r  r   Fr      T	r   r
   r  r?   r   r	  r|   r  r   r  r   r   r   test_change_size_1f  s   z%ChardataBufferTest.test_change_size_1c                 C   s|   d}d}t  }| j|_d|_d|_| |jd d| _||d |jd |_| |jd ||d	 | | jd
 d S )Ns.  <?xml version='1.0' encoding='iso8859'?><a>a<s>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r   r  r   Fr   r  Tr   r  r  r   r   r   test_change_size_2v  s   z%ChardataBufferTest.test_change_size_2N)r)   r*   r+   __doc__r  r  r  r  r  r  r  r  r  r   r   r   r   r    s    r  c                   @   r   )MalformedInputTestc              
   C   s`   d}t  }z||d |   W d S  t jy/ } z| t|d W Y d }~d S d }~ww )Ns    
Tz unclosed token: line 2, column 0)r   r
   r   r   
ExpatErrorr|   r   r   r   r   r   r   r   r   r     s   zMalformedInputTest.test1c                 C   sP   d}t  }d}| t j| ||d W d    d S 1 s!w   Y  d S )Ns   <?xml version='1.0'?>
z3XML declaration not well-formed: line 1, column \d+T)r   r
   ZassertRaisesRegexr   r   )r   r   r   Zerr_patternr   r   r   r     s   "zMalformedInputTest.test2N)r)   r*   r+   r   r   r   r   r   r   r    s    	r  c                   @   r   )ErrorMessageTestc                 C   s    |  tjtjtjtj   d S r-   )r|   r   ZXML_ERROR_SYNTAXmessagescodesr   r   r   r   
test_codes  s   zErrorMessageTest.test_codesc              
   C   sf   d}t  }z||d |   W d S  t jy2 } z| |jtjtj	  W Y d }~d S d }~ww )N   <T)
r   r
   r   r   r   r|   r   r   r$  ZXML_ERROR_UNCLOSED_TOKENr!  r   r   r   test_expaterror  s   
z ErrorMessageTest.test_expaterrorN)r)   r*   r+   r%  r'  r   r   r   r   r"    s    r"  c                   @   s    e Zd ZdZdd Zdd ZdS )ForeignDTDTestszE
    Tests for the UseForeignDTD method of expat parser objects.
    c                    s   g   fdd}t  }|d |t j ||_|d |  dg g  dd< t  }|  |t j ||_|d |  dg dS )z
        If UseForeignDTD is passed True and a document without an external
        entity reference is parsed, ExternalEntityRefHandler is first called
        with None for the public and system ids.
        c                         ||f dS r   r   rY   rR   Z	system_idZ	public_idZhandler_call_argsr   r   resolve_entity     z<ForeignDTDTests.test_use_foreign_dtd.<locals>.resolve_entityTs   <?xml version='1.0'?><element/>)NNNr   r
   ZUseForeignDTDZSetParamEntityParsingZXML_PARAM_ENTITY_PARSING_ALWAYSr\   r   r|   r   r,  r   r   r+  r   test_use_foreign_dtd  s   


z$ForeignDTDTests.test_use_foreign_dtdc                    sP   g   fdd}t  }|d |t j ||_|d |  dg dS )z
        If UseForeignDTD is passed True and a document with an external
        entity reference is parsed, ExternalEntityRefHandler is called with
        the public and system ids from the document.
        c                    r)  r   r   r*  r+  r   r   r,    r-  zCForeignDTDTests.test_ignore_use_foreign_dtd.<locals>.resolve_entityTs@   <?xml version='1.0'?><!DOCTYPE foo PUBLIC 'bar' 'baz'><element/>)ZbarZbazNr.  r/  r   r+  r   test_ignore_use_foreign_dtd  s   
z+ForeignDTDTests.test_ignore_use_foreign_dtdN)r)   r*   r+   r  r0  r1  r   r   r   r   r(    s    r(  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	ParentParserLifetimeTestz
    Subparsers make use of their parent XML_Parser inside of Expat.
    As a result, parent parsers need to outlive subparsers.

    See https://github.com/python/cpython/issues/139400.
    c                 C   s   t  }|d }~d S r-   r   r
   r   )r   r   	subparserr   r   r   2test_parent_parser_outlives_its_subparsers__single  s   
zKParentParserLifetimeTest.test_parent_parser_outlives_its_subparsers__singlec                 C   s"   t  }|d }|d }~d S r-   r3  )r   r   Zsubparser_oneZsubparser_twor   r   r   4test_parent_parser_outlives_its_subparsers__multiple  s   

zMParentParserLifetimeTest.test_parent_parser_outlives_its_subparsers__multiplec                 C   s$   t  }|d }|d }~~d S r-   r3  )r   r   r4  Zsubsubparserr   r   r   1test_parent_parser_outlives_its_subparsers__chain  s
   

zJParentParserLifetimeTest.test_parent_parser_outlives_its_subparsers__chainN)r)   r*   r+   r  r5  r6  r7  r   r   r   r   r2    s
    	r2  c                   @   r   )ReparseDeferralTestc                 C   sZ   t  }t jdk}| | | |d | | d |d | | | d S )Nr   r   r   FT)r   r
   version_infor   GetReparseDeferralEnabledSetReparseDeferralEnabled)r   r   Zenabledr   r   r   test_getter_setter_round_trip  s   


z1ReparseDeferralTest.test_getter_setter_round_tripc                    s   t jdk r| dt j d g   fdd}t  }||_| |  dD ]}||d q'|  g  |dd	 |  d
g d S )Nr9  zExpat z" does not support reparse deferralc                    r   r-   r   r4   _startedr   r   start_element  r   zHReparseDeferralTest.test_reparse_deferral_enabled.<locals>.start_elements   <docs   />Fr   Tdoc)	r   r:  ZskipTestr
   r6   r   r;  r   r|   r   rB  r   chunkr   r@  r   test_reparse_deferral_enabled  s   
z1ReparseDeferralTest.test_reparse_deferral_enabledc                    sh   g   fdd}t  }||_t jdkr|d | |  dD ]}||d q"|  dg d S )Nc                    r   r-   r   r>  r@  r   r   rB  '  r   zIReparseDeferralTest.test_reparse_deferral_disabled.<locals>.start_elementr9  FrC  rD  )	r   r
   r6   r:  r<  r   r;  r   r|   rE  r   r@  r   test_reparse_deferral_disabled$  s   

z2ReparseDeferralTest.test_reparse_deferral_disabledN)r)   r*   r+   r=  rG  rH  r   r   r   r   r8    s    
r8  __main__) ior   r   r   r   r   Zunittestr   Zxml.parsersr   Zxml.parsers.expatr   Ztest.supportr   ZTestCaser   r>   r,   r   r   r   r   r   r   r  r  r"  r(  r2  r8  r)   mainr   r   r   r   <module>   s:   ( ?#$` z4$6