| # async test cases (compile and run) |
| |
| [case testAsync] |
| import asyncio |
| |
| async def h() -> int: |
| return 1 |
| |
| async def g() -> int: |
| await asyncio.sleep(0) |
| return await h() |
| |
| async def f() -> int: |
| return await g() |
| |
| [file asyncio/__init__.pyi] |
| async def sleep(t: float) -> None: ... |
| |
| [typing fixtures/typing-full.pyi] |
| |
| [file driver.py] |
| from native import f |
| import asyncio |
| |
| result = asyncio.run(f()) |
| assert result == 1 |
| |
| [case testAsyncWith] |
| from testutil import async_val |
| |
| class async_ctx: |
| async def __aenter__(self) -> str: |
| await async_val("enter") |
| return "test" |
| |
| async def __aexit__(self, x, y, z) -> None: |
| await async_val("exit") |
| |
| |
| async def async_with() -> str: |
| async with async_ctx() as x: |
| return await async_val("body") |
| |
| |
| [file driver.py] |
| from native import async_with |
| from testutil import run_generator |
| |
| yields, val = run_generator(async_with(), [None, 'x', None]) |
| assert yields == ('enter', 'body', 'exit'), yields |
| assert val == 'x', val |
| |
| |
| [case testAsyncReturn] |
| from testutil import async_val |
| |
| async def async_return() -> str: |
| try: |
| return 'test' |
| finally: |
| await async_val('foo') |
| |
| [file driver.py] |
| from native import async_return |
| from testutil import run_generator |
| |
| yields, val = run_generator(async_return()) |
| assert yields == ('foo',) |
| assert val == 'test', val |
| |
| |
| [case testAsyncFor] |
| from typing import AsyncIterable, List, Set, Dict |
| |
| async def async_iter(xs: AsyncIterable[int]) -> List[int]: |
| ys = [] |
| async for x in xs: |
| ys.append(x) |
| return ys |
| |
| async def async_comp(xs: AsyncIterable[int]) -> List[int]: |
| ys = [x async for x in xs] |
| return ys |
| |
| async def async_comp_set(xs: AsyncIterable[int]) -> Set[int]: |
| return {x async for x in xs} |
| |
| async def async_comp_dict(xs: AsyncIterable[int]) -> Dict[int, str]: |
| return {x: str(x) async for x in xs} |
| |
| [typing fixtures/typing-full.pyi] |
| |
| [file driver.py] |
| from native import async_iter, async_comp, async_comp_set, async_comp_dict |
| from testutil import run_generator, async_val |
| from typing import AsyncIterable, List |
| |
| # defined here since we couldn't do it inside the test yet... |
| async def foo() -> AsyncIterable[int]: |
| for x in range(3): |
| await async_val(x) |
| yield x |
| |
| yields, val = run_generator(async_iter(foo())) |
| assert val == [0,1,2], val |
| assert yields == (0,1,2), yields |
| |
| yields, val = run_generator(async_comp(foo())) |
| assert val == [0,1,2], val |
| assert yields == (0,1,2), yields |
| |
| yields, val = run_generator(async_comp_set(foo())) |
| assert val == {0,1,2}, val |
| assert yields == (0,1,2), yields |
| |
| yields, val = run_generator(async_comp_dict(foo())) |
| assert val == {0: '0',1: '1', 2: '2'}, val |
| assert yields == (0,1,2), yields |
| |
| [case testAsyncFor2] |
| from typing import AsyncIterable, List |
| |
| async def async_iter(xs: AsyncIterable[int]) -> List[int]: |
| ys = [] |
| async for x in xs: |
| ys.append(x) |
| return ys |
| |
| [typing fixtures/typing-full.pyi] |
| |
| [file driver.py] |
| from native import async_iter |
| from testutil import run_generator, async_val |
| from typing import AsyncIterable, List |
| |
| # defined here since we couldn't do it inside the test yet... |
| async def foo() -> AsyncIterable[int]: |
| for x in range(3): |
| await async_val(x) |
| yield x |
| raise Exception('lol no') |
| |
| yields, val = run_generator(async_iter(foo())) |
| assert yields == (0,1,2), yields |
| assert val == 'lol no', val |