Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_pep380.cpython-35.opt-1.pyc



��Yf5s�@s�dZddlZddlZddlZddlZddlZddlmZmZm	Z	Gdd�dej
�Zedkr�ej
�dS)z�
Test suite for PEP 380 implementation

adapted from original tests written by Greg Ewing
see <http://www.cosc.canterbury.ac.nz/greg.ewing/python/yield-from/YieldFrom-Python3.1.2-rev5.zip>
�N)�captured_stderr�
disable_gc�
gc_collectc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Z d<d=�Z!d>d?�Z"d@dA�Z#dBdC�Z$dDS)E�TestPEP380Operationz
    Test semantics.
    csxg���fdd�}�fdd��x%|�D]}�jd|f�q7W|j�dddd	d
g�dS)zH
        Test delegation of initial next() call to subgenerator
        c3s*�jd���EdH�jd�dS)NzStarting g1zFinishing g1)�append�)�g2�tracer�5/opt/alt/python35/lib64/python3.5/test/test_pep380.py�g1s
zOTestPEP380Operation.test_delegation_of_initial_next_to_subgenerator.<locals>.g1c3s#�jd�dV�jd�dS)NzStarting g2�*zFinishing g2)rr)r	rr
r s
zOTestPEP380Operation.test_delegation_of_initial_next_to_subgenerator.<locals>.g2z
Yielded %szStarting g1zStarting g2z
Yielded 42zFinishing g2zFinishing g1N)r�assertEqual)�selfr�xr)rr	r
�/test_delegation_of_initial_next_to_subgenerators	zCTestPEP380Operation.test_delegation_of_initial_next_to_subgeneratorcs�g���fdd�}�fdd��y,x%|�D]}�jd|f�q:WWn<tk
r�}z|j|jdd�WYdd}~XnX|jd	�|j�d
ddd
g�dS)z?
        Test raising exception in initial next() call
        c3s2z�jd���EdHWd�jd�XdS)NzStarting g1zFinishing g1)rr)rr	rr
r3s
zKTestPEP380Operation.test_raising_exception_in_initial_next_call.<locals>.g1cs2z�jd�td��Wd�jd�XdS)NzStarting g2zspanish inquisition occurredzFinishing g2)r�
ValueErrorr)r	rr
r9s
zKTestPEP380Operation.test_raising_exception_in_initial_next_call.<locals>.g2z
Yielded %srzspanish inquisition occurredNz'subgenerator failed to raise ValueErrorzStarting g1zStarting g2zFinishing g2zFinishing g1)rrr
�args�fail)rrr�er)rr	r
�+test_raising_exception_in_initial_next_call.s*
	z?TestPEP380Operation.test_raising_exception_in_initial_next_callc
s�g���fdd�}�fdd��x%|�D]}�jd|f�q7W|j�dddd	d
ddd
g�dS)z@
        Test delegation of next() call to subgenerator
        c3s4�jd�dV��EdHdV�jd�dS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
rRs

zLTestPEP380Operation.test_delegation_of_next_call_to_subgenerator.<locals>.g1c3s(�jd�dVdV�jd�dS)NzStarting g2zg2 spamzg2 more spamzFinishing g2)rr)r	rr
rXs
zLTestPEP380Operation.test_delegation_of_next_call_to_subgenerator.<locals>.g2z
Yielded %szStarting g1zYielded g1 hamzStarting g2zYielded g2 spamzYielded g2 more spamzFinishing g2zYielded g1 eggszFinishing g1N)rr
)rrrr)rr	r
�,test_delegation_of_next_call_to_subgeneratorMs	z@TestPEP380Operation.test_delegation_of_next_call_to_subgeneratorcs�g���fdd�}�fdd��y,x%|�D]}�jd|f�q:WWn<tk
r�}z|j|jdd�WYdd}~XnX|jd	�|j�d
ddd
ddg�dS)zA
        Test raising exception in delegated next() call
        c3s<z'�jd�dV��EdHdVWd�jd�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
ros
	zMTestPEP380Operation.test_raising_exception_in_delegated_next_call.<locals>.g1c3s<z'�jd�dVtd��dVWd�jd�XdS)NzStarting g2zg2 spamzhovercraft is full of eelszg2 more spamzFinishing g2)rrr)r	rr
rws
	zMTestPEP380Operation.test_raising_exception_in_delegated_next_call.<locals>.g2z
