
    Rc?                         d dl mZ d dlZd dlZddlm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dS )    )print_functionN   )TestCasec                       e Zd ZdS )	SomeErrorN)__name__
__module____qualname__     ;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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+   )r0   s   r   r(   zDTestGreenletTracing.test_b_exception_disables_tracing.<locals>.dummy9   s    KKMMMMMr   T)r   r+   )r   r-   r+   r   r.   r   r/   gettrace)r   r(   gr   r0   s       @r   !test_b_exception_disables_tracingz5TestGreenletTracing.test_b_exception_disables_tracing7   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*N)r   r	   r
   __doc__r3   r8   r   r   r   r%   r%      s<           (    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__I   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__L   s(    UEL$89:::::r   c                 B    t          j        |           | _        | j        S r   )sys
setprofiler   r   r   s    r   r    zPythonTracer.__enter__P   s    t,,|r   c                 8    t          j        | j                   d S r   )rD   rE   r   r   s     r   r"   zPythonTracer.__exit__T   s    t}%%%%%r   r#   r   r   r   r;   r;   F   sU        H  ; ; ;  & & & & &r   r;   c                      dS N*   r   r   r   r   tpt_callbackrJ   W   s    2r   c                   R    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z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    callrJ   rO   rJ   rQ   r"   c_callr"   )r;   rJ   r/   )r   r   s     r   test_trace_events_trivialz+TestPythonTracing.test_trace_events_triviald   s    ^^ 	wNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #
 #
 #
 	 	 	 	 	s   *..c                 z    t                      5 }|                                 d d d            n# 1 swxY w Y   |S r   )r;   r+   r   gletr   s      r   _trace_switchzTestPythonTracing._trace_switchw   sp    ^^ 	wKKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   044c                 `    |                      |          }|                     |g d           d S )N)	rN   )rU   rZ   )rQ   runrP   rR   rO   r\   )c_returnrZ   rS   rT   )rZ   r/   rX   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   rJ   r   r   r   r\   zOTestPythonTracing.test_trace_events_into_greenlet_func_already_set.<locals>.run   s    >>!r   )r_   r   )r   r\   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   rb   r   s    r   r\   zUTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.X.run   s    #~~%r   Nr   r	   r
   r\   r   r   r   Xrf      s#        & & & & &r   ri   )r   r_   )r   ri   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)rN   rP   rR   r]   rP   rR   rS   rT   )r+   rJ   r"   r/   r   )r   r7   tracers      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    rJ   rl   s   r   r\   zQTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler.<locals>.run   s    >>!r   )r;   rm   r   )r   r\   rl   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   rp   )r   rl   s    r   r\   zWTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.X.run   s      """#~~%r   Nrh   rq   s   r   ri   ru      s.        & & & & & & &r   ri   )r;   r   rm   )r   ri   rl   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 rH   )r    rJ   r+   r2   rl   s   r   g1_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g1_run   s9    NNNIIKKKNNN2r   c                      t                                                        t                                                         d S r   )rJ   r"   r+   r1   rl   s   r   g2_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g2_run   s6    NNNOONNNIIKKKKKr   rI   )	rN   rP   rR   rU   r{   )rQ   r~   rP   rR   rS   rT   r;   r   r+   r/   rJ   r   r   r{   r~   xr1   r2   rl   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 rH   )r   r-   parentr+   r    rJ   rz   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+   rJ   r"   r}   s   r   r~   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g2_run   sT    !!(//111NNNOONNNIIKKKKKr   rI   )rN   rP   rR   r   rP   rR   rS   rT   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
   r9   maxDiffrV   rZ   r_   rc   rj   rm   rr   rw   r   r   r   r   r   rL   rL   Z   s          G  &  
  J J J7 7 7   E E EJ J J# # #J/ / / / /r   rL   )
__future__r   rD   r    r   	Exceptionr   objectr   r%   r;   rJ   rL   r   r   r   <module>r      s1   % % % % % % 



       	 	 	 	 		 	 	 	) ) ) ) )V ) ) )(% % % % %( % % %P& & & & &6 & & &"  s s s s s s s s s sr   