
    Yf*                       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d S )!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dS )Sux0rreturnNonec                    g | _         d S )Ntokensselfs    K/var/www/html/env/lib/python3.11/site-packages/twisted/web/test/test_xml.py__init__zSux0r.__init__   s      	    2list[tuple[Literal['start'], str, dict[str, str]]]c                $    d | j         D             S )Nc                *    g | ]}|d          dk    |S )r   start ).0tokens     r   
<listcomp>z&Sux0r.getTagStarts.<locals>.<listcomp>   s&    FFF%%(g2E2E2E2E2Er   r   r   s    r   getTagStartszSux0r.getTagStarts   s    FF4;FFFFr   namestrattrsdict[str, str]c                @    | j                             d||f           d S )Nr   r   append)r   r    r"   s      r   gotTagStartzSux0r.gotTagStart   s%    GT5122222r   textc                >    | j                             d|f           d S )Nr(   r%   )r   r(   s     r   gotTextzSux0r.gotText   s"    FD>*****r   Nr   r   )r   r   )r    r!   r"   r#   r   r   )r(   r!   r   r   )__name__
__module____qualname__r   r   r'   r*   r   r   r   r   r      sh           
G G G G3 3 3 3+ + + + + +r   r   c                      e Zd ZddZdS )SUXTestsr   r   c                    d}t                      }|                                 |                    |           |                     t	          |                                          d           d S )Ns   <bork><bork><bork>   )r   connectionMadedataReceivedassertEquallenr   )r   smss      r   	test_borkzSUXTests.test_bork$   sb    !WW

R__..//33333r   Nr+   )r,   r-   r.   r9   r   r   r   r0   r0   #   s(        4 4 4 4 4 4r   r0   c                     e Zd Zd7dZd7dZd7dZd7dZd7dZd7dZd7d	Z	d7d
Z
d7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZd7dZg dZd7d Z d7d!Z!d7d"Z"d7d#Z#d7d$Z$d7d%Z%d7d&Z&d7d'Z'd7d(Z(d7d)Z)d7d*Z*d7d+Z+d7d,Z,d7d-Z-d7d.Z.d7d/Z/d7d0Z0d7d1Z1d7d2Z2d7d3Z3d7d4Z4d7d5Z5d6S )8MicroDOMTestsr   r   c           	     p   d}t          j        |d          }|                     |                                                                d           t                      }|                                                    |ddddi d           |                     |                                d           dS )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	   parseStringr5   
firstChildtoxmlr   writexmlgetvaluer   r7   d
byteStreams       r   test_leadingTextDroppingz&MicroDOMTests.test_leadingTextDropping-   s    
 ( t<<<LLNN  ""$P	
 	
 	
 YY
	
BBBCCC!!#P	
 	
 	
 	
 	
r   c           	     p   d}t          j        |d          }|                     |                                                                d           t                      }|                                                    |ddddi d           |                     |                                d           dS )z~
        Ensure that no *trailing* text in a mal-formed
        no-top-level-element document(s) will not be dropped.
        z<br>Hi orders!Tr=   z<html><br />Hi orders!</html>r?   s   <html><br />Hi orders!</html>Nr@   rF   s       r   test_trailingTextDroppingz'MicroDOMTests.test_trailingTextDropping=   s    
  t<<<--//1PQQQYY
	
BBBCCC,,..0PQQQQQr   c                    d}t          j        |d          }|                     |                                                                d           dS )zp
        A string with nothing that looks like a tag at all should just
        be parsed as body text.
        z
Hi orders!Tr=   z<html>Hi orders!</html>Nr	   rA   r5   rB   rC   r   r7   rG   s      r   test_noTagszMicroDOMTests.test_noTagsI   sO    
  t<<<--//1JKKKKKr   c                    d}t          j        |d          }|                     |                                                                d           dS )zl
        If a document is surrounded by non-xml text, the text should
        be remain in the XML.
        zHi<br> orders!Tr=   z<html>Hi<br /> orders!</html>NrM   rN   s      r   test_surroundingCrapz"MicroDOMTests.test_surroundingCrapR   sO    
  t<<<--//1PQQQQQr   c                   d}t          j        |d          }t          j        |j        d          }t          j        |d         d                              dd          }|                     |                    d          d	           d S )
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>
               r=   ar   z&nbsp; insane)	r	   rA   r   findNodesNameddocumentElementgatherTextNodesreplacer5   find)r   r7   rG   lns        r   test_caseSensitiveSoonCloserz*MicroDOMTests.test_caseSensitiveSoonCloser[   s      q999%a&7==&qtQ//77#FF))2.....r   c                    d}t          j        |d          }|                     |j        |j                                        j                   dS )z
        Test that C{parentNode} attributes are set to meaningful values when
        we are parsing HTML that lacks a root node.
        z
<br/><br/>rS   r=   Nr	   rA   assertIdenticalrY   rB   
parentNoderN   s      r   test_lenientParentingz#MicroDOMTests.test_lenientParentingm   sZ      q999q0;;==H	
 	
 	
 	
 	
r   c                    d}t          j        |d          }|                     |j        |j                                        j                   dS )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.
        HellorS   r=   Nra   rN   s      r   test_lenientParentSinglez&MicroDOMTests.test_lenientParentSingley   sZ    
  q999q0;;==H	
 	
 	
 	
 	
r   c                    d}t          j        |d          }t          j        |          }|                     |                    d          d           d S )Nz
                <HTML>
                    This HTML goes between Stupid <=CrAzY!=> Dumb.
                </HTML>
            rS   r=   >rW   )r	   rA   r   rZ   assertNotEqualr\   )r   r7   rG   r^   s       r   test_unEntitieszMicroDOMTests.test_unEntities   sV    
  q999&q))AFF3KK,,,,,r   c                \    |                      t          j        t          j        d           d S )Nr?   )assertRaisesr
   
ParseErrorr	   rA   r   s    r   test_emptyErrorzMicroDOMTests.test_emptyError   s%    #.(*>CCCCCr   c                    d}t          j        |          }|                     t          j        |j                                                  d           d S )Nz
        <test>
         <it>
          <is>
           <a>
            test
           </a>
          </is>
         </it>
        </test>
        test)r	   rA   r5   r   rZ   rY   striprN   s      r   test_tameDocumentzMicroDOMTests.test_tameDocument   sR    
  ##3A4EFFLLNNPVWWWWWr   c                    d}t          j        |d          }t          j        |j        d          }|                     t          |          d           d S )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>
        rS   r=   blink)r	   rA   r   rX   rY   r5   r6   )r   r7   rG   r]   s       r   test_awfulTagSoupzMicroDOMTests.test_awfulTagSoup   sW    *  q999%a&7AAQ#####r   c                   d}t          j        |d          }|                     |                                                                                                j        d           |                     |                                                    d          d                                         j        d           d S )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>
        rS   r=   z(foo < bar) and (bar > foo)scriptzfoo </scrip bar )r	   rA   r5   rB   datagetElementsByTagNamerN   s      r   test_scriptLeniencyz!MicroDOMTests.test_scriptLeniency   s      q999LLNN%%''22449;X	
 	
 	
 	LLNN//99!<GGIIN	
 	
 	
 	
 	
r   c                   d}|                      t          j        |d                                                                          |           d}|                      t          j        |d                                                                          |           d}|                      t          j        |d                                                                          |           d S )Nz<script><!-- lalal --></script>rS   r=   z"<script><![CDATA[lalal]]></script>z:<script> // <![CDATA[
        lalal
        //]]></script>)r5   r	   rA   rB   rC   r   r7   s     r   test_scriptLeniencyIntelligencez-MicroDOMTests.test_scriptLeniencyIntelligence   s     2 q999DDFFLLNNPQ	
 	
 	
 5 q999DDFFLLNNPQ	
 	
 	
 	 q999DDFFLLNNPQ	
 	
 	
 	
 	
r   c                *   d}|                                                     dd          }t          j        |dd          }t          j        |dd          }t          j        |dd          }t          j        |dd          }t          j        |dd          }|                     |j                                        |           |                     |                    |          |                                d|                                           |                     |                    |          |                                d|                                           |                     |                    |          |                                d|                                           |                     |                    |          |                                d|                                           d S )NzH<eNcApSuLaTe><sUxor></sUxor><bOrk><w00T>TeXt</W00t></BoRk></EnCaPsUlAtE>r(   TeXtrS   caseInsensitivepreserveCaser   z != )	lowerr[   r	   rA   r5   rY   rC   
assertTrueisEqualToDocument)r   r7   s2rG   d2d3d4d5s           r   test_preserveCasezMicroDOMTests.test_preserveCase   s   VWWYYvv.. AAFFF!!QQGGG !"aaHHH!"aaHHH!"aaHHH
 	*0022A666++B//AGGII1S1SRXXZZ1S1STTT,,R00RXXZZ2U2Urxxzz2U2UVVV 	,,R00RXXZZ2U2Urxxzz2U2UVVV,,R00RXXZZ2U2Urxxzz2U2UVVVVVr   c                    d}t          j        |          }|j        }|                     |                    d          d           |                     |                    d          d           d S )Nz<test a="a" b='b' />rT   br	   rA   rY   r5   getAttributer   r7   rG   es       r   test_differentQuotesz"MicroDOMTests.test_differentQuotes   si    $ ##,,c222,,c22222r   c                    d}t          j        |          }|j        }|                     |                    d          d           |                     |                    d          d           d S )Nz<test 
