Ë
    oj©  ã                  ót  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ  G d„ d	ej                  «      Z G d
„ de
«      Z G d„ de
«      Z G d„ de
«      Z G d„ de
«      Z G d„ de
«      Z G d„ de
«      Z G d„ de
«      Z G d„ de
«      Z G d„ de
«      Z G d„ de
«      Z G d„ de
«      Zy )!z;
Some fairly inadequate testcases for Twisted XML support.
é    )Úannotations)Úreload)ÚBytesIO)ÚLiteral)ÚTestCase)Ú
domhelpersÚmicrodomÚsuxc                  ó,   — e Zd Zdd„Zdd„Zdd„Zd	d„Zy)
ÚSux0rc                ó   — g | _         y )N©Útokens©Úselfs    ú;/usr/lib/python3/dist-packages/twisted/web/test/test_xml.pyÚ__init__zSux0r.__init__   s   € ð ð 	�ó    c                óR   — | j                   D �cg c]  }|d   dk(  sŒ|‘Œ c}S c c}w )Nr   Ústartr   )r   Útokens     r   ÚgetTagStartszSux0r.getTagStarts   s%   € Ø#'§;¡;ÖF˜%°%¸±(¸gÓ2E’ÒFÐFùÒFs   �$�$c                ó@   — | j                   j                  d||f«       y )Nr   ©r   Úappend)r   ÚnameÚattrss      r   ÚgotTagStartzSux0r.gotTagStart   s   € Ø�‰×Ñ˜G T¨5Ð1Õ2r   c                ó>   — | j                   j                  d|f«       y )NÚtextr   )r   r    s     r   ÚgotTextzSux0r.gotText   s   € Ø�‰×Ñ˜F D˜>Õ*r   N©ÚreturnÚNone)r#   z2list[tuple[Literal['start'], str, dict[str, str]]])r   Ústrr   zdict[str, str]r#   r$   )r    r%   r#   r$   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r!   © r   r   r   r      s   „ óó
Gó3ô+r   r   c                  ó   — e Zd Zdd„Zy)ÚSUXTestsc                ó°   — d}t        «       }|j                  «        |j                  |«       | j                  t	        |j                  «       «      d«       y )Ns   <bork><bork><bork>é   )r   ÚconnectionMadeÚdataReceivedÚassertEqualÚlenr   )r   ÚsÚmss      r   Ú	test_borkzSUXTests.test_bork$   sB   € Ø!ˆÜ‹WˆØ
×ÑÔØ
�‰˜ÔØ×Ñœ˜RŸ_™_Ó.Ó/°Õ3r   Nr"   )r&   r'   r(   r4   r)   r   r   r+   r+   #   s   „ ô4r   r+   c                  ó¤  — e Zd Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Z	d5d„Z
d5d	„Zd5d
„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zd5d„Zg d¢Zd5d„Z d5d„Z!d5d „Z"d5d!„Z#d5d"„Z$d5d#„Z%d5d$„Z&d5d%„Z'd5d&„Z(d5d'„Z)d5d(„Z*d5d)„Z+d5d*„Z,d5d+„Z-d5d,„Z.d5d-„Z/d5d.„Z0d5d/„Z1d5d0„Z2d5d1„Z3d5d2„Z4d5d3„Z5y4)6ÚMicroDOMTestsc           	     ó0  — d}t        j                  |d¬«      }| j                  |j                  «       j	                  «       d«       t        «       }|j                  «       j                  |ddddi d«       | j                  |j                  «       d«       y)zŠ
        Make sure that if there's no top-level node lenient-mode won't
        drop leading text that's outside of any elements.
        zHi orders! <br>Well. <br>T©ÚbeExtremelyLenientz*<html>Hi orders! <br />Well. <br /></html>Ú s*   <html>Hi orders! <br />Well. <br /></html>N©r	   ÚparseStringr0   Ú
firstChildÚtoxmlr   ÚwritexmlÚgetvalue©r   r2   ÚdÚ
byteStreams       r   Útest_leadingTextDroppingz&MicroDOMTests.test_leadingTextDropping-   s„   € ð
 (ˆÜ× Ñ  °tÔ<ˆØ×ÑØ�L‰L‹N× Ñ Ó"Ð$Pô	
ô “Yˆ
Ø	�‰‹×Ñ 
¨B°°B¸¸BÀÔCØ×ÑØ×ÑÓ!Ð#Põ	
r   c           	     ó0  — d}t        j                  |d¬«      }| j                  |j                  «       j	                  «       d«       t        «       }|j                  «       j                  |ddddi d«       | j                  |j                  «       d«       y)z~
        Ensure that no *trailing* text in a mal-formed
        no-top-level-element document(s) will not be dropped.
        z<br>Hi orders!Tr8   z<html><br />Hi orders!</html>r:   s   <html><br />Hi orders!</html>Nr;   rA   s       r   Útest_trailingTextDroppingz'MicroDOMTests.test_trailingTextDropping=   s|   € ð
 ˆÜ× Ñ  °tÔ<ˆØ×Ñ˜Ÿ™›×-Ñ-Ó/Ð1PÔQÜ“Yˆ
Ø	�‰‹×Ñ 
¨B°°B¸¸BÀÔCØ×Ñ˜×,Ñ,Ó.Ð0PÕQr   c                ó’   — d}t        j                  |d¬«      }| j                  |j                  «       j	                  «       d«       y)zp
        A string with nothing that looks like a tag at all should just
        be parsed as body text.
        z
Hi orders!Tr8   z<html>Hi orders!</html>N©r	   r<   r0   r=   r>   ©r   r2   rB   s      r   Útest_noTagszMicroDOMTests.test_noTagsI   s;   € ð
 ˆÜ× Ñ  °tÔ<ˆØ×Ñ˜Ÿ™›×-Ñ-Ó/Ð1JÕKr   c                ó’   — d}t        j                  |d¬«      }| j                  |j                  «       j	                  «       d«       y)zl
        If a document is surrounded by non-xml text, the text should
        be remain in the XML.
        zHi<br> orders!Tr8   z<html>Hi<br /> orders!</html>NrH   rI   s      r   Útest_surroundingCrapz"MicroDOMTests.test_surroundingCrapR   s;   € ð
 ˆÜ× Ñ  °tÔ<ˆØ×Ñ˜Ÿ™›×-Ñ-Ó/Ð1PÕQr   c                ó
  — d}t        j                  |d¬«      }t        j                  |j                  d«      }t        j
                  |d   d«      j                  dd«      }| j                  |j                  d«      d	«       y )
Nal  
              <HTML><BODY>
              <P ALIGN="CENTER">
                <A HREF="http://www.apache.org/"><IMG SRC="/icons/apache_pb.gif"></A>
              </P>

              <P>
                This is an insane set of text nodes that should NOT be gathered under
                the A tag above.
              </P>
              </BODY></HTML>
            é   r8   Úar   z&nbsp;ú Úinsaneéÿÿÿÿ)	r	   r<   r   ÚfindNodesNamedÚdocumentElementÚgatherTextNodesÚreplacer0   Úfind)r   r2   rB   ÚlÚns        r   Útest_caseSensitiveSoonCloserz*MicroDOMTests.test_caseSensitiveSoonCloser[   sq   € ðˆô × Ñ  °qÔ9ˆÜ×%Ñ% a×&7Ñ&7¸Ó=ˆÜ×&Ñ& q¨¡t¨QÓ/×7Ñ7¸À#ÓFˆØ×Ñ˜Ÿ™ Ó)¨2Õ.r   c                ó²   — d}t        j                  |d¬«      }| j                  |j                  |j                  j	                  «       j
                  «       y)zŠ
        Test that C{parentNode} attributes are set to meaningful values when
        we are parsing HTML that lacks a root node.
        z
<br/><br/>rN   r8   N©r	   r<   ÚassertIdenticalrT   r=   Ú
parentNoderI   s      r   Útest_lenientParentingz#MicroDOMTests.test_lenientParentingm   sI   € ð ˆÜ× Ñ  °qÔ9ˆØ×ÑØ×Ñ˜q×0Ñ0×;Ñ;Ó=×HÑHõ	
r   c                ó²   — d}t        j                  |d¬«      }| j                  |j                  |j                  j	                  «       j
                  «       y)z�
        Test that the C{parentNode} attribute is set to a meaningful value
        when we parse an HTML document that has a non-Element root node.
        ÚHellorN   r8   Nr\   rI   s      r   Útest_lenientParentSinglez&MicroDOMTests.test_lenientParentSingley   sI   € ð
 ˆÜ× Ñ  °qÔ9ˆØ×ÑØ×Ñ˜q×0Ñ0×;Ñ;Ó=×HÑHõ	
r   c                ó¢   — d}t        j                  |d¬«      }t        j                  |«      }| j	                  |j                  d«      d«       y )Nz
                <HTML>
                    This HTML goes between Stupid <=CrAzY!=> Dumb.
                </HTML>
            rN   r8   ú>rR   )r	   r<   r   rU   ÚassertNotEqualrW   ©r   r2   rB   rY   s       r   Útest_unEntitieszMicroDOMTests.test_unEntities„   sE   € ðˆô
 × Ñ  °qÔ9ˆÜ×&Ñ& qÓ)ˆØ×Ñ˜AŸF™F 3›K¨Õ,r   c                ób   — | j                  t        j                  t        j                  d«       y )Nr:   )ÚassertRaisesr
   Ú
