Ë
    ojœ"  ã                   óÚ   — d Z ddlZddlmZ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 ddlmZ ddlmZ  ee«       G d„ de«      «       Z G d„ de
j.                  «      Zy)z'
Test cases for L{twisted.logger._io}.
é    N)ÚListÚOptional)Úimplementer)ÚNamedConstant)Úunittesté   )ÚILogObserverÚLogEvent)ÚLoggingFile)ÚLogLevel)ÚLogger)ÚLogPublisherc            	       ód   ‡ — e Zd ZdZej
                  dfdededee	   ddfˆ fd„Z
deddfd	„Zˆ xZS )
ÚTestLoggingFilezU
    L{LoggingFile} that is also an observer which captures events and messages.
    NÚloggerÚlevelÚencodingÚreturnc                 óF   •— t         ‰| �  |||¬«       g | _        g | _        y )N©r   r   r   )ÚsuperÚ__init__ÚeventsÚmessages)Úselfr   r   r   Ú	__class__s       €ú=/usr/lib/python3/dist-packages/twisted/logger/test/test_io.pyr   zTestLoggingFile.__init__   s'   ø€ ô 	‰Ñ ¨e¸hÐÔGØ&(ˆŒØ#%ˆ�ó    Úeventc                 ó€   — | j                   j                  |«       d|v r| j                  j                  |d   «       y y )NÚlog_io)r   Úappendr   )r   r   s     r   Ú__call__zTestLoggingFile.__call__'   s7   € Ø�‰×Ñ˜5Ô!Ø�uÑØ�M‰M× Ñ   x¡Õ1ð r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úinfor   r   r   Ústrr   r
   r#   Ú__classcell__)r   s   @r   r   r      sV   ø„ ñð  (Ÿ}™}Ø"&ñ	&àð&ð ð&ð ˜3‘-ð	&ð
 
õ&ð2˜hð 2¨4÷ 2r   r   c                   óä   — 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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ej2                  dfdedee   defd„Zy)ÚLoggingFileTestsz#
    Tests for L{LoggingFile}.
    r   Nc                 óX   — t        «       | _        t        | j                  ¬«      | _        y)zK
        Create a logger for test L{LoggingFile} instances to use.
        ©ÚobserverN)r   Ú	publisherr   r   )r   s    r   ÚsetUpzLoggingFileTests.setUp2   s   € ô &›ˆŒÜ d§n¡nÔ5ˆ�r   c                 óB  — | j                  t        | j                  «      j                  d«       | j	                  | j
                  g«      }| j                  t        |«      d«       | j                  |d   d   t        «       d}| j                  |d   d   d|z  «       y)z0
        L{LoggingFile.softspace} is 0.
        r   é   Úcategoryz(twisted.logger._io.LoggingFile.softspaceÚmessagez#%s was deprecated in Twisted 21.2.0N)ÚassertEqualr   r   Ú	softspaceÚflushWarningsÚtest_softspaceÚlenÚDeprecationWarning)r   ÚwarningsShownÚdeprecatedClasss      r   r9   zLoggingFileTests.test_softspace9   s”   € ð 	×Ñœ T§[¡[Ó1×;Ñ;¸QÔ?à×*Ñ*¨D×,?Ñ,?Ð+@ÓAˆØ×Ñœ˜]Ó+¨QÔ/Ø×Ñ˜ qÑ)¨*Ñ5Ô7IÔJØDˆØ×ÑØ˜!Ñ˜YÑ'Ø1°_ÑEõ	
r   c                 óR  — t        | j                  «      }| j                  t        t        |dd«       | j                  t        t        |dd«       | j                  t        t        |dd«       | j                  t        t        |ddg«       | j                  t        t        |d	d
«       y)z?
        Some L{LoggingFile} attributes are read-only.
        ÚclosedTr   úutf-8ÚmodeÚrÚnewlinesú
