o
    ±ó®g° ć                   @   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mZm	Z	m
Z
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rUe ”  dS dS )é    N)Śsupport)ŚparseŚNodeŚDocumentŚparseString)ŚgetDOMImplementationz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   śG/Users/admin/.pyenv/versions/3.10.0/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_doctype.   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å ZtG dędē 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’ 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   Śconfirm6   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   ŚcheckWholeText9   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   ŚtestParseFromBinaryFileB   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   r0   r5   r   r   r   ŚtestParseFromTextFileH   s
   "żz!MinidomTest.testParseFromTextFilec                 C   s0   t t}|  | d”|j d”k” | ”  d S )NZLI)r   r2   r&   ŚgetElementsByTagNameŚdocumentElementr3   ©r$   r   r   r   r   ŚtestGetElementsByTagNameN   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   r;   Ś
childNodesŚcreateElementŚinsertBeforer&   ŚlenŚlengthr   Ś
firstChildŚ	lastChildŚtoxmlŚpreviousSiblingŚnextSiblingr3   )r$   r   ŚrootŚelemZnelemZnelem2r   r   r   ŚtestInsertBeforeT   s   


’žżüūśł
÷

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


’žżüūśł’özMinidomTest.testInsertBeforec                 C   sr   t d}| d”}| d”}| d”}| d”}|j |” | ” }| |” | |” | |” ||||||fS )Nś<doc/>ZoriginalŚfoorC   Zbat)r   ŚcreateTextNoder;   Ś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))rZ   r;   rG   r&   ŚtuplerE   r3   rV   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   r2   r;   rU   ŚcreateCommentr&   rE   ŚnodeNameŚdatar3   r<   r   r   r   ŚtestAppendChild   s
   zMinidomTest.testAppendChildc                 C   sT   |   ” \}}}}}}|j |” |  t|jj||||fkd” | ”  | ”  d S )NzappendChild(<fragment>))rZ   r;   rU   r&   r[   rE   r3   rV   r   r   r   ŚtestAppendChildFragment¤   s   
’žz#MinidomTest.testAppendChildFragmentc                 C   s\   |   ” \}}}}}}|j ||” | ”  |  t|jj|||fkd” | ”  | ”  d S )NzreplaceChild(<fragment>))rZ   r;   ŚreplaceChildr3   r&   r[   rE   rV   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 )Nr?   Śtext)r   rF   rT   ŚassertRaisesr   r   ŚHierarchyRequestErrrU   rG   rc   Ś
attributesZsetNamedItemZsetNamedItemNSr3   )r$   r   rP   re   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 )	Nr?   rC   rS   r   z-NamedNodeMap.__setitem__() sets ownerDocumentz,NamedNodeMap.__setitem__() sets ownerElementz%NamedNodeMap.__setitem__() sets valuez)NamedNodeMap.__setitem__() sets nodeValue)
r   rF   rh   r   r&   r   ŚownerElementŚvalueŚ	nodeValuer3   )r$   r   rP   ŚattrsŚar   r   r   ŚtestNamedNodeMapSetItemĖ   s&   

’’’’z#MinidomTest.testNamedNodeMapSetItemc                 C   sB   t t}|  |” | | d”” |  |jd j ” | ”  d S )NrS   r]   )r   r2   r&   rU   r^   rE   r3   r<   r   r   r   ŚtestNonZeroÜ   s
   
