+
    üÐjÀ,  ã                   ó’   € R t ^ RIHt ^ RIHtHt ^ RIHt ^ RIH	t	 ^ RI
HtHt  ! R R4      t ! R R	]]	4      t ! R
 R]]	4      tR# )zH
Specific tests for (some of) the methods in L{twisted.web.domhelpers}.
)Úreload)ÚAnyÚOptional)Úminidom)ÚTestCase)Ú
domhelpersÚmicrodomc                   ó‚   a € ] tR t^t o RtRtR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tV 3R ltRtV tR# )ÚDOMHelpersTestsMixinz•
A mixin for L{TestCase} subclasses which defines test methods for
domhelpers functionality based on a DOM creation function provided by a
subclass.
Nc                ó  € V P                   P                  R 4      p\        P                  ! VR4      ^ ,          P                  pRpV P                  W#4       VP                  p\        P                  ! VR4      ^ ,          P                  pV P                  W#4       RpV P                   P                  V4      p\        P                  ! VR4      pRP                  V Uu. uF  qˆP                  R4      NK  	  up4      pRpV P                  W#4       VP                  p	\        P                  ! V	R4      pRP                  V Uu. uF  qˆP                  R4      NK  	  up4      pV P                  W#4       Rp
V P                   P                  V
4      p\        P                  ! VR4      pRP                  V Uu. uF  qˆP                  R4      NK  	  up4      pRpV P                  W#4       VP                  p\        P                  ! VR4      pRP                  V Uu. uF  qˆP                  R4      NK  	  up4      pV P                  W#4       RpV P                   P                  V4      p\        P                  ! VR4      pVP                  pWÿP                  R
,          P                  ^ ,          .pV P                  W#4       \        P                  ! VR4      pV P                  W#4       R	# u upi u upi u upi u upi )z<foo/>Úfooz<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>Néÿÿÿÿ)
ÚdomÚ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_getElementsByTagNameÚ.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¹h°d×+Ñ+¨DÖ1¹hÑGÓHˆØˆØ×Ñ˜Ô*Ø×"Ñ"ˆÜ×2Ò2°3¸Ó>ˆØ—‘¹hÓG¹h°d×+Ñ+¨DÖ1¹hÑGÓHˆØ×Ñ˜Ô*ðˆð" �x‰x×#Ñ# HÓ-ˆÜ×2Ò2°4¸Ó?ˆØ—‘¹hÓG¹h°d×+Ñ+¨DÖ1¹hÑGÓHˆØˆØ×Ñ˜Ô*Ø×"Ñ"ˆÜ×2Ò2°3¸Ó>ˆØ—‘¹hÓG¹h°d×+Ñ+¨DÖ1¹hÑGÓHˆØ×Ñ˜Ô*à<ˆØ�x‰x×#Ñ# HÓ-ˆÜ×0Ò0°°uÓ=ˆØ×#Ñ#ˆØŸ/™/¨"Õ-×8Ñ8¸Õ;Ð<ˆØ×Ñ˜Ô*Ü×0Ò0°°uÓ=ˆØ×Ñ˜Ö*ùòU Hùò
 Hùò, Hùò
 Hs   ÃK.ÅK3Æ8K8ÈK=c                óÌ  € V P                   P                  R 4      p\        P                  ! V4      pRpV P	                  W#4       \        P                  ! VP
                  4      pV P	                  W#4       RpV P                   P                  V4      p\        P                  ! V4      pRpV P	                  W#4       \        P                  ! VP
                  4      pV P	                  W#4       RpV P                   P                  V4      p\        P                  ! V4      pRpV P	                  W#4       \        P                  ! VP
                  4      pV P	                  W#4       R# )z
