1# Test the Task.done() method
2
3try:
4    import uasyncio as asyncio
5except ImportError:
6    try:
7        import asyncio
8    except ImportError:
9        print("SKIP")
10        raise SystemExit
11
12
13async def task(t, exc=None):
14    print("task start")
15    if t >= 0:
16        await asyncio.sleep(t)
17    if exc:
18        raise exc
19    print("task done")
20
21
22async def main():
23    # Task that finishes immediately.
24    print("=" * 10)
25    t = asyncio.create_task(task(-1))
26    print(t.done())
27    await asyncio.sleep(0)
28    print(t.done())
29    await t
30    print(t.done())
31
32    # Task that starts, runs and finishes.
33    print("=" * 10)
34    t = asyncio.create_task(task(0.01))
35    print(t.done())
36    await asyncio.sleep(0)
37    print(t.done())
38    await t
39    print(t.done())
40
41    # Task that raises immediately.
42    print("=" * 10)
43    t = asyncio.create_task(task(-1, ValueError))
44    print(t.done())
45    await asyncio.sleep(0)
46    print(t.done())
47    try:
48        await t
49    except ValueError as er:
50        print(repr(er))
51    print(t.done())
52
53    # Task that raises after a delay.
54    print("=" * 10)
55    t = asyncio.create_task(task(0.01, ValueError))
56    print(t.done())
57    await asyncio.sleep(0)
58    print(t.done())
59    try:
60        await t
61    except ValueError as er:
62        print(repr(er))
63    print(t.done())
64
65
66asyncio.run(main())
67