o
    b"                     @   s   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 deZG dd de
jZdS )z'
Test cases for L{twisted.logger._io}.
    N)ListOptional)implementer)NamedConstant)unittest   )ILogObserverLogEvent)LoggingFile)LogLevel)Logger)LogPublisherc                	       sP   e Zd ZdZejdfdededee	 ddf fddZ
d	eddfd
dZ  ZS )TestLoggingFilezU
    L{LoggingFile} that is also an observer which captures events and messages.
    Nloggerlevelencodingreturnc                    s"   t  j|||d g | _g | _d S )Nr   r   r   )super__init__eventsmessages)selfr   r   r   	__class__ =/usr/lib/python3/dist-packages/twisted/logger/test/test_io.pyr      s   
zTestLoggingFile.__init__eventc                 C   s,   | j | d|v r| j|d  d S d S )Nlog_io)r   appendr   )r   r   r   r   r   __call__'   s   zTestLoggingFile.__call__)__name__
__module____qualname____doc__r   infor   r   r   strr   r	   r    __classcell__r   r   r   r   r      s    
r   c                   @   s   e Zd ZdZd0ddZd0ddZd0dd	Zd0d
dZd0ddZd0ddZ	d0ddZ
d0ddZd0ddZd0ddZd0ddZd0ddZd0ddZd0ddZd0d d!Zd0d"d#Zd0d$d%Zd0d&d'Zd0d(d)Zd0d*d+Zejdfd,ed-ee defd.d/ZdS )1LoggingFileTestsz#
    Tests for L{LoggingFile}.
    r   Nc                 C   s   t  | _t| jd| _dS )zK
        Create a logger for test L{LoggingFile} instances to use.
        observerN)r   	publisherr   r   )r   r   r   r   setUp2   s   zLoggingFileTests.setUpc                 C   sf   |  t| jjd | | jg}|  t|d |  |d d t d}|  |d d d|  dS )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deprecatedClassr   r   r   r3   9   s   
zLoggingFileTests.test_softspacec                 C   sj   t | j}| tt|dd | tt|dd | tt|dd | tt|ddg | tt|d	d
 dS )z?
        Some L{LoggingFile} attributes are read-only.
        closedTr   utf-8modernewlines
namefooN)r
   r   assertRaisesAttributeErrorsetattrr   fr   r   r   test_readOnlyAttributesH   s   
z(LoggingFileTests.test_readOnlyAttributesc                 C   s~   t | j}| t|j | t|j | t|j | t|j | t|j | t|j	 | t|j
 | t|j dS )z>
        Some L{LoggingFile} methods are unsupported.
        N)r
   r   r@   IOErrorreadnextreadline	readlines
xreadlinesseektelltruncaterC   r   r   r   test_unsupportedMethodsT   s   
z(LoggingFileTests.test_unsupportedMethodsc                 C   s>   t | j}| |jtj t | jtjd}| |jtj dS )z?
        Default level is L{LogLevel.info} if not set.
        r   N)r
   r   r0   r   r   r%   errorrC   r   r   r   
test_levelc   s   
zLoggingFileTests.test_levelc                 C   s<   t | j}| |jt  t | jdd}| |jd dS )zM
        Default encoding is C{sys.getdefaultencoding()} if not set.
        r9   r   N)r
   r   r0   r   sysgetdefaultencodingrC   r   r   r   test_encodingm   s   
zLoggingFileTests.test_encodingc                 C      t | j}| |jd dS )z*
        Reported mode is C{"w"}.
        wN)r
   r   r0   r:   rC   r   r   r   	test_modew      
zLoggingFileTests.test_modec                 C   s   t | j}| |j dS )z7
        The C{newlines} attribute is L{None}.
        N)r
   r   assertIsNoner<   rC   r   r   r   test_newlines~   s   
zLoggingFileTests.test_newlinesc                 C   rW   )z1
        The C{name} attribute is fixed.
        z.<LoggingFile twisted.logger.test.test_io#info>N)r
   r   r0   r>   rC   r   r   r   	test_name   rZ   zLoggingFileTests.test_namec                 C   s2   t | j}|  | |j | t|jd dS )z7
        L{LoggingFile.close} closes the file.
        HelloN)r
   r   close
