aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/conftest.py33
-rw-r--r--tests/utils.py2
2 files changed, 21 insertions, 14 deletions
diff --git a/tests/conftest.py b/tests/conftest.py
index 20926024..a2650850 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -25,22 +25,31 @@ def pytest_generate_tests(metafunc):
selected_backends = select_backends(names, _available_backends())
if "backend" in metafunc.fixturenames:
- metafunc.parametrize("backend", selected_backends)
+ filtered_backends = []
+ for backend in selected_backends:
+ try:
+ required = metafunc.function.requires_backend_interface
+ required_interfaces = tuple(
+ mark.kwargs["interface"] for mark in required
+ )
+ if isinstance(backend, required_interfaces):
+ filtered_backends.append(backend)
+ except AttributeError:
+ # function does not have requires_backend_interface decorator
+ filtered_backends.append(backend)
+
+ if not filtered_backends:
+ pytest.skip(
+ "No backends provided supply the interface: {0}".format(
+ ", ".join(iface.__name__ for iface in required_interfaces)
+ )
+ )
+ else:
+ metafunc.parametrize("backend", filtered_backends)
@pytest.mark.trylast
def pytest_runtest_setup(item):
- required = item.keywords.get("requires_backend_interface")
- if required is not None and "backend" in item.funcargs:
- required_interfaces = tuple(
- mark.kwargs["interface"] for mark in required
- )
- if not isinstance(item.funcargs["backend"], required_interfaces):
- pytest.skip("{0} backend does not support {1}".format(
- item.funcargs["backend"],
- ", ".join(iface.__name__ for iface in required_interfaces)
- ))
-
check_backend_support(item)
diff --git a/tests/utils.py b/tests/utils.py
index bc5bc1ea..7b462c2d 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -40,8 +40,6 @@ def select_backends(names, backend_list):
if names is None:
return backend_list
split_names = [x.strip() for x in names.split(',')]
- # this must be duplicated and then removed to preserve the metadata
- # pytest associates. Appending backends to a new list doesn't seem to work
selected_backends = []
for backend in backend_list:
if backend.name in split_names: