
    Yh$                        S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJr	  SSK
Jr  SSK
J
r
  SSKrSSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  \R*                  SS S:  r\R*                  SS S:  r\R*                  SS S:  r\R2                  R5                  S5      r\R8                  R;                  S5      r\R8                  R;                  S5      =(       d    \r\R8                  R;                  S5      r \=(       d    \ r!\R8                  R;                  S5      r" " S S\#5      r$ " S S\RJ                  \$S9r%g)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                       \ rS rSrS rSrg)TestCaseMetaClass'   c                 .   Sn[        UR                  5       5       Ha  u  pVUR                  S5      (       d  M  [        U5      (       d  M/  UR	                  U5        U(       a  [
        R                  " U5      nXcU'   Mc     [        R                  XX#5      $ )NTtest)	listitems
startswithcallablepopr   wrap_refcounttype__new__)cls	classnamebases	classDictcheck_totalrefcountkeyvalues          I/var/www/html/env/lib/python3.13/site-packages/greenlet/tests/__init__.pyr$   TestCaseMetaClass.__new__*   st    
 #
 y01JC~~f%%(5//c"&%33E:E!&# 2 ||CE==     N)__name__
__module____qualname____firstlineno__r$   __static_attributes__r/   r.   r,   r   r   '   s    >r.   r   c                      ^  \ rS rSrSrSr  SS jr\S4S jrSr	Sr
SrSrS	 rU 4S
 jrU 4S jrS rS rSS jrSS jrSrU =r$ )TestCase=   gMbP?r   c                 f   U=(       d    U R                   nU=(       d    U R                  nU R                  n[        U5        [	        5       U R
                  -   n[        5       (       d-  [        5       U:  d  U R                  (       d  [        5       U:  a  [        U5        [	        5       U:  a8  [        S5        [        SUS[        5       5        [        SUS[        5       5        OB[        5       (       a  Mb  [        5       U:  a  Mr  U R                  (       d  [        5       U:  a  M  [        5         g )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_cleanups"TestCase.wait_for_pending_cleanupsB   s     "8!S4;S;S!7!Z4;Z;Z88
 	jVd<<<
 *++&(+AA11025KK*v
",-13I02413I579 *++&(+AA11025KK 		r.   Tc                    ^ [        S5       H  n[        5         M     U(       a  [        U4S j[        5        5       5      $ [        U4S j[        5        5       5      $ )Nr   c              3   H   >#    U  H  n[        U5      TL d  M  S v   M     g7fr   N)r#   .0xkinds     r,   	<genexpr>)TestCase.count_objects.<locals>.<genexpr>j   s%      &A7d? &s   "	"c              3   N   >#    U  H  n[        UT5      (       d  M  S v   M     g7frI   )
isinstancerJ   s     r,   rN   rO   p   s$      
"!T" A"s   %	%)ranger   sumr   )r@   rM   
exact_kind_s    `  r,   count_objectsTestCase.count_objectsd   sU     qAI  $    
 ]
 
 	
r.   r   Fc                 .    U R                  [        S5      $ )z:
Find all the greenlets and subclasses tracked by the GC.
F)rV   RawGreenlet)r@   s    r,   count_greenletsTestCase.count_greenlets{   s     !!+u55r.   c                    > [         TU ]  5         [        5         [        5       U l        [        5       U l        U R                  U R                  U R                  5        U R                  5       U l	        g N)
supersetUpr	   r=   r9   r   r:   rE   rZ   greenlets_before_testr@   	__class__s    r,   r_   TestCase.setUp   sV     	#6#8 *B*D'&&t'?'?A`A`a%)%9%9%;"r.   c                    > [        U SS5      (       a  g U R                  U R                  U R                  5        [        TU ]  5         g )NskipTearDownF)getattrrE   r9   r:   r^   tearDownra   s    r,   rg   TestCase.tearDown   s<    4//&&t'?'?A`A`ar.   c                 `    SS K n[        (       d  UR                  * UR                  * 4nU$ SnU$ )Nr   )r   l   	   l       )signalWINSIGABRTSIGSEGV)r@   rj   expected_exits      r,   ,get_expected_returncodes_for_aborted_process5TestCase.get_expected_returncodes_for_aborted_process   sD    J  ^^O
 ^^O
 
 	 r.   c                      [         R                  " 5       R                  5       R                  $ ! [         a  n[
        R                  " S5      UeSnAff = f)aH  
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_ussTestCase.get_process_uss   sJ    	@>>#446::: 	@##$78a?	@s   ,/ 
AAAc                    SS K n[        R                  R                  [        R                  R	                  [
        5      U5      n UR                  [        R                  U/SUR                  S9$ ! UR                   aO  nU(       aB  [        S5        [        SU5        [        S5        [        UR                  5        [        S5        e S nAff = f)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_outputr   scriptexs         r,   
run_scriptTestCase.run_script   s    GGOOH%

	**CNNF+C4;2<2C2C + E E ,, 	g,f5gbii h	s   *A2 2CA
CCc                 "   SS K nU R                  UR                  5       nU R                  USS9nUnS S S 5        Uc  U R	                  5       nU R                  WR                  R                  U5        UR                  $ ! , (       d  f       NS= f)Nr   F)r   )r   assertRaisesr   r   ro   assertIn	exception
returncode)r@   r   	exitcodesr   excr   __traceback_info__s          r,   assertScriptRaisesTestCase.assertScriptRaises   sy    z<<=__[e_DF!' > IIKIcmm..	:}} >=s   B  
B)r`   r:   r9   )NN)Tr]   )r0   r1   r2   r3   r;   r<   rE   r   rV   r`   r9   r:   r>   rZ   r_   rg   ro   rz   r   r   r4   __classcell__)rb   s   @r,   r6   r6   =   sm    %*" ! :>9= D "&$ 
$ !" 6<+Z@"* r.   r6   )	metaclass)&__doc__r   r   rw   gcr   r   	threadingr   r=   r   r   rr   r   rY   r	   greenlet._greenletr
   r    r   version_infoPY312PY313PY314platformr   rk   environgetRUNNING_ON_GITHUB_ACTIONSRUNNING_ON_TRAVISRUNNING_ON_APPVEYORRUNNING_ON_CIRUNNING_ON_MANYLINUXr#   r   r6   r/   r.   r,   <module>r      s   
 
    9    ,  8 7 !'!' 	!'	lle$JJNN+;< JJNN8,I0I jjnnZ0 !8%8zz~~&:; > >,sx  ,= sr.   