Yielded %srzhovercraft is full of eelsNz'subgenerator failed to raise ValueErrorzStarting g1zYielded g1 hamzStarting g2zYielded g2 spamzFinishing g2zFinishing g1)rrr
rr)rrrrr)rr	r
�-test_raising_exception_in_delegated_next_calljs *
	zATestPEP380Operation.test_raising_exception_in_delegated_next_callcs�g���fdd�}�fdd��|�}t|�}d}y8x1|j|�}�jd|f�|d7}qNWWntk
r�YnX|j�ddd	d
ddd
ddddg�dS)z+
        Test delegation of send()
        c3s`�jd�dV}�jd|f���EdHdV}�jd|f��jd�dS)NzStarting g1zg1 hamzg1 received %szg1 eggszFinishing g1)r)r)rr	rr
r�s
z7TestPEP380Operation.test_delegation_of_send.<locals>.g1c3sT�jd�dV}�jd|f�dV}�jd|f��jd�dS)NzStarting g2zg2 spamzg2 received %szg2 more spamzFinishing g2)r)r)r	rr
r�s
z7TestPEP380Operation.test_delegation_of_send.<locals>.g2�z
Yielded %szStarting g1z
g1 received 1zStarting g2zYielded g2 spamz
g2 received 2zYielded g2 more spamz
g2 received 3zFinishing g2zYielded g1 eggsz
g1 received 4zFinishing g1N)�next�sendr�
StopIterationr
)rr�g�yrr)rr	r
�test_delegation_of_send�s2	
	z+TestPEP380Operation.test_delegation_of_sendcsug���fdd���fdd����fdd�}|jt|�|j�ddd	d
dg�dS)
zA
        Test handling exception while delegating 'send'
        c3s`�jd�dV}�jd|f���EdHdV}�jd|f��jd�dS)NzStarting g1zg1 hamzg1 received %szg1 eggszFinishing g1)r)r)rr	rr
