diff --git a/testing/test_basic.py b/testing/test_basic.py index 9afbc4c..2b1decd 100755 --- a/testing/test_basic.py +++ b/testing/test_basic.py @@ -494,6 +494,158 @@ def test_second(foo): assert_outcomes(rr, {"passed": 2}) +@skip_if_no_async_await() +def test_async_simple_fixture_in_fixture(testdir, cmd_opts): + test_file = """ + import itertools + from twisted.internet import reactor, defer + import pytest + import pytest_twisted + + @pytest_twisted.async_fixture(name='four') + async def fixture_four(): + return 4 + + @pytest_twisted.async_fixture(name='doublefour') + async def fixture_doublefour(four): + return 2 * four + + @pytest_twisted.ensureDeferred + async def test_four(four): + assert four == 4 + + @pytest_twisted.ensureDeferred + async def test_doublefour(doublefour): + assert doublefour == 8 + """ + testdir.makepyfile(test_file) + rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts) + assert_outcomes(rr, {"passed": 2}) + + +@skip_if_no_async_generators() +def test_async_yield_simple_fixture_in_fixture(testdir, cmd_opts): + test_file = """ + import itertools + from twisted.internet import reactor, defer + import pytest + import pytest_twisted + + @pytest_twisted.async_yield_fixture(name='four') + async def fixture_four(): + yield 4 + + @pytest_twisted.async_yield_fixture(name='doublefour') + async def fixture_doublefour(four): + yield 2 * four + + @pytest_twisted.ensureDeferred + async def test_four(four): + assert four == 4 + + @pytest_twisted.ensureDeferred + async def test_doublefour(doublefour): + assert doublefour == 8 + """ + testdir.makepyfile(test_file) + rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts) + assert_outcomes(rr, {"passed": 2}) + + +@skip_if_no_async_await() +@pytest.mark.parametrize('innerasync', [ + pytest.param(truth, id='innerasync={}'.format(truth)) + for truth in [True, False] +]) +def test_async_fixture_in_fixture(testdir, cmd_opts, innerasync): + maybe_async = 'async ' if innerasync else '' + maybe_await = 'await ' if innerasync else '' + test_file = """ + import itertools + from twisted.internet import reactor, defer + import pytest + import pytest_twisted + + @pytest_twisted.async_fixture(name='increment') + async def fixture_increment(): + counts = itertools.count() + {maybe_async}def increment(): + return next(counts) + + return increment + + @pytest_twisted.async_fixture(name='doubleincrement') + async def fixture_doubleincrement(increment): + {maybe_async}def doubleincrement(): + n = {maybe_await}increment() + return n * 2 + + return doubleincrement + + @pytest_twisted.ensureDeferred + async def test_increment(increment): + first = {maybe_await}increment() + second = {maybe_await}increment() + assert (first, second) == (0, 1) + + @pytest_twisted.ensureDeferred + async def test_doubleincrement(doubleincrement): + first = {maybe_await}doubleincrement() + second = {maybe_await}doubleincrement() + assert (first, second) == (0, 2) + """.format(maybe_async=maybe_async, maybe_await=maybe_await) + testdir.makepyfile(test_file) + rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts) + assert_outcomes(rr, {"passed": 2}) + + +@skip_if_no_async_generators() +@pytest.mark.parametrize('innerasync', [ + pytest.param(truth, id='innerasync={}'.format(truth)) + for truth in [True, False] +]) +def test_async_yield_fixture_in_fixture(testdir, cmd_opts, innerasync): + maybe_async = 'async ' if innerasync else '' + maybe_await = 'await ' if innerasync else '' + test_file = """ + import itertools + from twisted.internet import reactor, defer + import pytest + import pytest_twisted + + @pytest_twisted.async_yield_fixture(name='increment') + async def fixture_increment(): + counts = itertools.count() + {maybe_async}def increment(): + return next(counts) + + yield increment + + @pytest_twisted.async_yield_fixture(name='doubleincrement') + async def fixture_doubleincrement(increment): + {maybe_async}def doubleincrement(): + n = {maybe_await}increment() + return n * 2 + + yield doubleincrement + + @pytest_twisted.ensureDeferred + async def test_increment(increment): + first = {maybe_await}increment() + second = {maybe_await}increment() + assert (first, second) == (0, 1) + + @pytest_twisted.ensureDeferred + async def test_doubleincrement(doubleincrement): + first = {maybe_await}doubleincrement() + second = {maybe_await}doubleincrement() + assert (first, second) == (0, 2) + """.format(maybe_async=maybe_async, maybe_await=maybe_await) + testdir.makepyfile(test_file) + rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts) + assert_outcomes(rr, {"passed": 2}) + + def test_blockon_in_hook(testdir, cmd_opts, request): skip_if_reactor_not(request, "default") conftest_file = """