a
    äze» ć                   @   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 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rŗe ”  dS )é    N)Śsupport)ŚparseŚ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   ś'/usr/lib/python3.9/test/test_minidom.pyŚcreate_doc_without_doctype   s    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å 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   Śconfirm8   s    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   sN   t td0}t|}| ”  |  t|t” W d    n1 s@0    Y  d S )NŚrb©ŚopenŚtstfiler   Śunlinkr&   Ś
isinstancer   ©r$   Śfiler   r   r   r   ŚtestParseFromBinaryFileD   s    z#MinidomTest.testParseFromBinaryFilec                 C   sR   t tddd0}t|}| ”  |  t|t” W d    n1 sD0    Y  d S )NŚrz
iso-8859-1)r   r0   r5   r   r   r   ŚtestParseFromTextFileJ   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   ŚtestGetElementsByTagNameP   s
    
’z$MinidomTest.testGetElementsByTagNamec                 C   s   t d}|j}|j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”}| |d ” |  t|jdkoJ|jjdkoJ|jd |u oJ|j d”|u oJ|jd |u oJ|j d”|u oJ|j
|u oJ|j|u oJ| ” 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   ŚtestInsertBeforeV   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*0    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   ŚtestRemoveAttrNS5  s    
’’’zMinidomTest.testRemoveAttrNSc                 C   sČ   t  }| | d””}| dd” |  t|jdk” | d”}|  t	j
j|jd ” |  || |”” |  t|jdko| 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   ŚtestRemoveAttributeNodeC  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   ŚtestHasAttributeU  s    zMinidomTest.testHasAttributec                 C   s  t d}|j}| dd” |  t|jdk” | dd” | d” |  t|jdko|jd jdko|jd jdko| 	d”dko| 
d”j” 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d” |  t|jdkon|jd jdkon|jd jdkon| 	d”dkon|jd jdkon|jd jdkon| 	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   ŚtestChangeAttr[  sl    
’žż
ü
’žż
ü’žżüūś
’žżüūśzMinidomTest.testChangeAttrc                 C   s   d S r"   r   ©r$   r   r   r   ŚtestGetAttrList  s    zMinidomTest.testGetAttrListc                 C   s   d S r"   r   r   r   r   r   ŚtestGetAttrValues  s    zMinidomTest.testGetAttrValuesc                 C   s   d S r"   r   r   r   r   r   ŚtestGetAttrLength  s    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   s   d S r"   r   r   r   r   r   ŚtestGetAttributeNode  ó    z MinidomTest.testGetAttributeNodec                 C   s|   d}t |}| dd”}|  t|dkol|d jdkol|d jdkol|d jdkol|d jdkol|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   s@   t  }| | d””}t|}t|}|  ||k” | ”  d S rs   ©r   rU   rF   ŚreprŚstrr&   r3   ©r$   r   r}   Zstring1Zstring2r   r   r   ŚtestElementReprAndStrÅ  s    z!MinidomTest.testElementReprAndStrc                 C   s@   t  }| | d””}t|}t|}|  ||k” | ”  d S rs   r°   r³   r   r   r   ŚtestElementReprAndStrUnicodeĶ  s    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   s   d S 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 ]L}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o|jdko|jdko|jtj	ko|j
d u o| ”  ot|jdko|jd u o|jd u o|jd u o|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   s   d S r"   r   r   r   r   r   ŚtestProcessingInstructionRepr'  r¤   z)MinidomTest.testProcessingInstructionReprc                 C   s   d S r"   r   r   r   r   r   ŚtestTextRepr)  r¤   zMinidomTest.testTextReprc                 C   s   d S r"   r   r   r   r   r   ŚtestWriteText+  r¤   zMinidomTest.testWriteTextc                 C   s   d S 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   s   d S r"   r   r   r   r   r   ŚtestCreateElementNS7  r¤   zMinidomTest.testCreateElementNSc                 C   s   d S r"   r   r   r   r   r   ŚtestCreateAttributeNS9  r¤   z!MinidomTest.testCreateAttributeNSc                 C   s   d S r"   r   r   r   r   r   Ś	testParse;  r¤   zMinidomTest.testParsec                 C   s   d S r"   r   r   r   r   r   ŚtestParseString=  r¤   zMinidomTest.testParseStringc                 C   s   d S r"   r   r   r   r   r   ŚtestComment?  r¤   zMinidomTest.testCommentc                 C   s   d S r"   r   r   r   r   r   ŚtestAttrListItemA  r¤   zMinidomTest.testAttrListItemc                 C   s   d S r"   r   r   r   r   r   ŚtestAttrListItemsC  r¤   zMinidomTest.testAttrListItemsc                 C   s   d S r"   r   r   r   r   r   ŚtestAttrListItemNSE  r¤   zMinidomTest.testAttrListItemNSc                 C   s   d S r"   r   r   r   r   r   ŚtestAttrListKeysG  r¤   zMinidomTest.testAttrListKeysc                 C   s   d S r"   r   r   r   r   r   ŚtestAttrListKeysNSI  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   ŚtestRemoveNamedItemK  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   ŚtestRemoveNamedItemNST  s    ’z!MinidomTest.testRemoveNamedItemNSc                 C   s   d S r"   r   r   r   r   r   ŚtestAttrListValues^  r¤   zMinidomTest.testAttrListValuesc                 C   s   d S r"   r   r   r   r   r   ŚtestAttrListLength`  r¤   zMinidomTest.testAttrListLengthc                 C   s   d S r"   r   r   r   r   r   ŚtestAttrList__getitem__b  r¤   z#MinidomTest.testAttrList__getitem__c                 C   s   d S r"   r   r   r   r   r   ŚtestAttrList__setitem__d  r¤   z#MinidomTest.testAttrList__setitem__c                 C   s   d S r"   r   r   r   r   r   ŚtestSetAttrValueandNodeValuef  r¤   z(MinidomTest.testSetAttrValueandNodeValuec                 C   s   d S r"   r   r   r   r   r   ŚtestParseElementh  r¤   zMinidomTest.testParseElementc                 C   s   d S r"   r   r   r   r   r   ŚtestParseAttributesj  r¤   zMinidomTest.testParseAttributesc                 C   s   d S r"   r   r   r   r   r   ŚtestParseElementNamespacesl  r¤   z&MinidomTest.testParseElementNamespacesc                 C   s   d S r"   r   r   r   r   r   ŚtestParseAttributeNamespacesn  r¤   z(MinidomTest.testParseAttributeNamespacesc                 C   s   d S r"   r   r   r   r   r   ŚtestParseProcessingInstructionsp  r¤   z+MinidomTest.testParseProcessingInstructionsc                 C   s   d S r"   r   r   r   r   r   ŚtestChildNodesr  r¤   zMinidomTest.testChildNodesc                 C   s   d S r"   r   r   r   r   r   ŚtestFirstChildt  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   ŚtestHasChildNodesv  s    zMinidomTest.testHasChildNodesc                 C   sĄ   |j }|j }t| ” }t| ” }| ”  | ”  |  ||kd” tt|D ]j}| |”}	| |”}
|  |	|
uo¢|	j|
jko¢|	j	|
j	ko¢|	j
|
j
ko¢|	j|
jkd” |  |
j|u d” qPd 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~  s.    


’
ž
ż
ū’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   sR   |   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    s    
’ž
üz#MinidomTest.testCloneElementShallowc                 C   sR   |   d”\}}|  t|jdko@|jjdko@|jd u o@| ” dkd” | ”  d S )NrA   z<doc attr="value"><foo/></doc>ŚtestCloneElementDeepr  r  r   r   r   r  §  s    
’ž
ü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rŚ|  |jjtjkd” |  |jj
 |”” |  |j |j” ” 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¼  s.    
’’’’’
’z!MinidomTest.testCloneDocumentDeepc                 C   sŚ  t  }| d”}|  |d uo¬|j|jko¬|j|jko¬|j|jko¬|j|jko¬t|jt|jko¬|j 	t|j”d u o¬t|j
t|j
ko¬|j
 	t|j
”d u o¬t|jdk” tt|jD ]}|j 	|”}|j 	|”}|  | |” oX| |” oX|j|jkoX|j|jkoX|j|jkoX|j|jkoX|j|jkoX|j|jkoX|j|jk” q¾tt|j
D ]h}|j
 	|”}|j
 	|”}|  | |” oĪ| |” oĪ|j|jkoĪ|j|jkoĪ|j|jk” qld 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Õ  sj    

’
ž
ż
üūśłų	÷

’
ž
ż
ü
ū
ś
ł
ų	
’
ž
ż
üz'MinidomTest.testCloneDocumentTypeDeepOkc                 C   s&   t  }|j d”}|  |d u d” d S )NrA   ŚtestCloneDocumentTypeDeepNotOk©r   r   rż   r&   ©r$   r	   r’   r   r   r   r  ÷  s    z*MinidomTest.testCloneDocumentTypeDeepNotOkc                 C   s   t  }| d”}|  |d uo|j|jko|j|jko|j|jko|j|jkot|jdko|j 	d”d u ot|j
dko|j
 	d”d u ot|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   s&   t  }|j d”}|  |d u d” d S )Nr   Ś!testCloneDocumentTypeShallowNotOkr  r  r   r   r   r  
  s    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   s   |   dd” d S )Nr   ŚtestImportDocumentShallow©r  r   r   r   r   r    s    z%MinidomTest.testImportDocumentShallowc                 C   s   |   dd” d S )NrA   ŚtestImportDocumentDeepr  r   r   r   r   r    s    z"MinidomTest.testImportDocumentDeepc                 C   s(   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  s
    ’z)MinidomTest.testImportDocumentTypeShallowc                 C   s(   t  }t }|  tjj|j|jd” d S ©NrA   r  r  r   r   r   ŚtestImportDocumentTypeDeep   s
    ’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   s   |   dd” d S )Nr   ŚtestCloneAttributeShallow©r"  r   r   r   r   r#  6  s    z%MinidomTest.testCloneAttributeShallowc                 C   s   |   dd” d S )NrA   ŚtestCloneAttributeDeepr$  r   r   r   r   r%  9  s    z"MinidomTest.testCloneAttributeDeepc                 C   sJ   t d}|j}|  |jtj” | |”}|  |j|jkoB|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   s   |   dd” d S )Nr   ŚtestClonePIShallow©r&  r   r   r   r   r'  D  s    zMinidomTest.testClonePIShallowc                 C   s   |   dd” d S )NrA   ŚtestClonePIDeepr(  r   r   r   r   r)  G  s    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 }	nNt |d
