"""Point d'entree pytest pour la suite : lance chaque tests/test_*.py existant comme un sous-processus isole (voir conftest.py pour la raison de cet isolement), avec les variables d'environnement necessaires sous Windows (encodage UTF-8 pour les caracteres/emoji, rendu Qt hors-ecran pour tourner sans affichage - typiquement en integration continue). `pytest tests/` (ou simplement `pytest`) devient ainsi le point d'entree unique de la suite, tout en preservant chaque script existant tel quel. """ from __future__ import annotations import os import subprocess import sys from pathlib import Path import pytest TESTS_DIR = Path(__file__).parent PROJECT_ROOT = TESTS_DIR.parent SCRIPTS = sorted( p for p in TESTS_DIR.glob("test_*.py") if p.name not in ("test_all_scripts.py",) ) def _run_env() -> dict: env = dict(os.environ) env["PYTHONIOENCODING"] = "utf-8" env["PYTHONUTF8"] = "1" env.setdefault("QT_QPA_PLATFORM", "offscreen") return env @pytest.mark.parametrize("script", SCRIPTS, ids=lambda p: p.stem) def test_script(script: Path) -> None: result = subprocess.run( [sys.executable, str(script)], cwd=PROJECT_ROOT, env=_run_env(), capture_output=True, text=True, timeout=60, ) if result.returncode != 0: pytest.fail( f"{script.name} a echoue (code {result.returncode}) :\n" f"--- stdout ---\n{result.stdout}\n--- stderr ---\n{result.stderr}", pytrace=False, )