
    h:                          d dl m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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gettotalrefcountz%Broken on debug builds of Python 3.12c                       e Zd Zy)	SomeErrorN)__name__
__module____qualname__     DD:\EasyAligner\venv\Lib\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>.dummy-   s    r   c                      t               r   )r	   r   r   r   dummyexcz=TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummyexc/   s
    +r   switchthrow)r   
getcurrentr   r-   assertRaisesr	   assertEqual)r   mainr*   r,   r   g1g2s          r   test_a_greenlet_tracingz+TestGreenletTracing.test_a_greenlet_tracing+   s    ""$		 ""5)BIIK""8,Bi3	  	bz"Dz"bz"r4j!	#
 	 s   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-   )r2   s   r   r*   zDTestGreenletTracing.test_b_exception_disables_tracing.<locals>.dummyA   s    KKMr   T)r   r-   )r   r/   r-   r   r0   r	   r1   gettrace)r   r*   gr   r2   s       @r   !test_b_exception_disables_tracingz5TestGreenletTracing.test_b_exception_disables_tracing?   s    ""$	e$	
40Gi2X..0$7 1 	ay!#
 		 10s   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_twiceM   s'    
  !f% VVs   ,5N)r
   r   r   __doc__r5   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__Z   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__]   s#    UELL$8$89:r   c                 N    t        j                  |       | _        | j                  S r   )sys
setprofiler    r   r!   s    r   r"   zPythonTracer.__enter__a   s    t,||r   c                 B    t        j                  | j                         y r   )rJ   rK   r    r   s     r   r$   zPythonTracer.__exit__e   s    t}}%r   r%   r   r   r   rA   rA   W   s    H;&r   rA   c                       yN*   r   r   r   r   tpt_callbackrP   h   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"   callrP   rU   rP   rW   r$   c_callr$   )rA   rP   r1   )r   r   s     r   test_trace_events_trivialz+TestPythonTracing.test_trace_events_trivialu   s2    ^wN  	 #
 	 ^s   3<c                 f    t               5 }|j                          d d d        |S # 1 sw Y   S xY wr   )rA   r-   r   gletr   s      r   _trace_switchzTestPythonTracing._trace_switch   s'    ^wKKM  s   &0c                 N    | j                  |      }| j                  |g d       y )N)	rT   )r[   r`   )rW   runrV   rX   rU   rb   )c_returnr`   rY   rZ   )r`   r1   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   rP   r   r   r   rb   zOTestPythonTracing.test_trace_events_into_greenlet_func_already_set.<locals>.run   s
    >!r   )re   r   )r   rb   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   rh   r!   s    r   rb   zUTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.X.run   s
    #~%r   Nr
   r   r   rb   r   r   r   Xrl      s    &r   ro   )r   re   )r   ro   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)rT   rV   rX   rc   rV   rX   rY   rZ   )r-   rP   r$   r1   r   )r   r9   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"   rP   r=   s   r   rb   zQTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler.<locals>.run   s    >!r   )rA   rr   r   )r   rb   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   ru   r<   s    r   rb   zWTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.X.run   s      "#~%r   Nrn   rv   s   r   ro   rz      s    &r   ro   )rA   r   rr   )r   ro   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rN   )r"   rP   r-   r4   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   )rP   r$   r-   r3   r=   s   r   g2_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g2_run   s     NOONIIKr   rO   )	rT   rV   rX   r[   r   )rW   r   rV   rX   rY   rZ   rA   r   r-   r1   rP   r   r   r   r   xr3   r4   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rN   )r   r/   parentr-   r"   rP   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   r/   r   r-   rP   r$   r   s   r   r   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g2_run   s;    !((//1NOONIIKr   rO   )rT   rV   rX   r   rV   rX   rY   rZ   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\   r`   re   ri   rp   rr   rw   r|   unittestskipIfDEBUG_BUILD_PY312r   r   r   r   r   rR   rR   k   sz     G&
J7 EJ X__'(# )#J X__'(/ )/r   rR   __main__)
__future__r   rJ   r   r    r   r   hasattrr   	Exceptionr	   objectr   r'   rA   rP   rR   r
   r2   r   r   r   <module>r      s    % 
     
.gc-.+ 
		 	)V )(.&( .&b&6 &"t tn zHMMO r   