Your IP : 216.73.216.196


Current Path : /opt/alt/python310/lib64/python3.10/test/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/test/__pycache__/test_pyexpat.cpython-310.opt-1.pyc

o

0�i=��@s�ddlmZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
ddlmZddlmZddlmZGdd�de
j�Zd	ZGd
d�de
j�ZGdd
�d
e
j�ZGdd�de
j�ZGdd�de
j�ZGdd�de
j�ZGdd�de
j�ZGdd�de
j�ZGdd�de
j�ZGdd�de
j�ZGdd�de
j�ZGdd�de
j�Z Gd d!�d!e
j�Z!Gd"d#�d#e
j�Z"Gd$d%�d%ej#�Z$e
�%e
j&d&kd'�Gd(d)�d)e$e
j��Z'e(d*kr�e
�)�dSdS)+�)�BytesION)�expat)�errors)�
import_helper)�sortdictc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�SetAttributeTestcCstjdd�|_dS�N�!�Znamespace_separator)r�ParserCreate�parser��self�r�8/opt/alt/python310/lib64/python3.10/test/test_pyexpat.py�setUp�zSetAttributeTest.setUpcC�:|�|jjd�dD]}||j_|�|jjt|��q
dS�NF)r��r)�assertIsr�buffer_text�bool�r�xrrr�test_buffer_text�
�z!SetAttributeTest.test_buffer_textcCrr)rrZnamespace_prefixesrrrrr�test_namespace_prefixes!rz(SetAttributeTest.test_namespace_prefixescCrr)rrZordered_attributesrrrrr�test_ordered_attributes'rz(SetAttributeTest.test_ordered_attributescCrr)rrZspecified_attributesrrrrr�test_specified_attributes-rz*SetAttributeTest.test_specified_attributescCs�|�t��d|j_Wd�n1swY|�t��|jjWd�n1s-wY|�tt|jtd�d�|�t|jjtd�d�|�tt|jtd��dS)Nr�r)	�assertRaises�AttributeErrorrZreturns_unicode�	TypeError�setattr�range�__setattr__�getattrr
rrr�test_invalid_attributes3s
�
�z(SetAttributeTest.test_invalid_attributesN)	�__name__�
__module__�__qualname__rrrrr r)rrrrrsrs�<?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@sReZdZGdd�d�Zgd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�	ParseTestc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/S)0zParseTest.OutputtercCs
g|_dS�N)�outr
rrr�__init__\�
zParseTest.Outputter.__init__cCs$|j�dt|�dt|��dS)NzStart element: � )r/�append�reprr�r�name�attrsrrr�StartElementHandler_s
�z'ParseTest.Outputter.StartElementHandlercC�|j�dt|��dS)Nz
End element: �r/r3r4�rr6rrr�EndElementHandlerc�z%ParseTest.Outputter.EndElementHandlercCs(|��}|r|j�dt|��dSdS)NzCharacter data: )�stripr/r3r4�r�datarrr�CharacterDataHandlerfs�z(ParseTest.Outputter.CharacterDataHandlercC�$|j�dt|�dt|��dS)NzPI: r2r:)r�targetr@rrr�ProcessingInstructionHandlerk�$z0ParseTest.Outputter.ProcessingInstructionHandlercCrB)Nz	NS decl: r2r:)r�prefixZurirrr�StartNamespaceDeclHandlernrEz-ParseTest.Outputter.StartNamespaceDeclHandlercCr9)NzEnd of NS decl: r:)rrFrrr�EndNamespaceDeclHandlerqr=z+ParseTest.Outputter.EndNamespaceDeclHandlercC�|j�d�dS)N�Start of CDATA section�r/r3r
rrr�StartCdataSectionHandlert�z,ParseTest.Outputter.StartCdataSectionHandlercCrI)N�End of CDATA sectionrKr
rrr�EndCdataSectionHandlerwrMz*ParseTest.Outputter.EndCdataSectionHandlercCr9)Nz	Comment: r:�r�textrrr�CommentHandlerzr=z"ParseTest.Outputter.CommentHandlercGs"|\}}}}|j�d|f�dS)NzNotation declared: %srK)r�argsr6�baseZsysidZpubidrrr�NotationDeclHandler}sz'ParseTest.Outputter.NotationDeclHandlercGs$|\}}}}}|j�d|f�dS)NzUnparsed entity decl: %srK)rrSZ
entityNamerTZsystemIdZpublicIdZnotationNamerrr�UnparsedEntityDeclHandler�sz-ParseTest.Outputter.UnparsedEntityDeclHandlercC�|j�d�dS)N�Not standalonerrKr
rrr�NotStandaloneHandler��z(ParseTest.Outputter.NotStandaloneHandlercGs*|\}}}}|j�d|dd�f�dS)NzExternal entity ref: %srrK)rrS�contextrT�sysId�pubIdrrr�ExternalEntityRefHandler�sz,ParseTest.Outputter.ExternalEntityRefHandlercG�|j�d|f�dS)N�
Start doctyperrK�rrSrrr�StartDoctypeDeclHandler��z+ParseTest.Outputter.StartDoctypeDeclHandlercCrW)N�End doctyperrKr
rrr�EndDoctypeDeclHandler�rZz)ParseTest.Outputter.EndDoctypeDeclHandlercGr_)N�Entity declarationrrKrarrr�EntityDeclHandler�rcz%ParseTest.Outputter.EntityDeclHandlercGr_)N�XML declarationrrKrarrr�XmlDeclHandler�rcz"ParseTest.Outputter.XmlDeclHandlercGr_)N�Element declarationrrKrarrr�ElementDeclHandler�rcz&ParseTest.Outputter.ElementDeclHandlercGr_)N�Attribute list declarationrrKrarrr�AttlistDeclHandler�rcz&ParseTest.Outputter.AttlistDeclHandlercGr_)N�Skipped entityrrKrarrr�SkippedEntityHandler�rcz(ParseTest.Outputter.SkippedEntityHandlercC�dSr.r�rZuserDatarrr�DefaultHandler��z"ParseTest.Outputter.DefaultHandlercCrpr.rrqrrr�DefaultHandlerExpand�rsz(ParseTest.Outputter.DefaultHandlerExpandN)r*r+r,r0r8r<rArDrGrHrLrOrRrUrVrYr^rbrergrirkrmrorrrtrrrr�	Outputter[s0ru)r8r<rArDrVrUrGrHrRrLrOrrrtrYr^rbrergrirkrmrocCs"|jD]}t||t||��qdS)z{
        Set each of the callbacks defined on handler and named in
        self.handler_names on the given parser.
        N)�
handler_namesr%r()rr�handlerr6rrr�_hookup_callbacks�s
�zParseTest._hookup_callbackscCs,gd�}t||�D]
\}}|�||�q	dS)N))rh)z1.0�
iso-8859-1rz,PI: 'xml-stylesheet' 'href="stylesheet.css"'zComment: ' comment data 'rX)r`)Z
quotationszquotations.dtdNr)rj)�root)rrNr)rl)rzZattr1�CDATANr)rl)rzZattr2r{Nrz<Notation declared: ('notation', None, 'notation.jpeg', None))rf)Zacircr�âNNNN)rf)Zexternal_entityrNNzentity.fileNNzPUnparsed entity decl: ('unparsed_entity', None, 'entity.file', None, 'notation')rXrdu?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'zEnd of NS decl: 'myns'zStart element: 'sub2' {}rJz+Character data: 'contents of CDATA section'rNzEnd element: 'sub2'z0External entity ref: (None, 'entity.file', None))rn)Zskipped_entityruCharacter data: 'µ'zEnd element: 'root')�zip�assertEqual)r�
operationsZexpected_operationsZ	operationZexpected_operationrrr�_verify_parse_output�s"�zParseTest._verify_parse_outputcCsP|��}tjdd�}|�||�|�td�|j}|�|�|�t	t
|d�dS)Nr	r
Tu�)rurrrx�Parser@r/r�r"r#r(�rr/rrrrr�test_parse_bytes�s
zParseTest.test_parse_bytescCsF|��}tjdd�}|�||�|�t�d�d�|j}|�|�dS)Nr	r
ryT)	rurrrxr�r@�decoder/r�r�rrr�test_parse_str�szParseTest.test_parse_strcCsF|��}tjdd�}|�||�tt�}|�|�|j}|�|�dSr)	rurrrxrr@�	ParseFiler/r�)rr/r�filerrrr�test_parse_files
zParseTest.test_parse_filecCsnt��}tt�}|�|�|�tj��
}|�|�Wd�n1s#wY|�t�|j	j
�tjj�dSr.)
rrrr@r�r"�errorr~ZErrorStringZ	exception�coderZXML_ERROR_FINISHED)rrr��cmrrr�test_parse_agains
��zParseTest.test_parse_againN)r*r+r,rurvrxr�r�r�r�r�rrrrr-ZsU&
r-c@�$eZdZdd�Zdd�Zdd�ZdS)�NamespaceSeparatorTestcCs$t��tjdd�tjdd�dS)Nr
r2�rrr
rrr�
test_legalsz!NamespaceSeparatorTest.test_legalc
Cs�ztjdd�|��Wnty&}z|�t|�d�WYd}~nd}~wwz
tjdd�|��WdStyO}z|�t|�d�WYd}~dSd}~ww)N�*r
zJParserCreate() argument 'namespace_separator' must be str or None, not intztoo longzCnamespace_separator must be at most one character, omitted, or None)rr�failr$r~�str�
ValueError)r�errr�test_illegal s$
���
���z#NamespaceSeparatorTest.test_illegalcCstjdd�dS)N�r
r�r
rrr�test_zero_length/s	z'NamespaceSeparatorTest.test_zero_lengthN)r*r+r,r�r�r�rrrrr�sr�c@�eZdZdd�Zdd�ZdS)�
InterningTestcsdt��}g��fdd�}||_||_|�dd��d}|�t��d��D]	}|�||u�q&dS)Nc���|�dSr.�r3)r6rS��Lrr�	collector@�z%InterningTest.test.<locals>.collectors<e> <e/> <e></e> </e>Tr�)rrr8r<r�r~�len�
assertTrue)r�pr��tag�entryrr�r�test<s�zInterningTest.testcCsNGdd�d�}tjdd�}d|_||�}|j|_|�td�|�|jd�dS)Nc@r�)z7InterningTest.test_issue9402.<locals>.ExternalOutputtercSs||_d|_dSr.)r�
parser_result�rrrrrr0Ns
z@InterningTest.test_issue9402.<locals>.ExternalOutputter.__init__cSs|j�d�}|�dd�|_dS)Nr��Tr)r�ExternalEntityParserCreater�r�)rr[rTr\r]Zexternal_parserrrrr^RszPInterningTest.test_issue9402.<locals>.ExternalOutputter.ExternalEntityRefHandlerN)r*r+r,r0r^rrrr�ExternalOutputterMsr�r	r
rT)rrrr^r�r@r~r�)rr�rr/rrr�test_issue9402Ks
zInterningTest.test_issue9402N)r*r+r,r�r�rrrrr�;sr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zgfd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!S)"�BufferTextTestcCs&g|_t��|_d|j_|j|j_dS�Nr)�stuffrrrrrAr
rrrr`s
zBufferTextTest.setUpc
Cs&|�|j|d||jtt|�f�dS)Nz%s
stuff    = %r
expected = %r)r~r��mapr�)r�expectedZlabelrrr�checkfs

