HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_yield_from.cpython-37.pyc
B

��g�w�@sNdZddlZddlZddlmZmZmZGdd�dej�Ze	dkrJe�
�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@seZdZdZdd�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]}��d|f�q&W|��dddd	d
g�dS)zH
        Test delegation of initial next() call to subgenerator
        c3s$��d���EdH��d�dS)NzStarting g1zFinishing g1)�append�)�g2�tracer�0/usr/local/lib/python3.7/test/test_yield_from.py�g1s
zOTestPEP380Operation.test_delegation_of_initial_next_to_subgenerator.<locals>.g1c3s��d�dV��d�dS)NzStarting g2�*zFinishing g2)rr)r	rr
rs
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_subgeneratorc
s�g���fdd�}�fdd��y$x|�D]}��d|f�q(WWn4tk
rv}z|�|jdd�Wdd}~XYnX|�d	�|��d
ddd
g�dS)z?
        Test raising exception in initial next() call
        c	3s,z��d���EdHWd��d�XdS)NzStarting g1zFinishing g1)rr)rr	rr
r0s
zKTestPEP380Operation.test_raising_exception_in_initial_next_call.<locals>.g1c	s(z��d�td��Wd��d�XdS)NzStarting g2zspanish inquisition occurredzFinishing g2)r�
ValueErrorr)r	rr
r6s
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_callcs^g���fdd�}�fdd��x|�D]}��d|f�q&W|��dddd	d
ddd
g�dS)z@
        Test delegation of next() call to subgenerator
        c3s0��d�dV��EdHdV��d�dS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
rOs

zLTestPEP380Operation.test_delegation_of_next_call_to_subgenerator.<locals>.g1c3s$��d�dVdV��d�dS)NzStarting g2zg2 spamzg2 more spamzFinishing g2)rr)r	rr
rUs
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_subgeneratorJsz@TestPEP380Operation.test_delegation_of_next_call_to_subgeneratorc
s�g���fdd�}�fdd��y$x|�D]}��d|f�q(WWn4tk
rv}z|�|jdd�Wdd}~XYnX|�d	�|��d
ddd
ddg�dS)zA
        Test raising exception in delegated next() call
        c	3s8z&��d�dV��EdHdVWd��d�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
rls

zMTestPEP380Operation.test_raising_exception_in_delegated_next_call.<locals>.g1c	3s4z"��d�dVtd��dVWd��d�XdS)NzStarting g2zg2 spamzhovercraft is full of eelszg2 more spamzFinishing g2)rrr)r	rr
rts

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_callgs $
zATestPEP380Operation.test_raising_exception_in_delegated_next_callcs�g���fdd�}�fdd��|�}t|�}d}y,x&|�|�}��d|f�|d7}q4WWntk
rpYnX|��ddd	d
ddd
ddddg�dS)z+
        Test delegation of send()
        c3sP��d�dV}��d|f���EdHdV}��d|f���d�dS)NzStarting g1zg1 hamzg1 received %szg1 eggszFinishing g1)r)r)rr	rr
r�s
z7TestPEP380Operation.test_delegation_of_send.<locals>.g1c3sD��d�dV}��d|f�dV}��d|f���d�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_sendcsRg���fdd���fdd����fdd�}|�t|�|��ddd	d
dg�dS)
zA
        Test handling exception while delegating 'send'
        c3sP��d�dV}��d|f���EdHdV}��d|f���d�dS)NzStarting g1zg1 hamzg1 received %szg1 eggszFinishing g1)r)r)rr	rr
r�s
zMTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.g1c3sL��d�dV}��d|f�td��dV}��d|f���d�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>.g2csb��}t|�}d}y,x&|�|�}��d|f�|d7}qWWntk
r\��d�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_sendc	srg���fdd�}�fdd��|�}x(td�D]}t|�}��d|f�q.W|��|��ddd	d
ddg�d
S)z)
        Test delegating 'close'
        c	3s8z&��d�dV��EdHdVWd��d�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
r�s

z5TestPEP380Operation.test_delegating_close.<locals>.g1c	3s,z��d�dVdVWd��d�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_closec
s�g���fdd�}�fdd��y<|�}x(td�D]}t|�}��d|f�q0W|��WnBtk
r�}z$|�|jdd�|�|jt	�Wd	d	}~XYnX|�
d
�|��ddd
dddg�d	S)zB
        Test handling exception while delegating 'close'
        c	3s8z&��d�dV��EdHdVWd��d�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
rs

zMTestPEP380Operation.test_handing_exception_while_delegating_close.<locals>.g1c	3s4z��d�dVdVWd��d�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_closec
s�g���fdd�}�fdd��yF|�}x(td�D]}t|�}��d|f�q0Wtd�}|�|�Wn4tk
r�}z|�|jdd�Wd	d	}~XYnX|�d
�|��ddd
dddg�d	S)z)
        Test delegating 'throw'
        c	3s8z&��d�dV��EdHdVWd��d�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
r1s

z5TestPEP380Operation.test_delegating_throw.<locals>.g1c	3s,z��d�dVdVWd��d�XdS)NzStarting g2zg2 spamzg2 more spamzFinishing g2)rr)r	rr
r9s


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_throwc	sXg��fdd�}t�}||�td�}||�d|_||�|��dddddd	g�d
S)zC
        Test 'value' attribute of StopIteration exception
        cs,��d|jj|f���d|jf�dS)Nz%s: %sz
value = %s)r�	__class__�__name__�value)r)r	rr
�pexYszPTestPEP380Operation.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_exceptionTszCTestPEP380Operation.test_value_attribute_of_StopIteration_exceptioncs,�fdd�}dd��|�t|��dg�dS)Nc3s��EdHdS)Nrr)rrr
rosz:TestPEP380Operation.test_exception_value_crash.<locals>.g1cssdVdgS)Nrrrrrrr
rqsz:TestPEP380Operation.test_exception_value_crash.<locals>.g2r)r
�list)rrr)rr
�test_exception_value_crashlsz.TestPEP380Operation.test_exception_value_crashcs�g���fdd�}d�fdd�	�x|�D]}��d|f�q(W|��ddd	d
ddd
d	d
dddd	d
dddd	d
dddddg�dS)z-
        Test generator return value
        c3sv��d�dV��EdH}��d|f�x4ddtd�fD]"}�|�EdH}��d|f�q<WdV��d�dS)	NzStarting g1zg1 hamzg2 returned %rr)r"�zg1 eggszFinishing g1)rr)�ret�v)rr	rr
r|s
z;TestPEP380Operation.test_generator_return_value.<locals>.g1Nc3s,��d�dVdV��d�|r(|SdS)NzStarting g2zg2 spamzg2 more spamzFinishing g2)r)r8)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 Nonez
g2 returned 1zg2 returned (2,)zg2 returned StopIteration(3)zYielded g1 eggszFinishing g1)N)rr
)rrrr)rr	r
�test_generator_return_valuews<
z/TestPEP380Operation.test_generator_return_valuecCsBg}dd�}x|�D]}|�d|f�qW|�|dddg�dS)z<
        Test delegation of next() to non-generator
        csstd�EdHdS)Nr6)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_generatorcCsTg}dd�}|�}x*td�D]}|�d�}|�d|f�qW|�|dddg�dS)	z9
        Test conversion of send(None) to next()
        csstd�EdHdS)Nr6)r#rrrr
r�szBTestPEP380Operation.test_conversion_of_sendNone_to_next.<locals>.gr6NzYielded: %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_nextc	s\g��fdd�}|�}t|�t��}|��WdQRX|�|��d�|��ddg�dS)z=
        Test delegation of close() to non-generator
        c	3s8z&��d�td�EdH��d�Wd��d�XdS)Nz
starting gr6zg 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_generatorc
s�g��fdd�}yF|�}x(td�D]}t|�}��d|f�q"Wtd�}|�|�Wn4tk
r�}z|�|jdd�Wdd}~XYnX|�d�|��d	d
ddd
ddg�dS)z:
        Test delegating 'throw' to non-generator
        c	3s.z��d�td�EdHWd��d�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_generatorc
s�g��fdd�}y>|�}t|�x*td�D]}|�d�}��d|f�q*WWn4tk
r�}z|�d|jd�Wdd}~XYnX|�d	�|��d
dg�dS)z:
        Test attempting to send to non-generator
        c	3s8z&��d�td�EdH��d�Wd��d�XdS)Nz
