diff --git a/test/bytecode_3.7/04_async.pyc b/test/bytecode_3.7/04_async.pyc deleted file mode 100644 index 67f813ed..00000000 Binary files a/test/bytecode_3.7/04_async.pyc and /dev/null differ diff --git a/test/bytecode_3.7_run/10_async.pyc b/test/bytecode_3.7_run/10_async.pyc new file mode 100644 index 00000000..2e7127c5 Binary files /dev/null and b/test/bytecode_3.7_run/10_async.pyc differ diff --git a/test/simple_source/bug37/04_async.py b/test/simple_source/bug37/04_async.py deleted file mode 100644 index d7947b19..00000000 --- a/test/simple_source/bug37/04_async.py +++ /dev/null @@ -1,23 +0,0 @@ -# from 3.7 test_contextlib_async.py -# Bugs were not adding "async" when a function is a decorator, -# and a misaligment when using "async with as". -@_async_test -async def test_enter(self): - self.assertIs(await manager.__aenter__(), manager) - - async with manager as context: - async with woohoo() as x: - x = 1 - y = 2 - assert manager is context - -# From 3.7.6 test_coroutines.py -# Bug was different form of code for "async with" below -class CoroutineTest(): - def test_with_8(self): - CNT = 0 - async def foo(): - nonlocal CNT - async with CM(): - CNT += 1 - return diff --git a/test/simple_source/bug37/10_async.py b/test/simple_source/bug37/10_async.py new file mode 100644 index 00000000..5cbed64f --- /dev/null +++ b/test/simple_source/bug37/10_async.py @@ -0,0 +1,70 @@ +# from 3.7 test_contextlib_async.py +# Bugs were not adding "async" when a function is a decorator, +# and a misaligment when using "async with ... as". + +"""This program is self-checking!""" +import asyncio +from contextlib import asynccontextmanager, AbstractAsyncContextManager +import functools + + +def _async_test(func): + """Decorator to turn an async function into a test case.""" + + @functools.wraps(func) + def wrapper(*args, **kwargs): + coro = func(*args, **kwargs) + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + try: + return loop.run_until_complete(coro) + finally: + loop.close() + asyncio.set_event_loop(None) + + return wrapper + + +state = [] + + +@asynccontextmanager +async def woohoo(): + state.append(1) + yield 42 + state.append(999) + + +@_async_test +async def test_enter(): + class DefaultEnter(AbstractAsyncContextManager): + async def __aexit__(*args): + return + # await super().__aexit__(*args) + + manager = DefaultEnter() + got_manager = await manager.__aenter__() + # print(got_manager, manager) + assert got_manager is manager + + async with manager as context: + async with woohoo() as x: + x = 1 + y = 2 + assert manager is context + + +# From 3.7.6 test_coroutines.py +# Bug was different form of code for "async with" below +class CoroutineTest: + def test_with_8(self): + CNT = 0 + + async def foo(): + nonlocal CNT + async with CM(): + CNT += 1 + return + + +test_enter()