Commit 735cc4f8 authored by Yury Selivanov's avatar Yury Selivanov

asyncio.tasks: Make sure CoroWrapper.send proxies one argument correctly

Issue #21209.
parent 7a92174a
...@@ -53,6 +53,8 @@ class CoroWrapper: ...@@ -53,6 +53,8 @@ class CoroWrapper:
# We use `*value` because of a bug in CPythons prior # We use `*value` because of a bug in CPythons prior
# to 3.4.1. See issue #21209 and test_yield_from_corowrapper # to 3.4.1. See issue #21209 and test_yield_from_corowrapper
# for details. This workaround should be removed in 3.5.0. # for details. This workaround should be removed in 3.5.0.
if len(value) == 1:
value = value[0]
return self.gen.send(value) return self.gen.send(value)
def throw(self, exc): def throw(self, exc):
......
...@@ -1410,6 +1410,24 @@ class TaskTests(unittest.TestCase): ...@@ -1410,6 +1410,24 @@ class TaskTests(unittest.TestCase):
finally: finally:
asyncio.tasks._DEBUG = old_debug 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: class GatherTestsBase:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment