+
    üÐjq“  ã                  óê  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
Ht ^ RIHtHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHt ^ RIHt ^ R	IHtHt ^ R
IHt ^ RI H!t!  ! R R]"4      t# ! R R]!PH                  4      t% ! R R]!PH                  4      t& ! R R]]',          4      t(]
PR                  ! ](4        ! R R4      t* ! R R4      t+ ! R R]*]+4      t, ! R R]4      t- ! R R4      t. ! R R].]!PH                  4      t/ ! R  R!].]!PH                  4      t0 ! R" R#]!PH                  4      t1 ! R$ R%]!PH                  4      t2 ! R& R']!PH                  4      t3 ! R( R)]!PH                  4      t4R# )*z"
Tests for L{twisted.python.log}.
)ÚannotationsN)ÚIOBaseÚStringIO)ÚCallableÚList)Úimplementer)ÚProtocol)ÚILogObserverÚLogBeginnerÚLoggingFileÚLogLevelÚLogPublisher)ÚhandlerAndBytesIO)ÚfailureÚlog)r   )Úunittestc                  ó   € ] tR t^#tRtRtR# )ÚFakeWarningzs
A unique L{Warning} subclass used by tests for interactions of
L{twisted.python.log} with the L{warnings} module.
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú7/usr/lib/python3/dist-packages/twisted/test/test_log.pyr   r   #   s   † õr   r   c                  ób   € ] tR t^*tRtR R ltR R ltR R ltR R	 ltR
 R lt	R R lt
RtR# )ÚTextFromEventDictTestsz!
Tests for L{textFromEventDict}.
c               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚNoner   )Úformats   "r   Ú__annotate__Ú#TextFromEventDictTests.__annotate__/   s   € ÷ (ñ (˜dñ (r   c                ón   € \        RR7      p\        P                  ! V4      pV P                  VR4       R# )zR
The C{"message"} value, when specified, is concatenated to generate the
message.
)Úmessageza b cN)ÚaÚbÚc©Údictr   ÚtextFromEventDictÚassertEqual©ÚselfÚ	eventDictÚtexts   &  r   Útest_messageÚ#TextFromEventDictTests.test_message/   s.   € ô
  Ô1ˆ	Ü×$Ò$ YÓ/ˆØ×Ñ˜˜wÖ'r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r&   8   s   € ÷ /ñ /˜Tñ /r   c                ót   € \        R^ RRR7      p\        P                  ! V4      pV P                  VR4       R# )zG
The C{"format"} value, when specified, is used to format the message.
zHello, %(foo)s!Údude)r(   ÚisErrorr$   ÚfoozHello, dude!Nr   r,   r0   s   &  r   Útest_formatÚ"TextFromEventDictTests.test_format8   s5   € ô  ¨QÐ7HÈfÔUˆ	Ü×$Ò$ YÓ/ˆØ×Ñ˜˜~Ö.r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r&   @   s   € ÷  ñ  ¨ñ  r   c                ón   € \        R^ R7      p\        P                  ! V4      pV P                  V4       R# )zJ
If C{"format"} is unspecified and C{"message"} is empty, return
L{None}.
©r(   r9   Nr   )r-   r   r.   ÚassertIsNoner0   s   &  r   Útest_noMessageNoFormatÚ-TextFromEventDictTests.test_noMessageNoFormat@   s.   € ô
  ¨QÔ/ˆ	Ü×$Ò$ YÓ/ˆØ×Ñ˜$Ör   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r&   I   s   € ÷ 6ñ 6 4ñ 6r   c                óø   €  \        4       h  \         dc    \        R^\        P                  ! 4       RR7      p\
        P                  ! T4      pTf   Q hT P                  TP                  R4      4        R# i ; i)z?
The C{"why"} value, when specified, is first part of message.
r:   )r(   r9   r   ÚwhyNzfoo
r   ©	ÚRuntimeErrorÚBaseExceptionr-   r   ÚFailurer   r.   Ú
assertTrueÚ
startswithr0   s   &  r   Útest_whySpecifiedÚ(TextFromEventDictTests.test_whySpecifiedI   sk   € ð	6Ü“.Ð øÜô 	6ÜØ A¬w¯ªÓ/@ÀeôˆIô ×(Ò(¨Ó3ˆDØÒ#Ð#Ð#Ø�O‰O˜DŸO™O¨GÓ4×5ð	6ús   ‚
 ŒA)A9Á8A9c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r&   W   s   € ÷ 
Bñ 
B ñ 
Br   c                óö   €  \        4       h  \         db    \        R^\        P                  ! 4       R7      p\
        P                  ! T4      pTf   Q hT P                  TP                  R4      4        R# i ; i)zI
The C{"why"} value, when unspecified, defaults to C{"Unhandled Error"}.
©r(   r9   r   NzUnhandled Error
r   rF   r0   s   &  r   Útest_whyDefaultÚ&TextFromEventDictTests.test_whyDefaultW   sh   € ð	BÜ“.Ð øÜô 	BÜ R°¼G¿OºOÓ<MÔNˆIÜ×(Ò(¨Ó3ˆDØÒ#Ð#Ð#Ø�O‰O˜DŸO™OÐ,?Ó@×Að		Bús   ‚
 ŒA(A8Á7A8c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r&   c   s   € ÷ >ñ >¨ñ >r   c                ó‚   € \        R^\        4       R7      p\        P                  ! V4      pV P	                  RV4       R# )zS
If unable to obtain a traceback due to an exception, catch it and note
the error.
rP   z
(unable to obtain traceback)Nr   )r-   Úobjectr   r.   ÚassertInr0   s   &  r   Útest_noTracebackForYouÚ-TextFromEventDictTests.test_noTracebackForYouc   s3   € ô  ¨Q¼»ÔAˆ	Ü×$Ò$ YÓ/ˆØ�‰Ð6¸Ö=r   r   N)r   r   r   r   r   r4   r;   rA   rL   rQ   rW   r   r   r   r   r   r   *   s+   † ñõ(õ/õ õ6õ
B÷>ñ >r   r   c                  ó‚   € ] tR t^ntR R ltR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltR R ltRtR# )ÚLogTestsc               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   ÚLogTests.__annotate__o   s   € ÷ ;ñ ;�tñ ;r   c                	óÞ   € . V n         V P                   P                  V n        \        P                  ! V P                  4       V P                  \        P                  V P                  4       R # ©N)ÚcatcherÚappendÚobserverr   ÚaddObserverÚ
addCleanupÚremoveObserver©r1   s   &r   ÚsetUpÚLogTests.setUpo   sB   € Ø,.ˆŒØŸ™×+Ñ+ˆŒÜ�Š˜Ÿ™Ô&Ø�‰œ×*Ñ*¨D¯M©MÖ:r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r\   u   s   € ÷ *ñ * ñ *r   c                	ó8  € V P                   p\        P                  ! R RR7       VP                  4       pV P	                  VR,          ^ ,          R 4       V P                  VR,          4       V P                  RV4       V P	                  \        V4      ^ 4       R# )ÚtestT)ÚtestShouldCatchr(   rk   ÚtimeN)r_   r   ÚmsgÚpopr/   rJ   rV   Úlen©r1   r_   Úis   &  r   ÚtestObservationÚLogTests.testObservationu   sp   € Ø—,‘,ˆÜ�Š�¨Õ-Ø�K‰K‹MˆØ×Ñ˜˜9� a�¨&Ô1Ø�‰˜Ð+Õ,Ô-Ø�‰�f˜aÔ Ø×Ñœ˜W› qÖ)r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r\   ~   s   € ÷ 1ñ 1˜Tñ 1r   c           	     	ó”  € V P                   p\        P                  ! R RRRRR/\        P                  RR/\        P                  RRR	7       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       R# )Ú	subsystemznot the defaultÚsubsubsystemr)   Úotherr+   r*   r:   Úd)rx   r(   N)r_   r   ÚcallWithContextrm   rn   r/   rp   s   &  r   ÚtestContextÚLogTests.testContext~   s«   € Ø—,‘,ˆÜ×ÒØÐ+¨^¸SÀ'È3ÐOÜ×ÑØ˜SÐ!Ü�G‰GØØõ	
ð �K‰K‹MˆØ×Ñ˜˜>Õ*¨CÔ0Ø×Ñ˜˜;�Ð):Ô;Ø×Ñ˜˜7� SÔ)Ø×Ñ˜˜9� a�¨%Ö0r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r\   Ž   s   € ÷ 	'ñ 	'˜Dñ 	'r   c                	ó6  € R\        4       \         3\        P                  ! \        4       4      \        33 F_  w  r\        P
                  ! V4       V P                  P                  4       pV P                  VR,          ^4       V P                  V4       Ka  	  R# )úhello worldr9   N©r   r   ©
ÚKeyErrorr   rI   rG   r   Úerrr_   rn   r/   ÚflushLoggedErrors©r1   ÚeÚigrq   s   &   r   Ú
testErrorsÚLogTests.testErrorsŽ   sq   € à*Ü‹ZœÐ"Ü�_Š_œ\›^Ó,¬lÐ;ó
‰EˆAô
 �GŠG�AŒJØ—‘× Ñ Ó"ˆAØ×Ñ˜Q˜y�\¨1Ô-Ø×"Ñ" 2Ö&ó
r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r\   ™   s   € ÷ 
'ñ 
' 4ñ 
'r   c                	ój  € R\        4       \         3\        P                  ! \        4       4      \        33 Fy  w  r\        P
                  ! VR4       V P                  P                  4       pV P                  VR,          ^4       V P                  VR,          R4       V P                  V4       K{  	  R# )r   Úfoobarr9   rE   Nr€   r�   r…   s   &   r   ÚtestErrorsWithWhyÚLogTests.testErrorsWithWhy™   sˆ   € à*Ü‹ZœÐ"Ü�_Š_œ\›^Ó,¬lÐ;ó
‰EˆAô
 �GŠG�A�xÔ Ø—‘× Ñ Ó"ˆAØ×Ñ˜Q˜y�\¨1Ô-Ø×Ñ˜Q˜u�X xÔ0Ø×"Ñ" 2Ö&ó
r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r\   ¥   s   € ÷ %Cñ %C dñ %Cr   c                ó’  € . p. pR R lpVP                   W2P                   3 F9  p\        P                  ! V4       V P                  \        P                  V4       K;  	  \        ^4       FØ  p. VR&   . VR&   \        P                  ! R. R7       V P                  \        4      pV P                  R V P                  \        V4      ^4       V P                  \        V4      ^4       V P                  \        V4      ^4       V P                  V^ ,          R,          R4       V P                  V^ ,          R,          R4       KÚ  	  R# )	zï
Exceptions raised by log observers are logged but the observer which
raised the exception remains registered with the publisher.  These
exceptions do not prevent the event from being sent to other observers
registered with the publisher.
c               ó    € V ^8„  d   QhRRRR/# ©r!   Úeventúlog.EventDictr"   r#   r   )r$   s   "r   r%   Ú3LogTests.test_erroneousErrors.<locals>.__annotate__¯   s   € ÷ 	ñ 	˜-ð 	¨Dñ 	r   c                ó   € ^^ ,           R# ©é   Nr   )r“   s   &r   ÚbrokenÚ-LogTests.test_erroneousErrors.<locals>.broken¯   s   € Ø��FˆFr   :NNNúHowdy, y'all.)Ú	log_tracer(   N)r›   )r`   r   rb   rc   rd   Úrangerm   r„   ÚZeroDivisionErrorr_   r/   ro   )r1   ÚL1ÚL2r™   ra   rq   Úexcss   &      r   Útest_erroneousErrorsÚLogTests.test_erroneousErrors¥   s  € ð #%ˆØ"$ˆõ	ð Ÿ™ F¯I©IÓ6ˆHÜ�OŠO˜HÔ%Ø�O‰OœC×.Ñ.°Ö9ñ 7ô �q–ˆAàˆBˆq‰EØˆBˆq‰Eô �GŠG�O¨rÕ2ð ×)Ñ)Ô*;Ó<ˆDØ—‘˜Q�Ø×ÑœS ›Y¨Ô*ð ×ÑœS ›W aÔ(Ø×ÑœS ›W aÔ(ð ×Ñ˜R �U 9Õ-Ð/AÔBØ×Ñ˜R �U 9Õ-Ð/AÖBó) r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r\   Ì   s   € ÷ &+ñ &+ $ñ &+r   c                óV  € \         P                  ! 4       pVP                  V P                  4       VP	                  \        R4      \
        R^4       V P                  P                  4       pV P                  VR,          V,          R4       V P                  V P                  . 4       VP	                  \        R4      \
        R^\        4       R7       V P                  P                  4       pV P                  VR,          V,          R4       V P                  V P                  . 4       R# )za
L{twisted.python.log.showwarning} emits the warning as a message
to the Twisted logging system.
zunique warning messageúwarning-filename.pyr$   zQwarning-filename.py:27: twisted.test.test_log.FakeWarning: unique warning message)ÚlineN)
r   r   rb   ra   Úshowwarningr   r_   rn   r/   rU   )r1   Ú	publisherr“   s   &  r   Útest_showwarningÚLogTests.test_showwarningÌ   s  € ô
 ×$Ò$Ó&ˆ	Ø×Ñ˜dŸm™mÔ,à×ÑÜÐ0Ó1ÜØ!Øô		
ð —‘× Ñ Ó"ˆØ×ÑØ�(�O˜eÕ#ð%ô	
ð
 	×Ñ˜Ÿ™ rÔ*ð
 	×ÑÜÐ0Ó1ÜØ!ØÜ“ð 	ô 	
ð —‘× Ñ Ó"ˆØ×ÑØ�(�O˜eÕ#ð%ô	
ð
 	×Ñ˜Ÿ™ rÖ*r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r\   ô   s   € ÷ 
ñ 
 Dñ 
r   c           
     ó„  € Rp\         pRp^p\        4       p\        P                  ! WW4VR7       V P	                  VP                  4       \        P                  ! WW44      4       Rp\        4       p\        P                  ! WW4WVR7       V P	                  VP                  4       \        P                  ! WW4V4      4       R# )z|
L{twisted.python.log.showwarning} passes warnings with an explicit file
target on to the underlying Python warning system.
zanother unique messager¦   ©Úfiler   )r¯   r§   N)r   r   r   r¨   r/   ÚgetvalueÚwarningsÚformatwarning)r1   r(   ÚcategoryÚfilenameÚlinenoÚoutputr§   s   &      r   Útest_warningToFileÚLogTests.test_warningToFileô   sŸ   € ð
 +ˆÜˆØ(ˆØˆä“ˆÜ�Š˜¨8À&ÕIà×ÑØ�O‰OÓÜ×"Ò" 7°hÓGô	
ð ˆÜ“ˆÜ�Š˜¨8À&ÕTà×ÑØ�O‰OÓÜ×"Ò" 7°hÈÓMö	
r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r\     s   € ÷ 7ñ 7¸tñ 7r   c                óv  a€ . oR V3R llpR R lp\         P                  ! 4       pVP                  V4       VP                  V4       VP                  R4       V P	                  \        VP                  4      W04       V P	                  \        S4      ^4       V P                  S^ ,          \        4       R# )zS
Log publisher does not use the global L{log.err} when reporting broken
observers.
c               ó    € V ^8„  d   QhRRRR/# ©r!   r2   r”   r"   r#   r   )r$   s   "r   r%   ÚLLogTests.test_publisherReportsBrokenObserversPrivately.<locals>.__annotate__  s   € ÷ 	:ñ 	: ð 	:°$ñ 	:r   c                ó~   <€ V P                  R 4      '       d%   SP                  V R,          P                  4       R# R# ©r9   r   N)Úgetr`   Úvalue)r2   Úerrorss   &€r   ÚlogErrorÚHLogTests.test_publisherReportsBrokenObserversPrivately.<locals>.logError  s.   ø€ Ø�}‰}˜Y×'Ò'Ø—‘˜i¨	Õ2×8Ñ8Ö9ñ (r   c               ó    € V ^8„  d   QhRRRR/# r¼   r   )r$   s   "r   r%   r½     s   € ÷ 	Mñ 	M˜Mð 	M¨dñ 	Mr   c                ó   € \        R 4      h)Ú*test_publisherLocalyReportsBrokenObservers)rG   ©r2   s   &r   ÚfailÚDLogTests.test_publisherReportsBrokenObserversPrivately.<locals>.fail  s   € ÜÐKÓLÐLr   úHello!N)
r   r   rb   rm   r/   ÚsetÚ	observersro   ÚassertIsInstancerG   )r1   rÃ   rÉ   r©   rÂ   s   &   @r   Ú-test_publisherReportsBrokenObserversPrivatelyÚ6LogTests.test_publisherReportsBrokenObserversPrivately  s˜   ø€ ð
 ˆ÷	:ð 	:õ	Mô ×$Ò$Ó&ˆ	Ø×Ñ˜hÔ'Ø×Ñ˜dÔ#à�‰�hÔØ×Ñœ˜Y×0Ñ0Ó1°HÐ3CÔDØ×Ñœ˜V› aÔ(Ø×Ñ˜f Q�i¬Ö6r   ©r_   ra   N)r   r   r   r   rf   rr   r{   rˆ   r�   r¢   rª   r·   rÏ   r   r   r   r   rZ   rZ   n   s7   † õ;õ*õ1õ 	'õ
'õ%CõN&+õP
÷<7ñ 7r   rZ   c                  ó.   € ] tR tRtR R ltR R ltRtR# )ÚFakeFilei*  c               ó    € V ^8„  d   QhRRRR/# )r!   Úbytesr"   r#   r   )r$   s   "r   r%   ÚFakeFile.__annotate__+  s   € ÷ ñ ˜5ð  Tñ r   c                	ó(   € V P                  V4       R # r^   ©r`   )r1   rÕ   s   &&r   ÚwriteÚFakeFile.write+  s   € Ø�‰�EÖr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rÖ   .  s   € ÷ ñ �tñ r   c                	ó   € R # r^   r   re   s   &r   ÚflushÚFakeFile.flush.  s   € Ùr   r   N)r   r   r   r   rÙ   rÝ   r   r   r   r   rÓ   rÓ   *  s   † õ÷ñ r   rÓ   c                  ó"   € ] tR tRtR R ltRtR# )ÚEvilStri5  c               ó   € V ^8„  d   QhRR/# ©r!   r"   Ústrr   )r$   s   "r   r%   ÚEvilStr.__annotate__6  s   € ÷ ñ ˜ñ r   c                	ó&   € \        ^^ ,          4      # ©r˜   ©rã   re   s   &r   Ú__str__ÚEvilStr.__str__6  ó   € Ü�1˜•6‹{Ðr   r   N)r   r   r   r   rè   r   r   r   r   rà   rà   5  s   † ÷ñ r   rà   c                  ó.   € ] tR tRtR R ltR R ltRtR# )ÚEvilRepri:  c               ó   € V ^8„  d   QhRR/# râ   r   )r$   s   "r   r%   ÚEvilRepr.__annotate__;  s   € ÷ !ñ !˜ñ !r   c                	ó   € R # )zHappy Evil Reprr   re   s   &r   rè   ÚEvilRepr.__str__;  s   € Ù r   c               ó   € V ^8„  d   QhRR/# râ   r   )r$   s   "r   r%   rî   >  s   € ÷ ñ ˜#ñ r   c                	ó&   € \        ^^ ,          4      # ræ   rç   re   s   &r   Ú__repr__ÚEvilRepr.__repr__>  rê   r   r   N)r   r   r   r   rè   ró   r   r   r   r   rì   rì   :  s   † õ!÷ñ r   rì   c                  ó   € ] tR tRtRtR# )ÚEvilReprStriB  r   N)r   r   r   r   r   r   r   r   rö   rö   B  s   † Ûr   rö   c                  ó.   € ] tR tRt$ R]R&   R R ltRtR# )Ú_LogPublisherTestCaseMixinBaseiF  rÓ   Úoutc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r!   ÚinstancerU   ÚclassOrTupleÚtyper(   rã   r"   r#   r   )r$   s   "r   r%   Ú+_LogPublisherTestCaseMixinBase.__annotate__I  s,   € ÷ ñ ØðØ.2ðØ=@ðà	ñr   c                	ó   € R # r^   r   )r1   rû   rü   r(   s   &&&&r   rÎ   Ú/_LogPublisherTestCaseMixinBase.assertIsInstanceI  s   € ñ 	r   r   N)r   r   r   r   Ú__annotations__rÎ   r   r   r   r   rø   rø   F  s   ‡ Ø	ƒM÷ñ r   rø   c                  ó.   € ] tR tRtR R ltR R ltRtR# )ÚLogPublisherTestCaseMixiniO  c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   Ú&LogPublisherTestCaseMixin.__annotate__P  s   € ÷ 
+ñ 
+�tñ 
+r   c                ó   € \        4       V n        \        P                  ! 4       V n        \        P
                  ! V P                  4      V n        V P                  P                  V P                  P                  4       R# )zÏ