<a>foo</a>r   z+<a>a<b>b</b><c>c</c>def<g>g<h>h</h></g></a>r   r   NzP<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   ÚgatherTextNodesr   r   )r   r   r   r   r    r!   r%   r&   s   &       r+   Útest_gatherTextNodesÚ)DOMHelpersTestsMixin.test_gatherTextNodesQ   s$  € Ø�x‰x×#Ñ# LÓ1ˆÜ×+Ò+¨DÓ1ˆØˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Ô*à@ˆØ�x‰x×#Ñ# HÓ-ˆÜ×+Ò+¨DÓ1ˆØˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Ô*ð-ð 	ð �x‰x×#Ñ# HÓ-ˆÜ×+Ò+¨DÓ1ˆØˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Ö*ó    c                ój  € V P                   P                  R 4      pVP                  p\        P                  ! V4       V P                  VP                  4       VP                  R4      P                  4       4       V P                   P                  R 4      pVP                  P                  ^ ,          p\        P                  ! V4       VP                  P                  4       pVP                  R4      pVP                  VP                  R4      4       V P                  WVP                  4       4       R# )z<a><b><c><d/></c></b></a>ÚaÚbN)
r   r   r   r   Ú	clearNoder   ÚtoxmlÚcreateElementr   ÚappendChild)r   r   Úa_noder!   Úb_noder   r   s   &      r+   Útest_clearNodeÚ#DOMHelpersTestsMixin.test_clearNodel   så   € Ø�x‰x×#Ñ#Ð$?Ó@ˆØ×%Ñ%ˆÜ×Ò˜VÔ$Ø×Ñ˜Ÿ™›¨×);Ñ);¸CÓ)@×)FÑ)FÓ)HÔIà�x‰x×#Ñ#Ð$?Ó@ˆØ×%Ñ%×0Ñ0°Õ3ˆÜ×Ò˜VÔ$Ø×%Ñ%×+Ñ+Ó-ˆØ×%Ñ% cÓ*ˆØ×Ñ˜T×/Ñ/°Ó4Ô5Ø×Ñ˜§¡Ó!1Ö2r3   c                ót  € V P                   P                  R 4      pV P                   P                  4       p\        P                  ! VR4      pVP                  4       pVP                  R4      pVP                  RR4       V P                  WEP                  4       4       \        P                  ! VR4      pVP                  4       pVP                  R4      pVP                  RR4       V P                  WEP                  4       4       V P                  \        P                  \        P                  VR4       R# )	ú$<a><b id="bar"/><c class="foo"/></a>r   ÚcÚclassÚbarr6   ÚidÚpzorkN)r   r   ÚDocumentr   Úgetr8   r9   ÚsetAttributer   ÚassertRaisesÚNodeLookupError©r   r   Údocr#   r   r   s   &     r+   Útest_getÚ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ÖTr3   c                ó”  € V P                   P                  R 4      pV P                   P                  4       p\        P                  ! VR4      pVP                  4       pVP                  R4      pVP                  RR4       V P                  WEP                  4       4       \        P                  ! VR4      pV P                  VR4       R# )r@   r   rA   rB   rE   N)
r   r   rF   r   ÚgetIfExistsr8   r9   rH   r   ÚassertIdenticalrK   s   &     r+   Útest_getIfExistsÚ%DOMHelpersTestsMixin.test_getIfExists‹   s�   € Ø�x‰x×#Ñ#Ð$JÓKˆØ�h‰h×ÑÓ!ˆÜ×%Ò% d¨EÓ2ˆØ—‘“ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜g uÔ-Ø×Ñ˜§¡Ó!1Ô2ä×%Ò% d¨GÓ4ˆØ×Ñ˜T 4Ö(r3   c                óB  € V P                   P                  R 4      pV P                   P                  4       p\        P                  ! VR4      pVP                  4       pVP                  R4      pVP                  RR4       V P                  WEP                  4       4       R# )z<a><b id="foo"><c></c></b></a>r   r6   rD   N)	r   r   rF   r   ÚgetAndClearr8   r9   rH   r   rK   s   &     r+   Útest_getAndClearÚ%DOMHelpersTestsMixin.test_getAndClear—   s{   € Ø�x‰x×#Ñ#Ð$DÓEˆØ�h‰h×ÑÓ!ˆÜ×%Ò% d¨EÓ2ˆØ—‘“ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜d EÔ*Ø×Ñ˜§¡Ó!1Ö2r3   c                ó   € V P                   P                  R 4      pV P                   P                  4       p\        P                  ! VP
                  RR^R7      pRP                  V Uu. uF  qDP                  4       NK  	  up4      pVP                  R4      pVP                  RR4       VP                  R4      pVP                  RR4       VP                  V4       V P                  WVP                  4       4       \        P                  ! VP
                  RR^ R7      pRP                  V Uu. uF  qDP                  4       NK  	  up4      pV P                  WVP                  4       VP                  4       ,           4       R# u upi u upi )z:<a><b foo="olive"><c foo="olive"/></b><d foo="poopy"/></a>r   Úolive)Ú	noNestingr   r6   rA   N)r   r   rF   r   ÚlocateNodesr   r   r8   r9   rH   r:   r   )r   r   rL   Ú	node_listr#   r   r   rA   s   &       r+   Útest_locateNodesÚ%DOMHelpersTestsMixin.test_locateNodes    s0  € Ø�x‰x×#Ñ#ØHó
