diff options
author | Yury Selivanov <yury@magic.io> | 2017-12-19 07:18:45 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-19 07:18:45 -0500 |
commit | a9d7e552c72b6e9515e76a1dd4b247da86da23de (patch) | |
tree | e2f05acc41f3eb90bbd29377957867adff5f79c9 /Lib/test/test_asyncio/test_tasks.py | |
parent | a7bd64c0c01379e9b82e86ad41a301329a0775d9 (diff) | |
download | cpython-a9d7e552c72b6e9515e76a1dd4b247da86da23de.tar.gz cpython-a9d7e552c72b6e9515e76a1dd4b247da86da23de.zip |
bpo-32357: Optimize asyncio.iscoroutine() for non-native coroutines (#4915)
Diffstat (limited to 'Lib/test/test_asyncio/test_tasks.py')
-rw-r--r-- | Lib/test/test_asyncio/test_tasks.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py index 47206613993..f1dbb99d4fc 100644 --- a/Lib/test/test_asyncio/test_tasks.py +++ b/Lib/test/test_asyncio/test_tasks.py @@ -62,6 +62,20 @@ class Dummy: pass +class CoroLikeObject: + def send(self, v): + raise StopIteration(42) + + def throw(self, *exc): + pass + + def close(self): + pass + + def __await__(self): + return self + + class BaseTaskTests: Task = None @@ -2085,6 +2099,12 @@ class BaseTaskTests: "a coroutine was expected, got 123"): self.new_task(self.loop, 123) + # test it for the second time to ensure that caching + # in asyncio.iscoroutine() doesn't break things. + with self.assertRaisesRegex(TypeError, + "a coroutine was expected, got 123"): + self.new_task(self.loop, 123) + def test_create_task_with_oldstyle_coroutine(self): @asyncio.coroutine @@ -2095,6 +2115,12 @@ class BaseTaskTests: self.assertIsInstance(task, self.Task) self.loop.run_until_complete(task) + # test it for the second time to ensure that caching + # in asyncio.iscoroutine() doesn't break things. + task = self.new_task(self.loop, coro()) + self.assertIsInstance(task, self.Task) + self.loop.run_until_complete(task) + def test_create_task_with_async_function(self): async def coro(): @@ -2104,6 +2130,23 @@ class BaseTaskTests: self.assertIsInstance(task, self.Task) self.loop.run_until_complete(task) + # test it for the second time to ensure that caching + # in asyncio.iscoroutine() doesn't break things. + task = self.new_task(self.loop, coro()) + self.assertIsInstance(task, self.Task) + self.loop.run_until_complete(task) + + def test_create_task_with_asynclike_function(self): + task = self.new_task(self.loop, CoroLikeObject()) + self.assertIsInstance(task, self.Task) + self.assertEqual(self.loop.run_until_complete(task), 42) + + # test it for the second time to ensure that caching + # in asyncio.iscoroutine() doesn't break things. + task = self.new_task(self.loop, CoroLikeObject()) + self.assertIsInstance(task, self.Task) + self.assertEqual(self.loop.run_until_complete(task), 42) + def test_bare_create_task(self): async def inner(): |