o
    HXīh= ć                   @   sĘ   d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZ d dlmZ d dlmZ ejdddZd	Zdd
dZdd Zdd ZG dd dejZedkrae ”  dS dS )é    N)Śsupport)ŚparseŚAttrŚNodeŚDocumentŚparseString)ŚgetDOMImplementation)Ś
ExpatErrorztest.xmlZxmltestdata)Zsubdira  <?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>c                 C   s   t   d d| ”S )NŚdoc)r   ŚcreateDocument)Śdoctype© r   ś;/opt/python-3.10.19/usr/lib/python3.10/test/test_minidom.pyŚcreate_doc_without_doctype   ó   r   c                  C   sx   t   dd d ”} g | j_g | j_tjj dd d”}| jj 	|” tjj 
dd dd”}d|_d|_d|_| jj 	|” | S )	Nr
   zmy-notationz"http://xml.python.org/notations/myz	my-entityz!http://xml.python.org/entities/myz1.0śutf-8śus-ascii)r   ZcreateDocumentTypeŚentitiesZ_seqŚ	notationsŚxmlŚdomŚminidomZNotationŚappendZEntityŚversionŚencodingŚactualEncoding)r   ZnotationŚentityr   r   r   Ścreate_nonempty_doctype    s    ’žr   c                  C   s.   t  } t| }|| j d”_|| j d”_|S ©Nr   )r   r   r   ŚitemŚownerDocumentr   )r   r
   r   r   r   Ścreate_doc_with_doctype0   s
   r!   c                   @   sÄ  e Zd Zd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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<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Ę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é ZvG dźdė 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’ 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 (   ŚMinidomTestŚTestc                 C   s   |   ||” d S ©N)Ś
assertTrue)ŚselfŚtestZtestnamer   r   r   Śconfirm8   r   zMinidomTest.confirmc                 C   s"   |j }|  ||kd||f ” d S )Nzlooking for %r, found %r)Ś	wholeTextr(   )r&   ŚnodeŚsŚtr   r   r   ŚcheckWholeText;   s   zMinidomTest.checkWholeTextc                 C   s"   t  }|  |j” |  t j” d S r$   )r   ŚassertFalseZasync_©r&   r
   r   r   r   ŚtestDocumentAsyncAttr?   s   z!MinidomTest.testDocumentAsyncAttrc                 C   sP   t td}t|}| ”  |  t|t” W d    d S 1 s!w   Y  d S )NŚrb©ŚopenŚtstfiler   Śunlinkr(   Ś
isinstancer   ©r&   Śfiler   r   r   r   ŚtestParseFromBinaryFileD   s
   "żz#MinidomTest.testParseFromBinaryFilec                 C   sT   t tddd}t|}| ”  |  t|t” W d    d S 1 s#w   Y  d S )NŚrz
iso-8859-1)r   r2   r7   r   r   r   ŚtestParseFromTextFileJ   s
   "żz!MinidomTest.testParseFromTextFilec                 C   sJ   t dddd}|  |jd” |  |jd” |  |jd” |  |jd” d S )NŚqNameŚnamespaceURIŚ	localNameŚprefix©r   ŚassertEqualŚnamer=   r?   r>   ©r&   Śattrr   r   r   ŚtestAttrModeSetsParamsAsAttrsP   s
   z)MinidomTest.testAttrModeSetsParamsAsAttrsc                 C   sL   t ddd d}|  |jd” |  |jd” |  |jd” |  |j|j” d S )Nr<   r=   r?   r@   rC   r   r   r   Ś testAttrModeSetsNonOptionalAttrsW   s
   z,MinidomTest.testAttrModeSetsNonOptionalAttrsc                 C   s0   t t}|  | d”|j d”k” | ”  d S )NZLI)r   r4   r(   ŚgetElementsByTagNameŚdocumentElementr5   ©r&   r   r   r   r   ŚtestGetElementsByTagName^   s
   
’z$MinidomTest.testGetElementsByTagNamec                 C   są  t d}|j}|jd }| d”}| ||” |  t|jdkoS|jjdkoS|jd |u oS|j d”|u oS|jd |u oS|j d”|u oS|j	|u oS|j
|u oS| ” dkd” | d”}| |d ” |  t|jdko|jjdko|jd |u o|j d”|u o|jd |u o|j d”|u o|j
|u o|j|u o| ” d	kd” | d
”}| ||” |  t|jdkoē|jjdkoē|jd |u oē|j d”|u oē|jd |u oē|j d”|u oē|j|u oē|j|u oē| ” dkd” | ”  d S )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>)r   rH   Ś
childNodesŚcreateElementŚinsertBeforer(   ŚlenŚlengthr   Ś
firstChildŚ	lastChildŚtoxmlŚpreviousSiblingŚnextSiblingr5   )r&   r   ŚrootŚelemZnelemZnelem2r   r   r   ŚtestInsertBefored   s   


’žżüūśł
÷


’žżüūśł
÷


’žżüūśł’özMinidomTest.testInsertBeforec                 C   sr   t d}| d”}| d”}| d”}| d”}|j |” | ” }| |” | |” | |” ||||||fS )Nś<doc/>ZoriginalŚfoorP   Zbat)r   ŚcreateTextNoderH   ŚappendChildZcreateDocumentFragment©r&   r   ZorigŚc1Śc2Zc3Śfragr   r   r   Ś_create_fragment_test_nodes   s   






z'MinidomTest._create_fragment_test_nodesc                 C   sØ   |   ” \}}}}}}|j |d ” |  t|jj||||fkd” | ”  | ”  |   ” \}}}}}}|j ||” |  t|jj||||fkd” | ”  | ”  d S )NzinsertBefore(<fragment>, None)zinsertBefore(<fragment>, orig))rg   rH   rT   r(   ŚtuplerR   r5   rc   r   r   r   ŚtestInsertBeforeFragment   s$   
’ž
’žz$MinidomTest.testInsertBeforeFragmentc                 C   sV   t t}|j | d”” |  |jjd jdk” |  |jjd jdk” | 	”  d S )NZHelloé’’’’z#comment)
r   r4   rH   rb   ŚcreateCommentr(   rR   ŚnodeNameŚdatar5   rI   r   r   r   ŚtestAppendChild­   s
   zMinidomTest.testAppendChildc                 C   sT   |   ” \}}}}}}|j |” |  t|jj||||fkd” | ”  | ”  d S )NzappendChild(<fragment>))rg   rH   rb   r(   rh   rR   r5   rc   r   r   r   ŚtestAppendChildFragment“   s   
’žz#MinidomTest.testAppendChildFragmentc                 C   s\   |   ” \}}}}}}|j ||” | ”  |  t|jj|||fkd” | ”  | ”  d S )NzreplaceChild(<fragment>))rg   rH   ŚreplaceChildr5   r(   rh   rR   rc   r   r   r   ŚtestReplaceChildFragment½   s   ’z$MinidomTest.testReplaceChildFragmentc                 C   sØ   t  }| d”}| d”}|  tjj|j|” | |” |  tjj|j||” |  tjj|j	||” |j
}|  tjj|j|” |  tjj|j|” | |” | ”  d S )NrL   Śtext)r   rS   ra   ŚassertRaisesr   r   ŚHierarchyRequestErrrb   rT   rp   Ś
attributesZsetNamedItemZsetNamedItemNSr5   )r&   r   r]   rr   Znodemapr   r   r   ŚtestLegalChildrenĘ   s(   


’’’’
zMinidomTest.testLegalChildrenc                 C   s   t  }| d”}|j}d|d< | d”}|  |j|u d” |  |j|u d” |  |jdkd” |  |jdkd” | 	”  | 	”  d S )	NrL   rP   r`   r   z-NamedNodeMap.__setitem__() sets ownerDocumentz,NamedNodeMap.__setitem__() sets ownerElementz%NamedNodeMap.__setitem__() sets valuez)NamedNodeMap.__setitem__() sets nodeValue)
r   rS   ru   r   r(   r    ŚownerElementŚvalueŚ	nodeValuer5   )r&   r   r]   ŚattrsŚar   r   r   ŚtestNamedNodeMapSetItemŪ   s&   

’’’’z#MinidomTest.testNamedNodeMapSetItemc                 C   sB   t t}|  |” | | d”” |  |jd j ” | ”  d S )Nr`   rj   )r   r4   r(   rb   rk   rR   r5   rI   r   r   r   ŚtestNonZeroģ   s
   
zMinidomTest.testNonZeroc                 C   s,   t t}|  |j” | ”  |  |j” d S r$   )r   r4   r%   rR   r5   r.   rI   r   r   r   Ś
testUnlinkó   s   zMinidomTest.testUnlinkc                 C   sD   t t}|  |j” W d    n1 sw   Y  |  |j” d S r$   )r   r4   r%   rR   r.   rI   r   r   r   ŚtestContextł   s   
’zMinidomTest.testContextc                 C   s.   t  }| | d”” |  |j” | ”  d S ©NŚabc)r   rb   rS   r(   rH   r5   rI   r   r   r   ŚtestElementž   s   zMinidomTest.testElementc                 C   sj   t d}|j}| dd” |  | ” dkd” | d”}|  |j|u d” |  |j|ju d” | ”  d S )Nś<abc/>ŚspamŚjam2ś<abc spam="jam2"/>ŚtestAAAz!setAttribute() sets ownerDocumentz setAttribute() sets ownerElement)	r   rH   ŚsetAttributer(   rY   ŚgetAttributeNoder    rw   r5   )r&   r   Śelr{   r   r   r   r     s   
’’zMinidomTest.testAAAc                 C   sF   t d}|j}| dd” | dd” |  | ” dkd” | ”  d S )Nr   r   Śjamr   r   ŚtestAAB)r   rH   r   r(   rY   r5   ©r&   r   r   r   r   r   r     s   zMinidomTest.testAABc                 C   sģ   t  }| | d””}| dd” |  | d”dk” |  |jd jdk” | dd” |  | d”dk” |  |jd jdk” |  t|jdk” | dd” |  | d”dk” |  |jd jdk” |  t|jdk” | 	”  d S )Nr   ŚdefŚghiZjklZmnorM   Znewval)
r   rb   rS   r   r(   ŚgetAttributeru   rx   rU   r5   ©r&   r   Śchildr   r   r   ŚtestAddAttr  s   zMinidomTest.testAddAttrc                 C   sr   t  }| | d””}|  t|jdk” | dd” |  t|jdk” |jd= |  t|jdk” | ”  d S )Nr   r   r   r   rN   )r   rb   rS   r(   rU   ru   r   r5   r   r   r   r   ŚtestDeleteAttr-  s   zMinidomTest.testDeleteAttrc                 C   st   t  }| | d””}| dd” |  t|jdk” |  tj	j
|jd” | d” |  t|jdk” | ”  d S )Nr   r   r   rN   r`   r   )r   rb   rS   r   r(   rU   ru   rs   r   r   ŚNotFoundErrZremoveAttributer5   r   r   r   r   ŚtestRemoveAttr8  s   
zMinidomTest.testRemoveAttrc                 C   s   t  }| | dd””}| ddd” | ddd” |  tjj|jdd” |  	t
|jdk” | dd” |  	t
|jd	k” | ”  d S )
Nśhttp://www.python.orgś
python:abcśhttp://www.w3.orgśxmlns:pythonzpython:abcattrr`   rM   ZabcattrrN   )r   rb   ŚcreateElementNSŚsetAttributeNSrs   r   r   r   ZremoveAttributeNSr(   rU   ru   r5   r   r   r   r   ŚtestRemoveAttrNSC  s   
’’’zMinidomTest.testRemoveAttrNSc                 C   sČ   t  }| | d””}| dd” |  t|jdk” | d”}|  t	j
j|jd ” |  || |”” |  t|jdkoB| d”d u ” t  }| | d””}| d”}|  t	j
j|j|” | ”  d S )Nr`   r   r   rN   r   )r   rb   rS   r   r(   rU   ru   r   rs   r   r   r   ZremoveAttributeNodeŚassertIsr5   )r&   r   r   r*   Śdom2Śchild2Znode2r   r   r   ŚtestRemoveAttributeNodeQ  s&   
’’
’z#MinidomTest.testRemoveAttributeNodec                 C   s6   t  }| | d””}| dd” |  | d”” d S )Nr`   r   r   )r   rb   rS   r   r(   ZhasAttributer   r   r   r   ŚtestHasAttributec  s   zMinidomTest.testHasAttributec                 C   sģ  t d}|j}| dd” |  t|jdk” | dd” | d” |  t|jdkoG|jd jdkoG|jd jdkoG| 	d”dkoG| 
d”j” d|jd< |  t|jdkos|jd jdkos|jd jdkos| 	d”dkos|jd j” | dd” |  t|jdko±|jd jdko±|jd jdko±| 	d”dko±|jd jdko±|jd jdko±| 	d”dk” d	|jd< |  t|jdkoī|jd jdkoī|jd jdkoī| 	d”dkoī|jd jd	koī|jd jd	koī| 	d”d	k” | ”  d S )
Nr   r   r   rN   ZbamZhamZspam2rM   Zbam2)r   rH   r   r(   rU   ru   ŚsetIdAttributerx   ry   r   r   ŚisIdr5   r   r   r   r   ŚtestChangeAttri  sl   
’žż
ü
’žż
ü’žżüūś
’žżüūśzMinidomTest.testChangeAttrc                 C   ó   d S r$   r   ©r&   r   r   r   ŚtestGetAttrList  ó   zMinidomTest.testGetAttrListc                 C   r¦   r$   r   r§   r   r   r   ŚtestGetAttrValues  r©   zMinidomTest.testGetAttrValuesc                 C   r¦   r$   r   r§   r   r   r   ŚtestGetAttrLength  r©   zMinidomTest.testGetAttrLengthc                 C   s.   t  }| | dd””}|  | d”d” d S )Nr   r   ŚmissingŚ )r   rb   r   rA   r   r   r   r   r   ŚtestGetAttribute  s
   