Add a log observer which records log events in C{self.out}.  Also,
make sure the default string encoding is ASCII so that
L{testSingleUnicode} can test the behavior of logging unencodable
unicode messages.
N)	rÓ   rù   r   r   ÚlpÚFileLogObserverÚflorb   Úemitre   s   &r   rf   ÚLogPublisherTestCaseMixin.setUpP  sM   € ô “:ˆŒÜ×"Ò"Ó$ˆŒÜ×&Ò& t§x¡xÓ0ˆŒØ�‰×Ñ˜DŸH™HŸM™MÖ*r   c               ó    € V ^8„  d   QhRRRR/# )r!   r1   rø   r"   r#   r   )r$   s   "r   r%   r  \  s   € ÷ Mñ MÐ5ð M¸$ñ Mr   c                ób   € V P                    F  pV P                  V\        V: R24       K   	  R# )z¯
Verify that everything written to the fake file C{self.out} was a
C{str}.  Also, restore the default string encoding to its previous
setting, if it was modified by L{setUp}.
z was not a stringN)rù   rÎ   rã   )r1   Úchunks   & r   ÚtearDownÚ"LogPublisherTestCaseMixin.tearDown\  s,   € ð —X”XˆEØ×!Ñ! %¬°±	Ð9JÐ.KÖLó r   )r	  r  rù   N)r   r   r   r   rf   r  r   r   r   r   r  r  O  s   † õ
+÷Mñ Mr   r  c                  ó:   € ] tR tRtR R ltR R ltR R ltRtR	# )
ÚLogPublisherTestsif  c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   ÚLogPublisherTests.__annotate__g  s   € ÷ +ñ + $ñ +r   c                	ó†   € V P                   P                  R 4       V P                  \        V P                  4      ^4       R# )úHello, world.N©r  rm   r/   ro   rù   re   s   &r   ÚtestSingleStringÚ"LogPublisherTests.testSingleStringg  s*   € Ø�‰�‰�OÔ$Ø×Ñœ˜TŸX™X›¨Ö*r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r  k  s   € ÷ +ñ + Dñ +r   c                	óˆ   € V P                   P                  R R4       V P                  \        V P                  4      ^4       R# )zHello, zworld.Nr  re   s   &r   ÚtestMultipleStringÚ$LogPublisherTests.testMultipleStringk  s.   € ð 	�‰�‰�I˜xÔ(Ø×Ñœ˜TŸX™X›¨Ö*r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r  r  s   € ÷ ,ñ , Dñ ,r   c                óÎ   € RpV P                   P                  V4       V P                  \        V P                  4      ^4       V P                  WP                  ^ ,          4       R# )z·
L{log.LogPublisher.msg} does not accept non-ASCII Unicode on Python 2,
logging an error instead.

On Python 3, where Unicode is default message type, the message is
logged normally.
õ   Hello, Â½ world.N)r  rm   r/   ro   rù   rV   )r1   r(   s   & r   Útest_singleUnicodeÚ$LogPublisherTests.test_singleUnicoder  sE   € ð ?ˆØ�‰�‰�GÔØ×Ñœ˜TŸX™X›¨Ô*Ø�‰�gŸx™x¨�{Ö+r   r   N)r   r   r   r   r  r  r!  r   r   r   r   r  r  f  s   † õ+õ+÷,ñ ,r   r  c                  ó>  € ] tR tRtRtRtRtRtRtRt	Rt
R	tR
 R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR  R! ltR" R# ltR$ R% ltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 R3 lt R4 R5 lt!R6t"R7# )8ÚFileObserverTestsi€  z 
Tests for L{log.FileObserver}.
zInvalid format stringzUNFORMATTABLE OBJECTz<Invalid format string or unformattable object in log messagezPATHOLOGICAL ERRORzUnable to format eventz[UNFORMATTABLE]z)MESSAGE LOST: unformattable object loggedc               ó(   € V ^8„  d   QhRRRRRRRR/# )r!   Útznamerã   ÚdaylightOffsetÚintÚstandardOffsetr"   r#   r   )r$   s   "r   r%   ÚFileObserverTests.__annotate__Ž  s2   € ÷ Dñ DØðDØ+.ðDØ@CðDà	ñDr   c                ó  € \        \        RR4      f   \        P                  ! R4      h\        P
                  P                  RR4      p V\        P
                  R&   \        P                  ! 4        Rp\        P                  ! V4      pRp \        P                  ! V4      pT P                  T P                  P                  T4      T P                  P                  T4      3Y#34       Tf   \        P
                  R MT\        P
                  R&   \        P                  ! 4        R#   \         d    Y#8X  d   Tp Lœh i ; i  Tf   \        P
                  R MT\        P
                  R&   \        P                  ! 4        i ; i)a  
Verify that L{getTimezoneOffset} produces the expected offset for a
certain timezone both when daylight saving time is in effect and when
it is not.

@param tzname: The name of a timezone to exercise.
@type tzname: L{bytes}

@param daylightOffset: The number of seconds west of UTC the timezone
    should be when daylight saving time is in effect.
@type daylightOffset: L{int}

@param standardOffset: The number of seconds west of UTC the timezone
    should be when daylight saving time is not in effect.
@type standardOffset: L{int}
ÚtzsetNzWPlatform cannot change timezone, cannot verify correct offsets in well-known timezones.ÚTZ)	i×  r˜   é   é    r/  r/  r!   r.  r/  )	iÖ  é   é   r/  r/  r/  é   éµ   r˜   )Úgetattrrl   r   ÚSkipTestÚosÚenvironrÀ   r,  ÚmktimeÚOverflowErrorr/   r	  ÚgetTimezoneOffset)	r1   r&  r'  r)  ÚoriginalTimezoneÚlocalStandardTupleÚstandardÚlocalDaylightTupleÚdaylights	   &&&&     r   Ú_getTimezoneOffsetTestÚ(FileObserverTests._getTimezoneOffsetTestŽ  sL  € ô& ”4˜ $Ó'Ò/Ü×#Ò#ð3óð ô
 Ÿ:™:Ÿ>™>¨$°Ó5Ðð*	Ø%ŒB�J‰J�tÑÜ�JŠJŒLð "BÐÜ—{’{Ð#5Ó6ˆHð "CÐðÜŸ;š;Ð'9Ó:�ð ×Ñà—H‘H×.Ñ.¨xÓ8Ø—H‘H×.Ñ.¨xÓ8ðð  Ð0ôð  Ò'Ü—J‘J˜tÑ$à#3”—