r�s
zMTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.g1c3s`�jd�dV}�jd|f�td��dV}�jd|f��jd�dS)NzStarting g2zg2 spamzg2 received %szhovercraft is full of eelszg2 more spamzFinishing g2)rr)r)r	rr
r�s
zMTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.g2csy��}t|�}d}y8x1|j|�}�jd|f�|d7}q!WWntk
rt�jd�YnXdS)Nrz
Yielded %sr)rrrr)rrr)rr	rr
�run�s	
zNTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.runzStarting g1z
g1 received 1zStarting g2zYielded g2 spamz
g2 received 2N)�assertRaisesrr
)rrr)rrr	r
�-test_handling_exception_while_delegating_send�s	zATestPEP380Operation.test_handling_exception_while_delegating_sendcs�g���fdd�}�fdd��|�}x4td�D]&}t|�}�jd|f�qCW|j�|j�ddd	d
ddg�d
S)z)
        Test delegating 'close'
        c3s<z'�jd�dV��EdHdVWd�jd�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
r�s
	z5TestPEP380Operation.test_delegating_close.<locals>.g1c3s0z�jd�dVdVWd�jd�XdS)NzStarting g2zg2 spamzg2 more spamzFinishing g2)rr)r	rr
r�s

	z5TestPEP380Operation.test_delegating_close.<locals>.g2�z
Yielded %szStarting g1zYielded g1 hamzStarting g2zYielded g2 spamzFinishing g2zFinishing g1N)�rangerr�closer
)rrr�irr)rr	r
�test_delegating_close�s	
	z)TestPEP380Operation.test_delegating_closecsg���fdd�}�fdd��yN|�}x4td�D]&}t|�}�jd|f�qFW|j�WnOtk
r�}z/|j|jdd�|j|jt	�WYd	d	}~XnX|j
d
�|j�ddd
dddg�d	S)zB
        Test handling exception while delegating 'close'
        c3s<z'�jd�dV��EdHdVWd�jd�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
rs
	zMTestPEP380Operation.test_handing_exception_while_delegating_close.<locals>.g1c3s<z�jd�dVdVWd�jd�td��XdS)NzStarting g2zg2 spamzg2 more spamzFinishing g2z"nybbles have exploded with delight)rrr)r	rr
rs
	
zMTestPEP380Operation.test_handing_exception_while_delegating_close.<locals>.g2r"z
Yielded %srz"nybbles have exploded with delightNz'subgenerator failed to raise ValueErrorzStarting g1zYielded g1 hamzStarting g2zYielded g2 spamzFinishing g2zFinishing g1)r#rrr$rr
r�assertIsInstance�__context__�
GeneratorExitr)rrrr%rrr)rr	r
�-test_handing_exception_while_delegating_closes(	&
	zATestPEP380Operation.test_handing_exception_while_delegating_closecs�g���fdd�}�fdd��y]|�}x4td�D]&}t|�}�jd|f�qFWtd�}|j|�Wn<tk
r�}z|j|jdd�WYd	d	}~XnX|jd
�|j�ddd
dddg�d	S)z)
        Test delegating 'throw'
        c3s<z'�jd�dV��EdHdVWd�jd�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
r4s
	z5TestPEP380Operation.test_delegating_throw.<locals>.g1c3s0z�jd�dVdVWd�jd�XdS)NzStarting g2zg2 spamzg2 more spamzFinishing g2)rr)r	rr
r<s

	z5TestPEP380Operation.test_delegating_throw.<locals>.g2r"z
Yielded %sztomato ejectedrNz'subgenerator failed to raise ValueErrorzStarting g1zYielded g1 hamzStarting g2zYielded g2 spamzFinishing g2zFinishing g1)r#rrr�throwr
rr)rrrr%rrr)rr	r
�test_delegating_throw/s(	*
	z)TestPEP380Operation.test_delegating_throwcszg��fdd�}t�}||�td�}||�d|_||�|j�dddddd	g�d
S)zC
        Test 'value' attribute of StopIteration exception
        cs8�jd|jj|f��jd|jf�dS)Nz%s: %sz
value = %s)r�	__class__�__name__�value)r)r	rr
�pex\szPTestPEP380Operation.test_value_attribute_of_StopIteration_exception.<locals>.pex�spam�eggszStopIteration: zvalue = NonezStopIteration: spamzvalue = spamzvalue = eggsN)rr/r
)rr0rr)r	r
�/test_value_attribute_of_StopIteration_exceptionWs	

	
	zCTestPEP380Operation.test_value_attribute_of_StopIteration_exceptioncs>�fdd�}dd��|jt|��dg�dS)Nc3s��EdHdS)Nrr)rrr
rrsz:TestPEP380Operation.test_exception_value_crash.<locals>.g1cssdVdgS)Nrrrrrrr
rtsz:TestPEP380Operation.test_exception_value_crash.<locals>.g2r)r
�list)rrr)rr
�test_exception_value_crashosz.TestPEP380Operation.test_exception_value_crashcs�g���fdd�}d�fdd��x%|�D]}�jd|f�q:W|j�ddd	d
ddd
d	d
dddddg�dS)z-
        Test generator return value
        c3so�jd�dV��EdH}�jd|f��d�EdH}�jd|f�dV�jd�dS)NzStarting g1zg1 hamzg2 returned %srzg1 eggszFinishing g1)r)�ret)rr	rr
rs
z;TestPEP380Operation.test_generator_return_value.<locals>.g1Nc3s2�jd�dVdV�jd�|r.|SdS)NzStarting g2zg2 spamzg2 more spamzFinishing g2)r)�v)r	rr
r�s

z;TestPEP380Operation.test_generator_return_value.<locals>.g2z
Yielded %szStarting g1zYielded g1 hamzStarting g2zYielded g2 spamzYielded g2 more spamzFinishing g2zg2 returned Nonezg2 returned 42zYielded g1 eggszFinishing g1)rr
)rrrr)rr	r
�test_generator_return_valuezs(		z/TestPEP380Operation.test_generator_return_valuecCsWg}dd�}x%|�D]}|jd|f�qW|j|dddg�dS)z<
        Test delegation of next() to non-generator
        csstd�EdHdS)N�)r#rrrr
r�szGTestPEP380Operation.test_delegation_of_next_to_non_generator.<locals>.gz
Yielded %sz	Yielded 0z	Yielded 1z	Yielded 2N)rr
)rr	rrrrr
�(test_delegation_of_next_to_non_generator�s	z<TestPEP380Operation.test_delegation_of_next_to_non_generatorcCsrg}dd�}|�}x7td�D])}|jd�}|jd|f�q(W|j|dddg�dS)	z9
        Test conversion of send(None) to next()
        csstd�EdHdS)Nr9)r#rrrr
r�szBTestPEP380Operation.test_conversion_of_sendNone_to_next.<locals>.gr9NzYielded: %sz
Yielded: 0z
Yielded: 1z
Yielded: 2)r#rrr
)rr	r�girrrrr
�#test_conversion_of_sendNone_to_next�s		z7TestPEP380Operation.test_conversion_of_sendNone_to_nextcsxg��fdd�}|�}t|�t��}|j�WdQRX|j|j�d�|j�ddg�dS)z=
        Test delegation of close() to non-generator
        c3sBz-�jd�td�EdH�jd�Wd�jd�XdS)Nz
starting gr9zg should not be herezfinishing g)rr#r)r	rr
r�s

zHTestPEP380Operation.test_delegation_of_close_to_non_generator.<locals>.gN�z
starting gzfinishing g)rrr$r
�getvalue)rrr;�outputr)r	r
�)test_delegation_of_close_to_non_generator�s	
	z=TestPEP380Operation.test_delegation_of_close_to_non_generatorcs�g��fdd�}y]|�}x4td�D]&}t|�}�jd|f�q1Wtd�}|j|�Wn<tk
r�}z|j|jdd�WYdd}~XnX|jd�|j�d	d
ddd
ddg�dS)z:
        Test delegating 'throw' to non-generator
        c3s5z �jd�td�EdHWd�jd�XdS)Nz
Starting g�
zFinishing g)rr#r)r	rr
r�s
zETestPEP380Operation.test_delegating_throw_to_non_generator.<locals>.g�z
Yielded %sztomato ejectedrNz'subgenerator failed to raise ValueErrorz
Starting gz	Yielded 0z	Yielded 1z	Yielded 2z	Yielded 3z	Yielded 4zFinishing g)r#rrrr+r
rr)rrr;r%rrr)r	r
�&test_delegating_throw_to_non_generator�s(	*
	z:TestPEP380Operation.test_delegating_throw_to_non_generatorcs�g��fdd�}yQ|�}t|�x7td�D])}|jd�}�jd|f�q;WWn<tk
r�}z|jd|jd�WYdd}~XnX|jd	�|j�d
dg�dS)z:
        Test attempting to send to non-generator
        c3sBz-�jd�td�EdH�jd�Wd�jd�XdS)Nz
starting gr9zg should not be herezfinishing g)rr#r)r	rr
r�s

zGTestPEP380Operation.test_attempting_to_send_to_non_generator.<locals>.gr9rzShould not have yielded: %srrNz#was able to send into non-generatorz
starting gzfinishing g)	rr#rr�AttributeError�assertInrrr
)rrr;rrrr)r	r
�(test_attempting_to_send_to_non_generator�s	
*
	z<TestPEP380Operation.test_attempting_to_send_to_non_generatorcsGdd�d���fdd�}|jt��1|�}|jt|�d�|jd�WdQRX|jt��1|�}|jt|�d�|jt�WdQRXt��0}|�}|jt|�d�|j�WdQRX|j	d|j
��dS)zG
        Test subiterator with a broken getattr implementation
        c@s4eZdZdd�Zdd�Zdd�ZdS)z@TestPEP380Operation.test_broken_getattr_handling.<locals>.BrokencSs|S)Nr)rrrr
�__iter__szITestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__iter__cSsdS)Nrr)rrrr
�__next__szITestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__next__cSsdddS)Nrrr)r�attrrrr
�__getattr__szLTestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__getattr__N)r.�
__module__�__qualname__rGrHrJrrrr
�BrokensrMc3s��EdHdS)Nrr)rMrr
r sz;TestPEP380Operation.test_broken_getattr_handling.<locals>.grN�ZeroDivisionError)r rNr
rrr+rDrr$rEr>)rrr;r?r)rMr
�test_broken_getattr_handlings			z0TestPEP380Operation.test_broken_getattr_handlingcs`g���fdd��dd���fdd�}|jt|�|j�dg�dS)	z7
        Test exception in initial next() call
        c3s*�jd���EdH�jd�dS)Nzg1 about to yield from g2zg1 should not be here)rr)rr	rr
