HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/test/__pycache__/test_minidom.cpython-310.opt-1.pyc
o

�i=�@s�ddlZddlZddlZddlmZddlZddlZddlZddlm	Z	m
Z
mZmZm
Z
ddlmZddlmZejddd�Zd	Zdd
d�Zdd
�Zdd�ZGdd�dej�Zedkrae��dSdS)�N)�support)�parse�Attr�Node�Document�parseString)�getDOMImplementation)�
ExpatErrorztest.xmlZxmltestdata)Zsubdira<?xml version='1.0' encoding='us-ascii'?>
<!DOCTYPE doc PUBLIC 'http://xml.python.org/public' 'http://xml.python.org/system' [
  <!ELEMENT e EMPTY>
  <!ENTITY ent SYSTEM 'http://xml.python.org/entity'>
]><doc attr='value'> text
<?pi sample?> <!-- comment --> <e/> </doc>cCst��dd|�S)N�doc)r�createDocument)�doctype�r
�./usr/local/lib/python3.10/test/test_minidom.py�create_doc_without_doctype�rcCsxt��ddd�}g|j_g|j_tjj�ddd�}|jj�	|�tjj�
dddd�}d|_d|_d|_
|jj�	|�|S)	Nr
zmy-notationz"http://xml.python.org/notations/myz	my-entityz!http://xml.python.org/entities/myz1.0�utf-8�us-ascii)rZcreateDocumentType�entitiesZ_seq�	notations�xml�dom�minidomZNotation�appendZEntity�version�encoding�actualEncoding)rZnotation�entityr
r
r�create_nonempty_doctype s ��rcCs.t�}t|�}||j�d�_||j�d�_|S�Nr)rrr�item�
ownerDocumentr)rr
r
r
r�create_doc_with_doctype0s
r!c@s�eZdZ�ddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#dDdE�Z$dFdG�Z%dHdI�Z&dJdK�Z'dLdM�Z(dNdO�Z)dPdQ�Z*dRdS�Z+dTdU�Z,dVdW�Z-dXdY�Z.dZd[�Z/d\d]�Z0d^d_�Z1d`da�Z2dbdc�Z3ddde�Z4dfdg�Z5dhdi�Z6djdk�Z7dldm�Z8dndo�Z9dpdq�Z:drds�Z;dtdu�Z<dvdw�Z=dxdy�Z>dzd{�Z?d|d}�Z@d~d�ZAd�d��ZBd�d��ZCd�d��ZDd�d��ZEd�d��ZFd�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUd�d��ZVd�d��ZWd�d��ZXd�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�dÄZcd�dńZdd�dDŽZed�dɄZfd�d˄Zgd�d̈́Zhd�dτZid�dфZjd�dӄZkd�dՄZld�dׄZmd�dلZnd�dۄZod�d݄Zpd�d߄Zqd�d�Zrd�d�Zsd�d�Ztd�d�Zud�d�ZvGd�d�d�Zwd�d�Zxd�d�Zyd�d�Zzd�d�Z{d�d��Z|d�d��Z}d�d��Z~d�d��Zd�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��dS( �MinidomTest�TestcCs|�||�dS�N)�
assertTrue)�self�testZtestnamer
r
r�confirm8rzMinidomTest.confirmcCs"|j}|�||kd||f�dS)Nzlooking for %r, found %r)�	wholeTextr()r&�node�s�tr
r
r�checkWholeText;szMinidomTest.checkWholeTextcCs"t�}|�|j�|�tj�dSr$)r�assertFalseZasync_�r&r
r
r
r�testDocumentAsyncAttr?sz!MinidomTest.testDocumentAsyncAttrcCsPttd��}t|�}|��|�t|t��Wd�dS1s!wYdS)N�rb��open�tstfiler�unlinkr(�
isinstancer�r&�filerr
r
r�testParseFromBinaryFileDs
"�z#MinidomTest.testParseFromBinaryFilecCsTttddd��}t|�}|��|�t|t��Wd�dS1s#wYdS)N�rz
iso-8859-1)rr2r7r
r
r�testParseFromTextFileJs
"�z!MinidomTest.testParseFromTextFilecCsJtdddd�}|�|jd�|�|jd�|�|jd�|�|jd�dS)N�qName�namespaceURI�	localName�prefix�r�assertEqual�namer=r?r>�r&�attrr
r
r�testAttrModeSetsParamsAsAttrsPs
z)MinidomTest.testAttrModeSetsParamsAsAttrscCsLtdddd�}|�|jd�|�|jd�|�|jd�|�|j|j�dS)Nr<r=r?r@rCr
r
r� testAttrModeSetsNonOptionalAttrsWs
z,MinidomTest.testAttrModeSetsNonOptionalAttrscCs0tt�}|�|�d�|j�d�k�|��dS)NZLI)rr4r(�getElementsByTagName�documentElementr5�r&rr
r
r�testGetElementsByTagName^s

�z$MinidomTest.testGetElementsByTagNamecCs�td�}|j}|jd}|�d�}|�||�|�t|j�dkoS|jjdkoS|jd|uoS|j�d�|uoS|jd|uoS|j�d�|uoS|j	|uoS|j
|uoS|��dkd�|�d�}|�|d�|�t|j�dko�|jjdko�|jd|uo�|j�d�|uo�|jd|uo�|j�d�|uo�|j
|uo�|j|uo�|��d	kd�|�d
�}|�||�|�t|j�dko�|jjdko�|jd|uo�|j�d�|uo�|jd|uo�|j�d�|uo�|j
|uo�|j|uo�|��dkd�|��dS)
N�<doc><foo/></doc>r�element��z<doc><element/><foo/></doc>z0testInsertBefore -- node properly placed in tree�z%<doc><element/><foo/><element/></doc>�bar�z+<doc><element/><foo/><bar/><element/></doc>)rrH�
childNodes�
createElement�insertBeforer(�len�lengthr�
firstChild�	lastChild�toxml�previousSibling�nextSiblingr5)r&r�root�elemZnelemZnelem2r
r
r�testInsertBeforeds�


�������
�


�������
�


���������zMinidomTest.testInsertBeforecCsrtd�}|�d�}|�d�}|�d�}|�d�}|j�|�|��}|�|�|�|�|�|�||||||fS)N�<doc/>Zoriginal�foorPZbat)r�createTextNoderH�appendChildZcreateDocumentFragment�r&rZorig�c1�c2Zc3�fragr
r
r�_create_fragment_test_nodes�s






