
    R3j                         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d dl	Z	 e	j                          yy)	    N   )_test_extension)TestCase)ignores_leakcheckc                   ^    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zed        Zy)	CAPITestsc                 v    | j                  dt        j                  t        j                  d                    y )N2   c                       y)Nr
    r       T/DATA/.local/lib/python3.12/site-packages/greenlet/tests/test_extension_interface.py<lambda>z'CAPITests.test_switch.<locals>.<lambda>   s    br   )assertEqualr   test_switchgreenletselfs    r   r   zCAPITests.test_switch   s,    ++H,=,=j,IJ	Lr   c                    d }t        j                   |      }| j                  dt        j                  |dd             | j	                  t
        d      5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nc                     | |z  S Nr   xys     r   adderz+CAPITests.test_switch_kwargs.<locals>.adder   s    q5Lr            r   zargument 1 must be greenletznot a greenlet)r   r   r   test_switch_kwargsassertRaisesRegex	TypeError)r   r   gs      r   r   zCAPITests.test_switch_kwargs   sc    	e$O>>qAKL##I/LM../?@ NMMs   A66A?c                     d }t        j                   |      j                         }| j                  d t        j                  |             y )Nc                     d } t        j                   |       }|j                          t        j                         j                  j                  |       t        j                         j                  j	                  t        d             y )Nc                      t        j                         j                  j                          t        j                         j                  j                          t	        d      )Nz#Should never have reached this code)r   
getcurrentparentswitchAssertionErrorr   r   r   barz2CAPITests.test_setparent.<locals>.foo.<locals>.bar   sF    ##%,,335
 ##%,,335$%JKKr   zShould never reach this code)r   r(   r&   r'   throwr)   )r*   childs     r   fooz%CAPITests.test_setparent.<locals>.foo   sg    L %%c*ELLN!((//6!((..=>@r   )r   r(   r   r   test_setparent)r   r-   	foo_childs      r   r.   zCAPITests.test_setparent   s>    	@ %%c*113	==iHIr   c                 ,    t        j                          y r   )r   test_getcurrentr   s    r   r1   zCAPITests.test_getcurrent+   s    '')r   c                 P    | j                  dt        j                  d              y )Nc                       y)Nr3   r   r   r   r   r   z-CAPITests.test_new_greenlet.<locals>.<lambda>/   s    r   )r   r   test_new_greenletr   s    r   r5   zCAPITests.test_new_greenlet.   s    o??LMr   c                 `    | j                  t        j                  t        j                         y r   )assertRaisesr   GreenletExitr   test_raise_dead_greenletr   s    r   test_raise_greenlet_deadz"CAPITests.test_raise_greenlet_dead1   s"    !!?#K#K	Mr   c                 `    | j                  t        j                  t        j                         y r   )r7   r   errorr   test_raise_greenlet_errorr   s    r   r=   z#CAPITests.test_raise_greenlet_error5   s     NNOEE	Gr   c                 B   g fd}t        j                   |      }|j                          t        j                  |       | j	                  t              d       | j                  t        d   t              d       | j	                  t        d         dd       y )Nc                      	 t        j                         j                  j                          y # t        $ r)  j                  t        j                         d          Y y t         j                  $ r t        w xY w)Nr   )
r   r&   r'   r(   
ValueErrorappendsysexc_infor8   r)   )seens   r   r-   z!CAPITests.test_throw.<locals>.foo<   s]    %##%,,335 /CLLN1-.(( %$$%s   ,0 /A:!A:r   r   z"ValueError was not raised in foo()ztake that sucka!zmessage doesn't match)
r   r(   r   
test_throwr   len
assertTrue
isinstancer@   str)r   r-   r"   rD   s      @r   rE   zCAPITests.test_throw9   s    	% c"	
""1%TA&tAw
+0	2 	QL#	%r   c                    | j                  t              5 }t        j                  t	        j
                         t        t               |        d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)Nz1throw() third argument must be a traceback object)
r7   r!   r   test_throw_exactr   r&   	Exceptionr   rI   	exceptionr   excs     r   test_non_traceback_paramz"CAPITests.test_non_traceback_paramO   sd    y)S,,##%	 * 	S]]+L	N *)s   7A;;Bc                    | j                  t              5 }t        j                  t	        j
                         t               t               d        d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)Nz0instance exception may not have a separate value)r7   r!   r   rK   r   r&   rL   BaseExceptionr   rI   rM   rN   s     r   test_instance_of_wrong_typez%CAPITests.test_instance_of_wrong_typeZ   sf    y)S,,##%	 * 	S]]+K	M *)s   ;A??Bc                     | j                  t              5 }t        j                  t	        j
                         dd d        d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)Nabcz1exceptions must be classes, or instances, not str)	r7   r!   r   rK   r   r&   r   rI   rM   rN   s     r   test_not_throwablezCAPITests.test_not_throwablef   sb    y)S,,##%	 * 	S]]+L	N *)s   +A//A8c                 f   ddl m} d}|rdg|z  }ndg|z  }dd fdd fd	d
 ffD ]s  \  }}| j                  |      5  t        |      D cg c]	  } |        }}|D cg c]  }t	        j
                  |      dz
   }	}| j                  |	|       d d d        u y c c}w c c}w # 1 sw Y   xY w)Nr   )PY314d   r   r   c                  Z    t        j                  t        j                  t                    S r   )r   r   r   objectr   r   r   r   z&CAPITests.test_leaks.<locals>.<lambda>{   s    _001B1B61JKr   r   c                  Z    t        j                  t        j                  t                    S r   )r   r   r   r[   r   r   r   r   z&CAPITests.test_leaks.<locals>.<lambda>}   s    _778I8I&8QRr   r5   c                  4    t        j                  t              S r   )r   r5   r[   r   r   r   r   z&CAPITests.test_leaks.<locals>.<lambda>   s    _66v>r   ) rX   subTestrangerB   getrefcountr   )
r   rX   itersexpected_refsnamecaller_resultsirefss
             r   
test_leakszCAPITests.test_leaksq   s    C%KMC%KMKM!RT >@
LD& d#-25\:\68\:    OOA&*  
   }5 $#
 ; $#s)   B'BB'B">B'
B''B0	N)__name__
__module____qualname__r   r   r.   r1   r5   r:   r=   rE   rP   rS   rV   r   rj   r   r   r   r   r   
   sV    LAJ&*NMG%,	N
M	N 6 6r   r   __main__)rB   r   r^   r   r   	leakcheckr   r   rk   unittestmainr   r   r   <module>rr      s@    
    (~6 ~6B zHMMO r   