o
    ¼>hÆK  ã                   @   s’   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd„ dej	ƒZ
G dd	„ d	ƒZG d
d„ deej	ƒZG dd„ deej	ƒZG dd„ dej	ƒZdS )zF
Tests for L{twisted.words.xish.domish}, a DOM-like library for XMPP.
é    )ÚverifyObject)ÚrequireModule)Úunittest)Údomishc                   @   s   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )#ÚElementTestsz&
    Tests for L{domish.Element}.
    c                 C   s   t tjt d¡ƒ dS )zB
        L{domish.Element} implements L{domish.IElement}.
        ©NÚfooN)r   r   ÚIElementÚElement©Úself© r   ú~/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/words/test/test_domish.pyÚtest_interface   s   zElementTests.test_interfacec                 C   s.   d}|   t |¡d¡ |   t |d¡d¡ dS )zF
        The built-in entity references are properly encoded.
        z&<>'"z&amp;&lt;&gt;'"é   z&amp;&lt;&gt;&apos;&quot;N)ÚassertEqualr   ÚescapeToXml)r   Úsr   r   r   Útest_escaping   s   zElementTests.test_escapingc                 C   s   t  d¡}|  |jd¡ dS )zN
        An attribute on L{domish.Namespace} yields a qualified name.
        Útestns©r   r   N)r   Ú	Namespacer   r   )r   Únsr   r   r   Útest_namespace#   s   
zElementTests.test_namespacec                 C   s   t  d¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ t  d¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ t  d¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ t  dd¡}|  |jd¡ |  |jd¡ |  |jd¡ dS )	z?
        Basic L{domish.Element} initialization tests.
        r   r   N©Ú r   r   r   r   Útest2ns)r   r
   r   ÚnameÚuriÚ
defaultUriÚparent©r   Úer   r   r   Útest_elementInit*   s&   


zElementTests.test_elementInitc                 C   s  t  d¡}| d¡ | d¡}d|d< d|d< | d¡ | d¡ | d	¡ | d
¡ |  |jd d¡ |  |j|¡ |j d¡ d|jd< |  |jd |j¡ |  |jd |j¡ |  |d d¡ |d= |  | d¡d¡ |  | d¡d¡ |  |d d¡ dS )z6
        Basic L{domish.Element} child tests.
        r   Úsomecontent)Útestns2Úbar2Úvalue1Úattrib1Úvalue2)r%   Úattrib2ÚbarÚabcÚ123éÿÿÿÿÚabc123Ú
subcontentÚ	somevalueÚ	bar2valuer   é   r   r*   N)	r   r
   Ú
addContentÚ
addElementr   Úchildrenr&   r+   ÚhasAttribute)r   r"   Úb2r   r   r   Útest_childOpsE   s(   







zElementTests.test_childOpsc                 C   ó8   t  d¡}| d¡ t|ƒ}|  d|¡ |  |t¡ dS )ú6
        Extract character data using L{str}.
        r   r$   N©r   r
   r4   Ústrr   ÚassertIsInstance©r   ÚelementÚtextr   r   r   Útest_characterDataf   ó
   

zElementTests.test_characterDatac                 C   r:   )z<
        Extract ascii character data using L{str}.
        r   r$   Nr<   r?   r   r   r   Útest_characterDataNativeStringq   rC   z+ElementTests.test_characterDataNativeStringc                 C   r:   )r;   r   õ   â˜ƒNr<   r?   r   r   r   Útest_characterDataUnicode|   rC   z&ElementTests.test_characterDataUnicodec                 C   s<   t  d¡}| d¡ t|ƒ}|  d ¡ |¡ |  |t¡ dS )zA
        Extract character data as UTF-8 using L{bytes}.
        r   rE   N)r   r
   r4   Úbytesr   Úencoder>   r?   r   r   r   Útest_characterDataBytes‡   s
   

z$ElementTests.test_characterDataBytesc                 C   s<   t  d¡}| d¡ | d¡ | d¡ |  dt|ƒ¡ dS )zV
        Mixing addChild with cdata and element, the first cdata is returned.
        r   r,   r+   ÚdefN)r   r
   ÚaddChildr5   r   r=   ©r   r@   r   r   r   Útest_characterDataMixed’   s
   



z$ElementTests.test_characterDataMixedc                 C   ó(   t  d¡}| d¡ |  dt|ƒ¡ dS )zT
        Unicode strings passed to C{addContent} become the character data.
        r   ÚunicodeN©r   r
   r4   r   r=   rL   r   r   r   Útest_addContentœ   ó   

