Ϫf dZddlmZmZmZmZddlmZddlm Z ddl m Z ddl m Z ddlmZdd lmZmZdd lmZmZdd lmZGd d eZGddZGdde j4Zy)z+ Test cases for L{twisted.logger._logger}. )ListOptionalTypecast) implementer) NamedConstant)unittest) formatEvent)globalLogPublisher) ILogObserverLogEvent)InvalidLogLevelErrorLogLevelLoggerc 2eZdZdZ ddedeededdfdZy) TestLoggerz^ L{Logger} with an overridden C{emit} method that keeps track of received events. Nlevelformatkwargsreturnc ttdtddffd }tj| t j ||fi|tj||||d_y#tj|wxYw)Neventrc|_yN)rrselfs A/usr/lib/python3/dist-packages/twisted/logger/test/test_logger.pyobserverz!TestLogger.emit..observers DJ)rrr) rr rr addObserverremitremoveObserveremitted)rrrrr s` rr#zTestLogger.emits \ " H   #  &&x0 8 KKeV 6v 6  - -h 7    - -h 7s A11Br) __name__ __module__ __qualname____doc__rrstrobjectr#r!rrrs6 =A " ,4SM LR  r!rcBeZdZdZeZddeeddfdZdefdZ y)LogComposedObjectz3 A regular object, with a logger attached. Nstaterc||_yrr/)rr/s r__init__zLogComposedObject.__init__7s  r!c"d|jdS)Nzr1)rs r__str__zLogComposedObject.__str__:s$TZZL22r!r) r&r'r(r)rlogrr*r2r5r,r!rr.r.0s3 ,Chsmt33r!r.ceZdZdZddZddZddZddZddZddZ dd Z dd Z dd Z dd Z dd ZddZddZddZy) LoggerTestsz Tests for L{Logger}. Ncnd}t|}|jt|dt|dy)z" repr() on Logger blearghz"} when a logger is created from a context in which is can't be determined automatically and no namespace was specified. zresult.append(Logger())rrz N)execdictrlocalsr;r=)rresults rtest_namespaceOMGItsTooHardz'LoggerTests.test_namespaceOMGItsTooHardRs= " %   H ,,k:r!ct}dj|j|jj}|j t t|jj||j t tttjj||jt tttjjt|jt t|jj||jtjy)z Default namespace for classes using L{Logger} as a descriptor is the class name they were retrieved from. z{}.{}N)r.rr' __class__r&r;rrr6r=rassertIssource assertIsNoner)robjexpectedNamespaces rtest_namespaceAttributez#LoggerTests.test_namespaceAttribute`s  !#NN NN MM " "  j#''2<<>OP  j!#4#8#8 9 C CEV  j!#4#8#8 9 @ @BS  d:sww/66< &(//*r!cgGfdd}|jjd|jtd|jdddy)zH When used as a descriptor, the observer is propagated. cDeZdZeeeWj Zy)5LoggerTests.test_descriptorObserver..MyObjectr N)r&r'r(rrr appendr6)observedsrMyObjectrR|s$|X__"EFCr!rVhellor log_formatN)r6infor;len)rrVrUs @rtest_descriptorObserverz#LoggerTests.test_descriptorObservervsW$& G G  '" X* !\2G.N) r.rrr6errorassertInrr;r )rrMr6stuffs r!test_sourceAvailableForFormattingz-LoggerTests.test_sourceAvailableForFormattingss  (:sww' () lCII. <0#6CII& 95Ar!c^t}tjD]}d}|j|j}t ||j}||||j|j |jd||j |jd||j |jdd||jt|dd |j |jd ||j |jd ||j |jd t|j|jd |j |jd||j t|j|y)z] Test that log levels and messages are emitted correctly for Logger. zThis is a {level_name} message) level_name)junkrdrrrrerzNo event observed.rY log_level log_namespacer^N)rr iterconstantsrnamegetattrr;r% assertTruehasattrrr&rLr )rr6rrmessage logMethods rtest_basicLoggerzLoggerTests.test_basicLoggersX l++- >E5Fmmuzzm:GUZZ0I f7uzz B   S[[15 9   S[[2F ;   S[[26:G D OOGC13G H   SYY|4f =   SYY{3U ;   SYY7 B   cii 5 6   SYYv. 8   [3W =) >r!cttdtddffd Gfddttj j y)z> C{log_source} event key refers to the class. rrNc0j|dyNr^r;)rThingors rr z0LoggerTests.test_sourceOnClass..observer   U<0& 9r!c"eZdZeWZy).LoggerTests.test_sourceOnClass..ThingorSNr&r'r(rr6rSsrrtrw h/Cr!rtrr rrrr6rZ)rrtr s`@@rtest_sourceOnClasszLoggerTests.test_sourceOnClasssM \ " :H : : # : 0 0 Z$))+r!cttdtddffd Gfdd}|ttj j y)zA C{log_source} event key refers to the instance. rrNc0j|dyrrrs)rrthingos rr z3LoggerTests.test_sourceOnInstance..observerrur!c"eZdZeWZy)1LoggerTests.test_sourceOnInstance..ThingorSNrxrSsrrtrryr!rtrz)rrtr r~s` @@rtest_sourceOnInstancez!LoggerTests.test_sourceOnInstancesT \ " :H : : # : 0 0 Z$))+r!c~ttdtddffd }t|}|j y)z5 C{log_source} event key is L{None}. rrNc.j|dyrr)rLrs rr z0LoggerTests.test_sourceUnbound..observers   eL1 2r!rSrr rrrZ)rr r6s` rtest_sourceUnboundzLoggerTests.test_sourceUnbounds? \ " 3H 3 3 # 3(+  r!cht} td#t$r|jdYnwxYw|jt}|j t |d|j |j dtj|j |j ddy)z? Test that log.failure() emits the right data. zbaloney!WhoopsrXrrN) r RuntimeErrorfailureflushLoggedErrorsr;r[r%rcriticalrr6errorss rtest_defaultFailurezLoggerTests.test_defaultFailuresl "z* * " KK ! "'' 5 Va( W-x/@/@A X.9s 44ct}|jddtjdd|j |j dd|j |j dtj|j |j d|j |j|j d y ) zQ Make sure that kwargs conflicting with args don't pass through. *#z *namespace*z*source*)rYrfrgr^rYrfrgr^N)rwarnrr_r;rr=rLr@s rtest_conflictingKwargsz"LoggerTests.test_conflictingKwargssl  nn'!   <0#6 ;/? ?3S]]C #))L12r!ct}|jd|jt}|j t |dy)zA Test passing in a bogus log level to C{emit()}. z*bogus*rXN)rr#rrr;r[rs rtest_logInvalidLogLevelz#LoggerTests.test_logInvalidLogLevels<l ''(<= Va(r!cttdtddffd ttdtddffd tj dgy) zE Tracing keeps track of forwarding to the publisher. rrNc|yrr,)rr s r publisherz)LoggerTests.test_trace..publisher s UOr!c6j|dfgy)N log_tracers)rr6rrs rr z(LoggerTests.test_trace..observers   U;/3 2B1C Dr!rSzHello.)rr)rr6r rs`@@@r test_tracezLoggerTests.test_tracesq \ " X $  #  \ " EH E E # E), R(r!)rN)r&r'r(r)r>rArGrOr\rbror{rrrrrrr,r!rr8r8>sOC2 ;+, = B>: , , : 3& ))r!r8N)r)typingrrrrzope.interfacer constantlyr twisted.trialr _formatr _globalr _interfacesr r_levelsrr_loggerrrr.TestCaser8r,r!rrsT.-&$"!(04  4 3 3V)(##V)r!