
    Rc                     L   d dl mZ 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Zd dlm	Z	m
Z
 d dlmZ ddlmZ dd	lmZ  G d
 de          Zd Zd Z G d de          Z G d de          Z G d de          Z G d de          Zedk    rd dlZ ej                     dS dS )    )absolute_import)division)print_functionN)ABCMetaabstractmethod)greenlet   )TestCase)fails_leakcheckc                       e Zd ZdS )	SomeErrorN__name__
__module____qualname__     <lib/python3.11/site-packages/greenlet/tests/test_greenlet.pyr   r      s        Dr   r   c                     	 t          j                    j                                         n2#  |                     t          j                    d                     xY wt          Nr   )r   
getcurrentparentswitchappendsysexc_infor   seens    r   fmainr      sV    $++----CLNN1%&&&
Os	   *- /Ac                 X    d }t          ||           }|                    |           d S )Nc                     | Nr   )excs    r   crasherzsend_exception.<locals>.crasher%   s    	r   r   r   r   )gr#   r$   g1s       r   send_exceptionr)   "   s6      	'!	$	$	$BIIcNNNNNr   c                   6   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d 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d Zd Zed,d            Zed             Zd Z ed             Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+S )-TestGreenletc                 b   g fd}t          |          }                    d           |                                                     d           |                                                     d           |                     t	          t          d                               d S )Nc                                            d           t          j                    j                                                               d           d S )Nr	      r   r   r   r   r   lsts   r   fz'TestGreenlet._do_simple_test.<locals>.f0   sC    JJqMMM!!(//111JJqMMMMMr   r            )r   r   r   assertEquallistrange)selfr2   r'   r1   s      @r   _do_simple_testzTestGreenlet._do_simple_test-   s    	 	 	 	 	 QKK

1	




1	




1d588nn-----r   c                 .    |                                   d S r"   )r:   r9   s    r   test_simplezTestGreenlet.test_simple<   s    r   c                     t                      }|                     t                    5 }|                                 d d d            n# 1 swxY w Y   |                     dt          |j                             d S Nrun)r   assertRaisesAttributeErrorr   assertInstr	exceptionr9   r'   r#   s      r   (test_switch_no_run_raises_AttributeErrorz5TestGreenlet.test_switch_no_run_raises_AttributeError?   s    JJ~.. 	#HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	eS//00000s   A

AAc                 
   t                      }|                     t                    5 }|                    t                     d d d            n# 1 swxY w Y   |                     dt          |j                             d S r?   )r   rA   rB   throwr   rC   rD   rE   rF   s      r   'test_throw_no_run_raises_AttributeErrorz4TestGreenlet.test_throw_no_run_raises_AttributeErrorF   s    JJ~.. 	#GGI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	eS//00000s   AAAc                     t          d           }|                     |           |                     |j        t          j                               d S )Nr%   )r   assertIsNotNoneassertIsr   r   r9   r'   s     r   test_parent_equals_Nonez$TestGreenlet.test_parent_equals_NoneM   sK    D!!!Qah 3 5 566666r   c                     t          d           }|                     |           |                     |j                   d S )N)r@   )r   rL   assertIsNoner@   rN   s     r   test_run_equals_Nonez!TestGreenlet.test_run_equals_NoneR   sB    Q!%     r   c                 v   g fd}t          |          }t          |          }|                                 |                     t                    d           |                                 |                     t                    d           |                                 |                     t                    d           |                     |j        d           |                                 |                     t                    d           |                     |j        d           d S )Nc                                            d           t          j                    j                                                              ddg           d S )Nr	   )r   r   r   r   r   extendr0   s   r   r2   z)TestGreenlet.test_two_children.<locals>.fZ   sL    JJqMMM!!(//111JJ1vr   r	   r3   r4   T   )r   r   r6   lendead)r9   r2   r'   hr1   s       @r   test_two_childrenzTestGreenlet.test_two_childrenW   s   	 	 	 	 	 QKKQKK	


S1%%%	


S1%%%	


S1%%%&&&	


