Ë
    ¦û’g$  ã            	       ó\  — d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ	 ddl
mZ ddl
m
Z
 ddlZddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ej*                  dd dk\  Zej*                  dd dk\  Zej0                  j3                  d«      Zej6                  j9                  d«      Zej6                  j9                  d«      xs eZej6                  j9                  d«      Zexs eZ ej6                  j9                  d«      Z! G d„ de"«      Z# G d„ d e#dejH                  fi «      «      Z$y)z
Tests for greenlet.

é    N)Úcollect)Úget_objects)Úactive_count)Úsleep)Útime)Úgreenlet)Ú
getcurrent)Úget_pending_cleanup_count)Úget_total_main_greenletsé   )Ú	leakchecké   )é   é   )r   é   ÚwinÚGITHUB_ACTIONSÚTRAVISÚAPPVEYORÚGREENLET_MANYLINUXc                   ó   — e Zd Zd„ Zy)ÚTestCaseMetaClassc                 ó  — d}t        |j                  «       «      D ]P  \  }}|j                  d«      sŒt        |«      sŒ$|j	                  |«       |rt        j                  |«      }|||<   ŒR t        j                  | |||«      S )NTÚtest)	ÚlistÚitemsÚ
startswithÚcallableÚpopr   Úwrap_refcountÚtypeÚ__new__)ÚclsÚ	classnameÚbasesÚ	classDictÚcheck_totalrefcountÚkeyÚvalues          úV/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/greenlet/tests/__init__.pyr"   zTestCaseMetaClass.__new__'   s|   € ð
 #Ðô
 ˜yŸ™Ó0Ó1ò 	'‰JˆC�Ø�~‰~˜fÕ%¬(°5­/Ø—‘˜cÔ"Ù&Ü%×3Ñ3°EÓ:�EØ!&�	˜#’ð	'ô �|‰|˜C ¨E°9Ó=Ð=ó    N)Ú__name__Ú
__module__Ú__qualname__r"   © r+   r*   r   r   $   s   „ ó>r+   r   c                   óz   ‡ — e Zd ZdZdZ	 	 dd„Zedfd„ZdZdZ	dZ
dZd„ Zˆ fd	„Zˆ fd
„Zd„ Zd„ Zdd„Zdd„Zˆ xZS )ÚTestCasegü©ñÒMbP?r   c                 ó0  — |xs | j                   }|xs | j                  }| j                  }t        |«       t	        «       | j
                  z   }t        «       s&t        «       |kD  s| j                  s›t        «       |kD  rŽt        |«       t	        «       |kD  rCt        d«       t        d|dt        «       «       t        d|dt        «       «       	 t        «        y t        «       rŒft        «       |kD  rŒt| j                  st        «       |kD  rŒŽt        «        y )NzTime limit exceeded.zThreads: Waiting for onlyz-->zMGlets : Waiting for only)Úthreads_before_testÚmain_greenlets_before_testÚcleanup_attempt_sleep_durationr   r   Úcleanup_max_sleep_secondsr
   Úactive_thread_countÚexpect_greenlet_leakr   Úprintr   )ÚselfÚinitial_active_threadsÚinitial_main_greenletsÚ