d ” |jdd}W d    n1 s®0    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$   r*  r+  r`   r  r,  r   r   r   ŚhandleW  s
    z;MinidomTest.check_clone_node_entity.<locals>.Handler.handleN)Ś__name__Ś
__module__Ś__qualname__r.  r   r   r   r   ŚHandlerV  s   r2  Zsmiler+  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_CLONEDr*  r+  r`   r   r  r,  )
r$   Zclone_documentZdocumentr2  Śhandlerr   r   r’   r*  r,  r   r   r   Ścheck_clone_node_entityJ  s,    	
’
*

z#MinidomTest.check_clone_node_entityc                 C   s   |   d” |   d” d S )NFT)r7  r   r   r   r   ŚtestCloneNodeEntityy  s    
zMinidomTest.testCloneNodeEntityc                 C   sī   t d}|j}| | d”” | | d”” |  t|jdkoJ|jjdkd” | ”  |  t|jdko|jjdko|j	|j
u o|j	jdkd” | ”  t d}|j}| | d	”” | ”  |  t|jd
koÜ|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oZ|jjdkd” | 	”  |  t|jdkoŠ|jjdkoŠ|j
jdkoŠ|j
|juoŠ|j
j|ju oŠ|j
jd u oŠ|jj|j
u oŠ|jjd u d	” | ”  d S )
NrR   r9  r:  rś   rB   z1testNormalizeCombineAndNextSibling -- preparationr@   r;  z-testNormalizeCombinedAndNextSibling -- result)r   r;   rU   rT   rF   r&   rH   rE   rI   r<  rJ   r`   rK   rN   rM   r3   r=  r   r   r   Ś"testNormalizeCombineAndNextSibling  s6    
ž
’
ž
żü
ūś
ų	z.MinidomTest.testNormalizeCombineAndNextSiblingc                 C   s¶   t d}|j}| | d”” | | d”” |  t|jdkoJ|jjdkd” | ”  |  t|jdko¤|jjdko¤|j	j
dko¤|j	|ju o¤|j	jd u o¤|j	jd u d” | ”  d S )NrR   r9  r   r@   z1testNormalizeDeleteWithPrevSibling -- preparationrA   z,testNormalizeDeleteWithPrevSibling -- result©r   r;   rU   rT   r&   rH   rE   rI   r<  rJ   r`   rK   rN   rM   r3   r=  r   r   r   Ś"testNormalizeDeleteWithPrevSibling«  s,    
ž
’
ž
ż
ü
śz.MinidomTest.testNormalizeDeleteWithPrevSiblingc                 C   s¶   t d}|j}| | d”” | | d”” |  t|jdkoJ|jjdkd” | ”  |  t|jdko¤|jjdko¤|j	j
dko¤|j	|ju o¤|j	jd u o¤|j	jd u d” | ”  d S )NrR   r   r:  r@   z1testNormalizeDeleteWithNextSibling -- preparationrA   z,testNormalizeDeleteWithNextSibling -- resultr@  r=  r   r   r   Ś"testNormalizeDeleteWithNextSibling½  s,    
ž
’
ž
ż
ü
śz.MinidomTest.testNormalizeDeleteWithNextSiblingc                 C   sÖ   t d}|j}| | d”” | | d”” | | d”” |  t|jdkoZ|jjdkd” | 	”  |  t|jdkoÄ|jjdkoÄ|j
|juoÄ|j
j|ju oÄ|j
jd u oÄ|jj|j
u oÄ|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   r<  rJ   rK   rN   rM   r3   r=  r   r   r   Ś)testNormalizeDeleteWithTwoNonTextSiblingsĻ  s2    
ž
’
žż
üū
łz5MinidomTest.testNormalizeDeleteWithTwoNonTextSiblingsc                 C   sę   t d}|j}| | d”” | | d”” | | d”” | | d”” | | d”” |  t|jdkoz|jjdkd” | ”  |  t|jdkoŌ|jjdkoŌ|j	|j
u oŌ|j	jdkoŌ|j	jd u oŌ|j	jd u d	” | ”  d S )
NrR   r   r:  Zfourthé   z,testNormalizeDeleteAndCombine -- preparationrA   Zsecondfourthz'testNormalizeDeleteAndCombine -- result)r   r;   rU   rT   r&   rH   rE   rI   r<  rJ   rK   r`   rM   rN   r3   r=  r   r   r   ŚtestNormalizeDeleteAndCombineć  s2    
ž
’
ž
ż
ü
śz)MinidomTest.testNormalizeDeleteAndCombinec                 C   s6  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   r<  r`   rN   rM   r3   r=  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_NODEr<  r3   )r$   r	   re   r   r   r   ŚtestBug07778847  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   r<  r&   rN   ©r$   r	   r(   r   r   r   ŚtestBug1433694?  s    ’zMinidomTest.testBug1433694c                 C   sj   t d}|j}|j\}}}|  |j|u oX|jd u oX|j|u oX|j|u oX|jd u oX|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   rL  G  s    ’žżü
ūzMinidomTest.testSiblingsc                 C   sr   t d}|j}|jd }|j\}}|jd }|  |j|u o`|j|u o`|j|u o`|j|u o`|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   rM  U  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	   ZchildrenZdocelemr   r   r   ŚtestNodeListItemd  s    ’žżūzMinidomTest.testNodeListItemc                 C   sØ   t d}|  | ” d” |  | d”d” |  | d”d” |  | d”d” |  | d	”d
 d	”” tjdkr|  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>©r@   rD   rD  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   r   rL   ŚencodeŚpyexpatŚversion_inforf   r   ŚUnicodeDecodeErrorr3   r-   r   r   r   ŚtestEncodingsp  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 )
NrO  rP  )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   )r4  Ścalledr-  r   r   r   r.    s    z"MinidomTest.UserDataHandler.handleN)r/  r0  r1  rX  r.  r   r   r   r   r5    s   r5  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getUserDatar4  r5  rż   rX  r3   )r$   r   Śnr6  Ś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   sb  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ov|j	dkov|j
dkov|jdkov|jd u ov|jdkov| d”d u ov| d”d u ov| d” |”ov| dd” |”ov|d  |”ov|d  |”” | |dd	”}|  |jd	koX|j	d	koX|j
d
koX|jdkoX|jdkoX|jdkoX| d”d u oX| d”d u oX| d”d u oX| dd”d u oX| d	” |”oX| dd
” |”oX|d	  |”oX|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ć   Śvr^  r\  )r^  r\  śhttp://xml.python.org/ns2zp:drŖ   Śp)rc  rŖ   r®   Zxmlns)r   r;   rh   r`  r   r   rŹ   r&   r  r_   r§   r¦   rØ   rk   r|   rŽ   r   rj   rä   rf   r_  ra  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od|jdkod|j	d u od|j
tjjkod|jd u od|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ov|jd	kov|j	d u ov|j
tjjkov|jd u ov|j |”” |  ||” | ”  d S )
NrR   rn   r^  rć   rc  zp:cr\  rd  rŖ   )r   r;   r`  r   r   rŹ   r&   r©   r_   r§   r¦   rØ   r   rŽ   ra  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  r`  r3   rJ  r   r   r   ŚtestRenameOther:  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ć   Śabr\  Ścabrg  rŖ   rF  ŚyŚzZcabd)r   r;   rE   r   rĒ   r   rH  r+   rU   rT   rG   ŚcreateCDATASectionr^   rF   rc   ŚcreateProcessingInstructionŚremoveChild)r$   r	   rP   re   ŚsplitterŚtext2rF  r   r   r   ŚtestWholeTextD  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   ŚtestPatch1094164h  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 oŅt|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ć   r\  )r   r;   rJ   rK   rN   rG   rT   rm  )r	   rP   Śtext1rq  rp  r   r   r   Śsetupr  s    z/MinidomTest.testReplaceWholeText.<locals>.setupznew contentrŖ   rB   rj  rD  r   r@   )ZreplaceWholeTextr+   r&   rH   rE   )r$   ru  r	   rP   rt  rp  rq  re   r   r   r   ŚtestReplaceWholeTextq  s"    