ˆð �h‰h×ÑÓ!ˆÜ×*Ò*¨4¯?©?¸EÀ7ÐVWÔXˆ	Ø—‘±9Ó=±9¨4Ÿ*™*ž,±9Ñ=Ó>ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜e WÔ-Ø×Ñ˜cÓ"ˆØ	�‰�u˜gÔ&Ø×Ñ˜QÔà×Ñ˜§¡Ó!1Ô2ä×*Ò*¨4¯?©?¸EÀ7ÐVWÔXˆ	Ø—‘±9Ó=±9¨4Ÿ*™*ž,±9Ñ=Ó>ˆØ×Ñ˜§¡Ó!1°A·G±G³IÕ!=Ö>ùò >ùò >s   Á)FÄ1Fc           	     óz  € V P                   P                  R 4      p\        P                  ! VP                  ^ ,          P                  ^ ,          P                  ^ ,          4      pRP                  V Uu. uF#  p\        VR4      '       g   K  VP                  NK%  	  up4      pV P                  VR4       R# u upi )z!<a><b><c><d/></c><e/></b><f/></a>r   ÚtagNameÚcbaN)	r   r   r   Ú
getParentsr   r   Úhasattrr`   r   ©r   r   r\   r#   r   s   &    r+   Útest_getParentsÚ$DOMHelpersTestsMixin.test_getParents³   s’   € Ø�x‰x×#Ñ#Ð$GÓHˆÜ×)Ò)Ø�O‰O˜AÕ×)Ñ)¨!Õ,×7Ñ7¸Õ:ó
ˆ	ð —‘Ù&/ÓL¡i˜d´7¸4À×3KŒ\ˆT�\Œ\¡iÑLó
ˆð 	×Ñ˜ Ö'ùò Ms   Á4B8ÂB8c                óž  € V P                   P                  R 4      p\        P                  ! VR4      pRP	                  V Uu. uF  q3P
                  NK  	  up4      pV P                  VR4       \        P                  ! VRR4      pRP	                  V Uu. uF  q3P
                  NK  	  up4      pV P                  VR4       R# u upi u upi )z+<a foo="1"><b foo="2"/><c foo="1"/><d/></a>r   r   ÚabcÚ1ÚacN)r   r   r   ÚfindElementsWithAttributer   r`   r   rd   s   &    r+   Útest_findElementsWithAttributeÚ3DOMHelpersTestsMixin.test_findElementsWithAttribute½   s¥   € Ø�x‰x×#Ñ#Ð$QÓRˆÜ×8Ò8¸¸uÓEˆ	Ø—‘±9Ó=±9¨4Ÿ,œ,±9Ñ=Ó>ˆØ×Ñ˜ Ô'ä×8Ò8¸¸uÀcÓJˆ	Ø—‘±9Ó=±9¨4Ÿ,œ,±9Ñ=Ó>ˆØ×Ñ˜ Ö&ùò >ùò >s   ÁCÂC
c                ó¤   € V P                   P                  R 4      p\        P                  ! VR4      p\	        V4      pV P                  V^4       R# )z#<doc><foo/><bar/><foo>a</foo></doc>r   N)r   r   r   ÚfindNodesNamedÚlenr   )r   r   r\   r   s   &   r+   Útest_findNodesNamedÚ(DOMHelpersTestsMixin.test_findNodesNamedÇ   sB   € Ø�x‰x×#Ñ#Ð$IÓJˆÜ×-Ò-¨d°EÓ:ˆ	Ü�Y“ˆØ×Ñ˜ Ö#r3   c                óZ   € R pRpV P                  \        P                  ! V4      V4       R# )z9this string " contains many & characters> xml< won't likezHthis string &quot; contains many &amp; characters&gt; xml&lt; won't likeN)r   r   Úescape©r   Újr   s   &  r+   Útest_escapeÚ DOMHelpersTestsMixin.test_escapeÍ   s,   € ØHˆàVð 	ð 	×Ñœ×*Ò*¨1Ó-¨xÖ8r3   c                óZ   € R pRpV P                  \        P                  ! V4      V4       R# )zTthis 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<N)r   r   Úunescaperu   s   &  r+   Útest_unescapeÚ"DOMHelpersTestsMixin.test_unescapeÔ   s,   € ØbˆàTð 	ð 	×Ñœ×,Ò,¨QÓ/°Ö:r3   c                óˆ   € V P                   P                  R4      pV P                  \        P                  ! V4      R4       R# )zd
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_getNodeTextÚ%DOMHelpersTestsMixin.test_getNodeTextÛ   s4   € ð
 �x‰x×#Ñ#Ð$NÓOˆØ×Ñœ×/Ò/°Ó5°yÖAr3   c                ó6   <€ V ^8„  d   Qh/ S[ S[,          ;R&   # )é   r   )r   r   )ÚformatÚ__classdict__s   "€r+   Ú__annotate__Ú!DOMHelpersTestsMixin.__annotate__   s   ø‡ ‚ ñ 
‘#�Ñò r3   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r,   r1   r=   rM   rR   rV   r]   re   rl   rq   rw   r{   r€   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r…   s   @r+   r
   r
      s]   ø‡ € ñð €Cò6+òp+ò63òUò"
)ò3ò?ò&(ò'ò$ò9ò;òB÷W ƒ r3   r
   c                   ó6   a € ] tR t^ät o ]tR tR tR tRt	V t
R# )ÚMicroDOMHelpersTestsc                óô   € RpV P                   P                  V4      p\        P                  ! V4      pRpV P	                  W44       \        P                  ! VP
                  4      pV P	                  W44       R# )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_gatherTextNodesDropsWhitespaceÚ8MicroDOMHelpersTests.test_gatherTextNodesDropsWhitespaceç   sf   € ð
ˆð �x‰x×#Ñ# HÓ-ˆÜ×+Ò+¨DÓ1ˆØ$ˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Ö*r3   c                óô   € RpV P                   P                  V4      p\        P                  ! V4      pRpV P	                  W44       \        P                  ! VP
                  4      pV P	                  W44       R# )z2
Microdom does not decode entities in text nodes.
ú<x>Souffl&amp;</x>zSouffl&amp;Nr/   ©r   Údoc5_xmlÚdoc5r   r   s   &    r+   Útest_textEntitiesNotDecodedÚ0MicroDOMHelpersTests.test_textEntitiesNotDecodedû   sd   € ð (ˆØ�x‰x×#Ñ# HÓ-ˆÜ×+Ò+¨DÓ1ˆØ ˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Ö*r3   c                óÒ   € \        \        4       V P                  V P                  .4      pV P	                  ^\        V4      4       V P	                  RV^ ,          R,          4       R# )z/
An import will raise the deprecation warning.
z8twisted.web.domhelpers was deprecated at Twisted 23.10.0ÚmessageN)r   r   ÚflushWarningsÚtest_deprecationr   rp   )r   Úwarningss   & r+   r¡   Ú%MicroDOMHelpersTests.test_deprecation  sV   € ô 	ŒzÔØ×%Ñ% t×'<Ñ'<Ð&=Ó>ˆØ×Ñ˜œC ›MÔ*Ø×ÑØFØ�Q�K˜	Õ"ö	
r3   rˆ   N)r‰   rŠ   r‹   rŒ   r   r   r•   rœ   r¡   r�   r�   r‘   s   @r+   r“   r“   ä   s   ø‡ € Ø
€Cò+ò(
+÷

ð 

r3   r“   c                   ó0   a € ] tR tRt o ]tR tR tRtV t	R# )ÚMiniDOMHelpersTestsi  c                óô   € RpV P                   P                  V4      p\        P                  ! V4      pRpV P	                  W44       \        P                  ! VP
                  4      pV P	                  W44       R# )z-
Minidom does decode entities in text nodes.
r˜   zSouffl&Nr/   r™   s   &    r+   Útest_textEntitiesDecodedÚ,MiniDOMHelpersTests.test_textEntitiesDecoded  sd   € ð (ˆØ�x‰x×#Ñ# HÓ-ˆÜ×+Ò+¨DÓ1ˆØˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Ö*r3   c                ó†  € V P                   P                  R4      p\        P                  ! V4      pV P	                  VR4       V P                  V\        4       V P                   P                  RP                  4       4      p\        P                  ! V4      pV P	                  VR4       V P                  V\        4       R# )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>rC   u   <foo>â˜ƒ</foo>u   â˜ƒN)r   r   r   r   r   ÚassertIsInstanceÚstrÚencode)r   r#   Útexts   &  r+   Útest_getNodeUnicodeTextÚ+MiniDOMHelpersTests.test_getNodeUnicodeText#  s—   € ð �x‰x×#Ñ#Ð$4Ó5ˆÜ×%Ò% dÓ+ˆØ×Ñ˜˜uÔ%Ø×Ñ˜d¤CÔ(à�x‰x×#Ñ#Ð$<×$CÑ$CÓ$EÓFˆÜ×%Ò% dÓ+ˆØ×Ñ˜˜}Ô-Ø×Ñ˜d¤CÖ(r3   rˆ   N)
r‰   rŠ   r‹   rŒ   r   r   r§   r®   r�   r�   r‘   s   @r+   r¥   r¥     s   ø‡ € Ø
€Cò
+÷)ð )r3   r¥   N)r�   Ú	importlibr   Útypingr   r   Úxml.domr   Útwisted.trial.unittestr   Útwisted.webr   r   r
   r“   r¥   rˆ   r3   r+   Ú<module>rµ      sI   ðñ
õ ß  Ý å +ß ,÷QBñ QBôh-
Ð/°ô -
ô`)Ð.°ö )r3   