
    Rh
                         d dl Z d dlZddlmZ  ej                  dddg      Z G d de j                        Z G d	 d
e      Zy)    N   )_BaseTestCaseContext_LoggingWatcherrecordsoutputc                   "    e Zd ZdZd Zd Zd Zy)_CapturingHandlerzM
    A logging handler capturing all (raw and formatted) logging output.
    c                 d    t         j                  j                  |        t        g g       | _        y N)loggingHandler__init__r   watcherselfs    $/usr/lib/python3.12/unittest/_log.pyr   z_CapturingHandler.__init__   s"      &&r2.    c                      y r    r   s    r   flushz_CapturingHandler.flush   s    r   c                     | j                   j                  j                  |       | j                  |      }| j                   j                  j                  |       y r   )r   r   appendformatr   )r   recordmsgs      r   emitz_CapturingHandler.emit   s@    ##F+kk&!""3'r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   r	   r	   
   s    /(r   r	   c                   &    e Zd ZdZdZd Zd Zd Zy)_AssertLogsContextz6A context manager for assertLogs() and assertNoLogs() z"%(levelname)s:%(name)s:%(message)sc                     t        j                  | |       || _        |r&t        j                  j                  ||      | _        nt        j                  | _        d | _        || _	        y r   )
r   r   logger_namer   _nameToLevelgetlevelINFOr   no_logs)r   	test_caser$   r'   r)   s        r   r   z_AssertLogsContext.__init__!   sP    %%dI6& --11%?DJ DJr   c                 |   t        | j                  t        j                        r| j                  x}| _        n&t        j
                  | j                        x}| _        t        j                  | j                        }t               }|j                  | j                         |j                  |       |j                  | _        |j                  d d  | _        |j                  | _        |j                   | _        |g|_        |j                  | j                         d|_        | j$                  ry |j                  S )NF)
isinstancer$   r   Loggerlogger	getLogger	FormatterLOGGING_FORMATr	   setLevelr'   setFormatterr   handlersold_handlers	old_level	propagateold_propagater)   )r   r.   	formatterhandlers       r   	__enter__z_AssertLogsContext.__enter__+   s    d&&7#'#3#33FT[#*#4#4T5E5E#FFFT[%%d&9&9:	#%$Y'"OOA.#--")

# <<r   c                 r   | j                   | j                  _        | j                  | j                  _        | j                  j                  | j                         |y| j                  rXt        | j                  j                        dkD  r5| j                  dj                  | j                  j                               y y t        | j                  j                        dk(  rS| j                  dj                  t        j                  | j                         | j                  j"                               y y )NFr   zUnexpected logs found: {!r}z-no logs of level {} or higher triggered on {})r5   r.   r4   r8   r7   r2   r6   r)   lenr   r   _raiseFailurer   r   r   getLevelNamer'   name)r   exc_type	exc_valuetbs       r   __exit__z_AssertLogsContext.__exit__?   s    #00 $ 2 2T^^,<<4<<''(1,""188++ - 4<<''(A-""CVG00<dkk>N>NOQ .r   N)r   r   r   r    r1   r   r;   rD   r   r   r   r"   r"      s    @9N(Qr   r"   )	r   collectionscaser   
namedtupler   r   r	   r"   r   r   r   <module>rH      sM      & )+(():*3X)>@( ($:Q- :Qr   