diff options
author | Yury Selivanov <yselivanov@sprymix.com> | 2015-07-03 00:23:30 -0400 |
---|---|---|
committer | Yury Selivanov <yselivanov@sprymix.com> | 2015-07-03 00:23:30 -0400 |
commit | e13f8f3cabda31742beba3dc9e5e170d7bbdbb88 (patch) | |
tree | 6a38a8202924e2cc983b91490f32c571bf07ce45 /Lib/test/test_coroutines.py | |
parent | b32b998bf7ccc8718f1f086f2e3d2658f2e5b224 (diff) | |
download | cpython-e13f8f3cabda31742beba3dc9e5e170d7bbdbb88.tar.gz cpython-e13f8f3cabda31742beba3dc9e5e170d7bbdbb88.zip |
Issue #24450: Add gi_yieldfrom to generators; cr_await to coroutines.
Patch by Benno Leslie and Yury Selivanov.
Diffstat (limited to 'Lib/test/test_coroutines.py')
-rw-r--r-- | Lib/test/test_coroutines.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py index 3413a12d6f0..9d97123b82e 100644 --- a/Lib/test/test_coroutines.py +++ b/Lib/test/test_coroutines.py @@ -350,6 +350,36 @@ class CoroutineTest(unittest.TestCase): "coroutine ignored GeneratorExit"): c.close() + def test_cr_await(self): + @types.coroutine + def a(): + self.assertEqual(inspect.getcoroutinestate(coro_b), inspect.CORO_RUNNING) + self.assertIsNone(coro_b.cr_await) + yield + self.assertEqual(inspect.getcoroutinestate(coro_b), inspect.CORO_RUNNING) + self.assertIsNone(coro_b.cr_await) + + async def c(): + await a() + + async def b(): + self.assertIsNone(coro_b.cr_await) + await c() + self.assertIsNone(coro_b.cr_await) + + coro_b = b() + self.assertEqual(inspect.getcoroutinestate(coro_b), inspect.CORO_CREATED) + self.assertIsNone(coro_b.cr_await) + + coro_b.send(None) + self.assertEqual(inspect.getcoroutinestate(coro_b), inspect.CORO_SUSPENDED) + self.assertEqual(coro_b.cr_await.cr_await.gi_code.co_name, 'a') + + with self.assertRaises(StopIteration): + coro_b.send(None) # complete coroutine + self.assertEqual(inspect.getcoroutinestate(coro_b), inspect.CORO_CLOSED) + self.assertIsNone(coro_b.cr_await) + def test_corotype_1(self): ct = types.CoroutineType self.assertIn('into coroutine', ct.send.__doc__) |