o
    Òó·i*  ã                   @   sŠ   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„ 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                   @   st   e Zd ZdZddd„Zddd„Zddd	„Zdd
d„Zddd„Zddd„Z	ddd„Z
ddd„Zddd„Zddd„ZdS )ÚLogPublisherTestsz$
    Tests for L{LogPublisher}.
    ÚreturnNc              
   C   sH   t ƒ }ztt|ƒ W dS  ty# } z|  |¡ W Y d}~dS d}~ww )z8
        L{LogPublisher} is an L{ILogObserver}.
        N)r   r   r   r   Zfail)ÚselfÚ	publisherÚe© r   úgC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/logger/test/test_observer.pyÚtest_interface   s   €ÿz LogPublisherTests.test_interfacec                 C   s@   t tdd„ ƒ}t tdd„ ƒ}t||ƒ}|  ||ht|jƒ¡ dS )zB
        L{LogPublisher.observers} returns the observers.
        c                 S   ó   d S ©Nr   ©r   r   r   r   Ú<lambda>'   ó    z2LogPublisherTests.test_observers.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   (   r   N)r   r   r   ÚassertEqualÚsetÚ
_observers)r   Úo1Úo2r   r   r   r   Útest_observers#   s   
z LogPublisherTests.test_observersc                 C   sZ   t tdd„ ƒ}t tdd„ ƒ}t tdd„ ƒ}t||ƒ}| |¡ |  |||ht|jƒ¡ dS )z?
        L{LogPublisher.addObserver} adds an observer.
        c                 S   r   r   r   r   r   r   r   r   1   r   z4LogPublisherTests.test_addObserver.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   2   r   c                 S   r   r   r   r   r   r   r   r   3   r   N)r   r   r   ÚaddObserverr   r   r   ©r   r   r    Úo3r   r   r   r   Útest_addObserver-   s   

z"LogPublisherTests.test_addObserverc                 C   s   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   r   r   r   Útest_addObserverNotCallable9   s   z-LogPublisherTests.test_addObserverNotCallablec                 C   sZ   t tdd„ ƒ}t tdd„ ƒ}t tdd„ ƒ}t|||ƒ}| |¡ |  ||ht|jƒ¡ dS )zE
        L{LogPublisher.removeObserver} removes an observer.
        c                 S   r   r   r   r   r   r   r   r   E   r   z7LogPublisherTests.test_removeObserver.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   F   r   c                 S   r   r   r   r   r   r   r   r   G   r   N©r   r   r   ZremoveObserverr   r   r   r#   r   r   r   Útest_removeObserverA   s   
z%LogPublisherTests.test_removeObserverc                 C   sX   t tdd„ ƒ}t tdd„ ƒ}t tdd„ ƒ}t||ƒ}| |¡ |  ||ht|jƒ¡ dS )zd
        L{LogPublisher.removeObserver} removes an observer that is not
        registered.
        c                 S   r   r   r   r   r   r   r   r   R   r   zDLogPublisherTests.test_removeObserverNotRegistered.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   S   r   c                 S   r   r   r   r   r   r   r   r   T   r   Nr*   r#   r   r   r   Ú test_removeObserverNotRegisteredM   s   

z2LogPublisherTests.test_removeObserverNotRegisteredc           	      C   sx   t d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   ÚeventZevents1Zevents2Zevents3r   r    r$   r   r   r   r   Útest_fanOutZ   s   zLogPublisherTests.test_fanOutc                    s¦   t ddd�}tdƒ‰g ‰ ttƒdtddf‡ ‡fdd	„ƒ}g }t|tt|jƒƒ}||ƒ |  |ˆ ¡ d
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.
        r-   r
   r.   úARGH! EVIL DEATH!r4   r   Nc                    s   ˆ  }ˆ   | ¡ |rˆ‚d S r   )r2   )r4   ZshouldRaise©ÚeventsÚ	exceptionr   r   Úobserverx   s
   
ÿz7LogPublisherTests.test_observerRaises.<locals>.observerc                 S   s   g | ]
}d |v r|d  ‘qS )Zlog_failurer   )Ú.0r   r   r   r   Ú
<listcomp>ˆ   s    z9LogPublisherTests.test_observerRaises.<locals>.<listcomp>r   )r1   ÚRuntimeErrorr   r   r   r   r   r2   r3   r   ÚlenZassertIsÚvalue)r   r4   r:   Ú	collectorr   Úerrorsr   r7   r   Útest_observerRaisesn   s   z%LogPublisherTests.test_observerRaisesc                    s^   t ddd�}tdƒ‰ ttƒdtddfdd	„ƒ}G ‡ fd
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.
        r-   r
   r.   r6   r4   r   Nc                 S   s   t dƒ‚)Nz	Sad panda)r=   )r4   r   r   r   r:   —   s   zGLogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.observerc                       s&   e Zd Zdededdf‡ fdd„ZdS )zILogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.GurkLoggerÚargsÚkwargsr   Nc                    s   ˆ ‚r   r   )r   rC   rD   ©r9   r   r   Úfailureœ   s   zQLogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.GurkLogger.failure)Ú__name__Ú
__module__Ú__qualname__r(   rF   r   rE   r   r   Ú
GurkLogger›   s    rJ   )r1   r=   r   r   r   r   r   Úlog)r   r4   r:   rJ   r   r   rE   r   Ú#test_observerRaisesAndLoggerHatesMeŽ   s   z5LogPublisherTests.test_observerRaisesAndLoggerHatesMec                    s–   t ddg d�}i ‰ ttƒdtddf‡ fdd„ƒ}ttƒdtddf‡ fd	d
„ƒ}t||ƒ}||ƒ |  ˆ d ||ff¡ |  ˆ d ||f||ff¡ dS )zA
        Tracing keeps track of forwarding to observers.
        r-   r
   )r/   r0   Ú	log_tracer   r   Nc                    ó*   ˆ   dtttttf  t| d ƒƒ¡ d S )Nr-   rM   ©Ú
setdefaultr   r   r   r   Útupler   ©Ztracesr   r   r   °   ó   ÿz(LogPublisherTests.test_trace.<locals>.o1c                    rN   )Nr
   rM   rO   r   rR   r   r   r    ¶   rS   z(LogPublisherTests.test_trace.<locals>.o2)r1   r   r   r   r   r   )r   r4   r   r    r   r   rR   r   Ú
test_trace¥   s   
 zLogPublisherTests.test_trace)r   N)rG   rH   rI   Ú__doc__r   r!   r%   r)   r+   r,   r5   rB   rL   rT   r   r   r   r   r      s    










 r   N)rU   Útypingr   r   r   r   Zzope.interfacer   Zzope.interface.exceptionsr   Zzope.interface.verifyr   Ztwisted.trialr	   Z_interfacesr   r   Z_loggerr   Z	_observerr   ZTestCaser   r   r   r   r   Ú<module>   s   