
    [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o 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                     dS dS )    )print_functionN   )TestCase)PY312gettotalrefcountz%Broken on debug builds of Python 3.12c                       e Zd ZdS )	SomeErrorN)__name__
__module____qualname__     j/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/greenlet/tests/test_tracing.pyr	   r	      s        Dr   r	   c                   ,    e Zd ZdZddZd Zd Zd ZdS )GreenletTracerNFc                 "    g | _         || _        d S N)actionserror_on_trace)selfr   s     r   __init__zGreenletTracer.__init__   s    ,r   c                 V    | j                             |           | j        rt          d S r   )r   appendr   r	   r   argss     r   __call__zGreenletTracer.__call__   s2    D!!! 	O	 	r   c                 B    t          j        |           | _        | j        S r   )greenletsettraceoldtracer   r   s    r   	__enter__zGreenletTracer.__enter__   s     )$//|r   c                 8    t          j        | j                   d S 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      sZ        H- - - -  
  ) ) ) ) )r   r   c                   $    e Zd ZdZd Zd Zd ZdS )TestGreenletTracingz*
    Tests of ``greenlet.settrace()``
    c           	         t          j                    }d }d }t                      5 }t          j         |          }|                                 t          j         |          }|                     t
          |j                   d d d            n# 1 swxY w Y   |                     |d||ffd||ffd||ffd||ffg           d S )Nc                      d S r   r   r   r   r   dummyz:TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummy-   s    Dr   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.   "$$	 	 		 	 	  	4"5))BIIKKK"8,,Bi333		4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	bz"Dz"bz"r4j!	#
 	 	 	 	 	s   ABBBc                    t          j                    fd}t          j         |          }|                                 t          d          5 }|                     t
          |j                   |                     t          j                    d            d d d            n# 1 swxY w Y   |                     |d|ffg           d S )Nc                  0                                       d S r   )r-   )r2   s   r   r*   zDTestGreenletTracing.test_b_exception_disables_tracing.<locals>.dummyA   s    KKMMMMMr   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000 	8Gi222X.00$777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	ay!#
 	 	 	 	 	s   AB&&B*-B*c                     t                      }|5  t          j        |           d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   tracers     r   test_set_same_tracer_twicez.TestGreenletTracing.test_set_same_tracer_twiceM   s    
  !! 	& 	&f%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   377N)r
   r   r   __doc__r5   r:   r>   r   r   r   r'   r'   &   sK           (  & & & & &r   r'   c                   *    e Zd ZdZd Zd Zd Zd ZdS )PythonTracerNc                     g | _         d S r   )r   r!   s    r   r   zPythonTracer.__init__Z   s    r   c                 R    | j                             ||j        j        f           d S r   )r   r   f_codeco_name)r   frameeventargs       r   r   zPythonTracer.__call__]   s(    UEL$89:::::r   c                 B    t          j        |           | _        | j        S r   )sys
setprofiler    r   r!   s    r   r"   zPythonTracer.__enter__a   s    t,,|r   c                 8    t          j        | j                   d S r   )rJ   rK   r    r   s     r   r$   zPythonTracer.__exit__e   s    t}%%%%%r   r%   r   r   r   rA   rA   W   sU        H  ; ; ;  & & & & &r   rA   c                      dS N*   r   r   r   r   tpt_callbackrP   h   s    2r   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dS )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            n# 1 swxY w Y   |                     |g d           d S )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   s    ^^ 	wNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #
 #
 #
 	 	 	 	 	s   *..c                 z    t                      5 }|                                 d d d            n# 1 swxY w Y   |S r   )rA   r-   r   gletr   s      r   _trace_switchzTestPythonTracing._trace_switch   sp    ^^ 	wKKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   044c                 `    |                      |          }|                     |g d           d S )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   sH    $$T** 
#
 
#
 
#
 
	 
	 
	 
	 
	r   c                 Z    d }|                      t          j        |                     d S )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   s8    	" 	" 	" 	11(2CC2H2HIIIIIr   c                 p     G d dt           j                   }|                      |                       d S )Nc                       e Zd Zd ZdS )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   sQ    	& 	& 	& 	& 	&! 	& 	& 	& 	11!!##66666r   c                     |                                  t                       |                                 |                     |j        g d           d S )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   s]    	


 	*
 	*
 	*
 		 		 		 		 		r   c                 ~    t                      fd}|                     t          j        |                     d S )Nc                  H                                       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   s^    	" 	" 	" 	" 	" 	<<X=Ns=S=S=C	E 	E 	E 	E 	Er   c                     t                       G fddt          j                  }|                      |                       d S )Nc                       e Zd Z fdZdS )STestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.Xc                 H                                      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   sg    	& 	& 	& 	& 	& 	& 	&! 	& 	& 	&
 	<<QQSS&IIIIIr   c                 B   t                      d d fd}fd}t          j        |          t          j        |                                          }|                     |d           t	                       |                     j        g d           d S )Nc                                                        t                                                         t                       dS rN   )r"   rP   r-   r4   r=   s   r   g1_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g1_run   s9    NNNIIKKKNNN2r   c                      t                                                        t                                                         d S r   )rP   r$   r-   r3   r=   s   r   g2_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g2_run   s6    NNNOONNNIIKKKKKr   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   s    	 	 	 	 	 		 	 	 	 	 	 v&&v&&IIKKB 
*
 
*
 
*
 
	 
	 
	 
	 
	r   c                    t                      d d fd}fd}t          j        |          t          j        |                                                                                                            }|                     |d           t	                       |                     j        g d           d S )Nc                      t          j                    j                                                                          t                                                         t                       dS rN   )r   r/   parentr-   r"   rP   r   s   r   r   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g1_run   sW    !!(//111NNNIIKKKNNN2r   c                      t          j                    j                                         t	                                                        t	                                                         d S r   )r   r/   r   r-   rP   r$   r   s   r   r   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g2_run   sT    !!(//111NNNOONNNIIKKKKKr   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&& 			 			 IIKK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   s          G  &  
  J J J7 7 7   E E EJ J 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   % % % % % % 



               
.ggc-..+ 
	 	 	 	 		 	 	 	) ) ) ) )V ) ) )(.& .& .& .& .&( .& .& .&b& & & & &6 & & &"  t t t t t t t tn zHMOOOOO r   