o
    Òó·iË  ã                   @   sº   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„ deƒZG dd„ deƒZG dd„ dƒZdS )z)
Test cases for L{twisted.logger._file}.
é    )ÚStringIO)ÚTracebackType)ÚIOÚAnyÚAnyStrÚOptionalÚTypeÚcast)ÚBrokenMethodImplementation)ÚverifyObject)ÚFailure)ÚTestCaseé   )ÚFileLogObserverÚtextFileLogObserver)ÚILogObserverc                   @   s\   e Zd ZdZddd„Zddd„Zdee d	eddfd
d„Z	ddd„Z
ddd„Zddd„ZdS )ÚFileLogObserverTestsz'
    Tests for L{FileLogObserver}.
    ÚreturnNc                 C   sˆ   t ƒ �7}t|dd„ ƒ}ztt|ƒ W n ty) } z|  |¡ W Y d}~nd}~ww W d  ƒ dS W d  ƒ dS 1 s=w   Y  dS )z;
        L{FileLogObserver} is an L{ILogObserver}.
        c                 S   ó   t | ƒS ©N©Ústr©Úe© r   úcC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/logger/test/test_file.pyÚ<lambda>   ó    z5FileLogObserverTests.test_interface.<locals>.<lambda>N)r   r   r   r   r
   Zfail)ÚselfÚ
fileHandleÚobserverr   r   r   r   Útest_interface   s   €ÿÿý"ûz#FileLogObserverTests.test_interfacec                 C   s`   t ƒ �#}t|dd„ ƒ}tdd�}||ƒ |  | ¡ t|ƒ¡ W d  ƒ dS 1 s)w   Y  dS )zV
        L{FileLogObserver} writes to the given file when it observes events.
        c                 S   r   r   r   r   r   r   r   r   *   r   z9FileLogObserverTests.test_observeWrites.<locals>.<lambda>é   ©ÚxN)r   r   ÚdictÚassertEqualÚgetvaluer   ©r   r   r    Úeventr   r   r   Útest_observeWrites%   s   
"üz'FileLogObserverTests.test_observeWritesÚwhatÚcountc                    sh   t ƒ �'}tttt |ƒ‡ fdd„ƒ}tdd�}||ƒ |  |j|¡ W d  ƒ dS 1 s-w   Y  dS )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   ˆ S r   r   r   ©r+   r   r   r   8   s    z:FileLogObserverTests._test_observeWrites.<locals>.<lambda>r"   r#   N)Ú	DummyFiler   r	   r   r   r%   r&   Úwrites)r   r+   r,   r   r    r)   r   r-   r   Ú_test_observeWrites/   s   
"üz(FileLogObserverTests._test_observeWritesc                 C   s   |   dd¡ dS )z‰
        L{FileLogObserver} does not write to the given file when it observes
        events and C{formatEvent} returns L{None}.
        Nr   ©r0   ©r   r   r   r   Útest_observeWritesNone=   ó   z+FileLogObserverTests.test_observeWritesNonec                 C   s   |   dd¡ dS )z‡
        L{FileLogObserver} does not write to the given file when it observes
        events and C{formatEvent} returns C{""}.
        Ú r   Nr1   r2   r   r   r   Útest_observeWritesEmptyD   r4   z,FileLogObserverTests.test_observeWritesEmptyc                 C   sd   t ƒ �%}tttt |ƒdd„ ƒ}tdd�}||ƒ |  |jd¡ W d  ƒ dS 1 s+w   Y  dS )zl
        L{FileLogObserver} calles C{flush()} on the output file when it
        observes an event.
        c                 S   r   r   r   r   r   r   r   r   Q   r   z:FileLogObserverTests.test_observeFlushes.<locals>.<lambda>r"   r#   N)r.   r   r	   r   r   r%   r&   Úflushesr(   r   r   r   Útest_observeFlushesK   s   
"üz(FileLogObserverTests.test_observeFlushes©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r*   r   r   Úintr0   r3   r6   r8   r   r   r   r   r      s    




