
    Wd                         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__     W/var/www/html/t/fyr/venv311/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+   )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*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_twiceE   s    
  !! 	& 	&f%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   377N)r   r	   r
   __doc__r3   r8   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__R   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__U   s(    UEL$89:::::r   c                 B    t          j        |           | _        | j        S r   )sys
setprofiler   r   r   s    r   r    zPythonTracer.__enter__Y   s    t,,|r   c                 8    t          j        | j                   d S r   )rH   rI   r   r   s     r   r"   zPythonTracer.__exit__]   s    t}%%%%%r   r#   r   r   r   r?   r?   O   sU        H  ; ; ;  & & & & &r   r?   c                      dS N*   r   r   r   r   tpt_callbackrN   `   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    callrN   rS   rN   rU   r"   c_callr"   )r?   rN   r/   )r   r   s     r   test_trace_events_trivialz+TestPythonTracing.test_trace_events_trivialm   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_switch   sp    ^^ 	wKKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   044c                 `    |                      |          }|                     |g d           d S )N)	rR   )rY   r^   )rU   runrT   rV   rS   r`   )c_returnr^   rW   rX   )r^   r/   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   rN   r   r   r   r`   zOTestPythonTracing.test_trace_events_into_greenlet_func_already_set.<locals>.run   s    >>!r   )rc   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   rf   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   Xrj      s#        & & & & &r   rm   )r   rc   )r   rm   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)rR   rT   rV   ra   rT   rV   rW   rX   )r+   rN   r"   r/   r   )r   r7   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    rN   r;   s   r   r`   zQTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler.<locals>.run   s    >>!r   )r?   rp   r   )r   r`   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   rs   r:   s    r   r`   zWTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.X.run   s      """#~~%r   Nrl   rt   s   r   rm   rx      s.        & & & & & & &r   rm   )r?   r   rp   )r   rm   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 rL   )r    rN   r+   r2   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   )rN   r"   r+   r1   r;   s   r   g2_runzPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g2_run   s6    NNNOONNNIIKKKKKr   rM   )	rR   rT   rV   rY   r~   )rU   r   rT   rV   rW   rX   r?   r   r+   r/   rN   r   r   r~   r   xr1   r2   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 rL   )r   r-   parentr+   r    rN   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+   rN   r"   r   s   r   r   zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g2_run   sT    !!(//111NNNOONNNIIKKKKKr   rM   )rR   rT   rV   r   rT   rV   rW   rX   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=   maxDiffrZ   r^   rc   rg   rn   rp   ru   rz   r   r   r   r   r   rP   rP   c   s          G  &  
  J J J7 7 7   E E EJ J J# # #J/ / / / /r   rP   )
__future__r   rH   r    r   	Exceptionr   objectr   r%   r?   rN   rP   r   r   r   <module>r      s1   % % % % % % 



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