
    Yfl$                         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    R/var/www/html/env/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    kAo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*        TZ(((((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   	osx000	j#(+++	k38,,,	)38444'((v)**
###	

3Q'''#&&&Q'''	

4Q'''Q'''$'''Q'''	

1)***Q'''!$$$	ch///	

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     	)38444	)38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    MM*bg.....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!      RW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    '(()**	k27+++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,MAQZ,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    #%%	orx000	j"(B///	orx333'((v	

3KXrx*$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    
 	nbg...	

4(((BI&&&	111C 1 5 5a 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BI&&&	RW---C 1 5 5a 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    
 	^RW555	

4(((BI&&&C 1 5 5a 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BI&&&C 1 5 5a 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#6G MM.*555MM."'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	***#7G   #7G 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      MM#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88, r8 r8 r8j", ", ", ", ",8$ ", ", ", ", ",r   