assertTruer8   r@   
ValueErrorwriterC   r   r   r   
test_close   s   
zLoggingFileTests.test_closec                 C   s   t | j}|  dS )z4
        L{LoggingFile.flush} does nothing.
        N)r
   r   flushrC   r   r   r   
test_flush   s   
zLoggingFileTests.test_flushc                 C   s   t | j}| | d dS )z6
        L{LoggingFile.fileno} returns C{-1}.
        N)r
   r   r0   filenorC   r   r   r   test_fileno   s   
zLoggingFileTests.test_filenoc                 C   s   t | j}| |  dS )z9
        L{LoggingFile.isatty} returns C{False}.
        N)r
   r   assertFalseisattyrC   r   r   r   test_isatty   rZ   zLoggingFileTests.test_isattyc                 C   Z   |   }|d | |jg  |d | |jdg |d | |jg d dS )z,
        Writing buffers correctly.
        r^   z	, world!
Hello, world!zIt's nice to meet you.

Indeed.rm   zIt's nice to meet you. NobservedFilerb   r0   r   rC   r   r   r   test_writeBuffering   s   


z$LoggingFileTests.test_writeBufferingc                 C   *   | j dd}|d | |jdg dS )z,
        Bytes are decoded to text.
        r9   rS   s   Hello, Mr. Sánchez
   Hello, Mr. SánchezNrp   rC   r   r   r   test_writeBytesDecoded      
z'LoggingFileTests.test_writeBytesDecodedc                 C   rs   )z(
        Unicode is unmodified.
        r9   rS   u   Hello, Mr. Sánchez
rt   Nrp   rC   r   r   r   test_writeUnicode   rv   z"LoggingFileTests.test_writeUnicodec                 C   s   |   }|d | t|jd | |jd d tj | j tjd}|d | t|jd | |jd d tj dS )z0
        Log level is emitted properly.
        Hello
r-   r   	log_levelrP   N)rq   rb   r0   r4   r   r   r%   rQ   rC   r   r   r   test_writeLevel   s   

z LoggingFileTests.test_writeLevelc                 C   s>   |   }|d | t|jd | |jd d d dS )z/
        Log format is C{"{message}"}.
        rx   r-   r   
log_formatz{log_io}N)rq   rb   r0   r4   r   rC   r   r   r   test_writeFormat   s   
z!LoggingFileTests.test_writeFormatc                 C   rl   )z6
        C{writelines} does not add newlines.
        )r^   z, ro   )zworld!
rm   )zIt's nice to meet you.

zIndeed.rn   N)rq   
writelinesr0   r   rC   r   r   r   test_writelinesBuffering   s   


z)LoggingFileTests.test_writelinesBufferingc                 C   s>   |   }| td| tddd td | |jdg dS )z;
        L{LoggingFile} can replace L{sys.stdout}.
        stdoutzHello, )endzworld.zHello, world.N)rq   patchrT   printr0   r   rC   r   r   r   
test_print   s
   zLoggingFileTests.test_printr   r   c                    sH   g  t tdtddf fdd}t|d} t|||d  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                    s    d |  d S )Nr   r   )r   loggingFilesr   r   r*     s   z/LoggingFileTests.observedFile.<locals>.observerr)   r   r   )r   r   r	   r   r   r   )r   r   r   r*   logr   r   r   rq     s   
zLoggingFileTests.observedFile)r   N)r!   r"   r#   r$   r,   r3   rE   rO   rR   rV   rY   r\   r]   rc   re   rh   rk   rr   ru   rw   rz   r|   r~   r   r   r%   r   r   r&   r   rq   r   r   r   r   r(   -   s>    





















	
r(   )r$   rT   typingr   r   zope.interfacer   
constantlyr   twisted.trialr   _interfacesr   r	   _ior
   _levelsr   _loggerr   	_observerr   r   TestCaser(   r   r   r   r   <module>   s   