(original) (raw)

changeset: 90324:2729823525fe branch: 3.4 parent: 90319:4c65f8641d89 user: Yury Selivanov yselivanov@sprymix.com date: Tue Apr 15 12:01:16 2014 -0400 files: Lib/asyncio/tasks.py Lib/test/test_asyncio/test_tasks.py description: asyncio.tasks: Make sure CoroWrapper.send proxies one argument correctly Issue #21209. diff -r 4c65f8641d89 -r 2729823525fe Lib/asyncio/tasks.py --- a/Lib/asyncio/tasks.py Tue Apr 15 13:52:21 2014 +0100 +++ b/Lib/asyncio/tasks.py Tue Apr 15 12:01:16 2014 -0400 @@ -53,6 +53,8 @@ # We use `*value` because of a bug in CPythons prior # to 3.4.1. See issue #21209 and test_yield_from_corowrapper # for details. This workaround should be removed in 3.5.0. + if len(value) == 1: + value = value[0] return self.gen.send(value) def throw(self, exc): diff -r 4c65f8641d89 -r 2729823525fe Lib/test/test_asyncio/test_tasks.py --- a/Lib/test/test_asyncio/test_tasks.py Tue Apr 15 13:52:21 2014 +0100 +++ b/Lib/test/test_asyncio/test_tasks.py Tue Apr 15 12:01:16 2014 -0400 @@ -1410,6 +1410,24 @@ finally: asyncio.tasks._DEBUG = old_debug + def test_yield_from_corowrapper_send(self): + def foo(): + a = yield + return a + + def call(arg): + cw = asyncio.tasks.CoroWrapper(foo(), foo) + cw.send(None) + try: + cw.send(arg) + except StopIteration as ex: + return ex.args[0] + else: + raise AssertionError('StopIteration was expected') + + self.assertEqual(call((1, 2)), (1, 2)) + self.assertEqual(call('spam'), 'spam') + class GatherTestsBase: /yselivanov@sprymix.com