‘
˜4Ñ Ü�JŠJŽLøô1 !ô 
ð "Ô3Ø'’Hàð
ûð(  Ò'Ü—J‘J˜tÑ$à#3”—
‘
˜4Ñ Ü�JŠJ�Lús3   ÁAE ÂD+ Â$AE Ä+EÄ>E Å EÅE ÅA Fc               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  Ô  s   € ÷ Fñ F°ñ Fr   c                ó,   € V P                  RRR4       R# )zù
Attempt to verify that L{FileLogObserver.getTimezoneOffset} returns
correct values for the current C{TZ} environment setting for at least
some cases.  This test method exercises a timezone that is west of UTC
(and should produce positive results).
zAmerica/New_Yorki@8  éPF  N©r@  re   s   &r   Útest_getTimezoneOffsetWestOfUTCÚ1FileObserverTests.test_getTimezoneOffsetWestOfUTCÔ  s   € ð 	×#Ñ#Ð$6¸¸uÖEr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  Ý  s   € ÷ Cñ C°ñ Cr   c                ó,   € V P                  RRR4       R# )zù
Attempt to verify that L{FileLogObserver.getTimezoneOffset} returns
correct values for the current C{TZ} environment setting for at least
some cases.  This test method exercises a timezone that is east of UTC
(and should produce negative results).
zEurope/BerlinNéàãÿÿéðñÿÿrE  re   s   &r   Útest_getTimezoneOffsetEastOfUTCÚ1FileObserverTests.test_getTimezoneOffsetEastOfUTCÝ  s   € ð 	×#Ñ# O°U¸EÖBr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  æ  s   € ÷ Iñ IÀñ Ir   c                ó,   € V P                  RRR4       R# )a6  
Attempt to verify that L{FileLogObserver.getTimezoneOffset} returns
correct values for the current C{TZ} environment setting for at least
some cases.  This test method exercises a timezone that does not use
daylight saving time at all (so both summer and winter time test values
should have the same offset).
zAfrica/JohannesburgNrJ  rE  re   s   &r   Ú/test_getTimezoneOffsetWithoutDaylightSavingTimeÚAFileObserverTests.test_getTimezoneOffsetWithoutDaylightSavingTimeæ  s   € ð 	×#Ñ#Ð$9¸5À%ÖHr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  ô  s   € ÷ )?ñ )? Tñ )?r   c                ó   € \         P                  ! R4      pR V P                  n        V P	                  V P                  P                  V4      R4       R V P                  n        V P	                  V P                  P                  V4      R4       R V P                  n        V P	                  V P                  P                  V4      R4       R V P                  n        V P	                  V P                  P                  V4      R4       R	 V P                  n        V P	                  V P                  P                  V4      R
4       R V P                  n        V P	                  V P                  P                  V4      R4       R V P                  n        V P	                  V P                  P                  V4      R4       RV P                  n        V P	                  V P                  P                  V4      R4       R# )z]
Test the method of L{FileLogObserver} which turns a timestamp into a
human-readable string.
c                ó   € R # )rD  r   ©Úwhens   &r   Ú<lambda>Ú7FileObserverTests.test_timeFormatting.<locals>.<lambda>ü  ó   € ±%r   z2001-02-02 23:05:06-0500c                ó   € R# )i  rK  r   rU  s   &r   rW  rX     rY  r   z2001-02-03 05:05:06+0100c                ó   € R# )i°š  iPeÿÿr   rU  s   &r   rW  rX    s   € ±&r   z2001-02-03 15:05:06+1100c                ó   € R # )é  r   rU  s   &r   rW  rX    ó   € ±$r   z2001-02-03 02:35:06-0130c                ó   € R# )r]  ièêÿÿr   rU  s   &r   rW  rX    rY  r   z2001-02-03 05:35:06+0130c                ó   € R # )é  r   rU  s   &r   rW  rX    r^  r   z2001-02-03 03:35:06-0030c                ó   € R# )ra  iøøÿÿr   rU  s   &r   rW  rX    rY  r   z2001-02-03 04:35:06+0030z%Y %mz2001 02N)	iÑ  r!   é   r2  é   r0  é   é   r/  )ÚcalendarÚtimegmr	  r:  r/   Ú
formatTimeÚ
timeFormat)r1   rV  s   & r   Útest_timeFormattingÚ%FileObserverTests.test_timeFormattingô  s‚  € ô
 �ŠÐ=Ó>ˆñ &8ˆ�‰Ô"Ø×Ñ˜Ÿ™×,Ñ,¨TÓ2Ð4NÔOñ &8ˆ�‰Ô"Ø×Ñ˜Ÿ™×,Ñ,¨TÓ2Ð4NÔOñ &9ˆ�‰Ô"Ø×Ñ˜Ÿ™×,Ñ,¨TÓ2Ð4NÔOñ &7ˆ�‰Ô"Ø×Ñ˜Ÿ™×,Ñ,¨TÓ2Ð4NÔOñ &8ˆ�‰Ô"Ø×Ñ˜Ÿ™×,Ñ,¨TÓ2Ð4NÔOñ &7ˆ�‰Ô"Ø×Ñ˜Ÿ™×,Ñ,¨TÓ2Ð4NÔOñ &8ˆ�‰Ô"Ø×Ñ˜Ÿ™×,Ñ,¨TÓ2Ð4NÔOð &ˆ�‰ÔØ×Ñ˜Ÿ™×,Ñ,¨TÓ2°IÖ>r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*    s   € ÷ Bñ B°Tñ Br   c                ó~   € RV P                   n        V P                  RV P                   P                  R4      4       R# )z�
L{FileLogObserver.formatTime} supports a value of C{timeFormat} which
includes C{"%f"}, a L{datetime}-only format specifier for microseconds.
z%fÚ600000gš™™™™mû@N)r	  rj  r/   ri  re   s   &r   Ú#test_microsecondTimestampFormattingÚ5FileObserverTests.test_microsecondTimestampFormatting  s/   € ð
 #ˆ�‰ÔØ×Ñ˜ 4§8¡8×#6Ñ#6°xÓ#@ÖAr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  '  s   € ÷ Gñ G°tñ Gr   c                	óð   € V P                   P                  \        4       4       V P                  \	        V P
                  4      ^4       V P                  V P                  V P
                  ^ ,          4       R# r—   )r  rm   rà   r/   ro   rù   ÚassertNotInÚERROR_UNFORMATTABLE_OBJECTre   s   &r   Ú%test_loggingAnObjectWithBroken__str__Ú7FileObserverTests.test_loggingAnObjectWithBroken__str__'  sJ   € à�‰�‰”G“IÔØ×Ñœ˜TŸX™X›¨Ô*à×Ñ˜×8Ñ8¸$¿(¹(À1½+ÖFr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  .  s   € ÷ >ñ >¸$ñ >r   c                	óô   € V P                   P                  R \        4       R7       V P                  \	        V P
                  4      ^4       V P                  V P                  V P
                  ^ ,          4       R# ©z%(blat)s©r$   ÚblatN)r  rm   rà   r/   ro   rù   rV   ÚERROR_INVALID_FORMATre   s   &r   Ú(test_formattingAnObjectWithBroken__str__Ú:FileObserverTests.test_formattingAnObjectWithBroken__str__.  sL   € Ø�‰�‰˜:¬G«IˆÔ6Ø×Ñœ˜TŸX™X›¨Ô*Ø�‰�d×/Ñ/°·±¸!µÖ=r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  3  s   € ÷ 6ñ 6¨$ñ 6r   c                	óô   € V P                   P                  R \        4       R7       V P                  \	        V P
                  4      ^4       V P                  V P                  V P
                  ^ ,          4       R# ©Úhuh)ÚsystemN)r  rm   rà   r/   ro   rù   rV   ÚERROR_FORMATre   s   &r   Útest_brokenSystem__str__Ú*FileObserverTests.test_brokenSystem__str__3  sL   € Ø�‰�‰�E¤'£)ˆÔ,Ø×Ñœ˜TŸX™X›¨Ô*Ø�‰�d×'Ñ'¨¯©°!­Ö5r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  8  s   € ÷ Dñ DÀ4ñ Dr   c                	óö   € V P                   P                  R \        4       .R7       V P                  \	        V P
                  4      ^4       V P                  V P                  V P
                  ^ ,          4       R# rz  ©r  rm   rì   r/   ro   rù   rV   ru  re   s   &r   Ú1test_formattingAnObjectWithBroken__repr__IndirectÚCFileObserverTests.test_formattingAnObjectWithBroken__repr__Indirect8  sN   € Ø�‰�‰˜:¬X«Z¨LˆÔ9Ø×Ñœ˜TŸX™X›¨Ô*Ø�‰�d×5Ñ5°t·x±xÀµ{ÖCr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  =  s   € ÷ Dñ D°tñ Dr   c                	óö   € V P                   P                  R \        4       .R7       V P                  \	        V P
                  4      ^4       V P                  V P                  V P
                  ^ ,          4       R# r‚  rŠ  re   s   &r   Ú%test_systemWithBroker__repr__IndirectÚ7FileObserverTests.test_systemWithBroker__repr__Indirect=  sN   € Ø�‰�‰�E¤8£: ,ˆÔ/Ø×Ñœ˜TŸX™X›¨Ô*Ø�‰�d×5Ñ5°t·x±xÀµ{ÖCr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  B  s   € ÷ >ñ >¨ñ >r   c                	óä   € V P                   P                  R ^R7       V P                  \        V P                  4      ^4       V P                  V P                  V P                  ^ ,          4       R# )z
