
    Yf*                         d Z ddlmZmZmZm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mZ dd	lmZ dd
lmZ  G d dej                  ZdS )z-
Test cases for L{twisted.logger._observer}.
    )DictListTuplecast)implementer)BrokenMethodImplementation)verifyObject)unittest   )ILogObserverLogEvent)Logger)LogPublisherc                   b    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S )LogPublisherTestsz$
    Tests for L{LogPublisher}.
    returnNc                     t                      }	 t          t          |           dS # t          $ r }|                     |           Y d}~dS d}~ww xY w)z8
        L{LogPublisher} is an L{ILogObserver}.
        N)r   r	   r   r   fail)self	publisheres      S/var/www/html/env/lib/python3.11/site-packages/twisted/logger/test/test_observer.pytest_interfacez LogPublisherTests.test_interface   sb     !NN		y11111) 	 	 	IIaLLLLLLLLL	s   ' 
AAAc                     t          t          d           }t          t          d           }t          ||          }|                     ||ht	          |j                             dS )zB
        L{LogPublisher.observers} returns the observers.
        c                     d S N r   s    r   <lambda>z2LogPublisherTests.test_observers.<locals>.<lambda>'       $     c                     d S r   r   r   s    r   r   z2LogPublisherTests.test_observers.<locals>.<lambda>(   r    r!   N)r   r   r   assertEqualset
_observers)r   o1o2r   s       r   test_observersz LogPublisherTests.test_observers#   s`     ,//,// R((	"b3y';#<#<=====r!   c                 *   t          t          d           }t          t          d           }t          t          d           }t          ||          }|                    |           |                     |||ht          |j                             dS )z?
        L{LogPublisher.addObserver} adds an observer.
        c                     d S r   r   r   s    r   r   z4LogPublisherTests.test_addObserver.<locals>.<lambda>1   r    r!   c                     d S r   r   r   s    r   r   z4LogPublisherTests.test_addObserver.<locals>.<lambda>2   r    r!   c                     d S r   r   r   s    r   r   z4LogPublisherTests.test_addObserver.<locals>.<lambda>3   r    r!   N)r   r   r   addObserverr#   r$   r%   r   r&   r'   o3r   s        r   test_addObserverz"LogPublisherTests.test_addObserver-   s     ,//,//,// R((	b!!!"b"s9+?'@'@AAAAAr!   c                 |    t                      }|                     t          |j        t	                                 dS )ze
        L{LogPublisher.addObserver} refuses to add an observer that's
        not callable.
        N)r   assertRaises	TypeErrorr-   object)r   r   s     r   test_addObserverNotCallablez-LogPublisherTests.test_addObserverNotCallable9   s2    
 !NN	)Y%:FHHEEEEEr!   c                 *   t          t          d           }t          t          d           }t          t          d           }t          |||          }|                    |           |                     ||ht          |j                             dS )zE
        L{LogPublisher.removeObserver} removes an observer.
        c                     d S r   r   r   s    r   r   z7LogPublisherTests.test_removeObserver.<locals>.<lambda>E   r    r!   c                     d S r   r   r   s    r   r   z7LogPublisherTests.test_removeObserver.<locals>.<lambda>F   r    r!   c                     d S r   r   r   s    r   r   z7LogPublisherTests.test_removeObserver.<locals>.<lambda>G   r    r!   Nr   r   r   removeObserverr#   r$   r%   r.   s        r   test_removeObserverz%LogPublisherTests.test_removeObserverA   s     ,//,//,// R,,	  $$$"b3y';#<#<=====r!   c                 (   t          t          d           }t          t          d           }t          t          d           }t          ||          }|                    |           |                     ||ht          |j                             dS )zd
        L{LogPublisher.removeObserver} removes an observer that is not
        registered.
        c                     d S r   r   r   s    r   r   zDLogPublisherTests.test_removeObserverNotRegistered.<locals>.<lambda>R   r    r!   c                     d S r   r   r   s    r   r   zDLogPublisherTests.test_removeObserverNotRegistered.<locals>.<lambda>S   r    r!   c                     d S r   r   r   s    r   r   zDLogPublisherTests.test_removeObserverNotRegistered.<locals>.<lambda>T   r    r!   Nr:   r.   s        r    test_removeObserverNotRegisteredz2LogPublisherTests.test_removeObserverNotRegisteredM   s    
 ,//,//,// R((	  $$$"b3y';#<#<=====r!   c                    t          dd          }g }g }g }t          t          |j                  }t          t          |j                  }t          t          |j                  }t	          |||          } ||           |                     ||           |                     ||           |                     ||           dS )z6
        L{LogPublisher} calls its observers.
           r   foobarN)dictr   r   appendr   assertIn)	r   eventevents1events2events3r&   r'   r/   r   s	            r   test_fanOutzLogPublisherTests.test_fanOutZ   s     """"$"$"$,//,//,// R,,		%eW%%%eW%%%eW%%%%%r!   c                    t          dd          }t          d          g t          t                    dt          ddffd            }g }t          |t          t          |j                            } ||           |                     |           d	 |D             }| 	                    t          |          d           |                     |d
         j                   | 	                    t                    d           dS )z}
        Observer raises an exception during fan out: a failure is logged, but
        not re-raised.  Life goes on.
        rC   r   rD   ARGH! EVIL DEATH!rJ   r   Nc                 @     }                     |            |rd S r   )rH   )rJ   shouldRaiseevents	exceptions     r   observerz7LogPublisherTests.test_observerRaises.<locals>.observerx   s3    $*KMM%        r!   c                 &    g | ]}d |v |d          S )log_failurer   ).0r   s     r   
