o
    i\                     @   st   d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ ddlmZ G dd deZ	e
dkr8e  dS dS )	    N   )WIN)TestCase)_test_extension_cppc                   @   sP   e Zd Zdd Zdd Zdd Zdd Zee	d	d
d Z
dd Zdd ZdS )CPPTestsc                 C   sX   g }t dD ]}ttj}|| || qt|D ]\}}| | | qd S )N   )rangegreenletr   test_exception_switchswitchappend	enumerateassertEqual)self	greenletsig r   W/var/www/html/arapca_proje/venv/lib/python3.10/site-packages/greenlet/tests/test_cpp.pyr
      s   
zCPPTests.test_exception_switchc           
      C   s   dd l }dd l}|j|jtd}|j|t|ts|j	n|g}|}| 
tj}tj|dtjd W d    n1 s=w   Y  |j}|  }	| |j|	 | d|j |jS )Nr   zfail_cpp_exception.pyzutf-8)encodingstderrzfail_cpp_exception is running)ossyspathjoindirname__file__
executable
isinstancestr__name__assertRaises
subprocessCalledProcessErrorcheck_outputSTDOUT	exception,get_expected_returncodes_for_aborted_processassertIn
returncodeoutput)
r   targetr   r   scriptargs__traceback_info__excexexpected_exitr   r   r   _do_test_unhandled_exception   s(   
z%CPPTests._do_test_unhandled_exceptionc                 C      |  tj d S N)r2   r   test_exception_throw_nonstdr   r   r   r   &test_unhandled_nonstd_exception_aborts.      z/CPPTests.test_unhandled_nonstd_exception_abortsc                 C   r3   r4   )r2   r   test_exception_throw_stdr6   r   r   r   #test_unhandled_std_exception_aborts2   r8   z,CPPTests.test_unhandled_std_exception_abortsz#XXX: This does not crash on Windowsc                 C   s   |  d}| d| d S )Nrun_as_greenlet_targetzThrown from an extension.)r2   r(   )r   r*   r   r   r   8test_unhandled_std_exception_as_greenlet_function_aborts6   s
   
zACPPTests.test_unhandled_std_exception_as_greenlet_function_abortsc                 C   s   |  d d S )N*run_unhandled_exception_in_greenlet_aborts)r2   r6   r   r   r   +test_unhandled_exception_in_greenlet_abortsD   s   z4CPPTests.test_unhandled_exception_in_greenlet_abortsc              	   C   s   dd }t   td}tdD ]}| t t| W d    n1 s(w   Y  qt   td}|| }| 	d| d S )Nc                   S   s   t d)Nboom)
ValueErrorr   r   r   r   raiserJ   s   zECPPTests.test_leak_test_exception_switch_and_do_in_g2.<locals>.raiserr	   i  r   )
gccollectobjgraphcountr   r!   r@   r   "test_exception_switch_and_do_in_g2r   )r   rA   before_afterleakedr   r   r   ,test_leak_test_exception_switch_and_do_in_g2I   s   

z5CPPTests.test_leak_test_exception_switch_and_do_in_g2N)r    
__module____qualname__r
   r2   r7   r:   unittestskipIfr   r<   r>   rK   r   r   r   r   r      s    	

r   __main__)rB   r"   rN   r	   rD    r   r   r   r   r    mainr   r   r   r   <module>   s    M