z'MinidomTest._create_fragment_test_nodescCs�|��\}}}}}}|j�|d�|�t|jj�||||fkd�|��|��|��\}}}}}}|j�||�|�t|jj�||||fkd�|��|��dS)NzinsertBefore(<fragment>, None)zinsertBefore(<fragment>, orig))rgrHrTr(�tuplerRr5rcr
r
r�testInsertBeforeFragment�s$
��
��z$MinidomTest.testInsertBeforeFragmentcCsVtt�}|j�|�d��|�|jjdjdk�|�|jjdjdk�|�	�dS)NZHello���z#comment)
rr4rHrb�
createCommentr(rR�nodeName�datar5rIr
r
r�testAppendChild�s
zMinidomTest.testAppendChildcCsT|��\}}}}}}|j�|�|�t|jj�||||fkd�|��|��dS)NzappendChild(<fragment>))rgrHrbr(rhrRr5rcr
r
r�testAppendChildFragment�s
��z#MinidomTest.testAppendChildFragmentcCs\|��\}}}}}}|j�||�|��|�t|jj�|||fkd�|��|��dS)NzreplaceChild(<fragment>))rgrH�replaceChildr5r(rhrRrcr
r
r�testReplaceChildFragment�s�z$MinidomTest.testReplaceChildFragmentcCs�t�}|�d�}|�d�}|�tjj|j|�|�|�|�tjj|j||�|�tjj|j	||�|j
}|�tjj|j|�|�tjj|j|�|�|�|�
�dS)NrL�text)rrSra�assertRaisesrr�HierarchyRequestErrrbrTrp�
attributesZsetNamedItemZsetNamedItemNSr5)r&rr]rrZnodemapr
r
r�testLegalChildren�s(


����
zMinidomTest.testLegalChildrencCs�t�}|�d�}|j}d|d<|�d�}|�|j|ud�|�|j|ud�|�|jdkd�|�|jdkd�|�	�|�	�dS)	NrLrPr`rz-NamedNodeMap.__setitem__() sets ownerDocumentz,NamedNodeMap.__setitem__() sets ownerElementz%NamedNodeMap.__setitem__() sets valuez)NamedNodeMap.__setitem__() sets nodeValue)
rrSrurr(r �ownerElement�value�	nodeValuer5)r&rr]�attrs�ar
r
r�testNamedNodeMapSetItem�s&

����z#MinidomTest.testNamedNodeMapSetItemcCsBtt�}|�|�|�|�d��|�|jdj�|��dS)Nr`rj)rr4r(rbrkrRr5rIr
r
r�testNonZero�s

zMinidomTest.testNonZerocCs,tt�}|�|j�|��|�|j�dSr$)rr4r%rRr5r.rIr
r
r�
testUnlink�szMinidomTest.testUnlinkcCsDtt��}|�|j�Wd�n1swY|�|j�dSr$)rr4r%rRr.rIr
r
r�testContext�s
�zMinidomTest.testContextcCs.t�}|�|�d��|�|j�|��dS�N�abc)rrbrSr(rHr5rIr
r
r�testElement�szMinidomTest.testElementcCsjtd�}|j}|�dd�|�|��dkd�|�d�}|�|j|ud�|�|j|jud�|��dS)N�<abc/>�spam�jam2�<abc spam="jam2"/>�testAAAz!setAttribute() sets ownerDocumentz setAttribute() sets ownerElement)	rrH�setAttributer(rY�getAttributeNoder rwr5)r&r�elr{r
r
rr�s
��zMinidomTest.testAAAcCsFtd�}|j}|�dd�|�dd�|�|��dkd�|��dS)Nr�r��jamr�r��testAAB)rrHr�r(rYr5�r&rr�r
r
rr�szMinidomTest.testAABcCs�t�}|�|�d��}|�dd�|�|�d�dk�|�|jdjdk�|�dd�|�|�d�dk�|�|jdjdk�|�t|j�dk�|�dd�|�|�d�dk�|�|jdjdk�|�t|j�dk�|�	�dS)Nr��def�ghiZjklZmnorMZnewval)
rrbrSr�r(�getAttributerurxrUr5�r&r�childr
r
r�testAddAttrszMinidomTest.testAddAttrcCsrt�}|�|�d��}|�t|j�dk�|�dd�|�t|j�dk�|jd=|�t|j�dk�|��dS)Nr�rr�r�rN)rrbrSr(rUrur�r5r�r
r
r�testDeleteAttr-szMinidomTest.testDeleteAttrcCstt�}|�|�d��}|�dd�|�t|j�dk�|�tj	j
|jd�|�d�|�t|j�dk�|��dS)Nr�r�r�rNr`r)
rrbrSr�r(rUrursrr�NotFoundErrZremoveAttributer5r�r
r
r�testRemoveAttr8s
zMinidomTest.testRemoveAttrcCs�t�}|�|�dd��}|�ddd�|�ddd�|�tjj|jdd�|�	t
|j�dk�|�dd�|�	t
|j�d	k�|��dS)
N�http://www.python.org�
python:abc�http://www.w3.org�xmlns:pythonzpython:abcattrr`rMZabcattrrN)
rrb�createElementNS�setAttributeNSrsrrr�ZremoveAttributeNSr(rUrur5r�r
r
r�testRemoveAttrNSCs
���zMinidomTest.testRemoveAttrNScCs�t�}|�|�d��}|�dd�|�t|j�dk�|�d�}|�t	j
j|jd�|�
||�|��|�t|j�dkoB|�d�du�t�}|�|�d��}|�d�}|�t	j
j|j|�|��dS)Nr`r�r�rNr)rrbrSr�r(rUrur�rsrrr�ZremoveAttributeNode�assertIsr5)r&rr�r*�dom2�child2Znode2r
r
r�testRemoveAttributeNodeQs&
��
�z#MinidomTest.testRemoveAttributeNodecCs6t�}|�|�d��}|�dd�|�|�d��dS)Nr`r�r�)rrbrSr�r(ZhasAttributer�r
r
r�testHasAttributecszMinidomTest.testHasAttributecCs�td�}|j}|�dd�|�t|j�dk�|�dd�|�d�|�t|j�dkoG|jdjdkoG|jdjdkoG|�	d�dkoG|�
d�j�d|jd<|�t|j�dkos|jdjdkos|jdjdkos|�	d�dkos|jdj�|�dd�|�t|j�dko�|jdjdko�|jdjdko�|�	d�dko�|jdjdko�|jdjdko�|�	d�dk�d	|jd<|�t|j�dko�|jdjdko�|jdjdko�|�	d�dko�|jdjd	ko�|jdjd	ko�|�	d�d	k�|��dS)
Nr�r�r�rNZbamZhamZspam2rMZbam2)
rrHr�r(rUru�setIdAttributerxryr�r��isIdr5r�r
r
r�testChangeAttrisl
���
�
���
�������
������zMinidomTest.testChangeAttrcC�dSr$r
�r&r
r
r�testGetAttrList��zMinidomTest.testGetAttrListcCr�r$r
r�r
r
r�testGetAttrValues�r�zMinidomTest.testGetAttrValuescCr�r$r
r�r
r
r�testGetAttrLength�r�zMinidomTest.testGetAttrLengthcCs.t�}|�|�dd��}|�|�d�d�dS)Nr�r��missing�)rrbr�rAr�r�r
r
r�testGetAttribute�s

