
    Yf"                         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dS )z'
Test cases for L{twisted.logger._io}.
    N)ListOptional)implementer)NamedConstant)unittest   )ILogObserverLogEvent)LoggingFile)LogLevel)Logger)LogPublisherc            	       `     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                 l    t                                          |||           g | _        g | _        d S )Nr   r   r   )super__init__eventsmessages)selfr   r   r   	__class__s       M/var/www/html/env/lib/python3.11/site-packages/twisted/logger/test/test_io.pyr   zTestLoggingFile.__init__   s6     	ehGGG&(#%    eventc                     | j                             |           d|v r"| j                            |d                    d S d S )Nlog_io)r   appendr   )r   r   s     r   __call__zTestLoggingFile.__call__'   sK    5!!!uM  x11111 r   )__name__
__module____qualname____doc__r   infor   r   r   strr   r
   r#   __classcell__)r   s   @r   r   r      s           (}"&	& && & 3-	&
 
& & & & & &2h 24 2 2 2 2 2 2 2 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j        dfdedee         defdZdS )LoggingFileTestsz#
    Tests for L{LoggingFile}.
    r   Nc                 `    t                      | _        t          | j                  | _        dS )zK
        Create a logger for test L{LoggingFile} instances to use.
        observerN)r   	publisherr   r   )r   s    r   setUpzLoggingFileTests.setUp2   s'     &dn555r   c                 x   |                      t          | j                  j        d           |                     | j        g          }|                      t          |          d           |                      |d         d         t                     d}|                      |d         d         d|z             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deprecatedClasss      r   r9   zLoggingFileTests.test_softspace9   s     	T[11;Q???**D,?+@AA]++Q///q)*57IJJJD!Y'1_E	
 	
 	
 	
 	
r   c                    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   fs     r   test_readOnlyAttributesz(LoggingFileTests.test_readOnlyAttributesH   s     $$.'1hEEE.'1j'JJJ.'1fcBBB.'1j4&III.'1feDDDDDr   c                 .   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   rG   IOErrorreadnextreadline	readlines
xreadlinesseektelltruncaterJ   s     r   test_unsupportedMethodsz(LoggingFileTests.test_unsupportedMethodsT   s     $$'16***'16***'1:...'1;///'1<000'16***'16***'1:.....r   c                    t          | j                  }|                     |j        t          j                   t          | j        t          j                  }|                     |j        t          j                   dS )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   sc     $$(-0008>:::(.11111r   c                     t          | j                  }|                     |j        t	          j                               t          | j        d          }|                     |j        d           dS )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   sf     $$S%;%=%=>>>g666W-----r   c                 d    t          | j                  }|                     |j        d           dS )z*
        Reported mode is C{"w"}.
        wN)r   r   r6   rA   rJ   s     r   	test_modezLoggingFileTests.test_modew   s1     $$%%%%%r   c                 b    t          | j                  }|                     |j                   dS )z7
        The C{newlines} attribute is L{None}.
        N)r   r   assertIsNonerC   rJ   s     r   test_newlineszLoggingFileTests.test_newlines~   s/     $$!*%%%%%r   c                 d    t          | j                  }|                     |j        d           dS )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   s2     $$!QRRRRRr   c                     t          | j                  }|                                 |                     |j                   |                     t          |j        d           dS )z7
        L{LoggingFile.close} closes the file.
        HelloN)r   r   close
assertTruer?   rG   
ValueErrorwriterJ   s     r   
test_closezLoggingFileTests.test_close   sT     $$				!!!*agw77777r   c                 V    t          | j                  }|                                 dS )z4
        L{LoggingFile.flush} does nothing.
        N)r   r   flushrJ   s     r   
test_flushzLoggingFileTests.test_flush   s$     $$						r   c                 ~    t          | j                  }|                     |                                d           dS )z6
        L{LoggingFile.fileno} returns C{-1}.
        N)r   r   r6   filenorJ   s     r   test_filenozLoggingFileTests.test_fileno   s7     $$R(((((r   c                 |    t          | j                  }|                     |                                           dS )z9
        L{LoggingFile.isatty} returns C{False}.
        N)r   r   assertFalseisattyrJ   s     r   test_isattyzLoggingFileTests.test_isatty   s5     $$$$$$$r   c                 T   |                                  }|                    d           |                     |j        g            |                    d           |                     |j        dg           |                    d           |                     |j        g d           dS )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77	3444J  	
 	
 	
 	
 	
r   c                     |                      d          }|                    d           |                     |j        dg           dS )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   sO     w//	.///&=%>?????r   c                     |                      d          }|                    d           |                     |j        dg           dS )z(
        Unicode is unmodified.
        r@   r]   u   Hello, Mr. Sánchez
r   Nr   rJ   s     r   test_writeUnicodez"LoggingFileTests.test_writeUnicode   sO     w//	)***&=%>?????r   c                 &   |                                  }|                    d           |                     t          |j                  d           |                     |j        d         d         t
          j                   |                      t
          j                  }|                    d           |                     t          |j                  d           |                     |j        d         d         t
          j                   dS )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     		QX***![18=AAAHN33		QX***![18>BBBBBr   c                     |                                  }|                    d           |                     t          |j                  d           |                     |j        d         d         d           dS )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   sl     		QX***!\2J?????r   c                 T   |                                  }|                    d           |                     |j        g            |                    d           |                     |j        dg           |                    d           |                     |j        g d           dS )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77	>???J  	
 	
 	
 	
 	
r   c                     |                                  }|                     t          d|           t          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)r   patchr^   printr6   r   rJ   s     r   
test_printzLoggingFileTests.test_print   sj     

3!$$$hC    ho%677777r   r   r   c                     g t          t                    dt          ddffd            }t          |          }                    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         |            d S )Nr    )r   loggingFiless    r   r/   z/LoggingFileTests.observedFile.<locals>.observer  s    LOE"""""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'''O3ehWWWXX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 6 6 6
 
 
 

E 
E 
E 
E/ / / /2 2 2 2. . . .& & & && & & &S S S S8 8 8 8   ) ) ) )% % % %
 
 
 
&@ @ @ @@ @ @ @C C C C@ @ @ @
 
 
 
(
8 
8 
8 
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      sJ    


 ! ! ! ! ! ! ! ! & & & & & & $ $ $ $ $ $ " " " " " " 0 0 0 0 0 0 0 0                   $ $ $ $ $ $ \2 2 2 2 2k 2 2 2*t t t t tx( t t t t tr   