
    <|h)                        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j0                          yy)    )absolute_import)division)print_functionN)util)local)
getcurrent)NativeStrIOc                       e Zd Zd Zy)MyLocalc                     || _         y N)foo)selfr   s     V/var/www/html/test/engine/venv/lib/python3.12/site-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y)
TestFormatc                    t        j                         }dj                  |      }| j                  d|       | j                  d|       | j	                  d|       | j	                  d|       | j	                  d|       y )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   sn    $$&		% i'k5) 	u-*E2,e4r   c                    t        j                          }d|_        d }t        j                  |      }d|_        |j                          |j                  }| j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d	|       y )
N   c                  0   t        d      } | sJ t        j                         }|sJ dt        j                         j                  d<   t               }t        j                  t        j                  |      }|j                          |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,   so    AH1BI2?AF11)<BT00r:AFFH;;= 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    [[]	! LL	 	lE*i')51(%0i'i'u%r   N)r   r   r   r%   r9   r   r   r   r   r      s    
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 | _        y NT)superr;   setUpr+   configtrack_greenlet_treemaxDiffr   	__class__s    r   r?   zTestTree.setUpK   s5    h#%#)==#D#D ,0)r   c                 h    | j                   t        j                  _         t        t        |           y r   )rA   r+   r@   r>   r;   tearDownrC   s    r   rF   zTestTree.tearDownQ   s"    ,0,D,D)h&(r   c                 x  	
 t        d      D ]  }t        j                           d t        j                         _        d t        j                         _        g }t        d      }|sJ d 	d 
	
fd 	      }|j                          |j                   	             	fd} 	|      }|j                  d|j                  d<   |j                           	t        j                  j                        }|j                          |j                  }|t        |      |j!                  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   s1    
QA A'FHr   c                  *    t        j                         r   )	greentestExpectedExceptionr   r   r   t1z TestTree._build_tree.<locals>.t1j   s    --//r   c                  p    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   s6    AH1"A"S%99AFHr   c                              S r   r   )rN   rU   s   r   t3z TestTree._build_tree.<locals>.t3z   s    R5Lr   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JJL	$(!&*#BKq		0	 rU
	QrU	 rU+*/B  '
	t  --.
	xxSYuHM5O !P P 	Pr   c                 N   dd l }|j                  d|j                        }t        t	        j
                               }|j                  |d      }|j                  d|      }|j                  dd      }|j                  dd      }|j                  dd	      }|j                  d
      j                  d|      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  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   s    5rtt<()h0

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

;'++B6h013NO=?QRk2.h,=sCr   c                 Z   t        j                         j                         5  | j                         \  }}}d d d        | j	                  j
                         | j                  d       | j                        }dj                         }| j                  ||       y # 1 sw Y   jxY w)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4 EG5 	6 	5)G	= 	=s   B!!B*c                     dt         j                  _        t        j                         j	                         5  | j                          d d d        y # 1 sw Y   y xY w)NF)r+   r@   rA   rb   r   ro   r   s    r   test_tree_no_trackzTestTree.test_tree_no_track   sB    ,1)^^::< 		 	 	s   AAc                     ddl m  fd} |      }|j                         }|j                  ddd      }| j                  |      }dj	                         }| j                  ||       y )Nr   )greenletc                       t         j                  j                        } d| j                  _        d| _        | j                         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--::;A04AHH-&*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   sr    4	 OxxzkkU>C+Ek F++K8 EG 	
 	5)r   )r   r   r   r?   rF   ro   r   rP   ignores_leakcheckr   r   r   __classcell__)rD   s   @r   r;   r;   H   sh    )3Pj*   $* !$*L    !
   * !*r   r;   c                   $    e Zd Zd Zd Zd Zd Zy)TestAssertSwitchesc                    ddl m} | j                  t        j                        5 }t        j
                         5   |d       d d d        d d d        t        j                        }| j                  d|       | j                  t        j                        5  t        j
                  d      5   |d       d d d        d d d        | j                  t        j                        5 }t        j
                  dd      5   |d       d d d        d d d        t        |j                        }| j                  d|       | j                  d	|       t        j
                  d
d      5   |d       d d d        y # 1 sw Y   9xY w# 1 sw Y   >xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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34 	%%' e	 cmm$*G4 t334 	%%e, c
	 t334 	%%ed; a	 cmm$ow/4g> !!#6 	!H	 	7 	 	 	 	 	 		 	sv   F	E;FF!0	F9F!(F9 	F-	F9)	G;F	 FFF	F!!F*-F6	2F99GGc                    | j                  t        j                        5  t        j                         5  	 d d d        d d d        t        j                  dd      5  	 d d d        y # 1 sw Y   3xY w# 1 sw Y   7xY w# 1 sw Y   y xY w)Nr'   F)max_blocking_timer   )r   r   r   r   r   s    r   test_no_switches_no_functionz/TestAssertSwitches.test_no_switches_no_function  s~    t334 	%%' 	
 !!AF 		 		 	 	
	 	s-   A5A)A5B)A2	.A55A>B
c                     | j                  t              5  t        j                         5  t               # 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY wr   )r   	NameErrorr   r   r   s    r   test_exception_not_supressedz/TestAssertSwitches.test_exception_not_supressed  sN    y) 	"%%' "k!" " "	" 	" 	"s   A6?	AAc                    ddl m} t        j                         5 }| j	                   |       |j
                         | j                  |j
                  j                         t        j                         5 }| j	                   |       |j
                         | j	                  |j
                  j                  |j
                         |j                  d| | f       | j                  | |j
                  j                         | j                  | |j
                  j                         d d d        | j	                   |       |j
                         d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)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XZ6  !=!=>%%' B5  U\\:  !E!Eu||TXd|4dELL$@$@AdELL$@$@AB XZ6	7 	7B B		7 	7s%   AE&6B2E()E&E#	E&&E/N)r   r   r   r   r   r   r   r   r   r   r   r      s    "J"7r   r   c                       e Zd Zd Zy)	TestFuncsc                     dd l dd l}g fd}|j                  |      }|j                          |j	                  d       | j                  dg       y )Nr   c                  n    t        j                  j                                 j                  d       y )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  sN    		  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   
 '  % 	  "     &ekk 
 ?@+&## +& A+&Z &'\*y!! \* (\*~F7** F7R)	"" ) zINN r   