
    /Jf                          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j                  ZdS )z+
Test cases for L{twisted.logger._logger}.
    )ListOptionalTypecast)implementer)NamedConstant)unittest   )formatEvent)globalLogPublisher)ILogObserverLogEvent)InvalidLogLevelErrorLogLevelLoggerc            	       :    e Zd ZdZ	 ddedee         deddfdZdS )	
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        |           n# t          j        |           w xY w|||d _        d S )Neventr   c                     | _         d S N)r   r   selfs    b/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/twisted/logger/test/test_logger.pyobserverz!TestLogger.emit.<locals>.observer   s    DJJJ    )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00	8KeV66v666-h7777-h7777 
 
s    A) )A?r   )	__name__
__module____qualname____doc__r   r   strobjectr#    r!   r   r   r      sa          =A
 
"
,4SM
LR
	
 
 
 
 
 
r!   r   c                   P    e Zd ZdZ e            Zddee         ddfdZdefdZ	dS )LogComposedObjectz3
    A regular object, with a logger attached.
    Nstater   c                     || _         d S 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    2TZ2222r!   r   )
r&   r'   r(   r)   r   logr   r*   r2   r5   r,   r!   r   r.   r.   0   sq          *,,C hsm t    3 3 3 3 3 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dS )LoggerTestsz
    Tests for L{Logger}.
    r   Nc                     d}t          |          }|                     t          |          dt          |           d           dS )z"
        repr() on Logger
        blearghz<Logger r4   N)r   assertEqualrepr)r   	namespacer6   s      r   	test_reprzLoggerTests.test_reprC   sJ     	Yc$AtI$A$A$ABBBBBr!   c                 b    t                      }|                     |j        t                     dS )z3
        Default namespace is module name.
        N)r   r;   r=   r&   r   r6   s     r   test_namespaceDefaultz!LoggerTests.test_namespaceDefaultK   s+     hh11111r!   c                     g }t          dt          t                    t                                 |                     |d         j        d           dS )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   sX      "%HH	
 	
 	

 	,k:::::r!   c                    t                      }d                    |j        |j        j                  }|                     t          t          |j                  j	        |           |                     t          t          t                   t           j                  j	        |           |                     t          t          t                   t           j                  j        t                      |                     t          t          |j                  j        |           |                     t                      j                   dS )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   
  !!#NNNM"
 

 	j#'22<>OPPPj!#4#899CEV	
 	
 	
 	j!#4#899@BS	
 	
 	
 	d:sw//6<<<&((/*****r!   c                     g  G fdd          }|j                             d           |                     t                    d           |                     d         d         d           dS )zH
        When used as a descriptor, the observer is propagated.
        c                   F    e Zd Z e ee j                            ZdS )5LoggerTests.test_descriptorObserver.<locals>.MyObjectr    N)r&   r'   r(   r   r   r   appendr6   )observeds   r   MyObjectrR   |   s/        &$$|X_"E"EFFFCCCr!   rV   hello   r   
