Ë
    ojË  ã                   óÌ   — 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    ú?/usr/lib/python3/dist-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ð 	˜:Ü& zÑ3CÓDˆHðÜœ\¨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ð 	@˜:Ü& zÑ3CÓDˆHÜ˜1”IˆEÙ�UŒOØ×Ñ˜Z×0Ñ0Ó2´C¸³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^   ø€ ô ‹[ð 	7˜JÜ&¤t¬B¬s©G°ZÓ'@Ã.ÓQˆHÜ˜1”IˆEÙ�UŒOØ×Ñ˜Z×.Ñ.°Ô6÷		7÷ 	7ñ 	7ús   Œ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   € ÌCÐPQËF€ r    r(   r)   N)r6   r   r
   r   r   r+   r,   Úflushesr.   s       r   Útest_observeFlushesz(FileLogObserverTests.test_observeFlushesK   s^   € ô
 ‹[ð 	4˜JÜ&¤t¬B¬s©G°ZÓ'@ÑBRÓSˆHÜ˜1”IˆEÙ�UŒOØ×Ñ˜Z×/Ñ/°Ô3÷		4÷ 	4ñ 	4ús   ‹AA'Á'A0©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r0   r   r   Úintr8   r<   r?   rC   r5   r    r   r   r      s?   „ ñó	ó@ð7¨°©ð 7¸cð 7Àdó 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ð 	=˜:Ü*¨:Ó6ˆHØ×!Ñ! (¬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˜:Ü*¨:Ó6ˆHØ�M‰M˜(×+Ñ+¨ZÔ8÷	9÷ 	9ñ 	9ús	   ‹(<¼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ÚXYZZYgš™™™™mû@)Ú
log_formatÚlog_timez600000 [-#-] XYZZY
N)r   r   r+   r,   r-   rN   s      r   Útest_timeFormatz(TextFileLogObserverTests.test_timeFormatl   sY   € ô ‹Zð 	L˜:Ü*¨:À$ÔGˆHÙ”T W°xÔ@ÔAØ×Ñ˜Z×0Ñ0Ó2Ð4JÔ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ð 	˜:Ü*¨:Ó6ˆHð$Ø�A’ô  WÔ-ˆEÙ�UŒOØ×(Ñ(Ó*ˆFØ�O‰OØ—‘˜TÓ" 1Ñ%×0Ñ0°Ó@ÄdÈ6Ãlð ô ÷	ð 	øô
 %ò $Ü!›)’ð$ú÷	ð 	ú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ð 	,˜:Ü*¨:Ó6ˆHÜ¤V£XÔ.ˆEÙ�UŒOØ×(Ñ(Ó*ˆFØ@ˆHØ�M‰M˜( 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Ý &ô?4˜8ô ?4ôD>,˜xô >,÷B ò  r    