works
This commit is contained in:
parent
b824147dcb
commit
eea6cdc1bd
5 changed files with 416 additions and 27 deletions
110
tests_v2/test_browser_devtools_visibility_stability.py
Normal file
110
tests_v2/test_browser_devtools_visibility_stability.py
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
#!/usr/bin/env python3
|
||||
"""v2 regression: browser DevTools stays open after a single toggle."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
from cmux import cmux, cmuxError
|
||||
|
||||
|
||||
SOCKET_PATH = os.environ.get("CMUX_SOCKET", "/tmp/cmux-debug.sock")
|
||||
|
||||
|
||||
def _must(cond: bool, msg: str) -> None:
|
||||
if not cond:
|
||||
raise cmuxError(msg)
|
||||
|
||||
|
||||
def _wait_until(pred, timeout_s: float, label: str) -> None:
|
||||
deadline = time.time() + timeout_s
|
||||
last_exc = None
|
||||
while time.time() < deadline:
|
||||
try:
|
||||
if pred():
|
||||
return
|
||||
except Exception as exc: # noqa: BLE001
|
||||
last_exc = exc
|
||||
time.sleep(0.05)
|
||||
if last_exc is not None:
|
||||
raise cmuxError(f"Timed out waiting for {label}: {last_exc}")
|
||||
raise cmuxError(f"Timed out waiting for {label}")
|
||||
|
||||
|
||||
def _surface_row(c: cmux, workspace_id: str, surface_id: str) -> dict:
|
||||
payload = c._call("surface.list", {"workspace_id": workspace_id}) or {}
|
||||
for row in payload.get("surfaces") or []:
|
||||
if str(row.get("id") or "") == surface_id:
|
||||
return row
|
||||
raise cmuxError(f"surface.list missing surface {surface_id} in workspace {workspace_id}: {payload}")
|
||||
|
||||
|
||||
def _devtools_visible(c: cmux, workspace_id: str, surface_id: str) -> bool:
|
||||
row = _surface_row(c, workspace_id, surface_id)
|
||||
return bool(row.get("developer_tools_visible"))
|
||||
|
||||
|
||||
def _focus_browser_webview(c: cmux, surface_id: str, timeout_s: float = 2.0) -> None:
|
||||
deadline = time.time() + timeout_s
|
||||
last_exc = None
|
||||
while time.time() < deadline:
|
||||
try:
|
||||
c.focus_surface(surface_id)
|
||||
c.focus_webview(surface_id)
|
||||
if c.is_webview_focused(surface_id):
|
||||
return
|
||||
except Exception as exc: # noqa: BLE001
|
||||
last_exc = exc
|
||||
time.sleep(0.05)
|
||||
raise cmuxError(f"Timed out waiting for browser webview focus: {last_exc}")
|
||||
|
||||
|
||||
def main() -> int:
|
||||
with cmux(SOCKET_PATH) as c:
|
||||
workspace_id = c.new_workspace()
|
||||
try:
|
||||
c.select_workspace(workspace_id)
|
||||
time.sleep(0.3)
|
||||
|
||||
surface_id = c.new_surface(panel_type="browser", url="https://example.com")
|
||||
_wait_until(
|
||||
lambda: _surface_row(c, workspace_id, surface_id).get("type") == "browser",
|
||||
timeout_s=5.0,
|
||||
label="browser surface in surface.list",
|
||||
)
|
||||
_focus_browser_webview(c, surface_id, timeout_s=3.0)
|
||||
|
||||
_must(
|
||||
_devtools_visible(c, workspace_id, surface_id) is False,
|
||||
"Expected DevTools to start closed",
|
||||
)
|
||||
|
||||
c.simulate_shortcut("cmd+opt+i")
|
||||
|
||||
_wait_until(
|
||||
lambda: _devtools_visible(c, workspace_id, surface_id),
|
||||
timeout_s=3.0,
|
||||
label="DevTools visible after toggle",
|
||||
)
|
||||
|
||||
deadline = time.time() + 1.5
|
||||
while time.time() < deadline:
|
||||
_must(
|
||||
_devtools_visible(c, workspace_id, surface_id) is True,
|
||||
"DevTools reopened/closed unexpectedly after initial open",
|
||||
)
|
||||
time.sleep(0.05)
|
||||
finally:
|
||||
try:
|
||||
c.close_workspace(workspace_id)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
print("PASS: browser DevTools stays open after a single toggle")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Loading…
Add table
Add a link
Reference in a new issue