ÚnameÚfooN)r   r   ÚassertRaisesÚAttributeErrorÚsetattr©r   Úfs     r   Útest_readOnlyAttributesz(LoggingFileTests.test_readOnlyAttributesH   s‚   € ô ˜Ÿ™Ó$ˆà×Ñœ.¬'°1°hÀÔEØ×Ñœ.¬'°1°jÀ'ÔJØ×Ñœ.¬'°1°f¸cÔBØ×Ñœ.¬'°1°jÀ4À&ÔIØ×Ñœ.¬'°1°f¸eÕDr   c                 ó.  — t        | j                  «      }| j                  t        |j                  «       | j                  t        |j
                  «       | j                  t        |j                  «       | j                  t        |j                  «       | j                  t        |j                  «       | j                  t        |j                  «       | j                  t        |j                  «       | j                  t        |j                  «       y)z>
        Some L{LoggingFile} methods are unsupported.
        N)r   r   rG   ÚIOErrorÚreadÚnextÚreadlineÚ	readlinesÚ
xreadlinesÚseekÚtellÚtruncaterJ   s     r   Útest_unsupportedMethodsz(LoggingFileTests.test_unsupportedMethodsT   s²   € ô ˜Ÿ™Ó$ˆà×Ñœ' 1§6¡6Ô*Ø×Ñœ' 1§6¡6Ô*Ø×Ñœ' 1§:¡:Ô.Ø×Ñœ' 1§;¡;Ô/Ø×Ñœ' 1§<¡<Ô0Ø×Ñœ' 1§6¡6Ô*Ø×Ñœ' 1§6¡6Ô*Ø×Ñœ' 1§:¡:Õ.r   c                 ó   — t        | j                  «      }| j                  |j                  t        j
                  «       t        | j                  t        j                  ¬«      }| j                  |j                  t        j                  «       y)z?
        Default level is L{LogLevel.info} if not set.
        ©r   N)r   r   r6   r   r   r(   ÚerrorrJ   s     r   Ú
test_levelzLoggingFileTests.test_levelc   sV   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™¤(§-¡-Ô0ä˜Ÿ™¬8¯>©>Ô:ˆØ×Ñ˜Ÿ™¤(§.¡.Õ1r   c                 óð   — t        | j                  «      }| j                  |j                  t	        j
                  «       «       t        | j                  d¬«      }| j                  |j                  d«       y)zM
        Default encoding is C{sys.getdefaultencoding()} if not set.
        r@   ©r   N)r   r   r6   r   ÚsysÚgetdefaultencodingrJ   s     r   Útest_encodingzLoggingFileTests.test_encodingm   sS   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™¤S×%;Ñ%;Ó%=Ô>ä˜Ÿ™¨gÔ6ˆØ×Ñ˜Ÿ™ WÕ-r   c                 óf   — t        | j                  «      }| j                  |j                  d«       y)z*
        Reported mode is C{"w"}.
        ÚwN)r   r   r6   rA   rJ   s     r   Ú	test_modezLoggingFileTests.test_modew   s&   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™ Õ%r   c                 ód   — t        | j                  «      }| j                  |j                  «       y)z7
        The C{newlines} attribute is L{None}.
        N)r   r   ÚassertIsNonerC   rJ   s     r   Útest_newlineszLoggingFileTests.test_newlines~   s$   € ô ˜Ÿ™Ó$ˆØ×Ñ˜!Ÿ*™*Õ%r   c                 óf   — t        | j                  «      }| j                  |j                  d«       y)z1
        The C{name} attribute is fixed.
        z.<LoggingFile twisted.logger.test.test_io#info>N)r   r   r6   rE   rJ   s     r   Ú	test_namezLoggingFileTests.test_name…   s'   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™Ð!QÕRr   c                 óÆ   — t        | j                  «      }|j                  «        | j                  |j                  «       | j                  t        |j                  d«       y)z7
        L{LoggingFile.close} closes the file.
        ÚHelloN)r   r   ÚcloseÚ
