
    Vh                         d Z ddlmZ ddlmZ ddlmZmZ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  G d de      Z G d de      Z G d d      Zy)z)
Test cases for L{twisted.logger._file}.
    )StringIO)TracebackType)IOAnyAnyStrOptionalTypecast)BrokenMethodImplementation)verifyObject)Failure)TestCase   )FileLogObservertextFileLogObserver)ILogObserverc                   R    e Zd ZdZddZddZdee   deddfdZ	dd	Z
dd
ZddZy)FileLogObserverTestsz'
    Tests for L{FileLogObserver}.
    returnNc                     t               5 }t        |d       }	 t        t        |       ddd       y# t        $ r}| j                  |       Y d}~(d}~ww xY w# 1 sw Y   yxY w)z;
        L{FileLogObserver} is an L{ILogObserver}.
        c                     t        |       S Nstres    M/home/dcms/DCMS/lib/python3.12/site-packages/twisted/logger/test/test_file.py<lambda>z5FileLogObserverTests.test_interface.<locals>.<lambda>   
    SV     N)r   r   r   r   r   fail)self
fileHandleobserverr   s       r   test_interfacez#FileLogObserverTests.test_interface   s`     Z 	:&z3CDH\84	 	 . 		!		 	s+   A3	AAAAAA#c                     t               5 }t        |d       }t        d      } ||       | j                  |j	                         t        |             ddd       y# 1 sw Y   yxY w)zV
        L{FileLogObserver} writes to the given file when it observes events.
        c                     t        |       S r   r   r   s    r   r   z9FileLogObserverTests.test_observeWrites.<locals>.<lambda>*   r   r       xN)r   r   dictassertEqualgetvaluer   r"   r#   r$   events       r   test_observeWritesz'FileLogObserverTests.test_observeWrites%   s^     Z 	@:&z3CDH1IEUOZ002CJ?		@ 	@ 	@s   AAA(whatcountc                     t               5 }t        t        t        t           |      fd      }t        d      } ||       | j                  |j                  |       ddd       y# 1 sw Y   yxY w)z
        Verify that observer performs an expected number of writes when the
        formatter returns a given value.

        @param what: the value for the formatter to return.
        @param count: the expected number of writes.
        c                     S r    )r   r1   s    r   r   z:FileLogObserverTests._test_observeWrites.<locals>.<lambda>8   s    D r    r(   r)   N)	DummyFiler   r
   r   r   r+   r,   writes)r"   r1   r2   r#   r$   r/   s    `    r   _test_observeWritesz(FileLogObserverTests._test_observeWrites/   s^     [ 	7J&tBsGZ'@.QH1IEUOZ..6		7 	7 	7s   AA**A3c                 (    | j                  dd       y)z
        L{FileLogObserver} does not write to the given file when it observes
        events and C{formatEvent} returns L{None}.
        Nr   r8   r"   s    r   test_observeWritesNonez+FileLogObserverTests.test_observeWritesNone=   s    
 	  q)r    c                 (    | j                  dd       y)z
        L{FileLogObserver} does not write to the given file when it observes
        events and C{formatEvent} returns C{""}.
         r   Nr:   r;   s    r   test_observeWritesEmptyz,FileLogObserverTests.test_observeWritesEmptyD   s    
 	  Q'r    c                     t               5 }t        t        t        t           |      d       }t        d      } ||       | j                  |j                  d       ddd       y# 1 sw Y   yxY w)zl
        L{FileLogObserver} calles C{flush()} on the output file when it
        observes an event.
        c                     t        |       S r   r   r   s    r   r   z:FileLogObserverTests.test_observeFlushes.<locals>.<lambda>Q   s    CPQF r    r(   r)   N)r6   r   r
   r   r   r+   r,   flushesr.   s       r   test_observeFlushesz(FileLogObserverTests.test_observeFlushesK   s^    
 [ 	4J&tBsGZ'@BRSH1IEUOZ//3		4 	4 	4s   AA''A0r   N)__name__
__module____qualname____doc__r%   r0   r   r   intr8   r<   r?   rC   r5   r    r   r   r      s?    	@7 7c 7d 7*(	4r    r   c                   8    e Zd ZdZddZddZddZddZddZy)	TextFileLogObserverTestsz+
    Tests for L{textFileLogObserver}.
    Nc                     t               5 }t        |      }| j                  |t               ddd       y# 1 sw Y   yxY w)zF
        L{textFileLogObserver} returns a L{FileLogObserver}.
        N)r   r   assertIsInstancer   r"   r#   r$   s      r   test_returnsFileLogObserverz4TextFileLogObserverTests.test_returnsFileLogObserver\   s:     Z 	=:*:6H!!(O<	= 	= 	=s   "6?c                     t               5 }t        |      }| j                  |j                  |       ddd       y# 1 sw Y   yxY w)F
        Returned L{FileLogObserver} has the correct outFile.
        N)r   r   assertIs_outFilerN   s      r   test_outFilez%TextFileLogObserverTests.test_outFiled   s>     Z 	9:*:6HMM(++Z8	9 	9 	9s	   (<Ac                     t               5 }t        |d      } |t        dd             | j                  |j	                         d       ddd       y# 1 sw Y   yxY w)rQ   z%f)
timeFormatXYZZYgm@)
log_formatlog_timez600000 [-#-] XYZZY
N)r   r   r+   r,   r-   rN   s      r   test_timeFormatz(TextFileLogObserverTests.test_timeFormatl   sY     Z 	L:*:$GHTWx@AZ0024JK	L 	L 	Ls   AAAc                 X   t               5 }t        |      }	 ddz   t	              } ||       |j                         }| j                  |j                  d      d   j                  d      t        |             ddd       y# t        $ r t               }Y w xY w# 1 sw Y   yxY w)z
        If the C{"log_failure"} key exists in an event, the observer appends
        the failure's traceback to the output.
        r(   r   log_failure
z	Traceback )msgN)
r   r   ZeroDivisionErrorr   r+   r-   
assertTruesplit
startswithrepr)r"   r#   r$   failurer/   outputs         r   test_observeFailurez,TextFileLogObserverTests.test_observeFailureu   s    
 Z 	:*:6H$A W-EUO((*FOOT"1%00@d6l  	 	
 % $!)$	 	s.   B BA!B BB BB  B)c                     t               5 }t        |      }t        t                     } ||       |j	                         }d}| j                  ||       ddd       y# 1 sw Y   yxY w)z
        If the C{"log_failure"} key exists in an event, and contains an object
        that raises when you call its C{getTraceback()}, then the observer
        appends a message noting the problem, instead of raising.
        r\   z'(UNABLE TO OBTAIN TRACEBACK FROM EVENT)N)r   r   r+   objectr-   assertIn)r"   r#   r$   r/   rf   expecteds         r   +test_observeFailureThatRaisesInGetTracebackzDTextFileLogObserverTests.test_observeFailureThatRaisesInGetTraceback   s^     Z 	,:*:6HVX.EUO((*F@HMM(F+	, 	, 	,s   AA  A)rD   )	rE   rF   rG   rH   rO   rT   rZ   rg   rl   r5   r    r   rK   rK   W   s!    =9L(,r    rK   c            	       n    e Zd ZdZddZdeddfdZddZddZd	e	e
e      d
e	e   de	e   de	e   fdZy)r6   z.
    File that counts writes and flushes.
    r   Nc                      d| _         d| _        y )Nr   )r7   rB   r;   s    r   __init__zDummyFile.__init__   s    r    datac                 .    | xj                   dz  c_         y)z8
        Write data.

        @param data: data
        r(   N)r7   )r"   rp   s     r   writezDummyFile.write   s     	qr    c                 .    | xj                   dz  c_         y)z 
        Flush buffers.
        r(   N)rB   r;   s    r   flushzDummyFile.flush   s     	r    c                     | S r   r5   r;   s    r   	__enter__zDummyFile.__enter__   s    r    exc_type	exc_value	tracebackc                      y r   r5   )r"   rw   rx   ry   s       r   __exit__zDummyFile.__exit__   s     	r    rD   )r   r6   )rE   rF   rG   rH   ro   r   rr   rt   rv   r   r	   BaseExceptionr   boolr{   r5   r    r   r6   r6      sl    & T 4./ M* M*	
 
$r    r6   N)rH   ior   typesr   typingr   r   r   r   r	   r
   zope.interface.exceptionsr   zope.interface.verifyr   twisted.python.failurer   twisted.trial.unittestr   _filer   r   _interfacesr   r   rK   r6   r5   r    r   <module>r      sN      8 8 @ . * + 8 &?48 ?4D>,x >,B   r    