o
    Hh                     @   sv   d Z ddlZddlZddlZddlZG dd dejZG dd deZe	edr1dd	 Z
ejZdS d
d	 Z
d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                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )LocalTestResultzHA TestResult which forwards events to a parent object, except for Skips.c                 C   s   t j|  || _d S N)unittest
TestResult__init__parent_result)selfr    r	   j/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/google/protobuf/internal/testing_refleaks.pyr      s   
zLocalTestResult.__init__c                 C      | j || d S r   )r   addErrorr   testerrorr	   r	   r
   r         zLocalTestResult.addErrorc                 C   r   r   )r   
addFailurer   r	   r	   r
   r   "   r   zLocalTestResult.addFailurec                 C      d S r   r	   )r   r   reasonr	   r	   r
   addSkip%      zLocalTestResult.addSkipc                 C   r   r   r	   )r   r   durationr	   r	   r
   addDuration(   r   zLocalTestResult.addDurationN)	__name__
__module____qualname____doc__r   r   r   r   r   r	   r	   r	   r
   r      s    r   c                       s.   e Zd ZdZdZd fdd	Zdd Z  ZS )	ReferenceLeakCheckerMixinz:A mixin class for TestCase, which checks reference counts.   Nc           
         s,  t | | j}t |dd}t | dd}|s|rd S tj | _tt| j|d tt| j|d t	|}d}g }| 
 }t|| jk rq| 
 }tt| j|d | 
 }	|	|k ra|dk ra|d7 }q<d}||	|  t|| jk sCt||  z| |dg| j  W d S  ty   || t  Y d S 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__r	   r
   r)   1   s8   
zReferenceLeakCheckerMixin.runc                 C   sT   t tdr
t  nt  tj  tj| j t	
  t	
  t	
  t S )N_clear_internal_caches)hasattrr1   r=   _clear_type_cacher$   r%   clearupdater'   gccollectgettotalrefcount)r   r	   r	   r
   r*   ^   s   


z'ReferenceLeakCheckerMixin._getRefcountsr   )r   r   r   r   r,   r)   r*   __classcell__r	   r	   r;   r
   r   ,   s
    -r   rD   c                 C   s(   t f| j }t| | j|t| j}|S r   )r   	__bases__typer   dict__dict__)
test_class	new_bases	new_classr	   r	   r
   TestCaseo   s
   rM   c                 C      | S r   r	   )rJ   r	   r	   r
   rM   y   r   c                 C   s   ~ dd }|S )Nc                 S   rN   r   r	   )funcr	   r	   r
   Same~   r   z&SkipReferenceLeakChecker.<locals>.Samer	   )r   rP   r	   r	   r
   SkipReferenceLeakChecker|   s   rQ   )r   r$   rB   r1   r   r   r   objectr   r>   rM   skiprQ   r	   r	   r	   r
   <module>   s   

A