assertTruer?   rG   Ú
ValueErrorÚwriterJ   s     r   Ú
test_closezLoggingFileTests.test_closeŒ   sA   € ô ˜Ÿ™Ó$ˆØ	�‰Œ	à�‰˜Ÿ™Ô!Ø×Ñœ* a§g¡g¨wÕ7r   c                 óN   — t        | j                  «      }|j                  «        y)z4
        L{LoggingFile.flush} does nothing.
        N)r   r   ÚflushrJ   s     r   Ú
test_flushzLoggingFileTests.test_flush–   s   € ô ˜Ÿ™Ó$ˆØ	�‰�	r   c                 ón   — t        | j                  «      }| j                  |j                  «       d«       y)z6
        L{LoggingFile.fileno} returns C{-1}.
        éÿÿÿÿN)r   r   r6   ÚfilenorJ   s     r   Útest_filenozLoggingFileTests.test_fileno�   s(   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™› RÕ(r   c                 ól   — t        | j                  «      }| j                  |j                  «       «       y)z9
        L{LoggingFile.isatty} returns C{False}.
        N)r   r   ÚassertFalseÚisattyrJ   s     r   Útest_isattyzLoggingFileTests.test_isatty¤   s&   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™›Õ$r   c                 ó8  — | j                  «       }|j                  d«       | j                  |j                  g «       |j                  d«       | j                  |j                  dg«       |j                  d«       | j                  |j                  g d¢«       y)z,
        Writing buffers correctly.
        rj   z	, world!
úHello, world!zIt's nice to meet you.

Indeed.©r|   zIt's nice to meet you.Ú N©ÚobservedFilern   r6   r   rJ   s     r   Útest_writeBufferingz$LoggingFileTests.test_writeBuffering«   s|   € ð ×ÑÓˆØ	�‰�ÔØ×Ñ˜Ÿ™ RÔ(Ø	�‰�ÔØ×Ñ˜Ÿ™ oÐ%6Ô7Ø	�‰Ð3Ô4Ø×ÑØ�J‰Jòõ	
r   c                 ó„   — | j                  d¬«      }|j                  d«       | j                  |j                  dg«       y)z,
        Bytes are decoded to text.
        r@   r]   s   Hello, Mr. SÃ¡nchez
õ   Hello, Mr. SÃ¡nchezNr   rJ   s     r   Útest_writeBytesDecodedz'LoggingFileTests.test_writeBytesDecoded¾   s<   € ð ×Ñ wÐÓ/ˆØ	�‰Ð.Ô/Ø×Ñ˜Ÿ™Ð&=Ð%>Õ?r   c                 ó„   — | j                  d¬«      }|j                  d«       | j                  |j                  dg«       y)z(
        Unicode is unmodified.
        r@   r]   u   Hello, Mr. SÃ¡nchez
rƒ   Nr   rJ   s     r   Útest_writeUnicodez"LoggingFileTests.test_writeUnicodeÆ   s<   € ð ×Ñ wÐÓ/ˆØ	�‰Ð)Ô*Ø×Ñ˜Ÿ™Ð&=Ð%>Õ?r   c                 óü  — | j                  «       }|j                  d«       | j                  t        |j                  «      d«       | j                  |j                  d   d   t
        j                  «       | j                  t
        j                  ¬«      }|j                  d«       | j                  t        |j                  «      d«       | j                  |j                  d   d   t
        j                  «       y)z0
        Log level is emitted properly.
        úHello
r3   r   Ú	log_levelrY   N)r€   rn   r6   r:   r   r   r(   rZ   rJ   s     r   Útest_writeLevelz LoggingFileTests.test_writeLevelÎ   s³   € ð ×ÑÓˆØ	�‰�	ÔØ×Ñœ˜QŸX™X›¨Ô*Ø×Ñ˜Ÿ™ !™ [Ñ1´8·=±=ÔAà×Ñ¤H§N¡NÐÓ3ˆØ	�‰�	ÔØ×Ñœ˜QŸX™X›¨Ô*Ø×Ñ˜Ÿ™ !™ [Ñ1´8·>±>ÕBr   c                 óÔ   — | j                  «       }|j                  d«       | j                  t        |j                  «      d«       | j                  |j                  d   d   d«       y)z/
        Log format is C{"{message}"}.
        rˆ   r3   r   Ú
log_formatz{log_io}N)r€   rn   r6   r:   r   rJ   s     r   Útest_writeFormatz!LoggingFileTests.test_writeFormatÜ   sS   € ð ×ÑÓˆØ	�‰�	ÔØ×Ñœ˜QŸX™X›¨Ô*Ø×Ñ˜Ÿ™ !™ \Ñ2°JÕ?r   c                 ó8  — | j                  «       }|j                  d«       | j                  |j                  g «       |j                  d«       | j                  |j                  dg«       |j                  d«       | j                  |j                  g d¢«       y)z6
        C{writelines} does not add newlines.
        )rj   z, r~   )zworld!