’z MinidomTest.testReplaceWholeTextc                 C   sv   t d}|j}|j}|  |jd u o.|jtjjk” d 	” }|D ]2}| 
|”}|j}|  t|dol|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   s@  t d}|j}| d”}| d”}|  | d”d u oB|j oB|j ” | d” |  | | d””op|jop|j ” | d” |  | | d””o¬| | d””o¬|jo¬|j” | d”}d|_	| 
|” |  | d”d u o| | d””o|j o|jo|j ” | |tjjd” |  | | d””o8|j” d S )Nz<doc a1='v' a2='w'/>rą   rį   rb  ŚwŚan)r   r;   r|   r&   ŚgetElementByIdr   r   rŽ   ZcreateAttributerk   ŚsetAttributeNoder`  r   r   rŹ   )r$   r	   r®   rą   rį   Śa3r   r   r   ŚtestSetIdAttributeÆ  sN    

’ž
’ž
’žż

’žżü’zMinidomTest.testSetIdAttributec                 C   sr  d}d}t d| d | d }|j}| |d”}| |d”}|  | d”d u o^|j o^|j ” | |d” |  | | d””o|jo|j ” | |d” |  | | d””oĢ| | d	””oĢ|joĢ|j” | |d”}d|_	| 
|” |  | | d	””” |  |j ” |  |j” |  |j ” |  | d”d u ” | |tjjd
” |  | | d	””oj|j” d S ©Nzhttp://xml.python.org/ns1rc  z<doc xmlns:ns1='z' xmlns:ns2='z' ns1:a1='v' ns2:a2='w'/>rą   rį   rb  r|  r}  )r   r;   rä   r&   r~  r   ZsetIdAttributeNSrŽ   ŚcreateAttributeNSrk   r  r`  r   r   rŹ   ©r$   ZNS1ZNS2r	   r®   rą   rį   r  r   r   r   ŚtestSetIdAttributeNSĪ  sZ    ’’žž’ž’ž’žż
’z MinidomTest.testSetIdAttributeNSc                 C   sn  d}d}t d| d | d }|j}| |d”}| |d”}|  | d”d u o^|j o^|j ” | |” |  | | d””o|jo|j ” | |” |  | | d””oČ| | d	””oČ|joČ|j” | |d”}d|_	| 
|” |  | | d	””” |  |j ” |  |j” |  |j ” |  | d”d u ” | |tjjd
” |  | | d	””of|j” d S r  )r   r;   rä   r&   r~  r   ZsetIdAttributeNoderŽ   r  rk   r  r`  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 ]Z}|j |”}|j |”}|  |j|j” |  |j|j” |  |j|j” | ||f” qčtt|j
D ]\}|j
 |”}	|j
 |”}
|  |	j|
j” |  |	j|
j” |  |	j|
j” | |	|
f” qR|jtjkrā|  |j |”” |  |j |”” tt|jD ] }| |j| |j| f” qšq
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  sD    




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   ŚtestPickledDocument;  s
    
zMinidomTest.testPickledDocumentc                 C   s"   t t}t |”}|  ||” d S r"   )r   r  ŚcopyŚdeepcopyr  r  r   r   r   ŚtestDeepcopiedDocumentB  s    
z"MinidomTest.testDeepcopiedDocumentc                 C   s(   t  }| | d”” |  t|j” d S )Nzfoo--bar)r   rU   r^   rf   Ś
ValueErrorrL   r-   r   r   r   Ś(testSerializeCommentNodeWithDoubleHyphenG  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   ŚtestEmptyXMLNSValueM  s    zMinidomTest.testEmptyXMLNSValuec                 C   sT   t jdkr|  td”}n|  td”}| td W d    n1 sF0    Y  d S )NrQ  zsyntax errorzUnsupported syntaxzE<element xmlns:abc="http:abc.com/de f g/hi/j k"><abc:foo /></element>)rS  rT  ZassertRaisesRegexr   r  r   )r$   Ścontextr   r   r   Ś!testExceptionOnSpacesInXMLNSValueS  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   ro  rH   rE   r#   )r$   r	   Z	title_tagZnum_children_beforeZnum_children_afterr   r   r   ŚtestDocRemoveChild\  s    

zMinidomTest.testDocRemoveChildc                 C   s   t t}| dd”}d|_d S )Nrk  rl  Zcrash)r   r2   rn  rl   )r$   r	   rĖ   r   r   r   Ś"testProcessingInstructionNameErrore  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_orderl  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_ordereds  s    z.MinidomTest.test_toxml_with_attributes_orderedc                 C   s    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_orderedx  s
    
’z4MinidomTest.test_toprettyxml_with_attributes_orderedc                 C   s    d}t |}|  | ” d” d S )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  s
    
’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/  r0  r1  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#  r%  r&  r'  r)  r7  r8  r>  r?  rA  rB  rC  rE  rG  rI  rK  rL  rM  rN  rV  rW  r5  r]  ra  re  rf  rh  rr  rs  rv  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__)N)r  r  r  r%   r   ZunittestrS  Zxml.dom.minidomr   r   r   r   r   r   Zxml.parsers.expatr   Zfindfiler2   r  r   r   r   ZTestCaser    r/  Śmainr   r   r   r   Ś<module>   s:   
            d