zMinidomTest.testNonZeroc                 C   s,   t t}|  |j” | ”  |  |j” d S r"   )r   r2   r#   rE   r3   r,   r<   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   r2   r#   rE   r,   r<   r   r   r   ŚtestContexté   s   
’zMinidomTest.testContextc                 C   s.   t  }| | d”” |  |j” | ”  d S ©NŚabc)r   rU   rF   r&   r;   r3   r<   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   r;   ŚsetAttributer&   rL   ŚgetAttributeNoder   rj   r3   )r$   r   Śelrn   r   r   r   rz   ō   s   
’’zMinidomTest.testAAAc                 C   sF   t d}|j}| dd” | dd” |  | ” dkd” | ”  d S )Nrv   rw   Śjamrx   ry   ŚtestAAB)r   r;   r{   r&   rL   r3   ©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 )Nrt   ŚdefŚghiZjklZmnor@   Znewval)
r   rU   rF   r{   r&   ŚgetAttributerh   rk   rH   r3   ©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 )Nrt   r   r   r   rA   )r   rU   rF   r&   rH   rh   r{   r3   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 )Nrt   r   r   rA   rS   r   )r   rU   rF   r{   r&   rH   rh   rf   r   r   ŚNotFoundErrZremoveAttributer3   r   r   r   r   ŚtestRemoveAttr(  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:abcattrrS   r@   ZabcattrrA   )r   rU   ŚcreateElementNSŚsetAttributeNSrf   r   r   r   ZremoveAttributeNSr&   rH   rh   r3   r   r   r   r   ŚtestRemoveAttrNS3  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 )NrS   rw   r~   rA   r   )r   rU   rF   r{   r&   rH   rh   r|   rf   r   r   r   ZremoveAttributeNodeŚassertIsr3   )r$   r   r   r(   Śdom2Śchild2Znode2r   r   r   ŚtestRemoveAttributeNodeA  s&   
’’
’z#MinidomTest.testRemoveAttributeNodec                 C   s6   t  }| | d””}| dd” |  | d”” d S )NrS   rw   r~   )r   rU   rF   r{   r&   ZhasAttributer   r   r   r   ŚtestHasAttributeS  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 )
Nrv   rw   r~   rA   ZbamZhamZspam2r@   Zbam2)r   r;   r{   r&   rH   rh   ŚsetIdAttributerk   rl   r   r|   ŚisIdr3   r   r   r   r   ŚtestChangeAttrY  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   rU   r   ŚassertEqualr   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    rt   r   )r   rU   r   r   r”   ZgetAttributeNSrF   )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myelemrA   r   r   zminidom:myelem)
r   ŚgetElementsByTagNameNSr&   rH   ŚnamespaceURIŚ	localNameŚprefixŚtagNamer_   r3   )r$   Śdr   Zelemsr   r   r   ŚtestGetElementsByTagNameNS  s"   ’’žżüūz&MinidomTest.testGetElementsByTagNameNSc                 C   s"   |  ||”}|  t|dk” d S r   )r§   r&   rH   )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 )NrR   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 rs   ©r   rU   rF   ŚreprŚstrr&   r3   ©r$   r   r}   Zstring1Zstring2r   r   r   ŚtestElementReprAndStrĆ  ó   z!MinidomTest.testElementReprAndStrc                 C   r²   rs   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   rU   r   r“   rµ   r&   r3   r¶   r   r   r   ŚtestElementReprAndStrUnicodeNSÓ  s   
’z*MinidomTest.testElementReprAndStrUnicodeNSc                 C   sD   t  }| | d””}| dd”}|  t|t|k” | ”  d S )Nrt   r   )r   rU   rF   r{   r&   rµ   r“   r3   )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   rL   r3   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   Śtoprettyxmlr3   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>
)r”   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 )NrP   ZTEXTrĆ   z<elem>
	TEXT
	TEXT