a="a"
	b="#b" />rT   r   z#br   r   s       r   test_LinebreakszMicroDOMTests.test_Linebreaks   si    ( ##,,c222,,d33333r   c                f    dD ]-}|                      t          j        t          j        |           .d S )N)z<test>z<test> </tset>z</test>)rm   r	   MismatchedTagsrA   r}   s     r   test_mismatchedTagsz!MicroDOMTests.test_mismatchedTags  s@    6 	P 	PAh5x7KQOOOO	P 	Pr   c                   d}t          j        |          }|j        }|                     |j        d           |j        d         }|                     t          |t           j                             |                     |j	        d           |
                                }|                     ||u           |                     |                                d           d S )Nz<bar><!--<foo />--></bar>barr   <foo />z<!--<foo />-->)r	   rA   rY   r5   nodeName
childNodesr   
isinstanceCommentvalue	cloneNoderC   )r   r7   rG   r   cc2s         r   test_commentzMicroDOMTests.test_comment  s    ' ##U+++LO
1h&677888),,,[[]]$$$%566666r   c                   t          j        d          j        }|j        d         }|                     t          |t           j                             |                     |j        d           |	                                }|                     ||u           |                     |
                                d           d S )Nz<bar>xxxx</bar>r   xxxx)r	   rA   rY   r   r   r   Textr5   r   r   rC   )r   rG   r(   clones       r   	test_textzMicroDOMTests.test_text  s     !233C|A
477888V,,,  T)***/////r   c                   t          j        d          j        j        }|                     t          |          d           |                     |d         j        d           |                     |d         j        d           |                     |d                                                                         d           |D ]/}| 	                    t          |t           j                             0d S )Nz<b>&amp;&#12AB;</b>   r   &amp;rS   z&#12AB;)r	   rA   rY   r   r5   r6   ry   r   rC   r   r   EntityReference)r   nodesr^   s      r   test_entitieszMicroDOMTests.test_entities  s    $%:;;KVUQ'''q000q	222q++--3355w??? 	E 	EAOOJq(*BCCDDDD	E 	Er   c                V   d}t          j        |          j        j        d         }|                     t          |t           j                             |                     |j        d           |                     |	                                
                                d           d S )Nz<x><![CDATA[</x>
 & foo]]></x>r   z</x>
 & fooz<![CDATA[</x>
 & foo]]>)r	   rA   rY   r   r   r   CDATASectionr5   ry   r   rC   )r   r7   cdatas      r   
test_CDatazMicroDOMTests.test_CData%  s    /$Q''7B1E
5(*?@@AAA%5666**00224PQQQQQr   c                   d}d}t          j        |          j        j        }t          j        |          j        j        }|                     t          |          d           t          ||          D ]u\  }}|                     t          |t           j	                             |                     |j
        d           |                     |                    |                     vd S )Nz<foo><b/><b /><b
/></foo>z<foo><b/><b/><b/></foo>r2   r   )r	   rA   rY   r   r5   r6   zipr   r   Elementr   isEqualToNode)r   r7   r   r   nodes2r^   n2s          r   test_singletonszMicroDOMTests.test_singletons,  s    (&$Q''7B%b))9DUQ''''' 	1 	1EArOOJq(*:;;<<<QZ---OOAOOB//0000	1 	1r   c                `   d}t          j        |          j        }|                     |                    d          d           |                     |                    d          d            |                     |                    d                     |                     |                    d                      |                    d          }|                     |j        d           |	                    dd           |                     |                    d          d           d S )Nz<foo a="b" />rT   r   r   foor   )
r	   rA   rY   r5   r   r   hasAttributegetAttributeNoder   setAttribute)r   r7   noderT   s       r   test_attributeszMicroDOMTests.test_attributes7  s   #A&&6**3//555**3//666))#..///D--c222333!!#&&#&&&%'''**511599999r   c                    d}t          j        |          j        }|                     d |j        D             g d           |                     |                                j        d           |                     |                                j        d           |                     |	                                           |                     |                                	                                            d S )Nz'<foo><bar /><baz /><bax>foo</bax></foo>c                    g | ]	}|j         
S r   )r   )r   r^   s     r   r   z/MicroDOMTests.test_children.<locals>.<listcomp>H  s    ;;;!*;;;r   )r   bazbaxr   r   )
r	   rA   rY   r5   r   	lastChildr   rB   r   hasChildNodesrN   s      r   test_childrenzMicroDOMTests.test_childrenE  s    5 ##3;;al;;;=R=R=RSSS/7770%888))***ALLNN88:::;;;;;r   c                   d}d}d}t          j        |          j        }t          j        |          j        }t          j        |          j        }|                    |                                           |                    dd           |j        d         }|                     |                    d          d            |                     |j	        d           |
                    t          j        d          |           |                     |j        d         j	        d           |                     |j        d	         |           |j        D ]}|                     |j        |           |                     |                    |                     |                    |           |                     t!          |j                  d	           |                     |j        d         j	        d           t          j        d          }	|                    |	|                                           |                     |                                |	           |                     |                    |                     d S )
