@@ -41,6 +41,20 @@ async def asynciter(iterable):
41
41
for x in iterable :
42
42
yield x
43
43
44
+ def clean_asynciter (test ):
45
+ @wraps (test )
46
+ async def wrapper (* args , ** kwargs ):
47
+ cleanups = []
48
+ def wrapped_asynciter (iterable ):
49
+ it = asynciter (iterable )
50
+ cleanups .append (it .aclose )
51
+ return it
52
+ try :
53
+ return await test (* args , ** kwargs , asynciter = wrapped_asynciter )
54
+ finally :
55
+ while cleanups :
56
+ await cleanups .pop ()()
57
+ return wrapper
44
58
45
59
# A very basic example. If this fails, we're in deep trouble.
46
60
def basic ():
@@ -1914,7 +1928,11 @@ def compare_jump_output(self, expected, received):
1914
1928
1915
1929
def run_test (self , func , jumpFrom , jumpTo , expected , error = None ,
1916
1930
event = 'line' , decorated = False , warning = None ):
1917
- tracer = JumpTracer (func , jumpFrom , jumpTo , event , decorated )
1931
+ wrapped = func
1932
+ while hasattr (wrapped , '__wrapped__' ):
1933
+ wrapped = wrapped .__wrapped__
1934
+
1935
+ tracer = JumpTracer (wrapped , jumpFrom , jumpTo , event , decorated )
1918
1936
sys .settrace (tracer .trace )
1919
1937
output = []
1920
1938
@@ -1930,7 +1948,11 @@ def run_test(self, func, jumpFrom, jumpTo, expected, error=None,
1930
1948
1931
1949
def run_async_test (self , func , jumpFrom , jumpTo , expected , error = None ,
1932
1950
event = 'line' , decorated = False , warning = None ):
1933
- tracer = JumpTracer (func , jumpFrom , jumpTo , event , decorated )
1951
+ wrapped = func
1952
+ while hasattr (wrapped , '__wrapped__' ):
1953
+ wrapped = wrapped .__wrapped__
1954
+
1955
+ tracer = JumpTracer (wrapped , jumpFrom , jumpTo , event , decorated )
1934
1956
sys .settrace (tracer .trace )
1935
1957
output = []
1936
1958
@@ -2001,15 +2023,17 @@ def test_jump_out_of_block_backwards(output):
2001
2023
output .append (7 )
2002
2024
2003
2025
@async_jump_test (4 , 5 , [3 , 5 ])
2004
- async def test_jump_out_of_async_for_block_forwards (output ):
2026
+ @clean_asynciter
2027
+ async def test_jump_out_of_async_for_block_forwards (output , asynciter ):
2005
2028
for i in [1 ]:
2006
2029
async for i in asynciter ([1 , 2 ]):
2007
2030
output .append (3 )
2008
2031
output .append (4 )
2009
2032
output .append (5 )
2010
2033
2011
2034
@async_jump_test (5 , 2 , [2 , 4 , 2 , 4 , 5 , 6 ])
2012
- async def test_jump_out_of_async_for_block_backwards (output ):
2035
+ @clean_asynciter
2036
+ async def test_jump_out_of_async_for_block_backwards (output , asynciter ):
2013
2037
for i in [1 ]:
2014
2038
output .append (2 )
2015
2039
async for i in asynciter ([1 ]):
0 commit comments