</elem>
)r   rF   rU   rT   r”   rĄ   )r$   r   rP   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Ą   r”   r:   rE   rL   )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   r;   rJ   r&   Śtargetr`   r_   ŚnodeTyper   ŚPROCESSING_INSTRUCTION_NODErh   ŚhasChildNodesrH   rE   rK   r©   rØ   r   r   ŚEMPTY_NAMESPACE)r$   r   Śpir   r   r   ŚtestProcessingInstruction  s.   ’ž
żüūśłų	÷
öz%MinidomTest.testProcessingInstructionc                 C   r   r"   r   r   r   r   r   ŚtestProcessingInstructionRepr%  r¦   z)MinidomTest.testProcessingInstructionReprc                 C   r   r"   r   r   r   r   r   ŚtestTextRepr'  r¦   zMinidomTest.testTextReprc                 C   r   r"   r   r   r   r   r   ŚtestWriteText)  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 )NrR   Śextra)r   rF   rf   r   r   rg   rU   r3   ©r$   r   rP   r   r   r   ŚtestTooManyDocumentElements-  s
   
z'MinidomTest.testTooManyDocumentElementsc                 C   r   r"   r   r   r   r   r   ŚtestCreateElementNS5  r¦   zMinidomTest.testCreateElementNSc                 C   r   r"   r   r   r   r   r   ŚtestCreateAttributeNS7  r¦   z!MinidomTest.testCreateAttributeNSc                 C   r   r"   r   r   r   r   r   Ś	testParse9  r¦   zMinidomTest.testParsec                 C   r   r"   r   r   r   r   r   ŚtestParseString;  r¦   zMinidomTest.testParseStringc                 C   r   r"   r   r   r   r   r   ŚtestComment=  r¦   zMinidomTest.testCommentc                 C   r   r"   r   r   r   r   r   ŚtestAttrListItem?  r¦   zMinidomTest.testAttrListItemc                 C   r   r"   r   r   r   r   r   ŚtestAttrListItemsA  r¦   zMinidomTest.testAttrListItemsc                 C   r   r"   r   r   r   r   r   ŚtestAttrListItemNSC  r¦   zMinidomTest.testAttrListItemNSc                 C   r   r"   r   r   r   r   r   ŚtestAttrListKeysE  r¦   zMinidomTest.testAttrListKeysc                 C   r   r"   r   r   r   r   r   ŚtestAttrListKeysNSG  r¦   zMinidomTest.testAttrListKeysNSc                 C   sP   t d}|j}|j}| d”}| d”}|  | |”” |  tj	j
|jd” d S )Nz<doc a=''/>rn   )r   r;   rh   r|   ZremoveNamedItemr&   Ś
isSameNoderf   r   r   r   ©r$   r   r°   rm   Śa1Śa2r   r   r   ŚtestRemoveNamedItemI  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   r;   rh   ŚgetAttributeNodeNSZremoveNamedItemNSr&   rā   rf   r   r   r   rć   r   r   r   ŚtestRemoveNamedItemNSR  s   ’z!MinidomTest.testRemoveNamedItemNSc                 C   r   r"   r   r   r   r   r   ŚtestAttrListValues\  r¦   zMinidomTest.testAttrListValuesc                 C   r   r"   r   r   r   r   r   ŚtestAttrListLength^  r¦   zMinidomTest.testAttrListLengthc                 C   r   r"   r   r   r   r   r   ŚtestAttrList__getitem__`  r¦   z#MinidomTest.testAttrList__getitem__c                 C   r   r"   r   r   r   r   r   ŚtestAttrList__setitem__b  r¦   z#MinidomTest.testAttrList__setitem__c                 C   r   r"   r   r   r   r   r   ŚtestSetAttrValueandNodeValued  r¦   z(MinidomTest.testSetAttrValueandNodeValuec                 C   r   r"   r   r   r   r   r   ŚtestParseElementf  r¦   zMinidomTest.testParseElementc                 C   r   r"   r   r   r   r   r   ŚtestParseAttributesh  r¦   zMinidomTest.testParseAttributesc                 C   r   r"   r   r   r   r   r   ŚtestParseElementNamespacesj  r¦   z&MinidomTest.testParseElementNamespacesc                 C   r   r"   r   r   r   r   r   ŚtestParseAttributeNamespacesl  r¦   z(MinidomTest.testParseAttributeNamespacesc                 C   r   r"   r   r   r   r   r   ŚtestParseProcessingInstructionsn  r¦   z+MinidomTest.testParseProcessingInstructionsc                 C   r   r"   r   r   r   r   r   ŚtestChildNodesp  r¦   zMinidomTest.testChildNodesc                 C   r   r"   r   r   r   r   r   ŚtestFirstChildr  r¦   zMinidomTest.testFirstChildc                 C   s<   t d}|j}|  | ” ” t d}|j}|  | ” ” d S )Nr>   rR   )r   r;   r#   rĶ   r,   )r$   r   r   r   Śdoc2r   r   r   ŚtestHasChildNodest  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)rh   ŚlistŚkeysŚsortr&   ŚrangerH   r   rk   rl   rØ   r©   rj   )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MODIFIEDŚattrz	NEW VALUEZaddedZVALUE)r   r;   Ś	cloneNoder’   r«   r_   r{   )r$   Śdeepr   rO   Ś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&   rH   rE   rI   Ś
parentNoderL   r3   ©r$   r   r  r   r   r   r    ó   
’ž
üz#MinidomTest.testCloneElementShallowc                 C   r  )NrA   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  rA   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ā   rH   rE   r;   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 )NrA   r   )r   r  r&   r_   ŚnameŚpublicIdŚsystemIdrH   r   r   r   rE   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 )NrA   Ś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&   r_   r  r  r  rH   r   r   r   rE   )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 )NrR   )r   rf   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!  )NrA   ŚtestImportDocumentDeepr#  r   r   r   r   r$    r   z"MinidomTest.testImportDocumentDeepc                 C   ó(   t  }t }|  tjj|j|jd” d S r   ©r   r   rf   r   r   r  r  r
   ©r$   ŚsrcrŹ   r   r   r   ŚtestImportDocumentTypeShallow  ó
   ’z)MinidomTest.testImportDocumentTypeShallowc                 C   r%  ©NrA   r&  r'  r   r   r   ŚtestImportDocumentTypeDeep  r*  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'/>r   z: ownerElement should be Nonez: ownerDocument does not matchz.: cloned attribute must have specified == True)