�zMinidomTest.testGetAttributecCsvt�}|�|�dd��}|�ddd�|�|�dd�d�|�|�dd�d�|�|�d��}|�|�dd	�d�dS)
Nr�r�r�r�Zpython�otherr�r�r�)rrbr�r�rAZgetAttributeNSrS)r&rr�r�r
r
r�testGetAttributeNS�s"
�����zMinidomTest.testGetAttributeNScCr�r$r
r�r
r
r�testGetAttributeNode��z MinidomTest.testGetAttributeNodecCs|d}t|�}|�dd�}|�t|�dko6|djdko6|djdko6|djdko6|djdko6|djdk�|�	�dS)NzZ<foo xmlns:minidom='http://pyxml.sf.net/minidom'>
        <minidom:myelem/>
        </foo>zhttp://pyxml.sf.net/minidomZmyelemrNrrzminidom:myelem)
r�getElementsByTagNameNSr(rUr=r>r?�tagNamerlr5)r&�drZelemsr
r
r�testGetElementsByTagNameNS�s"������z&MinidomTest.testGetElementsByTagNameNScCs"|�||�}|�t|�dk�dSr)r�r(rU)r&r
ZnsuriZlnameZnodelistr
r
r�5get_empty_nodelist_from_elements_by_tagName_ns_helper�szAMinidomTest.get_empty_nodelist_from_elements_by_tagName_ns_helpercCshtd�}|�|dd�|�|dd�|�|dd�td�}|�|dd�|�|dd�|�|d	d
�dS)Nr_z"http://xml.python.org/namespaces/aZ	localname�*Zsplatz3<doc xmlns="http://xml.python.org/splat"><e/></doc>zhttp://xml.python.org/splatz	not-therez#http://somewhere.else.net/not-there�e)rr�r/r
r
r�+testGetEmptyNodeListFromElementsByTagNameNS�s(������z7MinidomTest.testGetEmptyNodeListFromElementsByTagNameNScC�@t�}|�|�d��}t|�}t|�}|�||k�|��dSr��rrbrS�repr�strr(r5�r&rr�Zstring1Zstring2r
r
r�testElementReprAndStr��z!MinidomTest.testElementReprAndStrcCr�r�r�r�r
r
r�testElementReprAndStrUnicode�r�z(MinidomTest.testElementReprAndStrUnicodecCsPt�}|�|�dd��}t|�}t|�}|�||k�|�d|v�|��dS)Nzhttp://www.slashdot.orgz	slash:abc)rrbr�r�r�r(r5r�r
r
r�testElementReprAndStrUnicodeNS�s
�z*MinidomTest.testElementReprAndStrUnicodeNScCsDt�}|�|�d��}|�dd�}|�t|�t|�k�|��dS)Nr�r�)rrbrSr�r(r�r�r5)r&rr�r*r
r
r�testAttributeRepr�s
zMinidomTest.testAttributeReprcCr�r$r
r�r
r
r�testTextNodeRepr�r�zMinidomTest.testTextNodeReprcCs.d}t|�}|��}|��|�||k�dS)Nz <?xml version="1.0" ?><a b="c"/>)rrYr5r(�r&r�rZdomstrr
r
r�testWriteXML�s
zMinidomTest.testWriteXMLcCs:d}t|�}|jdd�}|��|�||�dd�k�dS)Nz"<?xml version="1.0" ?>
<a b="c"/>
z
)Znewl�
)r�toprettyxmlr5r(�replacer�r
r
r�testAltNewline�s
zMinidomTest.testAltNewlinecCs�d}|�td���|d�|�td���|d�|�td���|d�|�td���|d	�|�td
���|d�dS)N�<?xml version="1.0" ?>
�<B>A</B>z	<B>A</B>
z<C>A<B>A</B></C>z<C>
	A
	<B>A</B>
</C>
z<C><B>A</B>A</C>z<C>
	<B>A</B>
	A
</C>
z<C><B>A</B><B>A</B></C>z<C>
	<B>A</B>
	<B>A</B>
</C>
z<C><B>A</B>A<B>A</B></C>z <C>
	<B>A</B>
	A
	<B>A</B>
</C>
)rArr�)r&�declr
r
r� test_toprettyxml_with_text_nodess �����z,MinidomTest.test_toprettyxml_with_text_nodescCsVt�}|�d�}|�|�d��|�|�d��|�|�d}|�|��|d�dS)Nr]ZTEXTr�z<elem>
	TEXT
	TEXT
</elem>
)rrSrbrarAr�)r&rr]r�r
r
r�)test_toprettyxml_with_adjacent_text_nodess


�z5MinidomTest.test_toprettyxml_with_adjacent_text_nodescCsVdD]&}t|�}t|���}|�|�d�djd��|�d�djd���qdS)N)r�z<A><B>C</B></A>�Br)rr�rArGrRrY)r&r�rr�r
r
r�/test_toprettyxml_preserves_content_of_text_nodes��z;MinidomTest.test_toprettyxml_preserves_content_of_text_nodecCs�td�}|jj}|�|jdkoE|jdkoE|jdkoE|jtj	koE|j
duoE|��oEt|j
�dkoE|jduoE|jduoE|jduoE|jtjjk�dS)Nz<e><?mypi 	
 data 	
 ?></e>Zmypizdata 	
 r)rrHrWr(�targetrmrl�nodeTyper�PROCESSING_INSTRUCTION_NODEru�
hasChildNodesrUrRrXr>r=rr�EMPTY_NAMESPACE)r&r�pir
r
r�testProcessingInstruction&s.��
������	�
�z%MinidomTest.testProcessingInstructioncCr�r$r
r�r
r
r�testProcessingInstructionRepr5r�z)MinidomTest.testProcessingInstructionReprcCr�r$r
r�r
r
r�testTextRepr7r�zMinidomTest.testTextReprcCr�r$r
r�r
r
r�
testWriteText9r�zMinidomTest.testWriteTextcCr�r$r
r�r
r
r�testDocumentElement;r�zMinidomTest.testDocumentElementcCs:td�}|�d�}|�tjj|j|�|��|��dS)Nr_�extra)rrSrsrrrtrbr5�r&r
r]r
r
r�testTooManyDocumentElements=s

