Ë
    oj   ã                   óÜ   — d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ ddlmZ  G d„ de«      Z G d„ d«      Z G d„ dej4                  «      Zy)z+
Test cases for L{twisted.logger._logger}.
é    )ÚListÚOptionalÚTypeÚcast)Úimplementer)ÚNamedConstant)Úunittesté   )ÚformatEvent)ÚglobalLogPublisher)ÚILogObserverÚLogEvent)ÚInvalidLogLevelErrorÚLogLevel©ÚLoggerc            	       ó2   — e Zd ZdZ	 ddedee   deddfd„Zy)	Ú
TestLoggerz^
    L{Logger} with an overridden C{emit} method that keeps track of received
    events.
    NÚlevelÚformatÚkwargsÚreturnc                 ó  ‡ — t        t        «      dt        dd fˆ fd„«       }t        j                  |«       	 t        j                  ‰ ||fi |¤Ž t        j                  |«       |||dœ‰ _        y # t        j                  |«       w xY w)NÚeventr   c                 ó   •— | ‰_         y ©N)r   ©r   Úselfs    €úA/usr/lib/python3/dist-packages/twisted/logger/test/test_logger.pyÚobserverz!TestLogger.emit.<locals>.observer   s
   ø€ àˆD�Jó    )r   r   r   )	r   r   r   r   ÚaddObserverr   ÚemitÚremoveObserverÚemitted)r   r   r   r   r    s   `    r   r#   zTestLogger.emit   sˆ   ø€ ô 
”\Ó	"ð	œHð 	¨ô 	ó 
#ð	ô 	×&Ñ& xÔ0ð	8Ü�K‰K˜˜e VÑ6¨vÒ6ä×-Ñ-¨hÔ7ð ØØñ
ˆ�øô ×-Ñ-¨hÕ7ús   ¸A1 Á1Br   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚobjectr#   © r!   r   r   r      s6   „ ñð =Añ
Ø"ð
Ø,4°S©Mð
ØLRð
à	ô
r!   r   c                   óB   — e Zd ZdZ e«       Zddee   ddfd„Zdefd„Z	y)ÚLogComposedObjectz3
    A regular object, with a logger attached.
    NÚstater   c                 ó   — || _         y r   ©r/   )r   r/   s     r   Ú__init__zLogComposedObject.__init__7   s	   € Øˆ�
r!   c                 ó"   — d| j                   › d�S )Nz<LogComposedObject ú>r1   )r   s    r   Ú__str__zLogComposedObject.__str__:   s   € Ø$ T§Z¡Z L°Ð2Ð2r!   r   )
r&   r'   r(   r)   r   Úlogr   r*   r2   r5   r,   r!   r   r.   r.   0   s3   „ ññ ‹,€Cñ˜h s™mð °tó ð3˜ô 3r!   r.   c                   ó€   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd	„Z
dd
„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zy)ÚLoggerTestsz
    Tests for L{Logger}.
    Nc                 ón   — d}t        |«      }| j                  t        |«      dt        |«      › d�«       y)z"
        repr() on Logger
        Úblearghz<Logger r4   N)r   ÚassertEqualÚrepr)r   Ú	namespacer6   s      r   Ú	test_reprzLoggerTests.test_reprC   s5   € ð ˆ	Ü�YÓˆØ×Ñœ˜c› h¬t°I«Ð.?¸qÐ$AÕBr!   c                 óX   — t        «       }| j                  |j                  t        «       y)z3
        Default namespace is module name.
        N)r   r;   r=   r&   ©r   r6   s     r   Útest_namespaceDefaultz!LoggerTests.test_namespaceDefaultK   s   € ô ‹hˆØ×Ñ˜Ÿ™¬Õ1r!   c                 óŒ   — g }t        dt        t        ¬«      t        «       «       | j	                  |d   j
                  d«       y)z»
        Default namespace is C{"<unknown>"} when a logger is created from a
        context in which is can't be determined automatically and no namespace
        was specified.
        zresult.append(Logger())r   r   z	<unknown>N)ÚexecÚdictr   Úlocalsr;   r=   )r   Úresults     r   Útest_namespaceOMGItsTooHardz'LoggerTests.test_namespaceOMGItsTooHardR   s=   € ð  "ˆÜØ%ÜœÔÜ‹Hô	
ð
 	×Ñ˜ ™×,Ñ,¨kÕ:r!   c                 ó’  — t        «       }dj                  |j                  |j                  j                  «      }| j                  t        t        |j                  «      j                  |«       | j                  t        t        t           t         j                  «      j                  |«       | j                  t        t        t           t         j                  «      j                  t         «       | j                  t        t        |j                  «      j                  |«       | j                  t        «       j                  «       y)zƒ
        Default namespace for classes using L{Logger} as a descriptor is the
        class name they were retrieved from.
        z{}.{}N)r.   r   r'   Ú	__class__r&   r;   r   r   r6   r=   r   ÚassertIsÚsourceÚassertIsNoner   )r   ÚobjÚexpectedNamespaces      r   Útest_namespaceAttributez#LoggerTests.test_namespaceAttribute`   sâ   € ô
  Ó!ˆà#ŸN™NØ�N‰NØ�M‰M×"Ñ"ó