r8s
zCTestPEP380Operation.test_exception_in_initial_next_call.<locals>.g1css
ddVdS)Nrrrrrrr
r<szCTestPEP380Operation.test_exception_in_initial_next_call.<locals>.g2cs��}t|�dS)N)r)r;)rrr
r>s	zDTestPEP380Operation.test_exception_in_initial_next_call.<locals>.runzg1 about to yield from g2N)r rNr
)rrr)rrr	r
�#test_exception_in_initial_next_call3s	z7TestPEP380Operation.test_exception_in_initial_next_callcs�g���fdd�}��fdd��y2|��x"�D]}�jd|f�qCWWn<tk
r�}z|j|jdd�WYdd}~XnX|jd	�|j�d
ddd
ddg�dS)z0
        Test attempted yield-from loop
        c3s<�jd�dV�jd���EdH�jd�dS)Nzg1: startingZy1zg1: about to yield from g2zg1 should not be here)rr)rr	rr
rKs


z>TestPEP380Operation.test_attempted_yield_from_loop.<locals>.g1c3s9�jd�dV�jd��EdH�jd�dS)Nzg2: startingZy2zg2: about to yield from g1zg2 should not be here)rr)r;r	rr
rRs


	z>TestPEP380Operation.test_attempted_yield_from_loop.<locals>.g2zYielded: %srzgenerator already executingNz$subgenerator didn't raise ValueErrorzg1: startingzYielded: y1zg1: about to yield from g2zg2: startingzYielded: y2zg2: about to yield from g1)rrr