z'MinidomTest.testTooManyDocumentElementscCr�r$r
r�r
r
r�testCreateElementNSEr�zMinidomTest.testCreateElementNScCr�r$r
r�r
r
r�testCreateAttributeNSGr�z!MinidomTest.testCreateAttributeNScCr�r$r
r�r
r
r�	testParseIr�zMinidomTest.testParsecCr�r$r
r�r
r
r�testParseStringKr�zMinidomTest.testParseStringcCr�r$r
r�r
r
r�testCommentMr�zMinidomTest.testCommentcCr�r$r
r�r
r
r�testAttrListItemOr�zMinidomTest.testAttrListItemcCr�r$r
r�r
r
r�testAttrListItemsQr�zMinidomTest.testAttrListItemscCr�r$r
r�r
r
r�testAttrListItemNSSr�zMinidomTest.testAttrListItemNScCr�r$r
r�r
r
r�testAttrListKeysUr�zMinidomTest.testAttrListKeyscCr�r$r
r�r
r
r�testAttrListKeysNSWr�zMinidomTest.testAttrListKeysNScCsPtd�}|j}|j}|�d�}|�d�}|�|�|��|�tj	j
|jd�dS)Nz<doc a=''/>r{)rrHrur�ZremoveNamedItemr(�
isSameNodersrrr��r&r
r�rz�a1�a2r
r
r�testRemoveNamedItemYs

zMinidomTest.testRemoveNamedItemcCsVtd�}|j}|j}|�dd�}|�dd�}|�|�|��|�tj	j
|jdd�dS)Nz.<doc xmlns:a='http://xml.python.org/' a:b=''/>zhttp://xml.python.org/�b)rrHru�getAttributeNodeNSZremoveNamedItemNSr(r�rsrrr�r�r
r
r�testRemoveNamedItemNSbs�z!MinidomTest.testRemoveNamedItemNScCr�r$r
r�r
r
r�testAttrListValueslr�zMinidomTest.testAttrListValuescCr�r$r
r�r
r
r�testAttrListLengthnr�zMinidomTest.testAttrListLengthcCr�r$r
r�r
r
r�testAttrList__getitem__pr�z#MinidomTest.testAttrList__getitem__cCr�r$r
r�r
r
r�testAttrList__setitem__rr�z#MinidomTest.testAttrList__setitem__cCr�r$r
r�r
r
r�testSetAttrValueandNodeValuetr�z(MinidomTest.testSetAttrValueandNodeValuecCr�r$r
r�r
r
r�testParseElementvr�zMinidomTest.testParseElementcCr�r$r
r�r
r
r�testParseAttributesxr�zMinidomTest.testParseAttributescCr�r$r
r�r
r
r�testParseElementNamespaceszr�z&MinidomTest.testParseElementNamespacescCr�r$r
r�r
r
r�testParseAttributeNamespaces|r�z(MinidomTest.testParseAttributeNamespacescCr�r$r
r�r
r
r�testParseProcessingInstructions~r�z+MinidomTest.testParseProcessingInstructionscCr�r$r
r�r
r
r�testChildNodes�r�zMinidomTest.testChildNodescCr�r$r
r�r
r
r�testFirstChild�r�zMinidomTest.testFirstChildcCs<td�}|j}|�|���td�}|j}|�|���dS)NrKr_)rrHr%r�r.)r&rr
r��doc2r
r
r�testHasChildNodes�szMinidomTest.testHasChildNodescCs�|j}|j}t|���}t|���}|��|��|�||kd�tt|��D]5}|�|�}	|�|�}
|�|	|
uoQ|	j|
jkoQ|	j	|
j	koQ|	j
|
j
koQ|	j|
jkd�|�|
j|ud�q(dS)Nz(clone of element has same attribute keysz3clone of attribute node has proper attribute valuesz'clone of attribute node correctly owned)
ru�list�keys�sortr(�rangerUrrxryr=r>rw)r&�e1�e2r'Zattrs1Zattrs2Zkeys1Zkeys2�ir�r�r
r
r�!_testCloneElementCopiesAttributes�s0


�
�
�
���z-MinidomTest._testCloneElementCopiesAttributescCs^td�}|j}|�|�}|�||d|rdpd�d|_|_|�dd�|�dd	�||fS)
Nz<doc attr='value'><foo/></doc>ZtestCloneElementZDeepZShallowZMODIFIEDrDz	NEW VALUEZaddedZVALUE)rrH�	cloneNoderr�rlr�)r&�deeprr\�cloner
r
r�_setupCloneElement�s
�zMinidomTest._setupCloneElementcC�R|�d�\}}|�t|j�dko |jjdko |jduo |��dkd�|��dS)Nrz<doc attr="value"/>�testCloneElementShallow�rr(rUrRrV�
parentNoderYr5�r&rrr
r
rr��
��
�z#MinidomTest.testCloneElementShallowcCr
)NrNz<doc attr="value"><foo/></doc>�testCloneElementDeeprrr
r
rr�rz MinidomTest.testCloneElementDeepcCs&td�}|�d�}|�|dud�dS)N��<?xml version='1.0'?>
<!-- comment --><!DOCTYPE doc [
<!NOTATION notation SYSTEM 'http://xml.python.org/'>
]>
<doc attr='value'/>rzFtestCloneDocumentShallow: shallow cloning of documents makes no sense!)rr	r(�r&r
r�r
r
r�testCloneDocumentShallow�s


�z$MinidomTest.testCloneDocumentShallowcCs�td�}|�d�}|�|�|�p|�|�d�|�t|j�t|j�kd�|�|jjtj	kd�|�|jj
�|�d�|�|j�|j�d�|jduro|�|jjtjkd�|�|jj
�|��|�|j�|j��dSdS)	NrrNz4testCloneDocumentDeep: document objects not distinctz8testCloneDocumentDeep: wrong number of Document childrenz:testCloneDocumentDeep: documentElement not an ELEMENT_NODEz@testCloneDocumentDeep: documentElement owner is not new documentz;testCloneDocumentDeep: documentElement should not be sharedz7testCloneDocumentDeep: doctype not a DOCUMENT_TYPE_NODE)
rr	r(r�rUrRrHr�rZELEMENT_NODEr r�DOCUMENT_TYPE_NODErr
r
r�testCloneDocumentDeep�s0
�����
��z!MinidomTest.testCloneDocumentDeepcCs�t�}|�d�}|�|duoV|j|jkoV|j|jkoV|j|jkoV|j|jkoVt|j�t|j�koV|j�	t|j��duoVt|j
�t|j
�koV|j
�	t|j
��duoVt|j�dk�tt|j��D]G}|j�	|�}|j�	|�}|�|�
|�o�|�
|�o�|j|jko�|j|jko�|j|jko�|j|jko�|j|jko�|j|jko�|j|jk�q_tt|j
��D]/}|j
�	|�}|j
�	|�}|�|�
|�o�|�
|�o�|j|jko�|j|jko�|j|jk�q�dS)NrNr)rr	r(rlrB�publicId�systemIdrUrrrrRrr��notationNamerrr)r&rrrZseZceZsnZcnr
r
r�testCloneDocumentTypeDeepOk�sl