Nr   z<foo a="b"><bar/><foo/></foo>z<foo a="b">foo</foo>rT   r   r   r   r   rS   )r	   rA   rY   appendChildr   r   r   r5   r   r   insertBeforer   rc   r   r   removeChildr6   r   replaceChildrB   )
r   r7   s1r   rG   d1r   childr^   ts
             r   test_mutatezMicroDOMTests.test_mutateN  s!   ,# ##3!"%%5!"%%5	akkmm$$$	sC   Q++C00$777///	x'..666a15999a%000 	. 	.AQ\1----++,,,	eQ\**A...a15999M%  	q!,,..)))+++++,,,,,r   c                    t          j        d          }t          j        d          }t          j        d          }|                     t          |j        ||           dS )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	   rA   rm   
ValueErrorr   )r   parentorphanreplacements       r   test_replaceNonChildz"MicroDOMTests.test_replaceNonChildl  sW    
 %i00%i00*955*f&9;OOOOOr   c                :   d}d}t          j        |          }t          j        |dd          }t          j        |dd          }|j        }|                     |                                |                    d                     |                     |                    d          ||                                                                g           |j        }|                     |                                |                    d                     |                     |                    d          |g           |                     |                    d	          |                                                                g           |                     |                    d          g            |j        }|                     |                                |                    d                     |                     |                    d
          ||                                                                g           |                     |                    d          ||                                                                g           d S )Nz,<foo><bar id='me' /><baz><foo /></baz></foo>z,<fOo><bAr id='me' /><bAz><fOO /></bAz></fOo>r   rS   r   mer   fOofOOFOO)r	   rA   rY   r5   rB   getElementByIdrz   r   )r   r7   r   rG   r   r   roots          r   test_searchzMicroDOMTests.test_searchw  s\   :; ##!"aaHHH!"aaHHH **A,<,<T,B,BCCC""5))D$..2B2B2M2M2O2O+P	
 	
 	
 !**B,=,=d,C,CDDD0077$@@@##E**T^^-=-=-H-H-J-J,K	
 	
 	
 	0077<<<!**B,=,=d,C,CDDD##E**T4>>3C3C3N3N3P3P,Q	
 	
 	
 	##E**T4>>3C3C3N3N3P3P,Q	
 	
 	
 	
 	
r   c                   d}d}t          j        |          }t          j        |          }|                     |j        d           |                     |                                |           |                     |                    |                     |                     |j        	                    |j                             d S )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	   rA   r5   doctyperC   assertFalser   r   rY   r   )r   r7   r   rG   r   s        r   test_doctypezMicroDOMTests.test_doctype  s     	

  ##!"%%IN	
 	
 	
 	A&&&,,R00111)778JKKLLLL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                                        }|                     ||           |                     |                    |                     d S )Nr   r   )samplesr	   rA   rY   rC   r5   r   r   )r   r7   outrG   r   testOuts         r   test_outputzMicroDOMTests.test_output  s    l 	5 	5FAs$Q:::A%c1===B'--//GS'***OOA//334444	5 	5r   c                \    dD ](}|                      t          t          j        |           )d S )N)z<foo>&am</foo>z<fooz<f>&</f>z<() />)rm   	Exceptionr	   rA   r}   s     r   test_errorszMicroDOMTests.test_errors  s=    A 	B 	BAi)=qAAAA	B 	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                                        }|                     t           j        t           j        |d           |                     ||           |                     |                    |                     |                     |                    |                     |                     |j        	                    d	                     | 
                    |
j        	                    d	                     |                     |j                                        d
           |                     |	j                                        d           d S )Nz<foo a='b'><BAx>x</bax></FOO><foo a="b"><bax>x</bax></foo>z<FOO a='b'><BAx>x</BAx></FOO>r   rS   r   r   r   rT   r   z<foo a="b">x</foo>)r	   rA   rY   rC   rm   r   r5   r   r   r   r   )r   r7   r   s3s4rG   r   r   r   r   d6r   s               r   test_caseInsensitivez"MicroDOMTests.test_caseInsensitive  s   +,,! ##!"%%!"a888!"aaHHH!"aaHHH!"aaHHH"1%%5;;==#X%91a 	 	
 	
 	
 	b!!!++B//000++B//000*77<<===+88==>>>+11335IJJJ+11335IJJJJJr   c                   d}t          j        |          }|                     |j                                         |j        j                   |                     |                    t          j        d                               d S )Nz<hello>
        </hello>z<hello></hello>)r	   rA   r   rY   r   r   r   rN   s      r   test_eatingWhitespacez#MicroDOMTests.test_eatingWhitespace  s     ##!//11113D3O	
 	
 	
 	++H,@AR,S,STTUUUUUr   c                8   d}dD ]Q\  }}t          j        | d| dd          }|                     |j                                        d|z             Rt          j        dd          }|                     |j                                        d	           d S )