log_formatN)r6   infor;   len)r   rV   rU   s     @r   test_descriptorObserverz#LoggerTests.test_descriptorObserverv   s     $&	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	'"""X***!\2G<<<<<r!   c                 N   t          d          }t          t          |j                  }|                    d           |                     d|j                   |                     |j        d         |           t          |j                  }|                     d|           dS )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   s    
  ((:sw''		()))lCI...<0#666CI&&95AAAAAr!   c                    t                      }t          j                    D ]}d}|                    |j                  }t          ||j                  } ||||j                   |                     |j        d         |           |                     |j        d         |           |                     |j        d         d         |           |                     t          |d          d	           |                     |j
        d
         |           |                     |j
        d         |           |                     |j
        d         t                     |                     |j
        d                    |                     |j
        d         |           |                     t          |j
                  |           dS )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   s   
 ll+-- 	> 	>E5Fmmuzm::GUZ00IIf7uzBBBB S[15999S[2F;;;S[26:GDDDOOGC113GHHHSY|4f===SY{3U;;;SY7BBBci5666SYv.888[33W====)	> 	>r!   c                      t          t                    dt          ddf fd             G fdd          t          t          j                                                   dS )z>
        C{log_source} event key refers to the class.
        r   r   Nc                 @                         | d                    d S Nr^   r;   )r   Thingor   s    r   r    z0LoggerTests.test_sourceOnClass.<locals>.observer   $    U<0&99999r!   c                   (    e Zd Z e           ZdS ).LoggerTests.test_sourceOnClass.<locals>.ThingorS   Nr&   r'   r(   r   r6   rS   s   r   rt   rw      !        *h///CCCr!   rt   r   r   r   r   r   r6   rZ   )r   rt   r    s   `@@r   test_sourceOnClasszLoggerTests.test_sourceOnClass   s    
 
\	"	"	:H 	: 	: 	: 	: 	: 	: 	: 
#	"	:	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	Z$$))+++++r!   c                      t          t                    dt          ddf fd             G fdd          } |            t          t          j                                                   dS )zA
        C{log_source} event key refers to the instance.
        r   r   Nc                 @                         | d                    d S rr   rs   )r   r   thingos    r   r    z3LoggerTests.test_sourceOnInstance.<locals>.observer   ru   r!   c                   (    e Zd Z e           ZdS )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   s    
 
\	"	"	:H 	: 	: 	: 	: 	: 	: 	: 
#	"	:	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 Z$$))+++++r!   c                      t          t                    dt          ddf fd            }t          |          }|                                 dS )z5
        C{log_source} event key is L{None}.
        r   r   Nc                 >                         | d                    d S rr   )rL   r   s    r   r    z0LoggerTests.test_sourceUnbound.<locals>.observer   s"    eL122222r!   rS   r   r   r   r   rZ   )r   r    r6   s   `  r   test_sourceUnboundzLoggerTests.test_sourceUnbound   sg    
 
\	"	"	3H 	3 	3 	3 	3 	3 	3 
#	"	3 (+++




r!   c                    t                      }	 t          d          # t          $ r |                    d           Y nw xY w|                     t                    }|                     t          |          d           |                     |j        d         t          j                   |                     |j        d         d           dS )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     ll	"z*** 	" 	" 	"KK!!!!!	" ''55Va(((W-x/@AAAX.99999s    A Ac                    t                      }|                    ddt          j        dd           |                     |j        d         d           |                     |j        d         t          j                   |                     |j        d         |j                   |                     |j        d	                    d
S )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     lln'! 	 	
 	
 	
 	<0#666;/????3S]CCC#)L122222r!   c                     t                      }|                    d           |                     t                    }|                     t          |          d           dS )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   sU     ll''(<==Va(((((r!   c                     t          t                    dt          ddffd            t          t                    dt          ddf fd            t                                        dg            dS )	zE
        Tracing keeps track of forwarding to the publisher.
        r   r   Nc                      |            d S r   r,   )r   r    s    r   	publisherz)LoggerTests.test_trace.<locals>.publisher  s    HUOOOOOr!   c                 F                         | d         fg           d S )N	log_tracers   )r   r6   r   r   s    r   r    z(LoggerTests.test_trace.<locals>.observer  s,    U;/3	2B1CDDDDDr!   rS   zHello.)r   r   )r   r6   r    r   s   `@@@r   
test_tracezLoggerTests.test_trace  s    
 
\	"	"	X 	$ 	 	 	 	 	 
#	"	 
\	"	"	EH 	E 	E 	E 	E 	E 	E 	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   >   s>        C C C C2 2 2 2; ; ; ;+ + + +,= = = =B B B B> > > >:, , , ,, , , ,
 
 
 
: : : : 3 3 3 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      sd    . - - - - - - - - - - - & & & & & & $ $ $ $ $ $ " " " " " " ! ! ! ! ! ! ( ( ( ( ( ( 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4      
 
 
 
 
 
 
 
43 3 3 3 3 3 3 3V) V) V) V) V)(# V) V) V) V) V)r!   