Skip to content

Commit c08c98a

Browse files
committed
Merge branch 'master' into 35-altendky-tidy_async_await_fixtures
2 parents cb6d4a3 + 681fa3d commit c08c98a

File tree

3 files changed

+68
-2
lines changed

3 files changed

+68
-2
lines changed

README.rst

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ is to ``import pytest_twisted as pt``.
5151

5252

5353
inlineCallbacks
54-
=================
54+
===============
5555
Using ``twisted.internet.defer.inlineCallbacks`` as a decorator for test
5656
functions, which take funcargs, does not work. Please use
5757
``pytest_twisted.inlineCallbacks`` instead::
@@ -61,6 +61,19 @@ functions, which take funcargs, does not work. Please use
6161
res = yield threads.deferToThread(os.listdir, tmpdir.strpath)
6262
assert res == []
6363

64+
65+
ensureDeferred
66+
==============
67+
Using ``twisted.internet.defer.ensureDeferred`` as a decorator for test
68+
functions, which take funcargs, does not work. Please use
69+
``pytest_twisted.ensureDeferred`` instead::
70+
71+
@pytest_twisted.ensureDeferred
72+
async def test_some_stuff(tmpdir):
73+
res = await threads.deferToThread(os.listdir, tmpdir.strpath)
74+
assert res == []
75+
76+
6477
Waiting for deferreds in fixtures
6578
=================================
6679
``pytest_twisted.blockon`` allows fixtures to wait for deferreds::

pytest_twisted.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ def inlineCallbacks(fun, *args, **kw):
6262
return defer.inlineCallbacks(fun)(*args, **kw)
6363

6464

65+
@decorator.decorator
66+
def ensureDeferred(fun, *args, **kw):
67+
return defer.ensureDeferred(fun(*args, **kw))
68+
69+
6570
def init_twisted_greenlet():
6671
if _instances.reactor is None or _instances.gr_twisted:
6772
return

testing/test_basic.py

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def skip_if_reactor_not(request, expected_reactor):
4747
def skip_if_no_async_await():
4848
return pytest.mark.skipif(
4949
not ASYNC_AWAIT,
50-
reason="async/await syntax not support on Python <3.5",
50+
reason="async/await syntax not supported on Python <3.5",
5151
)
5252

5353

@@ -149,6 +149,28 @@ def test_succeed(foo):
149149
assert_outcomes(rr, {"passed": 2, "failed": 1})
150150

151151

152+
@skip_if_no_async_await()
153+
def test_async_await(testdir, cmd_opts):
154+
test_file = """
155+
from twisted.internet import reactor, defer
156+
import pytest
157+
import pytest_twisted
158+
159+
@pytest.fixture(scope="module", params=["fs", "imap", "web"])
160+
def foo(request):
161+
return request.param
162+
163+
@pytest_twisted.ensureDeferred
164+
async def test_succeed(foo):
165+
await defer.succeed(foo)
166+
if foo == "web":
167+
raise RuntimeError("baz")
168+
"""
169+
testdir.makepyfile(test_file)
170+
rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts)
171+
assert_outcomes(rr, {"passed": 2, "failed": 1})
172+
173+
152174
def test_twisted_greenlet(testdir, cmd_opts):
153175
test_file = """
154176
import pytest, greenlet
@@ -194,6 +216,32 @@ def test_succeed(foo):
194216
assert_outcomes(rr, {"passed": 2, "failed": 1})
195217

196218

219+
@skip_if_no_async_await()
220+
def test_blockon_in_fixture_async(testdir, cmd_opts):
221+
test_file = """
222+
from twisted.internet import reactor, defer
223+
import pytest
224+
import pytest_twisted
225+
226+
@pytest.fixture(scope="module", params=["fs", "imap", "web"])
227+
def foo(request):
228+
d1, d2 = defer.Deferred(), defer.Deferred()
229+
reactor.callLater(0.01, d1.callback, 1)
230+
reactor.callLater(0.02, d2.callback, request.param)
231+
pytest_twisted.blockon(d1)
232+
return d2
233+
234+
@pytest_twisted.ensureDeferred
235+
async def test_succeed(foo):
236+
x = await foo
237+
if x == "web":
238+
raise RuntimeError("baz")
239+
"""
240+
testdir.makepyfile(test_file)
241+
rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts)
242+
assert_outcomes(rr, {"passed": 2, "failed": 1})
243+
244+
197245
@skip_if_no_async_await()
198246
def test_async_fixture(testdir, cmd_opts):
199247
test_file = """

0 commit comments

Comments
 (0)