
    Bi\                         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e      Z	e
dk(  r ej                          yy)	    N   )WIN)TestCase)_test_extension_cppc                   b    e Zd Zd Zd Zd Zd Z ej                  e	d      d        Z
d Zd Zy	)
CPPTestsc                    g }t        d      D ]G  }t        j                  t        j                        }|j	                  |       |j                  |       I t        |      D ]%  \  }}| j                  |j	                         |       ' y )N   )rangegreenletr   test_exception_switchswitchappend	enumerateassertEqual)self	greenletsigs       ]/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/greenlet/tests/test_cpp.pyr   zCPPTests.test_exception_switch   sz    	q 	 A!!"5"K"KLAHHQKQ	  i( 	,DAqQXXZ+	,    c                 R   dd l }dd l}|j                  j                  |j                  j	                  t
              d      }|j                  |t        |t              s|j                  n|g}|}| j                  t        j                        5 }t        j                  |dt        j                         d d d        j                  }| j!                         }	| j#                  |j$                  |	       | j#                  d|j&                         |j&                  S # 1 sw Y   ixY w)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   s    GGOOH%#
 z&RU?V\bc!z<<= 	## !((	 ]]IIKbmm]35ryyAyy	 	s   'DD&c                 B    | j                  t        j                         y N)r6   r   test_exception_throw_nonstdr   s    r   &test_unhandled_nonstd_exception_abortsz/CPPTests.test_unhandled_nonstd_exception_aborts.   s    ))*=*Y*YZr   c                 B    | j                  t        j                         y r8   )r6   r   test_exception_throw_stdr:   s    r   #test_unhandled_std_exception_abortsz,CPPTests.test_unhandled_std_exception_aborts2   s    ))*=*V*VWr   z#XXX: This does not crash on Windowsc                 J    | j                  d      }| j                  d|       y )Nrun_as_greenlet_targetzThrown from an extension.)r6   r,   )r   r.   s     r   8test_unhandled_std_exception_as_greenlet_function_abortszACPPTests.test_unhandled_std_exception_as_greenlet_function_aborts6   s)     223KL
 (	
r   c                 &    | j                  d       y )N*run_unhandled_exception_in_greenlet_aborts)r6   r:   s    r   +test_unhandled_exception_in_greenlet_abortsz4CPPTests.test_unhandled_exception_in_greenlet_abortsD   s    ))*VWr   c                 z   d }t        j                          t        j                  d      }t	        d      D ]5  }| j                  t              5  t        j                  |       d d d        7 t        j                          t        j                  d      }||z
  }| j                  d|       y # 1 sw Y   xY w)Nc                      t        d      )Nboom)
ValueError r   r   raiserzECPPTests.test_leak_test_exception_switch_and_do_in_g2.<locals>.raiserJ   s    V$$r   r   i  r   )
gccollectobjgraphcountr   r%   rH   r   "test_exception_switch_and_do_in_g2r   )r   rJ   before_afterleakeds         r   ,test_leak_test_exception_switch_and_do_in_g2z5CPPTests.test_leak_test_exception_switch_and_do_in_g2I   s    	% 	


+t 	OA"":. O#FFvNO O	O 	

z*F#O Os   B11B:	N)r$   
__module____qualname__r   r6   r;   r>   unittestskipIfr   rA   rD   rT   rI   r   r   r   r      sF    ,.[X X__S?@

 A

X
$r   r   __main__)rK   r&   rW   r   rM    r   r   r   r   r$   mainrI   r   r   <module>r\      sF    	       !J$x J$Z zHMMO r   