58 lines
2.4 KiB
Python
58 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
|
|
|
|
def source(name: str) -> str:
|
|
return (ROOT / "apps" / "web-console" / name).read_text(encoding="utf-8")
|
|
|
|
|
|
def test_calibration_twin_tracks_labels_and_commits_direct_axis_drag() -> None:
|
|
calibration = source("self-calibration.js")
|
|
seat3d = source("self-repair-seat3d.js")
|
|
styles = source("self-calibration.css")
|
|
|
|
assert 'data-seat-axis-label="backrest"' in calibration
|
|
assert 'data-seat-label-line="legrest"' in calibration
|
|
assert 'window.addEventListener("calibration-seat-axis-preview"' in calibration
|
|
assert 'window.addEventListener("calibration-seat-axis-commit"' in calibration
|
|
assert "function layoutSeatLabels()" in seat3d
|
|
assert "makePanel(legrestPivot, cushionShape(0.08)" in seat3d
|
|
assert "function legrestShape(" not in seat3d
|
|
assert 'enableAxisDrag: true' in seat3d
|
|
assert 'function startAxisDrag(axis, event, source = "model")' in seat3d
|
|
assert 'startAxisDrag(item.axis, event, "label")' in seat3d
|
|
assert "calculateAxisDragVector(axis, value)" in seat3d
|
|
assert "Math.max(0, Math.min(100," in seat3d
|
|
assert 'new CustomEvent("calibration-seat-axis-commit"' in seat3d
|
|
assert ".v2-calibration-label-lines line" in styles
|
|
assert '.v2-axis-tag[data-control-enabled="true"]' in styles
|
|
assert "pointer-events: auto;" in styles
|
|
|
|
|
|
def test_extension_pet_and_transient_vehicle_state_restart_contract() -> None:
|
|
extension = source("self-extension.js")
|
|
styles = source("self-extension.css")
|
|
|
|
assert 'id="extensionDesktopPet"' in extension
|
|
assert "function initializeDesktopPet()" in extension
|
|
assert "saved.vehicleExecutions = {};" in extension
|
|
assert "saved.lastProtocol = null;" in extension
|
|
assert ".v2-extension-pet-body" in styles
|
|
assert "@keyframes extension-pet-blink" in styles
|
|
|
|
|
|
def test_virtual_modules_reset_but_physical_sessions_remain_authoritative() -> None:
|
|
orchestration = source("app.js")
|
|
calibration = source("self-calibration.js")
|
|
repair = source("self-repair.js")
|
|
|
|
assert 'sessionStorage.removeItem("cognitive-agent.conversation-id")' in orchestration
|
|
assert 'api("/session/reset")' in calibration
|
|
assert 'if (state.transport?.mode === "simulation")' in calibration
|
|
assert 'if (backendMode === "bench")' in repair
|
|
assert 'await apiPost("/runtime/reset-statistics")' in repair
|