Ë
    ojº,  ã                   ó�   — d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ  G d„ d«      Z G d	„ d
ee	«      Z G d„ dee	«      Zy)zH
Specific tests for (some of) the methods in L{twisted.web.domhelpers}.
é    )Úreload)ÚAnyÚOptional)Úminidom)ÚTestCase)Ú
domhelpersÚmicrodomc                   ót   — e Zd ZU dZdZee   ed<   d„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚDOMHelpersTestsMixinz¥
    A mixin for L{TestCase} subclasses which defines test methods for
    domhelpers functionality based on a DOM creation function provided by a
    subclass.
    NÚdomc                 óÜ  — | j                   j                  d«      }t        j                  |d«      d   j                  }d}| j                  ||«       |j                  }t        j                  |d«      d   j                  }| j                  ||«       d}| j                   j                  |«      }t        j                  |d«      }dj                  |D �cg c]  }|j                  d«      ‘Œ c}«      }d}| j                  ||«       |j                  }	t        j                  |	d«      }dj                  |D �cg c]  }|j                  d«      ‘Œ c}«      }| j                  ||«       d}
| j                   j                  |
«      }t        j                  |d«      }dj                  |D �cg c]  }|j                  d«      ‘Œ c}«      }d	}| j                  ||«       |j                  }t        j                  |d«      }dj                  |D �cg c]  }|j                  d«      ‘Œ c}«      }| j                  ||«       d
}| j                   j                  |«      }t        j                  |d«      }|j                  }||j                  d   j                  d   g}| j                  ||«       t        j                  |d«      }| j                  ||«       y c c}w c c}w c c}w c c}w )Nz<foo/>Úfoor   z<a><foo in="a"/><b><foo in="b"/></b><c><foo in="c"/></c><foo in="d"/><foo in="ef"/><g><foo in="g"/><h><foo in="h"/></h></g></a>Ú ÚinÚabcdefghaH  
<a><foo in="a"/>
    <b><foo in="b"/>
        <d><foo in="d"/>
            <g><foo in="g"/></g>
            <h><foo in="h"/></h>
        </d>
        <e><foo in="e"/>
            <i><foo in="i"/></i>
        </e>
    </b>
    <c><foo in="c"/>
        <f><foo in="f"/>
            <j><foo in="j"/></j>
        </f>
    </c>
</a>Ú
abdgheicfjz'<foo><bar></bar><baz><foo/></baz></foo>éÿÿÿÿ)
r   ÚparseStringr   ÚgetElementsByTagNameÚnodeNameÚassertEqualÚdocumentElementÚjoinÚgetAttributeÚ
childNodes)ÚselfÚdoc1ÚactualÚexpectedÚel1Údoc2_xmlÚdoc2Útag_listÚnodeÚel2Údoc3_xmlÚdoc3Úel3Údoc4_xmlÚdoc4Úroots                   úB/usr/lib/python3/dist-packages/twisted/web/test/test_domhelpers.pyÚtest_getElementsByTagNamez.DOMHelpersTestsMixin.test_getElementsByTagName   s�  € Ø�x‰x×#Ñ# HÓ-ˆÜ×0Ñ0°°uÓ=¸aÑ@×IÑIˆØˆØ×Ñ˜ Ô*Ø×"Ñ"ˆÜ×0Ñ0°°eÓ<¸QÑ?×HÑHˆØ×Ñ˜ Ô*ð UˆØ�x‰x×#Ñ# HÓ-ˆÜ×2Ñ2°4¸Ó?ˆØ—‘¸hÖG°d˜$×+Ñ+¨DÕ1ÒGÓHˆØˆØ×Ñ˜ Ô*Ø×"Ñ"ˆÜ×2Ñ2°3¸Ó>ˆØ—‘¸hÖG°d˜$×+Ñ+¨DÕ1ÒGÓHˆØ×Ñ˜ Ô*ðˆð" �x‰x×#Ñ# HÓ-ˆÜ×2Ñ2°4¸Ó?ˆØ—‘¸hÖG°d˜$×+Ñ+¨DÕ1ÒGÓHˆØˆØ×Ñ˜ Ô*Ø×"Ñ"ˆÜ×2Ñ2°3¸Ó>ˆØ—‘¸hÖG°d˜$×+Ñ+¨DÕ1ÒGÓHˆØ×Ñ˜ Ô*à<ˆØ�x‰x×#Ñ# HÓ-ˆÜ×0Ñ0°°uÓ=ˆØ×#Ñ#ˆØ˜$Ÿ/™/¨"Ñ-×8Ñ8¸Ñ;Ð<ˆØ×Ñ˜ Ô*Ü×0Ñ0°°uÓ=ˆØ×Ñ˜ Õ*ùòU Hùò
 Hùò, Hùò
 Hs   ÃKÄ:KÆ-K$ÈK)c                 óÊ  — | j                   j                  d«      }t        j                  |«      }d}| j	                  ||«       t        j                  |j
                  «      }| j	                  ||«       d}| j                   j                  |«      }t        j                  |«      }d}| j	                  ||«       t        j                  |j
                  «      }| j	                  ||«       d}| j                   j                  |«      }t        j                  |«      }d}| j	                  ||«       t        j                  |j
                  «      }| j	                  ||«       y )Nz
