+
    üÐjœ"  ã                   óÜ   € R t ^ RIt^ RIHtHt ^ RIHt ^ RIHt ^ RI	H
t
 ^RIHtHt ^RIHt ^RIHt ^R	IHt ^R
IHt ]! ]4       ! R R]4      4       t ! R R]
P.                  4      tR# )z'
Test cases for L{twisted.logger._io}.
N)ÚListÚOptional)Úimplementer)ÚNamedConstant)Úunittest)ÚILogObserverÚLogEvent)ÚLoggingFile)ÚLogLevel)ÚLogger)ÚLogPublisherc                   óp   a a€ ] tR t^t oRt]P                  R3V3R lV 3R llltV3R lR ltRt	Vt
V ;t# )ÚTestLoggingFilezM
L{LoggingFile} that is also an observer which captures events and messages.
Nc                ó@   <€ V ^8„  d   QhRS[ RS[RS[S[,          RR/# )é   ÚloggerÚlevelÚencodingÚreturnN)r   r   r   Ústr)ÚformatÚ__classdict__s   "€Ú=/usr/lib/python3/dist-packages/twisted/logger/test/test_io.pyÚ__annotate__ÚTestLoggingFile.__annotate__   s7   ø€ ÷ &ñ &áð&ñ ð&ñ ™3•-ð	&ð
 
ñ&ó    c                óF   <€ \         SV `  WVR 7       . V n        . V n        R# )©r   r   r   N)ÚsuperÚ__init__ÚeventsÚmessages)Úselfr   r   r   Ú	__class__s   &&&&€r   r   ÚTestLoggingFile.__init__   s%   ø€ ô 	‰Ñ ¸hÐÔGØ&(ˆŒØ#%ˆŽr   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   Úeventr   N©r   )r   r   s   "€r   r   r   '   s   ø€ ÷ 2ñ 2™hð 2¨4ñ 2r   c                ó’   € V P                   P                  V4       R V9   d%   V P                  P                  VR ,          4       R# R# )Úlog_ioN)r    Úappendr!   )r"   r'   s   &&r   Ú__call__ÚTestLoggingFile.__call__'   s7   € Ø�‰×Ñ˜5Ô!Ø�uÔØ�M‰M× Ñ   x¥Ö1ñ r   )r    r!   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r
   Úinfor   r,   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r#   r   s   @@r   r   r      s/   ù‡ € ñð  (Ÿ}™}Ø"&÷	&õ &÷2÷ 2ð 2r   r   c                   óº  a € ] tR t^-t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R  lR! ltV 3R" lR# ltV 3R$ lR% ltV 3R& lR' ltV 3R( lR) lt]P4                  R*3V 3R+ lR, lltR-tV tR*# ).ÚLoggingFileTestsz
Tests for L{LoggingFile}.
c                ó   <€ V ^8„  d   QhRR/# ©r   r   N© )r   r   s   "€r   r   ÚLoggingFileTests.__annotate__2   s   ø€ ÷ 6ñ 6�tñ 6r   c                óZ   € \        4       V n        \        V P                  R7      V n        R# )z;
Create a logger for test L{LoggingFile} instances to use.
©ÚobserverN)r   Ú	publisherr   r   )r"   s   &r   ÚsetUpÚLoggingFileTests.setUp2   s   € ô &›ˆŒÜ d§n¡nÔ5ˆŽr   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   9   s   ø€ ÷ 
ñ 
 ñ 
r   c                ól  € V P                  \        V P                  4      P                  ^ 4       V P	                  V P
                  .4      pV P                  \        V4      ^4       V P                  V^ ,          R,          \        4       RpV P                  V^ ,          R,          RV,          4       R# )z 
L{LoggingFile.softspace} is 0.
Ú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   rJ   ÚLoggingFileTests.test_softspace9   s”   € ð 	×Ñœ T§[¡[Ó1×;Ñ;¸QÔ?à×*Ñ*¨D×,?Ñ,?Ð+@ÓAˆØ×Ñœ˜]Ó+¨QÔ/Ø×Ñ˜ qÕ)¨*Õ5Ô7IÔJØDˆØ×ÑØ˜!Õ˜YÕ'Ø1°_ÕEö	
r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   H   s   ø€ ÷ 
Eñ 
E¨ñ 
Er   c                óT  € \        V P                  4      pV P                  \        \        VRR4       V P                  \        \        VRR4       V P                  \        \        VRR4       V P                  \        \        VRR.4       V P                  \        \        VR	R
4       R# )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_readOnlyAttributesÚ(LoggingFileTests.test_readOnlyAttributesH   s‚   € ô ˜Ÿ™Ó$ˆà×Ñœ.¬'°1°hÀÔEØ×Ñœ.¬'°1°jÀ'ÔJØ×Ñœ.¬'°1°f¸cÔBØ×Ñœ.¬'°1°jÀ4À&ÔIØ×Ñœ.¬'°1°f¸eÖDr   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   T   s   ø€ ÷ /ñ /¨ñ /r   c                ó0  € \        V P                  4      pV P                  \        VP                  4       V P                  \        VP
                  4       V P                  \        VP                  4       V P                  \        VP                  4       V P                  \        VP                  4       V P                  \        VP                  4       V P                  \        VP                  4       V P                  \        VP                  4       R# )z.
Some L{LoggingFile} methods are unsupported.
N)r	   r   rZ   ÚIOErrorÚreadÚnextÚreadlineÚ	readlinesÚ
xreadlinesÚseekÚtellÚtruncater]   s   & r   Útest_unsupportedMethodsÚ(LoggingFileTests.test_unsupportedMethodsT   s²   € ô ˜Ÿ™Ó$ˆà×Ñœ' 1§6¡6Ô*Ø×Ñœ' 1§6¡6Ô*Ø×Ñœ' 1§:¡:Ô.Ø×Ñœ' 1§;¡;Ô/Ø×Ñœ' 1§<¡<Ô0Ø×Ñœ' 1§6¡6Ô*Ø×Ñœ' 1§6¡6Ô*Ø×Ñœ' 1§:¡:Ö.r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   c   s   ø€ ÷ 2ñ 2˜Dñ 2r   c                ó"  € \        V P                  4      pV P                  VP                  \        P
                  4       \        V P                  \        P                  R7      pV P                  VP                  \        P                  4       R# )z/
Default level is L{LogLevel.info} if not set.
©r   N)r	   r   rG   r   r
   r3   Úerrorr]   s   & r   Ú
test_levelÚLoggingFileTests.test_levelc   sV   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™¤(§-¡-Ô0ä˜Ÿ™¬8¯>©>Ô:ˆØ×Ñ˜Ÿ™¤(§.¡.Ö1r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   m   s   ø€ ÷ .ñ .˜tñ .r   c                óô   € \        V P                  4      pV P                  VP                  \        P
                  ! 4       4       \        V P                  RR7      pV P                  VP                  R4       R# )z=
Default encoding is C{sys.getdefaultencoding()} if not set.
rS   ©r   N)r	   r   rG   r   ÚsysÚgetdefaultencodingr]   s   & r   Útest_encodingÚLoggingFileTests.test_encodingm   sS   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™¤S×%;Ò%;Ó%=Ô>ä˜Ÿ™¨gÔ6ˆØ×Ñ˜Ÿ™ WÖ-r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   w   s   ø€ ÷ &ñ &˜4ñ &r   c                óh   € \        V P                  4      pV P                  VP                  R4       R# )z
Reported mode is C{"w"}.
ÚwN)r	   r   rG   rT   r]   s   & r   Ú	test_modeÚLoggingFileTests.test_modew   s&   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™ Ö%r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   ~   s   ø€ ÷ &ñ &˜tñ &r   c                óf   € \        V P                  4      pV P                  VP                  4       R# )z'
The C{newlines} attribute is L{None}.
N)r	   r   ÚassertIsNonerV   r]   s   & r   Útest_newlinesÚLoggingFileTests.test_newlines~   s$   € ô ˜Ÿ™Ó$ˆØ×Ñ˜!Ÿ*™*Ö%r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   …   s   ø€ ÷ Sñ S˜4ñ Sr   c                óh   € \        V P                  4      pV P                  VP                  R4       R# )z!
The C{name} attribute is fixed.
z.<LoggingFile twisted.logger.test.test_io#info>N)r	   r   rG   rX   r]   s   & r   Ú	test_nameÚLoggingFileTests.test_name…   s'   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™Ð!QÖRr   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   Œ   s   ø€ ÷ 8ñ 8˜Dñ 8r   c                óÈ   € \        V P                  4      pVP                  4        V P                  VP                  4       V P                  \        VP                  R4       R# )z'
L{LoggingFile.close} closes the file.
ÚHelloN)r	   r   ÚcloseÚ
assertTruerR   rZ   Ú
ValueErrorÚwriter]   s   & r   Ú
test_closeÚLoggingFileTests.test_closeŒ   sA   € ô ˜Ÿ™Ó$ˆØ	�‰Œ	à�‰˜Ÿ™Ô!Ø×Ñœ* a§g¡g¨wÖ7r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   –   s   ø€ ÷ ñ ˜Dñ r   c                óP   € \        V P                  4      pVP                  4        R# )z$
L{LoggingFile.flush} does nothing.
N)r	   r   Úflushr]   s   & r   Ú
test_flushÚLoggingFileTests.test_flush–   s   € ô ˜Ÿ™Ó$ˆØ	�‰Ž	r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   �   s   ø€ ÷ )ñ )˜Tñ )r   c                óp   € \        V P                  4      pV P                  VP                  4       R4       R# )z&
L{LoggingFile.fileno} returns C{-1}.
Néÿÿÿÿ)r	   r   rG   Úfilenor]   s   & r   Útest_filenoÚLoggingFileTests.test_fileno�   s(   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™› RÖ(r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   ¤   s   ø€ ÷ %ñ %˜Tñ %r   c                ón   € \        V P                  4      pV P                  VP                  4       4       R# )z)
L{LoggingFile.isatty} returns C{False}.
N)r	   r   ÚassertFalseÚisattyr]   s   & r   Útest_isattyÚLoggingFileTests.test_isatty¤   s&   € ô ˜Ÿ™Ó$ˆØ×Ñ˜Ÿ™›Ö$r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   «   s   ø€ ÷ 
ñ 
 Tñ 
r   c                ó:  € V P                  4       pVP                  R4       V P                  VP                  . 4       VP                  R4       V P                  VP                  R.4       VP                  R4       V P                  VP                  . RO4       R# )z
Writing buffers correctly.
r‹   z	, world!
úHello, world!zIt's nice to meet you.

Indeed.N©r¥   zIt's nice to meet you.Ú ©ÚobservedFiler�   rG   r!   r]   s   & r   Útest_writeBufferingÚ$LoggingFileTests.test_writeBuffering«   s|   € ð ×ÑÓˆØ	�‰�ÔØ×Ñ˜Ÿ™ RÔ(Ø	�‰�ÔØ×Ñ˜Ÿ™ oÐ%6Ô7Ø	�‰Ð3Ô4Ø×ÑØ�J‰Jòö	
r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   ¾   s   ø€ ÷ @ñ @¨ñ @r   c                ó†   € V P                  RR7      pVP                  R4       V P                  VP                  R.4       R# )z
Bytes are decoded to text.
rS   rv   s   Hello, Mr. SÃ¡nchez
õ   Hello, Mr. SÃ¡nchezNr¨   r]   s   & r   Útest_writeBytesDecodedÚ'LoggingFileTests.test_writeBytesDecoded¾   s<   € ð ×Ñ wÐÓ/ˆØ	�‰Ð.Ô/Ø×Ñ˜Ÿ™Ð&=Ð%>Ö?r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   Æ   s   ø€ ÷ @ñ @ 4ñ @r   c                ó†   € V P                  RR7      pVP                  R4       V P                  VP                  R.4       R# )z
Unicode is unmodified.
rS   rv   u   Hello, Mr. SÃ¡nchez
r®   Nr¨   r]   s   & r   Útest_writeUnicodeÚ"LoggingFileTests.test_writeUnicodeÆ   s<   € ð ×Ñ wÐÓ/ˆØ	�‰Ð)Ô*Ø×Ñ˜Ÿ™Ð&=Ð%>Ö?r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   Î   s   ø€ ÷ Cñ C ñ Cr   c                ó  € V P                  4       pVP                  R4       V P                  \        VP                  4      ^4       V P                  VP                  ^ ,          R,          \
        P                  4       V P                  \
        P                  R7      pVP                  R4       V P                  \        VP                  4      ^4       V P                  VP                  ^ ,          R,          \
        P                  4       R# )z 
Log level is emitted properly.
úHello
Ú	log_levelrp   N)r©   r�   rG   rK   r    r
   r3   rq   r]   s   & r   Útest_writeLevelÚ LoggingFileTests.test_writeLevelÎ   s³   € ð ×ÑÓˆØ	�‰�	ÔØ×Ñœ˜QŸX™X›¨Ô*Ø×Ñ˜Ÿ™ !� [Õ1´8·=±=ÔAà×Ñ¤H§N¡NÐÓ3ˆØ	�‰�	ÔØ×Ñœ˜QŸX™X›¨Ô*Ø×Ñ˜Ÿ™ !� [Õ1´8·>±>ÖBr   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   Ü   s   ø€ ÷ @ñ @ $ñ @r   c                óæ   € V P                  4       pVP                  R4       V P                  \        VP                  4      ^4       V P                  VP                  ^ ,          R,          R4       R# )z
Log format is C{"{message}"}.
r·   Ú
log_formatz{log_io}N)r©   r�   rG   rK   r    r]   s   & r   Útest_writeFormatÚ!LoggingFileTests.test_writeFormatÜ   sS   € ð ×ÑÓˆØ	�‰�	ÔØ×Ñœ˜QŸX™X›¨Ô*Ø×Ñ˜Ÿ™ !� \Õ2°JÖ?r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   å   s   ø€ ÷ 
ñ 
¨$ñ 
r   c                ó:  € V P                  4       pVP                  R4       V P                  VP                  . 4       VP                  R4       V P                  VP                  R.4       VP                  R4       V P                  VP                  . RO4       R# )z&
C{writelines} does not add newlines.
r¥   N)r‹   z, r§   )zworld!
)zIt's nice to meet you.

zIndeed.r¦   )r©   Ú
writelinesrG   r!   r]   s   & r   Útest_writelinesBufferingÚ)LoggingFileTests.test_writelinesBufferingå   s}   € ð
 ×ÑÓˆØ	�‰Ð(Ô)Ø×Ñ˜Ÿ™ RÔ(Ø	�‰�]Ô#Ø×Ñ˜Ÿ™ oÐ%6Ô7Ø	�‰Ð>Ô?Ø×ÑØ�J‰Jòö	
r   c                ó   <€ V ^8„  d   QhRR/# r:   r;   )r   r   s   "€r   r   r<   ù   s   ø€ ÷ 
8ñ 
8˜Dñ 
8r   c                ó¾   € V P                  4       pV P                  \        RV4       \        RRR7       \        R4       V P	                  VP
                  R.4       R# )z+
L{LoggingFile} can replace L{sys.stdout}.
ÚstdoutzHello,Ú )Úendzworld.zHello, world.N)r©   Úpatchrw   ÚprintrG   r!   r]   s   & r   Ú
test_printÚLoggingFileTests.test_printù   sJ   € ð ×ÑÓˆØ�
‰
”3˜ !Ô$äˆh˜CÕ ÜˆhŒà×Ñ˜Ÿ™ oÐ%6Ö7r   Nc                ó<   <€ V ^8„  d   QhRS[ RS[S[,          RS[/# )r   r   r   r   )r   r   r   r   )r   r   s   "€r   r   r<     s-   ø€ ÷ ñ áðñ ™3•-ðñ 
ñ	r   c                ó    a€ . o\        \        4      R V3R ll4       p\        VR7      pSP                  \	        WAVR7      4       S^ ,          # )al  
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}).
c                ó(   € V ^8„  d   QhR\         RR/# r&   r(   )r   s   "r   r   Ú3LoggingFileTests.observedFile.<locals>.__annotate__  s   € ÷ 	#ñ 	#œHð 	#¨ñ 	#r   c                 ó&   <€ S^ ,          ! V 4       R# )é    Nr;   )r'   ÚloggingFiless   &€r   r?   Ú/LoggingFileTests.observedFile.<locals>.observer  s   ø€ à˜ŽO˜EÖ"r   r>   r   )r   r   r   r+   r   )r"   r   r   r?   ÚlogrÔ   s   &&&  @r   r©   ÚLoggingFileTests.observedFile  sL   ø€ ð& /1ˆä	”\Ó	"÷	#ó 
#ð	#ô ˜hÔ'ˆØ×ÑœO°3ÈhÔWÔXà˜A�Ðr   )r   r@   )r.   r/   r0   r1   r2   rA   rJ   r_   rl   rr   ry   r~   rƒ   r‡   r�   r•   r›   r¡   rª   r¯   r³   r¹   r¾   rÃ   rÌ   r
   r3   r©   r4   r5   )r   s   @r   r8   r8   -   sù   ø‡ € ñ÷6ð 6÷
ð 
÷
Eð 
E÷/ð /÷2ð 2÷.ð .÷&ð &÷&ð &÷Sð S÷8ð 8÷ð ÷)ð )÷%ð %÷
ð 
÷&@ð @÷@ð @÷Cð C÷@ð @÷
ð 
÷(
8ð 
8ð  (Ÿ}™}Ø"&÷÷ ð r   r8   )r2   rw   Útypingr   r   Úzope.interfacer   Ú
constantlyr   Útwisted.trialr   Ú_interfacesr   r   Ú_ior	   Ú_levelsr
   Ú_loggerr   Ú	_observerr   r   ÚTestCaser8   r;   r   r   Ú<module>râ      s^   ðñó ß !å &å $å "ß 0Ý Ý Ý Ý $ñ ˆ\Óô2�kó 2ó ð2ô*t�x×(Ñ(ö tr   