
    h                         d Z ddlZddlZddlZddlZ G d dej                  Z G d de          Z e	ed          rd Z
ej        ZdS d	 Z
d
 ZdS )a[  A subclass of unittest.TestCase which checks for reference leaks.

To use:
- Use testing_refleak.BaseTestCase instead of unittest.TestCase
- Configure and compile Python with --with-pydebug

If sys.gettotalrefcount() is not available (because Python was built without
the Py_DEBUG option), then this module is a no-op and tests will run normally.
    Nc                   *    e Zd ZdZd Zd Zd Zd ZdS )LocalTestResultzHA TestResult which forwards events to a parent object, except for Skips.c                 R    t           j                            |            || _        d S N)unittest
TestResult__init__parent_result)selfr
   s     k/var/www/html/prod/cognitive/venv/lib/python3.11/site-packages/google/protobuf/internal/testing_refleaks.pyr	   zLocalTestResult.__init__   s'      &&&&D    c                 <    | j                             ||           d S r   )r
   addErrorr   testerrors      r   r   zLocalTestResult.addError   s!    e,,,,,r   c                 <    | j                             ||           d S r   )r
   
addFailurer   s      r   r   zLocalTestResult.addFailure"   s!    !!$.....r   c                     d S r    )r   r   reasons      r   addSkipzLocalTestResult.addSkip%   s    Dr   N)__name__
__module____qualname____doc__r	   r   r   r   r   r   r   r   r      sV        PP' ' '- - -/ / /	 	 	 	 	r   r   c                   .     e Zd ZdZdZd fd	Zd Z xZS )ReferenceLeakCheckerMixinz:A mixin class for TestCase, which checks reference counts.   Nc                    t          | | j                  }t          |dd          }t          | dd          }|s|rd S t          j                                        | _        t          t          |                               |           t          t          |                               |           d}t          |          }d}g }t          |          | j        k     r|                                 }t          t          |                               |           |                                 }	|	|k     r|dk     r|dz  }{d}|                    |	|z
             t          |          | j        k     t          ||            	 |                     |dg| j        z             d S # t           $ r+ |                    | t%          j                               Y d S w xY w)N__unittest_expecting_failure__F)resultr         )getattr_testMethodNamecopyregdispatch_tablecopy_saved_pickle_registrysuperr   runr   lenNB_RUNS_getRefcountsappendprintassertEqual	Exceptionr   sysexc_info)r   r"   
testMethodexpecting_failure_methodexpecting_failure_classoldrefcountlocal_result
num_flakesrefcount_deltasnewrefcount	__class__s             r   r,   zReferenceLeakCheckerMixin.run.   s   t344J&z3SUZ[[%d,LeTT ": f
 #*"8"="="?"?D 

#T**..f.===	
#T**..f.===K"6**LJO
o


-
-&&((k%t,,000EEE&&((k 
{	"	"zA~~
 	a
j[;6777 o


-
- 
/4   ,
dl(:;;;;; , , ,oodCLNN++++++,s   F( (1GGc                    t           j                                         t           j                            | j                   t          j                     t          j                     t          j                     t          j                    S r   )	r'   r(   clearupdater*   gccollectr4   gettotalrefcount)r   s    r   r/   z'ReferenceLeakCheckerMixin._getRefcountsY   sc      """!!$"=>>> JLLLJLLLJLLL!!!r   r   )r   r   r   r   r.   r,   r/   __classcell__)r>   s   @r   r   r   )   sX        BB'), ), ), ), ), ),V" " " " " " "r   r   rD   c                     t           f| j        z   } t          |           | j        |t	          | j                            }|S r   )r   	__bases__typer   dict__dict__)
test_class	new_bases	new_classs      r   TestCaserN   f   sH    *,z/CCI Z  YZ-@(A(AC CIr   c                     | S r   r   )rK   s    r   rN   rN   p   s    r   c                     ~ d }|S )Nc                     | S r   r   )funcs    r   Samez&SkipReferenceLeakChecker.<locals>.Sameu   s    kr   r   )r   rS   s     r   SkipReferenceLeakCheckerrT   s   s      Kr   )r   r'   rB   r4   r   r   r   objectr   hasattrrN   skiprT   r   r   r   <module>rX      s      				 



 	 	 	 	 	h) 	 	 	"8" 8" 8" 8" 8" 8" 8" 8"v 73"##   
 &]
      r   