’zMinidomTest.testGetAttributec                 C   sv   t  }| | dd””}| ddd” |  | dd”d” |  | dd”d” | | d””}|  | dd	”d” d S )
Nr   r   r   r   ZpythonŚotherr­   r   r¬   )r   rb   r   r   rA   ZgetAttributeNSrS   )r&   r   r   r    r   r   r   ŚtestGetAttributeNS  s"   
’’’’’zMinidomTest.testGetAttributeNSc                 C   r¦   r$   r   r§   r   r   r   ŚtestGetAttributeNode¬  ó    z MinidomTest.testGetAttributeNodec                 C   s|   d}t |}| dd”}|  t|dko6|d jdko6|d jdko6|d jdko6|d jdko6|d jdk” | 	”  d S )NzZ<foo xmlns:minidom='http://pyxml.sf.net/minidom'>
        <minidom:myelem/>
        </foo>zhttp://pyxml.sf.net/minidomZmyelemrN   r   r   zminidom:myelem)
r   ŚgetElementsByTagNameNSr(   rU   r=   r>   r?   ŚtagNamerl   r5   )r&   Śdr   Zelemsr   r   r   ŚtestGetElementsByTagNameNS®  s"   ’’žżüūz&MinidomTest.testGetElementsByTagNameNSc                 C   s"   |  ||”}|  t|dk” d S r   )r³   r(   rU   )r&   r
   ZnsuriZlnameZnodelistr   r   r   Ś5get_empty_nodelist_from_elements_by_tagName_ns_helper½  s   zAMinidomTest.get_empty_nodelist_from_elements_by_tagName_ns_helperc                 C   sh   t d}|  |dd” |  |dd” |  |dd” t d}|  |dd” |  |dd” |  |d	d
” d S )Nr_   z"http://xml.python.org/namespaces/aZ	localnameŚ*Zsplatz3<doc xmlns="http://xml.python.org/splat"><e/></doc>zhttp://xml.python.org/splatz	not-therez#http://somewhere.else.net/not-thereŚe)r   r·   r/   r   r   r   Ś+testGetEmptyNodeListFromElementsByTagNameNSĀ  s(   ’’’’’’z7MinidomTest.testGetEmptyNodeListFromElementsByTagNameNSc                 C   ó@   t  }| | d””}t|}t|}|  ||k” | ”  d S r   ©r   rb   rS   ŚreprŚstrr(   r5   ©r&   r   r   Zstring1Zstring2r   r   r   ŚtestElementReprAndStrÓ  ó   z!MinidomTest.testElementReprAndStrc                 C   r»   r   r¼   ræ   r   r   r   ŚtestElementReprAndStrUnicodeŪ  rĮ   z(MinidomTest.testElementReprAndStrUnicodec                 C   sP   t  }| | dd””}t|}t|}|  ||k” |  d|v ” | ”  d S )Nzhttp://www.slashdot.orgz	slash:abc)r   rb   r   r½   r¾   r(   r5   ræ   r   r   r   ŚtestElementReprAndStrUnicodeNSć  s   
’z*MinidomTest.testElementReprAndStrUnicodeNSc                 C   sD   t  }| | d””}| dd”}|  t|t|k” | ”  d S )Nr   r   )r   rb   rS   r   r(   r¾   r½   r5   )r&   r   r   r*   r   r   r   ŚtestAttributeReprķ  s
   zMinidomTest.testAttributeReprc                 C   r¦   r$   r   r§   r   r   r   ŚtestTextNodeReprō  r²   zMinidomTest.testTextNodeReprc                 C   s.   d}t |}| ” }| ”  |  ||k” d S )Nz <?xml version="1.0" ?><a b="c"/>)r   rY   r5   r(   ©r&   r¾   r   Zdomstrr   r   r   ŚtestWriteXMLö  s
   zMinidomTest.testWriteXMLc                 C   s:   d}t |}|jdd}| ”  |  || dd”k” d S )Nz"<?xml version="1.0" ?>
<a b="c"/>
z
)ZnewlŚ
)r   Śtoprettyxmlr5   r(   ŚreplacerĘ   r   r   r   ŚtestAltNewlineż  s
   zMinidomTest.testAltNewlinec                 C   s   d}|   td ” |d ” |   td ” |d ” |   td ” |d ” |   td ” |d	 ” |   td
 ” |d ” d S )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>
)rA   r   rÉ   )r&   Śdeclr   r   r   Ś test_toprettyxml_with_text_nodes  s    ’’’’’z,MinidomTest.test_toprettyxml_with_text_nodesc                 C   sV   t  }| d”}| | d”” | | d”” | |” d}|  | ” |d ” d S )Nr]   ZTEXTrĢ   z<elem>
	TEXT
	TEXT
</elem>
)r   rS   rb   ra   rA   rÉ   )r&   r   r]   rĪ   r   r   r   Ś)test_toprettyxml_with_adjacent_text_nodes  s   


’z5MinidomTest.test_toprettyxml_with_adjacent_text_nodesc                 C   sV   dD ]&}t |}t | ” }|  | d”d jd  ” | d”d jd  ” ” qd S )N)rĶ   z<A><B>C</B></A>ŚBr   )r   rÉ   rA   rG   rR   rY   )r&   r¾   r   r   r   r   r   Ś/test_toprettyxml_preserves_content_of_text_node  s   žżz;MinidomTest.test_toprettyxml_preserves_content_of_text_nodec                 C   s   t d}|jj}|  |jdkoE|jdkoE|jdkoE|jtj	koE|j
d u oE| ”  oEt|jdkoE|jd u oE|jd u oE|jd u oE|jtjjk” d S )Nz<e><?mypi 	
 data 	
 ?></e>Zmypizdata 	
 r   )r   rH   rW   r(   Śtargetrm   rl   ŚnodeTyper   ŚPROCESSING_INSTRUCTION_NODEru   ŚhasChildNodesrU   rR   rX   r>   r=   r   r   ŚEMPTY_NAMESPACE)r&   r   Śpir   r   r   ŚtestProcessingInstruction&  s.   ’ž
żüūśłų	÷
öz%MinidomTest.testProcessingInstructionc                 C   r¦   r$   r   r§   r   r   r   ŚtestProcessingInstructionRepr5  r²   z)MinidomTest.testProcessingInstructionReprc                 C   r¦   r$   r   r§   r   r   r   ŚtestTextRepr7  r²   zMinidomTest.testTextReprc                 C   r¦   r$   r   r§   r   r   r   ŚtestWriteText9  r²   zMinidomTest.testWriteTextc                 C   r¦   r$   r   r§   r   r   r   ŚtestDocumentElement;  r²   zMinidomTest.testDocumentElementc                 C   s:   t d}| d”}|  tjj|j|” | ”  | ”  d S )Nr_   Śextra)r   rS   rs   r   r   rt   rb   r5   ©r&   r
   r]   r   r   r   ŚtestTooManyDocumentElements=  s
   
