ó
    ×›‘hº,  ã                   ó�   • S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
JrJr   " S S5      r " S	 S
\\	5      r " S S\\	5      rg)zH
Specific tests for (some of) the methods in L{twisted.web.domhelpers}.
é    )Úreload)ÚAnyÚOptional)Úminidom)ÚTestCase)Ú
domhelpersÚmicrodomc                   ó|   • \ rS rSr% SrSr\\   \S'   S r	S r
S rS rS	 rS
 rS rS rS rS rS rS rS rSrg)ÚDOMHelpersTestsMixiné   z•
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                 óê  • U R                   R                  S5      n[        R                  " US5      S   R                  nSnU R                  X#5        UR                  n[        R                  " US5      S   R                  nU R                  X#5        SnU R                   R                  U5      n[        R                  " US5      nSR                  U Vs/ s H  oˆR                  S5      PM     sn5      nSnU R                  X#5        UR                  n	[        R                  " U	S5      nSR                  U Vs/ s H  oˆR                  S5      PM     sn5      nU R                  X#5        Sn
U R                   R                  U
5      n[        R                  " US5      nSR                  U Vs/ s H  oˆR                  S5      PM     sn5      nS	nU R                  X#5        UR                  n[        R                  " US5      nSR                  U Vs/ s H  oˆR                  S5      PM     sn5      nU R                  X#5        S
nU R                   R                  U5      n[        R                  " US5      nUR                  nXÿR                  S   R                  S   /nU R                  X#5        [        R                  " US5      nU R                  X#5        g s  snf s  snf s  snf s  snf )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                   ÚdC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-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!Ä=K&Æ2K+ÈK0c                 óÊ  • U R                   R                  S5      n[        R                  " U5      nSnU R	                  X#5        [        R                  " UR
                  5      nU R	                  X#5        SnU R                   R                  U5      n[        R                  " U5      nSnU R	                  X#5        [        R                  " UR
                  5      nU R	                  X#5        SnU R                   R                  U5      n[        R                  " U5      nSnU R	                  X#5        [        R                  " UR
                  5      nU R	                  X#5        g )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_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                 óœ  • U R                   R                  S5      nUR                  n[        R                  " U5        U R                  UR                  5       U R                   R                  S5      R                  5       5        U R                   R                  S5      nUR                  R                  S   n[        R                  " U5        UR                  R                  5       nU R                   R                  S5      nUR                  U R                   R                  S5      5        U R                  XVR                  5       5        g )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_clearNodeÚ#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Õ2r5   c                 ór  • U R                   R                  S5      nU R                   R                  5       n[        R                  " US5      nUR                  5       nUR                  S5      nUR                  SS5        U R                  XER                  5       5        [        R                  " US5      nUR                  5       nUR                  S5      nUR                  SS5        U R                  XER                  5       5        U R                  [        R                  [        R                  US5        g )	Nú$<a><b id="bar"/><c class="foo"/></a>r   ÚcÚclassÚbarr8   ÚidÚpzork)r   r   ÚDocumentr   Úgetr:   ÚcreateElementÚ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ÕTr5   c                 ó’  • U R                   R                  S5      nU R                   R                  5       n[        R                  " US5      nUR                  5       nUR                  S5      nUR                  SS5        U R                  XER                  5       5        [        R                  " US5      nU R                  US 5        g )NrB   r   rC   rD   rG   )
r   r   rH   r   ÚgetIfExistsr:   rJ   rK   r   ÚassertIdenticalrN   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Õ(r5   c                 ó@  • U R                   R                  S5      nU R                   R                  5       n[        R                  " US5      nUR                  5       nUR                  S5      nUR                  SS5        U R                  XER                  5       5        g )Nz<a><b id="foo"><c></c></b></a>r   r8   rF   )	r   r   rH   r   ÚgetAndClearr:   rJ   rK   r   rN   s         r-   Útest_getAndClearÚ%DOMHelpersTestsMixin.test_getAndClear—   s{   € Ø�x‰x×#Ñ#Ð$DÓEˆØ�h‰h×ÑÓ!ˆÜ×%Ò% d¨EÓ2ˆØ—‘“ˆØ×$Ñ$ SÓ)ˆØ×Ñ˜d EÔ*Ø×Ñ˜§¡Ó!1Õ2r5   c                 ó  • U R                   R                  S5      nU R                   R                  5       n[        R                  " UR
                  SSSS9nSR                  U Vs/ s H  oDR                  5       PM     sn5      nUR                  S5      nUR                  SS5        UR                  S5      nUR                  SS5        UR                  U5        U R                  XVR                  5       5        [        R                  " UR
                  SSS	S9nSR                  U Vs/ s H  oDR                  5       PM     sn5      nU R                  XVR                  5       UR                  5       -   5        g s  snf s  snf )
Nz:<a><b foo="olive"><c foo="olive"/></b><d foo="poopy"/></a>r   Úoliveé   )Ú	noNestingr   r8   rC   r   )r   r   rH   r   ÚlocateNodesr   r   r:   rJ   rK   r<   r   )r   r   rO   Ú	node_listr%   r   r    rC   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   Á&E=Ä,Fc           	      ó`  • U R                   R                  S5      n[        R                  " UR                  S   R                  S   R                  S   5      nSR                  U Vs/ s H"  n[        US5      (       d  M  UR                  PM$     sn5      nU R                  US5        g s  snf )Nz!<a><b><c><d/></c><e/></b><f/></a>r   r   ÚtagNameÚcba)	r   r   r   Ú
getParentsr   r   Úhasattrrd   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   Á(B+ÂB+c                 ó   • U R                   R                  S5      n[        R                  " US5      nSR	                  U Vs/ s H  o3R
                  PM     sn5      nU R                  US5        [        R                  " USS5      nSR	                  U Vs/ s H  o3R
                  PM     sn5      nU R                  US5        g s  snf s  snf )Nz+<a foo="1"><b foo="2"/><c foo="1"/><d/></a>r   r   ÚabcÚ1Úac)r   r   r   ÚfindElementsWithAttributer   rd   r   rh   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                 ó¢   • U R                   R                  S5      n[        R                  " US5      n[	        U5      nU R                  US5        g )Nz#<doc><foo/><bar/><foo>a</foo></doc>r   é   )r   r   r   ÚfindNodesNamedÚlenr   )r   r   r`   r   s       r-   Útest_findNodesNamedÚ(DOMHelpersTestsMixin.test_findNodesNamedÇ   sB   € Ø�x‰x×#Ñ#Ð$IÓJˆÜ×-Ò-¨d°EÓ:ˆ	Ü�Y“ˆØ×Ñ˜ Õ#r5   c                 óX   • SnSnU R                  [        R                  " U5      U5        g )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_escapeÚ DOMHelpersTestsMixin.test_escapeÍ   s,   € ØHˆàVð 	ð 	×Ñœ×*Ò*¨1Ó-¨xÕ8r5   c                 óX   • SnSnU R                  [        R                  " U5      U5        g )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   Úunescaperz   s      r-   Útest_unescapeÚ"DOMHelpersTestsMixin.test_unescapeÔ   s,   € ØbˆàTð 	ð 	×Ñœ×,Ò,¨QÓ/°Õ:r5   c                 ó†   • U R                   R                  S5      nU R                  [        R                  " U5      S5        g)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ÕAr5   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   Ú__annotations__r.   r3   r?   rP   rU   rY   ra   ri   rp   rv   r|   r€   r…   Ú__static_attributes__r‡   r5   r-   r   r      s[   ‡ ñð €Cˆ�#‰Óò6+òp+ò63òUò"
)ò3ò?ò&(ò'ò$ò9ò;õBr5   r   c                   ó*   • \ rS rSr\rS rS rS rSr	g)ÚMicroDOMHelpersTestséä   c                 óò   • SnU R                   R                  U5      n[        R                  " U5      nSnU R	                  X45        [        R                  " UR
                  5      nU R	                  X45        g)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
  Nr1   )r   r*   r+   r   r    s        r-   Ú#test_gatherTextNodesDropsWhitespaceÚ8MicroDOMHelpersTests.test_gatherTextNodesDropsWhitespaceç   sf   € ð
ˆð �x‰x×#Ñ# HÓ-ˆÜ×+Ò+¨DÓ1ˆØ$ˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Õ*r5   c                 óò   • SnU R                   R                  U5      n[        R                  " U5      nSnU R	                  X45        [        R                  " UR
                  5      nU R	                  X45        g)z2
