34 test files read static/*.js via read_text()/open() without an encoding, so Python's cp1252 default on Windows choked on non-Latin1 bytes and errored at collection (Ubuntu CI defaults to utf-8, so it never saw this). Add explicit encoding="utf-8" to those reads — purely mechanical, no assertion changes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
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
|