��zBufferTextTest.checkcCs|j�|�dSr.�r�r3rPrrrrAkrMz#BufferTextTest.CharacterDataHandlercCsF|j�d|�|�d�}|dkrd|j_dS|dkr!d|j_dSdS)Nz<%s>zbuffer-textZyesrZnor)r�r3�getrr)rr6r7Zbtrrrr8ns
�z"BufferTextTest.StartElementHandlercC�|j�d|�dS)Nz</%s>r�r;rrrr<v�z BufferTextTest.EndElementHandlercCr�)Nz	<!--%s-->r�r?rrrrRyr�zBufferTextTest.CommentHandlercCs"|D]}t|j|t||��qdSr.)r%rr()r�handlersr6rrr�setHandlers|s�zBufferTextTest.setHandlerscCst��}|�|j�dSr.)rr�assertFalserr�rrr�test_default_to_disabled�sz'BufferTextTest.test_default_to_disabledcCs2|�|jj�|j�dd�|�|jdgd�dS)N�<a>1<b/>2<c/>3</a>TZ123�$buffered text not properly collapsed)r�rrr�r~r�r
rrr�test_buffering_enabled�s
�z%BufferTextTest.test_buffering_enabledcC�2|�dg�|j�dd�|�|jgd�d�dS)Nr8s9<a>1<b buffer-text='no'/>2
3<c buffer-text='yes'/>4
5</a>T)�<a>�1�<b>�2�
�3�<c>z4
5z*buffering control not reacting as expected�r�rr�r~r�r
rrr�test1�s�zBufferTextTest.test1cCs$|j�dd�|�|jdgd�dS)Ns&<a>1<b/>&lt;2&gt;<c/>&#32;
&#x20;3</a>Tz1<2> 
 3r�)rr�r~r�r
