§
    Étºfl$  ã                   óÆ   — 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
  G d„ d¦  «        Z G d	„ d
¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        ZdS )z+
Test cases for twisted.words.xish.utility
é    )ÚOrderedDict)Úunittest)Úutility)ÚElement)ÚEventDispatcherc                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCallbackTrackerzŒ
    Test helper for tracking callbacks.

    Increases a counter on each call to L{call} and stores the object
    passed in the call.
    c                 ó"   — d| _         d | _        d S )Nr   ©ÚcalledÚobj©Úselfs    ú_/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/words/test/test_xishutil.pyÚ__init__zCallbackTracker.__init__   s   € ØˆŒØˆŒˆˆó    c                 ó2   — | j         dz   | _         || _        d S )Né   r   )r   r   s     r   ÚcallzCallbackTracker.call   s   € Ø”k A‘oˆŒØˆŒˆˆr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r	   r	      s<   € € € € € ðð ðð ð ðð ð ð ð r   r	   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚOrderedCallbackTrackerz=
    Test helper for tracking callbacks and their order.
    c                 ó   — g | _         d S ©N)ÚcallListr   s    r   r   zOrderedCallbackTracker.__init__'   s   € ØˆŒˆˆr   c                 óD   — | j                              | j        ¦  «         d S r   )r   ÚappendÚcall1©r   Úobjects     r   r"   zOrderedCallbackTracker.call1*   ó    € ØŒ×Ò˜TœZÑ(Ô(Ð(Ð(Ð(r   c                 óD   — | j                              | j        ¦  «         d S r   )r   r!   Úcall2r#   s     r   r'   zOrderedCallbackTracker.call2-   r%   r   c                 óD   — | j                              | j        ¦  «         d S r   )r   r!   Úcall3r#   s     r   r)   zOrderedCallbackTracker.call30   r%   r   N)r   r   r   r   r   r"   r'   r)   r   r   r   r   r   "   sZ   € € € € € ðð ðð ð ð)ð )ð )ð)ð )ð )ð)ð )ð )ð )ð )r   r   c                   óZ   — e 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d„ Zd„ ZdS )ÚEventDispatcherTestsz'
    Tests for L{EventDispatcher}.
    c                 óÚ  — t          ¦   «         }t          ¦   «         }t          ¦   «         }t          ¦   «         }|                     d|j        ¦  «         |                     d|j        ¦  «         |                     d|j        ¦  «         |                     d|j        ¦  «         t	          d¦  «        }|                     d¦  «         t	          d¦  «        }|                     d¦  «         |                     |¦  «         |                      |j        d	¦  «         |                      |j	        |¦  «         |                      |j        d
¦  «         |                     |¦  «         |                      |j        d	¦  «         |                      |j        d¦  «         |                      |j	        |¦  «         |                      |j        d
¦  «         |                     |d¦  «         |                      |j        d¦  «         |                      |j	        |¦  «         | 
                    d|j        ¦  «         |                     |¦  «         |                      |j        d¦  «         d S )Nú/message/bodyú/messageú	/presenceú//event/testevent©ÚnsÚmessageÚbody©r2   Úpresencer6   é   r   r   )r   r	   ÚaddObserverr   r   Ú