<a>foo</a>r   z+<a>a<b>b</b><c>c</c>def<g>g<h>h</h></g></a>r   zP<a>a<b>b<d>d<g>g</g><h>h</h></d><e>e<i>i</i></e></b><c>c<f>f<j>j</j></f></c></a>r   ©r   r   r   ÚgatherTextNodesr   r   )r   r   r   r   r!   r"   r&   r'   s           r,   Útest_gatherTextNodesz)DOMHelpersTestsMixin.test_gatherTextNodesQ   s0  € Ø�x‰x×#Ñ# LÓ1ˆÜ×+Ñ+¨DÓ1ˆØˆØ×Ñ˜ Ô*Ü×+Ñ+¨D×,@Ñ,@ÓAˆØ×Ñ˜ Ô*à@ˆØ�x‰x×#Ñ# HÓ-ˆÜ×+Ñ+¨DÓ1ˆØˆØ×Ñ˜ Ô*Ü×+Ñ+¨D×,@Ñ,@ÓAˆØ×Ñ˜ Ô*ð-ð 	ð �x‰x×#Ñ# HÓ-ˆÜ×+Ñ+¨DÓ1ˆØˆØ×Ñ˜ Ô*Ü×+Ñ+¨D×,@Ñ,@ÓAˆØ×Ñ˜ Õ*ó    c                 óš  — | j                   j                  d«      }|j                  }t        j                  |«       | j                  |j                  «       | j                   j                  d«      j                  «       «       | j                   j                  d«      }|j                  j                  d   }t        j                  |«       |j                  j                  «       }| j                   j                  d«      }|j                  | j                   j                  d«      «       | j                  ||j                  «       «       y )Nz<a><b><c><d/></c></b></a>Úar   Úb)
r   r   r   r   Ú	clearNoder   ÚtoxmlÚElementr   ÚappendChild)r   r   Úa_noder"   Úb_noder   r   s          r,   Útest_clearNodez#DOMHelpersTestsMixin.test_clearNodel   só   € Ø�x‰x×#Ñ#Ð$?Ó@ˆØ×%Ñ%ˆÜ×Ñ˜VÔ$Ø×Ñ˜Ÿ™›¨¯©×)9Ñ)9¸#Ó)>×)DÑ)DÓ)FÔGà�x‰x×#Ñ#Ð$?Ó@ˆØ×%Ñ%×0Ñ0°Ñ3ˆÜ×Ñ˜VÔ$Ø×%Ñ%×+Ñ+Ó-ˆØ—8‘8×#Ñ# CÓ(ˆØ×Ñ˜TŸX™X×-Ñ-¨cÓ2Ô3Ø×Ñ˜ §¡Ó!1Õ2r2   c                 ór  — | j                   j                  d«      }| j                   j                  «       }t        j                  |d«      }|j                  «       }|j                  d«      }|j                  dd«       | j                  ||j                  «       «       t        j                  |d«      }|j                  «       }|j                  d«      }|j                  dd«       | j                  ||j                  «       «       | j                  t        j                  t        j                  |d«       y )	Nú$<a><b id="bar"/><c class="foo"/></a>r   ÚcÚclassÚbarr5   ÚidÚpzork)r   r   ÚDocumentr   Úgetr7   ÚcreateElementÚsetAttributer   ÚassertRaisesÚNodeLookupError©r   r   Údocr$   r   r   s         r,   Útest_getzDOMHelpersTestsMixin.test_getz   së   € Ø�x‰x×#Ñ#Ð$JÓKˆØ�h‰h×ÑÓ!ˆÜ�~‰~˜d EÓ*ˆØ—‘“ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜g uÔ-Ø×Ñ˜ §¡Ó!1Ô2ä�~‰~˜d EÓ*ˆØ—‘“ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜d EÔ*Ø×Ñ˜ §¡Ó!1Ô2à×Ñœ*×4Ñ4´j·n±nÀdÈGÕTr2   c                 ó�  — | j                   j                  d«      }| j                   j                  «       }t        j                  |d«      }|j                  «       }|j                  d«      }|j                  dd«       | j                  ||j                  «       «       t        j                  |d«      }| j                  |d «       y )Nr>   r   r?   r@   rC   )
r   r   rD   r   ÚgetIfExistsr7   rF   rG   r   ÚassertIdenticalrJ   s         r,   Útest_getIfExistsz%DOMHelpersTestsMixin.test_getIfExists‹   sŸ   € Ø�x‰x×#Ñ#Ð$JÓKˆØ�h‰h×ÑÓ!ˆÜ×%Ñ% d¨EÓ2ˆØ—‘“ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜g uÔ-Ø×Ñ˜ §¡Ó!1Ô2ä×%Ñ% d¨GÓ4ˆØ×Ñ˜T 4Õ(r2   c                 ó@  — | j                   j                  d«      }| j                   j                  «       }t        j                  |d«      }|j                  «       }|j                  d«      }|j                  dd«       | j                  ||j                  «       «       y )Nz<a><b id="foo"><c></c></b></a>r   r5   rB   )	r   r   rD   r   ÚgetAndClearr7   rF   rG   r   rJ   s         r,   Útest_getAndClearz%DOMHelpersTestsMixin.test_getAndClear—   s}   € Ø�x‰x×#Ñ#Ð$DÓEˆØ�h‰h×ÑÓ!ˆÜ×%Ñ% d¨EÓ2ˆØ—‘“ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜d EÔ*Ø×Ñ˜ §¡Ó!1Õ2r2   c                 ó  — | j                   j                  d«      }| j                   j                  «       }t        j                  |j
                  ddd¬«      }dj                  |D �cg c]  }|j                  «       ‘Œ c}«      }|j                  d«      }|j                  dd«       |j                  d«      }|j                  dd«       |j                  |«       | j                  ||j                  «       «       t        j                  |j
                  ddd	¬«      }dj                  |D �cg c]  }|j                  «       ‘Œ c}«      }| j                  ||j                  «       |j                  «       z   «       y c c}w c c}w )