rrr�test2�s�zBufferTextTest.test2cCr�)Nr8r�T)r�r�r�r�r�r�� buffered text not properly splitr�r
rrr�test3�s
�zBufferTextTest.test3cCs:|�ddg�d|j_|j�dd�|�|jgd��dS)Nr8r<r�T)r�r��</b>r��</c>�</a>)r�rrAr�r~r�r
rrr�test4�s�zBufferTextTest.test4cCs2|�ddg�|j�dd�|�|jgd��dS)Nr8r<s<a>1<b></b>2<c/>3</a>T)	r�r�r�r�r�r�r�r�r�r�r
rrr�test5�s
�zBufferTextTest.test5cC�4|�gd��|j�dd�|�|jgd�d�dS)N�rRr<r8s<a>1<b/>2<c></c>345</a> T)	r�r�r�r�r�r�r�Z345r�r�r�r
rrr�test6�s�zBufferTextTest.test6cCr�)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
rrr�test7�s�zBufferTextTest.test7N)r*r+r,rr�rAr8r<rRr�r�r�r�r�r�r�r�r�r�rrrrr�_s"	r�c@r�)�HandlerExceptionTestcCst|��r.)�RuntimeErrorr5rrrr8�sz(HandlerExceptionTest.StartElementHandlercCs,|�tj�|d�|�|�|d|�dS)Nrr)r~�os�path�basename)rr��filename�funcnamerrr�check_traceback_entry�sz*HandlerExceptionTest.check_traceback_entrycCst��}|j|_z
|�dd�|��WdSty�}zh|�|jdddd|jd�t�	|j
�}|�t|�d�|�|ddd	�|�|d
dd�|�|d
dd�t
��rwtjdkrft��dks~|�d|d
d�WYd}~dSWYd}~dSWYd}~dSd}~ww)Ns<a><b><c/></b></a>Tr�az*Expected RuntimeError for element 'a', butz	 found %r�ztest_pyexpat.py�test_exceptionrz	pyexpat.cZStartElementrr8Zwin32ZARMzcall_with_frame("StartElement")rrr8r�r�r�r~rS�	traceback�
extract_tb�
__traceback__r�r��	sysconfigZis_python_build�sys�platform�machineZassertIn)rrr��entriesrrrr��s6��
�
�
�"���z#HandlerExceptionTest.test_exceptionN)r*r+r,r8r�r�rrrrr��sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�PositionTestcC�|�d�dS)N�s��	check_posr5rrrr8�r�z PositionTest.StartElementHandlercCr�)Nr�r�r;rrrr<�r�zPositionTest.EndElementHandlercCsd||jj|jj|jjf}|�|jt|j�kd�|j|j}|�||d||f�|jd7_dS)Nztoo many parser eventsz%Expected position %s, got position %sr)	rZCurrentByteIndexZCurrentLineNumberZCurrentColumnNumberr��uptor��
expected_listr~)rZevent�posr�rrrr��s��
�zPositionTest.check_poscCsDt��|_|j|j_|j|j_d|_gd�|_d}|j�|d�dS)Nr))r�rrr)r��rr)r��r�r)r�r!r�r�)r���r)r��r�rs<a>
 <b>
  <c/>
 </b>
</a>T)rrrr8r<r�r�r�)r�xmlrrrr��s