Ðð
 	×Ñœœj¨#¯'©'Ó2×<Ñ<Ð>OÔPØ×ÑÜ””jÑ!Ô#4×#8Ñ#8Ó9×CÑCÐEVô	
ð 	�‰Ü””jÑ!Ô#4×#8Ñ#8Ó9×@Ñ@ÔBSô	
ð 	�‰”dœ: s§w¡wÓ/×6Ñ6¸Ô<Ø×Ñœ&›(Ÿ/™/Õ*r!   c                 ó¾   ‡— g Š G ˆfd„d«      }|j                   j                  d«       | j                  t        ‰«      d«       | j                  ‰d   d   d«       y)zH
        When used as a descriptor, the observer is propagated.
        c                   óD   •— e Zd Z e eeW ° j                  «      ¬«      Zy)ú5LoggerTests.test_descriptorObserver.<locals>.MyObject©r    N)r&   r'   r(   r   r   r   Úappendr6   )Úobserveds   €r   ÚMyObjectrR   |   s   ø„ Ù¡$ |±X·_±_Ó"EÔF‰Cr!   rV   Úhelloé   r   Ú
log_formatN)r6   Úinfor;   Úlen)r   rV   rU   s     @r   Útest_descriptorObserverz#LoggerTests.test_descriptorObserverv   sW   ø€ ð $&ˆ÷	Gó 	Gð 	�‰×Ñ˜'Ô"Ø×Ñœ˜X›¨Ô*Ø×Ñ˜ !™ \Ñ2°GÕ<r!   c                 ó4  — t        d«      }t        t        |j                  «      }|j	                  d«       | j                  d|j                  «       | j                  |j                  d   |«       t        |j                  «      }| j                  d|«       y)zƒ
        On instances that have a L{Logger} class attribute, the C{log_source}
        key is available to format strings.
        rW   zHello, {log_source}.Ú
log_sourcez!Hello, <LogComposedObject hello>.N)	r.   r   r   r6   ÚerrorÚassertInr   r;   r   )r   rM   r6   Ústuffs       r   Ú!test_sourceAvailableForFormattingz-LoggerTests.test_sourceAvailableForFormattingƒ   ss   € ô
   Ó(ˆÜ”:˜sŸw™wÓ'ˆØ�	‰	Ð(Ô)à�‰�l C§I¡IÔ.Ø×Ñ˜Ÿ™ <Ñ0°#Ô6ä˜CŸI™IÓ&ˆØ�‰Ð9¸5ÕAr!   c                 ó^  — t        «       }t        j                  «       D �]‹  }d}|j                  |j                  ¬«      }t        ||j                  «      } ||||j                  ¬«       | j                  |j                  d   |«       | j                  |j                  d   |«       | j                  |j                  d   d   |«       | j                  t        |d«      d	«       | j                  |j                  d
   |«       | j                  |j                  d   |«       | j                  |j                  d   t        «       | j                  |j                  d   «       | j                  |j                  d   |«       | j                  t        |j                  «      |«       �ŒŽ y)z]
        Test that log levels and messages are emitted correctly for
        Logger.
        zThis is a {level_name} message)Ú