rr)rrrrr)rr;r	r
�test_attempted_yield_from_loopFs"	
*
	z2TestPEP380Operation.test_attempted_yield_from_loopc
s�g���fdd�}��fdd��Gdd�dt��|�}x4td�D]&}t|�}�jd|f�q\W�d	�}|j|�x"|D]}�jd|f�q�W|j�d
ddd
ddddg�dS)z=
        Test returning value from delegated 'throw'
        c3s<z'�jd�dV��EdHdVWd�jd�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
rns
	zITestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.g1c3sKy�jd�dVdVWn)�k
rF�jd�dVdVYnXdS)NzStarting g2zg2 spamzg2 more spamzCaught LunchError in g2zg2 lunch savedzg2 yet more spam)rr)�
LunchErrorr	rr
rvs
	

zITestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.g2c@seZdZdS)zQTestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.LunchErrorN)r.rKrLrrrr
rRsrRr"z
Yielded %sztomato ejectedzStarting g1zYielded g1 hamzStarting g2zYielded g2 spamzCaught LunchError in g2zYielded g2 yet more spamzYielded g1 eggszFinishing g1N)�	Exceptionr#rrr+r
)rrrr%rrr)rRrr	r
�)test_returning_value_from_delegated_throwis*		

	z=TestPEP380Operation.test_returning_value_from_delegated_throwc
smg���fdd�}�fdd��|d�|d�|j�ddd	d
ddddg�dS)
z1
        Test next and return with value
        cs��|�}t|�y(�jd�t|��jd�Wn?tk
r}z�jdt|�f�WYdd}~XnXdS)Nzf resuming gzf SHOULD NOT BE HEREzf caught %s)rrr�repr)�rr;r)rr	rr
�f�s


z>TestPEP380Operation.test_next_and_return_with_value.<locals>.fc3s*�jd�dV�jd|f�|S)Nz
g startingzg returning %s)r)rV)r	rr
r�s
z>TestPEP380Operation.test_next_and_return_with_value.<locals>.gNrz
g startingzf resuming gzg returning Nonezf caught StopIteration()zg returning 42zf caught StopIteration(42,))r
)rrWr)rr	r
�test_next_and_return_with_value�s	

	z3TestPEP380Operation.test_next_and_return_with_valuecssg���fdd�}�fdd��|d�|d�|j�ddd	d
dddd	dd
g
�dS)z1
        Test send and return with value
        cs��|�}t|�y+�jd�|jd��jd�Wn9tk
r|}z�jd|f�WYdd}~XnXdS)Nzf sending spam to gr1zf SHOULD NOT BE HEREzf caught %r)rrrr)rVr;r)rr	rr
rW�s


z>TestPEP380Operation.test_send_and_return_with_value.<locals>.fc3s@�jd�dV}�jd|f��jd|f�|S)Nz
g startingz
g received %szg returning %s)r)rVr)r	rr
r�s

z>TestPEP380Operation.test_send_and_return_with_value.<locals>.gNrz
g startingzf sending spam to gzg received spamzg returning Nonezf caught StopIteration()zg returning 42zf caught StopIteration(42,))r
)rrWr)rr	r
�test_send_and_return_with_value�s 	

	z3TestPEP380Operation.test_send_and_return_with_valuecsg��fdd����fdd�}|�}�jt|���j|jt��|j�ddddg�d	S)
