a
    „'fv
  ã                   @   s¢   d Z ddlmZ e ¡  ddlZej ¡ du s6J dƒ‚ddlZddlmZ	 ddl
Z
dd„ ZG dd„ de	jƒZG d	d
„ d
e	jƒZG dd„ deƒZedkrže	 ¡  dS )z=
Tests specifically for the monkey-patched threading module.
é    )ÚmonkeyNz&monkey.patch_all() should not init hubc                   C   s   t  ¡  t d¡ d S )Ngš™™™™™É?)Ú	threadingÚcurrent_threadÚgeventÚsleep© r   r   új/var/www/staging/api/virtual_environments/venv/lib/python3.9/site-packages/gevent/tests/test__threading.pyÚhelper   s    r	   c                   @   s.   e Zd Zdd„ Zdd„ Ze d¡dd„ ƒZdS )	ÚTestCleanupc                 C   sz   t tjƒ}|tƒ}t d¡ |  t tjƒ|d ¡ z| ¡  W n$ tyb   |j	s\t ¡  qL~Y n0 |  t tjƒ|¡ d S )Ngš™™™™™¹?é   )
Úlenr   Ú_activer	   r   r   ÚassertEqualÚjoinÚAttributeErrorZdead)ÚselfÚspawnÚbeforeÚgr   r   r   Ú_do_test   s    


zTestCleanup._do_testc                 C   s   |   tj¡ d S ©N)r   r   r   ©r   r   r   r   Útest_cleanup_gevent-   s    zTestCleanup.test_cleanup_geventz-weakref is not cleaned up in a timely fashionc                 C   s   |   tj¡ d S r   )r   r   Z	spawn_rawr   r   r   r   Útest_cleanup_raw0   s    zTestCleanup.test_cleanup_rawN)Ú__name__Ú
__module__Ú__qualname__r   r   Ú	greentestZ
skipOnPyPyr   r   r   r   r   r
      s   r
   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestLockThreadc                 C   s   t j|d}| ¡  |S )N©Útarget)r   ÚThreadÚstart)r   ÚfuncÚtr   r   r   Ú_spawn7   s    zTestLockThread._spawnc                    sb   t  ¡ ‰ ˆ  ¡  g ‰‡ ‡fdd„}t j|d}| ¡  |  ˆdg¡ | d¡ ˆ  ¡  | ¡  d S )Nc                      s   ˆ  d¡ ˆ  d¡r
qq
d S )NTF)ÚappendÚacquirer   ©ÚlockZspawnedr   r   Ú
backgroundC   s    

z:TestLockThread.test_spin_lock_switches.<locals>.backgroundr   Tr   )r   ÚLockr'   r!   r"   r   r   Úrelease)r   r*   Úthreadr   r(   r   Útest_spin_lock_switches<   s    
z&TestLockThread.test_spin_lock_switchesN)r   r   r   r%   r.   r   r   r   r   r   5   s   r   c                   @   s   e Zd Zdd„ ZdS )ÚTestLockGreenletc                 C   s
   t  |¡S r   )r   r   )r   r#   r   r   r   r%   Y   s    zTestLockGreenlet._spawnN)r   r   r   r%   r   r   r   r   r/   W   s   r/   Ú__main__)Ú__doc__r   r   Z	patch_allZ
gevent.hubZhubZ_get_hubZgevent.testingÚtestingr   r   r	   ZTestCaser
   r   r/   r   Úmainr   r   r   r   Ú<module>   s   !"