r   r;   r|   ZassertNotEqualr  r&   rā   rj   r   Z	specified)r$   r  r  r   r   r  r   r   r   Ścheck_clone_attribute&  s   
’’’z!MinidomTest.check_clone_attributec                 C   r!  )Nr   ŚtestCloneAttributeShallow©r-  r   r   r   r   r.  4  r   z%MinidomTest.testCloneAttributeShallowc                 C   r!  )NrA   ŚtestCloneAttributeDeepr/  r   r   r   r   r0  7  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   rJ   r”   rĖ   r   rĢ   r  r&   rŹ   r`   )r$   r  r  r   rĻ   r  r   r   r   Ścheck_clone_pi:  s   

’zMinidomTest.check_clone_pic                 C   r!  )Nr   ŚtestClonePIShallow©r1  r   r   r   r   r2  B  r   zMinidomTest.testClonePIShallowc                 C   r!  )NrA   ŚtestClonePIDeepr3  r   r   r   r   r4  E  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Śkeyr`   r(  Śdst©r$   r5  r6  r`   r(  r7  r   r   r   ŚhandleU  s
   
z;MinidomTest.check_clone_node_entity.<locals>.Handler.handleN)Ś__name__Ś
__module__Ś__qualname__r9  r   r   r   r   ŚHandlerT  s    r=  Zsmiler6  r`   T)r  u%   Don't let entities make you frown āŗr   )r   r   r   r   Śstripr
   r   ŚsetUserDatar  r”   r;   rJ   r'   ŚUserDataHandlerZNODE_IMPORTEDr   Z	swap_attrZNODE_CLONEDr5  r6  r`   r   r(  r7  )
r$   Zclone_documentZdocumentr=  Śhandlerr
   r   r  r5  r7  r   r   r   Ścheck_clone_node_entityH  s2   
ł	
’
’