ze
        Test catching an exception thrown into a
        subgenerator and returning a value
        c3s/y	dVWntk
r*�jd�YnXdS)Nrzinner caught ValueErrorr")rrr)r	rr
�inner�s
	
zTTestPEP380Operation.test_catching_exception_from_subgen_and_returning.<locals>.innerc3s(��EdH}�jd|�|VdS)Nzinner returned %r to outer)r)r7)rZr	rr
�outer�szTTestPEP380Operation.test_catching_exception_from_subgen_and_returning.<locals>.outerrzinner caught ValueErrorzinner returned 2 to outerr"N)rrr+rr
)rr[rr)rZr	r
�1test_catching_exception_from_subgen_and_returning�s		zETestPEP380Operation.test_catching_exception_from_subgen_and_returningcs�g��fdd����fdd�}y$|�}t|�|jt�Wntk
reYnX|jd�|j�ddg�dS)	zo
        Test throwing GeneratorExit into a subgenerator that
        catches it and returns normally.
        c3s@y#�jd�dV�jd�Wntk
r;dSYnXdS)NzEnter fzExit f)rr)r)r	rr
rW�s

zSTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns.<locals>.fc3s*�jd���EdH�jd�dS)NzEnter gzExit g)rr)rWr	rr
r�s
zSTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns.<locals>.gz*subgenerator failed to raise GeneratorExitzEnter gzEnter fN)rr+r)rr
)rrr;r)rWr	r
�4test_throwing_GeneratorExit_into_subgen_that_returns�s	


	zHTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returnscs�g��fdd����fdd�}y$|�}t|�|jt�Wn<tk
r�}z|j|jdd�WYdd}~XnX|jd�|j�d	d
g�dS)ze
        Test throwing GeneratorExit into a subgenerator that
        catches it and yields.
        c3sAy#�jd�dV�jd�Wntk
r<dVYnXdS)NzEnter fzExit f)rr)r)r	rr
rWs

zXTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields.<locals>.fc3s*�jd���EdH�jd�dS)NzEnter gzExit g)rr)rWr	rr
rs
zXTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields.<locals>.grzgenerator ignored GeneratorExitNz*subgenerator failed to raise GeneratorExitzEnter gzEnter f)rr+r)�RuntimeErrorr
rr)rrr;rr)rWr	r
�9test_throwing_GeneratorExit_into_subgenerator_that_yieldss	
*
	zMTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yieldscs�g��fdd����fdd�}y$|�}t|�|jt�WnOtk
r�}z/|j|jdd�|j|jt�WYdd}~XnX|jd�|j�d	d
g�dS)z{
        Test throwing GeneratorExit into a subgenerator that
        catches it and raises a different exception.
        c3sHy#�jd�dV�jd�Wntk
rCtd��YnXdS)NzEnter fzExit fzVorpal bunny encountered)rr)rr)r	rr
rW4s

zRTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raises.<locals>.fc3s*�jd���EdH�jd�dS)NzEnter gzExit g)rr)rWr	rr
r;s
zRTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raises.<locals>.grzVorpal bunny encounteredNz'subgenerator failed to raise ValueErrorzEnter gzEnter f)	rr+r)rr
rr'r(r)rrr;rr)rWr	r
�3test_throwing_GeneratorExit_into_subgen_that_raises.s	
&
	zGTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raisescCs&dd�}|jtt|��dS)Ncss
fEdHdS)Nrrrrr
rNsz4TestPEP380Operation.test_yield_from_empty.<locals>.g)r rr)rrrrr
�test_yield_from_emptyMsz)TestPEP380Operation.test_yield_from_emptycs��fdd�}�fdd��|���jt��ddddg�|��t��g}y!x|j�jd	��qmWWntk
r�YnX�j|ddddg�Gd
d�dt����fdd�}��fd
d��|��t��g}y!x|j�j���qWWntk
rFYnXG��fdd�dt���fdd�}|��t���j	�dS)Nc3sdV��EdHdVdS)Nrr9rr)�tworr
�oneTszOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.onec3s0dVy
�EdHWntk
r&YnXdVdS)Nrr")rr)rrr
rbXs

zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.tworrr"r9rc@seZdZdS)zQTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyErrN)r.rKrLrrrr
�MyErrksrdc3sLy	dVWn�k
rYnX��EdHy	dVWn�k
rGYnXdS)Nrr9rr)rdrbrr
rcms	
	
