
    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                   0    e Zd 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     m/var/www/html/e360mart/e360mart_env/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%       Dr   c                     d S r   r   )r   r   durations      r   addDurationzLocalTestResult.addDuration(   r   r   N)	__name__
__module____qualname____doc__r	   r   r   r   r   r   r   r   r   r      se        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          |                               |           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   _getRefcountslenNB_RUNSappendprintassertEqual	Exceptionr   sysexc_info)r   r&   
testMethodexpecting_failure_methodexpecting_failure_classlocal_result
num_flakesrefcount_deltasoldrefcountnewrefcount	__class__s             r   r0   zReferenceLeakCheckerMixin.run1   s   t344J&z3SUZ[[%d,LeTT ": f
 #*"8"="="?"?D 

#T**..f.===	
#T**..f.==="6**LJO $$&&K
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          t          d          rt          j                     nt          j                     t          j                                         t          j                            | j                   t          j
                     t          j
                     t          j
                     t          j                    S )N_clear_internal_caches)hasattrr8   rD   _clear_type_cacher+   r,   clearupdater.   gccollectgettotalrefcount)r   s    r   r1   z'ReferenceLeakCheckerMixin._getRefcounts^   s    s,-- 	 """"	  """!!$"=>>> JLLLJLLLJLLL!!!r   r   )r   r   r   r    r3   r0   r1   __classcell__)rB   s   @r   r"   r"   ,   sX        BB'+, +, +, +, +, +,Z" " " " " " "r   r"   rK   c                     t           f| j        z   } t          |           | j        |t	          | j                            }|S r   )r"   	__bases__typer   dict__dict__)
test_class	new_bases	new_classs      r   TestCaserU   o   sH    *,z/CCI Z  YZ-@(A(AC CIr   c                     | S r   r   )rR   s    r   rU   rU   y   s    r   c                     ~ d }|S )Nc                     | S r   r   )funcs    r   Samez&SkipReferenceLeakChecker.<locals>.Same~   s    kr   r   )r   rZ   s     r   SkipReferenceLeakCheckerr[   |   s      Kr   )r    r+   rI   r8   r   r   r   objectr"   rE   rU   skipr[   r   r   r   <module>r^      s      				 



 	 	 	 	 	h) 	 	 	(>" >" >" >" >" >" >" >"B 73"##   
 &]
      r   