
    i)                        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
ej                  Z ej        d           G d dej                              Z ej        d           G d dej                              Z G d dej                  Z G d dej                  Zedk    r ej                     dS dS )    )absolute_import)division)print_functionN)util)local)
getcurrent)NativeStrIOc                       e Zd Zd ZdS )MyLocalc                     || _         d S N)foo)selfr   s     B/usr/local/lib/python3.11/dist-packages/gevent/tests/test__util.py__init__zMyLocal.__init__   s        N)__name__
__module____qualname__r    r   r   r   r      s#            r   r   z'5.10.x is *very* slow formatting stacksc                       e Zd Zd Zd ZdS )
TestFormatc                 2   t          j                    }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values      r   
test_basiczTestFormat.test_basic   s    $&&		%  i'''k5))) 	u---*E222,e44444r   c                    t          j                     }d|_        d }t          j        |          }d|_        |                                 |j        }|                     d|           |                     d|           |                     d|           |                     d|           |                     d|           |                     d|           |                     d	|           d S )
N   c                  8   t          d          } | sJ t          j                    }|sJ dt          j                    j        d<   t                      }t          j        t          j        |          }|	                                 |
                                S )N*   za value)file)r   r   geventr   spawn_tree_localsr	   spawnr   print_run_infor    getvalue)ll2iogs       r   rootz+TestFormat.test_with_Greenlet.<locals>.root,   s{    AHHHBIII?AF1)<BT0r:::AFFHHH;;== r   Printerr   zParent:r   zGreenlet Locals:r   z{})	r   	some_attrr+   r-   namer    r$   r!   r"   )r   rlr4   r3   r$   s        r   test_with_GreenletzTestFormat.test_with_Greenlet)   s    []]	! 	! 	! L	 	lE***i''')5111(%000i'''i'''u%%%%%r   N)r   r   r   r%   r9   r   r   r   r   r      s2        
5 
5 
5& & & & &r   r   zSee TestFormatc                        e Zd Z fdZ fdZd Zd Zej        d             Z	ej        d             Z
ej        d             Z xZS )TestTreec                     t          t          |                                            t          j        j        | _        dt          j        _        d | _        d S NT)superr;   setUpr+   configtrack_greenlet_treemaxDiffr   	__class__s    r   r?   zTestTree.setUpK   sA    h##%%%#)=#D ,0)r   c                     | j         t          j        _         t          t          |                                            d S r   )rA   r+   r@   r>   r;   tearDownrC   s    r   rF   zTestTree.tearDownQ   s2    ,0,D)h&&(((((r   c                   	
 t          d          D ]}t          j                     d t          j                    _        d t          j                    _        g }t          d          }|sJ d 	d 
	
fd 	          }|                                 |	                     	                     	fd} 	|          }|j
        
d|j
        d<   |                                  	t          j        j                  }|                                 |j        }|t          |          |                    d	d	d
          fS )N   r)   c                     t          t                                 t          j        |           }t	          |d           t          |           |S )Nminimal_ident)strr   r+   r-   getattr)fr3   s     r   szTestTree._build_tree.<locals>.sa   sC    