addElementÚdispatchÚassertEqualr   r   ÚremoveObserver)r   ÚdÚcb1Úcb2Úcb3ÚmsgÚpress          r   Ú	testStuffzEventDispatcherTests.testStuff9   s  € ÝÑÔˆÝÑÔˆÝÑÔˆÝÑÔˆà	�Š�o s¤xÑ0Ô0Ð0Ø	�Š�j #¤(Ñ+Ô+Ð+Ø	�Š�k 3¤8Ñ,Ô,Ð,Ø	�ŠÐ)¨3¬8Ñ4Ô4Ð4åÐ'Ñ(Ô(ˆØ�Š�vÑÔÐåÐ)Ñ*Ô*ˆØ�Š˜
Ñ#Ô#Ð#à	�
Š
�3‰ŒˆØ×Ò˜œ QÑ'Ô'Ð'Ø×Ò˜œ #Ñ&Ô&Ð&Ø×Ò˜œ QÑ'Ô'Ð'à	�
Š
�4ÑÔÐØ×Ò˜œ QÑ'Ô'Ð'Ø×Ò˜œ QÑ'Ô'Ð'Ø×Ò˜œ $Ñ'Ô'Ð'Ø×Ò˜œ QÑ'Ô'Ð'à	�
Š
�1Ð)Ñ*Ô*Ð*Ø×Ò˜œ QÑ'Ô'Ð'Ø×Ò˜œ !Ñ$Ô$Ð$à	×Ò˜ c¤hÑ/Ô/Ð/Ø	�
Š
�4ÑÔÐØ×Ò˜œ QÑ'Ô'Ð'Ð'Ð'r   c                 óÊ  — t          ¦   «         }t          ¦   «         }t          ¦   «         }|                     d|j        ¦  «         |                     d|j        ¦  «         |                     |d¦  «         |                      |j        d¦  «         |                      |j        |¦  «         |                      |j        d¦  «         |                      |j        |¦  «         dS )zŽ
        Test adding two observers for the same query.

        When the event is dispatched both of the observers need to be called.
        r0   r   N)r   r	   r8   r   r:   r;   r   r   )r   r=   r>   r?   s       r   Útest_addObserverTwicez*EventDispatcherTests.test_addObserverTwice]   sÎ   € õ ÑÔˆÝÑÔˆÝÑÔˆà	�ŠÐ)¨3¬8Ñ4Ô4Ð4Ø	�ŠÐ)¨3¬8Ñ4Ô4Ð4Ø	�
Š
�1Ð)Ñ*Ô*Ð*à×Ò˜œ QÑ'Ô'Ð'Ø×Ò˜œ !Ñ$Ô$Ð$Ø×Ò˜œ QÑ'Ô'Ð'Ø×Ò˜œ !Ñ$Ô$Ð$Ð$Ð$r   c                 ó¸  ‡‡— t          ¦   «         Št          d¦  «        }t          ¦   «         Šˆˆfd„}‰                     d|¦  «         ‰                     |¦  «         |                      ‰j        d¦  «         ‰                     |¦  «         |                      ‰j        d¦  «         ‰                     |¦  «         |                      ‰j        d¦  «         dS )zG
        Test for registration of an observer during dispatch.
        r1   c                 ó>   •— ‰                      d‰j        ¦  «         d S ©Nr.   )r8   r   )Ú_Úcbr=   s    €€r   Ú	onMessagezBEventDispatcherTests.test_addObserverInDispatch.<locals>.onMessagex   s   ø€ Ø�MŠM˜* b¤gÑ.Ô.Ð.Ð.Ð.r   r.   r   r   r7   N©r   r   r	   ÚaddOnetimeObserverr:   r;   r   ©r   rA   rK   rJ   r=   s      @@r   Útest_addObserverInDispatchz/EventDispatcherTests.test_addObserverInDispatchp   sÛ   øø€ õ ÑÔˆÝÐ'Ñ(Ô(ˆÝÑÔˆð	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	