starting gr6zg should not be herezfinishing g)rr#r)r	rr
rs

zGTestPEP380Operation.test_attempting_to_send_to_non_generator.<locals>.gr6r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_generators
$
z<TestPEP380Operation.test_attempting_to_send_to_non_generatorc	s�Gdd�d���fdd�}|�t��&|�}|�t|�d�|�d�WdQRX|�t��&|�}|�t|�d�|�t�WdQRXt��$}|�}|�t|�d�|��WdQRX|�	d|�
��dS)zG
        Test subiterator with a broken getattr implementation
        c@s$eZdZdd�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
�Broken srMc3s��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_handlingcsDg���fdd��dd���fdd�}|�t|�|��dg�dS)	z7
        Test exception in initial next() call
        c3s$��d���EdH��d�dS)Nzg1 about to yield from g2zg1 should not be here)rr)rr	rr
r@s
zCTestPEP380Operation.test_exception_in_initial_next_call.<locals>.g1cssddVdS)Nrrrrrrr
rDszCTestPEP380Operation.test_exception_in_initial_next_call.<locals>.g2cs��}t|�dS)N)r)r;)rrr
rFszDTestPEP380Operation.test_exception_in_initial_next_call.<locals>.runzg1 about to yield from g2N)r rNr
)rrr)rrr	r
�#test_exception_in_initial_next_call;sz7TestPEP380Operation.test_exception_in_initial_next_callc
s�g���fdd�}��fdd��y(|��x�D]}��d|f�q.WWn4tk
r|}z|�|jdd�Wdd}~XYnX|�d	�|��d
ddd
ddg�dS)z0
        Test attempted yield-from loop
        c3s4��d�dV��d���EdH��d�dS)Nzg1: startingZy1zg1: about to yield from g2zg1 should not be here)rr)rr	rr
rSs


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



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_loopNs"
$
z2TestPEP380Operation.test_attempted_yield_from_loopcs�g���fdd�}��fdd��Gdd�dt��|�}x(td�D]}t|�}��d|f�q@W�d	�}|�|�x|D]}��d|f�qxW|��d
ddd
ddddg�dS)z=
        Test returning value from delegated 'throw'
        c	3s8z&��d�dV��EdHdVWd��d�XdS)NzStarting g1zg1 hamzg1 eggszFinishing g1)rr)rr	rr
rvs

zITestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.g1c3sJy��d�dVdVWn*�k
rD��d�dVdVYnXdS)NzStarting g2zg2 spamzg2 more spamzCaught LunchError in g2zg2 lunch savedzg2 yet more spam)rr)�
LunchErrorr	rr
r~s


zITestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.g2c@seZdZdS)zQTestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.LunchErrorN)r.rKrLrrrr
rR�srRr"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_throwqs*	

z=TestPEP380Operation.test_returning_value_from_delegated_throwcsrg���fdd�}�fdd��|d�|d�|d�|td��|��d	d
ddd	d
d
dd	d
ddd	d
ddg�dS)z1
        Test next and return with value
        c
sh�|�}t|�y ��d�t|���d�Wn2tk
rb}z��d|f�Wdd}~XYnXdS)Nzf resuming gzf SHOULD NOT BE HEREzf caught %r)rrr)�rr;r)rr	rr
�f�s
z>TestPEP380Operation.test_next_and_return_with_value.<locals>.fc3s$��d�dV��d|f�|S)Nz
g startingzg returning %r)r)rU)r	rr
r�s
z>TestPEP380Operation.test_next_and_return_with_value.<locals>.gNr)r"r6z
g startingzf resuming gzg returning Nonezf caught StopIteration()z
g returning 1zf caught StopIteration(1)zg returning (2,)zf caught StopIteration((2,))zg returning StopIteration(3)z(f caught StopIteration(StopIteration(3)))rr
)rrVr)rr	r
�test_next_and_return_with_value�s0	z3TestPEP380Operation.test_next_and_return_with_valuecszg���fdd�}�fdd��|d�|d�|d�|td��|��d	d
ddd
d	d
dddd	d
dddd	d
dddg�dS)z1
        Test send and return with value
        c
sj�|�}t|�y"��d�|�d���d�Wn2tk
rd}z��d|f�Wdd}~XYnXdS)Nzf sending spam to gr1zf SHOULD NOT BE HEREzf caught %r)rrrr)rUr;r)rr	rr
rV�s

