
    h!                     p   d dl mZ d dlZd dlZd dlZd dlZddlmZ ddlmZ exr=  ej                  d      "d ej                  d      j                         vn eed      d	fZ G d
 de      Z G d de      Z G d de      Z G d de      Zd Z G d de      Zedk(  r ej,                          yy)    )print_functionN   )TestCase)PY312OPTz-DNDEBUGgettotalrefcountz1Broken on assertion-enabled builds of Python 3.12c                       e Zd Zy)	SomeErrorN)__name__
__module____qualname__     Y/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/greenlet/tests/test_tracing.pyr
   r
      s    r   r
   c                   *    e Zd ZdZddZd Zd Zd Zy)GreenletTracerNc                      g | _         || _        y N)actionserror_on_trace)selfr   s     r   __init__zGreenletTracer.__init__   s    ,r   c                 ^    | j                   j                  |       | j                  rt        y r   )r   appendr   r
   r   argss     r   __call__zGreenletTracer.__call__!   s'    D!O r   c                 N    t        j                  |       | _        | j                  S r   )greenletsettraceoldtracer   r   s    r   	__enter__zGreenletTracer.__enter__&   s     ))$/||r   c                 B    t        j                  | j                         y r   )r   r    r!   r   s     r   __exit__zGreenletTracer.__exit__*   s    $--(r   )Fr   r   r   r!   r   r   r#   r%   r   r   r   r   r      s    H-
)r   r   c                   "    e Zd ZdZd Zd Zd Zy)TestGreenletTracingz*
    Tests of ``greenlet.settrace()``
    c           	      v   t        j                         }d }d }t               5 }t        j                   |      }|j                          t        j                   |      }| j	                  t
        |j                         d d d        | j                  d|ffd||ffd|ffd||ffg       y # 1 sw Y   0xY w)Nc                       y r   r   r   r   r   dummyz:TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummy5   s    r   c                      t               r   )r
   r   r   r   dummyexcz=TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummyexc7   s
    +r   switchthrow)r   
getcurrentr   r.   assertRaisesr
   assertEqual)r   mainr+   r-   r   g1g2s          r   test_a_greenlet_tracingz+TestGreenletTracing.test_a_greenlet_tracing3   s    ""$		  	4""5)BIIK""8,Bi3		4 	bz"Dz"bz"r4j!	#
 		4 	4s   AB//B8c                 z   t        j                         fd}t        j                   |      }|j                          t        d      5 }| j	                  t
        |j                         | j                  t        j                         d        d d d        | j                  d|ffg       y # 1 sw Y   !xY w)Nc                  &     j                          y r   )r.   )r3   s   r   r+   zDTestGreenletTracing.test_b_exception_disables_tracing.<locals>.dummyI   s    KKMr   T)r   r.   )r   r0   r.   r   r1   r
   r2   gettrace)r   r+   gr   r3   s       @r   !test_b_exception_disables_tracingz5TestGreenletTracing.test_b_exception_disables_tracingG   s    ""$	e$	
