@@ -37,6 +37,13 @@ def skip_if_reactor_not(expected_reactor):
37
37
)
38
38
39
39
40
+ def skip_if_no_async_await ():
41
+ return pytest .mark .skipif (
42
+ sys .version_info < (3 , 5 ),
43
+ reason = "async/await syntax not support on Python <3.5" ,
44
+ )
45
+
46
+
40
47
@pytest .fixture
41
48
def cmd_opts (request ):
42
49
reactor = request .config .getoption ("reactor" , "default" )
@@ -120,6 +127,28 @@ def test_succeed(foo):
120
127
assert_outcomes (rr , {"passed" : 2 , "failed" : 1 })
121
128
122
129
130
+ @skip_if_no_async_await ()
131
+ def test_async_callbacks (testdir , cmd_opts ):
132
+ test_file = """
133
+ from twisted.internet import reactor, defer
134
+ import pytest
135
+ import pytest_twisted
136
+
137
+ @pytest.fixture(scope="module", params=["fs", "imap", "web"])
138
+ def foo(request):
139
+ return request.param
140
+
141
+ @pytest_twisted.async_callbacks
142
+ async def test_succeed(foo):
143
+ await defer.succeed(foo)
144
+ if foo == "web":
145
+ raise RuntimeError("baz")
146
+ """
147
+ testdir .makepyfile (test_file )
148
+ rr = testdir .run (sys .executable , "-m" , "pytest" , "-v" , * cmd_opts )
149
+ assert_outcomes (rr , {"passed" : 2 , "failed" : 1 })
150
+
151
+
123
152
def test_twisted_greenlet (testdir , cmd_opts ):
124
153
test_file = """
125
154
import pytest, greenlet
@@ -165,6 +194,32 @@ def test_succeed(foo):
165
194
assert_outcomes (rr , {"passed" : 2 , "failed" : 1 })
166
195
167
196
197
+ @skip_if_no_async_await ()
198
+ def test_blockon_in_fixture_async (testdir , cmd_opts ):
199
+ test_file = """
200
+ from twisted.internet import reactor, defer
201
+ import pytest
202
+ import pytest_twisted
203
+
204
+ @pytest.fixture(scope="module", params=["fs", "imap", "web"])
205
+ def foo(request):
206
+ d1, d2 = defer.Deferred(), defer.Deferred()
207
+ reactor.callLater(0.01, d1.callback, 1)
208
+ reactor.callLater(0.02, d2.callback, request.param)
209
+ pytest_twisted.blockon(d1)
210
+ return d2
211
+
212
+ @pytest_twisted.async_callbacks
213
+ async def test_succeed(foo):
214
+ x = await foo
215
+ if x == "web":
216
+ raise RuntimeError("baz")
217
+ """
218
+ testdir .makepyfile (test_file )
219
+ rr = testdir .run (sys .executable , "-m" , "pytest" , "-v" , * cmd_opts )
220
+ assert_outcomes (rr , {"passed" : 2 , "failed" : 1 })
221
+
222
+
168
223
@skip_if_reactor_not ("default" )
169
224
def test_blockon_in_hook (testdir , cmd_opts ):
170
225
conftest_file = """
0 commit comments