zPositionTest.testN)r*r+r,r8r<r�r�rrrrr��s
r�c@seZdZdd�ZdS)�
sf1296433TestcsLdd}Gdd�dt���fdd�}t��}||_|�t|j|�d��dS)Nz1<?xml version='1.0' encoding='iso8859'?><s>%s</s>Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac@seZdZdS)zAsf1296433Test.test_parse_only_xml_data.<locals>.SpecificExceptionN)r*r+r,rrrr�SpecificExceptionsr�cs��r.r�rQ�r�rrrw	rsz7sf1296433Test.test_parse_only_xml_data.<locals>.handler�iso8859)�	ExceptionrrrAr"r��encode)rr�rwrrr�r�test_parse_only_xml_data�sz&sf1296433Test.test_parse_only_xml_dataN)r*r+r,r�rrrrr��sr�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�ChardataBufferTestz.
    test setting of chardata buffer size
    cC�|�|�d�d�dS)Nir�r~�small_buffer_testr
rrr�test_1025_bytes�z"ChardataBufferTest.test_1025_bytescCr)Ni�rrr
rrr�test_1000_bytesrz"ChardataBufferTest.test_1000_bytescCs�t��}d|_|�t��d|_Wd�n1swY|�t��d|_Wd�n1s2wY|�ttf��tjd|_Wd�n1sOwY|�t	��d|_Wd�dS1shwYdS)Nr���rg�@)
rrrr"r��buffer_size�
OverflowErrorr��maxsizer$r�rrr�test_wrong_sizes���"�z"ChardataBufferTest.test_wrong_sizecCstd}d}t��}|j|_d|_d|_d|_|�|�|�|jd�|j|_|�|jd�|�|�|�|jd�dS)Ns+<?xml version='1.0' encoding='iso8859'?><s>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</s>irrr)	rr�counting_handlerrArr�nr�r~�r�xml1�xml2rrrr�test_unchanged_size(s

z&ChardataBufferTest.test_unchanged_sizecCs�d}d}d}t��}|j|_d|_d|_|�|jd�d|_|�|d�|�|jd�|�|jd�d|_|�	|j�|�|jd�t
d�D]}|�|d�qF|�|jd	�d|_|�|j�|�|jd�|�|d
�|�|jd�dS)Ns+<?xml version='1.0' encoding='iso8859'?><a>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc</a>r�rF�
r�T�)rrrrArrr~r
r�r�r&r�)rrrZxml3r�irrr�test_disabling_buffer?s.z(ChardataBufferTest.test_disabling_buffercCs|jd7_dSr�)r
rPrrrr]rz#ChardataBufferTest.counting_handlercCsBdd|d}t��}|j|_d|_d|_d|_|�|�|jS)Ns+<?xml version='1.0' encoding='iso8859'?><s>�as</s>rrr)rrrrArrr
r�)rZ
buffer_lenr�rrrrr`s
z$ChardataBufferTest.small_buffer_testcCs~d}d}t��}|j|_d|_d|_|�|jd�d|_|�|d�|jd9_|�|jd�|�|d	�|�|jd�dS)
Ns.<?xml version='1.0' encoding='iso8859'?><a><s>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa�aaa</s><s>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</s></a>rrrFr�T�	rrrrArrr~r
r�rrrr�test_change_size_1ksz%ChardataBufferTest.test_change_size_1cCs|d}d}t��}|j|_d|_d|_|�|jd�d|_|�|d�|jd|_|�|jd�|�|d	�|�|jd
�dS)Ns.<?xml version='1.0' encoding='iso8859'?><a>a<s>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrFrrTr�rrrrr�test_change_size_2{sz%ChardataBufferTest.test_change_size_2N)
r*r+r,�__doc__rrrrrrrrrrrrrrsrc@r�)�MalformedInputTestc
Cs`d}t��}z
|�|d�|��WdStjy/}z|�t|�d�WYd}~dSd}~ww)Ns
Tz unclosed token: line 2, column 0)rrr�r��
ExpatErrorr~r��rr�rr�rrrr��s��zMalformedInputTest.test1cCsPd}t��}d}|�tj|��|�|d�Wd�dS1s!wYdS)Ns<?xml version…='1.0'?>
z3XML declaration not well-formed: line 1, column \d+T)rr�assertRaisesRegexrr�)rr�rZerr_patternrrrr��s"�zMalformedInputTest.test2N)r*r+r,r�r�rrrrr�s	rc@r�)�ErrorMessageTestcCs |�tjtjtjtj�dSr.)r~rZXML_ERROR_SYNTAXZmessages�codesr
rrr�
test_codes�s�zErrorMessageTest.test_codesc
Csfd}t��}z
|�|d�|��WdStjy2}z|�|jtjtj	�WYd}~dSd}~ww)N�<T)
rrr�r�rr~r�rr#ZXML_ERROR_UNCLOSED_TOKENr rrr�test_expaterror�s
���z ErrorMessageTest.test_expaterrorN)r*r+r,r$r&rrrrr"�sr"c@s eZdZdZdd�Zdd�ZdS)�ForeignDTDTestszE
    Tests for the UseForeignDTD method of expat parser objects.
    cs�g��fdd�}t��}|�d�|�tj�||_|�d�|��dg�g�dd�<t��}|��|�tj�||_|�d�|��dg�dS)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�dSr�r��r[rTZ	system_idZ	public_id�Zhandler_call_argsrr�resolve_entity��z<ForeignDTDTests.test_use_foreign_dtd.<locals>.resolve_entityTs<?xml version='1.0'?><element/>)NNN�rrZ
