33[case testRunAsyncBasics]
44import asyncio
55
6+ from testutil import assertRaises
7+ 
68async def h() -> int:
79    return 1
810
@@ -19,14 +21,57 @@ async def f2() -> int:
1921        x += i + await f() + await g()
2022    return x
2123
22- def test_1 () -> None:
24+ def test_simple_call () -> None:
2325    result = asyncio.run(f())
2426    assert result == 3
2527
26- def test_2 () -> None:
28+ def test_multiple_awaits_in_expression () -> None:
2729    result = asyncio.run(f2())
2830    assert result == 9
2931
32+ class MyError(Exception):
33+     pass
34+ 
35+ async def exc1() -> None:
36+     await asyncio.sleep(0)
37+     raise MyError()
38+ 
39+ async def exc2() -> None:
40+     await asyncio.sleep(0)
41+     raise MyError()
42+ 
43+ async def exc3() -> None:
44+     await exc1()
45+ 
46+ async def exc4() -> None:
47+     await exc2()
48+ 
49+ async def exc5() -> int:
50+     try:
51+         await exc1()
52+     except MyError:
53+         return 3
54+     return 4
55+ 
56+ async def exc6() -> int:
57+     try:
58+         await exc4()
59+     except MyError:
60+         return 3
61+     return 4
62+ 
63+ def test_exception() -> None:
64+     with assertRaises(MyError):
65+         asyncio.run(exc1())
66+     with assertRaises(MyError):
67+         asyncio.run(exc2())
68+     with assertRaises(MyError):
69+         asyncio.run(exc3())
70+     with assertRaises(MyError):
71+         asyncio.run(exc4())
72+     assert asyncio.run(exc5()) == 3
73+     assert asyncio.run(exc6()) == 3
74+ 
3075[file asyncio/__init__.pyi]
3176async def sleep(t: float) -> None: ...
3277# eh, we could use the real type but it doesn't seem important
@@ -261,3 +306,33 @@ async def x() -> None:
261306import asyncio
262307import native
263308asyncio.run(native.x())
309+ 
310+ [case testRunAsyncSpecialCases]
311+ import asyncio
312+ 
313+ async def t() -> tuple[int, str, str]:
314+     return (1, "x", "y")
315+ 
316+ async def f() -> tuple[int, str, str]:
317+     return await t()
318+ 
319+ def test_tuple_return() -> None:
320+     result = asyncio.run(f())
321+     assert result == (1, "x", "y")
322+ 
323+ async def e() -> ValueError:
324+     return ValueError("foo")
325+ 
326+ async def g() -> ValueError:
327+     return await e()
328+ 
329+ def test_exception_return() -> None:
330+     result = asyncio.run(g())
331+     assert isinstance(result, ValueError)
332+ 
333+ [file asyncio/__init__.pyi]
334+ async def sleep(t: float) -> None: ...
335+ # eh, we could use the real type but it doesn't seem important
336+ def run(x: object) -> object: ...
337+ 
338+ [typing fixtures/typing-full.pyi]
0 commit comments