Ë
    ímxið  ã                   ó¦   — 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yd	„ Z
d
„ Zy)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y)ÚLocalTestResultzHA TestResult which forwards events to a parent object, except for Skips.c                 óP   — t         j                  j                  | «       || _        y ©N)ÚunittestÚ
TestResultÚ__init__Úparent_result)Úselfr
   s     ú`/home/htdocs/ttos/venv/lib/python3.12/site-packages/google/protobuf/internal/testing_refleaks.pyr	   zLocalTestResult.__init__   s   € Ü×Ñ× Ñ  Ô&Ø&€DÕó    c                 ó<   — | j                   j                  ||«       y r   )r
   ÚaddError©r   ÚtestÚerrors      r   r   zLocalTestResult.addError   s   € Ø×Ñ×Ñ  eÕ,r   c                 ó<   — | j                   j                  ||«       y r   )r
   Ú
addFailurer   s      r   r   zLocalTestResult.addFailure"   s   € Ø×Ñ×!Ñ! $¨Õ.r   c                  ó   — y r   © )r   r   Úreasons      r   ÚaddSkipzLocalTestResult.addSkip%   s   € Ør   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r   r   r   r   r      s   „ Ù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.é   c                 óþ  •— t        | | j                  «      }t        |dd«      }t        | dd«      }|s|ry t        j                  j	                  «       | _        t        t        | �#  |¬«       t        t        | �#  |¬«       d}t        |«      }d}g }t        |«      | j                  k  rs| j                  «       }t        t        | �#  |¬«       | j                  «       }	|	|k  r|dk  r|dz  }Œ\d}|j                  |	|z
  «       t        |«      | j                  k  rŒst        || «       	 | j                  |dg| j                  z  «       y # t         $ r' |j#                  | t%        j&                  «       «       Y y 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.   sq  ø€ Ü˜˜t×3Ñ3Ó4€JÜ& zÐ3SÐUZÓ[ÐÜ% dÐ,LÈeÓTÐÙÑ":Øô
 #*×"8Ñ"8×"=Ñ"=Ó"?€DÔô 
Ô
# TÑ.°fÐ.Ô=Ü	Ô
# TÑ.°fÐ.Ô=à€KÜ" 6Ó*€LØ€Jà€OÜ
ˆoÓ
 §¡Ò
-Ø×&Ñ&Ó(€kÜÔ% tÑ0¸Ð0ÔEØ×&Ñ&Ó(€kð 
�{Ò	" z°A¢~ð
 	�a‰ˆ
ØØ€jØ×Ñ˜[¨;Ñ6Ô7ô ˆoÓ
 §¡Ó
-ô 
ˆ/˜4Ô ð,Ø
×Ñ�¨¨¨d¯l©lÑ(:Õ;øÜò ,Ø‡o�o�dœCŸL™L›NÖ+ð,ús   Ä+ E Å-E<Å;E<c                 ó0  — t         j                  j                  «        t         j                  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   sZ   € Ü×Ñ× Ñ Ô"Ü×Ñ×!Ñ! $×"=Ñ"=Ô>ô ‡J�J„LÜ‡J�J„LÜ‡J�J„LÜ×ÑÓ!Ð!r   r   )r   r   r   r   r.   r,   r/   Ú__classcell__)r>   s   @r   r   r   )   s   ø„ Ù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   sE   € Ü*Ð,¨z×/CÑ/CÑC€IØ ”�ZÓ Ø×Ñ˜Y¬¨Z×-@Ñ-@Ó(Aó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"ñv ˆ3Ð"Ô#òð
 &Ÿ]™]Ñò
ór   