ϪftdZddlmZddlmZddlmZddlmZddl m Z ddl m Z m Z mZGdd ejZGd d e ZGd d e ZGdde ZGdde ZGdde ZGdde ZGdde ZGdde ZGdde ZGdde ZGdde Zy )!z; Some fairly inadequate testcases for Twisted XML support. ) annotations)reload)BytesIO)Literal)TestCase) domhelpersmicrodomsuxc,eZdZddZddZddZd dZy) Sux0rcg|_y)Ntokensselfs ;/usr/lib/python3/dist-packages/twisted/web/test/test_xml.py__init__zSux0r.__init__s  cR|jDcgc] }|ddk(s |c}Scc}w)Nrstartr)rtokens r getTagStartszSux0r.getTagStartss%#';;F%%(g2EFFFs $$c@|jjd||fy)Nrrappend)rnameattrss r gotTagStartzSux0r.gotTagStarts GT512rc>|jjd|fy)Ntextr)rr s rgotTextz Sux0r.gotTexts FD>*rNreturnNone)r#z2list[tuple[Literal['start'], str, dict[str, str]]])rstrrzdict[str, str]r#r$)r r%r#r$)__name__ __module__ __qualname__rrrr!rrr r s G3+rr ceZdZddZy)SUXTestscd}t}|j|j||jt |j dy)Ns)r connectionMade dataReceived assertEquallenr)rsmss r test_borkzSUXTests.test_bork$sB ! W   R__./3rNr")r&r'r(r4r)rrr+r+#s4rr+ceZdZd5dZd5dZd5dZd5dZd5dZd5dZd5dZ d5dZ d5d Z d5d Z d5d Z d5d Zd5d Zd5dZd5dZd5dZd5dZd5dZd5dZd5dZd5dZd5dZd5dZd5dZd5dZd5dZd5dZd5dZgdZd5dZ d5dZ!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/Z1d5d0Z2d5d1Z3d5d2Z4d5d3Z5y4)6 MicroDOMTestsc 0d}tj|d}|j|jj dt }|jj |ddddid|j|jdy)z Make sure that if there's no top-level node lenient-mode won't drop leading text that's outside of any elements. zHi orders!
Well.
TbeExtremelyLenientz*Hi orders!
Well.
s*Hi orders!
Well.
Nr parseStringr0 firstChildtoxmlrwritexmlgetvaluerr2d byteStreams rtest_leadingTextDroppingz&MicroDOMTests.test_leadingTextDropping-s (  t <  LLN "$P Y   BBBC     !#P rc 0d}tj|d}|j|jj dt }|jj |ddddid|j|jdy)z~ Ensure that no *trailing* text in a mal-formed no-top-level-element document(s) will not be dropped. z
Hi orders!Tr8z
Hi orders!r:s
Hi orders!Nr;rAs rtest_trailingTextDroppingz'MicroDOMTests.test_trailingTextDropping=s|   t < --/1PQY   BBBC ,,.0PQrcd}tj|d}|j|jj dy)zp A string with nothing that looks like a tag at all should just be parsed as body text. z Hi orders!Tr8zHi orders!Nr r<r0r=r>rr2rBs r test_noTagszMicroDOMTests.test_noTagsIs;   t < --/1JKrcd}tj|d}|j|jj dy)zl If a document is surrounded by non-xml text, the text should be remain in the XML. zHi
orders!Tr8zHi
orders!NrHrIs rtest_surroundingCrapz"MicroDOMTests.test_surroundingCrapRs;   t < --/1PQrc d}tj|d}tj|jd}tj |ddj dd}|j|jdd y) Nal

This is an insane set of text nodes that should NOT be gathered under the A tag above.

r8arz  insane) r r<rfindNodesNameddocumentElementgatherTextNodesreplacer0find)rr2rBlns rtest_caseSensitiveSoonCloserz*MicroDOMTests.test_caseSensitiveSoonCloser[sq   q 9  % %a&7&7 =  & &qtQ / 7 7# F )2.rcd}tj|d}|j|j|jj j y)z Test that C{parentNode} attributes are set to meaningful values when we are parsing HTML that lacks a root node. z

rNr8Nr r<assertIdenticalrTr= parentNoderIs rtest_lenientParentingz#MicroDOMTests.test_lenientParentingmsI   q 9   q00;;=HH rcd}tj|d}|j|j|jj 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. HellorNr8Nr\rIs rtest_lenientParentSinglez&MicroDOMTests.test_lenientParentSingleysI   q 9   q00;;=HH rcd}tj|d}tj|}|j |j ddy)Nz This HTML goes between Stupid <=CrAzY!=> Dumb. rNr8>rR)r r<rrUassertNotEqualrWrr2rBrYs rtest_unEntitieszMicroDOMTests.test_unEntitiessE   q 9  & &q ) AFF3K,rcb|jtjtjdy)Nr:) assertRaisesr ParseErrorr r<rs rtest_emptyErrorzMicroDOMTests.test_emptyErrors #..(*>*>Crcd}tj|}|jtj|j j dy)Nz test test)r r<r0rrUrTstriprIs rtest_tameDocumentzMicroDOMTests.test_tameDocumentsF    # 33A4E4EFLLNPVWrcd}tj|d}tj|jd}|j t |dy)Na 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_awfulTagSoupzMicroDOMTests.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)scriptzfoo </scrip bar )r ���r<���r0���r=���datagetElementsByTagNamerI���s��� r���test_scriptLeniencyz!MicroDOMTests.test_scriptLeniency���s���� �  q 9  LLN % % ' 2 2 4 9 9;X �  LLN / / 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 NPQ � 5   q 9 D D F L L NPQ  �   q 9 D D F L L NPQ r���c�������������������d}|j�������������������������j������������������dd������}t��������j������������������|dd������}t��������j������������������|dd������}t��������j������������������|dd������}t��������j������������������|dd������}t��������j������������������|dd������}|�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>��� assertTrueisEqualToDocument)r���r2���s2rB���d2d3d4d5s��� r���test_preserveCasezMicroDOMTests.test_preserveCase���sh��� V WWY  vv .  AA F  ! !!QQ G� ! !"aa H  ! !"aa H  ! !"aa H � **002A6 ++B/AGGI=RXXZN1ST ,,R0RXXZN$rxxzn2UV� ,,R0RXXZN$rxxzn2UV ,,R0RXXZN$rxxzn2UVr���c��������������������d}t��������j������������������|������}|j������������������}|�j������������������|j ������������������d������d�������|�j������������������|j ������������������d������d�������y�)Nz<test a="a" b='b' />rO���br ���r<���rT���r0��� getAttributer���r2���rB���es��� r���test_differentQuotesz"MicroDOMTests.test_differentQuotes���sT���� $   #   ,c2 ,c2r���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_LinebreakszMicroDOMTests.test_Linebreaks���sT���� (   #   ,c2 ,d3r���c����������������p����dD�]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� PA   h55x7K7KQ O Pr���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��� isinstanceCommentvalue cloneNoder>���)r���r2���rB���r���cc2s��� r��� test_commentzMicroDOMTests.test_comment��s���� '   #   U+ LLO  1h&6&678 ), [[]  $ %56r���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_textzMicroDOMTests.test_text��s����  !2 3 C C||A  478 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>& AB;</b>���r���&rN���z AB;) r ���r<���rT���r���r0���r1���ru���r���r>���r���r���EntityReference)r���nodesrY���s��� r��� test_entitieszMicroDOMTests.test_entities��s����$$%:;KKVV UQ' q0 q 2 q++-335w?� EA OOJq(*B*BC D Er���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_CDatazMicroDOMTests.test_CData%��sw���� /$$Q'77BB1E  5(*?*?@A %56 *0024PQr���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_singletonszMicroDOMTests.test_singletons,��s���� ( &$$Q'77BB%%b)99DD UQ''� 1EAr OOJq(*:*:; <   QZZ - OOAOOB/ 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������������������dd�������|�j������������������|j ������������������d������d�������y�)Nz <foo a="b" />rO���r���r���foor���) r ���r<���rT���r0���r���r��� hasAttributegetAttributeNoder��� setAttribute)r���r2���noderO���s��� r���test_attributeszMicroDOMTests.test_attributes7��s���� ##A&66 **3/5 **3/6 ))#./ D--c223  ! !# & #& %' **5159r���c�������������������d}t��������j������������������|������j������������������}|�j������������������|j������������������D�cg�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���bazbaxr���r���) r ���r<���rT���r0���r���r��� lastChildr=���r��� hasChildNodesrf���s��� r��� test_childrenzMicroDOMTests.test_childrenE��s���� 5   # 3 3 all;!**;=RS //7 00%8 )* ALLN88::; �<s���C:c�������������������d}d}d}t��������j������������������|������j������������������}t��������j������������������|������j������������������}t��������j������������������|������j������������������}|j������������������|j ��������������������������������|j ������������������dd�������|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_mutatezMicroDOMTests.test_mutateN��s���  , #   # 3 3  ! !" % 5 5  ! !" % 5 5 akkm$ sC  Q ++C0$7 / x''.6 a1159 a%0� .A   Q\\1 - . +, e Q\\*A. a1159 MM%  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���parentorphan replacements��� r���test_replaceNonChildz"MicroDOMTests.test_replaceNonChildl��sN���� �%%i0%%i0**95  *f&9&9;Or���c����������������t���d}d}t��������j������������������|������}t��������j������������������|dd������}t��������j������������������|dd������}|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���fOofOOFOO)r ���r<���rT���r0���r=���getElementByIdrv���r���)r���r2���r���rB���r���r���roots��� r��� test_searchzMicroDOMTests.test_searchw��s��� : ;   #  ! !"aa H  ! !"aa H   *A,<,<T,BC  " "5 )D$..2B2M2M2O+P �!! *B,=,=d,CD 007$@   # #E *T^^-=-H-H-J,K � 007<!! *B,=,=d,CD   # #E *T4>>3C3N3N3P,Q �   # #E *T4>>3C3N3N3P,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_doctypezMicroDOMTests.test_doctype��s���� � �   #  ! !" %  IIN � A& ,,R01 ))778J8JKLr���))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 & 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_outputzMicroDOMTests.test_output��sx����ll� 5FAs$$Q:A%%c1=B''--/G   S' * OOA//3 4  5r���c����������������\����dD�]'��}|�j������������������t��������t��������j������������������|�������)�y�)N)z<foo>&am</foo>z<fooz<f>&</f>z<() />)ri��� Exceptionr ���r<���ry���s��� r��� test_errorszMicroDOMTests.test_errors��s+����A� BA   i)=)=q A Br���c�������������������d}d}d}d}t��������j������������������|������}t��������j������������������|������}t��������j������������������|d������}t��������j������������������|dd������}t��������j������������������|dd������} t��������j������������������|dd������} 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���s3s4rB���r���r���r���r���d6r���s ��� r���test_caseInsensitivez"MicroDOMTests.test_caseInsensitive��s��� + , , !   #  ! !" %  ! !"a 8  ! !"aa H  ! !"aa H  ! !"aa H""1%55;;=   # #X%9%91a� � � b! ++B/0 ++B/0 **77<= ++88=> ++1135IJ ++1135IJr���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 113D3D3O3O � ++H,@,@AR,STUr���c����������������2���d}dD�]O��\��}}t��������j������������������|�d|�dd������}|�j������������������|j������������������j �������������������������d|z���������Q�t��������j������������������dd������}|�j������������������|j������������������j �������������������������d �������y�) Nz<?xml version='1.0'?>))&r���)z& z& )r���r���)z &hello monkeyz&hello monkeyz<pre>z</pre>rN���r8���z <pre>%s</pre>z<t>hello & there</t>z<t>hello & there</t>r ���r<���r0���rT���r>���)r���prefixiorB���s��� r���test_lenientAmpersandz#MicroDOMTests.test_lenientAmpersand��s����( � MDAq �$$xuQCv%>STUA   Q..446!8K L M�  !7A N **0024NOr���c��������������������t��������j������������������dd������}|�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����  AVW � **557==?ATUr���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���expectedactuals��� r���test_laterCloserSimplez$MicroDOMTests.test_laterCloserSimple��sB���� ,  q 9B""((* 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������������������ �dd�l� d}d}d}d fd }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>専門家リスト s<?xml version="1.0" encoding="UCS-2" ?> <JAPANESE> <TITLE>\[000 </TITLE></JAPANESE>ctt|dzdz}jd|zgjd|z|S)NrH.reverseBytessCc!fk"S(C6;;sSyG6==sA+FG GrzUTF-16rzu√rNrawu#
)r2bytesr#r)rr r<encoderrlmxr rrTr createCommentr0r>) rr2jj2rurdudsdj3hdrdivders @rtest_unicodeTolerancez#MicroDOMTests.test_unicodeTolerance s + N  P  H""<0B#CD  ! !!((8"4 5  ! !! $ ,,R01 ,,S12  ! !! $""<#34  ! !" % ,,R01 ,,S12 ! !( +%lln!!(!277    s r''12  HHJJJ rc"dddd}|jD]v}tj|j}t j |d}|j t||||sY|jt|ddxy)Nr-rrN)z:asdfadsfzasdfz!rtagName) keysr r<rTr namedChildrenr0r1rhasattr)rtestsrrresults rtest_namedChildrenz MicroDOMTests.test_namedChildren:sMN 12   ?A''*::D--dE:F   S[%( 3q 9 =>  ?rcd}tj|j}|jd}|j |||j t |jt |j|j|j}}|j |||j t |jt |j|j |j|j|j ||j|j |j|jy)NrrNdeep) r r<rTr failIfEqualsr0r1rr=r> namespace)rr2rrc1rs rtest_cloneNodezMicroDOMTests.test_cloneNodeGs +##A&66A& $& T__-s53C3C/DE"E$4$4$6B "b! R]]+S-?@ "--/2==?; EKKM* 9rcd}tj|}|jd}|j|||j t |j t |j |j ||j|j|j||j|j|y)NzrNr+) r r<rr-r0r1rr>rr)rr2rrs rtest_cloneDocumentz MicroDOMTests.test_cloneDocumentTs T ##A&A& $& T__-s53C3C/DE EKKM* //56 ..u56rcNtjd}tj|}|jd|j d}d|j d<|j |j ddd }|j||jy) Nprr)rOzry)rzF

