blob: 211d5dbe2e421909f21fa731c7e1c909543680c3 [file] [log] [blame]
import time
import sys
import pytest
from hamcrest import assert_that, equal_to, calling, raises
from more_executors import Executors, AsyncioExecutor
@pytest.fixture
def asyncio():
if sys.version_info[0:2] < (3, 5):
pytest.skip("needs python >= 3.5")
import asyncio
return asyncio
def sleep_then_return(timeout, value):
time.sleep(timeout)
return value
def test_run(asyncio):
with AsyncioExecutor(Executors.thread_pool()) as executor:
f = executor.submit(sleep_then_return, 0.01, "abc")
# The result should not be available yet
assert_that(calling(f.result), raises(asyncio.InvalidStateError))
# Running in event loop should work
result = asyncio.get_event_loop().run_until_complete(f)
# It should have given the expected value, both from run_until_complete
# and f.result()
assert_that(result, equal_to("abc"))
assert_that(result, equal_to(f.result()))
def test_with_map(asyncio):
with Executors.thread_pool().with_map(lambda x: [x, x]).with_asyncio() as executor:
f = executor.submit(sleep_then_return, 0.01, "abc")
result = asyncio.get_event_loop().run_until_complete(f)
# MapExecutor should have worked, as usual
assert_that(result, equal_to(["abc", "abc"]))
assert_that(result, equal_to(f.result()))