ParseErrorr	   r<   r   s    r   Útest_emptyErrorzMicroDOMTests.test_emptyErrorŽ   s   € Ø×Ñœ#Ÿ.™.¬(×*>Ñ*>ÀÕCr   c                ó¬   — d}t        j                  |«      }| j                  t        j                  |j
                  «      j                  «       d«       y )Nz”
        <test>
         <it>
          <is>
           <a>
            test
           </a>
          </is>
         </it>
        </test>
        Útest)r	   r<   r0   r   rU   rT   ÚstriprI   s      r   Útest_tameDocumentzMicroDOMTests.test_tameDocument‘   sF   € ð
ˆô × Ñ  Ó#ˆØ×Ñœ×3Ñ3°A×4EÑ4EÓF×LÑLÓNÐPVÕWr   c                ó¬   — d}t        j                  |d¬«      }t        j                  |j                  d«      }| j                  t        |«      d«       y )Na  
        <html>
        <head><title> I send you this message to have your advice!!!!</titl e
        </headd>

        <body bgcolor alink hlink vlink>

        <h1><BLINK>SALE</blINK> TWENTY MILLION EMAILS & FUR COAT NOW
        FREE WITH `ENLARGER'</h1>

        YES THIS WONDERFUL AWFER IS NOW HERER!!!

        <script LANGUAGE="javascript">
function give_answers() {
if (score < 70) {
alert("I hate you");
}}
        </script><a href=/foo.com/lalal name=foo>lalal</a>
        </body>
        </HTML>
        rN   r8   Úblink)r	   r<   r   rS   rT   r0   r1   )r   r2   rB   rX   s       r   Útest_awfulTagSoupzMicroDOMTests.test_awfulTagSoup    sI   € ðˆô* × Ñ  °qÔ9ˆÜ×%Ñ% a×&7Ñ&7¸ÓAˆØ×Ñœ˜Q› Õ#r   c                óV  — d}t        j                  |d¬«      }| j                  |j                  «       j                  «       j                  «       j                  d«       | j                  |j                  «       j                  d«      d   j                  «       j                  d«       y )Nzä
        <script>(foo < bar) and (bar > foo)</script>
        <script language="javascript">foo </scrip bar </script>
        <script src="foo">
        <script src="foo">baz</script>
        <script /><script></script>
        rN   r8   z(foo < bar) and (bar > foo)Úscriptzfoo </scrip bar )r	   r<   r0   r=   ÚdataÚgetElementsByTagNamerI   s      r   Útest_scriptLeniencyz!MicroDOMTests.test_scriptLeniencyº   sŠ   € ðˆô × Ñ  °qÔ9ˆØ×ÑØ�L‰L‹N×%Ñ%Ó'×2Ñ2Ó4×9Ñ9Ð;Xô	
ð 	×ÑØ�L‰L‹N×/Ñ/°Ó9¸!Ñ<×GÑGÓI×NÑNØõ	
r   c                ó¢  — d}| j                  t        j                  |d¬«      j                  «       j	                  «       |«       d}| j                  t        j                  |d¬«      j                  «       j	                  «       |«       d}| j                  t        j                  |d¬«      j                  «       j	                  «       |«       y )Nz<script><!-- lalal --></script>rN   r8   z"<script><![CDATA[lalal]]></script>z:<script> // <![CDATA[
        lalal
        //]]></script>)r0   r	   r<   r=   r>   ©r   r2   s     r   Útest_scriptLeniencyIntelligencez-MicroDOMTests.test_scriptLeniencyIntelligenceË   s²   € ð 2ˆØ×ÑÜ× Ñ  °qÔ9×DÑDÓF×LÑLÓNÐPQô	
ð 5ˆØ×ÑÜ× Ñ  °qÔ9×DÑDÓF×LÑLÓNÐPQô	
ðˆð 	×ÑÜ× Ñ  °qÔ9×DÑDÓF×LÑLÓNÐPQõ	
r   c                óœ  — d}|j                  «       j                  dd«      }t        j                  |dd¬«      }t        j                  |dd¬«      }t        j                  |dd¬«      }t        j                  |dd¬«      }t        j                  |dd¬«      }| j	                  |j
                  j                  «       |«       | j                  |j                  |«      |j                  «       ›d|j                  «       ›�«       | j                  |j                  |«      |j                  «       ›d|j                  «       ›�«       | j                  |j                  |«      |j                  «       ›d|j                  «       ›�«       | j                  |j                  |«      |j                  «       ›d|j                  «       ›�«       y )NzH<eNcApSuLaTe><sUxor></sUxor><bOrk><w00T>TeXt</W00t></BoRk></EnCaPsUlAtE>r    ÚTeXtrN   ©ÚcaseInsensitiveÚpreserveCaser   z != )	ÚlowerrV   r	   r<   r0   rT   r>   Ú
assertTrueÚisEqualToDocument)r   r2   Ús2rB   Úd2Úd3Úd4Úd5s           r   Útest_preserveCasezMicroDOMTests.test_preserveCaseÝ   sh  € ØVˆØ�W‰W‹Y×Ñ˜v vÓ.ˆä× Ñ  °AÀAÔFˆÜ×!Ñ! !°QÀQÔGˆô ×!Ñ! "°aÀaÔHˆÜ×!Ñ! "°aÀaÔHˆÜ×!Ñ! "°aÀaÔHˆð
 	×Ñ˜×*Ñ*×0Ñ0Ó2°AÔ6Ø�‰˜×+Ñ+¨BÓ/°A·G±G³I°=ÀÀRÇXÁXÃZÀNÐ1SÔTØ�‰˜×,Ñ,¨RÓ0°R·X±X³Z°NÀ$ÀrÇxÁxÃzÀnÐ2UÔVð 	�‰˜×,Ñ,¨RÓ0°R·X±X³Z°NÀ$ÀrÇxÁxÃzÀnÐ2UÔVØ�‰˜×,Ñ,¨RÓ0°R·X±X³Z°NÀ$ÀrÇxÁxÃzÀnÐ2UÕVr   c                óÎ   — d}t        j                  |«      }|j                  }| j                  |j	                  d«      d«       | j                  |j	                  d«      d«       y )Nz<test a="a" b='b' />rO   Úb©r	   r<   rT   r0   ÚgetAttribute©r   r2   rB   Úes       r   Útest_differentQuotesz"MicroDOMTests.test_differentQuotesõ   sT   € Ø$ˆÜ× Ñ  Ó#ˆØ×ÑˆØ×Ñ˜Ÿ™¨Ó,¨cÔ2Ø×Ñ˜Ÿ™¨Ó,¨cÕ2r   c                óÎ   — d}t        j                  |«      }|j                  }| j                  |j	                  d«      d«       | j                  |j	                  d«      d«       y )Nz<test 
a="a"
	b="#b" />rO   rŠ   z#br‹   r�   s       r   Útest_LinebreakszMicroDOMTests.test_Linebreaksü   sT   € Ø(ˆÜ× Ñ  Ó#ˆØ×ÑˆØ×Ñ˜Ÿ™¨Ó,¨cÔ2Ø×Ñ˜Ÿ™¨Ó,¨dÕ3r   c                óp   — dD ]1  }| j                  t        j                  t        j                  |«       Œ3 y )N)z<test>z<test> </tset>z</test>)ri   r	   ÚMismatchedTagsr<   ry   s     r   Útest_mismatchedTagsz!MicroDOMTests.test_mismatchedTags  s1   € Ø6ò 	PˆAØ×Ñœh×5Ñ5´x×7KÑ7KÈQÕOñ	Pr   c                ó°  — d}t        j                  |«      }|j                  }| j                  |j                  d«       |j
                  d   }| j                  t        |t         j                  «      «       | j                  |j                  d«       |j                  «       }| j                  ||u«       | j                  |j                  «       d«       y )Nz<bar><!--<foo />--></bar>Úbarr   ú<foo />z<!--<foo />-->)r	   r<   rT   r0   ÚnodeNameÚ
childNodesr�   Ú
isinstanceÚCommentÚvalueÚ	cloneNoder>   )r   r2   rB   rŽ   ÚcÚc2s         r   Útest_commentzMicroDOMTests.test_comment  s¢   € Ø'ˆÜ× Ñ  Ó#ˆØ×ÑˆØ×Ñ˜Ÿ™ UÔ+Ø�L‰L˜‰OˆØ�‰œ
 1¤h×&6Ñ&6Ó7Ô8Ø×Ñ˜Ÿ™ )Ô,Ø�[‰[‹]ˆØ�‰˜ ˜Ô$Ø×Ñ˜Ÿ™›Ð%5Õ6r   c                óp  — t        j                  d«      j                  }|j                  d   }| j	                  t        |t         j                  «      «       | j                  |j                  d«       |j                  «       }| j	                  ||u«       | j                  |j                  «       d«       y )Nz<bar>xxxx</bar>r   Úxxxx)r	   r<   rT   r™   r�   rš   ÚTextr0   rœ   r�   r>   )r   rB   r    Úclones       r   Ú	test_textzMicroDOMTests.test_text  s„   € Ü× Ñ Ð!2Ó3×CÑCˆØ�|‰|˜A‰ˆØ�‰œ
 4¬¯©Ó7Ô8Ø×Ñ˜Ÿ™ VÔ,Ø—‘Ó ˆØ�‰˜ TÐ)Ô*Ø×Ñ˜Ÿ™›¨Õ/r   c                óÊ  — t        j                  d«      j                  j                  }| j	                  t        |«      d«       | j	                  |d   j                  d«       | j	                  |d   j                  d«       | j	                  |d   j                  «       j                  «       d«       |D ]+  }| j                  t        |t         j                  «      «       Œ- y )Nz<b>&amp;&#12AB;</b>é   r   ú&amp;rN   z&#12AB;)r	   r<   rT   r™   r0   r1   ru   r�   r>   r�   rš   ÚEntityReference)r   ÚnodesrY   s      r   Útest_entitieszMicroDOMTests.test_entities  s³   € Ü×$Ñ$Ð%:Ó;×KÑK×VÑVˆØ×Ñœ˜U› QÔ'Ø×Ñ˜˜q™Ÿ™¨Ô0Ø×Ñ˜˜q™Ÿ™¨	Ô2Ø×Ñ˜˜q™×+Ñ+Ó-×3Ñ3Ó5°wÔ?Øò 	EˆAØ�O‰OœJ q¬(×*BÑ*BÓCÕDñ	Er   c                óF  — d}t        j                  |«      j                  j                  d   }| j	                  t        |t         j                  «      «       | j                  |j                  d«       | j                  |j                  «       j                  «       d«       y )Nz<x><![CDATA[</x>
 & foo]]></x>r   z</x>
 & fooz<![CDATA[</x>
 & foo]]>)r	   r<   rT   r™   r�   rš   ÚCDATASectionr0   ru   r�   r>   )r   r2   Úcdatas      r   Ú
test_CDatazMicroDOMTests.test_CData%  sw   € Ø/ˆÜ×$Ñ$ QÓ'×7Ñ7×BÑBÀ1ÑEˆØ�‰œ
 5¬(×*?Ñ*?Ó@ÔAØ×Ñ˜Ÿ™Ð%5Ô6Ø×Ñ˜Ÿ™Ó*×0Ñ0Ó2Ð4PÕQr   c                óØ  — d}d}t        j                  |«      j                  j                  }t        j                  |«      j                  j                  }| j	                  t        |«      d«       t        ||«      D ]j  \  }}| j                  t        |t         j                  «      «       | j	                  |j                  d«       | j                  |j                  |«      «       Œl y )Nz<foo><b/><b /><b
/></foo>z<foo><b/><b/><b/></foo>r-   rŠ   )r	   r<   rT   r™   r0   r1   Úzipr�   rš   ÚElementr˜   ÚisEqualToNode)r   r2   rƒ   rª   Únodes2rY   Ún2s          r   Útest_singletonszMicroDOMTests.test_singletons,  s´   € Ø(ˆØ&ˆÜ×$Ñ$ QÓ'×7Ñ7×BÑBˆÜ×%Ñ% bÓ)×9Ñ9×DÑDˆØ×Ñœ˜U› QÔ'Ü˜ Ó'ò 	1‰EˆAˆrØ�O‰OœJ q¬(×*:Ñ*:Ó;Ô<Ø×Ñ˜QŸZ™Z¨Ô-Ø�O‰O˜AŸO™O¨BÓ/Õ0ñ	1r   c                ó  — d}t        j                  |«      j                  }| j                  |j	                  d«      d«       | j                  |j	                  d«      d «       | j                  |j                  d«      «       | j                  |j                  d«       «       |j                  d«      }| j                  |j                  d«       |j                  dd«       | j                  |j	                  d«      d«       y )Nz<foo a="b" />rO   rŠ   rž   Úfoor–   )
r	   r<   rT   r0   rŒ   r�   ÚhasAttributeÚgetAttributeNoderœ   ÚsetAttribute)r   r2   ÚnoderO   s       r   Útest_attributeszMicroDOMTests.test_attributes7  sÓ   € ØˆÜ×#Ñ# AÓ&×6Ñ6ˆà×Ñ˜×*Ñ*¨3Ó/°Ô5Ø×Ñ˜×*Ñ*¨3Ó/°Ô6Ø�‰˜×)Ñ)¨#Ó.Ô/Ø�‰˜D×-Ñ-¨cÓ2Ð2Ô3Ø×!Ñ! #Ó&ˆØ×Ñ˜Ÿ™ #Ô&à×Ñ˜% Ô'Ø×Ñ˜×*Ñ*¨5Ó1°5Õ9r   c                óþ  — d}t        j                  |«      j                  }| j                  |j                  D �cg c]  }|j
                  ‘Œ c}g d¢«       | j                  |j                  «       j
                  d«       | j                  |j                  «       j
                  d«       | j                  |j                  «       «       | j                  |j                  «       j                  «        «       y c c}w )Nz'<foo><bar /><baz /><bax>foo</bax></foo>)r–   ÚbazÚbaxrÀ   r–   )
r	   r<   rT   r0   r™   r˜   Ú	lastChildr=   r�   ÚhasChildNodesrf   s       r   Útest_childrenzMicroDOMTests.test_childrenE  s¯   € Ø5ˆÜ× Ñ  Ó#×3Ñ3ˆØ×Ñ¨a¯l©lÖ;¨˜!Ÿ*›*Ò;Ò=RÔSØ×Ñ˜Ÿ™›×/Ñ/°Ô7Ø×Ñ˜Ÿ™›×0Ñ0°%Ô8Ø�‰˜Ÿ™Ó)Ô*Ø�‰˜AŸL™L›N×8Ñ8Ó:Ð:Õ;ùò	 <s   »C:c                óà  — d}d}d}t        j                  |«      j                  }t        j                  |«      j                  }t        j                  |«      j                  }|j                  |j	                  «       «       |j                  dd«       |j                  d   }| j                  |j                  d«      d «       | j                  |j                  d«       |j                  t        j                  d«      |«       | j                  |j                  d   j                  d«       | j                  |j                  d	   |«       |j                  D ]  }| j                  |j                  |«       Œ  | j                  |j                  |«      «       |j                  |«       | j                  t!        |j                  «      d	«       | j                  |j                  d   j                  d«       t        j"                  d«      }	|j%                  |	|j'                  «       «       | j                  |j'                  «       |	«       | j                  |j                  |«      «       y )
Nr—   z<foo a="b"><bar/><foo/></foo>z<foo a="b">foo</foo>rO   rŠ   r   r¸   r–   rN   )r	   r<   rT   ÚappendChildr�   r»   r™   r0   rŒ   r˜   ÚinsertBeforer²   r^   r�   r³   ÚremoveChildr1   r£   ÚreplaceChildr=   )
r   r2   Ús1rƒ   rB   Úd1r„   ÚchildrY   Úts
             r   Útest_mutatezMicroDOMTests.test_mutateN  sÊ  € ØˆØ,ˆØ#ˆÜ× Ñ  Ó#×3Ñ3ˆÜ×!Ñ! "Ó%×5Ñ5ˆÜ×!Ñ! "Ó%×5Ñ5ˆà	�‰�a—k‘k“mÔ$Ø	�‰�s˜CÔ Ø—‘˜Q‘ˆØ×Ñ˜×+Ñ+¨CÓ0°$Ô7Ø×Ñ˜Ÿ™¨Ô/à	�‰”x×'Ñ'¨Ó.°Ô6Ø×Ñ˜Ÿ™ a™×1Ñ1°5Ô9Ø×Ñ˜Ÿ™ a™¨%Ô0Ø—‘ò 	.ˆAØ×Ñ˜QŸ\™\¨1Õ-ð	.à�‰˜Ÿ™¨Ó+Ô,à	�‰�eÔØ×Ñœ˜QŸ\™\Ó*¨AÔ.Ø×Ñ˜Ÿ™ a™×1Ñ1°5Ô9ä�M‰M˜%Ó ˆØ	�‰�q˜!Ÿ,™,›.Ô)Ø×Ñ˜Ÿ™›¨Ô+Ø�‰˜Ÿ™¨Ó+Õ,r   c                óÆ   — t        j                  d«      }t        j                  d«      }t        j                  d«      }| j                  t        |j                  ||«       y)z�
        L{Node.replaceChild} raises L{ValueError} if the node given to be
        replaced is not a child of the node C{replaceChild} is called on.
        r—   z<bar />z<baz />N)r	   r<   ri   Ú
ValueErrorrÈ   )r   ÚparentÚorphanÚreplacements       r   Útest_replaceNonChildz"MicroDOMTests.test_replaceNonChildl  sN   € ô
 ×%Ñ% iÓ0ˆÜ×%Ñ% iÓ0ˆÜ×*Ñ*¨9Ó5ˆà×Ñœ* f×&9Ñ&9¸;ÈÕOr   c                ót  — d}d}t        j                  |«      }t        j                  |dd¬«      }t        j                  |dd¬«      }|j                  }| j                  |j	                  «       |j                  d«      «       | j                  |j                  d«      ||j                  «       j	                  «       g«       |j                  }| j                  |j	                  «       |j                  d«      «       | j                  |j                  d«      |g«       | j                  |j                  d	«      |j                  «       j	                  «       g«       | j                  |j                  d«      g «       |j                  }| j                  |j	                  «       |j                  d«      «       | j                  |j                  d
«      ||j                  «       j	                  «       g«       | j                  |j                  d«      ||j                  «       j	                  «       g«       y )Nz,<foo><bar id='me' /><baz><foo /></baz></foo>z,<fOo><bAr id='me' /><bAz><fOO /></bAz></fOo>r   rN   r}   Úmer¸   ÚfOoÚfOOÚFOO)r	   r<   rT   r0   r=   ÚgetElementByIdrv   rÁ   )r   r2   rƒ   rB   r„   r…   Úroots          r   Útest_searchzMicroDOMTests.test_searchw  sÓ  € Ø:ˆØ;ˆÜ× Ñ  Ó#ˆÜ×!Ñ! "°aÀaÔHˆÜ×!Ñ! "°aÀaÔHˆà× Ñ ˆØ×Ñ˜Ÿ™Ó*¨A×,<Ñ,<¸TÓ,BÔCØ×ÑØ×"Ñ" 5Ó)¨D°$·.±.Ó2B×2MÑ2MÓ2OÐ+Pô	
ð ×!Ñ!ˆØ×Ñ˜Ÿ™Ó*¨B×,=Ñ,=¸dÓ,CÔDØ×Ñ˜×0Ñ0°Ó7¸$¸Ô@Ø×ÑØ×#Ñ# EÓ*¨T¯^©^Ó-=×-HÑ-HÓ-JÐ,Kô	
ð 	×Ñ˜×0Ñ0°Ó7¸Ô<à×!Ñ!ˆØ×Ñ˜Ÿ™Ó*¨B×,=Ñ,=¸dÓ,CÔDØ×ÑØ×#Ñ# EÓ*¨T°4·>±>Ó3C×3NÑ3NÓ3PÐ,Qô	
ð 	×ÑØ×#Ñ# EÓ*¨T°4·>±>Ó3C×3NÑ3NÓ3PÐ,Qõ	
r   c                ó€  — d}d}t        j                  |«      }t        j                  |«      }| j                  |j                  d«       | j                  |j	                  «       |«       | j                  |j                  |«      «       | j                  |j                  j                  |j                  «      «       y )Nz`<?xml version="1.0"?><!DOCTYPE foo PUBLIC "baz" "http://www.example.com/example.dtd"><foo></foo>ú<foo/>ú5foo PUBLIC "baz" "http://www.example.com/example.dtd")
r	   r<   r0   Údoctyper>   ÚassertFalser‚   r�   rT   r³   )r   r2   rƒ   rB   r„   s        r   Útest_doctypezMicroDOMTests.test_doctype•  sŸ   € ðð 	
ð
 ˆÜ× Ñ  Ó#ˆÜ×!Ñ! "Ó%ˆØ×ÑØ�I‰IÐNô	
