summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_asyncgen.py
diff options
context:
space:
mode:
authorYury Selivanov <yury@magic.io>2019-09-30 05:59:11 (GMT)
committerGitHub <noreply@github.com>2019-09-30 05:59:11 (GMT)
commitfc4a044a3c54ce21e9ed150f7d769fb479d34c49 (patch)
treee1edc8803eeb30b48f333ff88cd478a4cc75a2c4 /Lib/test/test_asyncgen.py
parent6758e6e12a71ef5530146161881f88df1fa43382 (diff)
downloadcpython-fc4a044a3c54ce21e9ed150f7d769fb479d34c49.zip
cpython-fc4a044a3c54ce21e9ed150f7d769fb479d34c49.tar.gz
cpython-fc4a044a3c54ce21e9ed150f7d769fb479d34c49.tar.bz2
bpo-30773: Fix ag_running; prohibit running athrow/asend/aclose in parallel (#7468)
Diffstat (limited to 'Lib/test/test_asyncgen.py')
-rw-r--r--Lib/test/test_asyncgen.py78
1 files changed, 16 insertions, 62 deletions
diff --git a/Lib/test/test_asyncgen.py b/Lib/test/test_asyncgen.py
index 3a8d5fd..23eb6a4 100644
--- a/Lib/test/test_asyncgen.py
+++ b/Lib/test/test_asyncgen.py
@@ -133,24 +133,6 @@ class AsyncGenTest(unittest.TestCase):
break
return res
- def async_iterate(g):
- res = []
- while True:
- try:
- g.__anext__().__next__()
- except StopAsyncIteration:
- res.append('STOP')
- break
- except StopIteration as ex:
- if ex.args:
- res.append(ex.args[0])
- else:
- res.append('EMPTY StopIteration')
- break
- except Exception as ex:
- res.append(str(type(ex)))
- return res
-
sync_gen_result = sync_iterate(sync_gen)
async_gen_result = async_iterate(async_gen)
self.assertEqual(sync_gen_result, async_gen_result)
@@ -176,19 +158,22 @@ class AsyncGenTest(unittest.TestCase):
g = gen()
ai = g.__aiter__()
- self.assertEqual(ai.__anext__().__next__(), ('result',))
+
+ an = ai.__anext__()
+ self.assertEqual(an.__next__(), ('result',))
try:
- ai.__anext__().__next__()
+ an.__next__()
except StopIteration as ex:
self.assertEqual(ex.args[0], 123)
else:
self.fail('StopIteration was not raised')
- self.assertEqual(ai.__anext__().__next__(), ('result',))
+ an = ai.__anext__()
+ self.assertEqual(an.__next__(), ('result',))
try:
- ai.__anext__().__next__()
+ an.__next__()
except StopAsyncIteration as ex:
self.assertFalse(ex.args)
else:
@@ -212,10 +197,11 @@ class AsyncGenTest(unittest.TestCase):
g = gen()
ai = g.__aiter__()
- self.assertEqual(ai.__anext__().__next__(), ('result',))
+ an = ai.__anext__()
+ self.assertEqual(an.__next__(), ('result',))
try:
- ai.__anext__().__next__()
+ an.__next__()
except StopIteration as ex:
self.assertEqual(ex.args[0], 123)
else:
@@ -646,17 +632,13 @@ class AsyncGenAsyncioTest(unittest.TestCase):
gen = foo()
it = gen.__aiter__()
self.assertEqual(await it.__anext__(), 1)
- t = self.loop.create_task(it.__anext__())
- await asyncio.sleep(0.01)
await gen.aclose()
- return t
- t = self.loop.run_until_complete(run())
+ self.loop.run_until_complete(run())
self.assertEqual(DONE, 1)
# Silence ResourceWarnings
fut.cancel()
- t.cancel()
self.loop.run_until_complete(asyncio.sleep(0.01))
def test_async_gen_asyncio_gc_aclose_09(self):
@@ -1053,46 +1035,18 @@ class AsyncGenAsyncioTest(unittest.TestCase):
self.loop.run_until_complete(asyncio.sleep(0.1))
- self.loop.run_until_complete(self.loop.shutdown_asyncgens())
- self.assertEqual(finalized, 2)
-
# Silence warnings
t1.cancel()
t2.cancel()
- self.loop.run_until_complete(asyncio.sleep(0.1))
- def test_async_gen_asyncio_shutdown_02(self):
- logged = 0
-
- def logger(loop, context):
- nonlocal logged
- self.assertIn('asyncgen', context)
- expected = 'an error occurred during closing of asynchronous'
- if expected in context['message']:
- logged += 1
-
- async def waiter(timeout):
- try:
- await asyncio.sleep(timeout)
- yield 1
- finally:
- 1 / 0
-
- async def wait():
- async for _ in waiter(1):
- pass
-
- t = self.loop.create_task(wait())
- self.loop.run_until_complete(asyncio.sleep(0.1))
+ with self.assertRaises(asyncio.CancelledError):
+ self.loop.run_until_complete(t1)
+ with self.assertRaises(asyncio.CancelledError):
+ self.loop.run_until_complete(t2)
- self.loop.set_exception_handler(logger)
self.loop.run_until_complete(self.loop.shutdown_asyncgens())
- self.assertEqual(logged, 1)
-
- # Silence warnings
- t.cancel()
- self.loop.run_until_complete(asyncio.sleep(0.1))
+ self.assertEqual(finalized, 2)
def test_async_gen_expression_01(self):
async def arange(n):