summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/basics/gen_yield_from_pending.py23
-rw-r--r--tests/basics/generator_throw_nested.py33
2 files changed, 56 insertions, 0 deletions
diff --git a/tests/basics/gen_yield_from_pending.py b/tests/basics/gen_yield_from_pending.py
new file mode 100644
index 000000000..eb88ee6ca
--- /dev/null
+++ b/tests/basics/gen_yield_from_pending.py
@@ -0,0 +1,23 @@
+# Tests that the pending exception state is managed correctly
+# (previously failed on native emitter).
+
+def noop_task():
+ print('noop task')
+ yield 1
+
+def raise_task():
+ print('raise task')
+ yield 2
+ print('raising')
+ raise Exception
+
+def main():
+ try:
+ yield from raise_task()
+ except:
+ print('main exception')
+
+ yield from noop_task()
+
+for z in main():
+ print('outer iter', z)
diff --git a/tests/basics/generator_throw_nested.py b/tests/basics/generator_throw_nested.py
new file mode 100644
index 000000000..5ef166878
--- /dev/null
+++ b/tests/basics/generator_throw_nested.py
@@ -0,0 +1,33 @@
+# Tests that the correct nested exception handler is used when
+# throwing into a generator (previously failed on native emitter).
+
+def gen():
+ try:
+ yield 1
+ try:
+ yield 2
+ try:
+ yield 3
+ except Exception:
+ yield 4
+ print(0)
+ yield 5
+ except Exception:
+ yield 6
+ print(1)
+ yield 7
+ except Exception:
+ yield 8
+ print(2)
+ yield 9
+
+for i in range(1, 10):
+ g = gen()
+ try:
+ for _ in range(i):
+ print(next(g))
+ print(g.throw(ValueError))
+ except ValueError:
+ print('ValueError')
+ except StopIteration:
+ print('StopIteration')