29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
# content of conftest.py
|
|
import json
|
|
|
|
import pytest
|
|
|
|
|
|
class ManifestDirectory(pytest.Directory):
|
|
def collect(self):
|
|
# The standard pytest behavior is to loop over all `test_*.py` files and
|
|
# call `pytest_collect_file` on each file. This collector instead reads
|
|
# the `manifest.json` file and only calls `pytest_collect_file` for the
|
|
# files defined there.
|
|
manifest_path = self.path / "manifest.json"
|
|
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
|
|
ihook = self.ihook
|
|
for file in manifest["files"]:
|
|
yield from ihook.pytest_collect_file(
|
|
file_path=self.path / file, parent=self
|
|
)
|
|
|
|
|
|
@pytest.hookimpl
|
|
def pytest_collect_directory(path, parent):
|
|
# Use our custom collector for directories containing a `mainfest.json` file.
|
|
if path.joinpath("manifest.json").is_file():
|
|
return ManifestDirectory.from_parent(parent=parent, path=path)
|
|
# Otherwise fallback to the standard behavior.
|
|
return None
|