Ϫf"dZddlZddlmZmZddlmZddlmZddl m Z ddl m Z m Z dd lmZdd lmZdd lmZdd lmZee Gd deZGdde j.Zy)z' Test cases for L{twisted.logger._io}. N)ListOptional) implementer) NamedConstant)unittest) ILogObserverLogEvent) LoggingFile)LogLevel)Logger) LogPublisherc deZdZdZej dfdededee ddffd Z de ddfd Z xZ S) TestLoggingFilezU L{LoggingFile} that is also an observer which captures events and messages. NloggerlevelencodingreturncFt||||g|_g|_y)Nrrr)super__init__eventsmessages)selfrrr __class__s =/usr/lib/python3/dist-packages/twisted/logger/test/test_io.pyrzTestLoggingFile.__init__s' ehG&( #% eventc|jj|d|vr|jj|dyy)Nlog_io)rappendr)rrs r__call__zTestLoggingFile.__call__'s7 5! u  MM x 1 r)__name__ __module__ __qualname____doc__r infor rrstrrr r# __classcell__)rs@rrrsV (}}"& &&&3- &  &2h242rrceZdZdZddZddZddZddZddZdd Z dd Z dd Z dd Z dd Z ddZddZddZddZddZddZddZddZddZddZej2dfdedeedefdZy)LoggingFileTestsz# Tests for L{LoggingFile}. rNcXt|_t|j|_y)zK Create a logger for test L{LoggingFile} instances to use. observerN)r publisherr r)rs rsetUpzLoggingFileTests.setUp2s&dnn5 rcB|jt|jjd|j |j g}|jt |d|j|ddtd}|j|ddd|zy)z0 L{LoggingFile.softspace} is 0. rcategoryz(twisted.logger._io.LoggingFile.softspacemessagez#%s was deprecated in Twisted 21.2.0N) assertEqualr r softspace flushWarningstest_softspacelenDeprecationWarning)r warningsShowndeprecatedClasss rr9zLoggingFileTests.test_softspace9s T[[1;;Q?**D,?,?+@A  ]+Q/ q)*57IJD  ! Y ' 1_ E rcRt|j}|jtt|dd|jtt|dd|jtt|dd|jtt|ddg|jtt|d d y ) z? Some L{LoggingFile} attributes are read-only. closedTrutf-8modernewlines namefooN)r r assertRaisesAttributeErrorsetattrrfs rtest_readOnlyAttributesz(LoggingFileTests.test_readOnlyAttributesHs  $ .'1hE .'1j'J .'1fcB .'1j4&I .'1feDrc.t|j}|jt|j|jt|j |jt|j |jt|j|jt|j|jt|j|jt|j|jt|jy)z> Some L{LoggingFile} methods are unsupported. N) r rrGIOErrorreadnextreadline readlines xreadlinesseektelltruncaterJs rtest_unsupportedMethodsz(LoggingFileTests.test_unsupportedMethodsTs  $ '166* '166* '1::. '1;;/ '1<<0 '166* '166* '1::.rc t|j}|j|jtj t|jtj }|j|jtj y)z? Default level is L{LogLevel.info} if not set. rN)r rr6rr r(errorrJs r test_levelzLoggingFileTests.test_levelcsV  $ (--0  8>> : (..1rct|j}|j|jt j t|jd}|j|jdy)zM Default encoding is C{sys.getdefaultencoding()} if not set. r@rN)r rr6rsysgetdefaultencodingrJs r test_encodingzLoggingFileTests.test_encodingmsS  $ S%;%;%=>  g 6 W-rcft|j}|j|jdy)z* Reported mode is C{"w"}. wN)r rr6rArJs r test_modezLoggingFileTests.test_modews&  $ %rcdt|j}|j|jy)z7 The C{newlines} attribute is L{None}. N)r r assertIsNonerCrJs r test_newlineszLoggingFileTests.test_newlines~s$  $ !**%rcft|j}|j|jdy)z1 The C{name} attribute is fixed. z.N)r rr6rErJs r test_namezLoggingFileTests.test_names'  $ !QRrct|j}|j|j|j|j t |jdy)z7 L{LoggingFile.close} closes the file. HelloN)r rclose assertTruer?rG ValueErrorwriterJs r test_closezLoggingFileTests.test_closesA  $   ! *aggw7rcNt|j}|jy)z4 L{LoggingFile.flush} does nothing. N)r rflushrJs r test_flushzLoggingFileTests.test_flushs  $  rcnt|j}|j|jdy)z6 L{LoggingFile.fileno} returns C{-1}. N)r rr6filenorJs r test_filenozLoggingFileTests.test_filenos(  $ R(rclt|j}|j|jy)z9 L{LoggingFile.isatty} returns C{False}. N)r r assertFalseisattyrJs r test_isattyzLoggingFileTests.test_isattys&  $ $rc8|j}|jd|j|jg|jd|j|jdg|jd|j|jgdy)z, Writing buffers correctly. rjz , world! Hello, world!zIt's nice to meet you. Indeed.r|zIt's nice to meet you.N observedFilernr6rrJs rtest_writeBufferingz$LoggingFileTests.test_writeBufferings|      R(   o%67 34  JJ  rc|jd}|jd|j|jdgy)z, Bytes are decoded to text. r@r]sHello, Mr. Sánchez Hello, Mr. SánchezNrrJs rtest_writeBytesDecodedz'LoggingFileTests.test_writeBytesDecodeds<   w  / ./ &=%>?rc|jd}|jd|j|jdgy)z( Unicode is unmodified. r@r]uHello, Mr. Sánchez rNrrJs rtest_writeUnicodez"LoggingFileTests.test_writeUnicodes<   w  / )* &=%>?rc|j}|jd|jt|jd|j|jddt j |jt j}|jd|jt|jd|j|jddt jy)z0 Log level is emitted properly. Hello r3r log_levelrYN)rrnr6r:rr r(rZrJs rtest_writeLevelz LoggingFileTests.test_writeLevels       QXX* ![18==A   HNN  3   QXX* ![18>>Brc|j}|jd|jt|jd|j|jdddy)z/ Log format is C{"{message}"}. rr3r log_formatz{log_io}N)rrnr6r:rrJs rtest_writeFormatz!LoggingFileTests.test_writeFormatsS       QXX* !\2J?rc8|j}|jd|j|jg|jd|j|jdg|jd|j|jgdy)z6 C{writelines} does not add newlines. )rjz, r~)zworld! r|)zIt's nice to meet you. zIndeed.r}N)r writelinesr6rrJs rtest_writelinesBufferingz)LoggingFileTests.test_writelinesBufferings}     () R( ]# o%67 >?  JJ  rc|j}|jtd|tddtd|j |j dgy)z; L{LoggingFile} can replace L{sys.stdout}. stdoutzHello, )endzworld.z Hello, world.N)rpatchr^printr6rrJs r test_printzLoggingFileTests.test_printsJ     3!$ hC  h o%67rrrcgttdtddffd }t|}j t |||dS)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}). rrNcd|y)Nr)r loggingFiless rr/z/LoggingFileTests.observedFile..observers LOE "rr.rr)rr r r r"r)rrrr/logrs @rrzLoggingFileTests.observedFiles\&/1 \ " #H # # # #h'O3ehWXAr)rN)r$r%r&r'r1r9rLrWr[r`rcrfrhrorrrvrzrrrrrrrr r(rrr)rrrrrr,r,-s6   E /2.&&S8)% &@@ C@ ( 8 (}}"&3-  rr,)r'r^typingrrzope.interfacer constantlyr twisted.trialr _interfacesr r _ior _levelsr _loggerr _observerrrTestCaser,rrrrs^ !&$"0$ \2k22*tx((tr