a
    Zg:                      @   s   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oHeeddfZ	G dd	 d	e
ZG d
d deZG dd deZG dd deZdd ZG dd deZedkre  dS )    )print_functionN   )TestCase)PY312gettotalrefcountz%Broken on debug builds of Python 3.12c                   @   s   e Zd ZdS )	SomeErrorN)__name__
__module____qualname__ r   r   i/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/greenlet/tests/test_tracing.pyr      s   r   c                   @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )GreenletTracerNFc                 C   s   g | _ || _d S N)actionserror_on_trace)selfr   r   r   r   __init__   s    zGreenletTracer.__init__c                 G   s   | j | | jrtd S r   )r   appendr   r   r   argsr   r   r   __call__   s    zGreenletTracer.__call__c                 C   s   t | | _| jS r   )greenletsettraceoldtracer   r   r   r   r   	__enter__   s    zGreenletTracer.__enter__c                 G   s   t | j d S r   )r   r   r   r   r   r   r   __exit__"   s    zGreenletTracer.__exit__)Fr   r	   r
   r   r   r   r   r   r   r   r   r   r      s
   
r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestGreenletTracingz*
    Tests of ``greenlet.settrace()``
    c              	   C   s   t  }dd }dd }t :}t  |}|  t  |}| t|j W d    n1 s^0    Y  | |d||ffd||ffd||ffd||ffg d S )Nc                   S   s   d S r   r   r   r   r   r   dummy-   s    z:TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummyc                   S   s
   t  d S r   )r   r   r   r   r   dummyexc/   s    z=TestGreenletTracing.test_a_greenlet_tracing.<locals>.dummyexcswitchthrow)r   
getcurrentr   r!   assertRaisesr   assertEqual)r   mainr   r    r   g1g2r   r   r   test_a_greenlet_tracing+   s    

,



z+TestGreenletTracing.test_a_greenlet_tracingc                    s   t    fdd}t  |}|  tdd.}| t|j | t  d  W d    n1 sd0    Y  | |d |ffg d S )Nc                      s       d S r   )r!   r   r&   r   r   r   A   s    zDTestGreenletTracing.test_b_exception_disables_tracing.<locals>.dummyT)r   r!   )r   r#   r!   r   r$   r   r%   gettrace)r   r   gr   r   r*   r   !test_b_exception_disables_tracing?   s    
.
z5TestGreenletTracing.test_b_exception_disables_tracingc                 C   s8   t  }| t| W d    n1 s*0    Y  d S r   )r   r   r   )r   tracerr   r   r   test_set_same_tracer_twiceM   s    z.TestGreenletTracing.test_set_same_tracer_twiceN)r   r	   r
   __doc__r)   r-   r/   r   r   r   r   r   &   s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 ZdS )
PythonTracerNc                 C   s
   g | _ d S r   )r   r   r   r   r   r   Z   s    zPythonTracer.__init__c                 C   s   | j ||jjf d S r   )r   r   f_codeco_name)r   frameeventargr   r   r   r   ]   s    zPythonTracer.__call__c                 C   s   t | | _| jS r   )sys
setprofiler   r   r   r   r   r   r   a   s    zPythonTracer.__enter__c                 G   s   t | j d S r   )r7   r8   r   r   r   r   r   r   e   s    zPythonTracer.__exit__r   r   r   r   r   r1   W   s
   r1   c                   C   s   dS N*   r   r   r   r   r   tpt_callbackh   s    r;   c                   @   sx   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zeje dd Zeje dd ZdS )TestPythonTracingz
    Tests of the interaction of ``sys.settrace()``
    with greenlet facilities.

    NOTE: Most of this is probably CPython specific.
    Nc                 C   s@   t  }t  W d    n1 s"0    Y  | |g d d S )N)returnr   callr;   r>   r;   r@   r   c_callr   )r1   r;   r%   )r   r   r   r   r   test_trace_events_trivialu   s    $	z+TestPythonTracing.test_trace_events_trivialc                 C   s2   t  }|  W d    n1 s$0    Y  |S r   )r1   r!   r   Zgletr   r   r   r   _trace_switch   s    &zTestPythonTracing._trace_switchc                 C   s   |  |}| |g d d S )N)	r=   )rD   rG   )r@   runr?   rA   r>   rH   )Zc_returnrG   rB   rC   )rG   r%   rF   r   r   r   $_check_trace_events_func_already_set   s    