S1%%%&&&&&r   c                 :   g fdfd}t          |          }|                     t          j        |          d           |                                 |                     g d           |                     t          j        |          d           d S )Nc                                            d           t          j                    j                                         d S )Nbr/   r0   s   r   r2   z3TestGreenlet.test_two_recursive_children.<locals>.fn   s6    JJsOOO!!(//11111r   c                                           d           t                    } |                                                       d           d S )Nac)r   r   r   )r'   r2   r1   s    r   r'   z3TestGreenlet.test_two_recursive_children.<locals>.gr   s=    JJsOOOAHHJJJJJsOOOOOr   r3   )r_   r]   r`   )r   r6   r   getrefcountr   )r9   r'   r2   r1   s     @@r   test_two_recursive_childrenz(TestGreenlet.test_two_recursive_childrenk   s    	2 	2 	2 	2 	2	 	 	 	 	 	 QKK++Q///	


ooo...++Q/////r   c                     g  fdfdt          d          D             }|D ]}|                                 |D ]}|                    d                                t	                    t	          |                     d S )Nc                  Z                                                           d           d S NT)r:   r   )r9   successs   r   r2   z$TestGreenlet.test_threads.<locals>.f   s-      """NN4     r   c                 :    g | ]}t          j                   S )target)	threadingThread).0ir2   s     r   
<listcomp>z-TestGreenlet.test_threads.<locals>.<listcomp>   s'    ===ayq)))===r   
   )r8   startjoinr6   rW   )r9   thsthr2   rf   s   `  @@r   test_threadszTestGreenlet.test_threads   s    	! 	! 	! 	! 	! 	! >===599=== 	 	BHHJJJJ 	 	BGGBKKKKWs3xx00000r   c                 z   g }t          t                    }t          t                    }|                    |           |                    |           ||_        |                     |g            |                     t          |j                   |                     |t          g           |                                }|                     |d           |                     |t          g           |                    d          }|                     |d           |                     |t          g           d S )Nr      )r   r   r   r   r6   rA   r   )r9   r   r(   g2values        r   test_exceptionzTestGreenlet.test_exception   s   e__e__
		$
		$	r""" 	)RY///	{+++		###	{+++		"###	{+++++r   c                     g }t          t                    }|                    |           |                     t          t
          |t                     |                     |t          g           d S r"   )r   r   r   rA   KeyErrorr)   r6   )r9   r   r(   s      r   test_send_exceptionz TestGreenlet.test_send_exception   sY    e__
		$(NBAAAz*****r   c                    g }t          t                    }t          t                    }|                    |           |                    |           |                     |g            ~t	          j                     |                     |t           j        g           ~t	          j                     |                     |t           j        t           j        g           d S r"   )r   r   r   r6   gccollectGreenletExit)r9   r   r(   rw   s       r   test_dealloczTestGreenlet.test_dealloc   s    e__e__
		$
		$r"""

 56777

 5x7LMNNNNNr   c                    d }t          |          }|                                 t          j        }	 ddlm} n# t          $ r	 ddlm} Y nw xY w |            x}t          _        	 ~|t          _        n# |t          _        w xY w|                                }| 	                    d|           | 	                    d|           | 	                    d|           d S )Nc                      	 t          j                    j                                         d S # t           j        $ r t
          w xY wr"   )r   r   r   r   r   r   r   r   r   r@   zHTestGreenlet.test_dealloc_catches_GreenletExit_throws_other.<locals>.run   sN     #%%,3355555(       s	   *. Ar   )StringIO	Exceptionignoredr   )
r   r   r   stderr	cStringIOr   ImportErroriogetvaluerC   )r9   r@   r'   	oldstderrr   r   vs          r   .test_dealloc_catches_GreenletExit_throws_otherz;TestGreenlet.test_dealloc_catches_GreenletExit_throws_other   s   	  	  	  SMM	



 J		$******* 	$ 	$ 	$########	$&hjj(	#"CJJCJ""""OOk1%%%i###k1%%%%%s   ; AA(A6 6Bc                 |   g g t          j                    t          j                    t          j                    t          j                    fd}t          j        |          }|                                                     d           |                     g            |                     t                    d           d d = t          j                     |                     g            	                                                     d           	 |                     t          j        g           	                                 |                    d           d d = d d = d S # 	                                 |                    d           d d = d d = w xY w)Nc                     t          t                    } |                                                    |            ~ t	          j                                                                          d           t                                                                            d           t                       d S )Nr.   )r   r   r   r   r~   r   setwait)r(   /bg_glet_created_running_and_no_longer_ref_in_bgbg_should_be_clearfg_ref_releasedok_to_exit_bg_threadr   somerefs    r   r2   z1TestGreenlet.test_dealloc_other_thread.<locals>.f   s    %BIIdOOONN2JLLL;??AAA  ###JJJ""$$$ %%a(((JJJJJr   rh   ro   r	   r.   )rj   Eventrk   rp   r   r6   rW   r~   r   r   r   r   rq   )	r9   r2   tr   r   r   r   r   r   s	      @@@@@@r   test_dealloc_other_threadz&TestGreenlet.test_dealloc_other_thread   s   :C/:K:K7#/++&_..(00	 	 	 	 	 	 	 	 	 	 A&&&				7<<R@@@r"""Wq)))AAAJ

r""""""	TH$9#:;;; $$&&&FF2JJJQQQ


 !$$&&&FF2JJJQQQ
NNNNs   0!F 5F;c                 n     fd}t          |          }|                                }                     ||j        u                                 |           |                                }                     |                                |d                                |j        d            d S )Nc                      t          j        d          }                     | j        d            t	          j                    j                            |            dS )Nr   meaning of life)r   	_getframer6   f_backr   r   r   r   )r2   r9   s    r   f1z#TestGreenlet.test_frame.<locals>.f1  sP    a  AQXt,,,!!(//222$$r   r   )r   r   
assertTruegr_frameassertFalser6   )r9   r   r'   framefrom_gs   `    r   
test_framezTestGreenlet.test_frame  s    	% 	% 	% 	% 	%
 RLL

+,,,!2333T*****r   c                    d }t          j        |d          }t          j        |d          }|                                 |                                 |                    d           |                    d           d S )Nc                 T     t           fd          }|                                 d S )Nc                  ,    t          j                   S r"   )timesleepxs   r   <lambda>z>TestGreenlet.test_thread_bug.<locals>.runner.<locals>.<lambda>  s    A r   r&   )r   r'   s   ` r   runnerz,TestGreenlet.test_thread_bug.<locals>.runner  s+    ....//AHHJJJJJr   )g?ri   args)g333333?ro   )rj   rk   rp   rq   )r9   r   t1t2s       r   test_thread_bugzTestGreenlet.test_thread_bug  sy    	 	 	 V&999V&999









r   c                       fd}t          |                              dd          }                     |d           d S )Nc                 `                         | d                                |d           dS )Nr4   r3   *   )r6   )r_   r]   r9   s     r   r@   z,TestGreenlet.test_switch_kwargs.<locals>.run#  s4    Q"""Q"""2r   r4   r3   )r_   r]   r   r   r   r6   )r9   r@   r   s   `  r   test_switch_kwargszTestGreenlet.test_switch_kwargs"  sX    	 	 	 	 	 SMM  1 **Br   c                 (   d }t          |          }|                     ddi|                    d                     |                     dddif|                                           |                     d|                                           d S )Nc                     t          j                    j                            |            t          j                    j                            dd           | | dz  fS )Nr   r3   r.   r   r   r   r   r   s    r   r@   z6TestGreenlet.test_switch_kwargs_to_parent.<locals>.run+  sX    !!(//!/444!!(//Q/777a1f9r   r   r.   )r3   )r.   	   )r   r6   r   )r9   r@   r'   s      r   test_switch_kwargs_to_parentz)TestGreenlet.test_switch_kwargs_to_parent*  s    	 	 	 SMM#q188A;;///$a)188::666,,,,,r   c                    i t          j                    t          j                    fd}t          j        |          }|                                                     d           |                     t          j                  5  d                                          d d d            n# 1 swxY w Y   	                                 |
                    d                                            d S )Nc                      t          d           d<                                                         d           d S )Nc                      d S r"   r   r   r   r   r   zITestGreenlet.test_switch_to_another_thread.<locals>.run.<locals>.<lambda>:       r   r'   ro   r   r   r   created_eventdata
