o
    tPfQ(                     @   s   d dl mZ d dl mZ d dl mZ d dlZd dl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 G d	d
 d
ejZedG dd dejZedG dd dejZG dd dejZedkrte  dS dS )    )absolute_import)division)print_functionN)util)local)
getcurrent)NativeStrIOc                   @   s   e Zd Zdd ZdS )MyLocalc                 C   s
   || _ d S N)foo)selfr    r   X/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__util.py__init__   s   
zMyLocal.__init__N)__name__
__module____qualname__r   r   r   r   r   r	      s    r	   z'5.10.x is *very* slow formatting stacksc                   @   s   e Zd Zdd Zdd ZdS )
TestFormatc                 C   sR   t  }d|}| d| | d| | d| | d| | d| d S )N
Threads	Greenlets
Spawned atzParent greenletSpawn Tree Locals)r   format_run_infojoinassertInassertNotIn)r   linesvaluer   r   r   
test_basic   s   
zTestFormat.test_basicc                 C   s   t   }d|_dd }t|}d|_|  |j}| d| | d| | d| | d| | d	| | d| | d
| d S )N   c                  S   sT   t d} | sJ t }|sJ dt jd< t }tjtj|d}|	  |
 S )N*   za value)file)r	   r   geventr   spawn_tree_localsr   spawnr   print_run_infor   getvalue)ll2iogr   r   r   root,   s   z+TestFormat.test_with_Greenlet.<locals>.rootPrinterr   zParent:r   zGreenlet Locals:r	   z{})	r   	some_attrr#   r%   namer   r   r   r   )r   rlr,   r+   r   r   r   r   test_with_Greenlet)   s   
zTestFormat.test_with_GreenletN)r   r   r   r   r1   r   r   r   r   r      s    r   zSee TestFormatc                       sb   e Zd Z fddZ fddZdd Zdd Zejd	d
 Z	ejdd Z
ejdd Z  ZS )TestTreec                    s*   t t|   tjj| _dtj_d | _d S NT)superr2   setUpr#   configtrack_greenlet_treemaxDiffr   	__class__r   r   r5   K   s   

zTestTree.setUpc                    s   | j tj_ tt|   d S r
   )r7   r#   r6   r4   r2   tearDownr9   r:   r   r   r<   Q   s   
zTestTree.tearDownc           	         s   t dD ]}t  qd t _d t _g }td}|sJ dd  dd  fdd }|  |	   fd	d
} |}|j
d urRd|j
d< |   tjj}|  |j}|t||jddddfS )N   r!   c                 S   s*   t t  t| }t|d t | |S )Nminimal_ident)strr   r#   r%   getattr)fr+   r   r   r   sa   s
   


zTestTree._build_tree.<locals>.sc                   S   s   t  r
   )	greentestExpectedExceptionr   r   r   r   t1j      z TestTree._build_tree.<locals>.t1c                     s,   t d} | sJ  }dt|j |_|S )N   zCustomName-)r	   r?   r>   r/   )r(   r+   )rB   rE   r   r   t2m   s
   z TestTree._build_tree.<locals>.t2c                      s    S r
   r   r   )rB   rH   r   r   t3z   rF   z TestTree._build_tree.<locals>.t3STLstlFrunning_stacksspawning_stacksdetails)rangegccollectr#   get_hubresolver
threadpoolr	   r   appendr$   r   GreenletTreecurrent_treer   r?   format)	r   _gletsr(   s1rI   s3s4treer   )rB   rE   rH   r   _build_treeU   s0   


	

