Ë
    v¹1h‘$  ã                   ór  — 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j*                  dd dk\  Zej2                  j5                  d«      Zej8                  j;                  d«      Zej8                  j;                  d«      xs eZej8                  j;                  d«      Z exs e Z!ej8                  j;                  d«      Z" G d„ de#«      Z$ G d„ dejJ                  e$¬«      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   é   )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          úU/var/www/skyplay_api_hub/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rC   )Ú
isinstancerD   s     €r+   rH   z)TestCase.count_objects.<locals>.<genexpr>p   s#   øè ø€ ò 
àÜ˜!˜TÔ"ô ñ
ùs   ƒ)Úranger   Úsumr   )r;   rG   Ú
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)rO   Ú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	   r8   r4   r   r5   r@   rR   Úgreenlets_before_test©r;   Ú	__class__s    €r+   rV   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@   r4   r5   rU   ÚtearDownrX   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ÚCalledProcessErrorr:   Úoutput)r;   Úscript_nameÚshow_outputrr   Ú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   )rr   ÚassertRaisesr|   r‚   rd   ÚassertInÚ	exceptionÚ
returncode)r;   r~   Ú	exitcodesrr   Úexcr}   Ú__traceback_info__s          r+   ÚassertScriptRaiseszTestCase.assertScriptRaiseså   s€   € ÛØ×Ñ˜z×<Ñ<Ó=ð 	(ÀØ—_‘_ [¸e�_ÓDˆFØ!'Ð÷	(ð ÐØ×IÑIÓKˆIØ�‰�c—m‘m×.Ñ.°	Ô:Ø�}‰}Ð÷	(ð 	(ús    BÂB)NN)TrT   )r-   r.   r/   r6   r7   r@   r   rO   rW   r4   r5   r9   rR   rV   r]   rd   rn   r‚   r‹   Ú__classcell__)rY   s   @r+   r2   r2   =   sh   ø„ à%*Ð"Ø !Ðð :>Ø9=ó ðD "&°$ó 
ð$ ÐØÐØ!"ÐØ Ðò6ô<ôò+òZ@ó"÷*r,   r2   )Ú	metaclass)&Ú__doc__rs   ry   rk   Úgcr   r   Ú	threadingr   r8   r   r   rf   r   rQ   r	   Úgreenlet._greenletr
   r   Ú r   Úversion_infoÚPY312ÚPY313ÚPY314Úplatformr   r`   ÚenvironÚgetÚRUNNING_ON_GITHUB_ACTIONSÚRUNNING_ON_TRAVISÚRUNNING_ON_APPVEYORÚRUNNING_ON_CIÚRUNNING_ON_MANYLINUXr"   r   r2   r0   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—~‘~Ð&:Ó;Ð ô>˜ô >ô,sˆx× Ñ Ð,=ö sr,   