×Ò˜Z¨Ñ3Ô3Ð3à	�
Š
�3‰ŒˆØ×Ò˜œ AÑ&Ô&Ð&à	�
Š
�3‰ŒˆØ×Ò˜œ AÑ&Ô&Ð&à	�
Š
�3‰ŒˆØ×Ò˜œ AÑ&Ô&Ð&Ð&Ð&r   c                 ó¸  ‡‡— t          ¦   «         Št          d¦  «        }t          ¦   «         Šˆˆfd„}‰                     d|¦  «         ‰                     |¦  «         |                      ‰j        d¦  «         ‰                     |¦  «         |                      ‰j        d¦  «         ‰                     |¦  «         |                      ‰j        d¦  «         dS )zN
        Test for registration of a onetime observer during dispatch.
        r1   c                 ó>   •— ‰                      d‰j        ¦  «         d S rH   )rM   r   )rA   rJ   r=   s    €€r   rK   zIEventDispatcherTests.test_addOnetimeObserverInDispatch.<locals>.onMessageŽ   s!   ø€ Ø× Ò  ¨R¬WÑ5Ô5Ð5Ð5Ð5r   r.   r   r   NrL   rN   s      @@r   Ú!test_addOnetimeObserverInDispatchz6EventDispatcherTests.test_addOnetimeObserverInDispatch†   sÛ   øø€ õ ÑÔˆÝÐ'Ñ(Ô(ˆÝÑÔˆð	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	
×Ò˜Z¨Ñ3Ô3Ð3à	�
Š
�3‰ŒˆØ×Ò˜œ AÑ&Ô&Ð&à	�
Š
�3‰ŒˆØ×Ò˜œ AÑ&Ô&Ð&à	�
Š
�3‰ŒˆØ×Ò˜œ AÑ&Ô&Ð&Ð&Ð&r   c                 óR  — t          ¦   «         }t          d¦  «        }t          ¦   «         }|                     d|j        ¦  «         |                     |¦  «         |                      |j        d¦  «         |                     |¦  «         |                      |j        d¦  «         d S )Nr1   r.   r   )r   r   r	   rM   r   r:   r;   r   )r   r=   rA   rJ   s       r   ÚtestOnetimeDispatchz(EventDispatcherTests.testOnetimeDispatchœ   s’   € ÝÑÔˆÝÐ'Ñ(Ô(ˆÝÑÔˆà	×Ò˜Z¨¬Ñ1Ô1Ð1Ø	�
Š
�3‰ŒˆØ×Ò˜œ AÑ&Ô&Ð&Ø	�
Š
�3‰ŒˆØ×Ò˜œ AÑ&Ô&Ð&Ð&Ð&r   c                 ó\  — t          ¦   «         }t          d¦  «        }t          d¦  «        }t          ¦   «         }|                     d|j        ¦  «         |                     |¦  «        }|                      d|¦  «         |                     |¦  «        }|                      d|¦  «         d S )Nr1   r5   r/   FT)r   r   r	   r8   r   r:   r;   )r   r=   rA   rB   rJ   Úresults         r   ÚtestDispatcherResultz)EventDispatcherTests.testDispatcherResult§   sœ   € ÝÑÔˆÝÐ'Ñ(Ô(ˆÝÐ)Ñ*Ô*ˆÝÑÔˆà	�Š�k 2¤7Ñ+Ô+Ð+Ø—’˜C‘”ˆØ×Ò˜ Ñ'Ô'Ð'à—’˜DÑ!Ô!ˆØ×Ò˜˜vÑ&Ô&Ð&Ð&Ð&r   c           	      óð  — t          ¦   «         }t          ¦   «         }|                     d|j        ¦  «         |                     d|j        d¦  «         |                     d|j        d¦  «         t          d¦  «        }|                     d¦  «         |                     |¦  «         |  	                    |j
        |j        |j        |j        gdt          d„ |j
        D ¦   «         ¦  «        z  ¦  «         d S )	Nr-   r.   éÿÿÿÿr   r1   r4   zCalls out of order: %sc                 ó   — g | ]	}|j         ‘Œ