�
�
�
�����	�

�
�
�
�
�
�
�
�	
�
�
�
��z'MinidomTest.testCloneDocumentTypeDeepOkcC�&t�}|j�d�}|�|dud�dS)NrN�testCloneDocumentTypeDeepNotOk�r!rr	r(�r&r
rr
r
rr�z*MinidomTest.testCloneDocumentTypeDeepNotOkcCs�t�}|�d�}|�|duoJ|j|jkoJ|j|jkoJ|j|jkoJ|j|jkoJt|j�dkoJ|j�	d�duoJt|j
�dkoJ|j
�	d�duoJt|j�dk�dSr)rr	r(rlrBrrrUrrrrR)r&rrr
r
r�testCloneDocumentTypeShallowOk
s*

�
�
�
�����	�z*MinidomTest.testCloneDocumentTypeShallowOkcCr)Nr�!testCloneDocumentTypeShallowNotOkrr r
r
rr#r!z-MinidomTest.testCloneDocumentTypeShallowNotOkcCs*td�}td�}|�tjj|j||�dS)Nr_)rrsrr�NotSupportedErr�
importNode)r&r
�testNameZdoc1r�r
r
r�check_import_documentsz!MinidomTest.check_import_documentcC�|�dd�dS)Nr�testImportDocumentShallow�r'r�r
r
rr)"rz%MinidomTest.testImportDocumentShallowcCr()NrN�testImportDocumentDeepr*r�r
r
rr+%rz"MinidomTest.testImportDocumentDeepcC�(t�}t�}|�tjj|j|jd�dSr�r!rrsrrr$r%r�r&�srcr�r
r
r�testImportDocumentTypeShallow(�
�z)MinidomTest.testImportDocumentTypeShallowcCr,�NrNr-r.r
r
r�testImportDocumentTypeDeep.r1z&MinidomTest.testImportDocumentTypeDeepcCs�td�}|j�d�}|�|d�|�|�}|�|�|��|�|�|��|�|jdu|d�|�|j�|j�|d�|�|j	|d�dS)Nz<doc attr='value'/>rDz: ownerElement should be Nonez: ownerDocument does not matchz.: cloned attribute must have specified == True)
rrHr�ZassertNotEqualr	r(r�rwr Z	specified)r&r
r&r
rDrr
r
r�check_clone_attribute6s
���z!MinidomTest.check_clone_attributecCr()Nr�testCloneAttributeShallow�r4r�r
r
rr5Drz%MinidomTest.testCloneAttributeShallowcCr()NrN�testCloneAttributeDeepr6r�r
r
rr7Grz"MinidomTest.testCloneAttributeDeepcCsJtd�}|j}|�|jtj�|�|�}|�|j|jko!|j	|j	k�dS)Nz<?target data?><doc/>)
rrWrAr�rr�r	r(r�rm)r&r
r&r
r�rr
r
r�check_clone_piJs

�zMinidomTest.check_clone_picCr()Nr�testClonePIShallow�r8r�r
r
rr9RrzMinidomTest.testClonePIShallowcCr()NrN�testClonePIDeepr:r�r
r
rr;UrzMinidomTest.testClonePIDeepc
Cstjj�d���}Gdd�d�}|�}|j}|jd}|�dd|�|r?|jdd�}|�	|j
jjd	�tjj
j}|jjd}	n't�|d
d��|jdd�}Wd�n1sWwYtjj
j}|jd}	|�	|j|�|�	|jd�|�	|jd�|�|j|�|�|j|	�dS)Nu
            <?xml version="1.0" ?>
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                "http://www.w3.org/TR/html4/strict.dtd"
                [ <!ENTITY smile "☺"> ]
            >
            <doc>Don't let entities make you frown &smile;</doc>
        c@seZdZdd�ZdS)z4MinidomTest.check_clone_node_entity.<locals>.HandlercSs"||_||_||_||_||_dSr$)�	operation�keyrmr/�dst�r&r<r=rmr/r>r
r
r�handlees

z;MinidomTest.check_clone_node_entity.<locals>.Handler.handleN)�__name__�
__module__�__qualname__r@r
r
r
r�HandlerdsrDZsmiler=rmT)r
u%Don't let entities make you frown ☺r )rrrr�striprr�setUserDatar	rArHrWr)�UserDataHandlerZ
NODE_IMPORTEDrZ	swap_attrZNODE_CLONEDr<r=rmr�r/r>)
r&Zclone_documentZdocumentrD�handlerrrrr<r>r
r
r�check_clone_node_entityXs2
�	
�
�

z#MinidomTest.check_clone_node_entitycCs|�d�|�d�dS)NFT)rIr�r
r
r�testCloneNodeEntity�s
zMinidomTest.testCloneNodeEntitycCs�td�}|j}|�|�d��|�|�d��|�t|j�dko%|jjdkd�|��|�t|j�dkoF|jjdkoF|j	|j
uoF|j	jdkd�|��td�}|j}|�|�d	��|��|�t|j�d
kon|jjd
kd�|��dS)Nr_�first�secondrMztestNormalize -- preparationrN�firstsecondztestNormalize -- resultr�rz*testNormalize -- single empty node removed)
rrHrbrar(rUrRrV�	normalizerWrXrmr5�r&r
r\r
r
r�
testNormalize�s6
�
�
�
�
�zMinidomTest.testNormalizecCs�td�}|j}|�|�d��|�|�d��|�|�d��|�t|j�dko-|jjdkd�|�	�|�t|j�dkoh|jjdkoh|j
jdkoh|j
|juoh|j
j
|juoh|j
jduoh|jj|j
uoh|jj
dud	�|��dS)
Nr_rKrLrrOz1testNormalizeCombineAndNextSibling -- preparationrMrMz-testNormalizeCombinedAndNextSibling -- result)rrHrbrarSr(rUrRrVrNrWrmrXr[rZr5rOr
r
r�"testNormalizeCombineAndNextSibling�s6
�
�
�
��
��
�	z.MinidomTest.testNormalizeCombineAndNextSiblingcCs�td�}|j}|�|�d��|�|�d��|�t|j�dko%|jjdkd�|��|�t|j�dkoR|jjdkoR|j	j
dkoR|j	|juoR|j	jduoR|j	j
dud�|��dS)Nr_rKr�rMz1testNormalizeDeleteWithPrevSibling -- preparationrNz,testNormalizeDeleteWithPrevSibling -- result�rrHrbrar(rUrRrVrNrWrmrXr[rZr5rOr
r
r�"testNormalizeDeleteWithPrevSibling��,
�
�
�
�
�
�z.MinidomTest.testNormalizeDeleteWithPrevSiblingcCs�td�}|j}|�|�d��|�|�d��|�t|j�dko%|jjdkd�|��|�t|j�dkoR|jjdkoR|j	j
dkoR|j	|juoR|j	jduoR|j	j
dud�|��dS)Nr_r�rLrMz1testNormalizeDeleteWithNextSibling -- preparationrNz,testNormalizeDeleteWithNextSibling -- resultrRrOr
r
r�"testNormalizeDeleteWithNextSibling�rTz.MinidomTest.testNormalizeDeleteWithNextSiblingcCs�td�}|j}|�|�d��|�|�d��|�|�d��|�t|j�dko-|jjdkd�|�	�|�t|j�dkob|jjdkob|j
|juob|j
j|juob|j
j
duob|jj
|j
uob|jjdud�|��dS)Nr_rr�rOz1testNormalizeDeleteWithTwoSiblings -- preparationrMz,testNormalizeDeleteWithTwoSiblings -- result)rrHrbrSrar(rUrRrVrNrWrXr[rZr5rOr
r
r�)testNormalizeDeleteWithTwoNonTextSiblings�s2
�
�
��
��
�z5MinidomTest.testNormalizeDeleteWithTwoNonTextSiblingscCs�td�}|j}|�|�d��|�|�d��|�|�d��|�|�d��|�|�d��|�t|j�dko=|jjdkd�|��|�t|j�dkoj|jjdkoj|j	|j
uoj|j	jdkoj|j	jduoj|j	j
dud	�|��dS)
Nr_r�rLZfourth�z,testNormalizeDeleteAndCombine -- preparationrNZsecondfourthz'testNormalizeDeleteAndCombine -- result)rrHrbrar(rUrRrVrNrWrXrmrZr[r5rOr
r
r�testNormalizeDeleteAndCombine�s2
�
�
�
�
�
�z)MinidomTest.testNormalizeDeleteAndCombinecCstd�}|j}|jd�|�d��|jd�|�d��|jdjd�|�d��|jd�|�d��|�|�d��|�t|j�dko�|jjdko�t|jdj�d	ko�|jdjjd	ko�t|jdj�dko�|jdjjdko�t|jdjdj�d
ko�|jdjdjjd
kd�|��|�t|j�d
ko�|jjd
ko�t|jdj�d
ko�|jdjjd
ko�t|jdj�d
ko�|jdjjd
ko�t|jdjdj�dko�|jdjdjjdkd�|�|jdjdj	d
k�o	|jdjdjdj	dk�o	|jdjdj	dkd�|�|jdjdj
du�o�|jdjdj|jdjdu�o�|jdjdjdu�o�|jdjdj
|jdjdu�o�|jdjdj
du�o�|jdjdj|jdjdu�o�|jdjdjdu�o�|jdjdj
|jdjdud�|��dS)Nz)<doc><o><i/>t</o><o><o>t2</o>t3</o></doc>rr��xrNZx2Zx3rOrQrMztestNormalize2 -- preparationz$testNormalize2 -- childNodes lengthsZtxZt2x2Zt3x3z$testNormalize2 -- joined text fieldsz"testNormalize2 -- sibling pointers)
rrHrRrbrar(rUrVrNrmr[rZr5rOr
r
r�testNormalizeRecursions�
�������	
�������	����������	�
��
z"MinidomTest.testNormalizeRecursioncCs8td�}|jjd}|�|jtj�|��|��dS)Nz<o>text</o>r)	rrHrRrAr�r�	TEXT_NODErNr5)r&r
rrr
r
r�testBug0777884Es
zMinidomTest.testBug0777884cCs>td�}|j}d|jd_|��|�|jdjdud�dS)Nz<o><i/>t</o>r�rNrjz)Final child's .nextSibling should be None)rrHrRryrNr(r[�r&r
r*r
r
r�testBug1433694Ms�zMinidomTest.testBug1433694cCsjtd�}|j}|j\}}}|�|j|uo,|jduo,|j|uo,|j|uo,|jduo,|j|ud�|��dS)Nz<doc><?pi?>text?<elm/></doc>�testSiblings)rrHrRr(r[rZr5)r&r
r\r�rrZelmr
r
rr_Us����
�zMinidomTest.testSiblingscCsrtd�}|j}|jd}|j\}}|jd}|�|j|uo0|j|uo0|j|uo0|j|uo0|j|ud�|��dS)Nz3<doc><elm1><elm2/><elm2><elm3/></elm2></elm1></doc>r�testParents)rrHrRr(rr5)r&r
r\Zelm1Zelm2aZelm2bZelm3r
r
rr`cs"�


���
�zMinidomTest.testParentscCs�td�}|j}|d}|�|d|�d�uo>|�d�duo>|j�d�|jduo>|j�d�|jduo>|j�d�j�d�dud�|��dS)Nz<doc><e/><e/></doc>rrNztest NodeList.item())rrRr(rr5)r&r
�childrenZdocelemr
r
r�testNodeListItemrs����zMinidomTest.testNodeListItemcCs�td�}|�|��d�|�|�d�d�|�|�d�d�|�|�d�d�|�|�d	�d
�d	��tjdkrG|�ttd�|�ttd
�n|�ttd�|�	�dS)N�<foo>&#x20ac;</foo>�$<?xml version="1.0" ?><foo>€</foo>rs4<?xml version="1.0" encoding="utf-8"?><foo>€</foo>ziso-8859-15s8<?xml version="1.0" encoding="iso-8859-15"?><foo>�</foo>rs;<?xml version="1.0" encoding="us-ascii"?><foo>&#8364;</foo>zutf-16u5<?xml version="1.0" encoding="utf-16"?><foo>€</foo>�rMrQrWs<fran�ais></fran�ais>s.<franais>Comment �a va ? Tr�s bien ?</franais>s0<fran�ais>Comment �a va ? Tr�s bien ?</fran�ais>)
rrArY�encode�pyexpat�version_inforsr	�UnicodeDecodeErrorr5r/r
r
r�
testEncodings~s8
�����
���zMinidomTest.testEncodingscCsttd�}|�|��d�|�|jdd�d�|�|jdd�d�|�|jdd�d�|�|�dd�d	�|��dS)
Nrcrd)Z
standaloneTu4<?xml version="1.0" standalone="yes"?><foo>€</foo>Fu3<?xml version="1.0" standalone="no"?><foo>€</foo>rsE<?xml version="1.0" encoding="utf-8" standalone="yes"?><foo>€</foo>)rrArYr5r/r
r
r�testStandalone�s"
�����zMinidomTest.testStandalonec@seZdZdZdd�ZdS)zMinidomTest.UserDataHandlerrcCs*|�||d|�|�|dd�d|_dSr2)rF�calledr?r
r
rr@�s
z"MinidomTest.UserDataHandler.handleN)rArBrCrlr@r
r
r
rrG�srGcCs$t�}|�d�}|�|�d�du�|�ddd�|�|�d�du�|�ddd�|�ddd�|�|�d�dk�|�|�d�dk�|�ddd�|�|�d�du�|�|�d�dk�|��}|�dd|�|�d�}|�|jo�|�d�duo�|�d�dk�|��|��|��dS)Nr�r`�rP�
rN)	rrSr(ZgetUserDatarFrGr	rlr5)r&r�nrH�cr
r
r�testUserData�s.