QA A'''FFFHr   c                  (    t          j                    r   )	greentestExpectedExceptionr   r   r   t1z TestTree._build_tree.<locals>.t1j   s    -///r   c                  |    t          d          } | sJ            }dt          |j                  z   |_        |S )N   zCustomName-)r   rK   rJ   r7   )r0   r3   rN   rR   s     r   t2z TestTree._build_tree.<locals>.t2m   s?    AHHH"A"S%9%99AFHr   c                                  S r   r   )rN   rU   s   r   t3z TestTree._build_tree.<locals>.t3z   s    1R55Lr   STLstlFrunning_stacksspawning_stacksdetails)rangegccollectr+   get_hubresolver
threadpoolr   r    appendr,   r   GreenletTreecurrent_treer$   rK   format)r   _gletsr0   s1rW   s3s4treerN   rR   rU   s            @@@r   _build_treezTestTree._build_treeU   s    q 	 	AJLLLL$(!&*#BKK	 	 		0 	0 	0	 	 	 	 	 	 QrUU
			QQrUU	 	 	 	 	 	 QrUU+*/B '
			Qt -..
			xSYYuHM5O 5O !P !P P 	Pr   c                    dd l }|                    d|j                  }t          t	          j                              }|                    |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+   rb   replacesub)r   r$   ry   hexobjhub_reprs        r   _normalize_tree_formatzTestTree._normalize_tree_format   s2   			5rt<<(())h00

3&&gx00h	22lJ77

;''++B66h0013NOO=?QRRk2..h,,=sCCr   c                    t          j                                                    5  |                                 \  }}}d d d            n# 1 swxY 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+   rb   ignoring_expected_test_errorro   
assertTruer4   r"   r   stripassertEqual)r   rn   str_treetree_formatr$   expecteds         r   	test_treezTestTree.test_tree   s    ^::<< 	= 	=*.*:*:*<*<'D(K	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 		"""8,,,++K884 EGG5 	6 	5)))))s   AAAc                     dt           j        _        t          j                                                    5  |                                  d d d            d S # 1 swxY w Y   d S )NF)r+   r@   rA   rb   r   ro   r   s    r   test_tree_no_trackzTestTree.test_tree_no_track   s    ,1)^::<< 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA Ac                    ddl m  fd} |          }|                                }|                    ddd          }|                     |          }d                                }|                     ||           d S )Nr   )greenletc                       t           j        j                  } d| j        _        d| _        |                                 S r=   )r   rf   rg   parentgreenlet_tree_is_ignoredgreenlet_tree_is_rootswitch)cRawGreenlets    r   t4z,TestTree.test_forest_fake_parent.<locals>.t4   s:     D-:;;A04AH-&*A#88::r   FrZ   r]   zc<greenlet.greenlet object at X>; not running
 :    Parent: <greenlet.greenlet object at X>
        )r   r   rh   r   r   r   )r   r   r3   rn   r   r$   r   r   s          @r   test_forest_fake_parentz TestTree.test_forest_fake_parent   s    444444	 	 	 	 	 KOOxxzzkkU>C+E +Ek F F++K88 EGG 	
 	5)))))r   )r   r   r   r?   rF   ro   r   rP   ignores_leakcheckr   r   r   __classcell__)rD   s   @r   r;   r;   H   s            ) ) ) ) )3P 3P 3Pj  *  $* $* ! $*L    ! 
  * * ! * * * * *r   r;   c                   &    e Zd Zd Zd Zd Zd ZdS )TestAssertSwitchesc                    ddl m} |                     t          j                  5 }t          j                    5   |d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |j                  }|                     d|           |                     t          j                  5  t          j        d          5   |d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t          j                  5 }t          j        dd          5   |d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |j                  }|                     d|           |                     d	|           t          j        d
d          5   |d           d d d            d S # 1 swxY w 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_switchesrK   	exceptionr!   )r   r   excmessages       r   test_time_sleepz"TestAssertSwitches.test_time_sleep   s    t344 	%''  e              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 cm$$*G444 t344 	 	%e,,  c


              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 t344 	%ed;;;  a              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 cm$$ow///4g>>> !#666 	 	E!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A)AA)A	A)A	A))A-0A-=DC*D*C.	.D1C.	2DDD+E1EE1E	E1!E	"E11E58E5G++G/2G/c                 ,   |                      t          j                  5  t          j                    5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        dd          5  	 d d d            d S # 1 swxY w Y   d S )Nr'   F)max_blocking_timer   )r   r   r   r   r   s    r   test_no_switches_no_functionz/TestAssertSwitches.test_no_switches_no_function  sT   t344 	 	%''                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 !AFFF 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sE   AAAA	A	A	
AA A:B		BBc                     |                      t                    5  t          j                    5  t                      # 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S r   )r   	NameErrorr   r   r   s    r   test_exception_not_supressedz/TestAssertSwitches.test_exception_not_supressed  s    y)) 	" 	"%'' " "kk!" " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s,   A>A	AA	AAAc                    ddl m} t          j                    5 }|                      |            |j                   |                     |j        j                   t          j                    5 }|                      |            |j                   |                     |j        j        |j                   |                    d| | f           | 	                    | |j        j                   | 	                    | |j        j                   d d d            n# 1 swxY w Y   |                      |            |j                   d d d            d S # 1 swxY w Y   d S )Nr   )gettracer   )
r   r   r   r   r   tracerassertIsNotNoneactive_greenletprevious_trace_functionassertIs)r   r   outerinners       r   test_nestedzTestAssertSwitches.test_nested  s   %%%%%%!## 	7uXXZZ666  !=>>>%'' B5  U\:::  !Eu|TTTXd|444dEL$@AAAdEL$@AAAB B B B B B B B B B B B B B B XXZZ666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s7   AE0B!DED!	!E$D!	%&EEEN)r   r   r   r   r   r   r   r   r   r   r   r      sQ        " " "J  " " "7 7 7 7 7r   r   c                       e Zd Zd ZdS )	TestFuncsc                     dd l dd l}g fd}|                    |          }|                                 |                    d           |                     dg           d S )Nr   c                  ~    t          j                                                                        d           d S )Nr'   )r   clear_stack_framescurrentframere   )	completedinspects   r   do_itz0TestFuncs.test_clear_stack_frames.<locals>.do_it7  s:    #G$8$8$:$:;;;Qr   )target
   r'   )r   	threadingThreadstartr    r   )r   r   r   tr   r   s       @@r   test_clear_stack_framesz!TestFuncs.test_clear_stack_frames3  s    		  	  	  	  	  	  E**					r


QC(((((r   N)r   r   r   r   r   r   r   r   r   1  s#        
) 
) 
) 
) 
)r   r   rv   )
__future__r   r   r   r`   unittestgevent.testingtestingrP   r+   r   r   r   r   gevent._compatr	   r   
skipOnPyPyTestCaser   r;   r   r   r   mainr   r   r   <module>r      s  
 ' & & & & &       % % % % % % 				  " " " " " "                    & & & & & &    ek   
 ?@@+& +& +& +& +&# +& +& A@+&Z &''\* \* \* \* \*y! \* \* ('\*~F7 F7 F7 F7 F7* F7 F7 F7R) ) ) ) )	" ) ) ) zIN r   