r   c                   @   sB   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S )ÚTextFileLogObserverTestsz+
    Tests for L{textFileLogObserver}.
    r   Nc                 C   s@   t ƒ �}t|ƒ}|  |t¡ W d  ƒ dS 1 sw   Y  dS )zF
        L{textFileLogObserver} returns a L{FileLogObserver}.
        N)r   r   ZassertIsInstancer   ©r   r   r    r   r   r   Útest_returnsFileLogObserver\   s   "þz4TextFileLogObserverTests.test_returnsFileLogObserverc                 C   sB   t ƒ �}t|ƒ}|  |j|¡ W d  ƒ dS 1 sw   Y  dS )úF
        Returned L{FileLogObserver} has the correct outFile.
        N)r   r   ZassertIsZ_outFiler@   r   r   r   Útest_outFiled   s   "þz%TextFileLogObserverTests.test_outFilec                 C   sX   t ƒ �}t|dd�}|tddd�ƒ |  | ¡ d¡ W d  ƒ dS 1 s%w   Y  dS )rB   z%f)Z
timeFormatZXYZZYgš™™™™mû@)Z
log_formatZlog_timez600000 [-#-] XYZZY
N)r   r   r%   r&   r'   r@   r   r   r   Útest_timeFormatl   s
   "ýz(TextFileLogObserverTests.test_timeFormatc              	   C   s–   t ƒ �>}t|ƒ}zdd  W n ty   tƒ }Y nw t|d�}||ƒ | ¡ }| j| d¡d  d¡t	|ƒd� W d  ƒ dS 1 sDw   Y  dS )z…
        If the C{"log_failure"} key exists in an event, the observer appends
        the failure's traceback to the output.
        r"   r   ©Zlog_failureÚ
z	Traceback )ÚmsgN)
r   r   ÚZeroDivisionErrorr   r%   r'   Ú
assertTrueÚsplitÚ
startswithÚrepr)r   r   r    Zfailurer)   Úoutputr   r   r   Útest_observeFailureu   s   
ÿ
ÿ"õz,TextFileLogObserverTests.test_observeFailurec                 C   s`   t ƒ �#}t|ƒ}ttƒ d�}||ƒ | ¡ }d}|  ||¡ W d  ƒ dS 1 s)w   Y  dS )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.
        rE   z'(UNABLE TO OBTAIN TRACEBACK FROM EVENT)N)r   r   r%   Úobjectr'   ZassertIn)r   r   r    r)   rM   Úexpectedr   r   r   Ú+test_observeFailureThatRaisesInGetTraceback‰   s   "úzDTextFileLogObserverTests.test_observeFailureThatRaisesInGetTracebackr9   )	r:   r;   r<   r=   rA   rC   rD   rN   rQ   r   r   r   r   r?   W   s    



	r?   c                	   @   sn   e Zd ZdZddd„Zdeddfdd„Zdd	d
„Zddd„Zde	e
e  de	e de	e de	e fdd„ZdS )r.   z.
    File that counts writes and flushes.
    r   Nc                 C   s   d| _ d| _d S )Nr   )r/   r7   r2   r   r   r   Ú__init__�   s   
zDummyFile.__init__Údatac                 C   ó   |  j d7  _ dS )z8
        Write data.

        @param data: data
        r"   N)r/   )r   rS   r   r   r   Úwrite¡   s   zDummyFile.writec                 C   rT   )z 
        Flush buffers.
        r"   N)r7   r2   r   r   r   Úflush©   s   zDummyFile.flushc                 C   s   | S r   r   r2   r   r   r   Ú	__enter__¯   s   zDummyFile.__enter__Úexc_typeÚ	exc_valueÚ	tracebackc                 C   s   d S r   r   )r   rX   rY   rZ   r   r   r   Ú__exit__²   s   zDummyFile.__exit__r9   )r   r.   )r:   r;   r<   r=   rR   r   rU   rV   rW   r   r   ÚBaseExceptionr   Úboolr[   r   r   r   r   r.   ˜   s    



þýüûr.   N)r=   Úior   Útypesr   Útypingr   r   r   r   r   r	   Zzope.interface.exceptionsr
   Zzope.interface.verifyr   Ztwisted.python.failurer   Ztwisted.trial.unittestr   Ú_filer   r   Z_interfacesr   r   r?   r.   r   r   r   r   Ú<module>   s    BA