@@ -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 ():
@@ -1868,7 +1882,11 @@ def compare_jump_output(self, expected, received):
1868
1882
1869
1883
def run_test (self , func , jumpFrom , jumpTo , expected , error = None ,
1870
1884
event = 'line' , decorated = False ):
1871
- tracer = JumpTracer (func , jumpFrom , jumpTo , event , decorated )
1885
+ wrapped = func
1886
+ while hasattr (wrapped , '__wrapped__' ):
1887
+ wrapped = wrapped .__wrapped__
1888
+
1889
+ tracer = JumpTracer (wrapped , jumpFrom , jumpTo , event , decorated )
1872
1890
sys .settrace (tracer .trace )
1873
1891
output = []
1874
1892
if error is None :
@@ -1881,7 +1899,11 @@ def run_test(self, func, jumpFrom, jumpTo, expected, error=None,
1881
1899
1882
1900
def run_async_test (self , func , jumpFrom , jumpTo , expected , error = None ,
1883
1901
event = 'line' , decorated = False ):
1884
- tracer = JumpTracer (func , jumpFrom , jumpTo , event , decorated )
1902
+ wrapped = func
1903
+ while hasattr (wrapped , '__wrapped__' ):
1904
+ wrapped = wrapped .__wrapped__
1905
+
1906
+ tracer = JumpTracer (wrapped , jumpFrom , jumpTo , event , decorated )
1885
1907
sys .settrace (tracer .trace )
1886
1908
output = []
1887
1909
if error is None :
@@ -1949,15 +1971,17 @@ def test_jump_out_of_block_backwards(output):
1949
1971
output .append (7 )
1950
1972
1951
1973
@async_jump_test (4 , 5 , [3 , 5 ])
1952
- async def test_jump_out_of_async_for_block_forwards (output ):
1974
+ @clean_asynciter
1975
+ async def test_jump_out_of_async_for_block_forwards (output , asynciter ):
1953
1976
for i in [1 ]:
1954
1977
async for i in asynciter ([1 , 2 ]):
1955
1978
output .append (3 )
1956
1979
output .append (4 )
1957
1980
output .append (5 )
1958
1981
1959
1982
@async_jump_test (5 , 2 , [2 , 4 , 2 , 4 , 5 , 6 ])
1960
- async def test_jump_out_of_async_for_block_backwards (output ):
1983
+ @clean_asynciter
1984
+ async def test_jump_out_of_async_for_block_backwards (output , asynciter ):
1961
1985
for i in [1 ]:
1962
1986
output .append (2 )
1963
1987
async for i in asynciter ([1 ]):
0 commit comments