From 919d28e950e408480b62813f44933f9608d89393 Mon Sep 17 00:00:00 2001 From: Conductor Date: Wed, 3 Jun 2026 17:37:44 -0400 Subject: [PATCH] test(markdown): add live_gui smoke test for markdown table + bullet rendering --- tests/test_live_markdown_render.py | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/test_live_markdown_render.py diff --git a/tests/test_live_markdown_render.py b/tests/test_live_markdown_render.py new file mode 100644 index 00000000..e82a2eb6 --- /dev/null +++ b/tests/test_live_markdown_render.py @@ -0,0 +1,64 @@ +import time +import pytest +import sys +import os +from unittest.mock import patch + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + +from src.api_hook_client import ApiHookClient +from src.markdown_helper import MarkdownRenderer + +def _mock_imgui_for_table(mock_imgui): + mock_imgui.TableFlags_ = type("T", (), {"borders": 1, "row_bg": 2, "resizable": 4})() + mock_imgui.begin_table.return_value = True + mock_imgui.table_next_column = lambda: None + mock_imgui.table_next_row = lambda: None + mock_imgui.table_headers_row = lambda: None + mock_imgui.text = lambda *a, **k: None + mock_imgui.text_wrapped = lambda *a, **k: None + mock_imgui.end_table = lambda: None + mock_imgui.same_line = lambda: None + mock_imgui.spacing = lambda: None + mock_imgui.indent = lambda *a: None + mock_imgui.unindent = lambda *a: None + +def test_markdown_session_injection_does_not_crash(live_gui) -> None: + client = ApiHookClient() + assert client.wait_for_server(timeout=10) + table_md = "| col1 | col2 |\n| --- | --- |\n| a | b |" + bullet_md = "- item1\n- item2\n- item3" + session_entries = [ + {"role": "user", "content": table_md}, + {"role": "user", "content": bullet_md} + ] + result = client.post_session(session_entries) + assert result is not None + time.sleep(0.5) + status = client.get_status() + assert status and "status" in status + retrieved = client.get_session() + assert retrieved is not None + entries = retrieved.get("session", {}).get("entries", []) + assert len(entries) >= 2 + +def test_markdown_renderer_runs_on_demand(live_gui) -> None: + client = ApiHookClient() + assert client.wait_for_server(timeout=10) + md_text = ( + "| col1 | col2 |\n| --- | --- |\n| x | y |\n\n" + "- alpha\n- beta\n- gamma" + ) + with patch("src.markdown_helper.imgui_md") as mock_md, \ + patch("src.markdown_helper.imgui") as mock_imgui, \ + patch("src.markdown_table.imgui") as mock_table_imgui: + _mock_imgui_for_table(mock_table_imgui) + try: + MarkdownRenderer().render(md_text, context_id="live_md_test") + except Exception as e: + pytest.fail(f"MarkdownRenderer.render raised: {e}") + status = client.get_status() + assert status and "status" in status + diag = client.get_gui_diagnostics() + assert isinstance(diag, dict) + assert "fps" in diag \ No newline at end of file