��zMinidomTest.testUserDatacCs@|�tjj|j|dd�td�}|�tjj|j|tjjd�dS)N�http://xml.python.org/nsz	xmlns:foor_r`)rsrr�NamespaceErr�
renameNoderZWrongDocumentErrr�)r&r
r*r�r
r
r� checkRenameNodeSharedConstraints�s��z,MinidomTest.checkRenameNodeSharedConstraintscCsLtd�}|j}|j}|jd}|�|tjjd�}|�|jdko[|j	dko[|j
duo[|jtjjko[|jduo[|j
dko[|�d�duo[|�d��|�o[|d�|�o[|j�|�o[|j�|��|�|dd�}|�|jdko�|j	dko�|j
dko�|jdko�|jduo�|j
dko�|�d�duo�|�d�duo�|�d��|�o�|�dd��|�o�|d�|�o�|d�|��|�|dd	�}|�|jd	k�o!|j	d	k�o!|j
d
k�o!|jdk�o!|jdk�o!|j
dk�o!|�d�du�o!|�d�du�o!|�d�du�o!|�dd�du�o!|�d	��|��o!|�dd
��|��o!|d	�|��o!|d�|��|�|tjjd
�}|�|jd
k�o�|j	d
k�o�|j
du�o�|jtjjk�o�|jdu�o�|j
dk�o�|�d�du�o�|�d�du�o�|�d�du�o�|�d	�du�o�|�dd�du�o�|�d
��|��o�|d
�|��|�tjj|j|dd�|�||�|��dS)Nz<doc a='v'/>r{r��vrrrp)rrrp�http://xml.python.org/ns2zp:dr��p)rwr�r�Zxmlns)rrHrurtrrr�r(rBrlr>r=r?rxr�r�r rwr�rsrsrur5)r&r
r]ZattrmaprDr
r
r�testRenameAttribute�s�
��������
	�

�
��������	������������	����������������	�
����
��zMinidomTest.testRenameAttributecCs~td�}|j}|�|tjjd�}|�|jdko2|jdko2|j	duo2|j
tjjko2|jduo2|j�
|��|�|dd�}|�|jdko[|jdko[|j	dko[|j
dko[|jduo[|j�
|��|�|dd�}|�|jdko�|jdko�|j	dko�|j
dko�|jdko�|j�
|��|�|tjjd	�}|�|jd	ko�|jd	ko�|j	duo�|j
tjjko�|jduo�|j�
|��|�||�|��dS)
Nr_r{rrr�rwzp:crprxr�)rrHrtrrr�r(r�rlr>r=r?r r�rur5r�r
r
r�testRenameElementsh����
�����
�����
�����
�zMinidomTest.testRenameElementcCsLtjj���tjjdd�}|�d�}|�tjj|j	|tjjd�|�
�dS)Nr��commentr`)rrrrrr�rkrsr$rtr5r]r
r
r�testRenameOtherHs
�
�zMinidomTest.testRenameOthercCs:td�}|j}|jd}|�|jtj�|�|d�|�|�	d��|�|d�|�
|�d�|�|�|d�|�d�}|�|�|�	d	�}|�|�|�|d�|�|d	�|�
d
�}|�||�|}|�|d�|�|d	�|�dd�}|�||�|}|�|d�|�|d	�|�|�|�|d
�|�|d
�dS)Nz<doc>a</doc>rr{r��abrp�cabr{r�rY�y�zZcabd)rrHrRrAr�rr[r-rbrarT�createCDATASectionrkrSrp�createProcessingInstruction�removeChild)r&r
r]rr�splitter�text2rYr
r
r�
testWholeTextRs8






zMinidomTest.testWholeTextcCsHtd�}|j}|j}|�|j|ud�|�||�|�|j|ud�dS)Nz<doc><e/></doc>zBefore replaceChild()zAfter replaceChild())rrHrWr(rrp)r&r
r]r�r
r
r�testPatch1094164vszMinidomTest.testPatch1094164cCs�dd�}|�\}}}}}|�d�}|�|d�|�|d�|�t|j�dk�|�\}}}}}|�d�}|�|d�|�|d�|�t|j�dk�|�\}}}}}|�d�}|�|d�|�|duoit|j�d	k�dS)
NcSsRtd�}|j}|j}|j}|j}|�|�d�|�|�|�d�|�|||||fS)Nz<doc>a<e/>d</doc>r�rp)rrHrWrXr[rTrar�)r
r]�text1r�r�r
r
r�setup�sz/MinidomTest.testReplaceWholeText.<locals>.setupznew contentr�rOr~rWr�rM)ZreplaceWholeTextr-r(rUrR)r&r�r
r]r�r�r�rrr
r
r�testReplaceWholeTexts"



�z MinidomTest.testReplaceWholeTextcCsvtd�}|j}|j}|�|jduo|jtjjk�d�	�}|D]}|�
|�}|j}|�t|d�o6|jtjjk�qdS)Nal<!DOCTYPE doc [
  <!ENTITY e1 SYSTEM 'http://xml.python.org/e1'>
  <!ENTITY e2 SYSTEM 'http://xml.python.org/e2'>
  <!ATTLIST doc id   ID       #IMPLIED 
                ref  IDREF    #IMPLIED 
                refs IDREFS   #IMPLIED 
                enum (a|b)    #IMPLIED 
                ent  ENTITY   #IMPLIED 
                ents ENTITIES #IMPLIED 
                nm   NMTOKEN  #IMPLIED 
                nms  NMTOKENS #IMPLIED 
                text CDATA    #IMPLIED 
    >
]><doc id='name' notid='name' text='splat!' enum='b'       ref='name' refs='name name' ent='e1' ents='e1 e2'       nm='123' nms='123 abc' />z+id notid text enum ref refs ent ents nm nmsrB)rrHZ
schemaTyper(rB�	namespacerrr��splitr��hasattr)r&r
r]r,�namesrBr{r
r
r�testSchemaType�s ��
��zMinidomTest.testSchemaTypecCs6td�}|j}|�d�}|�d�}|�|�d�duo!|jo!|j�|�d�|�|�|�d��o8|jo8|j�|�d�|�|�|�d��oV|�|�d��oV|joV|j�|�d�}d|_	|�
|�|�|�d�duo�|�|�d��o�|jo�|jo�|j�|�|tj
jd�|�|�|�d��o�|j�dS)Nz<doc a1='v' a2='w'/>r�r�rv�w�an)rrHr�r(�getElementByIdr�r�r�ZcreateAttributerx�setAttributeNodertrrr�)r&r
r�r�r��a3r
r
r�testSetIdAttribute�sN

��
��
���

�����zMinidomTest.testSetIdAttributecCspd}d}td|d|d�}|j}|�|d�}|�|d�}|�|�d�duo/|jo/|j�|�|d�|�|�|�d��oG|joG|j�|�|d�|�|�|�d��of|�|�d	��of|jof|j�|�|d�}d|_	|�
|�|�|�|�d	���|�|j�|�|j�|�|j�|�|�d�du�|�|tj
jd
�|�|�|�d	��o�|j�dS�Nzhttp://xml.python.org/ns1rwz<doc xmlns:ns1='z
' xmlns:ns2='z' ns1:a1='v' ns2:a2='w'/>r�r�rvr�r�)rrHr�r(r�r�ZsetIdAttributeNSr��createAttributeNSrxr�rtrrr��r&ZNS1ZNS2r
r�r�r�r�r
r
r�testSetIdAttributeNS�sZ�����������
�z MinidomTest.testSetIdAttributeNScCsld}d}td|d|d�}|j}|�|d�}|�|d�}|�|�d�duo/|jo/|j�|�|�|�|�|�d��oF|joF|j�|�|�|�|�|�d��od|�|�d	��od|jod|j�|�|d�}d|_	|�
|�|�|�|�d	���|�|j�|�|j�|�|j�|�|�d�du�|�|tj
jd
�|�|�|�d	��o�|j�dSr�)rrHr�r(r�r�ZsetIdAttributeNoder�r�rxr�rtrrr�r�r
r
r�testSetIdAttributeNodesZ������
��
���
�z"MinidomTest.testSetIdAttributeNodecCs||fg}|�r	|��\}}|�|j|j�|�t|j�t|j��|�|j|j�|�|�|��|�|�|��|jtj	kr�t|j
�t|j
�t|j�t|j�|�t|j
�t|j
��|�t|j�t|j��tt|j��D]-}|j�
|�}|j�
|�}|�|j|j�|�|j|j�|�|j|j�|�||f�qstt|j
��D]-}|j
�
|�}	|j
�
|�}
|�|	j|
j�|�|	j|
j�|�|	j|
j�|�|	|
f�q�|jtjkr�|�|j�|��|�|j�|��tt|j��D]}|�|j||j|f�q�|sdSdSr$)�poprAr�rUrRrlr.r�rrrrrrrBrrrrZ
DOCUMENT_NODEr%r )r&r
r��stackZn1Zn2rZno1Zno2rrr
r
r�assert_recursive_equal$sF




�z"MinidomTest.assert_recursive_equalcCsDtt�}tdtjd�D]}t�||�}t�|�}|�||�qdS)NrMrN)r�sampler�pickle�HIGHEST_PROTOCOL�dumps�loadsr�)r&r
�protor+r�r
r
r�testPickledDocumentIs
�zMinidomTest.testPickledDocumentcCs"tt�}t�|�}|�||�dSr$)rr��copy�deepcopyr�rr
r
r�testDeepcopiedDocumentPs
z"MinidomTest.testDeepcopiedDocumentcCs(t�}|�|�d��|�t|j�dS)Nzfoo--bar)rrbrkrs�
ValueErrorrYr/r
r
r�(testSerializeCommentNodeWithDoubleHyphenUsz4MinidomTest.testSerializeCommentNodeWithDoubleHyphencCs,td�}t|���}|�|jtjjk�dS)Nz$<element xmlns=''>
<foo/>
</element>)rrYr(r=rrr�rr
r
r�testEmptyXMLNSValue[szMinidomTest.testEmptyXMLNSValuecCsVtjdkr|�td�}n|�td�}|�
td�Wd�dS1s$wYdS)Nrezsyntax errorzUnsupported syntaxzE<element xmlns:abc="http:abc.com/de f g/hi/j k"><abc:foo /></element>)rgrhZassertRaisesRegexr	r�r)r&�contextr
r
r�!testExceptionOnSpacesInXMLNSValueas

"�z-MinidomTest.testExceptionOnSpacesInXMLNSValuecCsftt�}|j�d�d}|�tjj|j|�t	|j
�}|�|j
d�t	|j
�}|�||dk�dS)NZTITLErrN)rr4rHrGrsrrr�r�rUrRr%)r&r
Z	title_tagZnum_children_beforeZnum_children_afterr
r
r�testDocRemoveChildjs

zMinidomTest.testDocRemoveChildcCstt�}|�dd�}d|_dS)Nrr�Zcrash)rr4r�ry)r&r
r�r
r
r�"testProcessingInstructionNameErrorss
z.MinidomTest.testProcessingInstructionNameErrorcCs2d}t|�}t��}|�|�|�|��|�dS�N�E<?xml version="1.0" ?><curriculum status="public" company="example"/>)r�io�StringIOZwritexmlrA�getvalue)r&�xml_strr
�outputr
r
r�test_minidom_attribute_orderzs

z(MinidomTest.test_minidom_attribute_ordercCs d}t|�}|�|��|�dSr�)rrArY�r&r�r
r
r
r�"test_toxml_with_attributes_ordered�sz.MinidomTest.test_toxml_with_attributes_orderedcC� d}t|�}|�|��d�dS)Nr�zG<?xml version="1.0" ?>
<curriculum status="public" company="example"/>
�rrAr�r�r
r
r�(test_toprettyxml_with_attributes_ordered��

�z4MinidomTest.test_toprettyxml_with_attributes_orderedcCr�)N�C<?xml version="1.0" ?><root><node><![CDATA[</data>]]></node></root>zH<?xml version="1.0" ?>
<root>
	<node><![CDATA[</data>]]></node>
</root>
r�r�r
r
r�test_toprettyxml_with_cdata�r�z'MinidomTest.test_toprettyxml_with_cdatacCsLd}t|�}|�|�d�djd�t|���}|�|�d�djd�dS)Nr�r*rz</data>)rr-rGrWr�)r&r�Zdom1r�r
r
r�test_cdata_parsing�s
zMinidomTest.test_cdata_parsingN)r#)�rArBrCr(r-r0r9r;rErFrJr^rgrirnrorqrvr|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrr"r#r'r)r+r0r3r4r5r7r8r9r;rIrJrPrQrSrUrVrXrZr\r^r_r`rbrjrkrGrqruryrzr|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rr"7s+
		&
		
		"/?M+
$	!$$%			r"�__main__r$)r�r�r�r'rZunittestrgZxml.dom.minidomrrrrrrrZxml.parsers.expatr	Zfindfiler4r�rrr!ZTestCaser"rA�mainr
r
r
r�<module>s>
r