z#MinidomTest.check_clone_node_entityc                 C   s   |   d” |   d” d S )NFT)rB  r   r   r   r   ŚtestCloneNodeEntityw  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 )NrR   ŚfirstŚsecondr@   ztestNormalize -- preparationrA   ŚfirstsecondztestNormalize -- resultr    r   z*testNormalize -- single empty node removed)r   r;   rU   rT   r&   rH   rE   rI   Ś	normalizerJ   rK   r`   r3   ©r$   r   rO   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 )
NrR   rD  rE  rž   rB   z1testNormalizeCombineAndNextSibling -- preparationr@   rF  z-testNormalizeCombinedAndNextSibling -- result)r   r;   rU   rT   rF   r&   rH   rE   rI   rG  rJ   r`   rK   rN   rM   r3   rH  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 )NrR   rD  r    r@   z1testNormalizeDeleteWithPrevSibling -- preparationrA   z,testNormalizeDeleteWithPrevSibling -- result©r   r;   rU   rT   r&   rH   rE   rI   rG  rJ   r`   rK   rN   rM   r3   rH  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 )NrR   r    rE  r@   z1testNormalizeDeleteWithNextSibling -- preparationrA   z,testNormalizeDeleteWithNextSibling -- resultrK  rH  r   r   r   Ś"testNormalizeDeleteWithNextSibling»  rM  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 )NrR   rž   r    rB   z1testNormalizeDeleteWithTwoSiblings -- preparationr@   z,testNormalizeDeleteWithTwoSiblings -- result)r   r;   rU   rF   rT   r&   rH   rE   rI   rG  rJ   rK   rN   rM   r3   rH  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 )
NrR   r    rE  Zfourthé   z,testNormalizeDeleteAndCombine -- preparationrA   Zsecondfourthz'testNormalizeDeleteAndCombine -- result)r   r;   rU   rT   r&   rH   rE   rI   rG  rJ   rK   r`   rM   rN   r3   rH  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    ŚxrA   Zx2Zx3rB   rD   r@   ztestNormalize2 -- preparationz$testNormalize2 -- childNodes lengthsZtxZt2x2Zt3x3z$testNormalize2 -- joined text fieldsz"testNormalize2 -- sibling pointers)r   r;   rE   rU   rT   r&   rH   rI   rG  r`   rN   rM   r3   rH  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   r;   rE   r”   rĖ   r   Ś	TEXT_NODErG  r3   )r$   r   re   r   r   r   ŚtestBug07778845  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    rA   r]   z)Final child's .nextSibling should be None)r   r;   rE   rl   rG  r&   rN   ©r$   r   r(   r   r   r   ŚtestBug1433694=  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   r;   rE   r&   rN   rM   r3   )r$   r   rO   rĻ   re   Zelmr   r   r   rX  E  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   r;   rE   r&   r  r3   )r$   r   rO   Zelm1Zelm2aZelm2bZelm3r   r   r   rY  S  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   rA   ztest NodeList.item())r   rE   r&   r   r3   )r$   r   ŚchildrenZdocelemr   r   r   ŚtestNodeListItemb  s   ’žżūzMinidomTest.testNodeListItemc                 C   s   t d}|  | ” d” |  | d”d” |  | d”d” |  | d”d” |  | d	”d
 d	”” |  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>s0   <franēais>Comment ēa va ? Trčs bien ?</franēais>)r   r”   rL   Śencoderf   ŚUnicodeDecodeErrorr3   r-   r   r   r   ŚtestEncodingsn  s*   