UseForeignDTDZSetParamEntityParsingZXML_PARAM_ENTITY_PARSING_ALWAYSr^r�r~�rr+rrr*r�test_use_foreign_dtd�s


z$ForeignDTDTests.test_use_foreign_dtdcsPg��fdd�}t��}|�d�|�tj�||_|�d�|��dg�dS)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.
        cr(r�r�r)r*rrr+�r,zCForeignDTDTests.test_ignore_use_foreign_dtd.<locals>.resolve_entityTs@<?xml version='1.0'?><!DOCTYPE foo PUBLIC 'bar' 'baz'><element/>)ZbarZbazNr-r.rr*r�test_ignore_use_foreign_dtd�s
�z+ForeignDTDTests.test_ignore_use_foreign_dtdN)r*r+r,rr/r0rrrrr'�sr'c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�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.
    cCst��}|�d�}~dSr.�rrr�)rr�	subparserrrr�2test_parent_parser_outlives_its_subparsers__single�s
zKParentParserLifetimeTest.test_parent_parser_outlives_its_subparsers__singlecCs"t��}|�d�}|�d�}~dSr.r2)rrZ
subparser_oneZ
subparser_tworrr�4test_parent_parser_outlives_its_subparsers__multiple�s

zMParentParserLifetimeTest.test_parent_parser_outlives_its_subparsers__multiplecCs$t��}|�d�}|�d�}~~dSr.r2)rrr3Zsubsubparserrrr�1test_parent_parser_outlives_its_subparsers__chain�s


zJParentParserLifetimeTest.test_parent_parser_outlives_its_subparsers__chainN)r*r+r,rr4r5r6rrrrr1�s
	r1c@r�)�ReparseDeferralTestcCsZt��}tjdk}|�|��|�|�d�|�|��d�|�d�|�|��|�dS)N�rr�rFT)rr�version_infor�GetReparseDeferralEnabled�SetReparseDeferralEnabled)rrZenabledrrr�test_getter_setter_round_trips


z1ReparseDeferralTest.test_getter_setter_round_tripcs�tjdkr|�dtj�d��g��fdd�}t��}||_|�|���dD]}|�|d�q'|��g�|�dd	�|��d
g�dS)Nr8zExpat z" does not support reparse deferralcr�r.r��r6�_�Zstartedrr�
start_elementr�zHReparseDeferralTest.test_reparse_deferral_enabled.<locals>.start_element�s<docs/>Fr�T�doc)	rr9ZskipTestrr8r�r:r�r~�rr@r�chunkrr?r�test_reparse_deferral_enableds
z1ReparseDeferralTest.test_reparse_deferral_enabledcshg��fdd�}t��}||_tjdkr|�d�|�|���dD]}|�|d�q"|��dg�dS)Ncr�r.r�r=r?rrr@,r�zIReparseDeferralTest.test_reparse_deferral_disabled.<locals>.start_elementr8FrArB)	rrr8r9r;r�r:r�r~rCrr?r�test_reparse_deferral_disabled)s