ð 	×Ñ˜Ÿ™› AÔ&Ø×Ñ˜×,Ñ,¨RÓ0Ô1Ø�‰˜×)Ñ)×7Ñ7¸×8JÑ8JÓKÕLr   ))z<img/>z<img />)ú<foo A='b'>x</foo>ú<foo A="b">x</foo>)z<foo><BAR /></foo>z<foo><BAR></BAR></foo>)ú"<foo>hello there &amp; yoyoy</foo>rä   c                ó   — | j                   D ]  \  }}t        j                  |d¬«      }t        j                  |d¬«      }|j                  j	                  «       }| j                  ||«       | j                  |j                  |«      «       Œ� y )Nr   ©r~   )Úsamplesr	   r<   rT   r>   r0   r�   r‚   )r   r2   ÚoutrB   r„   ÚtestOuts         r   Útest_outputzMicroDOMTests.test_output¬  sx   € Ø—l‘lò 	5‰FˆAˆsÜ×$Ñ$ Q¸Ô:ˆAÜ×%Ñ% c¸1Ô=ˆBØ×'Ñ'×-Ñ-Ó/ˆGØ×Ñ˜S 'Ô*Ø�O‰O˜A×/Ñ/°Ó3Õ4ñ	5r   c                ó\   — dD ]'  }| j                  t        t        j                  |«       Œ) y )N)z<foo>&am</foo>z<fooz<f>&</f>z<() />)ri   Ú	Exceptionr	   r<   ry   s     r   Útest_errorszMicroDOMTests.test_errors´  s+   € ØAò 	BˆAØ×Ñœi¬×)=Ñ)=¸qÕAñ	Br   c                óÖ  — d}d}d}d}t        j                  |«      }t        j                  |«      }t        j                  |d¬«      }t        j                  |dd¬«      }t        j                  |dd¬«      }	t        j                  |dd¬«      }
t        j                  |«      j                  j                  «       }| j	                  t         j
                  t         j                  |d¬«       | j                  ||«       | j                  |j                  |«      «       | j                  |j                  |«      «       | j                  |j                  j                  d	«      «       | j                  |
