o
    Šåg°
  ã                   @   s|   d dl mZ 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 ddlm	Z	 G dd	„ d	eƒZ
ed
kr<e ¡  dS dS )é    )Úprint_function)Úabsolute_importNé   )Ú_test_extension_cpp)ÚTestCase)ÚWINc                   @   sH   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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   úS/var/www/html/flaskapp/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)r4   r   Útest_exception_throw_nonstd©r   r   r   r   Ú&test_unhandled_nonstd_exception_aborts-   ó   z/CPPTests.test_unhandled_nonstd_exception_abortsc                 C   r5   r6   )r4   r   Útest_exception_throw_stdr8   r   r   r   Ú#test_unhandled_std_exception_aborts1   r:   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.)r4   r*   )r   r,   r   r   r   Ú8test_unhandled_std_exception_as_greenlet_function_aborts5   s
   
úzACPPTests.test_unhandled_std_exception_as_greenlet_function_abortsc                 C   s   |   d¡ d S )NÚ*run_unhandled_exception_in_greenlet_aborts)r4   r8   r   r   r   Ú+test_unhandled_exception_in_greenlet_abortsC   s   z4CPPTests.test_unhandled_exception_in_greenlet_abortsN)r"   Ú
__module__Ú__qualname__r   r4   r9   r<   ÚunittestÚskipIfr   r>   r@   r   r   r   r   r      s    	

r   Ú__main__)Ú
__future__r   r   r$   rC   r   Ú r   r   r   r   r"   Úmainr   r   r   r   Ú<module>   s    <ÿ