
    Jf"                         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       V/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/twisted/logger/test/test_io.pyr   zTestLoggingFile.__init__   s'     	eh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MM  x1 r   )__name__
__module____qualname____doc__r   infor   r   r   strr   r
   r#   __classcell__)r   s   @r   r   r      sV      (}}"&	&& & 3-	&
 
&2h 24 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     &dnn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)*57I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     $.'1hE.'1j'J.'1fcB.'1j4&I.'1fe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     $'166*'166*'1::.'1;;/'1<<0'166*'166*'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     $		!*aggw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JJ	
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     		QXX*![18==AHNN3		QXX*![18>>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     		QXX*!\2J?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	>?JJ	
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!$hC 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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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    $ \2k 2 2*tx(( tr   