z2ReparseDeferralTest.test_reparse_deferral_disabledN)r*r+r,r<rErFrrrrr7s
r7c@s�eZdZdZedd�dd��Zdd�Zdd	�Zej	d
d��Z
ej	dd
��Zej	dd��Zej	dd��Z
ej	dd��Zdd�Zdd�Zdd�Zej	dd��Zej	dd��Zdd�Zd d!�Zd"d#�Zd$d%�Zd&S)'�AttackProtectionTestBasez�
    Base class for testing protections against XML payloads with
    disproportionate amplification.

    The protections being tested should detect and prevent attacks
    that leverage disproportionate amplification from small inputs.
    �.r�csPt�d|�d|�d����}d��fdd�t|�D��}t�|d�}|j|d�S)	z�Create a billion laughs attack payload.

        Be careful: the number of total items is pow(n, k), thereby
        requiring at least pow(ncols, nrows) * sizeof(text) memory!
        z]            <?xml version="1.0"?>
            <!DOCTYPE doc [
                <!ENTITY row0 "zc">
                <!ELEMENT doc (#PCDATA)>
            {body}
            ]>
            <doc>&rowz;</doc>
        r�c3s2�|]}d|d�dd|�d���d�VqdS)z<!ENTITY rowrz "z&row�;z">Nr)�.0r��ncolsrr�	<genexpr>Vs
� �
�zIAttackProtectionTestBase.exponential_expansion_payload.<locals>.<genexpr>z    )�body)�textwrap�dedent�rstrip�joinr&�indent�format)�nrowsrLrQ�templaterNrrKr�exponential_expansion_payloadEs���
�z6AttackProtectionTestBase.exponential_expansion_payloadcCs(|jddd�}|�|t�d����dS)Nrr�)rUrLa'            <?xml version="1.0"?>
            <!DOCTYPE doc [
                <!ENTITY row0 ".">
                <!ELEMENT doc (#PCDATA)>
                <!ENTITY row1 "&row0;&row0;&row0;">
                <!ENTITY row2 "&row1;&row1;&row1;">
            ]>
            <doc>&row2;</doc>
        )rWr~rOrPrQ)r�payloadrrr�test_payload_generation]s	�z0AttackProtectionTestBase.test_payload_generationcO�&d}|jtj||g|�Ri|��dS)z=Check that func(*args, **kwargs) is invalid for a sub-parser.zparser must be a root parserN�r!rr�r�funcrS�kwargs�msgrrr�assert_root_parser_failurek�"z3AttackProtectionTestBase.assert_root_parser_failurecO�dS)aAssert that func(*args, **kwargs) triggers the attack protection.

        Note: this method must ensure that the attack protection being tested
        is the one that is actually triggered at runtime, e.g., by matching
        the exact error message.
        Nr)rr]rSr^rrr�assert_rejectedp�z(AttackProtectionTestBase.assert_rejectedcCrb)z7Set the activation threshold for the tested protection.Nr�rrZ	thresholdrrr�set_activation_thresholdyrdz1AttackProtectionTestBase.set_activation_thresholdcCrb)z?Set the maximum amplification factor for the tested protection.Nr�rrZ
