o
    ÑtPf
  ã                   @   s¦   d Z ddlmZ e ¡  ddlZej ¡ du sJ 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rQe	 ¡  dS 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   ú]/var/www/html/humari/django-venv/lib/python3.10/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   s~   t tjƒ}|tƒ}t d¡ |  t tjƒ|d ¡ z| ¡  W n ty3   |j	s0t ¡  |j	r)~Y nw |  t tjƒ|¡ d S )Ngš™™™™™¹?é   )
Úlenr   Ú_activer	   r   r   ÚassertEqualÚjoinÚAttributeErrorÚdead)ÚselfÚspawnÚbeforeÚgr   r   r   Ú_do_test   s   

ÿúzTestCleanup._do_testc                 C   ó   |   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   r   r   )r   r   Ú	spawn_rawr   r   r   r   Útest_cleanup_raw0   s   zTestCleanup.test_cleanup_rawN)Ú__name__Ú
__module__Ú__qualname__r   r   Ú	greentestÚ
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¡s	 ˆ  d¡r
d S d S )NTF)ÚappendÚacquirer   ©ÚlockÚ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)   r3   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)   W   s   
zTestLockGreenlet._spawnN)r   r   r   r)   r   r   r   r   r4   U   s    r4   Ú__main__)Ú__doc__r   r   Ú	patch_allÚ
gevent.hubÚhubÚ_get_hubÚgevent.testingÚtestingr    r   r	   ÚTestCaser
   r"   r4   r   Úmainr   r   r   r   Ú<module>   s    ! ÿ