z'MinidomTest.testTooManyDocumentElementsc                 C   r¦   r$   r   r§   r   r   r   ŚtestCreateElementNSE  r²   zMinidomTest.testCreateElementNSc                 C   r¦   r$   r   r§   r   r   r   ŚtestCreateAttributeNSG  r²   z!MinidomTest.testCreateAttributeNSc                 C   r¦   r$   r   r§   r   r   r   Ś	testParseI  r²   zMinidomTest.testParsec                 C   r¦   r$   r   r§   r   r   r   ŚtestParseStringK  r²   zMinidomTest.testParseStringc                 C   r¦   r$   r   r§   r   r   r   ŚtestCommentM  r²   zMinidomTest.testCommentc                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrListItemO  r²   zMinidomTest.testAttrListItemc                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrListItemsQ  r²   zMinidomTest.testAttrListItemsc                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrListItemNSS  r²   zMinidomTest.testAttrListItemNSc                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrListKeysU  r²   zMinidomTest.testAttrListKeysc                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrListKeysNSW  r²   zMinidomTest.testAttrListKeysNSc                 C   sP   t d}|j}|j}| d”}| d”}|  | |”” |  tj	j
|jd” d S )Nz<doc a=''/>r{   )r   rH   ru   r   ZremoveNamedItemr(   Ś
isSameNoders   r   r   r   ©r&   r
   r¹   rz   Śa1Śa2r   r   r   ŚtestRemoveNamedItemY  s   

zMinidomTest.testRemoveNamedItemc                 C   sV   t d}|j}|j}| dd”}| dd”}|  | |”” |  tj	j
|jdd” d S )Nz.<doc xmlns:a='http://xml.python.org/' a:b=''/>zhttp://xml.python.org/Śb)r   rH   ru   ŚgetAttributeNodeNSZremoveNamedItemNSr(   rė   rs   r   r   r   rģ   r   r   r   ŚtestRemoveNamedItemNSb  s   ’z!MinidomTest.testRemoveNamedItemNSc                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrListValuesl  r²   zMinidomTest.testAttrListValuesc                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrListLengthn  r²   zMinidomTest.testAttrListLengthc                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrList__getitem__p  r²   z#MinidomTest.testAttrList__getitem__c                 C   r¦   r$   r   r§   r   r   r   ŚtestAttrList__setitem__r  r²   z#MinidomTest.testAttrList__setitem__c                 C   r¦   r$   r   r§   r   r   r   ŚtestSetAttrValueandNodeValuet  r²   z(MinidomTest.testSetAttrValueandNodeValuec                 C   r¦   r$   r   r§   r   r   r   ŚtestParseElementv  r²   zMinidomTest.testParseElementc                 C   r¦   r$   r   r§   r   r   r   ŚtestParseAttributesx  r²   zMinidomTest.testParseAttributesc                 C   r¦   r$   r   r§   r   r   r   ŚtestParseElementNamespacesz  r²   z&MinidomTest.testParseElementNamespacesc                 C   r¦   r$   r   r§   r   r   r   ŚtestParseAttributeNamespaces|  r²   z(MinidomTest.testParseAttributeNamespacesc                 C   r¦   r$   r   r§   r   r   r   ŚtestParseProcessingInstructions~  r²   z+MinidomTest.testParseProcessingInstructionsc                 C   r¦   r$   r   r§   r   r   r   ŚtestChildNodes  r²   zMinidomTest.testChildNodesc                 C   r¦   r$   r   r§   r   r   r   ŚtestFirstChild  r²   zMinidomTest.testFirstChildc                 C   s<   t d}|j}|  | ” ” t d}|j}|  | ” ” d S )NrK   r_   )r   rH   r%   rÖ   r.   )r&   r   r
   r   Śdoc2r   r   r   ŚtestHasChildNodes  s   zMinidomTest.testHasChildNodesc                 C   sĄ   |j }|j }t| ” }t| ” }| ”  | ”  |  ||kd” tt|D ]5}| |”}	| |”}
|  |	|
uoQ|	j|
jkoQ|	j	|
j	koQ|	j
|
j
koQ|	j|
jkd” |  |
j|u d” q(d S )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(   ŚrangerU   r   rx   ry   r=   r>   rw   )r&   Śe1Śe2r'   Zattrs1Zattrs2Zkeys1Zkeys2Śirķ   rī   r   r   r   Ś!_testCloneElementCopiesAttributes  s0   


’
ž
ż
ū’÷z-MinidomTest._testCloneElementCopiesAttributesc                 C   s^   t d}|j}| |”}|  ||d|rdpd ” d |_|_| dd” | dd	” ||fS )
Nz<doc attr='value'><foo/></doc>ZtestCloneElementZDeepZShallowZMODIFIEDrD   z	NEW VALUEZaddedZVALUE)r   rH   Ś	cloneNoder  r“   rl   r   )r&   Śdeepr   r\   Ścloner   r   r   Ś_setupCloneElement   s   
’zMinidomTest._setupCloneElementc                 C   óR   |   d”\}}|  t|jdko |jjdko |jd u o | ” dkd” | ”  d S )Nr   z<doc attr="value"/>ŚtestCloneElementShallow©r  r(   rU   rR   rV   Ś
parentNoderY   r5   ©r&   r   r  r   r   r   r  ¬  ó   
’ž
üz#MinidomTest.testCloneElementShallowc                 C   r  )NrN   z<doc attr="value"><foo/></doc>ŚtestCloneElementDeepr  r  r   r   r   r  µ  r  z MinidomTest.testCloneElementDeepc                 C   s&   t d}| d”}|  |d u d” d S )Nś<?xml version='1.0'?>
<!-- comment --><!DOCTYPE doc [
<!NOTATION notation SYSTEM 'http://xml.python.org/'>
]>
<doc attr='value'/>r   zFtestCloneDocumentShallow: shallow cloning of documents makes no sense!)r   r	  r(   ©r&   r
   r’   r   r   r   ŚtestCloneDocumentShallow¾  s
   

’z$MinidomTest.testCloneDocumentShallowc                 C   sā   t d}| d”}|  | |”p| |” d” |  t|jt|jkd” |  |jjtj	kd” |  |jj
 |”d” |  |j |j” d” |jd uro|  |jjtjkd” |  |jj
 |”” |  |j |j” ” d S d S )	Nr  rN   z4testCloneDocumentDeep: 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)r   r	  r(   rė   rU   rR   rH   rŌ   r   ZELEMENT_NODEr    r   ŚDOCUMENT_TYPE_NODEr  r   r   r   ŚtestCloneDocumentDeepŹ  s0   
’’’’’
’ūz!MinidomTest.testCloneDocumentDeepc                 C   sĄ  t  }| d”}|  |d uoV|j|jkoV|j|jkoV|j|jkoV|j|jkoVt|jt|jkoV|j 	t|j”d u oVt|j
t|j
koV|j
 	t|j
”d u oVt|jdk” tt|jD ]G}|j 	|”}|j 	|”}|  | |” o¤| |” o¤|j|jko¤|j|jko¤|j|jko¤|j|jko¤|j|jko¤|j|jko¤|j|jk” q_tt|j
D ]/}|j
 	|”}|j
 	|”}|  | |” oŪ| |” oŪ|j|jkoŪ|j|jkoŪ|j|jk” q®d S )NrN   r   )r   r	  r(   rl   rB   ŚpublicIdŚsystemIdrU   r   r   r   rR   r  rė   ŚnotationNamer   r   r   )r&   r   r  r  ZseZceZsnZcnr   r   r   ŚtestCloneDocumentTypeDeepOkć  sl   

’
ž
ż
üūśłų	÷

’
ž
ż
ü
ū
ś
ł
ų	
’
ž
ż
üżz'MinidomTest.testCloneDocumentTypeDeepOkc                 C   ó&   t  }|j d”}|  |d u d” d S )NrN   ŚtestCloneDocumentTypeDeepNotOk©r!   r   r	  r(   ©r&   r
   r  r   r   r   r    ó   z*MinidomTest.testCloneDocumentTypeDeepNotOkc                 C   s   t  }| d”}|  |d uoJ|j|jkoJ|j|jkoJ|j|jkoJ|j|jkoJt|jdkoJ|j 	d”d u oJt|j