sleep_timeÚ
quit_afters        r*   Úwait_for_pending_cleanupsz"TestCase.wait_for_pending_cleanupsB   s÷   € ð "8Ò!S¸4×;SÑ;SÐØ!7Ò!Z¸4×;ZÑ;ZÐØ×8Ñ8ˆ
ô 	ˆjÔÜ“V˜d×<Ñ<Ñ<ˆ
ô *Ô+Ü&Ó(Ð+AÒAØ×1Ò1Ü0Ó2Ð5KÒKÜ�*ÔÜ‹v˜
Ò"ÜÐ,Ô-ÜÐ1Ð3IØÔ0Ó2ô4äÐ1Ð3IØÔ5Ó7ô9àÜ�	ô *Õ+Ü&Ó(Ð+AÓAØ×1Ò1Ü0Ó2Ð5KÓKô 	�	r+   Tc                 ó¬   ‡— t        d«      D ]  }t        «        Œ |rt        ˆfd„t        «       D «       «      S t        ˆfd„t        «       D «       «      S )Nr   c              3   ó<   •K  — | ]  }t        |«      ‰u rd –— Œ y­w©r   N)r!   ©Ú.0ÚxÚkinds     €r*   ú	<genexpr>z)TestCase.count_objects.<locals>.<genexpr>j   s$   øè ø€ ò àÜ˜“7˜d‘?ô ñùs   ƒc              3   ó:   •K  — | ]  }t        |‰«      rd –— Œ y­wrB   )Ú
isinstancerC   s     €r*   rG   z)TestCase.count_objects.<locals>.<genexpr>p   s#   øè ø€ ò 
àÜ˜!˜TÔ"ô ñ
ùs   ƒ)Úranger   Úsumr   )r:   rF   Ú
exact_kindÚ_s    `  r*   Úcount_objectszTestCase.count_objectsd   sZ   ø€ ô �q“ò 	ˆAÜ�Ið	áÜó ä$›ôó ð ô ó 
ä “]ô
ó 
ð 	
r+   r   Fc                 ó.   — | j                  t        d«      S )zJ
        Find all the greenlets and subclasses tracked by the GC.
        F)rN   ÚRawGreenlet)r:   s    r*   Úcount_greenletszTestCase.count_greenlets{   s   € ð ×!Ñ!¤+¨uÓ5Ð5r+   c                 óè   •— t         ‰| �  «        t        «        t        «       | _        t        «       | _        | j                  | j                  | j                  «       | j                  «       | _	        y ©N)
ÚsuperÚsetUpr	   r7   r3   r   r4   r?   rQ   Úgreenlets_before_test©r:   Ú	__class__s    €r*   rU   zTestCase.setUp�   sV   ø€ ô 	‰‰ŒÜŒÜ#6Ó#8ˆÔ Ü*BÓ*DˆÔ'Ø×&Ñ& t×'?Ñ'?À×A`ÑA`ÔaØ%)×%9Ñ%9Ó%;ˆÕ"r+   c                 óŠ   •— t        | dd«      ry | j                  | j                  | j                  «       t        ‰| �  «        y )NÚskipTearDownF)Úgetattrr?   r3   r4   rT   ÚtearDownrW   s    €r*   r\   zTestCase.tearDown‹   s9   ø€ Ü�4˜¨Ô/Øà×&Ñ& t×'?Ñ'?À×A`ÑA`ÔaÜ‰ÑÕr+   c                 óV   — dd l }t        s|j                   |j                   f}|S d}|S )Nr   )r   l   	   l       )ÚsignalÚWINÚSIGABRTÚSIGSEGV)r:   r^   Úexpected_exits      r*   Ú,get_expected_returncodes_for_aborted_processz5TestCase.get_expected_returncodes_for_aborted_process’   sB   € ÛõJ ð �^‰^ˆOð
 �^‰^ˆOð
ˆð Ðð
ð 	ð Ðr+   c                 óª   — 	 t        j                  «       j                  «       j                  S # t        $ r}t        j                  d«      |‚d}~ww xY w)aˆ  
        Return the current process's USS in bytes.

        uss is available on Linux, macOS, Windows. Also known as
        "Unique Set Size", this is the memory which is unique to a
        process and which would be freed if the process was terminated
        right now.

        If this is not supported by ``psutil``, this raises the
        :exc:`unittest.SkipTest` exception.
        zuss not supportedN)ÚpsutilÚProcessÚmemory_full_infoÚussÚAttributeErrorÚunittestÚSkipTest)r:   Úes     r*   Úget_process_usszTestCase.get_process_uss¿   sJ   € ð	@Ü—>‘>Ó#×4Ñ4Ó6×:Ñ:Ð:øÜò 	@Ü×#Ñ#Ð$7Ó8¸aÐ?ûð	@ús   ‚+. ®	A·AÁAc                 ó¢  — dd l }t        j                  j                  t        j                  j	                  t
        «      |«      }	 |j                  t        j                  |gd|j                  ¬«      S # |j                  $ rJ}|rBt        d«       t        d|«       t        d«       t        |j                  «       t        d«       ‚ d }~ww xY w)Nr   zutf-8)ÚencodingÚstderrz-----zFailed to run scriptz~~~~~z------)Ú
subprocessÚosÚpathÚjoinÚdirnameÚ__file__Úcheck_outputÚsysÚ
executableÚSTDOUTÚCalledProcessErrorr9   Úoutput)r:   Úscript_nameÚshow_outputrq   ÚscriptÚexs         r*   Ú
run_scriptzTestCase.run_scriptÐ   sª   € ÛÜ—‘—‘Ü�G‰G�O‰OœHÓ%Øó
ˆð
	Ø×*Ñ*¬C¯N©N¸FÐ+CØ4;Ø2<×2CÑ2Cð +ó Eð Eøð ×,Ñ,ò 	ÙÜ�g”ÜÐ,¨fÔ5Ü�g”Ü�b—i‘iÔ Ü�h”Øûð	ús   Á-A5 Á5CÂAC	Ã	Cc                 ó  — dd l }| j                  |j                  «      5 }| j                  |d¬«      }|}d d d «       |€| j	                  «       }| j                  j                  j                  |«       |j                  S # 1 sw Y   ŒMxY w)Nr   F)r~   )rq   ÚassertRaisesr{   r�   rc   ÚassertInÚ	exceptionÚ
returncode)r:   r}   Ú	exitcodesrq   Úexcr|   Ú__traceback_info__s          r*   ÚassertScriptRaiseszTestCase.assertScriptRaiseså   s€   € ÛØ×Ñ˜z×<Ñ<Ó=ð 	(ÀØ—_‘_ [¸e�_ÓDˆFØ!'Ð÷	(ð ÐØ×IÑIÓKˆIØ�‰�c—m‘m×.Ñ.°	Ô:Ø�}‰}Ð÷	(ð 	(ús    BÂB)NN)TrS   )r,   r-   r.   r5   r6   r?   r   rN   rV   r3   r4   r8   rQ   rU   r\   rc   rm   r�   rŠ   Ú__classcell__)rX   s   @r*   r1   r1   :   sj   ø„ ð
 &+Ð"Ø !Ðð :>Ø9=ó ðD "&°$ó 
ð$ ÐØÐØ!"ÐØ Ðò6ô<ôò+òZ@ó"÷*r+   r1   ÚNewBase)%Ú__doc__rr   rx   rj   Úgcr   r   Ú	threadingr   r7   r   r   re   r   rP   r	   Úgreenlet._greenletr
   r   Ú r   Úversion_infoÚPY312ÚPY313Úplatformr   r_   ÚenvironÚgetÚRUNNING_ON_GITHUB_ACTIONSÚRUNNING_ON_TRAVISÚRUNNING_ON_APPVEYORÚRUNNING_ON_CIÚRUNNING_ON_MANYLINUXr!   r   r1   r/   r+   r*   ú<module>r�      s	  ðñó 
Û 
Û å Ý Ý 9Ý Ý ã å ,Ý å 8Ý 7å à×Ñ˜˜!Ð Ñ'€Ø×Ñ˜˜!Ð Ñ'€à	‡l�l×Ñ˜eÓ$€ØŸJ™JŸN™NÐ+;Ó<Ð Ø—J‘J—N‘N 8Ó,ÒIÐ0IÐ Ø—j‘j—n‘n ZÓ0Ð Ø!Ò8Ð%8€Ø—z‘z—~‘~Ð&:Ó;Ð ô>˜ô >ô,vÑ ØØ	×	Ñ	ÐØ
óõ vr+   