j                  j                  d	«      «       | j                  |j                  j                  «       d
«       | j                  |	j                  j                  «       d«       y )Nz<foo a='b'><BAx>x</bax></FOO>ú<foo a="b"><bax>x</bax></foo>z<FOO a='b'><BAx>x</BAx></FOO>râ   rN   ræ   r}   r   rO   rã   z<foo a="b">x</foo>)r	   r<   rT   r>   ri   r“   r0   r�   r‚   r¹   rà   )r   r2   rƒ   Ús3Ús4rB   r„   r…   r†   r‡   Úd6rè   s               r   Útest_caseInsensitivez"MicroDOMTests.test_caseInsensitive¸  s‡  € Ø+ˆØ,ˆØ,ˆØ!ˆÜ× Ñ  Ó#ˆÜ×!Ñ! "Ó%ˆÜ×!Ñ! "°aÔ8ˆÜ×!Ñ! "°aÀaÔHˆÜ×!Ñ! "°aÀaÔHˆÜ×!Ñ! "°aÀaÔHˆÜ×"Ñ" 1Ó%×5Ñ5×;Ñ;Ó=ˆØ×ÑÜ×#Ñ#¤X×%9Ñ%9¸1Èað 	ô 	
ð 	×Ñ˜˜bÔ!Ø�‰˜×+Ñ+¨BÓ/Ô0Ø�‰˜×+Ñ+¨BÓ/Ô0Ø�‰˜×*Ñ*×7Ñ7¸Ó<Ô=Ø×Ñ˜×+Ñ+×8Ñ8¸Ó=Ô>Ø×Ñ˜×+Ñ+×1Ñ1Ó3Ð5IÔJØ×Ñ˜×+Ñ+×1Ñ1Ó3Ð5IÕJr   c                ó  — d}t        j                  |«      }| j                  |j                  j	                  «        |j                  j
                  «       | j                  |j                  t        j                  d«      «      «       y )Nz<hello>
        </hello>z<hello></hello>)r	   r<   r�   rT   rÂ   r™   r‚   rI   s      r   Útest_eatingWhitespacez#MicroDOMTests.test_eatingWhitespaceÏ  sm   € ðˆä× Ñ  Ó#ˆØ�‰Ø×!Ñ!×/Ñ/Ó1Ð1°1×3DÑ3D×3OÑ3Oô	
