o
    ¼>hl$  ã                   @   s„   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„ dƒZG d	d
„ d
ƒZG dd„ dejƒZG dd„ dejƒZdS )z+
Test cases for twisted.words.xish.utility
é    )ÚOrderedDict)Úunittest)Úutility)ÚElement)ÚEventDispatcherc                   @   s    e Zd ZdZdd„ Zd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                 C   s   d| _ d | _d S )Nr   ©ÚcalledÚobj©Úself© r   ú€/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/words/test/test_xishutil.pyÚ__init__   s   
zCallbackTracker.__init__c                 C   s   | j d | _ || _d S )Né   r   )r   r
   r   r   r   Úcall   s   
zCallbackTracker.callN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s    r   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚOrderedCallbackTrackerz=
    Test helper for tracking callbacks and their order.
    c                 C   s
   g | _ d S ©N)ÚcallListr   r   r   r   r   '   s   
zOrderedCallbackTracker.__init__c                 C   ó   | j  | j¡ d S r   )r   ÚappendÚcall1©r   Úobjectr   r   r   r   *   ó   zOrderedCallbackTracker.call1c                 C   r   r   )r   r   Úcall2r   r   r   r   r   -   r   zOrderedCallbackTracker.call2c                 C   r   r   )r   r   Úcall3r   r   r   r   r    0   r   zOrderedCallbackTracker.call3N)r   r   r   r   r   r   r   r    r   r   r   r   r   "   s    r   c                   @   sp   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S )ÚEventDispatcherTestsz'
    Tests for L{EventDispatcher}.
    c                 C   s<  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©r'   Úpresencer+   é   r   r   )r   r   ÚaddObserverr   r   Ú
addElementÚdispatchÚassertEqualr	   r
   ÚremoveObserver)r   ÚdÚcb1Úcb2Úcb3ÚmsgÚpresr   r   r   Ú	testStuff9   s6   




zEventDispatcherTests.testStuffc                 C   sv   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.
        r%   r   N)r   r   r-   r   r/   r0   r	   r
   )r   r2   r3   r4   r   r   r   Útest_addObserverTwice]   s   z*EventDispatcherTests.test_addObserverTwicec                    sz   t ƒ ‰tdƒ}tƒ ‰ ‡ ‡fdd„}ˆ d|¡ ˆ |¡ |  ˆ jd¡ ˆ |¡ |  ˆ jd¡ ˆ |¡ |  ˆ jd¡ dS )	zG
        Test for registration of an observer during dispatch.
        r&   c                    ó   ˆ  dˆ j¡ d S ©Nr#   )r-   r   ©Ú_©Úcbr2   r   r   Ú	onMessagex   r   zBEventDispatcherTests.test_addObserverInDispatch.<locals>.onMessager#   r   r   r,   N©r   r   r   ÚaddOnetimeObserverr/   r0   r	   ©r   r6   r@   r   r>   r   Útest_addObserverInDispatchp   ó   


z/EventDispatcherTests.test_addObserverInDispatchc                    sz   t ƒ ‰tdƒ}tƒ ‰ ‡ ‡fdd„}ˆ d|¡ ˆ |¡ |  ˆ jd¡ ˆ |¡ |  ˆ jd¡ ˆ |¡ |  ˆ jd¡ dS )zN
        Test for registration of a onetime observer during dispatch.
        r&   c                    r:   r;   )rB   r   )r6   r>   r   r   r@   Ž   r   zIEventDispatcherTests.test_addOnetimeObserverInDispatch.<locals>.onMessager#   r   r   NrA   rC   r   r>   r   Ú!test_addOnetimeObserverInDispatch†   rE   z6EventDispatcherTests.test_addOnetimeObserverInDispatchc                 C   sV   t ƒ }tdƒ}tƒ }| d|j¡ | |¡ |  |jd¡ | |¡ |  |jd¡ d S )Nr&   r#   r   )r   r   r   rB   r   r/   r0   r	   )r   r2   r6   r?   r   r   r   ÚtestOnetimeDispatchœ   s   

z(EventDispatcherTests.testOnetimeDispatchc                 C   sZ   t ƒ }tdƒ}tdƒ}tƒ }| d|j¡ | |¡}|  d|¡ | |¡}|  d|¡ d S )Nr&   r*   r$   FT)r   r   r   r-   r   r/   r0   )r   r2   r6   r7   r?   Úresultr   r   r   ÚtestDispatcherResult§   s   

z)EventDispatcherTests.testDispatcherResultc                 C   sŠ   t ƒ }tƒ }| d|j¡ | d|jd¡ | d|jd¡ tdƒ}| d¡ | |¡ |  	|j
|j|j|jgdtdd	„ |j
D ƒƒ ¡ d S )
Nr"   r#   éÿÿÿÿr   r&   r)   zCalls out of order: %sc                 S   s   g | ]}|j ‘qS r   )r   )Ú.0Úcr   r   r   Ú
<listcomp>Á   s    zAEventDispatcherTests.testOrderedXPathDispatch.<locals>.<listcomp>)r   r   r-   r   r    r   r   r.   r/   r0   r   Úrepr©r   r2   r?   r6   r   r   r   ÚtestOrderedXPathDispatch´   s   

ýz-EventDispatcherTests.testOrderedXPathDispatchc                 C   s^   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   r-   r   r/   r0   r	   r1   ÚlenÚ_eventObserversÚpop©r   r2   r?   r   r   r   Útest_cleanUpRemoveEventObserverÊ   s   z4EventDispatcherTests.test_cleanUpRemoveEventObserverc                 C   sd   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.
        ©Nr(   r#   r   r   N)r   r   r   r-   r   r/   r0   r	   r1   rR   Ú_xpathObserversrT   rO   r   r   r   Útest_cleanUpRemoveXPathObserverØ   s   
z4EventDispatcherTests.test_cleanUpRemoveXPathObserverc                 C   sP   t ƒ }tƒ }| d|j¡ | dd¡ |  d|j¡ |  dt|j 	d¡ƒ¡ dS )zD
        Test observer clean-up after onetime named events.
        rQ   Nr   r   )
r   r   rB   r   r/   r0   r	   rR   rS   rT   rU   r   r   r   Ú test_cleanUpOnetimeEventObserverç   s   z5EventDispatcherTests.test_cleanUpOnetimeEventObserverc                 C   sV   t ƒ }tƒ }tdƒ}| d|j¡ | |¡ |  d|j¡ |  dt|j	 
d¡ƒ¡ dS )zD
        Test observer clean-up after onetime XPath events.
        rW   r#   r   r   N)r   r   r   rB   r   r/   r0   r	   rR   rX   rT   rO   r   r   r   Ú test_cleanUpOnetimeXPathObserverô   s   
z5EventDispatcherTests.test_cleanUpOnetimeXPathObserverc                    sÈ   G dd„ dt jƒ}G dd„ dtƒ‰ ‡ fdd„}tƒ }tƒ }t j}z?|t _| d|¡ | d|j¡ z| dd¡ W n ˆ yG   |  d	¡ Y nw |  	d
t
|  ˆ ¡ƒ¡ |  	d
|j¡ W |t _dS |t _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                   @   s   e Zd Zdd„ ZdS )zOEventDispatcherTests.test_observerRaisingException.<locals>.OrderedCallbackListc                 S   s   t ƒ | _d S r   )r   Ú	callbacksr   r   r   r   r     s   zXEventDispatcherTests.test_observerRaisingException.<locals>.OrderedCallbackList.__init__N)r   r   r   r   r   r   r   r   ÚOrderedCallbackList
  s    r]   c                   @   s   e Zd ZdS )zEEventDispatcherTests.test_observerRaisingException.<locals>.TestErrorN)r   r   r   r   r   r   r   Ú	TestError  s    r^   c                    s   ˆ ƒ ‚r   r   r<   ©r^   r   r   Ú
raiseError  s   zFEventDispatcherTests.test_observerRaisingException.<locals>.raiseErrorrQ   Nz2TestError raised. Should have been logged instead.r   )r   ÚCallbackListÚ	Exceptionr   r   r-   r   r/   Úfailr0   rR   ÚflushLoggedErrorsr	   )r   r]   r`   r2   r?   ÚoriginalCallbackListr   r_   r   Útest_observerRaisingException  s$   ÿz2EventDispatcherTests.test_observerRaisingExceptionN)r   r   r   r   r8   r9   rD   rF   rG   rI   rP   rV   rY   rZ   r[   rf   r   r   r   r   r!   4   s    $r!   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚXmlPipeTestsz:
    Tests for L{twisted.words.xish.utility.XmlPipe}.
    c                 C   s   t  ¡ | _d S r   )r   ÚXmlPipeÚpiper   r   r   r   ÚsetUp.  ó   zXmlPipeTests.setUpc                    óH   ‡ fd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                    ó   ˆ   | ¡ d S r   ©r   ©r
   ©r	   r   r   r?   6  rk   z,XmlPipeTests.test_sendFromSource.<locals>.cbú/test[@xmlns="testns"]©ÚtestnsÚtestN)ri   Úsinkr-   r   ÚsourceÚsendr0   ©r   r?   Úelementr   rp   r   Útest_sendFromSource1  ó   z XmlPipeTests.test_sendFromSourcec                    rl   )zO
        Send an element from the sink and observe it from the source.
        c                    rm   r   rn   ro   rp   r   r   r?   D  rk   z*XmlPipeTests.test_sendFromSink.<locals>.cbrq   rr   N)ri   rv   r-   r   ru   rw   r0   rx   r   rp   r   Útest_sendFromSink?  r{   zXmlPipeTests.test_sendFromSinkN)r   r   r   r   rj   rz   r|   r   r   r   r   rg   )  s
    rg   N)r   Úcollectionsr   Útwisted.trialr   Útwisted.words.xishr   Útwisted.words.xish.domishr   Útwisted.words.xish.utilityr   r   r   ÚTestCaser!   rg   r   r   r   r   Ú<module>   s    v