Nz<?xml version='1.0'?>))&r   )z& z&amp; )r   r   )z&hello monkeyz&amp;hello monkeyz<pre>z</pre>rS   r=   z<pre>%s</pre>z<t>hello & there</t>z<t>hello &amp; there</t>r	   rA   r5   rY   rC   )r   prefixiorG   s        r   test_lenientAmpersandz#MicroDOMTests.test_lenientAmpersand  s    (
 	M 	MDAq $%>%>Q%>%>%>STUUUAQ.4466!8KLLLL !7ANNN*00224NOOOOOr   c                    t          j        dd          }|                     |j                                                                        d           d S )Nz3<?xml version='1.0'?><bar><xA><y>c</Xa> <foo></bar>rS   r=   z<xa><y>c</y></xa>)r	   rA   r5   rY   rB   rC   )r   rG   s     r   test_insensitiveLenientz%MicroDOMTests.test_insensitiveLenient  sY     AVW
 
 
 	*5577==??ATUUUUUr   c                    d}t          j        |d          }d}|j                                        }|                     ||           d S )Nz<ul><li>foo<li>bar<li>baz</ul>rS   r=   z-<ul><li>foo</li><li>bar</li><li>baz</li></ul>r	   rA   rY   rC   r5   r   r7   rG   expectedactuals        r   test_laterCloserSimplez$MicroDOMTests.test_laterCloserSimple  sQ    , q999B"((**6*****r   c                    d}t          j        |d          }d}|j                                        }|                     ||           d S )Nz<DL><p><DT>foo<DD>bar</DL>rS   r=   z(<dl><p></p><dt>foo</dt><dd>bar</dd></dl>r  r  s        r   test_laterCloserCaseInsensitivez-MicroDOMTests.test_laterCloserCaseInsensitive  sQ    ( q999="((**6*****r   c                    d}d}t          j        |d          }|j                                        }|                     ||           d S )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>rS   r=   r  )r   r7   r  rG   r  s        r   test_laterCloserDLz MicroDOMTests.test_laterCloserDL  s]     	
 	  q999"((**6*****r   c                ,   dd l d}d}d}dfd}t          j         ||                    d	                              }t          j        |                    d	                    }t          j        |          }|                     |                    |                     |                     |                    |                     t          j        |          }t          j         ||                    }t          j        |          }|                     |                    |                     |                     |                    |                     t          j        d
          }d}	t          j                                        dd          j        }
|j	        }|
                    |
           |
                    |                    d                     |                     |                                |	dz              d S )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 > \[000  < / T I T L E > < / J A P A N E S E > r7   bytesr   c                    t          t          |           dz            dz   } j        d|z   g                    d|z   |           R  S )Nr   H<ri   )r!   r6   packunpack)r7   fmtstructs     r   reverseBytesz9MicroDOMTests.test_unicodeTolerance.<locals>.reverseBytes  sO    c!ffk""S(C6;sSyG6==sA+F+FGGGGr   zUTF-16r   z<?xml version="1.0"?>u   √rS   rawu#   <foo><div>√</div><!--√--></foo>)r7   r  r   r  )r  r	   rA   encoder   r   lmxr(   r   rY   r   createCommentr5   rC   )r   r7   jj2r  urdudsdj3hdrdivder  s               @r   test_unicodeTolerancez#MicroDOMTests.test_unicodeTolerance  s    +N 	

P 		H 	H 	H 	H 	H 	H "<<0B0B#C#CDD!!((8"4"455!!$$,,R00111,,S11222!!$$"<<#3#344!"%%,,R00111,,S11222 !(++%lnn!!(!227
s
r''11222HHJJJJ	
 	
 	
 	
 	
r   c                D   dddd}|                                 D ]}t          j        |          j        }t	          j        |d          }|                     t          |          ||                    |r)|                     t          |d         d                     d S )Nr2   r   rS   )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	   rA   rY   r   namedChildrenr5   r6   r   hasattr)r   testsr   r   results        r   test_namedChildrenz MicroDOMTests.test_namedChildren:  s    MN 12
 

  	? 	?A'**:D-dE::FS[[%(333 ?q	9 = =>>>	? 	?r   c                   d}t          j        |          j        }|                    d          }|                     ||           |                     t          |j                  t          |j                             |                                |                                }}|                     ||           |                     t          |j                  t          |j                             |                     |                                |                                           |                     ||	                                           |                     |j
        |j
                   d S )Nr   rS   deep)r	   rA   rY   r   failIfEqualsr5   r6   r   rB   rC   	namespace)r   r7   r   r   c1r   s         r   test_cloneNodezMicroDOMTests.test_cloneNodeG  s1   +#A&&6A&&$&&&T_--s53C/D/DEEE""E$4$4$6$6B"b!!!R]++S-?-?@@@"--//2==??;;;EKKMM***99999r   c                   d}t          j        |          }|                    d          }|                     ||           |                     t          |j                  t          |j                             |                     ||                                           |                     |	                    |                     |                     |	                    |                     d S )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>rS   r0  )