level_name)Újunkrd   r   r   r   re   r   zNo event observed.rY   Ú	log_levelÚlog_namespacer^   N)r   r   Úiterconstantsr   ÚnameÚgetattrr;   r%   Ú
assertTrueÚhasattrr   r&   rL   r   )r   r6   r   r   ÚmessageÚ	logMethods         r   Útest_basicLoggerzLoggerTests.test_basicLogger’   sX  € ô
 ‹lˆä×+Ñ+Ó-ó 	>ˆEØ5ˆFØ—m‘m¨u¯z©z�mÓ:ˆGä  U§Z¡ZÓ0ˆIÙ�f 7°u·z±zÕBð ×Ñ˜SŸ[™[¨Ñ1°5Ô9Ø×Ñ˜SŸ[™[¨Ñ2°FÔ;Ø×Ñ˜SŸ[™[¨Ñ2°6Ñ:¸GÔDà�O‰OœG C¨Ó1Ð3GÔHà×Ñ˜SŸY™Y |Ñ4°fÔ=Ø×Ñ˜SŸY™Y {Ñ3°UÔ;Ø×Ñ˜SŸY™Y Ñ7¼ÔBØ×Ñ˜cŸi™i¨Ñ5Ô6Ø×Ñ˜SŸY™Y vÑ.°Ô8à×Ñœ[¨¯©Ó3°WÖ=ñ)	>r!   c                 ó´   ‡ ‡‡— t        t        «      dt        ddfˆˆ fd„«       Š G ˆfd„d«      Št        t        ‰j
                  «      j                  «        y)z>
        C{log_source} event key refers to the class.
        r   r   Nc                 ó0   •— ‰j                  | d   ‰«       y ©Nr^   ©r;   )r   ÚThingor   s    €€r   r    z0LoggerTests.test_sourceOnClass.<locals>.observer´   ó   ø€ à×Ñ˜U <Ñ0°&Õ9r!   c                   ó"   •— e Zd Z eW ° ¬«      Zy)ú.LoggerTests.test_sourceOnClass.<locals>.ThingorS   N©r&   r'   r(   r   r6   rS   s   €r   rt   rw   ¸   ó   ø„ Ù¡hÔ/‰Cr!   rt   ©r   r   r   r   r   r6   rZ   )r   rt   r    s   `@@r   Útest_sourceOnClasszLoggerTests.test_sourceOnClass¯   sM   ú€ ô
 
”\Ó	"ð	:œHð 	:¨õ 	:ó 
#ð	:÷	0ó 	0ô 	ŒZ˜Ÿ™Ó$×)Ñ)Õ+r!   c                 óÂ   ‡ ‡‡— t        t        «      dt        ddfˆ ˆfd„«       Š G ˆfd„d«      } |«       Št        t        ‰j
                  «      j                  «        y)zA
        C{log_source} event key refers to the instance.
        r   r   Nc                 ó0   •— ‰j                  | d   ‰«       y rr   rs   )r   r   Úthingos    €€r   r    z3LoggerTests.test_sourceOnInstance.<locals>.observerÂ   ru   r!   c                   ó"   •— e Zd Z eW ° ¬«      Zy)ú1LoggerTests.test_sourceOnInstance.<locals>.ThingorS   Nrx   rS   s   €r   rt   r€   Æ   ry   r!   rt   rz   )r   rt   r    r~   s   ` @@r   Útest_sourceOnInstancez!LoggerTests.test_sourceOnInstance½   sT   ú€ ô
 
”\Ó	"ð	:œHð 	:¨õ 	:ó 
#ð	:÷	0ó 	0ñ “ˆÜŒZ˜Ÿ™Ó$×)Ñ)Õ+r!   c                 ó~   ‡ — t        t        «      dt        ddfˆ fd„«       }t        |¬«      }|j	                  «        y)z5
        C{log_source} event key is L{None}.
        r   r   Nc                 ó.   •— ‰j                  | d   «       y rr   )rL   r   s    €r   r    z0LoggerTests.test_sourceUnbound.<locals>.observerÑ   s   ø€ à×Ñ˜e LÑ1Õ2r!   rS   ©r   r   r   r   rZ   )r   r    r6   s   `  r   Útest_sourceUnboundzLoggerTests.test_sourceUnboundÌ   s?   ø€ ô
 
”\Ó	"ð	3œHð 	3¨ô 	3ó 
#ð	3ô  (Ô+ˆØ�‰�
r!   c                 óh  — t        «       }	 t        d«      ‚# t        $ r |j                  d«       Y nw xY w| j                  t        «      }| j	                  t        |«      d«       | j	                  |j                  d   t        j                  «       | j	                  |j                  d   d«       y)z?
        Test that log.failure() emits the right data.
        zbaloney!ÚWhoopsrX   r   r   N)	r   ÚRuntimeErrorÚfailureÚflushLoggedErrorsr;   r[   r%   r   Úcritical©r   r6   Úerrorss      r   Útest_defaultFailurezLoggerTests.test_defaultFailureØ   s”   € ô ‹lˆð	"Ü˜zÓ*Ð*øÜò 	"Ø�K‰K˜Ö!ð	"úð ×'Ñ'¬Ó5ˆØ×Ñœ˜V› aÔ(à×Ñ˜Ÿ™ WÑ-¬x×/@Ñ/@ÔAØ×Ñ˜Ÿ™ XÑ.°Õ9s   Œ —4³4c                 ó†  — t        «       }|j                  ddt        j                  dd¬«       | j	                  |j
                  d   d«       | j	                  |j
                  d   t        j                  «       | j	                  |j
                  d   |j                  «       | j                  |j
                  d	   «       y
)zQ
        Make sure that kwargs conflicting with args don't pass through.
        Ú*ú#z*namespace*z*source*)rY   rf   rg   r^   rY   rf   rg   r^   N)r   Úwarnr   r_   r;   r   r=   rL   r@   s     r   Útest_conflictingKwargsz"LoggerTests.test_conflictingKwargsè   s›   € ô ‹lˆà�‰ØØÜ—n‘nØ'Ø!ð 	ô 	
ð 	×Ñ˜Ÿ™ <Ñ0°#Ô6Ø×Ñ˜Ÿ™ ;Ñ/´·±Ô?Ø×Ñ˜Ÿ™ ?Ñ3°S·]±]ÔCØ×Ñ˜#Ÿ)™) LÑ1Õ2r!   c                 óš   — t        «       }|j                  d«       | j                  t        «      }| j	                  t        |«      d«       y)zA
        Test passing in a bogus log level to C{emit()}.
        z*bogus*rX   N)r   r#   rŠ   r   r;   r[   rŒ   s      r   Útest_logInvalidLogLevelz#LoggerTests.test_logInvalidLogLevelû   s<   € ô ‹lˆà�‰�Ôà×'Ñ'Ô(<Ó=ˆØ×Ñœ˜V› aÕ(r!   c                 óÎ   ‡ ‡‡‡— t        t        «      dt        ddfˆfd„«       Št        t        «      dt        ddfˆˆˆ fd„«       Št        ‰¬«      Š‰j	                  dg ¬«       y)	zE
        Tracing keeps track of forwarding to the publisher.
        r   r   Nc                 ó   •—  ‰| «       y r   r,   )r   r    s    €r   Ú	publisherz)LoggerTests.test_trace.<locals>.publisher  s
   ø€ á�U�Or!   c                 ó6   •— ‰j                  | d   ‰‰fg«       y )NÚ	log_tracers   )r   r6   r˜   r   s    €€€r   r    z(LoggerTests.test_trace.<locals>.observer  s    ø€ à×Ñ˜U ;Ñ/°3¸	Ð2BÐ1CÕDr!   rS   zHello.)rš   r„   )r   r6   r    r˜   s   `@@@r   Ú
test_tracezLoggerTests.test_trace  sq   û€ ô
 
”\Ó	"ð	œXð 	¨$ô 	ó 
#ð	ô 
”\Ó	"ð	EœHð 	E¨ö 	Eó 
#ð	Eô  )Ô,ˆØ�‰� RˆÕ(r!   )r   N)r&   r'   r(   r)   r>   rA   rG   rO   r\   rb   ro   r{   r�   r…   rŽ   r“   r•   r›   r,   r!   r   r8   r8   >   sO   „ ñóCó2ó;ó+ó,=óBó>ó:,ó,ó
ó:ó 3ó&	)ô)r!   r8   N)r)   Útypingr   r   r   r   Úzope.interfacer   Ú
constantlyr   Útwisted.trialr	   Ú_formatr   Ú_globalr   Ú_interfacesr   r   Ú_levelsr   r   Ú_loggerr   r   r.   ÚTestCaser8   r,   r!   r   ú<module>r¦      sT   ðñ÷ .Ó -å &å $å "Ý !Ý (ß 0ß 4Ý ô
�ô 
÷43ñ 3ôV)�(×#Ñ#õ V)r!   