done_events   r   r@   z7TestGreenlet.test_switch_to_another_thread.<locals>.run9  @     ..DIOOBr   rh   ro   r'   )rj   r   rk   rp   r   rA   r   errorr   r   rq   clear)r9   r@   threadr   r   r   s      @@@r   test_switch_to_another_threadz*TestGreenlet.test_switch_to_another_thread4  s.   !))_&&
	  	  	  	  	  	  	  !---2x~.. 	 	I	 	 	 	 	 	 	 	 	 	 	 	 	 	 	B

s   B77B;>B;c                 b      fd} fdt          |                                           d S )Nc                      	 t          d          #  t          j                    } t                                                                         | t          j                               Y d S xY w)Nfun)
ValueErrorr   r   r   r   r6   )r   rY   r9   s    r   r2   z&TestGreenlet.test_exc_state.<locals>.fH  sg    ; ''';<>>""$$$  3<>>::::::s
    AA2c                  V                          t          j                    d           d S )N)NNN)r6   r   r   r<   s   r   rY   z&TestGreenlet.test_exc_state.<locals>.hP  s&    S\^^-?@@@@@r   r&   )r9   r2   rY   s   ` @r   test_exc_statezTestGreenlet.test_exc_stateG  s`    	; 	; 	; 	; 	; 	;	A 	A 	A 	A 	A 	r   c                    d }d }d }t          |          }|                     |j        i            |                                 |                     |j        d           |                     |j        ddi           |j        |_        |                     |j        ddi           |                     t          ||           |                     t          ||d           d S )Nc                  6    dt          j                    _        d S Nr   )r   r   testr   r   r   r2   z*TestGreenlet.test_instance_dict.<locals>.fV  s    )+H!!&&&r   c                 
    | ` d S r"   __dict__)r'   s    r   deldictz0TestGreenlet.test_instance_dict.<locals>.deldictX  s    


r   c                     || _         d S r"   r   )r'   rx   s     r   setdictz0TestGreenlet.test_instance_dict.<locals>.setdictZ  s    AJJJr   r   r   )r   r6   r   r   r   rA   	TypeError)r9   r2   r   r   r'   s        r   test_instance_dictzTestGreenlet.test_instance_dictU  s    	, 	, 	,	 	 		 	 	QKKR(((	


$$$fb\222Z
fb\222)Wa000)Wa44444r   c                     g fd}t          |          }|                                 |                     dg           d S )Nc                  p                          t          t          j                    d                     d S r?   )r   hasattrr   r   )has_runs   r   funcz;TestGreenlet.test_running_greenlet_has_no_run.<locals>.funch  s9    NN+--u55    r   Fr   )r9   r   r'   r   s      @r    test_running_greenlet_has_no_runz-TestGreenlet.test_running_greenlet_has_no_runf  sY    	 	 	 	 	
 TNN	


5'*****r   c                     dd l }|                     t          |j         t                                 |                     t          |j        t                                 d S r   )copyrA   r   r   deepcopy)r9   r   s     r   test_deepcopyzTestGreenlet.test_deepcopyq  sM    )TY

;;;)T]HJJ?????r   c                 f   t          d           t          j                    g fd}t          |          }|                                 ~|                                |                     d                    |                     d         j                   d d = d d d S )Nc                      d S r"   r   r   r   r   r   z;TestGreenlet.test_parent_restored_on_kill.<locals>.<lambda>w      t r   c                  (   	                                   d S # t          j        $ ri                     t          j                    j                                       t          j                                                                  Y d S w xY wr"   )r   r   r   r   r   r   )hubmainresults   r   workerz9TestGreenlet.test_parent_restored_on_kill.<locals>.workerz  s    (   h133:;;;h133444

	s    A4BBr%   r   r	   )r   r   r   r   rM   r   )r9   r   r'   r   r   r   s      @@@r   test_parent_restored_on_killz)TestGreenlet.test_parent_restored_on_killv  s    ||$$"$$	 	 	 	 	 	 	 VC(((	


fQi&&&fQi&,,, 111Ir   c                     t                      }t          d |          }|                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S )Nc                      d S r"   r   r   r   r   r   z9TestGreenlet.test_parent_return_failure.<locals>.<lambda>      d r   r%   )r   rA   rB   r   )r9   r(   rw   s      r   test_parent_return_failurez'TestGreenlet.test_parent_return_failure  s    ZZll2...~.. 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA!$A!c                      G d dt                     } |d           }|                     t          |j        t                                 d S )Nc                       e Zd Zd ZdS )>TestGreenlet.test_throw_exception_not_lost.<locals>.mygreenletc                 X    	 t                      #  Y nxY wt          j        | |          S r"   )r   r   __getattribute__r9   names     r   r   zOTestGreenlet.test_throw_exception_not_lost.<locals>.mygreenlet.__getattribute__  s2    #++%D0t<<<s    Nr   r   r   r   r   r   r   
mygreenletr     s#        = = = = =r   r   c                      d S r"   r   r   r   r   r   z<TestGreenlet.test_throw_exception_not_lost.<locals>.<lambda>  r   r   )r   rA   r   rI   )r9   r   r'   s      r   test_throw_exception_not_lostz*TestGreenlet.test_throw_exception_not_lost  sc    	= 	= 	= 	= 	= 	= 	= 	= J||$$)QWikk:::::r   Fc                    g d fd}t          j        |          }|                                 |                    d           ~r|                                  |                     t          j                  5 }d                             t                     d d d            n# 1 swxY w Y   s+| 
                    t          |j                  ddg           n(|                     t          |j                  d           t          d         j        d          rQ|                     t                     5  d         j                                         d d d            n# 1 swxY w Y   s%d         j        j                                         n |                     d         j                   ~d d d = d	| _        d S )
Nc                  Z    t          j                    j                                         d S r"   r   r   r   r   r   zGTestGreenlet._do_test_throw_to_dead_thread_doesnt_crash.<locals>.worker  &    !!(//11111r   c                      t                    } |                                                      |            r)|                                  t          j                     d S d S r"   )r   r   r   r   )r'   r   wait_for_cleanupr   s    r   creatorzHTestGreenlet._do_test_throw_to_dead_thread_doesnt_crash.<locals>.creator  sc      AHHJJJMM! &


#%%%%%& &r   rh   ro   r   Bcannot switch to a different thread (which happens to have exited)#cannot switch to a different threadr   T)rj   rk   rp   rq   wait_for_pending_cleanupsrA   r   r   rI   r   rC   rD   rE   r6   r   r   RuntimeErrorr   f_localsrQ   expect_greenlet_leak)r9   r  r  r   r#   r   r   s    `   @@r   *_do_test_throw_to_dead_thread_doesnt_crashz7TestGreenlet._do_test_throw_to_dead_thread_doesnt_crash  su   	2 	2 	2	& 	& 	& 	& 	& 	& 	& G,,,					r


  	-**,,,x~.. 	'#1IOOI&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'   	MMCM""X9%    CM""T  
 6!9%w// 	+""<00 + +q	"((***+ + + + + + + + + + + + + + +   	21I'--////fQi0111111I %)!!!s$   !B11B58B5 E22E69E6c                 .    |                                   d S r"   r  r<   s    r   &test_throw_to_dead_thread_doesnt_crashz3TestGreenlet.test_throw_to_dead_thread_doesnt_crash  s    7799999r   c                 0    |                      d           d S re   r  r<   s    r   +test_throw_to_dead_thread_doesnt_crash_waitz8TestGreenlet.test_throw_to_dead_thread_doesnt_crash_wait  s    77=====r   c                      G d dt                     } |            }|                     |                    d          d           d| _        d S )Nc                        e Zd Zd Zd Zd ZdS )7TestGreenlet.test_recursive_startup.<locals>.convolutedc                 <    t          j        |            d| _        d S r   )r   __init__countr<   s    r   r  z@TestGreenlet.test_recursive_startup.<locals>.convoluted.__init__  s    !$'''