zElementTests.test_addContentc                 C   rN   )zY
        ASCII native strings passed to C{addContent} become the character data.
        r   ÚnativeNrP   rL   r   r   r   Ú test_addContentNativeStringASCII¤   rR   z-ElementTests.test_addContentNativeStringASCIIc                 C   s   t  d¡}|  t|jd¡ dS )zV
        Byte strings passed to C{addContent} are not acceptable on Python 3.
        r   s   bytesN)r   r
   ÚassertRaisesÚ	TypeErrorr4   rL   r   r   r   Útest_addContentBytes¬   s   
z!ElementTests.test_addContentBytesc                 C   s,   t  d¡}|jddd}|  dt|ƒ¡ dS )zW
        Content passed to addElement becomes character data on the new child.
        r   r+   r,   )ÚcontentN)r   r
   r5   r   r=   )r   r@   Úchildr   r   r   Útest_addElementContent³   s   
z#ElementTests.test_addElementContentc                 C   sr   t  d¡}| d¡}| d¡}| d¡}| d¡}t| ¡ ƒ}|  ||¡ |  ||¡ |  ||¡ |  ||¡ dS )z
        Calling C{elements} without arguments on a L{domish.Element} returns
        all child elements, whatever the qualified name.
        r   r   ©r%   ÚbazÚquux©r   r   N)r   r
   r5   ÚlistÚelementsÚassertIn©r   r"   Úc1Úc2Úc3Úc4Úeltsr   r   r   Útest_elements»   s   




zElementTests.test_elementsc                 C   sv   t  d¡}| d¡}| d¡}| d¡}| d¡}t| dd¡ƒ}|  ||¡ |  ||¡ |  ||¡ |  ||¡ dS )z™
        Calling C{elements} with a namespace and local name on a
        L{domish.Element} returns all child elements with that qualified name.
        r   r   r[   r]   r^   r   N)r   r
   r5   r_   r`   ra   ÚassertNotInrb   r   r   r   Útest_elementsWithQNÍ   s   




z ElementTests.test_elementsWithQNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r#   r9   rB   rD   rF   rI   rM   rQ   rT   rW   rZ   rh   rj   r   r   r   r   r      s$    !
r   c                   @   s€   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚDomishStreamTestsMixinzí
    Mixin defining tests for different stream implementations.

    @ivar streamClass: A no-argument callable which will be used to create an
        XML parser which can produce a stream of elements from incremental
        input.
    c                 C   sF   d| _ d| _d | _g | _|  ¡ | _| j| j_| jj| j_	| j
| j_d S )NF)Údoc_startedÚ	doc_endedÚrootr`   ÚstreamClassÚstreamÚ_docStartedÚDocumentStartEventÚappendÚElementEventÚ	_docEndedÚDocumentEndEventr   r   r   r   ÚsetUpé   s   

zDomishStreamTestsMixin.setUpc                 C   s   || _ d| _d S ©NT)rr   rp   )r   rr   r   r   r   ru   ó   s   
z"DomishStreamTestsMixin._docStartedc                 C   s
   d| _ d S r|   )rq   r   r   r   r   ry   ÷   s   
