Ë
    ‰)f>#  ã            	       óh  — d Z ddlmZ ddlmZ ddlm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j0                  dd dk\  Zej4                  j7                  d«      Z G d„ de«      Z G d„ d edej>                  fi «      «      Zy)z
Tests for greenlet.

é    )Úabsolute_import)Údivision)Úprint_functionN)Úcollect)Úget_objects)Úactive_count)Úsleep)Útime)Úgreenlet)Ú
getcurrent)Úget_pending_cleanup_count)Úget_total_main_greenletsé   )Ú	leakchecké   )é   é   Úwinc                   ó   — 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          úT/var/www/html/flask-app/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_cleanups>   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>f   s$   øè ø€ ò àÜ˜“7˜d‘?ô ñùs   ƒc              3   ó:   •K  — | ]  }t        |‰«      rd –— Œ y­wr@   )Ú
isinstancerA   s     €r(   rE   z)TestCase.count_objects.<locals>.<genexpr>l   s#   øè ø€ ò 
àÜ˜!˜TÔ"ô ñ
ùs   ƒ)Úranger   Úsumr   )r8   rD   Ú
exact_kindÚ_s    `  r(   Úcount_objectszTestCase.count_objects`   sZ   ø€ ô �q“ò 	ˆAÜ�Ið	áÜó ä$›ôó ð ô ó 
ä “]ô
ó 
ð 	
r)   r   Fc                 ó.   — | j                  t        d«      S )zJ
        Find all the greenlets and subclasses tracked by the GC.
        F)rL   ÚRawGreenlet)r8   s    r(   Úcount_greenletszTestCase.count_greenletsw   s   € ð ×!Ñ!¤+¨uÓ5Ð5r)   c                 óè   •— t         ‰| �  «        t        «        t        «       | _        t        «       | _        | j                  | j                  | j                  «       | j                  «       | _	        y ©N)
ÚsuperÚsetUpr   r5   r1   r   r2   r=   rO   Úgreenlets_before_test©r8   Ú	__class__s    €r(   rS   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=   r1   r2   rR   ÚtearDownrU   s    €r(   rZ   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)r8   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)r8   Úes     r(   Úget_process_usszTestCase.get_process_uss»   sJ   € ð	@Ü—>‘>Ó#×4Ñ4Ó6×:Ñ:Ð:øÜò 	@Ü×#Ñ#Ð$7Ó8¸aÐ?ûð	@ús   ‚+. ®	A·AÁAc                 óš  — dd l }dd l}|j                  j                  |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ÚCalledProcessErrorr7   Úoutput)r8   Úscript_nameÚshow_outputro   rp   Ú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   Á-A1 Á1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|   )ro   ÚassertRaisesry   r   ra   ÚassertInÚ	exceptionÚ
returncode)r8   r{   Ú	exitcodesro   Úexcrz   Ú__traceback_info__s          r(   ÚassertScriptRaiseszTestCase.assertScriptRaisesâ   s€   € ÛØ×Ñ˜z×<Ñ<Ó=ð 	(ÀØ—_‘_ [¸e�_ÓDˆFØ!'Ð÷	(ð ÐØ×IÑIÓKˆIØ�‰�c—m‘m×.Ñ.°	Ô:Ø�}‰}Ð÷	(ð 	(ús    BÂB)NN)TrQ   )r*   r+   r,   r3   r4   r=   r   rL   rT   r1   r2   r6   rO   rS   rZ   ra   rk   r   rˆ   Ú__classcell__)rV   s   @r(   r/   r/   6   sj   ø„ ð
 &+Ð"Ø !Ðð :>Ø9=ó ðD "&°$ó 
ð$ ÐØÐØ!"ÐØ Ðò6ô<ôò+òZ@ó"÷,r)   r/   ÚNewBase) Ú__doc__Ú
__future__r   r   r   rv   rh   Úgcr   r   Ú	threadingr   r5   r
   r	   rc   r   rN   r   Úgreenlet._greenletr   r   Ú r   Úversion_infoÚPY312Úplatformr   r]   r   r   r/   r-   r)   r(   ú<module>r”      s™   ðñõ 'Ý Ý %ã 
Û å Ý Ý 9Ý Ý ã å ,Ý å 8Ý 7å à×Ñ˜˜!Ð Ñ'€Ø	‡l�l×Ñ˜eÓ$€ô>˜ô >ô,wÑ ØØ	×	Ñ	ÐØ
óõ wr)   