dkoJ|j
 	d”d u oJt|jdk” d S r   )r   r	  r(   rl   rB   r  r  rU   r   r   r   rR   )r&   r   r  r   r   r   ŚtestCloneDocumentTypeShallowOk
  s*   

’
ž
ż
üūśłų	÷z*MinidomTest.testCloneDocumentTypeShallowOkc                 C   r  )Nr   Ś!testCloneDocumentTypeShallowNotOkr  r   r   r   r   r#    r!  z-MinidomTest.testCloneDocumentTypeShallowNotOkc                 C   s*   t d}t d}|  tjj|j||” d S )Nr_   )r   rs   r   r   ŚNotSupportedErrŚ
importNode)r&   r
  ŚtestNameZdoc1r’   r   r   r   Ścheck_import_document  s   z!MinidomTest.check_import_documentc                 C   ó   |   dd” d S )Nr   ŚtestImportDocumentShallow©r'  r§   r   r   r   r)  "  r   z%MinidomTest.testImportDocumentShallowc                 C   r(  )NrN   ŚtestImportDocumentDeepr*  r§   r   r   r   r+  %  r   z"MinidomTest.testImportDocumentDeepc                 C   ó(   t  }t }|  tjj|j|jd” d S r   ©r!   r   rs   r   r   r$  r%  r   ©r&   ŚsrcrÓ   r   r   r   ŚtestImportDocumentTypeShallow(  ó
   ’z)MinidomTest.testImportDocumentTypeShallowc                 C   r,  ©NrN   r-  r.  r   r   r   ŚtestImportDocumentTypeDeep.  r1  z&MinidomTest.testImportDocumentTypeDeepc                 C   s   t d}|j d”}|  |d ” | |”}|  | |” ” |  | |” ” |  |jd u |d ” |  |j |j”|d ” |  |j	|d ” d S )Nz<doc attr='value'/>rD   z: ownerElement should be Nonez: ownerDocument does not matchz.: cloned attribute must have specified == True)
r   rH   r   ZassertNotEqualr	  r(   rė   rw   r    Z	specified)r&   r
  r&  r
   rD   r  r   r   r   Ścheck_clone_attribute6  s   
’’’z!MinidomTest.check_clone_attributec                 C   r(  )Nr   ŚtestCloneAttributeShallow©r4  r§   r   r   r   r5  D  r   z%MinidomTest.testCloneAttributeShallowc                 C   r(  )NrN   ŚtestCloneAttributeDeepr6  r§   r   r   r   r7  G  r   z"MinidomTest.testCloneAttributeDeepc                 C   sJ   t d}|j}|  |jtj” | |”}|  |j|jko!|j	|j	k” d S )Nz<?target data?><doc/>)
r   rW   rA   rŌ   r   rÕ   r	  r(   rÓ   rm   )r&   r
  r&  r
   rŲ   r  r   r   r   Ścheck_clone_piJ  s   

’zMinidomTest.check_clone_pic                 C   r(  )Nr   ŚtestClonePIShallow©r8  r§   r   r   r   r9  R  r   zMinidomTest.testClonePIShallowc                 C   r(  )NrN   ŚtestClonePIDeepr:  r§   r   r   r   r;  U  r   zMinidomTest.testClonePIDeepc           
      C   s  t jj d ” ”}G dd d}| }|j}|jd }| dd|” |r?|jdd}|  	|j
jjd	” t jjj}|jjd }	n't |d
d ” |jdd}W d    n1 sWw   Y  t jjj}|jd }	|  	|j|” |  	|jd” |  	|jd” |  |j|” |  |j|	” d S )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                   @   s   e Zd Zdd ZdS )z4MinidomTest.check_clone_node_entity.<locals>.Handlerc                 S   s"   || _ || _|| _|| _|| _d S r$   )Ś	operationŚkeyrm   r/  Śdst©r&   r<  r=  rm   r/  r>  r   r   r   Śhandlee  s
   
z;MinidomTest.check_clone_node_entity.<locals>.Handler.handleN)Ś__name__Ś
__module__Ś__qualname__r@  r   r   r   r   ŚHandlerd  s    rD  Zsmiler=  rm   T)r
  u%   Don't let entities make you frown āŗr    )r   r   r   r   Śstripr   r   ŚsetUserDatar	  rA   rH   rW   r)   ŚUserDataHandlerZNODE_IMPORTEDr   Z	swap_attrZNODE_CLONEDr<  r=  rm   r   r/  r>  )
r&   Zclone_documentZdocumentrD  Śhandlerr   r   r  r<  r>  r   r   r   Ścheck_clone_node_entityX  s2   
ł	
’
’

