+
    Dfj!"                    R   R t ^ RIHt ^ RIt^ RIt^ RIHt ^ RIH	t	H
t
 ^ RIHtHtHtHt ^ RIHtHtHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^RIHtHt ^RI H!t! ^RI"H#t# R R lt$ ! R R4      t% ! R R]PL                  4      t'R R lt( ! R R]PR                  4      t*R# )z+
Test cases for L{twisted.logger._format}.
)annotationsN)getsourcefile)BytesIOTextIOWrapper)	Formatter	LogRecordStreamHandler	getLogger)ListOptionalTuple)BrokenMethodImplementation)verifyObject)currentframe)Failure)unittest)ILogObserverLogEvent)LogLevel)STDLibLogObserverc                   V ^8  d   QhRR/# )   returnzTuple[Optional[str], int] )formats   "A/usr/lib/python3/dist-packages/twisted/logger/test/test_stdlib.py__annotate__r      s      +     c                     \        ^4      p \        \        P                  V P                  R,          ,          4      V P
                  ^,           3# )z
Retrive the file name and line number immediately after where this function
is called.

@return: the file name and line number
__name__)r   r   sysmodules	f_globalsf_lineno)callers    r   nextLiner%      s?     !_Fckk&"2"2:">?@! r   c                  >    ] tR t^)tRtR R ltR R ltR R ltRtR	# )
StdlibLoggingContainerz>
Continer for a test configuration of stdlib logging objects.
c                   V ^8  d   QhRR/# r   r   Noner   )r   s   "r   r   #StdlibLoggingContainer.__annotate__.   s     
7 
7$ 
7r   c                	   \        R 4      V n        V P                  P                  4       V n        V P                  P	                  \
        P                  4       \        4       V n        V P                  P                  V P                  4       \        4       w  V n        V n        V P                  P                  V P                  4       R# ) N)r	   
rootLoggergetEffectiveLeveloriginalLevelsetLevel
py_loggingDEBUGBufferedHandlerbufferedHandler
addHandlerhandlerAndBytesIOstreamHandleroutputselfs   &r   __init__StdlibLoggingContainer.__init__.   s    #B-!__>>@  !1!12.0""4#7#78*;*='DK""4#5#56r   c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   r+   :   s      t r   c                L   V P                   P                  V P                  4       V P                   P                  V P                  4       V P                   P                  V P
                  4       V P
                  P                  4        V P                  P                  4        R# )z
Close the logger.
N)r.   r1   r0   removeHandlerr5   r8   closer9   r:   s   &r   rA   StdlibLoggingContainer.close:   sn     	  !3!34%%d&:&:;%%d&8&89  "r   c                   V ^8  d   QhRR/# )r   r   strr   )r   s   "r   r   r+   D   s     6 6c 6r   c                T    V P                   P                  4       P                  R4      # )zL
Get the output to the underlying stream as text.

@return: the output text
utf-8)r9   getvaluedecoder:   s   &r   outputAsText#StdlibLoggingContainer.outputAsTextD   s"     {{##%,,W55r   )r5   r0   r9   r.   r8   N)	r   
__module____qualname____firstlineno____doc__r<   rA   rI   __static_attributes__r   r   r   r'   r'   )   s    
76 6r   r'   c                      ] tR t^Mt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tR# )STDLibLogObserverTestsz!
Tests for L{STDLibLogObserver}.
c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   #STDLibLogObserverTests.__annotate__R   s       r   c                    \        4       p \        \        V4       R#   \         d   pT P	                  T4        Rp?R# Rp?ii ; i)z-
L{STDLibLogObserver} is an L{ILogObserver}.
N)r   r   r   r   fail)r;   observeres   &  r   test_interface%STDLibLogObserverTests.test_interfaceR   s8     %&	x0) 	IIaLL	s    AA  Ac                   V ^8  d   QhRR/# )r   r   r'   r   )r   s   "r   r   rS   \   s      1 r   c                P    \        4       pV P                  VP                  4       V# )zR
Create a logging object we can use to test with.