Nz:<a><b foo="olive"><c foo="olive"/></b><d foo="poopy"/></a>r   Úoliveé   )Ú	noNestingr   r5   r?   r   )r   r   rD   r   ÚlocateNodesr   r   r7   rF   rG   r9   r   )r   r   rK   Ú	node_listr$   r   r   r?   s           r,   Útest_locateNodesz%DOMHelpersTestsMixin.test_locateNodes    s0  € Ø�x‰x×#Ñ#ØHó
ˆð �h‰h×ÑÓ!ˆÜ×*Ñ*¨4¯?©?¸EÀ7ÐVWÔXˆ	Ø—‘°9Ö=¨4˜$Ÿ*™*�,Ò=Ó>ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜e WÔ-Ø×Ñ˜cÓ"ˆØ	�‰�u˜gÔ&Ø×Ñ˜QÔà×Ñ˜ §¡Ó!1Ô2ä×*Ñ*¨4¯?©?¸EÀ7ÐVWÔXˆ	Ø—‘°9Ö=¨4˜$Ÿ*™*�,Ò=Ó>ˆØ×Ñ˜ §¡Ó!1°A·G±G³IÑ!=Õ>ùò >ùò >s   Á(E?Ä/Fc           	      óL  — | j                   j                  d«      }t        j                  |j                  d   j                  d   j                  d   «      }dj                  |D �cg c]  }t        |d«      sŒ|j                  ‘Œ c}«      }| j                  |d«       y c c}w )Nz!<a><b><c><d/></c><e/></b><f/></a>r   r   ÚtagNameÚcba)	r   r   r   Ú
getParentsr   r   Úhasattrr\   r   ©r   r   rY   r$   r   s        r,   Útest_getParentsz$DOMHelpersTestsMixin.test_getParents³   sŒ   € Ø�x‰x×#Ñ#Ð$GÓHˆÜ×)Ñ)Ø�O‰O˜AÑ×)Ñ)¨!Ñ,×7Ñ7¸Ñ:ó
ˆ	ð —‘Ø&/ÖL˜d´7¸4ÀÕ3KˆT�\‹\ÒLó
ˆð 	×Ñ˜ Õ'ùò Ms   Á'B!Á9B!c                 ó”  — | j                   j                  d«      }t        j                  |d«      }dj	                  |D �cg c]  }|j
                  ‘Œ c}«      }| j                  |d«       t        j                  |dd«      }dj	                  |D �cg c]  }|j
                  ‘Œ c}«      }| j                  |d«       y c c}w c c}w )Nz+<a foo="1"><b foo="2"/><c foo="1"/><d/></a>r   r   ÚabcÚ1Úac)r   r   r   ÚfindElementsWithAttributer   r\   r   r`   s        r,   Útest_findElementsWithAttributez3DOMHelpersTestsMixin.test_findElementsWithAttribute½   s¡   € Ø�x‰x×#Ñ#Ð$QÓRˆÜ×8Ñ8¸¸uÓEˆ	Ø—‘°9Ö=¨4˜$Ÿ,›,Ò=Ó>ˆØ×Ñ˜ Ô'ä×8Ñ8¸¸uÀcÓJˆ	Ø—‘°9Ö=¨4˜$Ÿ,›,Ò=Ó>ˆØ×Ñ˜ Õ&ùò >ùò >s   ÁC ÂCc                 ó    — | j                   j                  d«      }t        j                  |d«      }t	        |«      }| j                  |d«       y )Nz#<doc><foo/><bar/><foo>a</foo></doc>r   é   )r   r   r   ÚfindNodesNamedÚlenr   )r   r   rY   r   s       r,   Útest_findNodesNamedz(DOMHelpersTestsMixin.test_findNodesNamedÇ   sB   € Ø�x‰x×#Ñ#Ð$IÓJˆÜ×-Ñ-¨d°EÓ:ˆ	Ü�Y“ˆØ×Ñ˜ Õ#r2   c                 óV   — d}d}| j                  t        j                  |«      |«       y )Nz9this string " contains many & characters> xml< won't likezHthis string &quot; contains many &amp; characters&gt; xml&lt; won't like)r   r   Úescape©r   Újr   s      r,   Útest_escapez DOMHelpersTestsMixin.test_escapeÍ   s,   € ØHˆàVð 	ð 	×Ñœ×*Ñ*¨1Ó-¨xÕ8r2   c                 óV   — d}d}| j                  t        j                  |«      |«       y )NzTthis string &quot; has &&amp; entities &gt; &lt; and some characters xml won't like<zEthis string " has && entities > < and some characters xml won't like<)r   r   Úunescapero   s      r,   Útest_unescapez"DOMHelpersTestsMixin.test_unescapeÔ   s,   € ØbˆàTð 	ð 	×Ñœ×,Ñ,¨QÓ/°Õ:r2   c                 ó„   — | j                   j                  d«      }| j                  t        j                  |«      d«       y)z|
        L{getNodeText} returns the concatenation of all the text data at or
        beneath the node passed to it.
        z(<foo><bar>baz</bar><bar>quux</bar></foo>ÚbazquuxN)r   r   r   r   ÚgetNodeText)r   r$   s     r,   Útest_getNodeTextz%DOMHelpersTestsMixin.test_getNodeTextÛ   s4   € ð
 �x‰x×#Ñ#Ð$NÓOˆØ×Ñœ×/Ñ/°Ó5°yÕAr2   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__annotations__r-   r1   r<   rL   rP   rS   rZ   ra   rg   rl   rq   rt   rx   © r2   r,   r   r      s[   … ñð €Cˆ�#‰Óò6+òp+ò63òUò"
)ò3ò?ò&(ò'ò$ò9ò;óBr2   r   c                   ó"   — e Zd ZeZd„ Zd„ Zd„ Zy)ÚMicroDOMHelpersTestsc                 óò   — d}| j                   j                  |«      }t        j                  |«      }d}| j	                  ||«       t        j                  |j
                  «      }| j	                  ||«       y)z£
        Microdom discards whitespace-only text nodes, so L{gatherTextNodes}
        returns only the text from nodes which had non-whitespace characters.
        z?<html>
  <head>
  </head>
  <body>
    stuff
  </body>
</html>
z
    stuff
  Nr/   )r   r)   r*   r   r   s        r,   Ú#test_gatherTextNodesDropsWhitespacez8MicroDOMHelpersTests.test_gatherTextNodesDropsWhitespaceç   sj   € ð
ˆð �x‰x×#Ñ# HÓ-ˆÜ×+Ñ+¨DÓ1ˆØ$ˆØ×Ñ˜ Ô*Ü×+Ñ+¨D×,@Ñ,@ÓAˆØ×Ñ˜ Õ*r2   c                 óò   — d}| j                   j                  |«      }t        j                  |«      }d}| j	                  ||«       t        j                  |j
                  «      }| j	                  ||«       y)zB
        Microdom does not decode entities in text nodes.
        ú<x>Souffl&amp;</x>zSouffl&amp;Nr/   ©r   Údoc5_xmlÚdoc5r   r   s        r,   Útest_textEntitiesNotDecodedz0MicroDOMHelpersTests.test_textEntitiesNotDecodedû   sh   € ð (ˆØ�x‰x×#Ñ# HÓ-ˆÜ×+Ñ+¨DÓ1ˆØ ˆØ×Ñ˜ Ô*Ü×+Ñ+¨D×,@Ñ,@ÓAˆØ×Ñ˜ Õ*r2   c                 óÀ   — t        t        «       | j                  | j                  g«      }| j	                  dt        |«      «       | j	                  d|d   d   «       y)z?
        An import will raise the deprecation warning.
        rV   z8twisted.web.domhelpers was deprecated at Twisted 23.10.0r   ÚmessageN)r   r   ÚflushWarningsÚtest_deprecationr   rk   )r   Úwarningss     r,   rŒ   z%MicroDOMHelpersTests.test_deprecation  sV   € ô 	ŒzÔØ×%Ñ% t×'<Ñ'<Ð&=Ó>ˆØ×Ñ˜œC ›MÔ*Ø×ÑØFØ�Q‰K˜	Ñ"õ	
r2   N)ry   rz   r{   r	   r   r‚   rˆ   rŒ   r~   r2   r,   r€   r€   ä   s   „ Ø
€Cò+ò(
+ó

r2   r€   c                   ó   — e Zd ZeZd„ Zd„ Zy)ÚMiniDOMHelpersTestsc                 óò   — d}| j                   j                  |«      }t        j                  |«      }d}| j	                  ||«       t        j                  |j
                  «      }| j	                  ||«       y)z=
        Minidom does decode entities in text nodes.
        r„   zSouffl&Nr/   r…   s        r,   Útest_textEntitiesDecodedz,MiniDOMHelpersTests.test_textEntitiesDecoded  sh   € ð (ˆØ�x‰x×#Ñ# HÓ-ˆÜ×+Ñ+¨DÓ1ˆØˆØ×Ñ˜ Ô*Ü×+Ñ+¨D×,@Ñ,@ÓAˆØ×Ñ˜ Õ*r2   c                 ó€  — | j                   j                  d«      }t        j                  |«      }| j	                  |d«       | j                  |t        «       | j                   j                  dj                  «       «      }t        j                  |«      }| j	                  |d«       | j                  |t        «       y)zÇ
        L{domhelpers.getNodeText} returns a C{unicode} string when text
        nodes are represented in the DOM with unicode, whether or not there
        are non-ASCII characters present.
        z<foo>bar</foo>rA   u   <foo>â˜ƒ</foo>u   â˜ƒN)r   r   r   rw   r   ÚassertIsInstanceÚstrÚencode)r   r$   Útexts      r,   Útest_getNodeUnicodeTextz+MiniDOMHelpersTests.test_getNodeUnicodeText#  s—   € ð �x‰x×#Ñ#Ð$4Ó5ˆÜ×%Ñ% dÓ+ˆØ×Ñ˜˜uÔ%Ø×Ñ˜d¤CÔ(à�x‰x×#Ñ#Ð$<×$CÑ$CÓ$EÓFˆÜ×%Ñ% dÓ+ˆØ×Ñ˜˜}Ô-Ø×Ñ˜d¤CÕ(r2   N)ry   rz   r{   r   r   r‘   r—   r~   r2   r,   r�   r�     s   „ Ø
€Cò
+ó)r2   r�   N)r|   Ú	importlibr   Útypingr   r   Úxml.domr   Útwisted.trial.unittestr   Útwisted.webr   r	   r   r€   r�   r~   r2   r,   ú<module>r�      sI   ðñ
õ ß  Ý å +ß ,÷QBñ QBôh-
Ð/°ô -
ô`)Ð.°õ )r2   