hooj %s %sr{  N©r  rm   r/   ro   rù   rV   r}  re   s   &r   Útest_simpleBrokenFormatÚ)FileObserverTests.test_simpleBrokenFormatB  sJ   € Ø�‰�‰˜<¨aˆÔ0Ø×Ñœ˜TŸX™X›¨Ô*Ø�‰�d×/Ñ/°·±¸!µÖ=r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  G  s   € ÷ >ñ > tñ >r   c                	óä   € V P                   P                  ^*^R7       V P                  \        V P                  4      ^4       V P                  V P                  V P                  ^ ,          4       R# )é*   r{  Nr“  re   s   &r   Útest_ridiculousFormatÚ'FileObserverTests.test_ridiculousFormatG  sJ   € Ø�‰�‰˜2 AˆÔ&Ø×Ñœ˜TŸX™X›¨Ô*Ø�‰�d×/Ñ/°·±¸!µÖ=r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  L  s   € ÷ <ñ <°4ñ <r   c                	óô   € V P                   P                  \        4       ^R7       V P                  \	        V P
                  4      ^4       V P                  V P                  V P
                  ^ ,          4       R# )r˜   r{  N)r  rm   rö   r/   ro   rù   rV   ÚERROR_PATHOLOGICALre   s   &r   Ú!test_evilFormat__repr__And__str__Ú3FileObserverTests.test_evilFormat__repr__And__str__L  sL   € Ø�‰�‰œ;›=¨qˆÔ1Ø×Ñœ˜TŸX™X›¨Ô*Ø�‰�d×-Ñ-¨t¯x©x¸­{Ö;r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  Q  s   € ÷ +ñ + tñ +r   c                óŠ   € V P                   P                  RRR7       V P                  \        V P                  4      ^ 4       R# )z@
This kind of eventDict used to fail silently, so test it does.
Ú Fr?   Nr  re   s   &r   Útest_strangeEventDictÚ'FileObserverTests.test_strangeEventDictQ  s0   € ð 	�‰�‰˜B¨ˆÔ.Ø×Ñœ˜TŸX™X›¨Ö*r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  X  s   € ÷ <ñ < dñ <r   c                ó   € V P                  \        P                  P                  4       V P                  \        \
        R\
        P                  4       V P                  \        \
        R\
        P                  4       R# )zU
Cleanup after a startLogging() call that mutates the hell out of some
global state.
ÚstdoutÚstderrN)rc   r   ÚtheLogPublisherÚ_stopLoggingÚsetattrÚsysr§  r¨  re   s   &r   Ú_startLoggingCleanupÚ&FileObserverTests._startLoggingCleanupX  sH   € ð
 	�‰œ×+Ñ+×8Ñ8Ô9Ø�‰œ¤ h´·
±
Ô;Ø�‰œ¤ h´·
±
Ö;r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  a  s   € ÷ 4ñ 4¨tñ 4r   c                ó   a€ V P                  4        \        4       p\        P                  ! V4       R V3R llp. o\        P                  ! V4       \        R\        P                  R7       V P                  S^ ,          R,          ^4       R# )z[
startLogging()'s overridden sys.stderr should consider everything
written to it an error.
c               ó    € V ^8„  d   QhRRRR/# r’   r   )r$   s   "r   r%   ÚEFileObserverTests.test_printToStderrSetsIsError.<locals>.__annotate__j  s   € ÷ 	#ñ 	#˜=ð 	#¨Tñ 	#r   c                ó*   <€ SP                  V 4       R # r^   rØ   )r“   Úobserveds   &€r   ÚobserveÚ@FileObserverTests.test_printToStderrSetsIsError.<locals>.observej  s   ø€ Ø�O‰O˜EÖ"r   r  r®   r9   N)	r­  r   r   ÚstartLoggingrb   Úprintr¬  r¨  r/   )r1   ÚfakeFilerµ  r´  s   &  @r   Útest_printToStderrSetsIsErrorÚ/FileObserverTests.test_printToStderrSetsIsErrora  sj   ø€ ð
 	×!Ñ!Ô#Ü“:ˆÜ×Ò˜Ô"÷	#ð 	#ð )+ˆÜ�Š˜Ô äˆo¤C§J¡JÕ/Ø×Ñ˜ !� YÕ/°Ö3r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  s  s   € ÷ Hñ H 4ñ Hr   c                óv  € \         P                  \         P                  r!V P                  4        \	        4       p\
        P                  ! V4      pV P                  VP                  4       \
        P                  ! R4       V P                  RVP                  4       4       V P                  \         P                  \        4       V P                  \         P                  P                  \         P"                  4       \%        VRR4      pV'       g   \         P&                  ! 4       pV P                  \         P                  P(                  P+                  4       VP+                  4       4       V P                  \         P                  \        4       V P                  \         P                  P                  \         P,                  4       \%        VRR4      pV'       g   \         P&                  ! 4       pV P                  \         P                  P(                  P+                  4       VP+                  4       4       R# )zR
startLogging() installs FileLogObserver and overrides sys.stdout and
sys.stderr.
rË   ÚencodingN)r¬  r§  r¨  r­  r   r   r·  rc   Ústoprm   rV   r°   rÎ   r   r/   ÚlevelÚNewLogLevelÚinfor4  Úgetdefaultencodingr¾  ÚupperÚerror)r1   Ú
origStdoutÚ
origStderrr¹  ra   r¾  s   &     r   Útest_startLoggingÚ#FileObserverTests.test_startLoggings  sc  € ô
 "%§¡¬S¯Z©Z�JØ×!Ñ!Ô#ä“:ˆÜ×#Ò# HÓ-ˆØ�‰˜Ÿ™Ô&Ü�Š�ÔØ�‰�h × 1Ñ 1Ó 3Ô4Ø×ÑœcŸj™j¬+Ô6Ø×ÑœŸ™×)Ñ)¬;×+;Ñ+;Ô<Ü˜: z°4Ó8ˆßÜ×-Ò-Ó/ˆHØ×ÑœŸ™×,Ñ,×2Ñ2Ó4°h·n±nÓ6FÔGØ×ÑœcŸj™j¬+Ô6Ø×ÑœŸ™×)Ñ)¬;×+<Ñ+<Ô=Ü˜: z°4Ó8ˆßÜ×-Ò-Ó/ˆHØ×ÑœŸ™×,Ñ,×2Ñ2Ó4°h·n±nÓ6FÖGr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  �  s   € ÷ .ñ .¨ñ .r   c                ó2  € V P                  4        \        4       \        n        R R lp\        P
                  ! V4       V P                  \        P                  V4       \        P                  ! \        P                  4      pV P                  VP                  4       V P                  \        P                  \        4       \        P                  p\        P                  ! \        P                  4      pV P                  \        P                  V4       R# )z›
There are some obscure error conditions that can occur when logging is
started twice. See http://twistedmatrix.com/trac/ticket/3289 for more
information.
c               ó    € V ^8„  d   QhRRRR/# r¼   r   )r$   s   "r   r%   Ú>FileObserverTests.test_startLoggingTwice.<locals>.__annotate__™  s   € ÷ 	Jñ 	J ð 	J°4ñ 	Jr   c                ó�   € V R ,          '       d7   \         P                  P                  V R,          P                  4       4       R# R# r¿   )r¬  Ú
__stdout__rÙ   ÚgetTracebackrÈ   s   &r   Ú	showErrorÚ;FileObserverTests.test_startLoggingTwice.<locals>.showError™  s2   € Ø˜×#Ô#Ü—‘×$Ñ$ Y¨yÕ%9×%FÑ%FÓ%HÖIñ $r   N)r­  r   r¬  r§  r   rb   rc   rd   r·  r¿  rÎ   r   ÚassertIs)r1   rÑ  ra   Ú
fakeStdouts   &   r   Útest_startLoggingTwiceÚ(FileObserverTests.test_startLoggingTwice�  sª   € ð 	×!Ñ!Ô#ô “ZŒŒ
õ	Jô 	�Š˜	Ô"Ø�‰œ×*Ñ*¨IÔ6Ü×#Ò#¤C§J¡JÓ/ˆØ�‰˜Ÿ™Ô&à×ÑœcŸj™j¬+Ô6Ü—Z‘Zˆ
Ü×#Ò#¤C§J¡JÓ/ˆØ�‰”c—j‘j *Ö-r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  §  s   € ÷ 35ñ 35°4ñ 35r   c           
     ót  a€ V P                  4        \        4       p ! R R4      p\        VV\        V\	        4       V\
        4      R7      pV P                  \        RV4       R\        n        \	        4       pRR/p. o\        \        4       ! V3R lR	4      4       pV! V4       VP                  V! 4       4       \        P                  ! VR
R7       V P                  VP                  4       V P                  S. 4       \
        P                   ! R4       VP#                  4       pV P%                  RV4       R# )zi
startLogging() overrides global C{warnings.showwarning} such that
warnings go to Twisted log observers.
c                  ó2   € ] tR tRt]! 4       t]! 4       tRtR# )ÚFFileObserverTests.test_startLoggingOverridesWarning.<locals>.SysModulei¯  r   N)r   r   r   r   rU   r§  r¨  r   r   r   r   Ú	SysModulerÚ  ¯  s   † Ù“XˆFÙ“XŒFr   rÛ  )ÚlogBeginnerr©  Nú	pre-startr“   c                  ó*   <€ ] tR tRtR V 3R lltRtR# )ÚMFileObserverTests.test_startLoggingOverridesWarning.<locals>.PreStartObserveriÌ  c               ó    € V ^8„  d   QhRRRR/# r¼   r   )r$   s   "r   r%   ÚZFileObserverTests.test_startLoggingOverridesWarning.<locals>.PreStartObserver.__annotate__Î  s   € ÷ /ñ /¨-ð /¸Dñ /r   c                	óX   <€ R VP                  4       9   d   SP                  V4       R# R# )rÝ  N)Úkeysr`   )r1   r2   Úreceiveds   &&€r   Ú__call__ÚVFileObserverTests.test_startLoggingOverridesWarning.<locals>.PreStartObserver.__call__Î  s#   ø€ Ø )§.¡.Ó"2Ô2à—O‘O IÖ.ñ 3r   r   N)r   r   r   r   rå  r   )rä  s   €r   ÚPreStartObserverrß  Ì  s   ø† ÷/ô /r   rç  F)Ú	setStdoutzhello!zUserWarning: hello!)r­  ÚNewLogPublisherr   r
   r   r±   Úpatchr   Ú_oldshowwarningr   r	   rb   r·  rc   rª  r/   Úwarnr°   rV   )	r1   ÚnewPublisherrÛ  ÚtempLogPublisherr¹  Úevtrç  r¶   rä  s	   &       @r   Ú!test_startLoggingOverridesWarningÚ3FileObserverTests.test_startLoggingOverridesWarning§  s  ø€ ð
 	×!Ñ!Ô#Ü&Ó(ˆ÷	ñ 	ô (ØØÜ# L´(³*¸iÌÓRô