ð 	�‰˜×+Ñ+¬H×,@Ñ,@ÐARÓ,SÓTÕUr   c                ó2  — d}dD ]O  \  }}t        j                  |› d|› d�d¬«      }| j                  |j                  j	                  «       d|z  «       ŒQ t        j                  dd¬«      }| j                  |j                  j	                  «       d	«       y )
Nz<?xml version='1.0'?>))ú&r¨   )z& z&amp; )r¨   r¨   )z&hello monkeyz&amp;hello monkeyz<pre>z</pre>rN   r8   z<pre>%s</pre>z<t>hello & there</t>z<t>hello &amp; there</t>©r	   r<   r0   rT   r>   )r   ÚprefixÚiÚorB   s        r   Útest_lenientAmpersandz#MicroDOMTests.test_lenientAmpersandØ  s™   € Ø(ˆð
ò 	M‰DˆAˆqô ×$Ñ$¨ x¨u°Q°C°vÐ%>ÐSTÔUˆAØ×Ñ˜Q×.Ñ.×4Ñ4Ó6¸È!Ñ8KÕLð	Mô × Ñ Ð!7ÈAÔNˆØ×Ñ˜×*Ñ*×0Ñ0Ó2Ð4NÕOr   c                ó¢   — t        j                  dd¬«      }| j                  |j                  j	                  «       j                  «       d«       y )Nz3<?xml version='1.0'?><bar><xA><y>c</Xa> <foo></bar>rN   r8   z<xa><y>c</y></xa>)r	   r<   r0   rT   r=   r>   )r   rB   s     r   Útest_insensitiveLenientz%MicroDOMTests.test_insensitiveLenientç  sC   € ä× Ñ ØAÐVWô
ˆð 	×Ñ˜×*Ñ*×5Ñ5Ó7×=Ñ=Ó?ÐATÕUr   c                ó’   — d}t        j                  |d¬«      }d}|j                  j                  «       }| j	                  ||«       y )Nz<ul><li>foo<li>bar<li>baz</ul>rN   r8   z-<ul><li>foo</li><li>bar</li><li>baz</li></ul>©r	   r<   rT   r>   r0   ©r   r2   rB   ÚexpectedÚactuals        r   Útest_laterCloserSimplez$MicroDOMTests.test_laterCloserSimpleî  sB   € Ø,ˆÜ× Ñ  °qÔ9ˆØBˆØ×"Ñ"×(Ñ(Ó*ˆØ×Ñ˜ 6Õ*r   c                ó’   — d}t        j                  |d¬«      }d}|j                  j                  «       }| j	                  ||«       y )Nz<DL><p><DT>foo<DD>bar</DL>rN   r8   z(<dl><p></p><dt>foo</dt><dd>bar</dd></dl>r   r  s        r   Útest_laterCloserCaseInsensitivez-MicroDOMTests.test_laterCloserCaseInsensitiveõ  sB   € Ø(ˆÜ× Ñ  °qÔ9ˆØ=ˆØ×"Ñ"×(Ñ(Ó*ˆØ×Ñ˜ 6Õ*r   c                ó’   — d}d}t        j                  |d¬«      }|j                  j                  «       }| j	                  ||«       y )NzK<dl><dt>word<dd>definition<dt>word<dt>word<dd>definition<dd>definition</dl>zi<dl><dt>word</dt><dd>definition</dd><dt>word</dt><dt>word</dt><dd>definition</dd><dd>definition</dd></dl>rN   r8   r   )r   r2   r  rB   r  s        r   Útest_laterCloserDLz MicroDOMTests.test_laterCloserDLü  sN   € ðð 	
ðð 	ô × Ñ  °qÔ9ˆØ×"Ñ"×(Ñ(Ó*ˆØ×Ñ˜ 6Õ*r   c                óÂ  ‡— dd l Šd}d}d}dˆfd„}t        j                   ||j                  d«      «      «      }t        j                  |j                  d«      «      }t        j                  |«      }| j	                  |j                  |«      «       | j	                  |j                  |«      «       t        j                  |«      }t        j                   ||«      «      }t        j                  |«      }| j	                  |j                  |«      «       | j	                  |j                  |«      «       t        j                  d«      }d}	t        j                  «       j                  d	d
¬«      j                  }
|j                  }|j                  |
«       |j                  |j                  d	«      «       | j                  |j                  «       |	dz   «       y )Nr   z<foo><bar><baz /></bar></foo>ub   <?xml version="1.0" encoding="UCS-2" ?>
<JAPANESE>
<TITLE>å°‚é–€å®¶ãƒªã‚¹ãƒˆ </TITLE></JAPANESE>s®   ÿþ< ? x m l   v e r s i o n = " 1 . 0 "   e n c o d i n g = " U C S - 2 "   ? >  
 < J A P A N E S E >  
 < T I T L E > \€•¶[ê0¹0È0  < / T I T L E > < / J A P A N E S E > c                óŠ   •— t        t        | «      dz  «      dz   } ‰j                  d|z   g‰j                  d|z   | «      ¢­Ž S )Nr§   ÚHú<rd   )r%   r1   ÚpackÚunpack)r2   ÚfmtÚstructs     €r   ÚreverseBytesz9MicroDOMTests.test_unicodeTolerance.<locals>.reverseBytes  sC   ø€ Ü”c˜!“f ‘kÓ" SÑ(ˆCØ�6—;‘;˜s S™yÐG¨6¯=©=¸¸s¹ÀAÓ+FÒGÐGr   zUTF-16rÝ   z<?xml version="1.0"?>u   âˆšrN   ©Úrawu#   <foo><div>âˆš</div><!--âˆš--></foo>)r2   Úbytesr#   r  )r  r	   r<   Úencoder�   r‚   Úlmxr    r¼   rT   rÅ   ÚcreateCommentr0   r>   )r   r2   ÚjÚj2r  ÚurdÚudÚsdÚj3ÚhdrÚdivÚder  s               @r   Útest_unicodeTolerancez#MicroDOMTests.test_unicodeTolerance  s†  ø€ Ûà+ˆðNð 	
ð
Pð 	õ	Hô ×"Ñ"¡<°·±¸Ó0BÓ#CÓDˆÜ×!Ñ! !§(¡(¨8Ó"4Ó5ˆÜ×!Ñ! !Ó$ˆØ�‰˜×,Ñ,¨RÓ0Ô1Ø�‰˜×,Ñ,¨SÓ1Ô2Ü×!Ñ! !Ó$ˆÜ×"Ñ"¡<°Ó#3Ó4ˆÜ×!Ñ! "Ó%ˆØ�‰˜×,Ñ,¨RÓ0Ô1Ø�‰˜×,Ñ,¨SÓ1Ô2ô ×!Ñ! (Ó+ˆØ%ˆÜ�l‰l‹n×!Ñ! (°Ð!Ó2×7Ñ7ˆØ×ÑˆØ
�‰�sÔØ
�‰�r×'Ñ'¨Ó1Ô2Ø×ÑØ�H‰H‹J˜ÐJÑJõ	
r   c                ó"  — ddddœ}|j                  «       D ]v  }t        j                  |«      j                  }t	        j
                  |d«      }| j                  t        |«      ||   «       |sŒY| j                  t        |d   d«      «       Œx y )Nr-   r   rN   )z:<foo><bar /><bar unf='1' /><bar>asdfadsf</bar><bam/></foo>z<foo>asdf</foo>z!<foo><bar><bar></bar></bar></foo>r–   ÚtagName)
Úkeysr	   r<   rT   r   ÚnamedChildrenr0   r1   r�   Úhasattr)r   ÚtestsrÌ   r¼   Úresults        r   Útest_namedChildrenz MicroDOMTests.test_namedChildren:  sƒ   € àMNØ Ø12ñ
ˆð
 —‘“ò 	?ˆAÜ×'Ñ'¨Ó*×:Ñ:ˆDÜ×-Ñ-¨d°EÓ:ˆFØ×ÑœS ›[¨%°©(Ô3ÚØ—‘¤¨¨q©	°9Ó =Õ>ñ	?r   c                óº  — d}t        j                  |«      j                  }|j                  d¬«      }| j	                  ||«       | j                  t        |j                  «      t        |j                  «      «       |j                  «       |j                  «       }}| j	                  ||«       | j                  t        |j                  «      t        |j                  «      «       | j	                  |j                  «       |j                  «       «       | j                  ||j                  «       «       | j                  |j                  |j                  «       y )Nrï   rN   ©Údeep)r	   r<   rT   r�   ÚfailIfEqualsr0   r1   r™   r=   r>   Ú	namespace)r   r2   r¼   r¤   Úc1rŸ   s         r   Útest_cloneNodezMicroDOMTests.test_cloneNodeG  sö   € Ø+ˆÜ×#Ñ# AÓ&×6Ñ6ˆØ—‘ A�Ó&ˆØ×Ñ˜$ Ô&Ø×Ñœ˜TŸ_™_Ó-¬s°5×3CÑ3CÓ/DÔEØ—‘Ó" E×$4Ñ$4Ó$6ˆBˆØ×Ñ˜"˜bÔ!Ø×Ñœ˜RŸ]™]Ó+¬S°·±Ó-?Ô@Ø×Ñ˜"Ÿ-™-›/¨2¯=©=«?Ô;Ø×Ñ˜˜EŸK™K›MÔ*Ø×Ñ˜Ÿ™¨¯©Õ9r   c                óª  — d}t        j                  |«      }|j                  d¬«      }| j                  ||«       | j	                  t        |j                  «      t        |j                  «      «       | j	                  ||j                  «       «       | j                  |j                  |«      «       | j                  |j                  |«      «       y )Nz˜<?xml version="1.0"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><foo></foo>rN   r+  )