z#MinidomTest.check_clone_node_entityc                 C   s   |   d” |   d” d S )NFT)rI  r§   r   r   r   ŚtestCloneNodeEntity  s   
zMinidomTest.testCloneNodeEntityc                 C   sī   t d}|j}| | d”” | | d”” |  t|jdko%|jjdkd” | ”  |  t|jdkoF|jjdkoF|j	|j
u oF|j	jdkd” | ”  t d}|j}| | d	”” | ”  |  t|jd
kon|jjd
kd” | ”  d S )Nr_   ŚfirstŚsecondrM   ztestNormalize -- preparationrN   ŚfirstsecondztestNormalize -- resultr­   r   z*testNormalize -- single empty node removed)r   rH   rb   ra   r(   rU   rR   rV   Ś	normalizerW   rX   rm   r5   ©r&   r
   r\   r   r   r   ŚtestNormalize  s6   
ž
’
ž
ü
žzMinidomTest.testNormalizec                 C   sā   t d}|j}| | d”” | | d”” | | d”” |  t|jdko-|jjdkd” | 	”  |  t|jdkoh|jjdkoh|j
jdkoh|j
|juoh|j
j|ju oh|j
jd u oh|jj|j
u oh|jjd u d	” | ”  d S )
Nr_   rK  rL  r  rO   z1testNormalizeCombineAndNextSibling -- preparationrM   rM  z-testNormalizeCombinedAndNextSibling -- result)r   rH   rb   ra   rS   r(   rU   rR   rV   rN  rW   rm   rX   r[   rZ   r5   rO  r   r   r   Ś"testNormalizeCombineAndNextSibling¤  s6   
ž
’
ž
żü
ūś
ų	z.MinidomTest.testNormalizeCombineAndNextSiblingc                 C   s¶   t d}|j}| | d”” | | d”” |  t|jdko%|jjdkd” | ”  |  t|jdkoR|jjdkoR|j	j
dkoR|j	|ju oR|j	jd u oR|j	jd u d” | ”  d S )Nr_   rK  r­   rM   z1testNormalizeDeleteWithPrevSibling -- preparationrN   z,testNormalizeDeleteWithPrevSibling -- result©r   rH   rb   ra   r(   rU   rR   rV   rN  rW   rm   rX   r[   rZ   r5   rO  r   r   r   Ś"testNormalizeDeleteWithPrevSibling¹  ó,   
ž
’
ž
ż
ü
śz.MinidomTest.testNormalizeDeleteWithPrevSiblingc                 C   s¶   t d}|j}| | d”” | | d”” |  t|jdko%|jjdkd” | ”  |  t|jdkoR|jjdkoR|j	j
dkoR|j	|ju oR|j	jd u oR|j	jd u d” | ”  d S )Nr_   r­   rL  rM   z1testNormalizeDeleteWithNextSibling -- preparationrN   z,testNormalizeDeleteWithNextSibling -- resultrR  rO  r   r   r   Ś"testNormalizeDeleteWithNextSiblingĖ  rT  z.MinidomTest.testNormalizeDeleteWithNextSiblingc                 C   sÖ   t d}|j}| | d”” | | d”” | | d”” |  t|jdko-|jjdkd” | 	”  |  t|jdkob|jjdkob|j
|juob|j
j|ju ob|j
jd u ob|jj|j
u ob|jjd u d” | ”  d S )Nr_   r  r­   rO   z1testNormalizeDeleteWithTwoSiblings -- preparationrM   z,testNormalizeDeleteWithTwoSiblings -- result)r   rH   rb   rS   ra   r(   rU   rR   rV   rN  rW   rX   r[   rZ   r5   rO  r   r   r   Ś)testNormalizeDeleteWithTwoNonTextSiblingsŻ  s2   
ž
’
žż
üū
łz5MinidomTest.testNormalizeDeleteWithTwoNonTextSiblingsc                 C   sę   t d}|j}| | d”” | | d”” | | d”” | | d”” | | d”” |  t|jdko=|jjdkd” | ”  |  t|jdkoj|jjdkoj|j	|j
u oj|j	jdkoj|j	jd u oj|j	jd u d	” | ”  d S )
Nr_   r­   rL  Zfourthé   z,testNormalizeDeleteAndCombine -- preparationrN   Zsecondfourthz'testNormalizeDeleteAndCombine -- result)r   rH   rb   ra   r(   rU   rR   rV   rN  rW   rX   rm   rZ   r[   r5   rO  r   r   r   ŚtestNormalizeDeleteAndCombineń  s2   
ž
’
ž
ż
ü
śz)MinidomTest.testNormalizeDeleteAndCombinec                 C   s  t d}|j}|jd  | d”” |jd  | d”” |jd jd  | d”” |jd  | d”” | | d”” |  t|jdko|jjdkot|jd jd	ko|jd jjd	kot|jd jdko|jd jjdkot|jd jd jd
ko|jd jd jjd
kd” | ”  |  t|jd
koß|jjd
koßt|jd jd
koß|jd jjd
koßt|jd jd
koß|jd jjd
koßt|jd jd jdkoß|jd jd jjdkd” |  |jd jd j	dko	|jd jd jd j	dko	|jd jd j	dkd” |  |jd jd j
d u o|jd jd j|jd jd u o|jd jd jd u o|jd jd j
|jd jd u o|jd jd j
d u o|jd jd j|jd jd u o|jd jd jd u o|jd jd j
|jd jd u d” | ”  d S )Nz)<doc><o><i/>t</o><o><o>t2</o>t3</o></doc>r   r­   ŚxrN   Zx2Zx3rO   rQ   rM   ztestNormalize2 -- preparationz$testNormalize2 -- childNodes lengthsZtxZt2x2Zt3x3z$testNormalize2 -- joined text fieldsz"testNormalize2 -- sibling pointers)r   rH   rR   rb   ra   r(   rU   rV   rN  rm   r[   rZ   r5   rO  r   r   r   ŚtestNormalizeRecursion  s   
’žżüūśų	
’žżüūśų	’ż’’ż’üś’ł	÷
’ōz"MinidomTest.testNormalizeRecursionc                 C   s8   t d}|jjd }|  |jtj” | ”  | ”  d S )Nz<o>text</o>r   )	r   rH   rR   rA   rŌ   r   Ś	TEXT_NODErN  r5   )r&   r
   rr   r   r   r   ŚtestBug0777884E  s
   zMinidomTest.testBug0777884c                 C   s>   t d}|j}d|jd _| ”  |  |jd jd u d” d S )Nz<o><i/>t</o>r­   rN   rj   z)Final child's .nextSibling should be None)r   rH   rR   ry   rN  r(   r[   ©r&   r
   r*   r   r   r   ŚtestBug1433694M  s   ’zMinidomTest.testBug1433694c                 C   sj   t d}|j}|j\}}}|  |j|u o,|jd u o,|j|u o,|j|u o,|jd u o,|j|u d” | ”  d S )Nz<doc><?pi?>text?<elm/></doc>ŚtestSiblings)r   rH   rR   r(   r[   rZ   r5   )r&   r
   r\   rŲ   rr   Zelmr   r   r   r_  U  s   ’žżü
ūzMinidomTest.testSiblingsc                 C   sr   t d}|j}|jd }|j\}}|jd }|  |j|u o0|j|u o0|j|u o0|j|u o0|j|u d” | ”  d S )Nz3<doc><elm1><elm2/><elm2><elm3/></elm2></elm1></doc>r   ŚtestParents)r   rH   rR   r(   r  r5   )r&   r
   r\   Zelm1Zelm2aZelm2bZelm3r   r   r   r`  c  s"   ’


’žż
üzMinidomTest.testParentsc                 C   s   t d}|j}|d }|  |d | d”u o>| d”d u o>|j d”|jd u o>|j d”|jd u o>|j d”j d”d u d” | ”  d S )Nz<doc><e/><e/></doc>r   rN   ztest NodeList.item())r   rR   r(   r   r5   )r&   r
   ŚchildrenZdocelemr   r   r   ŚtestNodeListItemr  s   ’žżūzMinidomTest.testNodeListItemc                 C   sØ   t d}|  | ” d” |  | d”d” |  | d”d” |  | d”d” |  | d	”d
 d	”” tjdkrG|  tt d” |  tt d” n|  tt d” | 	”  d S )Nś<foo>&#x20ac;</foo>õ$   <?xml version="1.0" ?><foo>ā¬</foo>r   s4   <?xml version="1.0" encoding="utf-8"?><foo>ā¬</foo>ziso-8859-15s8   <?xml version="1.0" encoding="iso-8859-15"?><foo>¤</foo>r   s;   <?xml version="1.0" encoding="us-ascii"?><foo>&#8364;</foo>zutf-16u5   <?xml version="1.0" encoding="utf-16"?><foo>ā¬</foo>©rM   rQ   rW  s   <franēais></franēais>s.   <franais>Comment ēa va ? Trčs bien ?</franais>s0   <franēais>Comment ēa va ? Trčs bien ?</franēais>)
r   rA   rY   ŚencodeŚpyexpatŚversion_infors   r	   ŚUnicodeDecodeErrorr5   r/   r   r   r   ŚtestEncodings~  s8   
’’’’ž
’’’zMinidomTest.testEncodingsc                 C   st   t d}|  | ” d” |  |jd dd” |  |jddd” |  |jddd” |  | dd”d	” | ”  d S )
Nrc  rd  )Z
standaloneTu4   <?xml version="1.0" standalone="yes"?><foo>ā¬</foo>Fu3   <?xml version="1.0" standalone="no"?><foo>ā¬</foo>r   sE   <?xml version="1.0" encoding="utf-8" standalone="yes"?><foo>ā¬</foo>)r   rA   rY   r5   r/   r   r   r   ŚtestStandalone  s"   
’’’’’zMinidomTest.testStandalonec                   @   s   e Zd ZdZdd ZdS )zMinidomTest.UserDataHandlerr   c                 C   s*   |  ||d | ” |  |d d ” d| _d S r2  )rF  Ścalledr?  r   r   r   r@  «  s   
z"MinidomTest.UserDataHandler.handleN)rA  rB  rC  rl  r@  r   r   r   r   rG  ©  s    rG  c                 C   s$  t  }| d”}|  | d”d u ” | dd d ” |  | d”d u ” | ddd” | ddd” |  | d”dk” |  | d”dk” | dd d ” |  | d”d u ” |  | d”dk” |  ” }| dd|” | d”}|  |jo| d”d u o| d”dk” | ”  | ”  | ”  d S )Nr¹   r`   é   rP   é   rN   )	r   rS   r(   ZgetUserDatarF  rG  r	  rl  r5   )r&   r   ŚnrH  Ścr   r   r   ŚtestUserData°  s.   