Ðð 	�
‰
”3Ð)Ð+;Ô<ð #ŒÔä“:ˆð ˜GÐ$ˆØˆä	”\Ó	"÷	/ó 	/ó 
#ð	/ñ 	�SÔØ× Ñ Ñ!1Ó!3Ô4Ü×Ò˜¨UÕ3Ø�‰Ð(×5Ñ5Ô6Ø×Ñ˜ 2Ô&Ü�Š�hÔØ×"Ñ"Ó$ˆØ�‰Ð+¨VÖ4r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  Ü  s   € ÷ 
ñ 
 ñ 
r   c                óè  aa€ \        4       p\        P                  ! V4      o. oR VV3R llp\        P                  ! 4       pVP	                  V4       VP                  R4       V P                  \        S4      ^4       S^ ,          pVP                  4       pRP                  SP                  VR,          4      VR,          R7      pV P                  VP                  V4      V: RV: 24       R	# )
zS
FileLogObserver.emit() will add a timestamp and system prefix to its
file output.
c               ó    € V ^8„  d   QhRRRR/# r’   r   )r$   s   "r   r%   Ú7FileObserverTests.test_emitPrefix.<locals>.__annotate__å  s   € ÷ 	ñ 	˜Mð 	¨dñ 	r   c                óL   <€ SP                  V 4       SP                  V 4       R # r^   )r`   r
  )r“   Úeventsr	  s   &€€r   ra   Ú3FileObserverTests.test_emitPrefix.<locals>.observerå  s   ø€ à�M‰M˜%Ô Ø�H‰H�UŽOr   rË   z{time} [{system}] rl   r„  )rl   r„  z does not start with N)r   r   r  r   rb   rm   r/   ro   r°   r$   ri  rJ   rK   )	r1   r¶   ra   r©   r“   ÚresultÚprefixr÷  r	  s	   &      @@r   Útest_emitPrefixÚ!FileObserverTests.test_emitPrefixÜ  sÕ   ù€ ô
 “ˆÜ×!Ò! &Ó)ˆØˆ÷	ñ 	ô
 ×$Ò$Ó&ˆ	Ø×Ñ˜hÔ'à�‰�hÔØ×Ñœ˜V› aÔ(Ø�q•	ˆà—‘Ó"ˆØ%×,Ñ,Ø—‘  f¥Ó.Ø˜•?ð -ó 
ˆð
 	�‰Ø×Ñ˜fÓ%Ø‰jÐ-¨f©ZÐ8ö	
r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r*  ü  s   € ÷ 
ñ 
 $ñ 
r   c                ó<  € \        4       p\        P                  ! V4      p\        P                  ! 4       pVP	                  VP
                  4       VP                  R4       VP                  4       pRpV P                  VP                  V4      V: RV: 24       R# )zB
FileLogObserver.emit() will append a newline to its file output.
rË   zHello!
z does not end with N)
r   r   r  r   rb   r
  rm   r°   rJ   Úendswith)r1   r¶   r	  r©   rù  Úsuffixs   &     r   Útest_emitNewlineÚ"FileObserverTests.test_emitNewlineü  s   € ô “ˆÜ×!Ò! &Ó)ˆä×$Ò$Ó&ˆ	Ø×Ñ˜cŸh™hÔ'à�‰�hÔà—‘Ó"ˆØˆà�‰Ø�O‰O˜FÓ#Ø‰jÐ+¨F©:Ð6ö	
r   r   N)#r   r   r   r   r   r}  ru  r…  r�  ÚERROR_NO_FORMATÚERROR_UNFORMATTABLE_SYSTEMÚERROR_MESSAGE_LOSTr@  rF  rL  rP  rk  rp  rv  r~  r†  r‹  r�  r”  r™  rž  r£  r­  rº  rÈ  rÕ  rð  rû  r  r   r   r   r   r$  r$  €  s±   † ñð 3ÐØ!7ÐØQ€LØ-Ðà.€OØ!2ÐØDÐõDõLFõCõIõ)?õVBõGõ>õ
6õ
Dõ
Dõ
>õ
>õ
<õ
+õ<õ4õ$Hõ4.õ435õj
÷@
ñ 
r   r$  c                  ób   € ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
RtR# )ÚPythonLoggingObserverTestsi  z-
Test the bridge with python logging module.
c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   Ú'PythonLoggingObserverTests.__annotate__  s   € ÷ +ñ +�tñ +r   c                	ó$  a aa€ \         P                  ! R 4      oSP                  4       oSP                  \         P                  4       S P
                  R VV3R ll4       p\        4       w  S n        S n        SP                  S P                  4       S P
                  R VV 3R ll4       p\        P                  ! 4       S n        \        P                  ! 4       S n        S P                  P                  S P                  P                   4       R# )r¢  c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   Ú6PythonLoggingObserverTests.setUp.<locals>.__annotate__  s   € ÷ 	/ñ 	/˜dñ 	/r   c                 ó*   <€ SP                  S 4       R # r^   )ÚsetLevel)ÚoriginalLevelÚ
rootLoggers   €€r   ÚrestoreLevelÚ6PythonLoggingObserverTests.setUp.<locals>.restoreLevel  s   ø€ à×Ñ Ö.r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r  #  s   € ÷ 	ñ 	˜dñ 	r   c                 ór   <€ S P                  SP                  4       SP                  P                  4        R # r^   )ÚremoveHandlerÚhdlrÚclose)r  r1   s   €€r   ÚremoveLoggerÚ6PythonLoggingObserverTests.setUp.<locals>.removeLogger"  s#   ø€ à×$Ñ$ T§Y¡YÔ/Ø�I‰I�O‰OÖr   N)ÚloggingÚ	getLoggerÚgetEffectiveLevelr  ÚDEBUGrc   r   r  rù   Ú
addHandlerr   r   r  ÚPythonLoggingObserverÚobsrb   r
  )r1   r  r  r  r  s   f  @@r   rf   Ú PythonLoggingObserverTests.setUp  sÊ   ú€ Ü×&Ò& rÓ*ˆ
