summaryrefslogtreecommitdiff
path: root/tests/basics/async_with_break.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics/async_with_break.py')
-rw-r--r--tests/basics/async_with_break.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/basics/async_with_break.py b/tests/basics/async_with_break.py
new file mode 100644
index 000000000..39bcbccb0
--- /dev/null
+++ b/tests/basics/async_with_break.py
@@ -0,0 +1,59 @@
+# test async with, escaped by a break
+
+class AContext:
+ async def __aenter__(self):
+ print('enter')
+ return 1
+ async def __aexit__(self, exc_type, exc, tb):
+ print('exit', exc_type, exc)
+
+async def f1():
+ while 1:
+ async with AContext():
+ print('body')
+ break
+ print('no 1')
+ print('no 2')
+
+o = f1()
+try:
+ print(o.send(None))
+except StopIteration:
+ print('finished')
+
+async def f2():
+ while 1:
+ try:
+ async with AContext():
+ print('body')
+ break
+ print('no 1')
+ finally:
+ print('finally')
+ print('no 2')
+
+o = f2()
+try:
+ print(o.send(None))
+except StopIteration:
+ print('finished')
+
+async def f3():
+ while 1:
+ try:
+ try:
+ async with AContext():
+ print('body')
+ break
+ print('no 1')
+ finally:
+ print('finally inner')
+ finally:
+ print('finally outer')
+ print('no 2')
+
+o = f3()
+try:
+ print(o.send(None))
+except StopIteration:
+ print('finished')