z>TestPEP380Operation.test_send_and_return_with_value.<locals>.fc3s4��d�dV}��d|f���d|f�|S)Nz
g startingz
g received %rzg returning %r)r)rUr)r	rr
r�s

z>TestPEP380Operation.test_send_and_return_with_value.<locals>.gNr)r"r6z
g startingzf sending spam to gzg received 'spam'zg returning Nonezf caught StopIteration()z
g returning 1zf caught StopIteration(1)zg returning (2,)zf caught StopIteration((2,))zg returning StopIteration(3)z(f caught StopIteration(StopIteration(3)))rr
)rrVr)rr	r
�test_send_and_return_with_value�s8	z3TestPEP380Operation.test_send_and_return_with_valuec	s���fdd����fdd�}x`ddtd�fD]N�g�|�}��t|����t|�t���|��ddd	�ft��g�q,Wd
S)ze
        Test catching an exception thrown into a
        subgenerator and returning a value
        c3s.y
dVWntk
r(��d�YnX�S)Nrzinner caught ValueError)rrr)r	r/rr
�inner�s

zTTestPEP380Operation.test_catching_exception_from_subgen_and_returning.<locals>.innerc3s&��EdH}��d|f�|VdS)Nzinner returned %r to outer)r)r8)rYr	rr
�outerszTTestPEP380Operation.test_catching_exception_from_subgen_and_returning.<locals>.outerr")r"rzinner caught ValueErrorzinner returned %r to outerN)rrr�reprr+rr
)rrZrr)rYr	r/r
�1test_catching_exception_from_subgen_and_returning�szETestPEP380Operation.test_catching_exception_from_subgen_and_returningcsng��fdd����fdd�}y|�}t|�|�t�Wntk
rNYnX|�d�|��ddg�dS)	zo
        Test throwing GeneratorExit into a subgenerator that
        catches it and returns normally.
        c3s8y��d�dV��d�Wntk
r2dSXdS)NzEnter fzExit f)rr)r)r	rr
rVs
zSTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns.<locals>.fc3s$��d���EdH��d�dS)NzEnter gzExit g)rr)rVr	rr
rs
zSTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns.<locals>.gz*subgenerator failed to raise GeneratorExitzEnter gzEnter fN)rr+r)rr
)rrr;r)rVr	r
�4test_throwing_GeneratorExit_into_subgen_that_returnss
zHTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returnsc
s�g��fdd����fdd�}y|�}t|�|�t�Wn4tk
rn}z|�|jdd�Wdd}~XYnX|�d�|��d	d
g�dS)ze
        Test throwing GeneratorExit into a subgenerator that
        catches it and yields.
        c3s>y��d�dV��d�Wntk
r8dVYnXdS)NzEnter fzExit f)rr)r)r	rr
rV6s
zXTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields.<locals>.fc3s$��d���EdH��d�dS)NzEnter gzExit g)rr)rVr	rr
r=s
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)rVr	r
�9test_throwing_GeneratorExit_into_subgenerator_that_yields0s$
zMTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yieldsc
s�g��fdd����fdd�}y|�}t|�|�t�WnBtk
r|}z$|�|jdd�|�|jt�Wdd}~XYnX|�d�|��d	d
g�dS)z{
        Test throwing GeneratorExit into a subgenerator that
        catches it and raises a different exception.
        c3s@y��d�dV��d�Wntk
r:td��YnXdS)NzEnter fzExit fzVorpal bunny encountered)rr)rr)r	rr
rVTs
zRTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raises.<locals>.fc3s$��d���EdH��d�dS)NzEnter gzExit g)rr)rVr	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)rVr	r
�3test_throwing_GeneratorExit_into_subgen_that_raisesNs 
zGTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raisescCsdd�}|�tt|��dS)NcssdEdHdS)Nrrrrrr
rnsz4TestPEP380Operation.test_yield_from_empty.<locals>.g)r rr)rrrrr
�test_yield_from_emptymsz)TestPEP380Operation.test_yield_from_emptycs2�fdd�}�fdd��|����t��ddddg�|��t��g}yx|���d	��qJWWntk
rtYnX��|ddddg�Gd
d�dt����fdd�}��fd
d��|��t��g}yx|������q�WWntk
r�YnXG��fdd�dt���fdd�}|��t����	�dS)Nc3sdV��EdHdVdS)Nrr6rr)�tworr
�onetszOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.onec3s4dVy�EdHWntk
r(YnXdVdS)Nrr")rr)rrr
rbxszOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.tworrr"r6rc@seZdZdS)zQTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyErrN)r.rKrLrrrr
�MyErr�srdc3sPy
dVWn�k
rYnX��EdHy
dVWn�k
rJYnXdS)Nrr6rr)rdrbrr
rc�s

c3shy
dVWn�k
rYnXy�EdHWntk
rBYnXy
dVWn�k
rbYnXdS)Nrr")rr)rdrrr
rb�s

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���tt��dS)N)�
assertTrue�
gi_runningr rr)Zself_)rrrr
r$�szVTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.closeN)r.rKrLrGrHr$r)rrrr
�MyIt�srgc3s��EdHdS)Nrr)rgrr
rc�s)
r
r4rrrrrSr+�objectr$)rrcZresr)rdrgrrrbr
�.test_delegating_generators_claim_to_be_runningrs6



zBTestPEP380Operation.test_delegating_generators_claim_to_be_runningcsxdd���fdd�}dd�}dd�}x ||��D]}|�d	|k�q0Wx,|||���D]}|�d	|kold
|k�qVWdS)NcSsdd�t��D�S)NcSsg|]}|d�qS)r6r)�.0rVrrr
�
<listcomp>�szaTestPEP380Operation.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)rnrr
�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)rror1r2rmr)rnr
�%test_delegator_is_visible_to_debugger�sz9TestPEP380Operation.test_delegator_is_visible_to_debuggercs:Gdd�d����fdd�}d�t|��|��d�dS)Nc@seZdZdd�Zdd�ZdS)z?TestPEP380Operation.test_custom_iterator_return.<locals>.MyItercSs|S)Nr)rrrr
rG�szHTestPEP380Operation.test_custom_iterator_return.<locals>.MyIter.__iter__cSstd��dS)Nr)r)rrrr
rH�szHTestPEP380Operation.test_custom_iterator_return.<locals>.MyIter.__next__N)r.rKrLrGrHrrrr
�MyIter�srqc3s��EdH�dS)Nrr)rqr7rr
ro�sz<TestPEP380Operation.test_custom_iterator_return.<locals>.genr)r4r
)rror)rqr7r
�test_custom_iterator_return�s

z/TestPEP380Operation.test_custom_iterator_returnc	sfdd���fdd�}dd�}t��:|�}|�}|�d�|�|�|�|�~~t�WdQRXdS)Ncss
dVdS)Nrrrrr
�	innermost�szDTestPEP380Operation.test_close_with_cleared_frame.<locals>.innermostc3sdV}��EdHdS)Nr)�	outer_gen)rsrr
rY�sz@TestPEP380Operation.test_close_with_cleared_frame.<locals>.innercssdV}|EdHdS)Nr)�	inner_genrrr
rZ�sz@TestPEP380Operation.test_close_with_cleared_frame.<locals>.outer)rrr)rrYrZrurtr)rsr
�test_close_with_cleared_frame�s


z1TestPEP380Operation.test_close_with_cleared_framecsJG�fdd�d���fdd�}|�}t|�d�|�d�|��d�dS)Ncs(eZdZdd�Zdd�Z�fdd�ZdS)zHTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGencSs|S)Nr)rrrr
rGszQTestPEP380Operation.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)r8rr
rszMTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.sendN)r.rKrLrGrHrr)r8rr
�MyGensrwc3s��EdH}dS)Nr)r8)rwrr
rZszHTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.outer)rr"r6�)rrr
)rrZrr)rwr8r
�%test_send_tuple_with_custom_generators	
z9TestPEP380Operation.test_send_tuple_with_custom_generatorN)%r.rKrL�__doc__rrrrrr!r&r*r,r3r5r9r:r<r@rCrFrOrPrQrTrWrXr\r]r_r`rarirprrrvryrrrr
rsD%,)")(3 #+*/H'r�__main__)rzZunittestrlZtest.supportrrrZTestCaserr.�mainrrrr
�<module>s