
    [h
                         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	e          Z
ed
k    r ej                     dS dS )    )print_function)absolute_importN   )_test_extension_cpp)TestCase)WINc                   `    e Zd Zd Zd Zd Zd Z ej        e	d          d             Z
d ZdS )	CPPTestsc                 8   g }t          d          D ]J}t          j        t          j                  }|                    |           |                    |           Kt          |          D ]-\  }}|                     |                                |           .d S )N   )rangegreenletr   test_exception_switchswitchappend	enumerateassertEqual)self	greenletsigs       f/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/greenlet/tests/test_cpp.pyr   zCPPTests.test_exception_switch   s    	q 	  	 A!"5"KLLAHHQKKKQi(( 	, 	,DAqQXXZZ++++	, 	,    c                 2   dd l }dd l}|j                            |j                            t
                    d          }|j        |t          |t                    s|j	        n|g}|}| 
                    t          j                  5 }t          j        |dt          j                   d d d            n# 1 swxY 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_exits
             r   _do_test_unhandled_exceptionz%CPPTests._do_test_unhandled_exception   sH   			


GOOH%%#
 
 z&RU?V?V(b\bc!z<== 	# !(   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]IIKKbm]3335ryAAAys   "B66B:=B:c                 D    |                      t          j                   d S N)r8   r   test_exception_throw_nonstdr   s    r   &test_unhandled_nonstd_exception_abortsz/CPPTests.test_unhandled_nonstd_exception_aborts-   s     ))*=*YZZZZZr   c                 D    |                      t          j                   d S r:   )r8   r   test_exception_throw_stdr<   s    r   #test_unhandled_std_exception_abortsz,CPPTests.test_unhandled_std_exception_aborts1   s     ))*=*VWWWWWr   z#XXX: This does not crash on Windowsc                 \    |                      d          }|                     d|           d S )Nrun_as_greenlet_targetzThrown from an extension.)r8   r.   )r   r0   s     r   8test_unhandled_std_exception_as_greenlet_function_abortszACPPTests.test_unhandled_std_exception_as_greenlet_function_aborts5   s@     223KLL
 (	
 	
 	
 	
 	
r   c                 0    |                      d           d S )N*run_unhandled_exception_in_greenlet_aborts)r8   r<   s    r   +test_unhandled_exception_in_greenlet_abortsz4CPPTests.test_unhandled_exception_in_greenlet_abortsC   s    ))*VWWWWWr   N)r&   
__module____qualname__r   r8   r=   r@   unittestskipIfr   rC   rF    r   r   r
   r
      s        , , ,  .[ [ [X X X X_S?@@

 

 A@

X X X X Xr   r
   __main__)
__future__r   r   r(   rI   r    r   r   r   r
   r&   mainrK   r   r   <module>rP      s    % % % % % % & & & & & &       ! ! ! ! ! !            9X 9X 9X 9X 9Xx 9X 9X 9Xx zHMOOOOO r   