’’’’ž’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 )
Nr\  r]  )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   r”   rL   r3   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 r+  )r?  Ścalledr8  r   r   r   r9    s   
z"MinidomTest.UserDataHandler.handleN)r:  r;  r<  rb  r9  r   r   r   r   r@    s    r@  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°   rS   é   rC   é   rA   )	r   rF   r&   ZgetUserDatar?  r@  r  rb  r3   )r$   r   ŚnrA  Ś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:foorR   rS   )rf   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'/>rn   rē   Śvrh  rf  )rh  rf  śhttp://xml.python.org/ns2zp:dr¬   Śp)rm  r¬   r°   Zxmlns)r   r;   rh   rj  r   r   rĪ   r&   r  r_   r©   rØ   rŖ   rk   r|   rā   r   rj   rč   rf   ri  rk  r3   )r$   r   rP   Zattrmapr   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 )
NrR   rn   rh  rē   rm  zp:crf  rn  r¬   )r   r;   rj  r   r   rĪ   r&   r«   r_   r©   rØ   rŖ   r   rā   rk  r3   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°   ŚcommentrS   )r   r   r   r   r	   rĪ   r^   rf   r  rj  r3   rV  r   r   r   ŚtestRenameOther2  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   rn   rē   Śabrf  Ścabrq  r¬   rR  ŚyŚzZcabd)r   r;   rE   r”   rĖ   r   rT  r+   rU   rT   rG   ŚcreateCDATASectionr^   rF   rc   ŚcreateProcessingInstructionŚremoveChild)r$   r   rP   re   ŚsplitterŚtext2rR  r   r   r   ŚtestWholeText<  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   r;   rJ   r&   r  rc   )r$   r   rP   r°   r   r   r   ŚtestPatch1094164`  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ē   rf  )r   r;   rJ   rK   rN   rG   rT   rw  )r   rP   Śtext1r{  rz  r   r   r   Śsetupj  s   z/MinidomTest.testReplaceWholeText.<locals>.setupznew contentr¬   rB   rt  rP  r    r@   )ZreplaceWholeTextr+   r&   rH   rE   )r$   r  r   rP   r~  rz  r{  re   r   r   r   ŚtestReplaceWholeTexti  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 nmsr  )r   r;   Z
schemaTyper&   r  Ś	namespacer   r   rĪ   Śsplitr|   Śhasattr)r$   r   rP   r*   Śnamesr  rn   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å   rl  ŚwŚan)r   r;   r|   r&   ŚgetElementByIdr   r   rā   ZcreateAttributerk   ŚsetAttributeNoderj  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/ns1rm  z<doc xmlns:ns1='z' xmlns:ns2='z' ns1:a1='v' ns2:a2='w'/>rä   rå   rl  r  r  )r   r;   rč   r&   r  r   ZsetIdAttributeNSrā   ŚcreateAttributeNSrk   r  rj  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   r;   rč   r&   r  r   ZsetIdAttributeNoderā   r  rk   r  rj  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"   )Śpopr”   rĖ   rH   rE   r_   r,   rā   r   r  r   r   rū   r   r  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 )Nr@   rA   )r   Śsamplerū   ŚpickleŚHIGHEST_PROTOCOLŚdumpsŚloadsr  )r$   r   Śprotor)   rö   r   r   r   ŚtestPickledDocument3  s   
żzMinidomTest.testPickledDocumentc                 C   s"   t t}t |”}|  ||” d S r"   )r   r  ŚcopyŚdeepcopyr  r  r   r   r   ŚtestDeepcopiedDocument:  s   
z"MinidomTest.testDeepcopiedDocumentc                 C   s(   t  }| | d”” |  t|j” d S )Nzfoo--bar)r   rU   r^   rf   Ś
ValueErrorrL   r-   r   r   r   Ś(testSerializeCommentNodeWithDoubleHyphen?  s   z4MinidomTest.testSerializeCommentNodeWithDoubleHyphenc                 C   s,   t d}t | ” }|  |jtjjk” d S )Nz$<element xmlns=''>
<foo/>
</element>)r   rL   r&   rØ   r   r   rĪ   r  r   r   r   ŚtestEmptyXMLNSValueE  s   zMinidomTest.testEmptyXMLNSValuec                 C   s:   |   td” td W d    d S 1 sw   Y  d S )NzUnsupported syntaxzE<element xmlns:abc="http:abc.com/de f g/hi/j k"><abc:foo /></element>)ZassertRaisesRegexr  r   r   r   r   r   Ś!testExceptionOnSpacesInXMLNSValueK  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   rA   )r   r2   r;   r:   rf   r   r   r   ry  rH   rE   r#   )r$   r   Z	title_tagZnum_children_beforeZnum_children_afterr   r   r   ŚtestDocRemoveChildO  s   

zMinidomTest.testDocRemoveChildc                 C   s   t t}| dd”}d|_d S )Nru  rv  Zcrash)r   r2   rx  rl   )r$   r   rĻ   r   r   r   Ś"testProcessingInstructionNameErrorX  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writexmlr”   Śgetvalue)r$   Śxml_strr   Śoutputr   r   r   Śtest_minidom_attribute_order_  s
   
z(MinidomTest.test_minidom_attribute_orderc                 C   s    d}t |}|  | ” |” d S r¤  )r   r”   rL   ©r$   r©  r   r   r   r   Ś"test_toxml_with_attributes_orderedf  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   r”   rĄ   r¬  r   r   r   Ś(test_toprettyxml_with_attributes_orderedk  ó
   
’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_cdatar  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+   r:   rJ   rĄ   )r$   r©  Zdom1r   r   r   r   Śtest_cdata_parsing{  s
   zMinidomTest.test_cdata_parsingN)r!   )r:  r;  r<  r&   r+   r.   r7   r9   r=   rQ   rZ   r\   ra   rb   rd   ri   ro   rp   rq   rr   ru   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Ē   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  r1  r2  r4  rB  rC  rI  rJ  rL  rN  rO  rQ  rS  rU  rW  rX  rY  r[  r`  ra  r@  rg  rk  ro  rp  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    5   s   +		&
		
		"/?M+
$	!$$%		r    Ś__main__r"   )r  r  r¦  r%   r   ZunittestZxml.dom.minidomr   r   r   r   r   r   Zfindfiler2   r  r   r   r   ZTestCaser    r:  Śmainr   r   r   r   Ś<module>   s:   
            Y’