add an xfail-ed test for a potential future "enabled" parameter to setup functions

This commit is contained in:
holger krekel 2012-09-25 15:04:30 +02:00
parent fe4ccdff0e
commit a1c3d60747
2 changed files with 34 additions and 3 deletions

View File

@ -19,8 +19,10 @@ class FactoryMarker:
return function
class SetupMarker:
def __init__(self, scope):
def __init__(self, scope, enabled):
self.scope = scope
self.enabled = enabled
def __call__(self, function):
function._pytestsetup = self
return function
@ -36,14 +38,17 @@ def factory(scope=None, params=None):
"""
return FactoryMarker(scope, params)
def setup(scope="function"):
def setup(scope="function", enabled=None):
""" return a decorator to mark functions as setup functions.
:arg scope: the scope for which the setup function will be active, one
of "function", "class", "module", "session".
Defaults to "function".
:arg enabled: if a callable is specified, enabled(node) will be called
and if it returns a false value this setup function
will not be called and its funcargs will not be setup.
"""
return SetupMarker(scope)
return SetupMarker(scope, enabled)
def cached_property(f):
"""returns a cached property that is calculated by function f.

View File

@ -1898,6 +1898,32 @@ class TestSetupDiscovery:
reprec = testdir.inline_run("-s")
reprec.assertoutcome(passed=2)
@pytest.mark.xfail(reason="'enabled' feature not implemented")
def test_setup_enabled_functionnode(self, testdir):
testdir.makepyfile("""
import pytest
def enabled(parentnode, markers):
return "needsdb" in markers
@pytest.factory(params=[1,2])
def db(request):
return request.param
@pytest.setup(enabled=enabled)
def createdb(db):
pass
def test_func1(request):
assert "db" not in request.funcargnames
@pytest.mark.needsdb
def test_func2(request):
assert "db" in request.funcargnames
""")
reprec = testdir.inline_run("-s")
reprec.assertoutcome(passed=2)
def test_callables_nocode(self, testdir):
"""
a imported mock.call would break setup/factory discovery