<listcomp>z9LogPublisherTests.test_observerRaises.<locals>.<listcomp>   s'    LLLq!9K9K!M"9K9K9Kr!   r   )rG   RuntimeErrorr   r   r   r   r   rH   rI   r#   lenassertIsvalue)r   rJ   rU   	collectorr   errorsrS   rT   s         @@r   test_observerRaisesz%LogPublisherTests.test_observerRaisesn   s&   
 """ !455	!#	\	"	"	 H 	  	  	  	  	  	  	  
#	"	  %'	 4i>N+O+OPP		% 	eV$$$ MLILLLVa(((fQioy111Va(((((r!   c                    t          dd          }t          d          t          t                    dt          ddfd            } G fd	d
t
                    }t          |          } |            |_         ||           dS )z
        Observer raises an exception during fan out and the publisher's Logger
        pukes when the failure is reported.  The exception does not propagate
        back to the caller.
        rC   r   rD   rP   rJ   r   Nc                      t          d          )Nz	Sad panda)rZ   )rJ   s    r   rU   zGLogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.observer   s    {+++r!   c                   (    e Zd Zdededdf fdZdS )ILogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.GurkLoggerargskwargsr   Nc                     r   r   )r   re   rf   rT   s      r   failurezQLogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.GurkLogger.failure   s    r!   )__name__
__module____qualname__r4   rh   )rT   s   r   
GurkLoggerrd      sH         V  v  $                r!   rl   )rG   rZ   r   r   r   r   r   log)r   rJ   rU   rl   r   rT   s        @r   #test_observerRaisesAndLoggerHatesMez5LogPublisherTests.test_observerRaisesAndLoggerHatesMe   s     """ !455		\	"	"	,H 	, 	, 	, 	, 
#	"	,	  	  	  	  	  	  	  	  	  	  !**	"
		%r!   c                    t          ddg           }i t          t                    dt          ddffd            }t          t                    dt          ddffd            }t	          ||          } ||           |                     d         ||ff           |                     d         ||f||ff           dS )	zA
        Tracing keeps track of forwarding to observers.
        rC   r   )rE   rF   	log_tracer   r   Nc           
                               dt          t          t          t          t          f                  t          | d                                        d S )NrC   rp   
setdefaultr   r   r   r   tupler   tracess    r   r&   z(LogPublisherTests.test_trace.<locals>.o1   O    4eFL$89:E!K.<Q<QRR    r!   c           
                               dt          t          t          t          t          f                  t          | d                                        d S )Nr   rp   rr   ru   s    r   r'   z(LogPublisherTests.test_trace.<locals>.o2   rw   r!   )rG   r   r   r   r   r#   )r   rJ   r&   r'   r   rv   s        @r   
test_tracezLogPublisherTests.test_trace   s    R000@B
 
\	"	"	( 	t 	 	 	 	 	 
#	"	
 
\	"	"	( 	t 	 	 	 	 	 
#	"	
 !R((		%i_$6777i_y"o$FGGGGGr!   )r   N)ri   rj   rk   __doc__r   r(   r0   r5   r<   rA   rN   r`   rn   ry   r   r!   r   r   r      s            > > > >
B 
B 
B 
BF F F F
> 
> 
> 
>> > > >& & & &() ) ) )@   .H H H H H Hr!   r   N)rz   typingr   r   r   r   zope.interfacer   zope.interface.exceptionsr   zope.interface.verifyr	   twisted.trialr
   _interfacesr   r   _loggerr   	_observerr   TestCaser   r   r!   r   <module>r      s    + * * * * * * * * * * * & & & & & & @ @ @ @ @ @ . . . . . . " " " " " " 0 0 0 0 0 0 0 0       $ $ $ $ $ $lH lH lH lH lH) lH lH lH lH lHr!   