z DomishStreamTestsMixin._docEndedc                 C   s   | j  |¡ d S )N)rt   Úparse©r   Úxmlr   r   r   ÚdoTestú   s   zDomishStreamTestsMixin.doTestc                 C   sh   d}| j  |¡ |  | jd¡ |  | jjd¡ |  | jd jd¡ |  | jd jd¡ |  | jd¡ d S )Ns   <root><child/><child2/></root>Trr   r   rY   r   Úchild2)rt   r}   r   rp   rr   r   r`   rq   r~   r   r   r   ÚtestHarnessý   s   z"DomishStreamTestsMixin.testHarnessc                 C   s    d}| j  |¡ |  | jjd¡ |  | jjd¡ |  | jd jd¡ |  | jd jd¡ |  | jd d d¡ |  | jd jjd	¡ |  t| jd jƒd
¡ d S )Ns   <stream:stream xmlns:stream='etherx' xmlns='jabber'>
  <message to='bar'>    <x xmlns='xdelay'>some&amp;data&gt;</x>  </message></stream:stream>rt   Úetherxr   ÚmessageÚjabberÚtor+   Úxdelayz
some&data>)	rt   r}   r   rr   r   r   r`   Úxr=   r~   r   r   r   Ú	testBasic  s   ÿz DomishStreamTestsMixin.testBasicc                 C   s8   d}| j  |¡ |  | jjd¡ |  | jd jd¡ d S )Ns(   <stream><error xmlns='etherx'/></stream>r   r   rƒ   ©rt   r}   r   rr   r   r`   r~   r   r   r   ÚtestNoRootNS  ó   z#DomishStreamTestsMixin.testNoRootNSc                 C   s\   d}| j  |¡ |  | jjd¡ |  | jjd¡ |  | jd jd¡ |  | jd jd¡ d S )Ns=   <stream:stream xmlns:stream='etherx'><error/></stream:stream>rƒ   r   r   )rt   r}   r   rr   r   r   r`   r~   r   r   r   ÚtestNoDefaultNS  s   z&DomishStreamTestsMixin.testNoDefaultNSc                 C   s8   d}| j  |¡ |  | jjd¡ |  | jd jd¡ d S )Ns$   <root xmlns='testns'><child/></root>r   r   rŠ   r~   r   r   r   ÚtestChildDefaultNS(  rŒ   z)DomishStreamTestsMixin.testChildDefaultNSc                 C   s*   d}| j  |¡ |  | jd jjd¡ d S )Nsg   <root xmlns='testns'>
                    <child1><child2 xmlns=''/></child1>
                  </root>r   r   )rt   r}   r   r`   r   r   r~   r   r   r   ÚtestEmptyChildNS/  s   z'DomishStreamTestsMixin.testEmptyChildNSc                 C   s(   d}| j  |¡ |  | jd jd¡ dS )zŽ
        Attributes with namespace are parsed without Exception.
        (https://twistedmatrix.com/trac/ticket/9730 regression test)
        s~   <root xmlns:test='http://example.org' xml:lang='en'>
                    <test:test>test</test:test>
                  </root>r   zhttp://example.orgN)rt   r}   r   r`   r   r~   r   r   r   Útest_attributesWithNamespaces7  s   z4DomishStreamTestsMixin.test_attributesWithNamespacesc                 C   s<   d}| j  |¡ |  | jjd d¡ |  | jd jd¡ d S )Ns<   <root xmlns='testns' xmlns:foo='testns2'><foo:child/></root>r   r%   r   )rt   r}   r   rr   ÚlocalPrefixesr`   r   r~   r   r   r   ÚtestChildPrefixG  s   z&DomishStreamTestsMixin.testChildPrefixc                 C   s   |   tj| jjd¡ d S )Ns   <root><error></root>)rU   r   ÚParserErrorrt   r}   r   r   r   r   ÚtestUnclosedElementN  s   ÿz*DomishStreamTestsMixin.testUnclosedElementc                 C   s¸   d}| j  |¡ |  d| jd j¡ |  d| jd j¡ |  d| jd j¡ |  ddi| jd j¡ |  d| jd j¡ |  d| jd j¡ |  d| jd j¡ |  i | jd j¡ d	S )
at  
        Test that reuse of namespaces does affect an element's serialization.

        When one element uses a prefix for a certain namespace, this is
        stored in the C{localPrefixes} attribute of the element. We want
        to make sure that elements created after such use, won't have this
        prefix end up in their C{localPrefixes} attribute, too.
        s‚   <root>
                    <foo:child1 xmlns:foo='testns'/>
                    <child2 xmlns='testns'/>
                  </root>Úchild1r   r   r   r   r   r   N)rt   r}   r   r`   r   r   r   r‘   r~   r   r   r   Útest_namespaceReuseS  s   
z*DomishStreamTestsMixin.test_namespaceReuseN)rk   rl   rm   rn   r{   ru   ry   r€   r‚   r‰   r‹   r   rŽ   r   r   r’   r”   r–   r   r   r   r   ro   à   s     
		ro   c                   @   s.   e Zd ZdZejZeddddu rdZdS dS )ÚDomishExpatStreamTestszd
    Tests for L{domish.ExpatElementStream}, the expat-based element stream
    implementation.
    ÚpyexpatN)Údefaultz1pyexpat is required for ExpatElementStream tests.)	rk   rl   rm   rn   r   ÚExpatElementStreamrs   r   Úskipr   r   r   r   r—   m  s    ÿr—   c                   @   s   e Zd ZdZejZdS )ÚDomishSuxStreamTestszo
    Tests for L{domish.SuxElementStream}, the L{twisted.web.sux}-based element
    stream implementation.
    N)rk   rl   rm   rn   r   ÚSuxElementStreamrs   r   r   r   r   rœ   y  s    