z6TestPythonTracing._check_trace_events_func_already_setc                 C   s   dd }|  t| d S )Nc                   S   s   t  S r   r;   r   r   r   r   rH      s    zOTestPythonTracing.test_trace_events_into_greenlet_func_already_set.<locals>.run)rJ   r   r   rH   r   r   r   0test_trace_events_into_greenlet_func_already_set   s    zBTestPythonTracing.test_trace_events_into_greenlet_func_already_setc                 C   s"   G dd dt j }| |  d S )Nc                   @   s   e Zd Zdd ZdS )zQTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.Xc                 S   s   t  S r   rK   r   r   r   r   rH      s    zUTestPythonTracing.test_trace_events_into_greenlet_subclass_already_set.<locals>.X.runNr   r	   r
   rH   r   r   r   r   X   s   rO   )r   rJ   r   rO   r   r   r   4test_trace_events_into_greenlet_subclass_already_set   s    zFTestPythonTracing.test_trace_events_into_greenlet_subclass_already_setc                 C   s,   |   t  |  | |jg d d S )N)r=   r?   rA   rI   r?   rA   rB   rC   )r!   r;   r   r%   r   )r   r,   r.   r   r   r   /_check_trace_events_from_greenlet_sets_profiler   s    zATestPythonTracing._check_trace_events_from_greenlet_sets_profilerc                    s(   t    fdd}| t|  d S )Nc                      s       t S r   r   r;   r   r.   r   r   rH      s    zQTestPythonTracing.test_trace_events_from_greenlet_func_sets_profiler.<locals>.run)r1   rR   r   rL   r   rT   r   2test_trace_events_from_greenlet_func_sets_profiler   s
    zDTestPythonTracing.test_trace_events_from_greenlet_func_sets_profilerc                    s.   t   G  fdddtj}| |   d S )Nc                       s   e Zd Z fddZdS )zSTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.Xc                    s       t S r   rS   r   rT   r   r   rH      s    zWTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profiler.<locals>.X.runNrN   r   rT   r   r   rO      s   rO   )r1   r   rR   rP   r   rT   r   6test_trace_events_from_greenlet_subclass_sets_profiler   s    zHTestPythonTracing.test_trace_events_from_greenlet_subclass_sets_profilerc                    sn   t  d  d fdd} fdd}t| t|  }| |d t  | jg d d S )Nc                      s       t     t  dS r9   )r   r;   r!   r   r(   r.   r   r   g1_run   s
    zPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g1_runc                      s    t     t      d S r   )r;   r   r!   r   r'   r.   r   r   g2_run   s    zPTestPythonTracing.test_trace_events_multiple_greenlets_switching.<locals>.g2_runr:   )	r=   r?   rA   rD   rX   )r@   rZ   r?   rA   rB   rC   r1   r   r!   r%   r;   r   r   rX   rZ   xr   r'   r(   r.   r   .test_trace_events_multiple_greenlets_switching   s    

z@TestPythonTracing.test_trace_events_multiple_greenlets_switchingc                    s~   t  d  d fdd} fdd}t| t|       }| |d t  | jg d d S )Nc                      s.   t  j    t     t  dS r9   )r   r#   parentr!   r   r;   r   rW   r   r   rX      s    zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g1_runc                      s.   t  j  t    t     d S r   )r   r#   ra   r!   r;   r   r   rY   r   r   rZ      s
    zYTestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings.<locals>.g2_runr:   )r=   r?   rA   r[   r?   rA   rB   rC   r\   r]   r   r_   r   7test_trace_events_multiple_greenlets_switching_siblings   s    

zITestPythonTracing.test_trace_events_multiple_greenlets_switching_siblings)r   r	   r
   r0   ZmaxDiffrE   rG   rJ   rM   rQ   rR   rU   rV   unittestZskipIfDEBUG_BUILD_PY312r`   rb   r   r   r   r   r<   k   s   		
%r<   __main__)
__future__r   r7   r   rc    r   r   hasattrrd   	Exceptionr   objectr   r   r1   r;   r<   r   r&   r   r   r   r   <module>   s"   1 8