r   c                     |dk    r'| j         dk    rd| _         |                     d           t          j        | |          S )Nr@   r   r	   +   )r  r   r   r   r   s     r   r   zHTestGreenlet.test_recursive_startup.<locals>.convoluted.__getattribute__  sD    5= $TZ1_ $!"DJKKOOO0t<<<r   c                 :    	 | j                             |           r"   r   r   )r9   rx   s     r   r@   z;TestGreenlet.test_recursive_startup.<locals>.convoluted.run  s"    .K&&u---.r   N)r   r   r   r  r   r@   r   r   r   
convolutedr    sA          = = =
. . . . .r   r  r   r  T)r   r6   r   r  )r9   r  r'   s      r   test_recursive_startupz#TestGreenlet.test_recursive_startup  si    	. 	. 	. 	. 	. 	. 	. 	. JLL"r***
 %)!!!r   c                    t          j                                                     t          j                                                      G fddt                    }d }fd}t	          j                    }t	          |          g |            d         _        d                                          t          j        |          }|	                                 
                                                                  |                     t	          j                    |           |                    d           d S )Nc                       e Zd Z fdZdS );TestGreenlet.test_threaded_updatecurrent.<locals>.finalizedc                 X                                                                       d S r"   releaseacquire)r9   lock1lock2s    r   __del__zCTestGreenlet.test_threaded_updatecurrent.<locals>.finalized.__del__  s#     r   Nr   r   r   r(  r&  r'  s   r   	finalizedr!    s3                       r   r+  c                  Z    t          j                    j                                         d S r"   r   r   r   r   deallocatorz=TestGreenlet.test_threaded_updatecurrent.<locals>.deallocator
  r  r   c                                                        t          j                      d=                                                                    t          j                                                      d S r   r%  r   r   r$  )r'   r&  r'  s   r   fthreadz9TestGreenlet.test_threaded_updatecurrent.<locals>.fthread  s`    MMOOO!!!!MMOOOMMOOO!!!MMOOOOOr   r   rh   ro   )rj   Lockr%  objectr   r   bombr   rk   rp   r$  r6   rq   )	r9   r+  r-  r0  r   r   r'   r&  r'  s	         @@@r   test_threaded_updatecurrentz(TestGreenlet.test_threaded_updatecurrent  sT       	  	  	  	  	  	  	  	  	  	  	 	2 	2 	2	 	 	 	 	 	 	 "$$k""#IKK!		!G,,,				 	,..555	r




r   c                 "   g fdd t                    gd                                          t          d                                                   }|                                |                     |d           d S )Nc                     t          j                    j                                        } d= t          j                    j        _        	 t          j                    j                            |                                t          j                               d S #                     t          j                               w xY wr   )r   r   r   r   r   )rx   	initiatorr   r   s    r   r   z>TestGreenlet.test_dealloc_switch_args_not_lost.<locals>.worker,  s    '))07799Eq	'244;I3#%%,33E:::H/1122222H/112222s   +B   (Cc                      dS r   r   r   r   r   r7  zATestGreenlet.test_dealloc_switch_args_not_lost.<locals>.initiator9      2r   r   r   )r   r   r   r6   )r9   rx   r7  r   r   s     @@@r   !test_dealloc_switch_args_not_lostz.TestGreenlet.test_dealloc_switch_args_not_lost*  s    	3 	3 	3 	3 	3 	3 	3	 	 	 6""#q	Yq	22	  ""#####r   c                 $   t           j        d         dk    rd nt           G d dt                    } |            t	          d          fd}t          |          }|                     |                                           d S )	Nr   r3   c                      | |i | d S r"   r   )r   r_   ks      r   _applyz0TestGreenlet.test_tuple_subclass.<locals>._applyU  s    a1r   c                       e Zd Zd ZdS )1TestGreenlet.test_tuple_subclass.<locals>.mytuplec                     t          j                                                     t                              |           S r"   )r   r   r   tuple__len__r<   s    r   rC  z9TestGreenlet.test_tuple_subclass.<locals>.mytuple.__len__[  s/    #%%,,...}}T***r   N)r   r   r   rC  r   r   r   mytupler@  Z  s#        + + + + +r   rD  r   )r_   c                  X      t          j                    j        j                   d S r"   r   )r>  r   kwargss   r   switchapplyz5TestGreenlet.test_tuple_subclass.<locals>.switchapply`  s,    F8&((/6fEEEEEr   )r   version_infoapplyrB  dictr   r6   r   )r9   rD  rG  r'   r>  r   rF  s       @@@r   test_tuple_subclassz TestGreenlet.test_tuple_subclassD  s     A" 	    F	+ 	+ 	+ 	+ 	+e 	+ 	+ 	+ wyy	F 	F 	F 	F 	F 	F 	F[!!V,,,,,r   c                     t          dt          fdt          d           i          } G d d|          } G d d|          } |             |                     t          |           d S )NAbstractSubclassr@   c                     d S r"   r   r<   s    r   r   z7TestGreenlet.test_abstract_subclasses.<locals>.<lambda>i  s     r   c                       e Zd ZdS ):TestGreenlet.test_abstract_subclasses.<locals>.BadSubclassNr   r   r   r   BadSubclassrP  k          Dr   rQ  c                       e Zd Zd ZdS );TestGreenlet.test_abstract_subclasses.<locals>.GoodSubclassc                     d S r"   r   r<   s    r   r@   z?TestGreenlet.test_abstract_subclasses.<locals>.GoodSubclass.runo  s    r   N)r   r   r   r@   r   r   r   GoodSubclassrT  n  s#            r   rV  )r   r   r   rA   r   )r9   rM  rQ  rV  s       r   test_abstract_subclassesz%TestGreenlet.test_abstract_subclassese  s    "KN#4#45568 8
	 	 	 	 	* 	 	 		 	 	 	 	+ 	 	 	 	)[11111r   c                      t          j                    sd S t          j                    d         dk     rd S  fd}t          d          D ]} |            r d S d S )Nr   2   c                  L  	
 t          j                    

                                 t          j                                                     dg
fd} t          j        |           }|                                  G 
fddt
                    	 G 	fddt
                    }g }t          dz            }t          j                    } |            }|D ]Q}d }d	         r|	                    d
            dS t                      }d	         r nH|
                    |           Rt          j                     d	         r|	                    d
           dS                     |j        |           |D ]}                    |j        |           dS )NFc                  ~                                       t          j                                                      d S r"   r/  r*  s   r   another_threadzWTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.another_thread  s0    #%%%r   rh   c                       e Zd Z fdZdS )TTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.gc_callbackc                 b                                                                       dd<   d S )NTr   r#  )r9   r&  r'  recycleds    r   r(  z\TestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.gc_callback.__del__  s*    MMOOOMMOOO"&HQKKKr   Nr)  )r&  r'  r`  s   r   gc_callbackr^    s8        ' ' ' ' ' ' ' ' 'r   ra  c                       e Zd Z fdZdS )PTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.garbagec                 4    | | _                      | _        d S r"   )cyclecallback)r9   ra  s    r   r  zYTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.garbage.__init__  s    !%DJ$/KMMDMMMr   N)r   r   r   r  )ra  s   r   garbagerc    s.        2 2 2 2 2 2 2r   rg  r3   r   ro   T)rj   r1  r%  rk   rp   r2  r8   r   r   rq   r   r~   r   r6   r   )r\  r   rg  lr   currentr'   _lastra  r&  r'  r`  Nr9   s            @@@@r   attemptz?TestGreenlet.test_implicit_parent_with_threads.<locals>.attempt{  s   N$$EMMOOON$$EMMOOOwH             777AGGIII' ' ' ' ' ' ' ' 'f ' ' '
2 2 2 2 2 2 2& 2 2 2 Aac

A)++G		A  A; !FF2JJJ 55zzA; E 
A; FF2JJJuT['222 4 4  733334r   r5   )r~   	isenabledget_thresholdr8   )r9   rm  rj  rl  s   `  @r   !test_implicit_parent_with_threadsz.TestGreenlet.test_implicit_parent_with_threadsu  s    |~~ 	Fq!r6 	F,	 ,	 ,	 ,	 ,	 ,	Z q 	 	Awyy 	 	r   c                 @    ddl m ddl m  G d dt                     }t          j        |          }g  _         fd}t          d          D ]} ||                                             `                     t          j        |          |           d S )Nr   r   )r   c                       e Zd ZdS )TTestGreenlet.test_issue_245_reference_counting_subclass_no_threads.<locals>.GreenletNr   r   r   r   Greenletrt    rR  r   ru  c                      	              j                                          d S #  $ r& j                                                    Y d S w xY wr"   )r   r   gletsr   )r   r   r9   s   r   greenlet_mainzYTestGreenlet.test_issue_245_reference_counting_subclass_no_threads.<locals>.greenlet_main  si    0
#**,,,,, 0 0 0
!!**,,//////0s   !& 'AAro   )	r   r   r   r   ra   rw  r8   r   r6   )r9   ru  initial_refsrx  rj  r   r   s   `    @@r   5test_issue_245_reference_counting_subclass_no_threadszBTestGreenlet.test_issue_245_reference_counting_subclass_no_threads  s     	('''''))))))	 	 	 	 	x 	 	 	 x00 
	0 	0 	0 	0 	0 	0 	0 r 	- 	-AH]##**,,,,J22LAAAAAr   c                 D  
 ddl m} ddl m} ddlm  G d dt                    
g  |            fd
fd}t          j        
          }g }t          |d	z             D ]C} |            } |||f
          }|                    |           |	                                 D|D ]}	|	
                    d           d d =                                  |                                  |                     t          j        
          |           d S )Nr   )rk   )r   rr  c                       e Zd ZdS )STestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.MyGreenletNr   r   r   r   
