summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_generators.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_generators.py')
-rw-r--r--Lib/test/test_generators.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
index 7956bdd..7eac9d0 100644
--- a/Lib/test/test_generators.py
+++ b/Lib/test/test_generators.py
@@ -9,6 +9,35 @@ import inspect
from test import support
+_testcapi = support.import_module('_testcapi')
+
+
+# This tests to make sure that if a SIGINT arrives just before we send into a
+# yield from chain, the KeyboardInterrupt is raised in the innermost
+# generator (see bpo-30039).
+class SignalAndYieldFromTest(unittest.TestCase):
+
+ def generator1(self):
+ return (yield from self.generator2())
+
+ def generator2(self):
+ try:
+ yield
+ except KeyboardInterrupt:
+ return "PASSED"
+ else:
+ return "FAILED"
+
+ def test_raise_and_yield_from(self):
+ gen = self.generator1()
+ gen.send(None)
+ try:
+ _testcapi.raise_SIGINT_then_send_None(gen)
+ except BaseException as _exc:
+ exc = _exc
+ self.assertIs(type(exc), StopIteration)
+ self.assertEqual(exc.value, "PASSED")
+
class FinalizationTest(unittest.TestCase):