Ø"×4Ñ4Ó6ˆØ×ÑœGŸM™MÔ*à	�‰÷	/ð 	/ó 
ð	/ô 0Ó1ÑˆŒ	�4”8Ø×Ñ˜dŸi™iÔ(à	�‰÷	ð 	ó 
ð	ô ×"Ò"Ó$ˆŒÜ×,Ò,Ó.ˆŒØ�‰×Ñ˜DŸH™HŸM™MÖ*r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r	  +  s   € ÷ 4ñ 4 4ñ 4r   c                óä   € V P                   P                  R4       V P                  RV P                  P	                  4       4       V P                  RV P                  P	                  4       4       R# )z,
Test simple output, and default log level.
r  s   Hello, world.s   INFON©r  rm   rV   rù   r°   re   s   &r   Útest_singleStringÚ,PythonLoggingObserverTests.test_singleString+  sK   € ð 	�‰�‰�OÔ$Ø�‰Ð&¨¯©×(9Ñ(9Ó(;Ô<Ø�‰�g˜tŸx™x×0Ñ0Ó2Ö3r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r	  3  s   € ÷ 
ñ 
 $ñ 
r   c                ó  € \         P                  ! \        R4      4      pV P                  P	                  VRR7       RpV P
                  P                  4       pV P                  VP                  V4      RV: RV: 24       R# )z
Test error output.
zThat is bad.T)r   r9   s	   CRITICAL:zDoes not start with z: N)	r   rI   Ú
ValueErrorr  rm   rù   r°   rJ   rK   )r1   Úfrú  r¶   s   &   r   Útest_errorStringÚ+PythonLoggingObserverTests.test_errorString3  sl   € ô �OŠOœJ ~Ó6Ó7ˆØ�‰�‰˜A tˆÔ,ØˆØ—‘×"Ñ"Ó$ˆØ�‰Ø×Ñ˜fÓ%Ø" 6¡*¨B¨v©jÐ9ö	
r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r	  @  s   € ÷ >ñ > 4ñ >r   c                ó–   € V P                   P                  RRRR7       V P                  RV P                  P	                  4       4       R# )z
Test logging with a format.
z%(bar)s oo %(foo)sÚHelloÚworld)r$   Úbarr:   s   Hello oo worldNr$  re   s   &r   Útest_formatStringÚ,PythonLoggingObserverTests.test_formatString@  s7   € ð 	�‰�‰Ð/°WÀ'ˆÔJØ�‰Ð'¨¯©×):Ñ):Ó)<Ö=r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r	  G  s   € ÷ 7ñ 7 $ñ 7r   c                ón  € V P                   P                  R\        P                  R7       V P	                  RV P
                  P                  4       4       V P	                  RV P
                  P                  4       4       V P
                  P                  ^ ^ 4       V P
                  P                  4        V P                   P                  R\        P                  R7       V P	                  RV P
                  P                  4       4       V P	                  RV P
                  P                  4       4       R# )	z7
Test the logLevel keyword for customizing level used.
z	Spam egg.)ÚlogLevels	   Spam egg.s   ERRORzFoo bar.s   Foo bar.s   WARNINGN)
r  rm   r  ÚERRORrV   rù   r°   ÚseekÚtruncateÚWARNINGre   s   &r   Útest_customLevelÚ+PythonLoggingObserverTests.test_customLevelG  sÂ   € ð 	�‰�‰�K¬'¯-©-ˆÔ8Ø�‰�l D§H¡H×$5Ñ$5Ó$7Ô8Ø�‰�h §¡× 1Ñ 1Ó 3Ô4Ø�‰�‰�a˜ÔØ�‰×ÑÔØ�‰�‰�J¬¯©ˆÔ9Ø�‰�k 4§8¡8×#4Ñ#4Ó#6Ô7Ø�‰�j $§(¡(×"3Ñ"3Ó"5Ö6r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r	  T  s   € ÷ 3ñ 3 tñ 3r   c                ó”   € V P                   P                  RRR7       V P                  V P                  P	                  4       R4       R# )z`
Verify that an event dictionary which is not an error and has an empty
message isn't recorded.
r¢  Fr?   r   N)r  rm   r/   rù   r°   re   s   &r   r£  Ú0PythonLoggingObserverTests.test_strangeEventDictT  s5   € ð
 	�‰�‰˜B¨ˆÔ.Ø×Ñ˜Ÿ™×*Ñ*Ó,¨cÖ2r   )r  r  r   rù   N)r   r   r   r   r   rf   r%  r+  r2  r;  r£  r   r   r   r   r  r    s*   † ñõ+õ*4õ
õ>õ7÷3ñ 3r   r  c                  ó2   € ] tR tRtRtR R ltR R ltRtR# )	ÚPythonLoggingIntegrationTestsi]  z,
Test integration of python logging bridge.
c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   Ú*PythonLoggingIntegrationTests.__annotate__b  s   € ÷ 3ñ 3¨ñ 3r   c                óè  € \         P                  p\         P                  p. p VP                  \         n        VP                  \         n        \         P
                  ! 4       pVP                  4        V P                  V^ ,          VP                  4       VP                  4        V P                  \        V4      ^ 4       V\         n        V\         n        R#   T\         n        T\         n        i ; i)zf
Test that start and stop methods of the observer actually register
and unregister to the log system.
N)r   rb   rd   r`   Úremover  Ústartr/   r
  r¿  ro   )r1   ÚoldAddObserverÚoldRemoveObserverÚlr   s   &    r   Útest_startStopObserverÚ4PythonLoggingIntegrationTests.test_startStopObserverb  s¨   € ô
 Ÿ™ˆÜ×.Ñ.ÐØ35ˆð
	3ØŸh™hŒCŒOØ!"§¡ŒCÔÜ×+Ò+Ó-ˆCØ�I‰IŒKØ×Ñ˜Q˜q�T 3§8¡8Ô,Ø�H‰HŒJØ×ÑœS ›V QÔ'à,ŒCŒOØ!2ŒCÖøð -ŒCŒOØ!2ŒCÕús   ¤BC ÃC1c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rC  v  s   € ÷ 5ñ 5 $ñ 5r   c                ól  €  ! R R\         P                  4      pV! 4       p. p\         P                  P                  p VP                  \         P                  n        VP                  RR/4       V P	                  VRR/.4       V\         P                  n        R#   T\         P                  n        i ; i)zš
Test that we can inherit L{log.PythonLoggingObserver} and use super:
that's basically a validation that L{log.PythonLoggingObserver} is
new-style class.
c                  ó.   a € ] tR tRtR V 3R lltRtV ;t# )ÚBPythonLoggingIntegrationTests.test_inheritance.<locals>.MyObserveri}  c               ó    € V ^8„  d   QhRRRR/# r¼   r   )r$   s   "r   r%   ÚOPythonLoggingIntegrationTests.test_inheritance.<locals>.MyObserver.__annotate__~  s   € ÷ (ñ ( mð (¸ñ (r   c                	ó&   <€ \         SV `  V4       R # r^   )Úsuperr
  )r1   r2   Ú	__class__s   &&€r   r
  ÚGPythonLoggingIntegrationTests.test_inheritance.<locals>.MyObserver.emit~  s   ø€ Ü‘‘˜YÖ'r   r   )r   r   r   r   r
  r   Ú__classcell__)rT  s   @r   Ú
MyObserverrO  }  s   ø† ÷(ö (r   rW  r:   r1  N)r   r  r
  r`   r/   )r1   rW  r   rI  ÚoldEmits   &    r   Útest_inheritanceÚ.PythonLoggingIntegrationTests.test_inheritancev  sŽ   € ô	(œ×2Ñ2ô 	(ñ ‹lˆØ!#ˆÜ×+Ñ+×0Ñ0ˆð	5Ø-.¯X©XŒC×%Ñ%Ô*Ø�H‰H�e˜U�^Ô$Ø×Ñ˜Q %¨ Ð 0Ô1à-4ŒC×%Ñ%Ö*ø¨WŒC×%Ñ%Õ*ús   ¾AB ÂB3r   N)r   r   r   r   r   rJ  rY  r   r   r   r   rA  rA  ]  s   † ñõ3÷(5ñ 5r   rA  c                  ó2   € ] tR tRtRtR R ltR R ltRtR# )	ÚDefaultObserverTestsiŒ  z
Test the default observer.
c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   Ú!DefaultObserverTests.__annotate__‘  s   € ÷ )ñ ) Dñ )r   c                óf  € . V n         V P                   P                  V n        \        P                  ! V P                  4       V P                  \        P                  V P                  4       \        P                  ! 4       p\        4       Vn	        VP                  4        V P                  VP                  4       Rp\        P                  ! \        4       V4       V P                  4       pV P                  W!P                  P!                  4       4       V P#                  \%        V4      ^4       R# )z]
The reason argument passed to log.err() appears in the report
generated by DefaultObserver.
zThe reason.N)r_   r`   ra   r   rb   rc   rd   ÚDefaultObserverr   r¨  rF  r¿  rƒ   Ú	Exceptionr„   rV   r°   r/   ro   )r1   r   ÚreasonrÂ   s   &   r   Útest_failureLoggerÚ'DefaultObserverTests.test_failureLogger‘  sÄ   € ð
 -/ˆŒØŸ™×+Ñ+ˆŒÜ�Š˜Ÿ™Ô&Ø�‰œ×*Ñ*¨D¯M©MÔ:ä×!Ò!Ó#ˆÜ“ZˆŒ