MyGreenletr}    rR  r   r~  c                  J                  j                                          d S r"   r  rr  s   r   rx  zVTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.greenlet_main  s$    JLL&&(((((r   c                                }                     |           |                                 ~|                                                      d                         d S )Nro   )r   r   r   r   )greenlet_running_eventminer~  r   rw  rx  ref_cleareds     r   thread_mainzTTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.thread_main  sm    :m,,DLLKKMMM"&&((( R    JLLLLLr   -   r   ro   )rj   rk   r   r   r   r   ra   r8   r   rp   r   r   r	  r6   )r9   rk   r   r  ry  thread_ready_eventsrj  eventr   r   r~  r   rw  rx  r  s             @@@@@r   2test_issue_245_reference_counting_subclass_threadsz?TestGreenlet.test_issue_245_reference_counting_subclass_threads  s   $$$$$$######''''''	 	 	 	 	 	 	 	 egg	) 	) 	) 	) 	)	 	 	 	 	 	 	 	 	8 z22 r!
 
 	 	A EGGEV;eX>>>F&&u---LLNNNN . 	  	 JOOB !!!H 	&&(((44lCCCCCr   c                     d }t          |          }d }t          ||          }|                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S )Nc                      dS )N   r   r   r   r   no_argsz\TestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error.<locals>.no_args  r9  r   c                      dS r   r   r   r   r   leafzYTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error.<locals>.leaf  r9  r   )r   rA   r   r   )r9   r  parent_never_startedr  childs        r   >test_falling_off_end_switches_to_unstarted_parent_raises_errorzKTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error  s    	 	 	  (00	 	 	 344 y)) 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    A""A&)A&c                     d }t          |          }d }t          ||          }|                                }|                     |d           d S )Nc                 
    | dfS N   r   r   s    r   one_argzUTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works.<locals>.one_arg  s    r7Nr   c                      dS r   r   r   r   r   r  zRTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works.<locals>.leaf#  r9  r   )r   r  r   )r9   r  r  r  r  r   s         r   7test_falling_off_end_switches_to_unstarted_parent_workszDTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works  sk    	 	 	  (00	 	 	 344*****r   c                     G d dt                     } |            }g t          fd|          }|                     t                    5  |                                 d d d            n# 1 swxY w Y   |                     dg           |                     t                    5  |                                 d d d            n# 1 swxY w Y   |                     dg           d S )Nc                       e Zd Zd ZdS )XTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.Parentc                      |dk    rt           d S r?   )r   r   s     r   r   ziTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.Parent.__getattribute__-  s    5= $#O$ $r   Nr   r   r   r   Parentr  ,  s#        $ $ $ $ $r   r  c                  .                          d          S r   r   r   s   r   r   zZTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.<lambda>4      R r   r   )r   rA   r   r   r6   )r9   r  r  r  r   s       @r   ;test_switch_to_dead_greenlet_with_unstarted_perverse_parentzHTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent+  s   	$ 	$ 	$ 	$ 	$X 	$ 	$ 	$  &vxx00002FGG y)) 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	t$$$y)) 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	t$$$$$s$   A//A36A3+CCCc                 :   g t          fd          }t          fd          }|                                 |                     dg           ||_        |                                }|                     |           |                     ddg           d S )Nc                  .                          d          S r  r  r   s   r   r   zDTestGreenlet.test_switch_to_dead_greenlet_reparent.<locals>.<lambda>B  s    B r   c                  .                          d          S r   r  r   s   r   r   zDTestGreenlet.test_switch_to_dead_greenlet_reparent.<locals>.<lambda>C  r  r   r   r  )r   r   r6   r   rQ   )r9   r  r  r   r   s       @r   %test_switch_to_dead_greenlet_reparentz2TestGreenlet.test_switch_to_dead_greenlet_reparent@  s    '(?(?(?(?@@000011t$$$+&!!!Bx(((((r   N)F)-r   r   r   r:   r=   rG   rJ   rO   rR   rZ   rb   rt   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r4  r:  rK  rW  rp  rz  r  r  r  r  r  r   r   r   r+   r+   +   s       . . .  1 1 11 1 17 7 7
! ! !
' ' '(0 0 0(1 1 1, , ,8+ + +O O O& & &<* * *X+ + + 	 	 	     - - -  &  5 5 5"	+ 	+ 	+@ @ @
  6  	; 	; 	; 6) 6) 6) _6)p : : _:> > > ) ) _)*- - -^$ $ $4- - -B2 2 2 5 5 5nB B B>AD AD ADF  + + +% % %*) ) ) ) )r   r+   c                   J    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S )TestGreenletSetParentErrorsc                 R   i t          j                    t          j                    fd}d }t          j        |          }|                                                     d           t          |          }|                                 |                     t                    5 }d         |_	        d d d            n# 1 swxY w Y   
                                 |                    d           |                     t          |j                  d           d S )Nc                      t          d           d<                                                         d           d S )Nc                      d S r"   r   r   r   r   r   zQTestGreenletSetParentErrors.test_threaded_reparent.<locals>.run.<locals>.<lambda>V  r   r   r'   ro   r   r   s   r   r@   z?TestGreenletSetParentErrors.test_threaded_reparent.<locals>.runU  r   r   c                  Z    t          j                    j                                         d S r"   r   r   r   r   blankzATestGreenletSetParentErrors.test_threaded_reparent.<locals>.blankZ  r  r   rh   ro   r'   z&parent cannot be on a different thread)rj   r   rk   rp   r   r   r   rA   r   r   r   rq   r6   rD   rE   )	r9   r@   r  r   r'   r#   r   r   r   s	         @@@r   test_threaded_reparentz2TestGreenletSetParentErrors.test_threaded_reparentP  s[   !))_&&
	  	  	  	  	  	  	 
	2 	2 	2 !---2UOO	


z** 	!cCyAH	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!BS]++-UVVVVVs   1CCCc                     g fd}t          j        |          }|                                 |                    d           |                     | j        dz               G fddt                    } |d           }|                     t          j                  5 }|	                                 d d d            n# 1 swxY w Y   | 
                    t          |j                  d	           d d = d S )