rœ   c                   @   sÌ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1S )2ÚSerializerTestsc                 C   s2   t  d¡}|  | ¡ d¡ |  |jddd¡ d S )Nr   z<foo/>r   )ÚcloseElementz<foo>©r   r
   r   ÚtoXmlr!   r   r   r   ÚtestNoNamespaceƒ  s   
zSerializerTests.testNoNamespacec                 C   s   t  d¡}|  | ¡ d¡ d S )Nr   z<foo xmlns='testns'/>r    r!   r   r   r   ÚtestDefaultNamespaceˆ  s   
z$SerializerTests.testDefaultNamespacec                 C   s&   t  dd¡}|  | ddi¡d¡ d S )Nr   r%   r   r+   z-<bar:foo xmlns:bar='testns' xmlns='testns2'/>r    r!   r   r   r   ÚtestOtherNamespaceŒ  s   ÿz"SerializerTests.testOtherNamespacec                 C   ó(   t  d¡}| d¡ |  | ¡ d¡ d S )Nr   r+   ú <foo xmlns='testns'><bar/></foo>©r   r
   r5   r   r¡   r!   r   r   r   ÚtestChildDefaultNamespace’  ó   

z)SerializerTests.testChildDefaultNamespacec                 C   r¥   )Nr   ©r   r+   r¦   r§   r!   r   r   r   ÚtestChildSameNamespace—  r©   z&SerializerTests.testChildSameNamespacec                 C   ó*   t  d¡}| dd¡ |  | ¡ d¡ d S )Nr   r+   r   r¦   r§   r!   r   r   r   ÚtestChildSameDefaultNamespaceœ  ó   
z-SerializerTests.testChildSameDefaultNamespacec                 C   r¬   )Nr   ©r%   r+   r%   z0<foo xmlns='testns'><bar xmlns='testns2'/></foo>r§   r!   r   r   r   ÚtestChildOtherDefaultNamespace¡  r®   z.SerializerTests.testChildOtherDefaultNamespacec                 C   r¬   )Nr   )Úns2r+   r±   z<foo><bar xmlns='ns2'/></foo>r§   r!   r   r   r   ÚtestOnlyChildDefaultNamespace¦  r®   z-SerializerTests.testOnlyChildDefaultNamespacec                 C   r¥   )Nr   r+   z<foo><bar/></foo>r§   r!   r   r   r   ÚtestOnlyChildDefaultNamespace2«  r©   z.SerializerTests.testOnlyChildDefaultNamespace2c                 C   s*   t  dd¡}| d¡ |  | ¡ d¡ d S )Nr   r%   r¯   z<<xn0:foo xmlns:xn0='testns' xmlns='testns2'><bar/></xn0:foo>r§   r!   r   r   r   ÚtestChildInDefaultNamespace°  s
   
ÿz+SerializerTests.testChildInDefaultNamespacec                 C   ó&   t jdddid}|  | ¡ d¡ d S )Nr   r¯   r\   ©Úattribsz(<foo xmlns:xn0='testns2' xn0:bar='baz'/>r    r!   r   r   r   ÚtestQualifiedAttribute·  ó   z&SerializerTests.testQualifiedAttributec                 C   rµ   )Nr   rª   r\   r¶   z6<foo xmlns='testns' xmlns:xn0='testns' xn0:bar='baz'/>r    r!   r   r   r   ÚtestQualifiedAttributeDefaultNS»  s   ÿz/SerializerTests.testQualifiedAttributeDefaultNSc                 C   sJ   t  d¡}| dd¡}| d¡ | dd¡}| d¡ |  | ¡ d¡ d S )	Nr   rª   r%   )r%   r]   )Útestns3r\   Útestns4)r   r]   z<foo><xn0:bar xmlns:xn0='testns' xmlns='testns2'><quux/></xn0:bar><xn1:baz xmlns:xn1='testns3' xmlns='testns4'><xn0:quux xmlns:xn0='testns'/></xn1:baz></foo>r§   )r   r"   r•   r   r   r   r   ÚtestTwoChildsÁ  s   