foo

) r rrr rraddr0r>)rrYrrr2s rtest_LMXzMicroDOMTests.test_LMXds|   S !ll1o  EECEL   es T AGGI&rcDtjd}t|y)z9 Returns a dictionary which is hashable. r4N)r rhash)rrYs r test_dictzMicroDOMTests.test_dictps   S ! Qrcd}d}tj|}|j|||jtj||y)Nz&'some "stuff"', z/&'some "stuff"', <what up?>)r escaper0unescape)rrcookedesc1s r test_escapingzMicroDOMTests.test_escapingwsE-Bs# v& **40#6rcd}tj|}|j}|j|jj d|j|jj ddj d|j|jj ddjdddtj|}|j|jj d|j|jj ddj d|j|jj ddjdddy)Nz here is some space baser6rrNq1)r r< toprettyxmlr0rTr.rvgetAttributeNS)rr2rBrrs rtest_namespaceszMicroDOMTests.test_namespacessB    # ]]_ **44f=    2 23 7 : D Df     2 23 7 : I I&RU V   ! !" % ++55v>     3 3C 8 ; E Ev      3 3C 8 ; J J6SV W  rcrd}tj|j}|j||y)zW Test that C{toxml} can support xml structures that remove namespaces. z`N)r r<r>r0)rrrs rtest_namespaceDeletez"MicroDOMTests.test_namespaceDeletes7  ,  ! !" % + + - R rctjd}tjdd}|g|_|j|j dy)z Check that unspecified namespace is a thing separate from undefined namespace. This test added after discovering some weirdness in Lore. olrzhttp://www.w3.org/1999/xhtmlr.z9
    N)r rrr0r>)rrrs rtest_namespaceInheritancez'MicroDOMTests.test_namespaceInheritancesK   &!!%3QR"G  LLNW rczd}d}tj}|jd|}|j|di|jd|}|jd|}|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{""} and an end-tag of C{""}. Refer to U{http://www.w3.org/TR/xml-names/#ns-using} for details. http://example.com/outerhttp://example.com/innerrrMinnertagrzN)r Document createElement addPrefixesrr>r0) routerNamespaceinnerNamespacedocumentrrSrxmlOkxmlOuts rtest_prefixedTagszMicroDOMTests.test_prefixedTagss43$$&%%f%G .'23$$Un$E&&w.&I  T"  ! 'rczd}d}tj}|jd|}|j||j |di|jd|}|j||jd|}|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:: Should become this after all the namespace declarations have been I{moved up}:: rPrQrrMrRmytagmysubtagzN)r rTrUrrVr>r0) rrWrXrYrr^r_rZr[s rtest_prefixPropagationz$MicroDOMTests.test_prefixPropagations<43$$&%%f%GT" .'23&&w.&I ))*)O (#  ! 'rctt|j|jg}|j dt ||j d|ddy)z? An import will raise the deprecation warning. rNz6twisted.web.microdom was deprecated at Twisted 23.10.0rmessageN)rr flushWarningstest_deprecationr0r1)rwarningss rrdzMicroDOMTests.test_deprecationsV x%%t'<'<&=> CM*  D QK " rNr")6r&r'r(rDrFrJrLrZr_rbrgrkrorrrwrzrrrrrrrrrrrrrrrrrrrrrrrrrr!r)r0r2r8r;rArHrJrNr\r`rdr)rrr6r6,s RLR/$    -D X$4 " $W034P 70ER 1 :<-< P <M G5BK.V PV+++"+ Z ? :7 '7 @ !  )(V9(v  rr6cReZdZdZ d d dZd dZd dZd dZd dZd dZ 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. ctj||}|j|jj |y)z Check that C{input}, when parsed, produces a DOM where the XML of the document element is equal to C{expected}. r8Nr)rinputrr9outputs r checkParsedzBrokenHTMLTests.checkParsed3s6%%e@RS //557Brc0d}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

    Foo

    z;

    Foo

    Nrkrrirs rtest_brokenAttributeNamez(BrokenHTMLTests.test_brokenAttributeName=s JS )rc0d}d}|j||y)zJ Check that microdom encompasses broken attribute values. z6

    Foo

    Nrmrns rtest_brokenAttributeValuez)BrokenHTMLTests.test_brokenAttributeValueFsJL )rc0d}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

    Hello World!

    z5

    Hello World!

    Nrmrns rtest_brokenOpeningTagz%BrokenHTMLTests.test_brokenOpeningTagNs FJ )rcL|jdd|jddy)z Check that microdom does its best to handle broken self-closing tags The important thing is that it doesn't raise an exception. zzz z Nrmrs rtest_brokenSelfClosingTagz)BrokenHTMLTests.test_brokenSelfClosingTagWs& 35QR 8rcd}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

    Hello World!

    z/

    Hello World!

    z1

    Hello World!

    z1

    Hello World!

    z1

    Hello World!

    z6

    Hello World!

    Nrmrns rtest_brokenClosingTagz%BrokenHTMLTests.test_brokenClosingTag_sc ED )D )D )DK )rN)rN)rir%rr%r9intr#r$r") r&r'r(__doc__rkrorqrsrurwr)rrrgrg*sQDECC$'C=@C C***9*rrgc eZdZdZddZddZy) NodeTestsz Tests for L{Node}. ctjt}|j|j |tjt}|j|j ||j tjt|j |j ||j tjt|j|j ||jj tjt|j |j ||jj tjt|j|j |y)zw L{Node.isEqualToNode} returns C{True} if and only if passed a L{Node} with the same children. N)r Nodeobjectrrrrr=)rranothers rtest_isNodeEqualTozNodeTests.test_isNodeEqualTous, }}VX& **401--) **734 vx01 ++G45HMM&(34 **734 %%hmmFH&=> ++G45 ((vx)@A **734rctj}tj}|j||jt|jd|jt|j |d|jt|j d||jt|j dd|j ||jt|j d|jt|j|d|jt|jd||jt|jddy)zO Children of L{Node} instances must also be L{Node} instances. N)r r}rri TypeErrorrrr)rrrs rtest_validChildInstancez!NodeTests.test_validChildInstances}}   )T%5%5t< )T%6%6tD )T%6%6eD )T%6%6dC  )T%5%5t< )T%6%6tD )T%6%6eD )T%6%6dCrNr")r&r'r(ryrrr)rrr{r{ps56Drr{c$eZdZdZdZddZddZy) DocumentTestsz Tests for L{Document}. rcttj}|j|j|tj}|j|j||j|_|j |j||j|_|j|j||j tjt|j |j||j tjt|j|j||jj tjt|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 rTrrrrrr}r~rT)rrYrs rtest_isEqualToNodez DocumentTests.test_isEqualToNodes7 $$& ..x89##% ..w78 << //89,, ..w78 X]]6845 //89HMM&(34 ..w78   ,,X]]68-DE //89rctj}tj}tj}|j||j t |j|y)zk L{Document.appendChild} raises L{ValueError} if the document already has a child. N)r rTr}rrir)rrYrrs rtest_childRestrictionz#DocumentTests.test_childRestrictionsN $$& --/U# *h&:&:GDrNr")r&r'r(ryrrrr)rrrrsFG:> ErrceZdZdZddZy)EntityReferenceTestsz' Tests for L{EntityReference}. c|jtjdjtjd|j tjdjtjdy)z L{EntityReference.isEqualToNode} returns C{True} if and only if passed a L{EntityReference} with the same C{eref}. quotaposN)rr rrrrs rrz'EntityReferenceTests.test_isEqualToNodesn   $ $V , : :((0    $ $V , : :((0  rNr"r&r'r(ryrr)rrrrs  rrceZdZdZddZy)CharacterDataTestsz% Tests for L{CharacterData}. c|jtjdjtjd|j tjdjtjdy)z L{CharacterData.isEqualToNode} returns C{True} if and only if passed a L{CharacterData} with the same value. rrN)rr CharacterDatarrrs rrz%CharacterDataTests.test_isEqualToNodesh   " "5 ) 7 78N8Nu8U V    " "5 ) 7 78N8Nu8U V rNr"rr)rrrr   rrceZdZdZddZy) CommentTestsz Tests for L{Comment}. c|jtjdjtjd|j tjdjtjdy)zz L{Comment.isEqualToNode} returns C{True} if and only if passed a L{Comment} with the same value. rrN)rr rrrrs rrzCommentTests.test_isEqualToNodesa ((/==h>N>Nu>UVW ))%0>>x?O?OPU?VWXrNr"rr)rrrrs YrrceZdZdZddZy) TextTestsz Tests for L{Text}. c|jtjddjtjdd|j tjddjtjdd|j tjddjtjddy)z L{Text.isEqualToNode} returns C{True} if and only if passed a L{Text} which represents the same data. rTrFrN)rr rrrrs rrzTextTests.test_isEqualToNodes  MM%T * 8 8uRV9W X   MM%T * 8 8 e/   MM%T * 8 8uRV9W X rNr"rr)rrrrs  rrceZdZdZddZy)CDATASectionTestsz$ Tests for L{CDATASection}. c|jtjdjtjd|j tjdjtjdy)z L{CDATASection.isEqualToNode} returns C{True} if and only if passed a L{CDATASection} which represents the same data. rrN)rr rrrrs rrz$CDATASectionTests.test_isEqualToNode*sh   ! !% ( 6 6x7L7LU7S T    ! !% ( 6 6x7L7LU7S T rNr"rr)rrrr%rrrceZdZdZddZy) ElementTestsz Tests for L{Element}. c 8|jtjddditdj tjddditd|j tjddditdj tjddditd|j tjddditdj tjddditdtjddditd}tjddditd}|j tjt|j |j ||j tjddditdj tjddditdy) 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}. rrOrrrMrrN)rr rr~rrrr})ronetwos rrzElementTests.test_isEqualToNode<s    Sz68u m  c FHN     Sz68u m  c FHN     Sz68u m  c FHN usCj&(eLusCj&(eL  fh/0 **3/0    Sz68u m  c FHN rNr"rr)rrrr7s - rrN)ry __future__r importlibriortypingrtwisted.trial.unittestr twisted.webrr r XMLParserr r+r6rgr{rrrrrrrr)rrrs #+11 +CMM + 4x4{  H{  |C*hC*L3D3Dl/EH/Ed 8 ,  $ Y8 Y  .  $2 82 r