mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #28721: Fix asynchronous generators aclose() and athrow()
This commit is contained in:
parent
a83a6a3275
commit
41782e4970
3 changed files with 154 additions and 3 deletions
|
@ -450,6 +450,41 @@ class AsyncGenAsyncioTest(unittest.TestCase):
|
|||
|
||||
self.loop.run_until_complete(run())
|
||||
|
||||
def test_async_gen_asyncio_anext_06(self):
|
||||
DONE = 0
|
||||
|
||||
# test synchronous generators
|
||||
def foo():
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
pass
|
||||
g = foo()
|
||||
g.send(None)
|
||||
with self.assertRaises(StopIteration):
|
||||
g.send(None)
|
||||
|
||||
# now with asynchronous generators
|
||||
|
||||
async def gen():
|
||||
nonlocal DONE
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
pass
|
||||
DONE = 1
|
||||
|
||||
async def run():
|
||||
nonlocal DONE
|
||||
g = gen()
|
||||
await g.asend(None)
|
||||
with self.assertRaises(StopAsyncIteration):
|
||||
await g.asend(None)
|
||||
DONE += 10
|
||||
|
||||
self.loop.run_until_complete(run())
|
||||
self.assertEqual(DONE, 11)
|
||||
|
||||
def test_async_gen_asyncio_anext_tuple(self):
|
||||
async def foo():
|
||||
try:
|
||||
|
@ -594,6 +629,76 @@ class AsyncGenAsyncioTest(unittest.TestCase):
|
|||
self.loop.run_until_complete(run())
|
||||
self.assertEqual(DONE, 1)
|
||||
|
||||
def test_async_gen_asyncio_aclose_10(self):
|
||||
DONE = 0
|
||||
|
||||
# test synchronous generators
|
||||
def foo():
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
pass
|
||||
g = foo()
|
||||
g.send(None)
|
||||
g.close()
|
||||
|
||||
# now with asynchronous generators
|
||||
|
||||
async def gen():
|
||||
nonlocal DONE
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
pass
|
||||
DONE = 1
|
||||
|
||||
async def run():
|
||||
nonlocal DONE
|
||||
g = gen()
|
||||
await g.asend(None)
|
||||
await g.aclose()
|
||||
DONE += 10
|
||||
|
||||
self.loop.run_until_complete(run())
|
||||
self.assertEqual(DONE, 11)
|
||||
|
||||
def test_async_gen_asyncio_aclose_11(self):
|
||||
DONE = 0
|
||||
|
||||
# test synchronous generators
|
||||
def foo():
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
pass
|
||||
yield
|
||||
g = foo()
|
||||
g.send(None)
|
||||
with self.assertRaisesRegex(RuntimeError, 'ignored GeneratorExit'):
|
||||
g.close()
|
||||
|
||||
# now with asynchronous generators
|
||||
|
||||
async def gen():
|
||||
nonlocal DONE
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
pass
|
||||
yield
|
||||
DONE += 1
|
||||
|
||||
async def run():
|
||||
nonlocal DONE
|
||||
g = gen()
|
||||
await g.asend(None)
|
||||
with self.assertRaisesRegex(RuntimeError, 'ignored GeneratorExit'):
|
||||
await g.aclose()
|
||||
DONE += 10
|
||||
|
||||
self.loop.run_until_complete(run())
|
||||
self.assertEqual(DONE, 10)
|
||||
|
||||
def test_async_gen_asyncio_asend_01(self):
|
||||
DONE = 0
|
||||
|
||||
|
@ -801,6 +906,41 @@ class AsyncGenAsyncioTest(unittest.TestCase):
|
|||
self.loop.run_until_complete(run())
|
||||
self.assertEqual(DONE, 1)
|
||||
|
||||
def test_async_gen_asyncio_athrow_03(self):
|
||||
DONE = 0
|
||||
|
||||
# test synchronous generators
|
||||
def foo():
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
pass
|
||||
g = foo()
|
||||
g.send(None)
|
||||
with self.assertRaises(StopIteration):
|
||||
g.throw(ValueError)
|
||||
|
||||
# now with asynchronous generators
|
||||
|
||||
async def gen():
|
||||
nonlocal DONE
|
||||
try:
|
||||
yield
|
||||
except:
|
||||
pass
|
||||
DONE = 1
|
||||
|
||||
async def run():
|
||||
nonlocal DONE
|
||||
g = gen()
|
||||
await g.asend(None)
|
||||
with self.assertRaises(StopAsyncIteration):
|
||||
await g.athrow(ValueError)
|
||||
DONE += 10
|
||||
|
||||
self.loop.run_until_complete(run())
|
||||
self.assertEqual(DONE, 11)
|
||||
|
||||
def test_async_gen_asyncio_athrow_tuple(self):
|
||||
async def gen():
|
||||
try:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue