From 8879d14073c81308b66406f47c41fdc3e9de11e3 Mon Sep 17 00:00:00 2001 From: Joseph HENRY Date: Fri, 27 Mar 2026 15:17:01 +0100 Subject: [PATCH] Move conformance tests to per-version directories Conformance tests now live in conformance//*.py and are checked against the corresponding stubs in dist//. Auto-detection only runs versions that have both stubs and test files. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../test_gpu_3d_points_with_single_color.py | 0 .../test_gpu_triangle_with_custom_shader.py | 0 conformance/{ => 5.1}/test_mathutils.py | 0 conformance/{ => 5.1}/test_mathutils_color.py | 0 .../{ => 5.1}/test_mathutils_matrix.py | 0 .../{ => 5.1}/test_mathutils_quaternion.py | 0 .../{ => 5.1}/test_mathutils_vector.py | 0 main.py | 25 +++++++++++++------ 8 files changed, 17 insertions(+), 8 deletions(-) rename conformance/{ => 5.1}/test_gpu_3d_points_with_single_color.py (100%) rename conformance/{ => 5.1}/test_gpu_triangle_with_custom_shader.py (100%) rename conformance/{ => 5.1}/test_mathutils.py (100%) rename conformance/{ => 5.1}/test_mathutils_color.py (100%) rename conformance/{ => 5.1}/test_mathutils_matrix.py (100%) rename conformance/{ => 5.1}/test_mathutils_quaternion.py (100%) rename conformance/{ => 5.1}/test_mathutils_vector.py (100%) diff --git a/conformance/test_gpu_3d_points_with_single_color.py b/conformance/5.1/test_gpu_3d_points_with_single_color.py similarity index 100% rename from conformance/test_gpu_3d_points_with_single_color.py rename to conformance/5.1/test_gpu_3d_points_with_single_color.py diff --git a/conformance/test_gpu_triangle_with_custom_shader.py b/conformance/5.1/test_gpu_triangle_with_custom_shader.py similarity index 100% rename from conformance/test_gpu_triangle_with_custom_shader.py rename to conformance/5.1/test_gpu_triangle_with_custom_shader.py diff --git a/conformance/test_mathutils.py b/conformance/5.1/test_mathutils.py similarity index 100% rename from conformance/test_mathutils.py rename to conformance/5.1/test_mathutils.py diff --git a/conformance/test_mathutils_color.py b/conformance/5.1/test_mathutils_color.py similarity index 100% rename from conformance/test_mathutils_color.py rename to conformance/5.1/test_mathutils_color.py diff --git a/conformance/test_mathutils_matrix.py b/conformance/5.1/test_mathutils_matrix.py similarity index 100% rename from conformance/test_mathutils_matrix.py rename to conformance/5.1/test_mathutils_matrix.py diff --git a/conformance/test_mathutils_quaternion.py b/conformance/5.1/test_mathutils_quaternion.py similarity index 100% rename from conformance/test_mathutils_quaternion.py rename to conformance/5.1/test_mathutils_quaternion.py diff --git a/conformance/test_mathutils_vector.py b/conformance/5.1/test_mathutils_vector.py similarity index 100% rename from conformance/test_mathutils_vector.py rename to conformance/5.1/test_mathutils_vector.py diff --git a/main.py b/main.py index 9191825..30a5ed6 100644 --- a/main.py +++ b/main.py @@ -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//*.py and are checked + against the corresponding generated stubs in dist//. + """ 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,