S r   )r   )Ú.0Úcs     r   ú
<listcomp>zAEventDispatcherTests.testOrderedXPathDispatch.<locals>.<listcomp>Á   s   € Ð,MÐ,MÐ,M¸A¨Q¬ZÐ,MÐ,MÐ,Mr   )r   r   r8   r'   r)   r"   r   r9   r:   r;   r   Úrepr©r   r=   rJ   rA   s       r   ÚtestOrderedXPathDispatchz-EventDispatcherTests.testOrderedXPathDispatch´   så   € ÝÑÔˆÝ#Ñ%Ô%ˆØ	�Š�o r¤xÑ0Ô0Ð0Ø	�Š�j "¤(¨BÑ/Ô/Ð/Ø	�Š�o r¤x°Ñ3Ô3Ð3åÐ'Ñ(Ô(ˆØ�Š�vÑÔÐØ	�
Š
�3‰ŒˆØ×ÒØŒKØŒX�r”x ¤Ð*Ø$¥tÐ,MÐ,MÀÄÐ,MÑ,MÔ,MÑ'NÔ'NÑNñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó‚  — t          ¦   «         }t          ¦   «         }|                     d|j        ¦  «         |                     dd¦  «         |                      d|j        ¦  «         |                     d|j        ¦  «         |                      dt          |j	         
                    d¦  «        ¦  «        ¦  «         dS )zO
        Test observer clean-up after removeObserver for named events.
        ú//event/testNr   r   )r   r	   r8   r   r:   r;   r   r<   ÚlenÚ_eventObserversÚpop©r   r=   rJ   s      r   Útest_cleanUpRemoveEventObserverz4EventDispatcherTests.test_cleanUpRemoveEventObserverÊ   s©   € õ
 ÑÔˆÝÑÔˆà	�Š�n b¤gÑ.Ô.Ð.Ø	�
Š
�4˜Ñ(Ô(Ð(Ø×Ò˜˜BœIÑ&Ô&Ð&Ø	×Ò˜¨¬Ñ1Ô1Ð1Ø×Ò˜�C Ô 1× 5Ò 5°aÑ 8Ô 8Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:r   c                 óž  — t          ¦   «         }t          ¦   «         }t          d¦  «        }|                     d|j        ¦  «         |                     |¦  «         |                      d|j        ¦  «         |                     d|j        ¦  «         |                      dt          |j
                             d¦  «        ¦  «        ¦  «         dS )zO
        Test observer clean-up after removeObserver for XPath events.
        ©Nr3   r.   r   r   N)r   r	   r   r8   r   r:   r;   r   r<   rc   Ú_xpathObserversre   r_   s       r   Útest_cleanUpRemoveXPathObserverz4EventDispatcherTests.test_cleanUpRemoveXPathObserverØ   s²   € õ
 ÑÔˆÝÑÔˆÝÐ'Ñ(Ô(ˆà	�Š�j "¤'Ñ*Ô*Ð*Ø	�
Š
�3‰ŒˆØ×Ò˜˜BœIÑ&Ô&Ð&Ø	×Ò˜ R¤WÑ-Ô-Ð-Ø×Ò˜�C Ô 1× 5Ò 5°aÑ 8Ô 8Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:r   c                 óL  — t          ¦   «         }t          ¦   «         }|                     d|j        ¦  «         |                     dd¦  «         |                      d|j        ¦  «         |                      dt          |j         	                    d¦  «        ¦  «        ¦  «         dS )zD
        Test observer clean-up after onetime named events.
        rb   Nr   r   )
r   r	   rM   r   r:   r;   r   rc   rd   re   rf   s      r   Ú test_cleanUpOnetimeEventObserverz5EventDispatcherTests.test_cleanUpOnetimeEventObserverç   s“   € õ
 ÑÔˆÝÑÔˆà	×Ò˜^¨R¬WÑ5Ô5Ð5Ø	�
Š
�4˜Ñ(Ô(Ð(Ø×Ò˜˜BœIÑ&Ô&Ð&Ø×Ò˜�C Ô 1× 5Ò 5°aÑ 8Ô 8Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:r   c                 óh  — t          ¦   «         }t          ¦   «         }t          d¦  «        }|                     d|j        ¦  «         |                     |¦  «         |                      d|j        ¦  «         |                      dt          |j	         
                    d¦  «        ¦  «        ¦  «         dS )zD
        Test observer clean-up after onetime XPath events.
        ri   r.   r   r   N)r   r	   r   rM   r   r:   r;   r   rc   rj   re   r_   s       r   Ú test_cleanUpOnetimeXPathObserverz5EventDispatcherTests.test_cleanUpOnetimeXPathObserverô   sœ   € õ
 ÑÔˆÝÑÔˆÝÐ'Ñ(Ô(ˆà	×Ò˜Z¨¬Ñ1Ô1Ð1Ø	�
Š
�3‰ŒˆØ×Ò˜˜BœIÑ&Ô&Ð&Ø×Ò˜�C Ô 1× 5Ò 5°aÑ 8Ô 8Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:r   c                 ó€  ‡—  G d„ dt           j        ¦  «        } G d„ dt          ¦  «        Šˆfd„}t          ¦   «         }t	          ¦   «         }t           j        }	 |t           _        |                     d|¦  «         |                     d|j        ¦  «         	 |                     dd¦  «         n # ‰$ r |                      d¦  «         Y nw xY w|  	                    d	t          |                      ‰¦  «        ¦  «        ¦  «         |  	                    d	|j        ¦  «         |t           _        dS # |t           _        w xY w)
zÓ
        Test that exceptions in observers do not bubble up to dispatch.

        The exceptions raised in observers should be logged and other
        observers should be called as if nothing happened.
        c                   ó   — e Zd Zd„ ZdS )úOEventDispatcherTests.test_observerRaisingException.<locals>.OrderedCallbackListc                 ó,   — t          ¦   «         | _        d S r   )r   Ú	callbacksr   s    r   r   zXEventDispatcherTests.test_observerRaisingException.<locals>.OrderedCallbackList.__init__  s   € Ý!,¡¤�”��r   N)r   r   r   r   r   r   r   ÚOrderedCallbackListrr   
  s#   € € € € € ð/ð /ð /ð /ð /r   ru   c                   ó   — e Zd ZdS )úEEventDispatcherTests.test_observerRaisingException.<locals>.TestErrorN)r   r   r   r   r   r   Ú	TestErrorrw     s   € € € € € ØˆDr   rx   c                 ó   •—  ‰¦   «         ‚r   r   )rI   rx   s    €r   Ú
