add test_asyncio.py
This commit is contained in:
141
tests/test_asyncio.py
Normal file
141
tests/test_asyncio.py
Normal file
@@ -0,0 +1,141 @@
|
||||
from trollius import test_utils
|
||||
from trollius import From, Return
|
||||
import trollius
|
||||
import trollius.coroutines
|
||||
import unittest
|
||||
|
||||
try:
|
||||
import asyncio
|
||||
except ImportError:
|
||||
from trollius.test_utils import SkipTest
|
||||
raise SkipTest('need asyncio')
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def asyncio_noop(value):
|
||||
yield from []
|
||||
return (value,)
|
||||
|
||||
@asyncio.coroutine
|
||||
def asyncio_coroutine(coro, value):
|
||||
res = yield from coro
|
||||
return res + (value,)
|
||||
|
||||
@trollius.coroutine
|
||||
def trollius_noop(value):
|
||||
yield From(None)
|
||||
raise Return((value,))
|
||||
|
||||
@trollius.coroutine
|
||||
def trollius_coroutine(coro, value):
|
||||
res = yield trollius.From(coro)
|
||||
raise trollius.Return(res + (value,))
|
||||
|
||||
|
||||
class AsyncioTests(test_utils.TestCase):
|
||||
def setUp(self):
|
||||
policy = trollius.get_event_loop_policy()
|
||||
|
||||
asyncio.set_event_loop_policy(policy)
|
||||
self.addCleanup(asyncio.set_event_loop_policy, None)
|
||||
|
||||
self.loop = policy.new_event_loop()
|
||||
self.addCleanup(self.loop.close)
|
||||
policy.set_event_loop(self.loop)
|
||||
|
||||
def test_policy(self):
|
||||
self.assertIs(asyncio.get_event_loop(), self.loop)
|
||||
|
||||
def test_asyncio(self):
|
||||
coro = asyncio_noop("asyncio")
|
||||
res = self.loop.run_until_complete(coro)
|
||||
self.assertEqual(res, ("asyncio",))
|
||||
|
||||
def test_asyncio_in_trollius(self):
|
||||
coro1 = asyncio_noop(1)
|
||||
coro2 = asyncio_coroutine(coro1, 2)
|
||||
res = self.loop.run_until_complete(trollius_coroutine(coro2, 3))
|
||||
self.assertEqual(res, (1, 2, 3))
|
||||
|
||||
def test_trollius_in_asyncio(self):
|
||||
coro1 = trollius_noop(4)
|
||||
coro2 = trollius_coroutine(coro1, 5)
|
||||
res = self.loop.run_until_complete(asyncio_coroutine(coro2, 6))
|
||||
self.assertEqual(res, (4, 5, 6))
|
||||
|
||||
def test_step_future(self):
|
||||
old_debug = trollius.coroutines._DEBUG
|
||||
try:
|
||||
def step_future():
|
||||
future = asyncio.Future()
|
||||
self.loop.call_soon(future.set_result, "asyncio.Future")
|
||||
return (yield from future)
|
||||
|
||||
# test in release mode
|
||||
trollius.coroutines._DEBUG = False
|
||||
result = self.loop.run_until_complete(step_future())
|
||||
self.assertEqual(result, "asyncio.Future")
|
||||
|
||||
# test in debug mode
|
||||
trollius.coroutines._DEBUG = True
|
||||
result = self.loop.run_until_complete(step_future())
|
||||
self.assertEqual(result, "asyncio.Future")
|
||||
finally:
|
||||
trollius.coroutines._DEBUG = old_debug
|
||||
|
||||
def test_async(self):
|
||||
fut = asyncio.Future()
|
||||
self.assertIs(fut._loop, self.loop)
|
||||
|
||||
fut2 = trollius.async(fut)
|
||||
self.assertIs(fut2, fut)
|
||||
self.assertIs(fut._loop, self.loop)
|
||||
|
||||
def test_wrap_future(self):
|
||||
fut = asyncio.Future()
|
||||
self.assertIs(trollius.wrap_future(fut), fut)
|
||||
|
||||
def test_run_until_complete(self):
|
||||
fut = asyncio.Future()
|
||||
fut.set_result("ok")
|
||||
self.assertEqual(self.loop.run_until_complete(fut),
|
||||
"ok")
|
||||
|
||||
def test_coroutine_decorator(self):
|
||||
@trollius.coroutine
|
||||
def asyncio_future(fut):
|
||||
return fut
|
||||
|
||||
fut = asyncio.Future()
|
||||
self.loop.call_soon(fut.set_result, 'ok')
|
||||
res = self.loop.run_until_complete(asyncio_future(fut))
|
||||
self.assertEqual(res, "ok")
|
||||
|
||||
def test_as_completed(self):
|
||||
fut = asyncio.Future()
|
||||
fut.set_result("ok")
|
||||
|
||||
with self.assertRaises(TypeError):
|
||||
for f in trollius.as_completed(fut):
|
||||
pass
|
||||
|
||||
@trollius.coroutine
|
||||
def get_results(fut):
|
||||
results = []
|
||||
for f in trollius.as_completed([fut]):
|
||||
res = yield trollius.From(f)
|
||||
results.append(res)
|
||||
raise trollius.Return(results)
|
||||
|
||||
results = self.loop.run_until_complete(get_results(fut))
|
||||
self.assertEqual(results, ["ok"])
|
||||
|
||||
def test_gather(self):
|
||||
fut = asyncio.Future()
|
||||
fut.set_result("ok")
|
||||
results = self.loop.run_until_complete(trollius.gather(fut))
|
||||
self.assertEqual(results, ["ok"])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user