r	   rA   r   r2  r5   r6   r   rC   r   r   )r   r7   r   r   s       r   test_cloneDocumentz MicroDOMTests.test_cloneDocumentT  s    T 	
 #A&&A&&$&&&T_--s53C/D/DEEEEKKMM***//55666..u5566666r   c                   t          j        d          }t          j        |          }|                    d           |                    d          }d|                                d<   |                                 |                    dd           d	}|                     ||                                           d S )
Npr   r   )rT   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   addr5   rC   )r   r^   r  r   r7   s        r   test_LMXzMicroDOMTests.test_LMXd  s    S!!l1ooEECELL		esTAGGII&&&&&r   c                L    t          j        d          }t          |           dS )z9
        Returns a dictionary which is hashable.
        r9  N)r	   r   hash)r   r^   s     r   	test_dictzMicroDOMTests.test_dictp  s#     S!!Qr   c                    d}d}t          j        |          }|                     ||           |                     t          j        |          |           d S )Nz&'some "stuff"', <what up?>z/&amp;'some &quot;stuff&quot;', &lt;what up?&gt;)r	   escaper5   unescape)r   r  cookedesc1s       r   test_escapingzMicroDOMTests.test_escapingw  sX    -Bs##v&&&*400#66666r   c                   d}t          j        |          }|                                }|                     |j        j        d           |                     |j                            d          d         j        d           |                     |j                            d          d                             dd          d           t          j        |          }|                     |j        j        d           |                     |j                            d          d         j        d           |                     |j                            d          d                             dd          d           d S )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>
        baser;  r   rS   q1)r	   rA   toprettyxmlr5   rY   r3  rz   getAttributeNS)r   r7   rG   r   r   s        r   test_namespaceszMicroDOMTests.test_namespaces  sv     ##]]__*4f===22377:Df	
 	
 	
 	22377:II&RUVV	
 	
 	

 !"%%+5v>>>33C88;Ev	
 	
 	
 	33C88;JJ6SVWW	
 	
 	
 	
 	
r   c                    d}t          j        |                                          }|                     ||           dS )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	   rA   rC   r5   )r   r   r   s      r   test_namespaceDeletez"MicroDOMTests.test_namespaceDelete  sF    
, 	 !"%%++--R     r   c                    t          j        d          }t          j        dd          }|g|_        |                     |                                d           dS )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r3  z9<div xmlns="http://www.w3.org/1999/xhtml"><ol></ol></div>N)r	   r   r   r5   rC   )r   r   r   s      r   test_namespaceInheritancez'MicroDOMTests.test_namespaceInheritance  sd      &&!%3QRRR"GLLNNW	
 	
 	
 	
 	
r   c                   d}d}t          j                    }|                    d|          }|                    |di           |                    d|          }|                    d|          }|                    |           |                    |           |                    |           d}|                                }|                     ||           d	S )
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   rR  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   rC   r5   )	r   outerNamespaceinnerNamespacedocumentr   rX  r   xmlOkxmlOuts	            r   test_prefixedTagszMicroDOMTests.test_prefixedTags  s     43$&& %%f%GG 	.'2333 $$Un$EE &&w.&IIT""" 	 !!'''''r   c                   d}d}t          j                    }|                    d|          }|                    |           |                    |di           |                    d|          }|                    |           |                    d|          }|                    |           d}|                                }|                     ||           d	S )
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>
        rU  rV  r   rR  rW  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	   rY  rZ  r   r[  rC   r5   )	r   r\  r]  r^  r   rc  rd  r_  r`  s	            r   test_prefixPropagationz$MicroDOMTests.test_prefixPropagation  s    < 43$&&%%f%GGT""" 	.'2333&&w.&II ))*)OO(### 	 !!'''''r   c                    t          t                     |                     | j        g          }|                     dt          |                     |                     d|d         d                    dS )z?
        An import will raise the deprecation warning.
        rS   z6twisted.web.microdom was deprecated at Twisted 23.10.0r   messageN)r   r	   flushWarningstest_deprecationr5   r6   )r   warningss     r   ri  zMicroDOMTests.test_deprecation  sx     	x%%t'<&=>>CMM***DQK	"	
 	
 	
 	
 	
r   Nr+   )6r,   r-   r.   rI   rK   rO   rQ   r_   rd   rg   rk   ro   rs   rv   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r&  r.  r5  r7  r=  r@  rF  rM  rO  rS  ra  re  ri  r   r   r   r;   r;   ,   sQ       
 
 
 
 
R 
R 
R 
RL L L LR R R R/ / / /$

 

 

 

	
 	
 	
 	
- - - -D D D DX X X X$ $ $ $4
 
 
 
"
 
 
 