’žzMinidomTest.testUserDatac                 C   s@   |   tjj|j|dd” td}|   tjj|j|tjjd” d S )Nśhttp://xml.python.org/nsz	xmlns:foor_   r`   )rs   r   r   ŚNamespaceErrŚ
renameNoder   ZWrongDocumentErrr×   )r&   r
   r*   r’   r   r   r   Ś checkRenameNodeSharedConstraintsČ  s   ’’z,MinidomTest.checkRenameNodeSharedConstraintsc                 C   sL  t d}|j}|j}|jd }| |tjjd”}|  |jdko[|j	dko[|j
d u o[|jtjjko[|jd u o[|jdko[| d”d u o[| d” |”o[|d  |”o[|j |”o[|j |”” | |dd”}|  |jdko°|j	dko°|j
dko°|jdko°|jd u o°|jdko°| d”d u o°| d”d u o°| d” |”o°| dd” |”o°|d  |”o°|d  |”” | |dd	”}|  |jd	ko!|j	d	ko!|j
d
ko!|jdko!|jdko!|jdko!| d”d u o!| d”d u o!| d”d u o!| dd”d u o!| d	” |”o!| dd
” |”o!|d	  |”o!|d  |”” | |tjjd”}|  |jdko|j	dko|j
d u o|jtjjko|jd u o|jdko| d”d u o| d”d u o| d”d u o| d	”d u o| dd”d u o| d” |”o|d  |”” |  tjj|j|dd” |  ||” | ”  d S )Nz<doc a='v'/>r{   rš   Śvrr  rp  )rr  rp  śhttp://xml.python.org/ns2zp:drµ   Śp)rw  rµ   r¹   Zxmlns)r   rH   ru   rt  r   r   r×   r(   rB   rl   r>   r=   r?   rx   r   rė   r    rw   rń   rs   rs  ru  r5   )r&   r
   r]   ZattrmaprD   r   r   r   ŚtestRenameAttributeŠ  sö   
’žżüūśłų
	÷

ö’žżüūśłų	’öõō’žżüūśłų	’’÷õ’óņń’žżüūśłų	÷
’’öōó’zMinidomTest.testRenameAttributec                 C   s~  t d}|j}| |tjjd”}|  |jdko2|jdko2|j	d u o2|j
tjjko2|jd u o2|j |”” | |dd”}|  |jdko[|jdko[|j	dko[|j
dko[|jd u o[|j |”” | |dd”}|  |jdko|jdko|j	dko|j
dko|jdko|j |”” | |tjjd	”}|  |jd	ko±|jd	ko±|j	d u o±|j
tjjko±|jd u o±|j |”” |  ||” | ”  d S )
Nr_   r{   rr  rš   rw  zp:crp  rx  rµ   )r   rH   rt  r   r   r×   r(   r“   rl   r>   r=   r?   r    rė   ru  r5   rß   r   r   r   ŚtestRenameElement  sh   ’žżü
ū’žżü
ū’žżü
ū’žżü
ūzMinidomTest.testRenameElementc                 C   sL   t jj ”  t jjdd ”}| d”}|  t jj|j	|t jjd” | 
”  d S )Nr¹   Ścommentr`   )r   r   r   r   r   r×   rk   rs   r$  rt  r5   r]  r   r   r   ŚtestRenameOtherH  s   
’
’zMinidomTest.testRenameOtherc                 C   s:  t d}|j}|jd }|  |jtj” |  |d” | | 	d”” |  |d” | 
| d”|” |  |d” | d”}| |” | 	d	”}| |” |  |d” |  |d	” | d
”}| ||” |}|  |d” |  |d	” | dd”}| ||” |}|  |d” |  |d	” | |” |  |d” |  |d” d S )Nz<doc>a</doc>r   r{   rš   Śabrp  Ścabr{  rµ   rY  ŚyŚzZcabd)r   rH   rR   rA   rŌ   r   r[  r-   rb   ra   rT   ŚcreateCDATASectionrk   rS   rp   ŚcreateProcessingInstructionŚremoveChild)r&   r
   r]   rr   ŚsplitterŚtext2rY  r   r   r   ŚtestWholeTextR  s8   






zMinidomTest.testWholeTextc                 C   sH   t d}|j}|j}|  |j|u d” | ||” |  |j|u d” d S )Nz<doc><e/></doc>zBefore replaceChild()zAfter replaceChild())r   rH   rW   r(   r  rp   )r&   r
   r]   r¹   r   r   r   ŚtestPatch1094164v  s   zMinidomTest.testPatch1094164c                 C   sŚ   dd }| \}}}}}|  d”}|  |d” |  |d” |  t|jdk” | \}}}}}|  d”}|  |d” |  |d” |  t|jdk” | \}}}}}|  d”}|  |d” |  |d u oit|jd	k” d S )
Nc                  S   sR   t d} | j}|j}|j}|j}| |  d”|” | |  d”|” | ||||fS )Nz<doc>a<e/>d</doc>rš   rp  )r   rH   rW   rX   r[   rT   ra   r  )r
   r]   Śtext1r  r  r   r   r   Śsetup  s   z/MinidomTest.testReplaceWholeText.<locals>.setupznew contentrµ   rO   r~  rW  r­   rM   )ZreplaceWholeTextr-   r(   rU   rR   )r&   r  r
   r]   r  r  r  rr   r   r   r   ŚtestReplaceWholeText  s"   



’z MinidomTest.testReplaceWholeTextc                 C   sv   t d}|j}|j}|  |jd u o|jtjjk” d 	” }|D ]}| 
|”}|j}|  t|do6|jtjjk” qd S )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   )r   rH   Z
schemaTyper(   rB   Ś	namespacer   r   r×   Śsplitr   Śhasattr)r&   r
   r]   r,   ŚnamesrB   r{   r   r   r   ŚtestSchemaType  s    ’’
’żzMinidomTest.testSchemaTypec                 C   s6  t d}|j}| d”}| d”}|  | d”d u o!|j o!|j ” | d” |  | | d””o8|jo8|j ” | d” |  | | d””oV| | d””oV|joV|j” | d”}d|_	| 
|” |  | d”d u o| | d””o|j o|jo|j ” | |tjjd” |  | | d””o|j” d S )Nz<doc a1='v' a2='w'/>rķ   rī   rv  ŚwŚan)r   rH   r   r(   ŚgetElementByIdr¤   r£   rė   ZcreateAttributerx   ŚsetAttributeNodert  r   r   r×   )r&   r
   r¹   rķ   rī   Śa3r   r   r   ŚtestSetIdAttribute½  sN   

’ž
’ž
’žż

’žżü’zMinidomTest.testSetIdAttributec                 C   sp  d}d}t d| d | d }|j}| |d”}| |d”}|  | d”d u o/|j o/|j ” | |d” |  | | d””oG|joG|j ” | |d” |  | | d””of| | d	””of|jof|j” | |d”}d|_	| 
|” |  | | d	””” |  |j ” |  |j” |  |j ” |  | d”d u ” | |tjjd
” |  | | d	””o“|j” d S ©Nzhttp://xml.python.org/ns1rw  z<doc xmlns:ns1='z' xmlns:ns2='z' ns1:a1='v' ns2:a2='w'/>rķ   rī   rv  r  r  )r   rH   rń   r(   r  r¤   ZsetIdAttributeNSrė   ŚcreateAttributeNSrx   r  rt  r   r   r×   ©r&   ZNS1ZNS2r
   r¹   rķ   rī   r  r   r   r   ŚtestSetIdAttributeNSÜ  sZ   ’’žž’ž’ž’žż
’z MinidomTest.testSetIdAttributeNSc                 C   sl  d}d}t d| d | d }|j}| |d”}| |d”}|  | d”d u o/|j o/|j ” | |” |  | | d””oF|joF|j ” | |” |  | | d””od| | d	””od|jod|j” | |d”}d|_	| 
|” |  | | d	””” |  |j ” |  |j” |  |j ” |  | d”d u ” | |tjjd
” |  | | d	””o²|j” d S r  )r   rH   rń   r(   r  r¤   ZsetIdAttributeNoderė   r  rx   r  rt  r   r   r×   r  r   r   r   ŚtestSetIdAttributeNode   sZ   ’’žž’ž
’ž
’žż
’z"MinidomTest.testSetIdAttributeNodec                 C   s  ||fg}|r	|  ” \}}|  |j|j” |  t|jt|j” |  |j|j” |  | |”” |  | |”” |jtj	krÖ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Ø|jtjkrī|  |j |”” |  |j |”” tt|jD ]}| |j| |j| f” qõ|sd S d S r$   )ŚpoprA   rŌ   rU   rR   rl   r.   rė   r   r  r   r   r  r   rB   r  r  r   r  ZDOCUMENT_NODEr%   r    )r&   r
   r’   ŚstackZn1Zn2r  Zno1Zno2r  r  r   r   r   Śassert_recursive_equal$  sF   




ßz"MinidomTest.assert_recursive_equalc                 C   sD   t t}tdtjd D ]}t ||”}t |”}|  ||” qd S )NrM   rN   )r   Śsampler  ŚpickleŚHIGHEST_PROTOCOLŚdumpsŚloadsr  )r&   r
   Śprotor+   r’   r   r   r   ŚtestPickledDocumentI  s   
żzMinidomTest.testPickledDocumentc                 C   s"   t t}t |”}|  ||” d S r$   )r   r  ŚcopyŚdeepcopyr  r  r   r   r   ŚtestDeepcopiedDocumentP  s   
z"MinidomTest.testDeepcopiedDocumentc                 C   s(   t  }| | d”” |  t|j” d S )Nzfoo--bar)r   rb   rk   rs   Ś
ValueErrorrY   r/   r   r   r   Ś(testSerializeCommentNodeWithDoubleHyphenU  s   z4MinidomTest.testSerializeCommentNodeWithDoubleHyphenc                 C   s,   t d}t | ” }|  |jtjjk” d S )Nz$<element xmlns=''>
<foo/>
</element>)r   rY   r(   r=   r   r   r×   r  r   r   r   ŚtestEmptyXMLNSValue[  s   zMinidomTest.testEmptyXMLNSValuec                 C   sV   t jdkr|  td”}n|  td”}| td W d    d S 1 s$w   Y  d S )Nre  zsyntax errorzUnsupported syntaxzE<element xmlns:abc="http:abc.com/de f g/hi/j k"><abc:foo /></element>)rg  rh  ZassertRaisesRegexr	   rØ  r   )r&   Ścontextr   r   r   Ś!testExceptionOnSpacesInXMLNSValuea  s   

"’z-MinidomTest.testExceptionOnSpacesInXMLNSValuec                 C   sf   t t}|j d”d }|  tjj|j|” t	|j
}| |j
d ” t	|j
}|  ||d k” d S )NZTITLEr   rN   )r   r4   rH   rG   rs   r   r   r   r  rU   rR   r%   )r&   r
   Z	title_tagZnum_children_beforeZnum_children_afterr   r   r   ŚtestDocRemoveChildj  s   

zMinidomTest.testDocRemoveChildc                 C   s   t t}| dd”}d|_d S )Nr  r  Zcrash)r   r4   r  ry   )r&   r
   rŲ   r   r   r   Ś"testProcessingInstructionNameErrors  s   
z.MinidomTest.testProcessingInstructionNameErrorc                 C   s2   d}t |}t ” }| |” |  | ” |” d S ©NśE<?xml version="1.0" ?><curriculum status="public" company="example"/>)r   ŚioŚStringIOZwritexmlrA   Śgetvalue)r&   Śxml_strr
   Śoutputr   r   r   Śtest_minidom_attribute_orderz  s
   
z(MinidomTest.test_minidom_attribute_orderc                 C   s    d}t |}|  | ” |” d S rÆ  )r   rA   rY   ©r&   r“  r
   r   r   r   Ś"test_toxml_with_attributes_ordered  s   z.MinidomTest.test_toxml_with_attributes_orderedc                 C   ó    d}t |}|  | ” d” d S )Nr°  zG<?xml version="1.0" ?>
<curriculum status="public" company="example"/>
©r   rA   rÉ   r·  r   r   r   Ś(test_toprettyxml_with_attributes_ordered  ó
   
’z4MinidomTest.test_toprettyxml_with_attributes_orderedc                 C   r¹  )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_cdatac                 C   sL   d}t |}|  | d”d jd” t | ” }|  | d”d jd” d S )Nr½  r*   r   z</data>)r   r-   rG   rW   rÉ   )r&   r“  Zdom1r   r   r   r   Śtest_cdata_parsing  s
   zMinidomTest.test_cdata_parsingN)r#   )rA  rB  rC  r(   r-   r0   r9   r;   rE   rF   rJ   r^   rg   ri   rn   ro   rq   rv   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ł   rś   rū   rü   rż   rž   r   r  r  r  r  r  r  r  r  r"  r#  r'  r)  r+  r0  r3  r4  r5  r7  r8  r9  r;  rI  rJ  rP  rQ  rS  rU  rV  rX  rZ  r\  r^  r_  r`  rb  rj  rk  rG  rq  ru  ry  rz  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"   7   s   +		&
		
		"/?M+
$	!$$%			r"   Ś__main__r$   )r„  r  r±  r'   r   Zunittestrg  Zxml.dom.minidomr   r   r   r   r   r   r   Zxml.parsers.expatr	   Zfindfiler4   r  r   r   r!   ZTestCaser"   rA  Śmainr   r   r   r   Ś<module>   s>   
            r’