max_factorrrr�set_maximum_amplification}rdz2AttackProtectionTestBase.set_maximum_amplificationcCrb)z/Test when the activation threshold is exceeded.Nrr
rrr�0test_set_activation_threshold__threshold_reached�rdzIAttackProtectionTestBase.test_set_activation_threshold__threshold_reachedcCrb)z3Test when the activation threshold is not exceeded.Nrr
rrr�4test_set_activation_threshold__threshold_not_reached�rdzMAttackProtectionTestBase.test_set_activation_threshold__threshold_not_reachedcCsDt��}t�|j|�}|�t|d�|�t|d�|�t|d�dS)N��?g�����)rr�	functools�partialrfr"r$r��rr�setterrrr�5test_set_activation_threshold__invalid_threshold_type�s
zNAttackProtectionTestBase.test_set_activation_threshold__invalid_threshold_typecCs8t�d�}t��}t�|j|�}|�t||j	d�dS)N�	_testcapir)
r�
import_modulerrrmrnrfr"r	Z
ULLONG_MAX)rrrrrprrr�6test_set_activation_threshold__invalid_threshold_range�s
zOAttackProtectionTestBase.test_set_activation_threshold__invalid_threshold_rangecC�0t��}|�d�}t�|j|�}|�|d�dS)Ni90)rrr�rmrnrfr`�rrr3rprrr�1test_set_activation_threshold__fail_for_subparser��
zJAttackProtectionTestBase.test_set_activation_threshold__fail_for_subparsercCrb)z/Test when the amplification factor is exceeded.Nrr
rrr�6test_set_maximum_amplification__amplification_exceeded�rdzOAttackProtectionTestBase.test_set_maximum_amplification__amplification_exceededcCrb)z3Test when the amplification factor is not exceeded.Nrr
rrr�:test_set_maximum_amplification__amplification_not_exceeded�rdzSAttackProtectionTestBase.test_set_maximum_amplification__amplification_not_exceededcCs&td�}t��}|�|�||��dS)N�inf)�floatrr�assertIsNonerh)rr{rrrr�(test_set_maximum_amplification__infinity�szAAttackProtectionTestBase.test_set_maximum_amplification__infinitycCs6t��}t�|j|�}|�t|d�|�t|d�dS)N�abc)rrrmrnrhr"r$rorrr�7test_set_maximum_amplification__invalid_max_factor_type�szPAttackProtectionTestBase.test_set_maximum_amplification__invalid_max_factor_typecCsLt��}t�|j|�}t�d�}|�tj||t	d��|�tj||d�dS)Nz!'max_factor' must be at least 1.0�nang�G�z��?)
rrrmrnrh�re�escaper!rr|)rrrpr_rrr�8test_set_maximum_amplification__invalid_max_factor_range�s

zQAttackProtectionTestBase.test_set_maximum_amplification__invalid_max_factor_rangecCru)Ng������^@)rrr�rmrnrhr`rvrrr�2test_set_maximum_amplification__fail_for_subparser�rxzKAttackProtectionTestBase.test_set_maximum_amplification__fail_for_subparserN)r*r+r,r�staticmethodrWrYr`r�abstractmethodrcrfrhrirjrqrtrwryrzr~r�r�r�rrrrrG<s6






rG)r�rzrequires Expat >= 2.7.2c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�MemoryProtectionTestcOrZ)z;Check that func(*args, **kwargs) hits the allocation limit.z#out of memory: line \d+, column \d+Nr[r\rrrrc�raz$MemoryProtectionTest.assert_rejectedcC�
|�|�Sr.)Z"SetAllocTrackerActivationThresholdrerrrrf�r1z-MemoryProtectionTest.set_activation_thresholdcCr�r.)Z#SetAllocTrackerMaximumAmplificationrgrrrrh�r1z.MemoryProtectionTest.set_maximum_amplificationcC�Ht��}|�|d�|�|�|d��|jddd�}|�|j|d�dS)Nr�rkrr��rLrUT�rrrfr}rhrWrcr��rrrXrrrri�s
zEMemoryProtectionTest.test_set_activation_threshold__threshold_reachedcCsPt��}|�|tdd��|�|�|d��|jddd�}|�|�|d��dS)Nrr�rkr�r�T)	rrrf�powr}rhrW�assertIsNotNoner�r�rrrrj�s
zIMemoryProtectionTest.test_set_activation_threshold__threshold_not_reachedcCr�)Nrrkrrr�Tr�r�rrrry�s
zKMemoryProtectionTest.test_set_maximum_amplification__amplification_exceededcCsJt��}|�|d�|�|�|d��|jddd�}|�|�|d��dS)Nrg��@rrr�T)rrrfr}rhrWr�r�r�rrrrz�s
zOMemoryProtectionTest.test_set_maximum_amplification__amplification_not_exceededN)
r*r+r,rcrfrhrirjryrzrrrrr��s	


r��__main__)*�iorrrmr�r�r�r�r�rOZunittestr�Zxml.parsersrZxml.parsers.expatrZtest.supportrrZTestCaserr@r-r�r�r�r�r�r�rrr"r'r1r7�ABCrGZskipIfr9r�r*�mainrrrr�<module>sL(?#$` z4$6<