o
    {j6h                     @   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                   @   s0   e Zd Z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	   x/var/www/html/chefvision.cloud.itp360.com/venv/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   s   d S r   r	   )r   r   reasonr	   r	   r
   addSkip%      zLocalTestResult.addSkipN)__name__
__module____qualname____doc__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 d}t	|}d}g }t
|| jk ro|  }tt| j|d |  }	|	|k r_|dk r_|d7 }q:d}||	|  t
|| jk sAt||  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   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__r	   r
   r&   .   s8   
zReferenceLeakCheckerMixin.runc                 C   s8   t j  t j| j t  t  t  t S r   )	r!   r"   clearupdater$   gccollectr.   gettotalrefcount)r   r	   r	   r
   r)   Y   s   
z'ReferenceLeakCheckerMixin._getRefcountsr   )r   r   r   r   r(   r&   r)   __classcell__r	   r	   r8   r
   r   )   s
    +r   r>   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
   TestCasef   s
   rG   c                 C      | S r   r	   )rD   r	   r	   r
   rG   p   r   c                 C   s   ~ dd }|S )Nc                 S   rH   r   r	   )funcr	   r	   r
   Sameu   r   z&SkipReferenceLeakChecker.<locals>.Samer	   )r   rJ   r	   r	   r
   SkipReferenceLeakCheckers   s   rK   )r   r!   r<   r.   r   r   r   objectr   hasattrrG   skiprK   r	   r	   r	   r
   <module>   s   

;