r	   r<   r�   r-  r0   r1   r™   r>   r�   r‚   )r   r2   r¼   r¤   s       r   Útest_cloneDocumentz MicroDOMTests.test_cloneDocumentT  s§   € ðTð 	
ô ×#Ñ# AÓ&ˆØ—‘ A�Ó&ˆØ×Ñ˜$ Ô&Ø×Ñœ˜TŸ_™_Ó-¬s°5×3CÑ3CÓ/DÔEØ×Ñ˜˜EŸK™K›MÔ*à�‰˜×/Ñ/°Ó5Ô6Ø�‰˜×.Ñ.¨uÓ5Õ6r   c                óN  — t        j                  d«      }t        j                  |«      }|j                  d«       |j	                  d¬«      }d|j                  «       d<   |j                  «        |j                  dd¬«       d	}| j                  ||j                  «       «       y )
NÚpr¸   rž   )rO   Úzr–   Úy)rž   zF<p>foo<b a="c"><foo z="foo"></foo><foo></foo><bar c="y"></bar></b></p>)	r	   r²   r  r    rŠ   r¸   Úaddr0   r>   )r   rY   r  rŠ   r2   s        r   Útest_LMXzMicroDOMTests.test_LMXd  s|   € Ü×Ñ˜SÓ!ˆÜ�l‰l˜1‹oˆØ�‰�ŒØ�E‰E�CˆE‹LˆØˆ�‰‹�‰Ø	�‰ŒØ	�‰ˆe�sˆÔàTˆØ×Ñ˜˜AŸG™G›IÕ&r   c                óD   — t        j                  d«      }t        |«       y)z9
        Returns a dictionary which is hashable.
        r4  N)r	   r²   Úhash)r   rY   s     r   Ú	test_dictzMicroDOMTests.test_dictp  s   € ô ×Ñ˜SÓ!ˆÜˆQ�r   c                ó¤   — d}d}t        j                  |«      }| j                  ||«       | j                  t        j                  |«      |«       y )Nz&'some "stuff"', <what up?>z/&amp;'some &quot;stuff&quot;', &lt;what up?&gt;)r	   Úescaper0   Úunescape)r   r  ÚcookedÚesc1s       r   Útest_escapingzMicroDOMTests.test_escapingw  sE   € à-ˆØBˆÜ�‰˜sÓ#ˆØ×Ñ˜˜vÔ&Ø×Ñœ×*Ñ*¨4Ó0°#Õ6r   c                óì  — d}t        j                  |«      }|j                  «       }| j                  |j                  j
                  d«       | j                  |j                  j                  d«      d   j
                  d«       | j                  |j                  j                  d«      d   j                  dd«      d«       t        j                  |«      }| j                  |j                  j
                  d«       | j                  |j                  j                  d«      d   j
                  d«       | j                  |j                  j                  d«      d   j                  dd«      d«       y )Nz¹
        <x xmlns="base">
        <y />
        <y q="1" x:q="2" y:q="3" />
        <y:y xml:space="1">here is    some space </y:y>
        <y:y />
        <x:y />
        </x>
        Úbaser6  r   rN   ÚqÚ1)r	   r<   Útoprettyxmlr0   rT   r.  rv   ÚgetAttributeNS)r   r2   rB   rƒ   r„   s        r   Útest_namespaceszMicroDOMTests.test_namespaces  sB  € ðˆô × Ñ  Ó#ˆà�]‰]‹_ˆØ×Ñ˜×*Ñ*×4Ñ4°fÔ=Ø×ÑØ×Ñ×2Ñ2°3Ó7¸Ñ:×DÑDÀfô	
ð 	×ÑØ×Ñ×2Ñ2°3Ó7¸Ñ:×IÑIÈ&ÐRUÓVØô	
ô
 ×!Ñ! "Ó%ˆØ×Ñ˜×+Ñ+×5Ñ5°vÔ>Ø×ÑØ×Ñ×3Ñ3°CÓ8¸Ñ;×EÑEÀvô	
ð 	×ÑØ×Ñ×3Ñ3°CÓ8¸Ñ;×JÑJÈ6ÐSVÓWØõ	
r   c                ór   — d}t        j                  |«      j                  «       }| j                  ||«       y)zW
        Test that C{toxml} can support xml structures that remove namespaces.
        z`<?xml version="1.0"?><html xmlns="http://www.w3.org/TR/REC-html40"><body xmlns=""></body></html>N)r	   r<   r>   r0   )r   rÉ   rƒ   s      r   Útest_namespaceDeletez"MicroDOMTests.test_namespaceDeleteŸ  s7   € ð
,ð 	ô ×!Ñ! "Ó%×+Ñ+Ó-ˆØ×Ñ˜˜RÕ r   c                ó¬   — t        j                  d«      }t        j                  dd¬«      }|g|_        | j                  |j	                  «       d«       y)z¢
        Check that unspecified namespace is a thing separate from undefined
        namespace. This test added after discovering some weirdness in Lore.
        Úolr  zhttp://www.w3.org/1999/xhtml©r.  z9<div xmlns="http://www.w3.org/1999/xhtml"><ol></ol></div>N)r	   r²   r™   r0   r>   )r   rË   rÐ   s      r   Útest_namespaceInheritancez'MicroDOMTests.test_namespaceInheritanceª  sK   € ô × Ñ  Ó&ˆÜ×!Ñ! %Ð3QÔRˆØ"˜GˆÔØ×ÑØ�L‰L‹NÐWõ	
r   c                óz  — d}d}t        j                  «       }|j                  d|¬«      }|j                  |di«       |j                  d|¬«      }|j                  d|¬«      }|j	                  |«       |j	                  |«       |j	                  |«       d}|j                  «       }| j                  ||«       y	)
zü
        XML elements with a prefixed name as per upper level tag definition
        have a start-tag of C{"<prefix:tag>"} and an end-tag of
        C{"</prefix:tag>"}.

        Refer to U{http://www.w3.org/TR/xml-names/#ns-using} for details.
        úhttp://example.com/outerúhttp://example.com/innerrÚ   rM  ÚinnerÚtagrË   zœ<?xml version="1.0"?><root xmlns="http://example.com/outer" xmlns:inner="http://example.com/inner"><inner:tag><inner:child></inner:child></inner:tag></root>N)r	   ÚDocumentÚcreateElementÚaddPrefixesrÅ   r>   r0   )	r   ÚouterNamespaceÚinnerNamespaceÚdocumentrÚ   rS  rË   ÚxmlOkÚxmlOuts	            r   Útest_prefixedTagszMicroDOMTests.test_prefixedTags·  sÆ   € ð 4ˆØ3ˆä×$Ñ$Ó&ˆð ×%Ñ% f¸Ð%ÓGˆð 	×Ñ˜.¨'Ð2Ô3ð ×$Ñ$ U°nÐ$ÓEˆð ×&Ñ& w¸.Ð&ÓIˆà�‰˜ÔØ×Ñ˜ÔØ×Ñ˜TÔ"ðð 	ð —‘Ó!ˆØ×Ñ˜ Õ'r   c                óz  — d}d}t        j                  «       }|j                  d|¬«      }|j                  |«       |j	                  |di«       |j                  d|¬«      }|j                  |«       |j                  d|¬«      }|j                  |«       d}|j                  «       }| j                  ||«       y	)
a^  
        Children of prefixed tags respect the default namespace at the point
        where they are rendered.  Specifically, they are not influenced by the
        prefix of their parent as that prefix has no bearing on them.

        See U{http://www.w3.org/TR/xml-names/#scoping} for details.

        To further clarify the matter, the following::

            <root xmlns="http://example.com/ns/test">
                <mytag xmlns="http://example.com/ns/mytags">
                    <mysubtag xmlns="http://example.com/ns/mytags">
                        <element xmlns="http://example.com/ns/test"></element>
                    </mysubtag>
                </mytag>
            </root>

        Should become this after all the namespace declarations have been
        I{moved up}::

            <root xmlns="http://example.com/ns/test"
                  xmlns:mytags="http://example.com/ns/mytags">
                <mytags:mytag>
                    <mytags:mysubtag>
                        <element></element>
                    </mytags:mysubtag>
                </mytags:mytag>
            </root>
        rP  rQ  rÚ   rM  rR  ÚmytagÚmysubtagzš<?xml version="1.0"?><root xmlns="http://example.com/outer" xmlns:inner="http://example.com/inner"><inner:mytag><mysubtag></mysubtag></inner:mytag></root>N)r	   rT  rU  rÅ   rV  r>   r0   )	r   rW  rX  rY  rÚ   r^  r_  rZ  r[  s	            r   Útest_prefixPropagationz$MicroDOMTests.test_prefixPropagationâ  sÄ   € ð< 4ˆØ3ˆä×$Ñ$Ó&ˆà×%Ñ% f¸Ð%ÓGˆØ×Ñ˜TÔ"ð 	×Ñ˜.¨'Ð2Ô3Ø×&Ñ& w¸.Ð&ÓIˆØ×Ñ˜Ôð ×)Ñ)¨*ÀÐ)ÓOˆØ×Ñ˜(Ô#ðð 	ð —‘Ó!ˆØ×Ñ˜ Õ'r   c                óÀ   — t        t        «       | j                  | j                  g«      }| j	                  dt        |«      «       | j	                  d|d   d   «       y)z?
        An import will raise the deprecation warning.
        rN   z6twisted.web.microdom was deprecated at Twisted 23.10.0r   ÚmessageN)r   r	   ÚflushWarningsÚtest_deprecationr0   r1   )r   Úwarningss     r   rd  zMicroDOMTests.test_deprecation  sV   € ô 	ŒxÔØ×%Ñ% t×'<Ñ'<Ð&=Ó>ˆØ×Ñ˜œC ›MÔ*Ø×ÑØDØ�Q‰K˜	Ñ"õ	
r   Nr"   )6r&   r'   r(   rD   rF   rJ   rL   rZ   r_   rb   rg   rk   ro   rr   rw   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)  r0  r2  r8  r;  rA  rH  rJ  rN  r\  r`  rd  r)   r   r   r6   r6   ,   s  „ ó
ó 
RóLóRó/ó$

