82 lines
3.0 KiB
Python
82 lines
3.0 KiB
Python
from unittest.mock import patch
|
|
from src.markdown_helper import MarkdownRenderer
|
|
from src.markdown_table import parse_tables
|
|
|
|
def _mock_table_calls(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.end_table = lambda: None
|
|
|
|
def test_tables_in_crlf_text_all_get_masked():
|
|
text = (
|
|
"# Title\r\n"
|
|
"\r\n"
|
|
"| A | B |\r\n"
|
|
"|---|---|\r\n"
|
|
"| 1 | 2 |\r\n"
|
|
"\r\n"
|
|
"Some prose.\r\n"
|
|
"\r\n"
|
|
"| X | Y |\r\n"
|
|
"|---|---|\r\n"
|
|
"| 3 | 4 |\r\n"
|
|
)
|
|
blocks = parse_tables(text)
|
|
assert len(blocks) == 2
|
|
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_table_calls(mock_table_imgui)
|
|
MarkdownRenderer().render(text, context_id="t")
|
|
full = "".join(str(c) for c in mock_md.render.call_args_list)
|
|
for needle in ["| A | B |", "|---|", "| 1 | 2 |", "| X | Y |", "| 3 | 4 |"]:
|
|
assert needle not in full, f"Raw table text leaked to imgui_md: {needle!r} in calls: {full!r}"
|
|
|
|
def test_duplicate_table_content_both_get_replaced():
|
|
text = (
|
|
"| A | B |\r\n"
|
|
"|---|---|\r\n"
|
|
"| 1 | 2 |\r\n"
|
|
"\r\n"
|
|
"Middle prose.\r\n"
|
|
"\r\n"
|
|
"| A | B |\r\n"
|
|
"|---|---|\r\n"
|
|
"| 1 | 2 |\r\n"
|
|
)
|
|
blocks = parse_tables(text)
|
|
assert len(blocks) == 2
|
|
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_table_calls(mock_table_imgui)
|
|
MarkdownRenderer().render(text, context_id="dup")
|
|
full = "".join(str(c) for c in mock_md.render.call_args_list)
|
|
assert "| A | B |" not in full, f"Raw table text leaked on duplicate: {full!r}"
|
|
|
|
|
|
def test_render_applies_current_syntax_palette(monkeypatch):
|
|
"""When a theme is active, the render path should call apply_syntax_palette
|
|
so new code-block editors pick up the theme's syntax palette."""
|
|
from unittest.mock import patch
|
|
from src import theme_2 as theme
|
|
|
|
class _Tracker:
|
|
last_palette = None
|
|
last_call = False
|
|
|
|
def fake_apply(palette_id):
|
|
_Tracker.last_palette = palette_id
|
|
_Tracker.last_call = True
|
|
|
|
monkeypatch.setattr(theme, "apply_syntax_palette", fake_apply)
|
|
monkeypatch.setattr(theme, "_current_palette", "solarized_dark")
|
|
monkeypatch.setattr(theme, "get_syntax_palette_for_theme", lambda n: "dark")
|
|
|
|
from src.markdown_helper import MarkdownRenderer
|
|
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_table_calls(mock_table_imgui)
|
|
MarkdownRenderer().render("hello world", context_id="p")
|
|
assert _Tracker.last_call, "expected apply_syntax_palette to be called"
|
|
|