@return: a stdlib-style logger
)r'   
addCleanuprA   )r;   loggers   & r   	py_logger STDLibLogObserverTests.py_logger\   s!     ()%r   c                    V ^8  d   QhRRRR/# )r   eventsr   r   zTuple[List[LogRecord], str]r   )r   s   "r   r   rS   f   s     = = =-H =r   c                    V P                  4       p\        \        P                  ^,           R7      pV F  pV! V4       K  	  VP                  P                  VP                  4       3# )z
Send one or more events to Python's logging module, and capture the
emitted L{LogRecord}s and output stream as a string.

@param events: events

@return: a tuple: (records, output)
)
stackDepth)r^   r   defaultStackDepthr5   recordsrI   )r;   ra   plrV   events   &*   r   logEventSTDLibLogObserverTests.logEventf   s`     ^^$ )::
 EUO  !!))2??+<<<r   c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   rS   |   s     5 54 5r   c                    V P                  / 4      w  rV P                  \        V4      ^4       V P                  V^ ,          P                  R4       R# )z
Logger name.
twistedN)rh   assertEquallennamer;   re   r9   s   &  r   	test_name STDLibLogObserverTests.test_name|   s@     --+Wq))4r   c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   rS      s     !J !JT !Jr   c                   R\         P                  \        P                  \         P                  \        P
                  \         P                  \        P                  \         P                  \        P                  \         P                  \        P                  \         P                  /p. pVP                  4        F.  w  r4/ pVe   W5R&   \        V4      VR&   VP                  V4       K0  	  V P                  ! V!  w  rgV P!                  \#        V4      \#        V4      4       \%        \#        V4      4       F2  pV P!                  Wh,          P&                  W(,          R,          4       K4  	  R# )z
Log levels.
N	log_level
py_levelno)r2   INFOr   debugr3   infowarnWARNINGerrorERRORcriticalCRITICALitemsintappendrh   rm   rn   rangelevelno)	r;   levelMappingra   levelpyLevelrg   re   r9   is	   &        r   test_levels"STDLibLogObserverTests.test_levels   s   
 *//NNJ,,MM:??MM:--NNJ,,z22
 *002NEE  %*k" #&g,E,MM%  3 --0Ws<'89 s7|$AWZ//<1HI %r   c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   rS      s     / / /r   c                J   \        4       w  rV P                  / 4      w  r4V P                  \        V4      ^4       V P                  V^ ,          P                  V4       V P                  V^ ,          P
                  V4       V P                  V^ ,          P                  4       R# )zJ
C{pathname}, C{lineno}, C{exc_info}, C{func} is set properly on
records.
N)r%   rh   rm   rn   pathnamelinenoassertIsNoneexc_info)r;   filenamelogLinere   r9   s   &    r   test_callerInfo&STDLibLogObserverTests.test_callerInfo   s~    
 %J--+Wq),,h7**G4'!*--.r   c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   rS      s     	. 	.$ 	.r   c                   \        RRR7      pV P                  V4      w  r#V P                  \        V4      ^4       V P                  \	        V^ ,          P
                  4      R4       V P                  V^ ,          P                  R4       R# )z<
Basic formattable event passes the format along correctly.
Hello, {who}!dude
log_formatwhozHello, dude!Nr   )dictrh   rm   rn   rD   msgargsr;   rg   re   r9   s   &   r   test_basicFormat'STDLibLogObserverTests.test_basicFormat   si     V<--.Wq)WQZ^^,n="-r   c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   rS      s     J J$ Jr   c                    \        RRR7      pV P                  V4      w  r#V P                  \        V4      ^4       V P	                  VP                  R4      \        V4      4       R# )z,
Basic formattable event renders correctly.
r   r   r   z:Hello, dude!
N)r   rh   rm   rn   
assertTrueendswithreprr   s   &   r   test_basicFormatRendered/STDLibLogObserverTests.test_basicFormatRendered   sP     V<--.Wq)(9:DLIr   c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   rS      s     2 2t 2r   c                    V P                  / 4      w  rV P                  \        V4      ^4       V P                  \        V^ ,          P                  4      R4       R# )z
Event with no format.
r-   N)rh   rm   rn   rD   r   rp   s   &  r   test_noFormat$STDLibLogObserverTests.test_noFormat   sE     --+Wq)WQZ^^,b1r   c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   rS      s     3 3d 3r   c                <   R R lp V! 4        \        RRXR7      pV P                  V4      w  rEV P	                  \        V4      ^4       V P                  RV4       V P                  RV4       V P                  RV4       R#   \          d    \        4       p Li ; i)	z;
An event with a failure logs the failure details as well.
c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   9STDLibLogObserverTests.test_failure.<locals>.__annotate__        	 	d 	r   c                     ^^ ,           R#    Nr   r   r   r   failing_func9STDLibLogObserverTests.test_failure.<locals>.failing_func       EEr   Hi mommer   r   log_failurein failing_funcZeroDivisionErrorN)r   r   r   rh   rm   rn   assertInr;   r   failurerg   re   r9   s   &     r   test_failure#STDLibLogObserverTests.test_failure   s    
		 N dH--.Wq)h''0)62 ! 	 iG	 s   B BBc                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   rS      s     3 3T 3r   c                \   R R lp V! 4        \        RRXR7      pV P	                  V4      w  rEV P                  \        V4      ^4       V P                  RV4       V P                  RV4       V P                  RV4       R#   \          d    \        4       pTP                  4         Li ; i)	z
A cleaned Failure object has a fake traceback object; make sure that
logging such a failure still results in the exception details being
logged.
c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   @STDLibLogObserverTests.test_cleanedFailure.<locals>.__annotate__   r   r   c                     ^^ ,           R# r   r   r   r   r   r   @STDLibLogObserverTests.test_cleanedFailure.<locals>.failing_func   r   r   r   r   r   r   r   N)r   r   cleanFailurer   rh   rm   rn   r   r   s   &     r   test_cleanedFailure*STDLibLogObserverTests.test_cleanedFailure   s    		#N
 dH--.Wq)h''0)62 ! 	#iG  "	#s   B %B+*B+r   N)r   rK   rL   rM   rN   rX   r^   rh   rq   r   r   r   r   r   r   r   rO   r   r   r   rQ   rQ   M   sF    =,5!JF/"	.J23*3 3r   rQ   c                   V ^8  d   QhRR/# )r   r   z,tuple[StreamHandler[TextIOWrapper], BytesIO]r   )r   s   "r   r   r     s      G r   c                     \        4       p \        P                  p\        V RRR7      p\	        V4      p\        V4      pVP                  V4       W@3# )z
Construct a 2-tuple of C{(StreamHandler, BytesIO)} for testing interaction
with the 'logging' module.

@return: handler and io object
rF   
)encodingnewline)r   r2   BASIC_FORMATr   r   r   setFormatter)r9   templatestream	formatterhandlers        r   r7   r7     sN     YF&&H6GTBF(#IF#G#?r   c                  2    ] tR tRtRtR R ltR R ltRtR# )	r4   i  zF
A L{py_logging.Handler} that remembers all logged records in a list.
c                   V ^8  d   QhRR/# r)   r   )r   s   "r   r   BufferedHandler.__annotate__  s     + +$ +r   c                R    \         P                  P                  V 4       . V n        R# )z%
Initialize this L{BufferedHandler}.
N)r2   Handlerr<   re   r:   s   &r   r<   BufferedHandler.__init__  s     	##D)(*r   c                    V ^8  d   QhRRRR/# )r   recordr   r   r*   r   )r   s   "r   r   r   !  s     $ $9 $ $r   c                <    V P                   P                  V4       R# )z
Remember the record.
N)re   r   )r;   r   s   &&r   emitBufferedHandler.emit!  s     	F#r   )re   N)r   rK   rL   rM   rN   r<   r   rO   r   r   r   r4   r4     s    +$ $r   r4   )+rN   
__future__r   loggingr2   r    inspectr   ior   r   r   r   r   r	   typingr
   r   r   zope.interface.exceptionsr   zope.interface.verifyr   twisted.python.compatr   twisted.python.failurer   twisted.trialr   _interfacesr   r   _levelsr   _stdlibr   r%   r'   TestCaserQ   r7   r   r4   r   r   r   <module>r      s{    #  
 ! % B B ( ( @ . . * " 0  '!6 !6Hu3X.. u3p $j(( $r   