þzSerializerTests.testTwoChildsc                 C   rµ   )Nr   )z$http://www.w3.org/XML/1998/namespaceÚlangÚen_USr¶   z<foo xml:lang='en_US'/>r    r!   r   r   r   ÚtestXMLNamespaceÌ  s
   þz SerializerTests.testXMLNamespacec                 C   s,   t jdddid}|  | ddi¡d¡ d S )Nr   r¯   r\   r¶   r%   Úquxz(<foo xmlns:qux='testns2' qux:bar='baz'/>r    r!   r   r   r   Ú)testQualifiedAttributeGivenListOfPrefixesÓ  s   ÿz9SerializerTests.testQualifiedAttributeGivenListOfPrefixesc                 C   s8   t jdddid}| d¡}d|d< |  | ¡ d¡ d S )Nr   r¯   r\   r¶   ©r%   rÁ   r]   zF<foo xmlns:xn0='testns2' xn0:bar='baz'><xn0:qux xn0:bar='quux'/></foo>r§   ©r   r"   Úcr   r   r   ÚtestNSPrefixÙ  s   
þzSerializerTests.testNSPrefixc                 C   sB   t jdddid}| d¡}d|d< | d¡ |  | ¡ d¡ d S )	Nr   r¯   r\   r¶   rÃ   r]   r   zY<foo xmlns:xn0='testns2' xn0:bar='baz'><xn0:qux xn0:bar='quux'><xn0:foo/></xn0:qux></foo>r§   rÄ   r   r   r   ÚtestDefaultNSPrefixã  s   

þz#SerializerTests.testDefaultNSPrefixc                 C   s*   t  d¡}|  |jddidgdd¡ d S )Nr   r   r+   )ÚprefixesÚprefixesInScopez
<bar:foo/>r    r!   r   r   r   ÚtestPrefixScopeî  s   
ÿzSerializerTests.testPrefixScopec                 C   rµ   )Nr   r+   r   ©r‘   z<bar:foo xmlns:bar='testns'/>r    r!   r   r   r   ÚtestLocalPrefixesõ  r¹   z!SerializerTests.testLocalPrefixesc                 C   s@   t jdddid}| d¡ |  |jjd ¡ |  | ¡ d¡ d S )Nr   r+   r   rË   r\   z,<bar:foo xmlns:bar='testns'><baz/></bar:foo>)r   r
   r5   ÚassertIdenticalr\   r   r   r¡   r!   r   r   r   ÚtestLocalPrefixesWithChildù  s   
z*SerializerTests.testLocalPrefixesWithChildc                 C   sj   ddi}t j|d}|  ||j¡ t jdddid}|  d|j|d¡ t  d¡}|  d	|j|d¡ d
S )aQ  
        Test that prefixes passed to serialization are not modified.

        This test makes sure that passing a dictionary of prefixes repeatedly
        to C{toXml} of elements does not cause serialization errors. A
        previous implementation changed the passed in dictionary internally,
        causing havoc later on.
        r   r   )rÈ   )r%   r   r]   r%   rË   z <quux:foo xmlns:quux='testns2'/>z<foo xmlns='testns2'/>N)r   ÚSerializerClassÚassertNotIdenticalrÈ   r
   r   r¡   )r   rÈ   r   r"   r   r   r   Útest_prefixesReuseÿ  s   	
z"SerializerTests.test_prefixesReusec                 C   r¥   )Nr   z<abc123>z<foo><abc123></foo>©r   r
   Ú	addRawXmlr   r¡   r!   r   r   r   ÚtestRawXMLSerialization  s   

z'SerializerTests.testRawXMLSerializationc                 C   r¥   )Nr   u   <degree>Â°</degree>u   <foo><degree>Â°</degree></foo>rÒ   r!   r   r   r   Ú"testRawXMLWithUnicodeSerialization  r©   z2SerializerTests.testRawXMLWithUnicodeSerializationc                 C   s0   t  d¡}d|d< | d¡ |  | ¡ d¡ d S )Nr   u   my valueÈ¡eÚtestu   A degree symbol...Â°u2   <foo test='my valueÈ¡e'>A degree symbol...Â°</foo>)r   r
   r4   r   r¡   r!   r   r   r   ÚtestUnicodeSerialization!  s   

ÿz(SerializerTests.testUnicodeSerializationN)rk   rl   rm   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ž   ‚  s2    
rž   N)rn   Úzope.interface.verifyr   Útwisted.python.reflectr   Útwisted.trialr   Útwisted.words.xishr   ÚTestCaser   ro   r—   rœ   rž   r   r   r   r   Ú<module>   s    Q 	