40 	8Gi2X..0$7	8 	ay!#
 			8 	8s   AB11B:c                 p    t               }|5  t        j                  |       d d d        y # 1 sw Y   y xY wr   )r   r   r    r   tracers     r   test_set_same_tracer_twicez.TestGreenletTracing.test_set_same_tracer_twiceU   s2    
  ! 	&f%	& 	& 	&s   ,5N)r   r   r   __doc__r6   r;   r?   r   r   r   r(   r(   .   s    (&r   r(   c                   (    e Zd ZdZd Zd Zd Zd Zy)PythonTracerNc                     g | _         y r   )r   r"   s    r   r   zPythonTracer.__init__b   s	    r   c                 f    | j                   j                  ||j                  j                  f       y r   )r   r   f_codeco_name)r   frameeventargs       r   r   zPythonTracer.__call__e   s#    UELL$8$89:r   c                 N    t        j                  |       | _        | j                  S r   )sys
setprofiler!   r   r"   s    r   r#   zPythonTracer.__enter__i   s    t,||r   c                 B    t        j                  | j                         y r   )rK   rL   r!   r   s     r   r%   zPythonTracer.__exit__m   s    t}}%r   r&   r   r   r   rB   rB   _   s    H;&r   rB   c                       yN*   r   r   r   r   tpt_callbackrQ   p   s    r   c                       e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ej                  e d        Z ej                  e d        Zy)TestPythonTracingz
    Tests of the interaction of ``sys.settrace()``
    with greenlet facilities.

    NOTE: Most of this is probably CPython specific.
    Nc                 ~    t               5 }t                d d d        | j                  g d       y # 1 sw Y   xY w)N)returnr#   callrQ   rV   rQ   rX   r%   c_callr%   )rB   rQ   r2   )r   r   s     r   test_trace_events_trivialz+TestPythonTracing.test_trace_events_trivial}   s:    ^ 	wN	 	 #
 		 	s   3<c                 f    t               5 }|j                          d d d        |S # 1 sw Y   S xY wr   )rB   r.   r   gletr   s      r   _trace_switchzTestPythonTracing._trace_switch   s,    ^ 	wKKM		s   &0c                 N    | j                  |      }| j                  |g d       y )N)	rU   )r\   ra   )rX   runrW   rY   rV   rc   )c_returnra   rZ   r[   )ra   r2   r_   s      r   $_check_trace_events_func_already_setz6TestPythonTracing._check_trace_events_func_already_set   s'    $$T* 
#
 
	r   c                 R    d }| j                  t        j                  |             y )Nc                      t               S r   rQ   r   r   r   rc   zOTestPythonTracing.test_trace_events_into_greenlet_func_already_set.<locals>.run   s
    >!r   )rf   r   )r   rc   s     r   0test_trace_events_into_greenlet_func_already_setzBTestPythonTracing.test_trace_events_into_greenlet_func_already_set   s"    	" 	11(2C2CC2HIr   c                 b     G d dt         j                         }| j                   |              y )Nc                       e Zd Zd Zy)QTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.Xc                     t               S r   ri   r"   s    r   rc   zUTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.X.run   s
    #~%r   Nr   r   r   rc   r   r   r   Xrm      s    &r   rp   )r   rf   )r   rp   s     r   4test_trace_events_into_greenlet_subclass_already_setzFTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set   s&    	&!! 	& 	11!#6r   c                     |j                          t                |j                          | j                  |j                  g d       y )N)rU   rW   rY   rd   rW   rY   rZ   r[   )r.   rQ   r%   r2   r   )r   r:   r>   s      r   /_check_trace_events_from_greenlet_sets_profilerzATestPythonTracing._check_trace_events_from_greenlet_sets_profiler   s3    	
 	*
 		r   c                 n    t               fd}| j                  t        j                  |             y )Nc                  8     j                          t               S r   r#   rQ   r>   s   r   rc   zQTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler.<locals>.run   s    >!r   )rB   rs   r   )r   rc   r>   s     @r   2test_trace_events_from_greenlet_func_sets_profilerzDTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler   s0    	" 	<<X=N=Ns=S=C	Er   c                 ~    t                G fddt        j                        }| j                   |              y )Nc                       e Zd Z fdZy)STestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.Xc                 8    j                          t               S r   rv   r=   s    r   rc   zWTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.X.run   s      "#~%r   Nro   rw   s   r   rp   r{      s    &r   rp   )rB   r   rs   )r   rp   r>   s     @r   6test_trace_events_from_greenlet_subclass_sets_profilerzHTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler   s0    	&!! 	&
 	<<QS&Ir   c                 &   t               d d fd}fd}t        j                  |      t        j                  |      j                         }| j                  |d       t	                | j                  j
                  g d       y )Nc                  n    j                          t                 j                          t                yrO   )r#   rQ   r.   r5   r>   s   r   g1_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g1_run   s%    NIIKNr   c                  n    t                j                          t                 j                          y r   )rQ   r%   r.   r4   r>   s   r   g2_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g2_run   s     NOONIIKr   rP   )	rU   rW   rY   r\   r   )rX   r   rW   rY   rZ   r[   rB   r   r.   r2   rQ   r   r   r   r   xr4   r5   r>   s       @@@r   .test_trace_events_multiple_greenlets_switchingz@TestPythonTracing.test_trace_events_multiple_greenlets_switching   sy    		 v&v&IIKB 
*
 
	r   c                 f   t               d d fd}fd}t        j                  |      t        j                  |      j                          j                          j                         }| j                  |d       t	                | j                  j
                  g d       y )Nc                      t        j                         j                  j                          j	                          t                 j                          t                yrO   )r   r0   parentr.   r#   rQ   r   s   r   r   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g1_run   s@    !((//1NIIKNr   c                      t        j                         j                  j                          t	                j                          t	                 j                          y r   )r   r0   r   r.   rQ   r%   r   s   r   r   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g2_run  s;    !((//1NOONIIKr   rP   )rU   rW   rY   r   rW   rY   rZ   r[   r   r   s       @@@r   7test_trace_events_multiple_greenlets_switching_siblingszITestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings   s     		 v&v& 			 			 IIKB 	*
 		r   )r   r   r   r@   maxDiffr]   ra   rf   rj   rq   rs   rx   r}   unittestskipIfASSERTION_BUILD_PY312r   r   r   r   r   rS   rS   s   sz     G&
J7 EJ X__+,# -#J X__+,/ -/r   rS   __main__)
__future__r   rK   	sysconfigr   r    r   r   get_config_varsplithasattrr   	Exceptionr
   objectr   r(   rB   rQ   rS   r   r3   r   r   r   <module>r      s    % 
      
 #9##E*6 	2)2259??AAS,-7 		 	)V )(.&( .&b&6 &"t tn zHMMO r   