ó	
ó-óDóXó$ó4
ó"
ó$Wó03ó4óPó
7ó0óEóRó	1ó:ó<ó-ó<	Pó
ó<Mò €Gó5óBóKó.VóPóVó+ó+ó+ó"+
óZ?ó:ó7ó 
'óó7ó
ó@	!ó
ó)(óV9(ôv

r   r6   c                  óR   — e Zd ZdZ	 d		 	 	 	 	 	 	 d
d„Zdd„Zdd„Zdd„Zdd„Zdd„Z	y)ÚBrokenHTMLTestsaC  
    Tests for when microdom encounters very bad HTML and C{beExtremelyLenient}
    is enabled. These tests are inspired by some HTML generated in by a mailer,
    which breaks up very long lines by splitting them with '!\n '.
    The expected behaviour is loosely modelled on the way Firefox treats very
    bad HTML.
    c                ó†   — t        j                  ||¬«      }| j                  |j                  j	                  «       |«       y)z‰
        Check that C{input}, when parsed, produces a DOM where the XML
        of the document element is equal to C{expected}.
        r8   Nrø   )r   Úinputr  r9   Úoutputs        r   ÚcheckParsedzBrokenHTMLTests.checkParsed3  s6   € ô ×%Ñ% eÐ@RÔSˆØ×Ñ˜×/Ñ/×5Ñ5Ó7¸ÕBr   c                ó0   — d}d}| j                  ||«       y)z˜
        Check that microdom does its best to handle broken attribute names.
        The important thing is that it doesn't raise an exception.
        z6<body><h1><div al!
 ign="center">Foo</div></h1></body>z;<body><h1><div al="True" ign="center">Foo</div></h1></body>N©rk  ©r   ri  r  s      r   Útest_brokenAttributeNamez(BrokenHTMLTests.test_brokenAttributeName=  s   € ð
 JˆØSˆØ×Ñ˜ Õ)r   c                ó0   — d}d}| j                  ||«       y)zJ
        Check that microdom encompasses broken attribute values.
        z6<body><h1><div align="cen!
 ter">Foo</div></h1></body>Nrm  rn  s      r   Útest_brokenAttributeValuez)BrokenHTMLTests.test_brokenAttributeValueF  s   € ð JˆØLˆØ×Ñ˜ Õ)r   c                ó0   — d}d}| j                  ||«       y)z•
        Check that microdom does its best to handle broken opening tags.
        The important thing is that it doesn't raise an exception.
        z2<body><h1><sp!
 an>Hello World!</span></h1></body>z5<body><h1><sp an="True">Hello World!</sp></h1></body>Nrm  rn  s      r   Útest_brokenOpeningTagz%BrokenHTMLTests.test_brokenOpeningTagN  s   € ð
 FˆØJˆØ×Ñ˜ Õ)r   c                óL   — | j                  dd«       | j                  dd«       y)z™
        Check that microdom does its best to handle broken self-closing tags
        The important thing is that it doesn't raise an exception.
        z<body><span /!
></body>z<body><span></span></body>z
<span!
 />z<span></span>Nrm  r   s    r   Útest_brokenSelfClosingTagz)BrokenHTMLTests.test_brokenSelfClosingTagW  s&   € ð
 	×ÑÐ3Ð5QÔRØ×Ñ˜¨Õ8r   c                ó¬   — d}d}| j                  ||«       d}| j                  ||«       d}| j                  ||«       d}d}| j                  ||«       y)z•
        Check that microdom does its best to handle broken closing tags.
        The important thing is that it doesn't raise an exception.
        z1<body><h1><span>Hello World!</sp!
an></h1></body>z/<body><h1><span>Hello World!</span></h1></body>z1<body><h1><span>Hello World!</!
span></h1></body>z1<body><h1><span>Hello World!</span!
></h1></body>z1<body><h1><span>Hello World!<!
/span></h1></body>z6<body><h1><span>Hello World!<!></!></span></h1></body>Nrm  rn  s      r   Útest_brokenClosingTagz%BrokenHTMLTests.test_brokenClosingTag_  sc   € ð
 EˆØDˆØ×Ñ˜ Ô)ØDˆØ×Ñ˜ Ô)ØDˆØ×Ñ˜ Ô)ØDˆØKˆØ×Ñ˜ Õ)r   N)rN   )ri  r%   r  r%   r9   Úintr#   r$   r"   )
r&   r'   r(   Ú__doc__rk  ro  rq  rs  ru  rw  r)   r   r   rg  rg  *  sQ   „ ñð DEðCØðCØ$'ðCØ=@ðCà	óCó*ó*ó*ó9ô*r   rg  c                  ó    — e Zd ZdZdd„Zdd„Zy)Ú	NodeTestsz
    Tests for L{Node}.
    c                ó�  — t        j                  t        «       «      }| j                  |j	                  |«      «       t        j                  t        «       «      }| j                  |j	                  |«      «       |j                  t        j                  t        «       «      «       | j                  |j	                  |«      «       |j                  t        j                  t        «       «      «       | j                  |j	                  |«      «       |j                  «       j                  t        j                  t        «       «      «       | j                  |j	                  |«      «       |j                  «       j                  t        j                  t        «       «      «       | j                  |j	                  |«      «       y)zw
        L{Node.isEqualToNode} returns C{True} if and only if passed a L{Node}
        with the same children.
        N)r	   ÚNodeÚobjectr�   r³   rÅ   rà   r=   )r   r¼   Úanothers      r   Útest_isNodeEqualTozNodeTests.test_isNodeEqualTou  s,  € ô �}‰}œV›XÓ&ˆØ�‰˜×*Ñ*¨4Ó0Ô1Ü—-‘-¤£Ó)ˆà�‰˜×*Ñ*¨7Ó3Ô4Ø×ÑœŸ™¤v£xÓ0Ô1à×Ñ˜×+Ñ+¨GÓ4Ô5Ø×ÑœHŸM™M¬&«(Ó3Ô4ð 	�‰˜×*Ñ*¨7Ó3Ô4ð 	�‰Ó×%Ñ%¤h§m¡m´F³HÓ&=Ô>Ø×Ñ˜×+Ñ+¨GÓ4Ô5ð 	×ÑÓ×(Ñ(¬¯©´v³xÓ)@ÔAØ�‰˜×*Ñ*¨7Ó3Õ4r   c                ó´  — t        j                  «       }t        j                  «       }|j                  |«       | j                  t        |j                  d«       | j                  t        |j
                  |d«       | j                  t        |j
                  d|«       | j                  t        |j
                  dd«       |j                  |«       | j                  t        |j                  d«       | j                  t        |j                  |d«       | j                  t        |j                  d|«       | j                  t        |j                  dd«       y)zO
        Children of L{Node} instances must also be L{Node} instances.
        N)r	   r}  rÅ   ri   Ú	TypeErrorrÆ   rÇ   rÈ   )r   r¼   rË   s      r   Útest_validChildInstancez!NodeTests.test_validChildInstance�  s  € ô �}‰}‹ˆÜ—‘“ˆà×Ñ˜ÔØ×Ñœ) T×%5Ñ%5°tÔ<à×Ñœ) T×%6Ñ%6¸¸tÔDØ×Ñœ) T×%6Ñ%6¸¸eÔDØ×Ñœ) T×%6Ñ%6¸¸dÔCà×Ñ˜ÔØ×Ñœ) T×%5Ñ%5°tÔ<à×Ñœ) T×%6Ñ%6¸¸tÔDØ×Ñœ) T×%6Ñ%6¸¸eÔDØ×Ñœ) T×%6Ñ%6¸¸dÕCr   Nr"   )r&   r'   r(   ry  r€  rƒ  r)   r   r   r{  r{  p  s   „ ñó5ô6Dr   r{  c                  ó$   — e Zd ZdZdZdd„Zdd„Zy)ÚDocumentTestsz 
    Tests for L{Document}.
    rÞ   c                ót  — t        j                  «       }| j                  |j                  |«      «       t        j                  «       }| j                  |j                  |«      «       | j                  |_        | j                  |j                  |«      «       | j                  |_        | j                  |j                  |«      «       |j                  t        j                  t        «       «      «       | j                  |j                  |«      «       |j                  t        j                  t        «       «      «       | j                  |j                  |«      «       |j                  j                  t        j                  t        «       «      «       | j                  |j                  |«      «       y)z˜
        L{Document.isEqualToNode} returns C{True} if and only if passed a
        L{Document} with the same C{doctype} and C{documentElement}.
        N)
