"""Pytest configuration for all tests. Ensures proper sys.path setup so that: 1. `platform.*` modules are imported from ./platform (not stdlib) 2. `ontocast.*` modules are imported from ./vendored/ontocast """ from __future__ import annotations import asyncio import inspect import sys from pathlib import Path REPO_ROOT = Path(__file__).resolve().parent.parent VENDORED_ONTOCAST = REPO_ROOT / "vendored" / "ontocast" for p in (REPO_ROOT, VENDORED_ONTOCAST): p_str = str(p) if p_str not in sys.path: sys.path.insert(0, p_str) # Remove stdlib 'platform' to avoid conflict with our platform package if "platform" in sys.modules: del sys.modules["platform"] def pytest_configure(config): config.addinivalue_line("markers", "asyncio: run async test functions") def pytest_addoption(parser): parser.addini("asyncio_mode", "asyncio compatibility mode", default="auto") def pytest_pyfunc_call(pyfuncitem): """Minimal asyncio runner for environments without pytest-asyncio.""" if not inspect.iscoroutinefunction(pyfuncitem.obj): return None kwargs = { name: pyfuncitem.funcargs[name] for name in pyfuncitem._fixtureinfo.argnames if name in pyfuncitem.funcargs } asyncio.run(pyfuncitem.obj(**kwargs)) return True