zTestTree._build_treec                 C   s   dd l }|d|j}tt }||d}|d|}|dd}|dd}|dd	}|d
d|}|dd}|dd}|dd}|dd}|dd}|dd}|S )Nr   z0x[0123456789abcdef]+L?z<HUB>Xepollselectdefault
test__util__main__z	 fileno=. zref=-1zref=0ztype.current_treezGreenletTree.current_treezgevent.tests.__main__.MyLocalz__main__.MyLocalz	(otid=X) z dead>>z current active started main>)recompileIreprr#   rT   replacesub)r   r   rj   hexobjhub_reprr   r   r   _normalize_tree_format   s    zTestTree._normalize_tree_formatc                 C   st   t    |  \}}}W d    n1 sw   Y  | |j | d| | |}d }| 	|| d S )NParenta(  <greenlet.greenlet object at X>
 :    Parent: None
 :    Greenlet Locals:
 :      Local <class '__main__.MyLocal'> at X
 :        {'foo': 42}
 +--- <HUB>
 :          Parent: <greenlet.greenlet object at X>
 +--- <Greenlet "Greenlet-1" at X: t2>; finished with value <Greenlet "CustomName-0" at 0x
 :          Parent: <HUB>
 |    +--- <Greenlet "CustomName-0" at X: t1>; finished with exception ExpectedException()
 :                Parent: <HUB>
 +--- <Greenlet "Greenlet-2" at X: t2>; finished with value <Greenlet "CustomName-4" at 0x
 :          Parent: <HUB>
 |    +--- <Greenlet "CustomName-4" at X: t1>; finished with exception ExpectedException()
 :                Parent: <HUB>
 +--- <Greenlet "Greenlet-3" at X: t3>; finished with value <Greenlet "Greenlet-5" at X
 :          Parent: <HUB>
 :          Spawn Tree Locals
 :          {'stl': 'STL'}
 |    +--- <Greenlet "Greenlet-5" at X: t2>; finished with value <Greenlet "CustomName-6" at 0x
 :                Parent: <HUB>
 |         +--- <Greenlet "CustomName-6" at X: t1>; finished with exception ExpectedException()
 :                      Parent: <HUB>
 +--- <Greenlet "Greenlet-7" at X: <bound method GreenletTree.current_tree of <class 'gevent.util.GreenletTree'>>>; finished with value <gevent.util.GreenletTree obje
            Parent: <HUB>
        )
r#   rT   ignoring_expected_test_errorra   
assertTruer,   r   rr   stripassertEqual)r   r`   str_treetree_formatr   expectedr   r   r   	test_tree   s   
zTestTree.test_treec                 C   sB   dt j_t    |   W d    d S 1 sw   Y  d S )NF)r#   r6   r7   rT   rt   ra   r9   r   r   r   test_tree_no_track   s   
"zTestTree.test_tree_no_trackc                    s\   ddl m    fdd} |}| }|jdddd}| |}d }| || d S )	Nr   )greenletc                     s"    t jj} d| j_d| _|  S r3   )r   rX   rY   parentgreenlet_tree_is_ignoredgreenlet_tree_is_rootswitch)cRawGreenletr   r   t4   s   z,TestTree.test_forest_fake_parent.<locals>.t4FrL   rO   zc<greenlet.greenlet object at X>; not running
 :    Parent: <greenlet.greenlet object at X>
        )r}   r   rZ   rr   rv   rw   )r   r   r+   r`   ry   r   rz   r   r   r   test_forest_fake_parent   s   	

z TestTree.test_forest_fake_parent)r   r   r   r5   r<   ra   rr   rC   ignores_leakcheckr{   r|   r   __classcell__r   r   r:   r   r2   H   s    5
&
r2   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestAssertSwitchesc              	   C   s  ddl m} | tj }t  |d W d    n1 s w   Y  W d    n1 s/w   Y  t|j}| d| | tj! td |d W d    n1 sZw   Y  W d    n1 siw   Y  | tj#}tjddd |d W d    n1 sw   Y  W d    n1 sw   Y  t|j}| d| | d	| tjd
dd |d W d    d S 1 sw   Y  d S )Nr   )sleepgMbP?zTo any greenlet ing?T)hub_onlyzTo the hub inz(max allowed 0.0010 seconds)g      ?F)	timer   assertRaisesr   _FailedToSwitchassert_switchesr?   	exceptionr   )r   r   excmessager   r   r   test_time_sleep   s6   






"z"TestAssertSwitches.test_time_sleepc              	   C   s   |  tj t  W d    n1 sw   Y  W d    n1 s%w   Y  tjddd	 W d    d S 1 s=w   Y  d S )Nr    F)max_blocking_timer   )r   r   r   r   r9   r   r   r   test_no_switches_no_function  s   
"z/TestAssertSwitches.test_no_switches_no_functionc              	   C   sP   |  t t  t 1 sw   Y  W d    d S 1 s!w   Y  d S r
   )r   	NameErrorr   r   r9   r   r   r   test_exception_not_supressed  s
   
"z/TestAssertSwitches.test_exception_not_supressedc              	   C   s   ddl m} t ]}| | |j | |jj t 1}| | |j | |jj|j |d| | f | 	| |jj | 	| |jj W d    n1 sRw   Y  | | |j W d    d S 1 sjw   Y  d S )Nr   )gettracer   )
r}   r   r   r   rw   tracerassertIsNotNoneactive_greenletprevious_trace_functionassertIs)r   r   outerinnerr   r   r   test_nested  s   

	"zTestAssertSwitches.test_nestedN)r   r   r   r   r   r   r   r   r   r   r   r      s
    %
r   rg   )
__future__r   r   r   rR   unittestgevent.testingtestingrC   r#   r   r   r}   r   gevent._compatr   r	   
skipOnPyPyTestCaser   r2   r   r   mainr   r   r   r   <module>   s*   -  H