r	   rT  r�   r³   rß   rà   rÅ   r}  r~  rT   )r   rY  r  s      r   Útest_isEqualToNodez DocumentTests.test_isEqualToNode­  s7  € ô ×$Ñ$Ó&ˆØ�‰˜×.Ñ.¨xÓ8Ô9ô ×#Ñ#Ó%ˆØ�‰˜×.Ñ.¨wÓ7Ô8ð  Ÿ<™<ˆÔØ×Ñ˜×/Ñ/°Ó8Ô9àŸ,™,ˆŒØ�‰˜×.Ñ.¨wÓ7Ô8ð 	×ÑœXŸ]™]¬6«8Ó4Ô5Ø×Ñ˜×/Ñ/°Ó8Ô9à×ÑœHŸM™M¬&«(Ó3Ô4Ø�‰˜×.Ñ.¨wÓ7Ô8ð 	× Ñ ×,Ñ,¬X¯]©]¼6»8Ó-DÔEØ×Ñ˜×/Ñ/°Ó8Õ9r   c                óà   — t        j                  «       }t        j                  «       }t        j                  «       }|j                  |«       | j	                  t
        |j                  |«       y)zk
        L{Document.appendChild} raises L{ValueError} if the document already
        has a child.
        N)r	   rT  r}  rÅ   ri   rÏ   )r   rY  rË   r  s       r   Útest_childRestrictionz#DocumentTests.test_childRestrictionÌ  sN   € ô
 ×$Ñ$Ó&ˆÜ—‘“ˆÜ—-‘-“/ˆØ×Ñ˜UÔ#Ø×Ñœ* h×&:Ñ&:¸GÕDr   Nr"   )r&   r'   r(   ry  rß   r‡  r‰  r)   r   r   r…  r…  ¦  s   „ ñð F€Gó:ô>	Er   r…  c                  ó   — e Zd ZdZdd„Zy)ÚEntityReferenceTestsz'
    Tests for L{EntityReference}.
    c                ó  — | j                  t        j                  d«      j                  t        j                  d«      «      «       | j	                  t        j                  d«      j                  t        j                  d«      «      «       y)zŒ
        L{EntityReference.isEqualToNode} returns C{True} if and only if passed
        a L{EntityReference} with the same C{eref}.
        ÚquotÚaposN)r�   r	   r©   r³   rà   r   s    r   r‡  z'EntityReferenceTests.test_isEqualToNodeÝ  sn   € ð
 	�‰Ü×$Ñ$ VÓ,×:Ñ:Ü×(Ñ(¨Ó0óô	
ð
 	×ÑÜ×$Ñ$ VÓ,×:Ñ:Ü×(Ñ(¨Ó0óõ	
r   Nr"   ©r&   r'   r(   ry  r‡  r)   r   r   r‹  r‹  Ø  s   „ ñô
r   r‹  c                  ó   — e Zd ZdZdd„Zy)ÚCharacterDataTestsz%
    Tests for L{CharacterData}.
    c                ó  — | j                  t        j                  d«      j                  t        j                  d«      «      «       | j	                  t        j                  d«      j                  t        j                  d«      «      «       y)z†
        L{CharacterData.isEqualToNode} returns C{True} if and only if passed a
        L{CharacterData} with the same value.
        r¸   r–   N)r�   r	   ÚCharacterDatar³   rà   r   s    r   r‡  z%CharacterDataTests.test_isEqualToNodeó  sh   € ð
 	�‰Ü×"Ñ" 5Ó)×7Ñ7¼×8NÑ8NÈuÓ8UÓVô	
ð 	×ÑÜ×"Ñ" 5Ó)×7Ñ7¼×8NÑ8NÈuÓ8UÓVõ	
r   Nr"   r�  r)   r   r   r‘  r‘  î  ó   „ ñô

r   r‘  c                  ó   — e Zd ZdZdd„Zy)ÚCommentTestsz
    Tests for L{Comment}.
    c                ó  — | j                  t        j                  d«      j                  t        j                  d«      «      «       | j	                  t        j                  d«      j                  t        j                  d«      «      «       y)zz
        L{Comment.isEqualToNode} returns C{True} if and only if passed a
        L{Comment} with the same value.
        r¸   r–   N)r�   r	   r›   r³   rà   r   s    r   r‡  zCommentTests.test_isEqualToNode  sa   € ð
 	�‰œ×(Ñ(¨Ó/×=Ñ=¼h×>NÑ>NÈuÓ>UÓVÔWØ×Ñœ×)Ñ)¨%Ó0×>Ñ>¼x×?OÑ?OÐPUÓ?VÓWÕXr   Nr"   r�  r)   r   r   r–  r–     s   „ ñôYr   r–  c                  ó   — e Zd ZdZdd„Zy)Ú	TextTestsz
    Tests for L{Text}.
    c                óÀ  — | j                  t        j                  dd¬«      j                  t        j                  dd¬«      «      «       | j	                  t        j                  dd¬«      j                  t        j                  dd¬«      «      «       | j	                  t        j                  dd¬«      j                  t        j                  dd¬«      «      «       y)z
        L{Text.isEqualToNode} returns C{True} if and only if passed a L{Text}
        which represents the same data.
        r¸   Tr  Fr–   N)r�   r	   r£   r³   rà   r   s    r   r‡  zTextTests.test_isEqualToNode  s¡   € ð
 	�‰Ü�M‰M˜% TÔ*×8Ñ8¼¿¹ÀuÐRVÔ9WÓXô	
ð 	×ÑÜ�M‰M˜% TÔ*×8Ñ8Ü—‘˜e¨Ô/óô	
ð
 	×ÑÜ�M‰M˜% TÔ*×8Ñ8¼¿¹ÀuÐRVÔ9WÓXõ	
r   Nr"   r�  r)   r   r   r™  r™    s   „ ñô
r   r™  c                  ó   — e Zd ZdZdd„Zy)ÚCDATASectionTestsz$
    Tests for L{CDATASection}.
    c                ó  — | j                  t        j                  d«      j                  t        j                  d«      «      «       | j	                  t        j                  d«      j                  t        j                  d«      «      «       y)z�
        L{CDATASection.isEqualToNode} returns C{True} if and only if passed a
        L{CDATASection} which represents the same data.
        r¸   r–   N)r�   r	   r­   r³   rà   r   s    r   r‡  z$CDATASectionTests.test_isEqualToNode*  sh   € ð
 	�‰Ü×!Ñ! %Ó(×6Ñ6´x×7LÑ7LÈUÓ7SÓTô	
ð 	×ÑÜ×!Ñ! %Ó(×6Ñ6´x×7LÑ7LÈUÓ7SÓTõ	
r   Nr"   r�  r)   r   r   rœ  rœ  %  r”  r   rœ  c                  ó   — e Zd ZdZdd„Zy)ÚElementTestsz
    Tests for L{Element}.
    c           
     ó8  — | j                  t        j                  dddit        «       d¬«      j	                  t        j                  dddit        «       d¬«      «      «       | j                  t        j                  dddit        «       d¬«      j	                  t        j                  dddit        «       d¬«      «      «       | j                  t        j                  dddit        «       d¬«      j	                  t        j                  dddit        «       d¬«      «      «       t        j                  dddit        «       d¬«      }t        j                  dddit        «       d¬«      }|j                  t        j                  t        «       «      «       | j                  |j	                  |«      «       | j                  t        j                  dddit        «       d¬«      j	                  t        j                  dddit        «       d¬«      «      «       y)	z¸
        L{Element.isEqualToNode} returns C{True} if and only if passed a
        L{Element} with the same C{nodeName}, C{namespace}, C{childNodes}, and
        C{attributes}.
        r¸   rO   rŠ   r–   rM  r¿   rž   N)r�   r	   r²   r~  r³   rà   rÅ   r}  )r   ÚoneÚtwos      r   r‡  zElementTests.test_isEqualToNode<  s®  € ð 	�‰Ü×ÑØ˜˜S�z¤6£8°uôç‰mÜ× Ñ  ¨¨c¨
´F³HÈÔNóô	
ð 	×ÑÜ×ÑØ˜˜S�z¤6£8°uôç‰mÜ× Ñ  ¨¨c¨
´F³HÈÔNóô	
ð 	×ÑÜ×ÑØ˜˜S�z¤6£8°uôç‰mÜ× Ñ  ¨¨c¨
´F³HÈÔNóô	
ô ×Ñ˜u s¨C j´&³(ÀeÔLˆÜ×Ñ˜u s¨C j´&³(ÀeÔLˆØ�‰œŸ™¤f£hÓ/Ô0Ø×Ñ˜×*Ñ*¨3Ó/Ô0ð 	×ÑÜ×ÑØ˜˜S�z¤6£8°uôç‰mÜ× Ñ  ¨¨c¨
´F³HÈÔNóõ	
r   Nr"   r�  r)   r   r   rŸ  rŸ  7  s   „ ñô-
r   rŸ  N)ry  Ú
__future__r   Ú	importlibr   Úior   Útypingr   Útwisted.trial.unittestr   Útwisted.webr   r	   r
   Ú	XMLParserr   r+   r6   rg  r{  r…  r‹  r‘  r–  r™  rœ  rŸ  r)   r   r   ú<module>rª     sÃ   ðñ
õ #å Ý å å +ß 1Ñ 1ô+ˆC�M‰Mô +ô 4ˆxô 4ô{
�Hô {
ô|C*�hô C*ôL3D�ô 3Dôl/E�Hô /Eôd
˜8ô 
ô,
˜ô 
ô$Y�8ô Yô
�ô 
ô.
˜ô 
ô$2
�8õ 2
r   