o
    eQ(                     @   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   GD:\Projects\ConvertPro\env\Lib\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
ZThreadsZ	Greenlets
Spawned atzParent greenletSpawn Tree Locals)r   Z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   Zprint_run_infor   getvalue)ll2iogr   r   r   root,   s   z+TestFormat.test_with_Greenlet.<locals>.rootZPrinterr   zParent:r   zGreenlet Locals:r	   z{})	r   Z	some_attrr    r"   namer   r   r   r   )r   Zrlr(   r'   r   r   r   r   test_with_Greenlet)   s   
zTestFormat.test_with_GreenletN)r   r   r   r   r*   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)superr+   setUpr    configtrack_greenlet_treeZmaxDiffr   	__class__r   r   r.   K   s   

zTestTree.setUpc                    s   | j tj_ tt|   d S r
   )r0   r    r/   r-   r+   tearDownr1   r2   r   r   r4   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
   )	greentestZExpectedExceptionr   r   r   r   t1j      z TestTree._build_tree.<locals>.t1c                     s,   t d} | sJ  }dt|j |_|S )N   zCustomName-)r	   r7   r6   r)   )r$   r'   )r:   r<   r   r   t2m   s
   z TestTree._build_tree.<locals>.t2c                      s    S r
   r   r   )r:   r?   r   r   t3z   r=   z TestTree._build_tree.<locals>.t3ZSTLstlFZrunning_stacksZspawning_stacksdetails)rangegcZcollectr    get_hubresolverZ
threadpoolr	   r   appendr!   r   GreenletTreecurrent_treer   r7   format)	r   _Zgletsr$   s1r@   Zs3Zs4treer   )r:   r<   r?   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>XZepollselectdefaultZ
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    rG   replacesub)r   r   rW   ZhexobjZ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 )NZ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    rG   ignoring_expected_test_errorrP   
assertTruer(   r   r]   stripassertEqual)r   rO   Z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    r/   r0   rG   r^   rP   r1   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 r,   )r   rJ   rK   parentZgreenlet_tree_is_ignoredZgreenlet_tree_is_rootswitch)cZRawGreenletr   r   t4   s   z,TestTree.test_forest_fake_parent.<locals>.t4FrB   rC   zc<greenlet.greenlet object at X>; not running
 :    Parent: <greenlet.greenlet object at X>
        )rf   rh   rL   r]   r`   ra   )r   rk   r'   rO   rb   r   rc   r   rj   r   test_forest_fake_parent   s   	

z TestTree.test_forest_fake_parent)r   r   r   r.   r4   rP   r]   r;   Zignores_leakcheckrd   re   rl   __classcell__r   r   r2   r   r+   H   s    5
&
r+   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)	timero   assertRaisesr   _FailedToSwitchassert_switchesr7   	exceptionr   )r   ro   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)Zmax_blocking_timerp   )rr   r   rs   rt   r1   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
   )rr   	NameErrorr   rt   r1   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   )gettracerh   )
rf   r|   r   rt   ra   ZtracerZassertIsNotNoneZactive_greenletZprevious_trace_functionZassertIs)r   r|   outerinnerr   r   r   test_nested  s   

	"zTestAssertSwitches.test_nestedN)r   r   r   rx   ry   r{   r   r   r   r   r   rn      s
    %
rn   rT   )
__future__r   r   r   rF   ZunittestZgevent.testingtestingr;   r    r   r   rf   r   Zgevent._compatr   r	   Z
skipOnPyPyZTestCaser   r+   rn   r   mainr   r   r   r   <module>   s*   -  H