Ø�	‰	ŒØ�‰˜Ÿ™Ô!àˆÜ�Š”	“˜VÔ$Ø×'Ñ'Ó)ˆà�‰�fŸj™j×1Ñ1Ó3Ô4Ø×Ñœ˜V› aÖ(r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   r^  §  s   € ÷ Pñ P¨dñ Pr   c                óX  €  ! R R4      pRV! 4       3p\        V^R7      p\        P                  ! 4       p\        4       ;_uu_ 4       pWTn        VP                  V4       V P                  VP                  4       P                  R4      4       RRR4       R#   + '       g   i     R# ; i)zt
DefaultObserver.emit() does not raise when it observes an error event
with a message that causes L{repr} to raise.
c                  ó"   € ] tR tRtR R ltRtR# )Ú?DefaultObserverTests.test_emitEventWithBrokenRepr.<locals>.Ouchi­  c               ó   € V ^8„  d   QhRR/# râ   r   )r$   s   "r   r%   ÚLDefaultObserverTests.test_emitEventWithBrokenRepr.<locals>.Ouch.__annotate__®  s   € ÷ "ñ " #ñ "r   c                	ó&   € \        ^^ ,          4      # ræ   rç   re   s   &r   ró   ÚHDefaultObserverTests.test_emitEventWithBrokenRepr.<locals>.Ouch.__repr__®  s   € Ü˜1˜q�5“zÐ!r   r   N)r   r   r   r   ró   r   r   r   r   ÚOuchrh  ­  s   † ÷"ñ "r   rm  r:   r?   zfoo <Ouch instanceN)	r-   r   r`  r   r¨  r
  rJ   r°   rK   )r1   rm  r(   r“   ra   r¶   s   &     r   Útest_emitEventWithBrokenReprÚ1DefaultObserverTests.test_emitEventWithBrokenRepr§  sx   € ÷	"ñ 	"ð ™$›&�/ˆÜ˜W¨aÔ0ˆä×&Ò&Ó(ˆÜ�ZŒZ˜6Ø$ŒOØ�M‰M˜%Ô Ø�O‰O˜FŸO™OÓ-×8Ñ8Ð9MÓNÔO÷ �Z�ZŠZús   ÁABÂB)	rÑ   N)r   r   r   r   r   rc  rn  r   r   r   r   r\  r\  Œ  s   † ñõ)÷,Pñ Pr   r\  c                  ó†   € ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltR R ltR R ltRtR# )ÚStdioOnnaStickTestsi»  z>
StdioOnnaStick should act like the normal sys.stdout object.
c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   Ú StdioOnnaStickTests.__annotate__À  s   € ÷ 0ñ 0�tñ 0r   c                	óh   € . V n         \        P                  ! V P                   P                  4       R # r^   )Ú
resultLogsr   rb   r`   re   s   &r   rf   ÚStdioOnnaStickTests.setUpÀ  s   € Ø/1ˆŒÜ�Š˜Ÿ™×.Ñ.Ö/r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rs  Ä  s   € ÷ 3ñ 3˜$ñ 3r   c                	óZ   € \         P                  ! V P                  P                  4       R # r^   )r   rd   ru  r`   re   s   &r   r  ÚStdioOnnaStickTests.tearDownÄ  s   € Ü×Ò˜4Ÿ?™?×1Ñ1Ö2r   c               ó   € V ^8„  d   QhRR/# )r!   r"   z	list[str]r   )r$   s   "r   r%   rs  Ç  s   € ÷ @ñ @ 	ñ @r   c                	óp   € V P                    Uu. uF  pR P                  VR,          4      NK  	  up# u upi )r¢  r(   )ru  Újoin)r1   ry   s   & r   ÚgetLogMessagesÚ"StdioOnnaStickTests.getLogMessagesÇ  s+   € Ø/3¯ªÓ?©¨!�—‘˜˜)�Ö%©Ñ?Ð?ùÒ?s   �!3c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rs  Ê  s   € ÷ 
Tñ 
T˜Dñ 
Tr   c                óú   € \         P                  ! 4       pVP                  R4       V P                  V P	                  4       R.4       VP                  R4       V P                  V P	                  4       RR.4       R# )z…
Writing to a StdioOnnaStick instance results in Twisted log messages.

Log messages are generated every time a '\n' is encountered.
zHello there
This is a testzHello therez!
zThis is a test!N)r   ÚStdioOnnaStickrÙ   r/   r}  ©r1   Ústdios   & r   Ú
test_writeÚStdioOnnaStickTests.test_writeÊ  se   € ô ×"Ò"Ó$ˆØ�‰Ð1Ô2Ø×Ñ˜×,Ñ,Ó.°°Ô@Ø�‰�EÔØ×Ñ˜×,Ñ,Ó.°Ð@QÐ0RÖSr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rs  Ö  s   € ÷ 7ñ 7˜tñ 7r   c                óö   € \         P                  ! 4       pVP                  R4       V P                  V P                  ^ ,          R,          4       V P                  V P                  ^ ,          R,          4       R# )zc
The log messages written by StdioOnnaStick have printed=1 keyword, and
by default are not errors.
zhello
r9   ÚprintedN)r   r�  rÙ   ÚassertFalseru  rJ   r‚  s   & r   Útest_metadataÚ!StdioOnnaStickTests.test_metadataÖ  sT   € ô
 ×"Ò"Ó$ˆØ�‰�IÔØ×Ñ˜Ÿ™¨Õ+¨IÕ6Ô7Ø�‰˜Ÿ™¨Õ*¨9Õ5Ö6r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rs  à  s   € ÷ Dñ D ñ Dr   c                óš   € \         P                  ! 4       pVP                  RR.4       V P                  V P	                  4       RR.4       R# )zD
Writing lines to a StdioOnnaStick results in Twisted log messages.
zlog 1zlog 2N)r   r�  Ú
writelinesr/   r}  r‚  s   & r   Útest_writeLinesÚ#StdioOnnaStickTests.test_writeLinesà  sC   € ô ×"Ò"Ó$ˆØ×Ñ˜' 7Ð+Ô,Ø×Ñ˜×,Ñ,Ó.°¸'Ð0BÖCr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rs  è  s   € ÷ 	Dñ 	D˜Dñ 	Dr   c                ó  € \         P                  p\        P                  ! 4       \         n        V P	                  \
        \         RV4       \        RRR7       \        R4       V P                  V P                  4       R.4       R# )zG
When StdioOnnaStick is set as sys.stdout, prints become log messages.
r§  ÚThisÚ )Úendz	is a testzThis is a testN)	r¬  r§  r   r�  rc   r«  r¸  r/   r}  )r1   Ú	oldStdouts   & r   Ú
test_printÚStdioOnnaStickTests.test_printè  s^   € ô —J‘Jˆ	Ü×'Ò'Ó)ŒŒ
Ø�‰œ¤ h°	Ô:Üˆf˜#ÕÜˆkÔØ×Ñ˜×,Ñ,Ó.Ð1AÐ0BÖCr   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rs  ó  s   € ÷ 7ñ 7˜Dñ 7r   c                ó¨   € \         P                  ! RR7      pVP                  R4       V P                  V P                  ^ ,          R,          4       R# )zB
StdioOnnaStick created with isError=True log messages as errors.
T)r9   zlog 1
r9   N)r   r�  rÙ   rJ   ru  r‚  s   & r   Ú
test_errorÚStdioOnnaStickTests.test_erroró  s:   € ô ×"Ò"¨4Ô0ˆØ�‰�IÔØ�‰˜Ÿ™¨Õ*¨9Õ5Ö6r   c               ó   € V ^8„  d   QhRR/# r    r   )r$   s   "r   r%   rs  û  s   € ÷ 
ñ 
˜dñ 
r   c                óª  € Rp\         P                  ! RR7      pV P                  VP                  R4       VP	                  VR,           4       VP                  RV,           .4       \        P                  pV\        n        V P                  \        \        RV4       \        V4       V P                  V P                  4       VRV,           V.4       R# )z´
StdioOnnaStick converts unicode prints to byte strings on Python 2, in
order to be compatible with the normal stdout/stderr objects.

On Python 3, the prints are left unmodified.
r   zutf-8)r¾  Ú
zAlso, r§  N)r   r�  r/   r¾  rÙ   rŽ  r¬  r§  rc   r«  r¸  r}  )r1   ÚunicodeStringrƒ  r–  s   &   r   Útest_unicodeÚ StdioOnnaStickTests.test_unicodeû  s¨   € ð EˆÜ×"Ò"¨GÔ4ˆØ×Ñ˜Ÿ™¨Ô1Ø�‰�M DÕ(Ô)Ø×Ñ˜( ]Õ2Ð3Ô4Ü—J‘Jˆ	ØŒŒ
Ø�‰œ¤ h°	Ô:äˆmÔØ×ÑØ×ÑÓ!Ø˜H }Õ4°mÐDö	
r   )ru  N)r   r   r   r   r   rf   r  r}  r„  rŠ  r�  r—  r›  r¡  r   r   r   r   rq  rq  »  s=   † ñõ0õ3õ@õ
Tõ7õDõ	Dõ7÷
ñ 
r   rq  )5r   Ú
__future__r   rg  r  r6  r¬  rl   r±   Úior   r   Útypingr   r   Úzope.interfacer   r   Útwisted.loggerr	   r
   r   r   rÁ  r   ré  Útwisted.logger.test.test_stdlibr   Útwisted.pythonr   r   Útwisted.python.logÚtwisted.trialr   ÚWarningr   ÚSynchronousTestCaser   rZ   rÕ   rÓ   Úregisterrà   rì   rö   rø   r  r  r$  r  rA  r\  rq  r   r   r   Ú<module>r¯     sQ  ðñõ #ã Û Û 	Û 
Û Û ß ß !å &å ÷õ õ >ß 'Ý +Ý "ô�'ô ôA>˜X×9Ñ9ô A>ôHy7ˆx×+Ñ+ô y7ôxˆt�E�{ô ð ‡‚�Ô ÷ñ ÷
ñ ô	�'˜8ô 	ô Xô ÷Mñ Mô.,Ð1°8×3OÑ3Oô ,ô4N
Ð1°8×3OÑ3Oô N
ôbI3 ×!=Ñ!=ô I3ôX,5 H×$@Ñ$@ô ,5ô^,P˜8×7Ñ7ô ,Pô^T
˜(×6Ñ6ö T
r   