r|   )zIt's nice to meet you.

zIndeed.r}   N)r€   Ú
writelinesr6   r   rJ   s     r   Útest_writelinesBufferingz)LoggingFileTests.test_writelinesBufferingå   s}   € ð
 ×ÑÓˆØ	�‰Ð(Ô)Ø×Ñ˜Ÿ™ RÔ(Ø	�‰�]Ô#Ø×Ñ˜Ÿ™ oÐ%6Ô7Ø	�‰Ð>Ô?Ø×ÑØ�J‰Jòõ	
r   c                 ó¼   — | j                  «       }| j                  t        d|«       t        dd¬«       t        d«       | j	                  |j
                  dg«       y)z;
        L{LoggingFile} can replace L{sys.stdout}.
        ÚstdoutzHello,ú )Úendzworld.zHello, world.N)r€   Úpatchr^   Úprintr6   r   rJ   s     r   Ú
test_printzLoggingFileTests.test_printù   sJ   € ð ×ÑÓˆØ�
‰
”3˜ !Ô$äˆh˜CÕ ÜˆhŒà×Ñ˜Ÿ™ oÐ%6Õ7r   r   r   c                 ó¤   ‡— g Št        t        «      dt        ddfˆfd„«       }t        |¬«      }‰j	                  t        |||¬«      «       ‰d   S )a¤  
        Construct a L{LoggingFile} with a built-in observer.

        @param level: C{level} argument to L{LoggingFile}
        @param encoding: C{encoding} argument to L{LoggingFile}

        @return: a L{TestLoggingFile} with an observer that appends received
            events into the file's C{events} attribute (a L{list}) and
            event messages into the file's C{messages} attribute (a L{list}).
        r   r   Nc                 ó   •—  ‰d   | «       y )Nr   © )r   ÚloggingFiless    €r   r/   z/LoggingFileTests.observedFile.<locals>.observer  s   ø€ àˆL˜‰O˜EÕ"r   r.   r   r   )r   r	   r
   r   r"   r   )r   r   r   r/   Úlogr›   s        @r   r€   zLoggingFileTests.observedFile  s\   ø€ ð& /1ˆä	”\Ó	"ð	#œHð 	#¨ô 	#ó 
#ð	#ô ˜hÔ'ˆØ×ÑœO°3¸eÈhÔWÔXà˜A‰Ðr   )r   N)r$   r%   r&   r'   r1   r9   rL   rW   r[   r`   rc   rf   rh   ro   rr   rv   rz   r�   r„   r†   rŠ   r�   r�   r—   r   r(   r   r   r)   r   r€   rš   r   r   r,   r,   -   s¢   „ ñó6ó
ó
Eó/ó2ó.ó&ó&óSó8óó)ó%ó
ó&@ó@óCó@ó
ó(
8ð  (Ÿ}™}Ø"&ñàðð ˜3‘-ðð 
ô	r   r,   )r'   r^   Útypingr   r   Úzope.interfacer   Ú
constantlyr   Útwisted.trialr   Ú_interfacesr	   r
   Ú_ior   Ú_levelsr   Ú_loggerr   Ú	_observerr   r   ÚTestCaser,   rš   r   r   ú<module>r§      s^   ðñó ß !å &å $å "ß 0Ý Ý Ý Ý $ñ ˆ\Óô2�kó 2ó ð2ô*t�x×(Ñ(õ tr   