97 lines
3.3 KiB
Python
97 lines
3.3 KiB
Python
from pathlib import Path
|
|
|
|
|
|
ROOTS = (Path("src"), Path("testing"), Path("examples"))
|
|
|
|
SOURCE_SUFFIXES = {".c", ".cc", ".cpp", ".h", ".hpp"}
|
|
|
|
|
|
def _is_under(path: Path, parent: Path) -> bool:
|
|
try:
|
|
path.relative_to(parent)
|
|
except ValueError:
|
|
return False
|
|
return True
|
|
|
|
|
|
def test_untyped_visual_compatibility_is_fixture_only() -> None:
|
|
patterns = (
|
|
"dvz_frame_plan_render_allow_untyped_visual" "_compat(",
|
|
"allow_untyped_visual" "_compat",
|
|
"_scene_untyped" "_compat",
|
|
)
|
|
checked = False
|
|
|
|
for root in ROOTS:
|
|
if not root.exists():
|
|
continue
|
|
for path in sorted(root.rglob("*")):
|
|
if path.suffix not in SOURCE_SUFFIXES:
|
|
continue
|
|
checked = True
|
|
|
|
text = path.read_text(encoding="utf-8")
|
|
for pattern in patterns:
|
|
assert pattern not in text, f"{path} enables untyped visual compatibility"
|
|
|
|
assert checked, "scene architecture source guard did not check any source files"
|
|
|
|
|
|
def test_panel_emit_routes_generated_visuals_from_attachment_policy() -> None:
|
|
panel_emit = Path("src/scene/scene_emit/panel.c")
|
|
assert panel_emit.exists(), "missing panel emitter source"
|
|
text = panel_emit.read_text(encoding="utf-8")
|
|
|
|
required_patterns = (
|
|
"_scene_visual_generated_policy(",
|
|
"attach->has_generated_role",
|
|
"attach->generated_role",
|
|
"_scene_visual_explicit_clip_rect(",
|
|
"_scene_visual_explicit_viewport_rect(",
|
|
)
|
|
for pattern in required_patterns:
|
|
assert pattern in text, f"{panel_emit} is missing attachment routing pattern {pattern!r}"
|
|
|
|
forbidden_pointer_scans = (
|
|
"background_visual",
|
|
"border_visual",
|
|
"axis->",
|
|
"colorbar->",
|
|
"legend->",
|
|
"scalebar->",
|
|
"bounds_visual",
|
|
"_scene_visual_is_axis",
|
|
"_scene_visual_is_colorbar",
|
|
"_scene_visual_is_legend",
|
|
)
|
|
for pattern in forbidden_pointer_scans:
|
|
assert pattern not in text, f"{panel_emit} contains generated-visual pointer scan {pattern!r}"
|
|
|
|
|
|
def test_panel_render_policy_lives_in_planner() -> None:
|
|
panel_emit = Path("src/scene/scene_emit/panel.c")
|
|
planner_header = Path("src/scene/scene_emit/panel_render_plan.h")
|
|
planner_source = Path("src/scene/scene_emit/panel_render_plan.c")
|
|
assert panel_emit.exists(), "missing panel emitter source"
|
|
assert planner_header.exists(), "missing panel render planner header"
|
|
assert planner_source.exists(), "missing panel render planner source"
|
|
|
|
panel_text = panel_emit.read_text(encoding="utf-8")
|
|
planner_header_text = planner_header.read_text(encoding="utf-8")
|
|
planner_source_text = planner_source.read_text(encoding="utf-8")
|
|
|
|
assert "DvzPanelRenderPlan" in planner_header_text
|
|
assert "_scene_panel_render_plan_build(" in planner_source_text
|
|
|
|
forbidden_panel_policy = (
|
|
"_scene_visual_pass_caps_from_visual(",
|
|
"_scene_technique_gbuffer_enabled(",
|
|
"_scene_technique_ssao_state(",
|
|
"_scene_technique_msaa_state(",
|
|
"_scene_technique_edl_state(",
|
|
"_scene_panel_has_visible_scene_occlusion_target(",
|
|
"_scene_panel_has_visible_volume_occlusion_target(",
|
|
)
|
|
for pattern in forbidden_panel_policy:
|
|
assert pattern not in panel_text, f"{panel_emit} owns planner policy {pattern!r}"
|