Files
ShortX_ToolHub/scripts/verify_toolapp_single_root.py
2026-05-13 07:27:39 +08:00

38 lines
1.7 KiB
Python

#!/usr/bin/env python3
import pathlib
import re
import sys
root = pathlib.Path(__file__).resolve().parents[1]
core = (root / "code" / "th_02_core.js").read_text(encoding="utf-8")
extra = (root / "code" / "th_15_extra.js").read_text(encoding="utf-8")
checks = []
def check(name, ok):
checks.append((name, bool(ok)))
check("state keeps a single ToolApp root view", "toolAppRoot" in core)
check("state keeps ToolApp content host", "toolAppContentHost" in core)
check("state keeps ToolApp title view", "toolAppTitleView" in core)
check("state keeps ToolApp back button", "toolAppBackButton" in core)
check("has ensureToolAppShell", "FloatBallAppWM.prototype.ensureToolAppShell" in extra)
check("has updateToolAppShellChrome", "FloatBallAppWM.prototype.updateToolAppShellChrome" in extra)
check("has setToolAppContent", "FloatBallAppWM.prototype.setToolAppContent" in extra)
show_match = re.search(r"FloatBallAppWM\.prototype\.showToolApp\s*=\s*function\([^)]*\)\s*\{(?P<body>.*?)\n\};", extra, re.S)
show_body = show_match.group("body") if show_match else ""
check("showToolApp exists", bool(show_match))
check("showToolApp does not remove viewer on page switch", "this.hideViewerPanel();" not in show_body)
check("showToolApp ensures shell once", "this.ensureToolAppShell" in show_body)
check("showToolApp swaps content host", "this.setToolAppContent" in show_body)
check("showToolApp only addPanel when shell not added", "!this.state.addedViewer" in show_body and "this.addPanel" in show_body)
failed = [name for name, ok in checks if not ok]
if failed:
print("ToolApp single-root verification FAILED:")
for name in failed:
print(" - " + name)
sys.exit(1)
print("ToolApp single-root verification OK")