raiseErrorzFEventDispatcherTests.test_observerRaisingException.<locals>.raiseError  s   ø€ Ø�)‘+”+Ðr   rb   Nz2TestError raised. Should have been logged instead.r   )r   ÚCallbackListÚ	Exceptionr   r	   r8   r   r:   Úfailr;   rc   ÚflushLoggedErrorsr   )r   ru   rz   r=   rJ   ÚoriginalCallbackListrx   s         @r   Útest_observerRaisingExceptionz2EventDispatcherTests.test_observerRaisingException  s‰  ø€ ð	/ð 	/ð 	/ð 	/ð 	/¥'Ô"6ñ 	/ô 	/ð 	/ð	ð 	ð 	ð 	ð 	�	ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	õ ÑÔˆÝÑÔˆå&Ô3Ðð	8Ø#6�GÔ à�MŠM˜.¨*Ñ5Ô5Ð5Ø�MŠM˜.¨"¬'Ñ2Ô2Ð2ðPØ—
’
˜4 Ñ0Ô0Ð0Ð0øØð Pð Pð PØ—	’	ÐNÑOÔOÐOÐOÐOðPøøøð ×Ò˜Q¥ D×$:Ò$:¸9Ñ$EÔ$EÑ FÔ FÑGÔGÐGØ×Ò˜Q ¤	Ñ*Ô*Ð*à#7�GÔ Ð Ð øÐ#7�GÔ Ð7Ð7Ð7Ð7s1   Á=D/ ÂB0 Â/D/ Â0CÃ
D/ ÃCÃAD/ Ä/D=N)r   r   r   r   rC   rE   rO   rR   rT   rW   r`   rg   rk   rm   ro   r€   r   r   r   r+   r+   4   sÓ   € € € € € ðð ð"(ð "(ð "(ðH%ð %ð %ð&'ð 'ð 'ð,'ð 'ð 'ð,	'ð 	'ð 	'ð'ð 'ð 'ð
ð 
ð 
ð,;ð ;ð ;ð;ð ;ð ;ð;ð ;ð ;ð;ð ;ð ;ð$8ð $8ð $8ð $8ð $8r   r+   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚXmlPipeTestsz:
    Tests for L{twisted.words.xish.utility.XmlPipe}.
    c                 ó6   — t          j        ¦   «         | _        d S r   )r   ÚXmlPipeÚpiper   s    r   ÚsetUpzXmlPipeTests.setUp.  s   € Ý”OÑ%Ô%ˆŒ	ˆ	ˆ	r   c                 óà   ‡— ˆfd„}g Š| j         j                             d|¦  «         t          d¦  «        }| j         j                             |¦  «         |                      |g‰¦  «         dS )zO
        Send an element from the source and observe it from the sink.
        c                 ó2   •— ‰                      | ¦  «         d S r   ©r!   ©r   r   s    €r   rJ   z,XmlPipeTests.test_sendFromSource.<locals>.cb6  ó   ø€ Ø�MŠM˜#ÑÔÐÐÐr   ú/test[@xmlns="testns"]©ÚtestnsÚtestN)r…   Úsinkr8   r   ÚsourceÚsendr;   ©r   rJ   Úelementr   s      @r   Útest_sendFromSourcez XmlPipeTests.test_sendFromSource1  sƒ   ø€ ð
	ð 	ð 	ð 	ð 	ð ˆØŒ	Œ×"Ò"Ð#;¸RÑ@Ô@Ð@ÝÐ,Ñ-Ô-ˆØŒ	Ô×Ò˜gÑ&Ô&Ð&Ø×Ò˜'˜ FÑ+Ô+Ð+Ð+Ð+r   c                 óà   ‡— ˆfd„}g Š| j         j                             d|¦  «         t          d¦  «        }| j         j                             |¦  «         |                      |g‰¦  «         dS )zO
        Send an element from the sink and observe it from the source.
        c                 ó2   •— ‰                      | ¦  «         d S r   r‰   rŠ   s    €r   rJ   z*XmlPipeTests.test_sendFromSink.<locals>.cbD  r‹   r   rŒ   r�   N)r…   r‘   r8   r   r�   r’   r;   r“   s      @r   Útest_sendFromSinkzXmlPipeTests.test_sendFromSink?  sƒ   ø€ ð
	ð 	ð 	ð 	ð 	ð ˆØŒ	Ô×$Ò$Ð%=¸rÑBÔBÐBÝÐ,Ñ-Ô-ˆØŒ	Œ×Ò˜GÑ$Ô$Ð$Ø×Ò˜'˜ FÑ+Ô+Ð+Ð+Ð+r   N)r   r   r   r   r†   r•   r˜   r   r   r   r‚   r‚   )  sK   € € € € € ðð ð&ð &ð &ð,ð ,ð ,ð,ð ,ð ,ð ,ð ,r   r‚   N)r   Úcollectionsr   Útwisted.trialr   Útwisted.words.xishr   Útwisted.words.xish.domishr   Útwisted.words.xish.utilityr   r	   r   ÚTestCaser+   r‚   r   r   r   ú<module>rŸ      s(  ððð ð
 $Ð #Ð #Ð #Ð #Ð #à "Ð "Ð "Ð "Ð "Ð "Ø &Ð &Ð &Ð &Ð &Ð &Ø -Ð -Ð -Ð -Ð -Ð -Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ñ ô ð ð")ð )ð )ð )ð )ñ )ô )ð )ð$r8ð r8ð r8ð r8ð r8˜8Ô,ñ r8ô r8ð r8ðj",ð ",ð ",ð ",ð ",�8Ô$ñ ",ô ",ð ",ð ",ð ",r   