Skip to content

Commit c762733

Browse files
authored
Merge pull request #13 from ybilopolov/master
init reactor greenlet earlier
2 parents 8081f06 + 2eb93a0 commit c762733

File tree

2 files changed

+86
-63
lines changed

2 files changed

+86
-63
lines changed

pytest_twisted.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,7 @@ def inlineCallbacks(fun, *args, **kw):
3333

3434

3535
def pytest_namespace():
36-
return dict(
37-
inlineCallbacks=inlineCallbacks,
38-
blockon=blockon,
39-
init_twisted_greenlet=init_twisted_greenlet
40-
)
36+
return dict(inlineCallbacks=inlineCallbacks, blockon=blockon)
4137

4238

4339
def init_twisted_greenlet():
@@ -54,10 +50,14 @@ def stop_twisted_greenlet():
5450
gr_twisted.switch()
5551

5652

53+
def pytest_addhooks(pluginmanager):
54+
init_twisted_greenlet()
55+
56+
5757
@pytest.fixture(scope="session", autouse=True)
5858
def twisted_greenlet(request):
5959
request.addfinalizer(stop_twisted_greenlet)
60-
return init_twisted_greenlet()
60+
return gr_twisted
6161

6262

6363
def _pytest_pyfunc_call(pyfuncitem):

testing/test_basic.py

Lines changed: 80 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -5,77 +5,77 @@
55

66
def test_fail_later(testdir):
77
testdir.makepyfile("""
8-
from twisted.internet import reactor, defer
9-
10-
def test_fail():
11-
def doit():
12-
try:
13-
1 / 0
14-
except:
15-
d.errback()
16-
17-
d = defer.Deferred()
18-
reactor.callLater(0.01, doit)
19-
return d
20-
""")
8+
from twisted.internet import reactor, defer
9+
10+
def test_fail():
11+
def doit():
12+
try:
13+
1 / 0
14+
except:
15+
d.errback()
16+
17+
d = defer.Deferred()
18+
reactor.callLater(0.01, doit)
19+
return d
20+
""")
2121
rr = testdir.run(sys.executable, "-m", "pytest")
2222
outcomes = rr.parseoutcomes()
2323
assert outcomes.get("failed") == 1
2424

2525

2626
def test_succeed_later(testdir):
2727
testdir.makepyfile("""
28-
from twisted.internet import reactor, defer
29-
30-
def test_succeed():
31-
d = defer.Deferred()
32-
reactor.callLater(0.01, d.callback, 1)
33-
return d
34-
""")
28+
from twisted.internet import reactor, defer
29+
30+
def test_succeed():
31+
d = defer.Deferred()
32+
reactor.callLater(0.01, d.callback, 1)
33+
return d
34+
""")
3535
rr = testdir.run(sys.executable, "-m", "pytest")
3636
outcomes = rr.parseoutcomes()
3737
assert outcomes.get("passed") == 1
3838

3939

4040
def test_non_deferred(testdir):
4141
testdir.makepyfile("""
42-
from twisted.internet import reactor, defer
43-
44-
def test_succeed():
45-
return 42
46-
""")
42+
from twisted.internet import reactor, defer
43+
44+
def test_succeed():
45+
return 42
46+
""")
4747
rr = testdir.run(sys.executable, "-m", "pytest")
4848
outcomes = rr.parseoutcomes()
4949
assert outcomes.get("passed") == 1
5050

5151

5252
def test_exception(testdir):
5353
testdir.makepyfile("""
54-
def test_more_fail():
55-
raise RuntimeError("foo")
56-
""")
54+
def test_more_fail():
55+
raise RuntimeError("foo")
56+
""")
5757
rr = testdir.run(sys.executable, "-m", "pytest")
5858
outcomes = rr.parseoutcomes()
5959
assert outcomes.get("failed") == 1
6060

6161

6262
def test_inlineCallbacks(testdir):
6363
testdir.makepyfile("""
64-
from twisted.internet import reactor, defer
65-
import pytest
66-
67-
@pytest.fixture(scope="module",
68-
params=["fs", "imap", "web"])
69-
def foo(request):
70-
return request.param
71-
72-
73-
@pytest.inlineCallbacks
74-
def test_succeed(foo):
75-
yield defer.succeed(foo)
76-
if foo == "web":
77-
raise RuntimeError("baz")
78-
""")
64+
from twisted.internet import reactor, defer
65+
import pytest
66+
67+
@pytest.fixture(scope="module",
68+
params=["fs", "imap", "web"])
69+
def foo(request):
70+
return request.param
71+
72+
73+
@pytest.inlineCallbacks
74+
def test_succeed(foo):
75+
yield defer.succeed(foo)
76+
if foo == "web":
77+
raise RuntimeError("baz")
78+
""")
7979
rr = testdir.run(sys.executable, "-m", "pytest", "-v")
8080
outcomes = rr.parseoutcomes()
8181
assert outcomes.get("passed") == 2
@@ -84,22 +84,45 @@ def test_succeed(foo):
8484

8585
def test_twisted_greenlet(testdir):
8686
testdir.makepyfile("""
87-
import pytest, greenlet
88-
89-
MAIN = None
90-
91-
92-
@pytest.fixture(scope="session", autouse=True)
93-
def set_MAIN(request, twisted_greenlet):
94-
global MAIN
95-
MAIN = twisted_greenlet
96-
87+
import pytest, greenlet
88+
89+
MAIN = None
90+
91+
92+
@pytest.fixture(scope="session", autouse=True)
93+
def set_MAIN(request, twisted_greenlet):
94+
global MAIN
95+
MAIN = twisted_greenlet
96+
97+
98+
def test_MAIN():
99+
assert MAIN is not None
100+
assert MAIN is greenlet.getcurrent()
101+
102+
""")
103+
rr = testdir.run(sys.executable, "-m", "pytest", "-v")
104+
outcomes = rr.parseoutcomes()
105+
assert outcomes.get("passed") == 1
97106

98-
def test_MAIN():
99-
assert MAIN is not None
100-
assert MAIN is greenlet.getcurrent()
101107

102-
""")
108+
def test_blocon_in_hook(testdir):
109+
testdir.makeconftest("""
110+
import pytest
111+
from twisted.internet import reactor, defer
112+
113+
def pytest_configure(config):
114+
d = defer.Deferred()
115+
reactor.callLater(0.01, d.callback, 1)
116+
pytest.blockon(d)
117+
""")
118+
testdir.makepyfile("""
119+
from twisted.internet import reactor, defer
120+
121+
def test_succeed():
122+
d = defer.Deferred()
123+
reactor.callLater(0.01, d.callback, 1)
124+
return d
125+
""")
103126
rr = testdir.run(sys.executable, "-m", "pytest", "-v")
104127
outcomes = rr.parseoutcomes()
105128
assert outcomes.get("passed") == 1

0 commit comments

Comments
 (0)