Nc                  z    t          d           }                     |            |                                  d S )Nc                      d S r"   r   r   r   r   r   zYTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.worker.<locals>.<lambda>l       r   )r   r   r   )r'   anothers    r   r   zGTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.workerk  s5    &&ANN1HHJJJJJr   rh   ro   r	   )initial_main_greenletsc                       e Zd Z fdZdS )KTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.convolutedc                 T    |dk    rd         | _         t          j        | |          S Nr@   r   r   r   r   r9   r   r  s     r   r   z\TestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.convoluted.__getattribute__  -    5= -")!*DK0t<<<r   Nr   r  s   r   r  r    .        = = = = = = =r   r  c                      d S r"   r   r   r   r   r   zITestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.<lambda>  r   r   r  )rj   rk   rp   rq   r	  main_greenlets_before_testr   rA   r   r   r6   rD   rE   )r9   r   r   r  r'   r#   r  s         @r   test_unexpected_reparentingz7TestGreenletSetParentErrors.test_unexpected_reparentingi  si   	 	 	 	 	 F+++					r


& 	&&d>]`a>a&bbb	= 	= 	= 	= 	= 	= 	= 	= 	= 	=
 J||$$x~.. 	#HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	S]++]	_ 	_ 	_AAAJJJs   %CC
C
c                    g t          j                    t          j                    fd} G fddt                    }t          j        |          }|                                                     d           	  |d           }|                     t          j                  5 }|                                 d d d            n# 1 swxY w Y   | 	                    t          |j                  d                                            |                    d           d d = d S #                                  |                    d           d d = w xY w)Nc                      t          d           }                     |            |                                                                                       d           d S )Nc                      d S r"   r   r   r   r   r   zhTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.worker.<locals>.<lambda>  r  r   ro   )r   r   r   r   r   )r'   r  keep_main_aliveswitched_to_greenlets    r   r   zVTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.worker  s]    &&ANN1HHJJJ $$&&&  $$$$$r   c                       e Zd Z fdZdS )ZTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.convolutedc                 T    |dk    rd         | _         t          j        | |          S r  r  r  s     r   r   zkTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.convoluted.__getattribute__  r  r   Nr   r  s   r   r  r    r  r   r  rh   ro   c                      d S r"   r   r   r   r   r   zXTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.<lambda>  s    4 r   r  )rj   r   r   rk   rp   r   rA   r   r   r6   rD   rE   r   rq   )	r9   r   r  r   r'   r#   r  r  r  s	         @@@r   *test_unexpected_reparenting_thread_runningzFTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running  s    (00#/++	% 	% 	% 	% 	% 	% 	%	= 	= 	= 	= 	= 	= 	= 	= 	= 	= F+++				!!"%%%
	
<<((A""8>22 c


              S//1VWWW!!!FF2JJJ


 !!!FF2JJJ
NNNNs0   +D6 2CD6 CD6 C+D6 60E&c                 6   t          d           }|                     |j        t          j                               |                     t
                    5 }|`d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nc                      d S r"   r   r   r   r   r   zGTestGreenletSetParentErrors.test_cannot_delete_parent.<locals>.<lambda>      $ r   can't delete attribute)	r   rM   r   r   rA   rB   r6   rD   rE   )r9   r   r#   s      r   test_cannot_delete_parentz5TestGreenletSetParentErrors.test_cannot_delete_parent  s    ,,''fmX%8%:%:;;;~.. 	#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	S]++-EFFFFFs   A&&A*-A*c                     |                      t                    5 }t          j                    `d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nr  rA   rB   r   r   r   r6   rD   rE   r9   r#   s     r   !test_cannot_delete_parent_of_mainz=TestGreenletSetParentErrors.test_cannot_delete_parent_of_main  s    ~.. 	-##%%,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-S]++-EFFFFFs   ;??c                 \    |                      t          j                    j                   d S r"   )rQ   r   r   r   r<   s    r   !test_main_greenlet_parent_is_nonez=TestGreenletSetParentErrors.test_main_greenlet_parent_is_none  s(    (-//677777r   c                     d } fd}t          |          }                     |            ||           |                                                      |            ||           |                                 d S )Nc                  Z    t          j                    j                                         d S r"   r   r   r   r   bgzCTestGreenletSetParentErrors.test_set_parent_wrong_types.<locals>.bg  s&    !!(//11111r   c                     d ddfD ]c}                     t                    5 }|| _        d d d            n# 1 swxY w Y                       t	          |j                  d           dd S )Nr	   42zExpected a greenlet)rA   r   r   r6   rD   rE   )gletpr#   r9   s      r   checkzFTestGreenletSetParentErrors.test_set_parent_wrong_types.<locals>.check  s    1dD( L L&&y11 $S"#DK$ $ $ $ $ $ $ $ $ $ $ $ $ $ $  S]!3!35JKKKKL Ls   8<	<	)r   r   r   r   )r9   r  r  r'   s   `   r   test_set_parent_wrong_typesz7TestGreenletSetParentErrors.test_set_parent_wrong_types  s    	2 	2 	2	L 	L 	L 	L 	L RLLa 	



a 	





r   c                     t          d           }|                     t                    5 }||_        d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nc                      d S r"   r   r   r   r   r   z@TestGreenletSetParentErrors.test_trivial_cycle.<locals>.<lambda>  s     r   cyclic parent chain)r   rA   r   r   r6   rD   rE   )r9   r  r#   s      r   test_trivial_cyclez.TestGreenletSetParentErrors.test_trivial_cycle  s    %%z** 	cDK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	S]++-BCCCCCs   ?AAc                    |                      t                    5 }t          j                    t          j                    _        d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nz(cannot set the parent of a main greenletr  r  s     r   test_trivial_cycle_mainz3TestGreenletSetParentErrors.test_trivial_cycle_main  s    ~.. 	A#+3+>+@+@H!!(	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	AS]++-WXXXXXs   *AAAc                 D   t          d           }t          d           }t          d           }||_        ||_        |                     t                    5 }||_        d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nc                      d S r"   r   r   r   r   r   z?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>  r   r   c                      d S r"   r   r   r   r   r   z?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>  r   r   c                      d S r"   r   r   r   r   r   z?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>  r   r   r  )r   r   rA   r   r6   rD   rE   )r9   r(   rw   g3r#   s        r   test_deeper_cyclez-TestGreenletSetParentErrors.test_deeper_cycle  s    ll##ll##ll##		z** 	cBI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	S]++-BCCCCCs   A--A14A1N)r   r   r   r  r  r  r  r  r  r  r  r  r  r   r   r   r  r  O  s        W W W2' ' 'R     DG G GG G G8 8 8  2D D DY Y Y	D 	D 	D 	D 	Dr   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestReprc                 \    |                      |                    |          ||f           d S r"   )r   endswith)r9   gotsuffixs      r   assertEndsWithzTestRepr.assertEndsWith  s,    V,,sFm<<<<<r   c                 r    t          t          j                              }|                     |d           d S )N current active started main>)reprr   r   r  r9   rs     r   test_main_while_runningz TestRepr.test_main_while_running  s5    $&&''A>?????r   c                     t          j                    fd}t          |          }|                                }|                     |d           d S )Nc                  "    t                     S r"   )r  r   s   r   r@   z-TestRepr.test_main_in_background.<locals>.run  s    ::r    suspended active started main>)r   r   r   r  )r9   r@   r'   r  r   s       @r   test_main_in_backgroundz TestRepr.test_main_in_background   sa    "$$	 	 	 	 	 SMMHHJJA@AAAAAr   c                 h    t          t                                }|                     |d           d S )Nz	 pending>)r  r   r  r  s     r   test_initialzTestRepr.test_initial	  s/    A{+++++r   c                 6   t          j                     G fddt          j                  } |            }|                                 |                    d           |                     |j        d           |                     |j        d           t          d          D ]}t          j        d           t          d          D ]K}|                     |j        j                   t          |j                  }|                     |d           Ld S )	Nc                   &    e Zd ZdxZZdZ fdZdS )/TestRepr.test_main_from_other_thread.<locals>.TNc                     t                    | _        t          j                    | _        t          | j                  | _        d S r"   )r  original_mainr   r   	main_gletr  )r9   r   s    r   r@   z3TestRepr.test_main_from_other_thread.<locals>.T.run  s9    %)$ZZ"!)!4!6!6#'#7#7   r   )r   r   r   r  r  r  r@   r  s   r   Tr     s=        *..MKI8 8 8 8 8 8 8r   r  ro   r  r  r.   gMbP?z (thread exited) dead>)r   r   rj   rk   rp   rq   r  r  r  r8   r   r   r   r  rX   r  )r9   r  r   rj  r  r   s        @r   test_main_from_other_threadz$TestRepr.test_main_from_other_thread  s.   "$$	8 	8 	8 	8 	8 	8 	8	  	8 	8 	8 ACC					r


AO-NOOOAM+JKKK q 	 	AJu q 	= 	=AOOAK,---Q[!!A#;<<<<	= 	=r   c                 f   t          d           }|                                 |                     t          |          d           |                     dt          |                     |                     dt          |                     |                     dt          |                     d S )Nc                      d S r"   r   r   r   r   r   z$TestRepr.test_dead.<locals>.<lambda>1  s    T r   z dead>	suspendedstartedactive)r   r   r  r  assertNotInrN   s     r   	test_deadzTestRepr.test_dead0  s    \\""	


DGGX...d1gg...DGG,,,477+++++r   c                     t          d           }t          d           }t          j                    }|||fD ]:}|                     |t                     |                     |t                     ;d S )Nc                      d S r"   r   r   r   r   r   z>TestRepr.test_formatting_produces_native_str.<locals>.<lambda><  r  r   c                      d S r"   r   r   r   r   r   z>TestRepr.test_formatting_produces_native_str.<locals>.<lambda>=  r   r   )r   r   assertIsInstancerD   )r9   g_deadg_not_startedg_curr'   s        r   #test_formatting_produces_native_strz,TestRepr.test_formatting_produces_native_str8  s     ,,'' ..#%%- 		 		A!!   !!   		 		r   N)
r   r   r   r  r  r  r  r  r  r  r   r   r   r  r    s        = = =@ @ @B B B, , ,!= != !=F, , ,    r   r  c                        e Zd Zd Zd Zd ZdS )TestMainGreenletc                     dt          t          j                              v sJ t          t          j                              }dt          |          vsJ |S )Nr   )r  r   r   type)r9   r   s     r   _check_current_is_mainz'TestMainGreenlet._check_current_is_mainP  sV    h133444444$&&''T!WW$$$$r   c                 |    |                                  }t          d|fi           }|                     |           d S )Nsubclass)r  r  rL   )r9   	main_typer  s      r   )test_main_greenlet_type_can_be_subclassedz:TestMainGreenlet.test_main_greenlet_type_can_be_subclassedX  s@    //11	
YL"55X&&&&&r   c                     |                                   |                     t          j                    t                     d S r"   )r  r  r   r   r<   s    r   test_main_greenlet_is_greenletz/TestMainGreenlet.test_main_greenlet_is_greenlet]  s9    ##%%%h133X>>>>>r   N)r   r   r   r  r  r  r   r   r   r  r  L  sA          ' ' '
? ? ? ? ?r   r  __main__)
__future__r   r   r   r~   r   r   rj   abcr   r   r    r
   	leakcheckr   r   r   r   r)   r+   r  r  r  r   unittestr   r   r   r   <module>r&     s   & & & & & &       % % % % % % 				 



      ' ' ' ' ' ' ' '             & & & & & &	 	 	 	 		 	 	 	    a) a) a) a) a)8 a) a) a)HeD eD eD eD eD( eD eD eDPR R R R Rx R R Rj? ? ? ? ?x ? ? ?* z OOOHMOOOOO r   