$W W W W03 3 3 34 4 4 4P P P P
7 
7 
7 
70 0 0 0E E E ER R R R	1 	1 	1 	1: : : :< < < <- - - -<	P 	P 	P 	P
 
 
 
<M M M M   G5 5 5 5B B B BK K K K.V V V VP P P PV V V V+ + + ++ + + ++ + + +"+
 +
 +
 +
Z? ? ? ?: : : :7 7 7 7 
' 
' 
' 
'   7 7 7 7
 
 
 
@	! 	! 	! 	!
 
 
 
)( )( )( )(V9( 9( 9( 9(v

 

 

 

 

 

r   r;   c                  F    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	dS )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.
    rS   inputr!   r  r>   intr   r   c                    t          j        ||          }|                     |j                                        |           dS )z
        Check that C{input}, when parsed, produces a DOM where the XML
        of the document element is equal to C{expected}.
        r=   Nr   )r   rm  r  r>   outputs        r   checkParsedzBrokenHTMLTests.checkParsed3  sE     %e@RSSS/5577BBBBBr   c                :    d}d}|                      ||           dS )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rq  r   rm  r  s      r   test_brokenAttributeNamez(BrokenHTMLTests.test_brokenAttributeName=  s+    
 JS)))))r   c                :    d}d}|                      ||           dS )zJ
        Check that microdom encompasses broken attribute values.
        z6<body><h1><div align="cen!
 ter">Foo</div></h1></body>Nrs  rt  s      r   test_brokenAttributeValuez)BrokenHTMLTests.test_brokenAttributeValueF  s+     JL)))))r   c                :    d}d}|                      ||           dS )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>Nrs  rt  s      r   test_brokenOpeningTagz%BrokenHTMLTests.test_brokenOpeningTagN  s+    
 FJ)))))r   c                ^    |                      dd           |                      dd           dS )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>Nrs  r   s    r   test_brokenSelfClosingTagz)BrokenHTMLTests.test_brokenSelfClosingTagW  s8    
 	35QRRR88888r   c                    d}d}|                      ||           d}|                      ||           d}|                      ||           d}d}|                      ||           dS )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>Nrs  rt  s      r   test_brokenClosingTagz%BrokenHTMLTests.test_brokenClosingTag_  s    
 ED)))D)))D)))DK)))))r   N)rS   )rm  r!   r  r!   r>   rn  r   r   r+   )
r,   r-   r.   __doc__rq  ru  rw  ry  r{  r}  r   r   r   rl  rl  *  s          DEC C C C C* * * ** * * ** * * *9 9 9 9* * * * * *r   rl  c                  "    e Zd ZdZddZddZdS )	NodeTestsz
    Tests for L{Node}.
    r   r   c                F   t          j        t                                }|                     |                    |                     t          j        t                                }|                     |                    |                     |                    t          j        t                                           |                     |                    |                     |                    t          j        t                                           |                     |                    |                     |                                                    t          j        t                                           |                     |                    |                     |                                                    t          j        t                                           |                     |                    |                     dS )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   rB   )r   r   anothers      r   test_isNodeEqualTozNodeTests.test_isNodeEqualTou  s    }VXX&&**400111-))**733444vxx00111++G44555HM&((33444 	**733444 	%%hmFHH&=&=>>>++G44555 	((vxx)@)@AAA**73344444r   c                   t          j                    }t          j                    }|                    |           |                     t          |j        d           |                     t          |j        |d           |                     t          |j        d|           |                     t          |j        dd           |                    |           |                     t          |j        d           |                     t          |j        |d           |                     t          |j        d|           |                     t          |j        dd           dS )zO
        Children of L{Node} instances must also be L{Node} instances.
        N)r	   r  r   rm   	TypeErrorr   r   r   )r   r   r   s      r   test_validChildInstancez!NodeTests.test_validChildInstance  s,    })T%5t<<<)T%6tDDD)T%6eDDD)T%6dCCC)T%5t<<<)T%6tDDD)T%6eDDD)T%6dCCCCCr   Nr+   )r,   r-   r.   r~  r  r  r   r   r   r  r  p  sL         5 5 5 56D D D D D Dr   r  c                  &    e Zd ZdZdZddZddZdS )	DocumentTestsz 
    Tests for L{Document}.
    r   r   r   c                   t          j                    }|                     |                    |                     t          j                    }|                     |                    |                     | j        |_        |                     |                    |                     | j        |_        |                     |                    |                     |                    t          j        t                                           |                     |                    |                     |                    t          j        t                                           |                     |                    |                     |j	                            t          j        t                                           |                     |                    |                     dS )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	   rY  r   r   r   r   r   r  r  rY   )r   r^  r  s      r   test_isEqualToNodez DocumentTests.test_isEqualToNode  s    $&&..x88999 #%%..w77888  <//88999,..w77888 	X]68844555//88999HM&((33444..w77888 	 ,,X]688-D-DEEE//8899999r   c                    t          j                    }t          j                    }t          j                    }|                    |           |                     t
          |j        |           dS )zk
        L{Document.appendChild} raises L{ValueError} if the document already
        has a child.
        N)r	   rY  r  r   rm   r   )r   r^  r   r  s       r   test_childRestrictionz#DocumentTests.test_childRestriction  s]    
 $&&-//U###*h&:GDDDDDr   Nr+   )r,   r-   r.   r~  r   r  r  r   r   r   r  r    sT          FG: : : :>	E 	E 	E 	E 	E 	Er   r  c                      e Zd ZdZddZdS )EntityReferenceTestsz'
    Tests for L{EntityReference}.
    r   r   c                6   |                      t          j        d                              t          j        d                               |                     t          j        d                              t          j        d                               dS )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  s    
 	$V,,::(00 	
 	
 	

 	$V,,::(00 	
 	
 	
 	
 	
r   Nr+   r,   r-   r.   r~  r  r   r   r   r  r    s2         
 
 
 
 
 
r   r  c                      e Zd ZdZddZdS )CharacterDataTestsz%
    Tests for L{CharacterData}.
    r   r   c                6   |                      t          j        d                              t          j        d                               |                     t          j        d                              t          j        d                               dS )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  s    
 	"5))778Nu8U8UVV	
 	
 	
 	"5))778Nu8U8UVV	
 	
 	
 	
 	
r   Nr+   r  r   r   r   r  r    2         

 

 

 

 

 

r   r  c                      e Zd ZdZddZdS )CommentTestsz
    Tests for L{Comment}.
    r   r   c                6   |                      t          j        d                              t          j        d                               |                     t          j        d                              t          j        d                               dS )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  sy    
 	(//==h>Nu>U>UVVWWW)%00>>x?OPU?V?VWWXXXXXr   Nr+   r  r   r   r   r  r     s8         Y Y Y Y Y Yr   r  c                      e Zd ZdZddZdS )	TextTestsz
    Tests for L{Text}.
    r   r   c                   |                      t          j        dd                              t          j        dd                               |                     t          j        dd                              t          j        dd                               |                     t          j        dd                              t          j        dd                               dS )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%T***88uRV9W9W9WXX	
 	
 	
 	M%T***88e/// 	
 	
 	

 	M%T***88uRV9W9W9WXX	
 	
 	
 	
 	
r   Nr+   r  r   r   r   r  r    s2         
 
 
 
 
 
r   r  c                      e Zd ZdZddZdS )CDATASectionTestsz$
    Tests for L{CDATASection}.
    r   r   c                6   |                      t          j        d                              t          j        d                               |                     t          j        d                              t          j        d                               dS )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*  s    
 	!%((66x7LU7S7STT	
 	
 	
 	!%((66x7LU7S7STT	
 	
 	
 	
 	
r   Nr+   r  r   r   r   r  r  %  r  r   r  c                      e Zd ZdZddZdS )ElementTestsz
    Tests for L{Element}.
    r   r   c           
        |                      t          j        dddit                      d                              t          j        dddit                      d                               |                     t          j        dddit                      d                              t          j        dddit                      d                               |                     t          j        dddit                      d                              t          j        dddit                      d                               t          j        dddit                      d          }t          j        dddit                      d          }|                    t          j        t                                           |                     |                    |                     |                     t          j        dddit                      d                              t          j        dddit                      d                               dS )	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   rT   r   r   rR  r   r   N)r   r	   r   r  r   r   r   r  )r   onetwos      r   r  zElementTests.test_isEqualToNode<  sH    	Sz688u  m c
FHHNNN 	
 	
 	
 	Sz688u  m c
FHHNNN 	
 	
 	
 	Sz688u  m c
FHHNNN 	
 	
 	
 usCj&((eLLLusCj&((eLLLfhh//000**3//000 	Sz688u  m c
FHHNNN 	
 	
 	
 	
 	
r   Nr+   r  r   r   r   r  r  7  s2         -
 -
 -
 -
 -
 -
r   r  N)r~  
__future__r   	importlibr   ior   typing_extensionsr   twisted.trial.unittestr   twisted.webr   r	   r
   	XMLParserr   r0   r;   rl  r  r  r  r  r  r  r  r  r   r   r   <module>r     s  
  # " " " " "             % % % % % % + + + + + + 1 1 1 1 1 1 1 1 1 1+ + + + +CM + + + 4 4 4 4 4x 4 4 4{
 {
 {
 {
 {
H {
 {
 {
|C* C* C* C* C*h C* C* C*L3D 3D 3D 3D 3D 3D 3D 3Dl/E /E /E /E /EH /E /E /Ed
 
 
 
 
8 
 
 
,
 
 
 
 
 
 
 
$Y Y Y Y Y8 Y Y Y
 
 
 
 
 
 
 
.
 
 
 
 
 
 
 
$2
 2
 2
 2
 2
8 2
 2
 2
 2
 2
r   