diff options
author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2014-10-23 12:07:20 -0700 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2014-10-24 07:38:59 -0700 |
commit | f93d8244eac195fcc7577ddf22887052c2b686ab (patch) | |
tree | ac8cc1c1d4d39d3344652758bf20a1133ac36c82 /tests | |
parent | 2f2346344ae5561bc9b106cbb452efeebe3cdc45 (diff) | |
download | cryptography-f93d8244eac195fcc7577ddf22887052c2b686ab.tar.gz cryptography-f93d8244eac195fcc7577ddf22887052c2b686ab.tar.bz2 cryptography-f93d8244eac195fcc7577ddf22887052c2b686ab.zip |
filter backends during initial generation to elide tests entirely
Diffstat (limited to 'tests')
-rw-r--r-- | tests/conftest.py | 33 | ||||
-rw-r--r-- | tests/utils.py | 2 |
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: |