Microdom does not decode entities in text nodes.
ú<x>Souffl&amp;</x>zSouffl&amp;Nr1   ©r   Údoc5_xmlÚdoc5r   r    s        r-   Útest_textEntitiesNotDecodedÚ0MicroDOMHelpersTests.test_textEntitiesNotDecodedû   sd   € ð (ˆØ�x‰x×#Ñ# HÓ-ˆÜ×+Ò+¨DÓ1ˆØ ˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Õ*r5   c                 óÀ   • [        [        5        U R                  U R                  /5      nU R	                  S[        U5      5        U R	                  SUS   S   5        g)z/
An import will raise the deprecation warning.
r]   z8twisted.web.domhelpers was deprecated at Twisted 23.10.0r   ÚmessageN)r   r   ÚflushWarningsÚtest_deprecationr   ru   )r   Úwarningss     r-   rŸ   Ú%MicroDOMHelpersTests.test_deprecation  sV   € ô 	ŒzÔØ×%Ñ% t×'<Ñ'<Ð&=Ó>ˆØ×Ñ˜œC ›MÔ*Ø×ÑØFØ�Q‰K˜	Ñ"õ	
r5   r‡   N)
rˆ   r‰   rŠ   r‹   r	   r   r“   rš   rŸ   rŽ   r‡   r5   r-   r�   r�   ä   s   † Ø
€Cò+ò(
+õ

r5   r�   c                   ó$   • \ rS rSr\rS rS rSrg)ÚMiniDOMHelpersTestsi  c                 óò   • SnU R                   R                  U5      n[        R                  " U5      nSnU R	                  X45        [        R                  " UR
                  5      nU R	                  X45        g)z-
Minidom does decode entities in text nodes.
r–   zSouffl&Nr1   r—   s        r-   Útest_textEntitiesDecodedÚ,MiniDOMHelpersTests.test_textEntitiesDecoded  sd   € ð (ˆØ�x‰x×#Ñ# HÓ-ˆÜ×+Ò+¨DÓ1ˆØˆØ×Ñ˜Ô*Ü×+Ò+¨D×,@Ñ,@ÓAˆØ×Ñ˜Õ*r5   c                 ó„  • U R                   R                  S5      n[        R                  " U5      nU R	                  US5        U R                  U[        5        U R                   R                  SR                  5       5      n[        R                  " U5      nU R	                  US5        U R                  U[        5        g)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>rE   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Õ(r5   r‡   N)	rˆ   r‰   rŠ   r‹   r   r   r¥   r¬   rŽ   r‡   r5   r-   r£   r£     s   † Ø
€Cò
+õ)r5   r£   N)rŒ   Ú	importlibr   Útypingr   r   Úxml.domr   Útwisted.trial.unittestr   Útwisted.webr   r	   r   r�   r£   r‡   r5   r-   Ú<module>r³      sI   ðñ
õ ß  Ý å +ß ,÷QBñ QBôh-
Ð/°ô -
ô`)Ð.°õ )r5   