
    	h&                        d Z ddl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j                            d          Zej                            d          Zej                            d          peZ ej                            d          Z!e pe!Z"ej                            d          Z# e$ ej%        d                    Z& G d de'          Z( G d dej)        e(          Z)dS )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_MANYLINUXPy_GIL_DISABLEDc                       e Zd Zd ZdS )TestCaseMetaClassc                 6   d}t          |                                          D ]Y\  }}|                    d          r?t          |          r0|                    |           |rt          j        |          }|||<   Zt                              | |||          S )NTtest)	listitems
startswithcallablepopr   wrap_refcounttype__new__)cls	classnamebases	classDictcheck_totalrefcountkeyvalues          d/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/greenlet/tests/__init__.pyr$   zTestCaseMetaClass.__new__2   s    
 #
 y0011 	' 	'JC~~f%% '(5// 'c"""& ;%3E::E!&	#||CE9===    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 )TestCasegMbP?r   Nc                 \   |p| j         }|p| j        }| j        }t          |           t	                      | j        z   }t                      s+t                      |k    s| j        st                      |k    rt          |           t	                      |k    rLt          d           t          d|dt                                 t          d|dt                                 n9t                      {t                      |k    | j        st                      |k    t                       d S )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_cleanupsJ   sO    "8!S4;S!7!Z4;Z8
 	jVVd<<
 *++	&((+AAA1 B0225KKK*vv
"",---13I0224 4 413I5779 9 9 *++	&((+AAA1 B0225KK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 d V  dS r   N)r#   .0xkinds     r,   	<genexpr>z)TestCase.count_objects.<locals>.<genexpr>r   s;        77d?? "??? r-   c              3   <   K   | ]}t          |          d V  dS rD   )
isinstancerE   s     r,   rI   z)TestCase.count_objects.<locals>.<genexpr>x   sG       
 
!T""

 
 
 
 
 
r-   )ranger   sumr   )r<   rH   
exact_kind_s    `  r,   count_objectszTestCase.count_objectsl   s     q 	 	AIIII 	    $       
 
 
 
 ]]
 
 
 
 
 	
r-   r   Fc                 8    |                      t          d          S )zJ
        Find all the greenlets and subclasses tracked by the GC.
        F)rP   RawGreenlet)r<   s    r,   count_greenletszTestCase.count_greenlets   s     !!+u555r-   c                 "   t                                                       t                       t                      | _        t                      | _        |                     | j        | j                   |                                 | _	        d S N)
supersetUpr	   r9   r5   r   r6   rA   rS   greenlets_before_testr<   	__class__s    r,   rW   zTestCase.setUp   sq     	#6#8#8 *B*D*D'&&t'?A`aaa%)%9%9%;%;"""r-   c                     t          | dd          rd S |                     | j        | j                   t	                                                       d S )NskipTearDownF)getattrrA   r5   r6   rV   tearDownrY   s    r,   r^   zTestCase.tearDown   sT    4// 	F&&t'?A`aaar-   c                 @    dd l }t          s|j         |j         fn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        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   s\    	@>##4466:: 	@ 	@ 	@#$788a?	@s   ), 
AAAc                    dd l }t          j                            t          j                            t
                    |          }	 |                    t          j        |gd|j	                  S # |j
        $ rY}|rQt          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_outputrs   scriptexs         r,   
run_scriptzTestCase.run_script   s    GOOH%%
 

	**CNF+C4;2<2C + E E E , 	 	 	  g,f555gbi   h	s   (A1 1
C;ACCc                    dd l }|                     |j                  5 }|                     |d          }|}d d d            n# 1 swxY w Y   ||                                 }|                     |j        j        |           |j        S )Nr   F)r   )rs   assertRaisesr}   r   re   assertIn	exception
returncode)r<   r   	exitcodesrs   excr~   __traceback_info__s          r,   assertScriptRaiseszTestCase.assertScriptRaises   s    z<== 	(__[e_DDF!'	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( IIKKIcm.	:::}s   AA	A	)NN)TrU   )r.   r/   r0   r7   r8   rA   r   rP   rX   r5   r6   r:   rS   rW   r^   re   ro   r   r   __classcell__)rZ   s   @r,   r3   r3   E   s       %*" ! :>9=       D "&$ 
 
 
 
$ !" 6 6 6< < < < <    + + +Z@ @ @"   *       r-   r3   )	metaclass)*__doc__rt   rz   	sysconfigrl   gcr   r   	threadingr   r9   r   r   rg   r   rR   r	   greenlet._greenletr
   r    r   version_infoPY312PY313PY314platformr   ra   environgetRUNNING_ON_GITHUB_ACTIONSRUNNING_ON_TRAVISRUNNING_ON_APPVEYORRUNNING_ON_CIRUNNING_ON_MANYLINUXboolget_config_varRUNNING_ON_FREETHREAD_BUILDr#   r   r3   r1   r-   r,   <module>r      sF    
			 



                  9 9 9 9 9 9              , , , , , ,       8 8 8 8 8 8 7 7 7 7 7 7      !'!' 	!'	le$$JNN+;<< JNN8,,I0I jnnZ00 !8%8z~~&:;;  #d#;9#;<M#N#NOO > > > > > > > >,s s s s sx ,= s s s s s sr-   