c3sby	dVWn�k
rYnXy
�EdHWntk
r?YnXy	dVWn�k
r]YnXdS)Nrr")rr)rdrrr
rbws	


	
cs=eZdZdd�Zdd�Z��fdd�ZdS)zPTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyItcSs|S)Nr)rrrr
rG�szYTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.__iter__cSsdS)Nrr)rrrr
rH�szYTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.__next__cs'�j�j��jtt��dS)N)�
assertTrue�
gi_runningr rr)Zself_)rrrr
r$�szVTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.closeN)r.rKrLrGrHr$r)rrrr
�MyIt�srgc3s��EdHdS)Nrr)rgrr
rc�s)
r
r4rrrrrSr+�objectr$)rrc�resr)rdrgrrrbr
�.test_delegating_generators_claim_to_be_runningRs6	"	


	
	
zBTestPEP380Operation.test_delegating_generators_claim_to_be_runningcs�dd���fdd�}dd�}dd�}x*||��D]}|jd	|k�qFWx<|||���D]%}|jd	|ko�d
|k�qyWdS)NcSsdd�tj�D�S)NcSsg|]}|d�qS)r9r)�.0rWrrr
�
<listcomp>�s	zaTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.call_stack.<locals>.<listcomp>)�inspect�stackrrrr
�
call_stack�szMTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.call_stackc3s��V��V��VdS)Nrr)rorr
�gen�szFTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.gencss
|EdHdS)Nr)rrrr
r1�szGTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.spamcss
|EdHdS)Nr)rrrr
r2�szGTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.eggsr1r2)re)rrpr1r2rnr)ror
�%test_delegator_is_visible_to_debugger�sz9TestPEP380Operation.test_delegator_is_visible_to_debuggercsOGdd�d����fdd�}d�t|��|j�d�dS)Nc@s(eZdZdd�Zdd�ZdS)z?TestPEP380Operation.test_custom_iterator_return.<locals>.MyItercSs|S)Nr)rrrr
rG�szHTestPEP380Operation.test_custom_iterator_return.<locals>.MyIter.__iter__cSstd��dS)Nr)r)rrrr
rH�szHTestPEP380Operation.test_custom_iterator_return.<locals>.MyIter.__next__N)r.rKrLrGrHrrrr
�MyIter�srrc3s��EdH�dS)Nrr)rrr6rr
rp�sz<TestPEP380Operation.test_custom_iterator_return.<locals>.genr)r4r
)rrpr)rrr6r
�test_custom_iterator_return�s

z/TestPEP380Operation.test_custom_iterator_returnc	s�dd���fdd�}dd�}t��K|�}|�}|jd�|j|�|j|�~~t�WdQRXdS)Ncss	dVdS)Nrrrrr
�	innermost�szDTestPEP380Operation.test_close_with_cleared_frame.<locals>.innermostc3sdV}��EdHdS)Nr)�	outer_gen)rtrr
rZ�sz@TestPEP380Operation.test_close_with_cleared_frame.<locals>.innercssdV}|EdHdS)Nr)�	inner_genrrr
r[�sz@TestPEP380Operation.test_close_with_cleared_frame.<locals>.outer)rrr)rrZr[rvrur)rtr
�test_close_with_cleared_frame�s
		


z1TestPEP380Operation.test_close_with_cleared_framecseG�fdd�d���fdd�}|�}t|�d�|jd	�|j�d
�dS)Ncs:eZdZdd�Zdd�Z�fdd�ZdS)zHTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGencSs|S)Nr)rrrr
rG�szQTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.__iter__cSsdS)Nrr)rrrr
rH�szQTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.__next__cs
|�dS)Nr)rZwhat)r7rr
r�szMTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.sendN)r.rKrLrGrHrr)r7rr
�MyGen�srxc3s��EdH}dS)Nr)r7)rxrr
r[�szHTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.outerrr"r9�)rr"r9ry)rr"r9ry)rrr
)rr[rr)rxr7r
�%test_send_tuple_with_custom_generator�s		

z9TestPEP380Operation.test_send_tuple_with_custom_generatorN)%r.rKrL�__doc__rrrrrr!r&r*r,r3r5r8r:r<r@rCrFrOrPrQrTrXrYr\r]r_r`rarjrqrsrwrzrrrr
rsD%,)")(( #+ #H'r�__main__)r{Zunittest�io�sysrm�parserZtest.supportrrrZTestCaserr.�mainrrrr
�<module>s����