HERMES-GIELIE/tests/test_issue3869_thinking_dots.py

44 lines
1.6 KiB
Python
Raw Normal View History

from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
UI_JS = (REPO_ROOT / "static" / "ui.js").read_text(encoding="utf-8")
def _function_body(src: str, name: str) -> str:
marker = f"function {name}("
start = src.find(marker)
assert start != -1, f"{name} not found"
brace = src.find("{", start)
assert brace != -1, f"{name} body not found"
depth = 0
for idx in range(brace, len(src)):
ch = src[idx]
if ch == "{":
depth += 1
elif ch == "}":
depth -= 1
if depth == 0:
return src[brace + 1 : idx]
raise AssertionError(f"{name} body not closed")
def test_finalize_removes_dot_only_legacy_thinking_placeholder():
"""#3869: an empty legacy thinking row is only a spinner, not durable content."""
body = _function_body(UI_JS, "finalizeThinkingCard")
assert "const hasContent=!!row.querySelector('.thinking-card');" in body
assert "row.classList.contains('thinking-card-row')" not in body
assert "if(!hasContent && row.getAttribute('data-thinking-active')==='1'){" in body
assert "row.remove();" in body
def test_live_worklog_thinking_cards_are_preserved_on_finalize():
"""#3869 fix must not remove real Worklog Thinking Cards that contain text."""
body = _function_body(UI_JS, "finalizeThinkingCard")
assert "turn.querySelectorAll('.agent-activity-thinking[data-thinking-active=\"1\"]')" in body
assert "active.removeAttribute('data-thinking-active');" in body
assert "active.removeAttribute('data-live-thinking');" in body
assert "active.remove()" not in body