Move conformance tests to per-version directories

Conformance tests now live in conformance/<version>/*.py and are checked
against the corresponding stubs in dist/<version>/. Auto-detection only
runs versions that have both stubs and test files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Joseph HENRY 2026-03-27 15:17:01 +01:00
parent 441631d69a
commit 8879d14073
8 changed files with 17 additions and 8 deletions

25
main.py
View File

@ -397,7 +397,11 @@ def typecheck_stubs(versions: list[str] | None = None) -> None:
def conformance_check(versions: list[str] | None = None) -> None:
"""Type-check conformance test files against generated stubs."""
"""Type-check conformance test files against generated stubs.
Each version's tests live in conformance/<version>/*.py and are checked
against the corresponding generated stubs in dist/<version>/.
"""
dist_dir = SCRIPT_DIR / "dist"
conformance_dir = SCRIPT_DIR / "conformance"
@ -406,24 +410,29 @@ def conformance_check(versions: list[str] | None = None) -> None:
sys.exit(1)
if versions:
missing = [v for v in versions if not (dist_dir / v).is_dir()]
if missing:
print(f"Missing stubs for: {', '.join(missing)}")
missing_stubs = [v for v in versions if not (dist_dir / v).is_dir()]
if missing_stubs:
print(f"Missing stubs for: {', '.join(missing_stubs)}")
sys.exit(1)
missing_tests = [v for v in versions if not (conformance_dir / v).is_dir()]
if missing_tests:
print(f"No conformance tests for: {', '.join(missing_tests)}")
sys.exit(1)
else:
versions = sorted(
d.name
for d in dist_dir.iterdir()
if d.is_dir() and not d.name.startswith(".")
for d in conformance_dir.iterdir()
if d.is_dir() and (dist_dir / d.name).is_dir()
)
if not versions:
print("No generated stubs found in dist/.")
print("No conformance test directories found.")
sys.exit(1)
failed = False
for version in versions:
version_dir = dist_dir / version
test_dir = conformance_dir / version
print(f"=== Conformance check against Blender {version} stubs ===")
python_version_file = version_dir / ".python-version"
@ -437,7 +446,7 @@ def conformance_check(versions: list[str] | None = None) -> None:
config.write_text(
json.dumps(
{
"include": [str(conformance_dir)],
"include": [str(test_dir)],
"extraPaths": [str(version_dir)],
"typeCheckingMode": "strict",
"pythonVersion": python_version,