2d1d37779f
The imgui-bundle 1.92.5 API changed: OLD: imgui.get_style().colors[imgui.Col_.text] NEW: imgui.get_style().color_(imgui.Col_.text) The Style object no longer has a 'colors' dict; it has a 'color_' method that takes a Col_ enum and returns the ImVec4 color. Updated all 9 call sites in md_renderer_py.py and the test mocks in test_md_renderer_py.py, test_markdown_helper_bullets.py, and test_markdown_render_robust.py. 42/42 tests pass.
89 lines
3.3 KiB
Python
89 lines
3.3 KiB
Python
from unittest.mock import patch, MagicMock
|
|
from src.markdown_helper import MarkdownRenderer
|
|
from src.markdown_table import parse_tables
|
|
|
|
|
|
def _mock_imgui(mock_imgui):
|
|
mock_imgui.TableFlags_ = type("T", (), {"borders": 1, "row_bg": 2, "resizable": 4})()
|
|
mock_imgui.TableColumnFlags_ = type("C", (), {"width_stretch": 8})()
|
|
mock_imgui.Col_ = type("C", (), {"text": 0, "text_disabled": 1, "frame_bg": 2,
|
|
"button": 3, "button_hovered": 4, "button_active": 5})()
|
|
mock_imgui.begin_table = MagicMock(return_value=True)
|
|
mock_imgui.end_table = MagicMock()
|
|
mock_imgui.table_setup_column = MagicMock()
|
|
mock_imgui.table_next_row = MagicMock()
|
|
mock_imgui.table_next_column = MagicMock()
|
|
mock_imgui.text = MagicMock()
|
|
mock_imgui.text_wrapped = MagicMock()
|
|
mock_imgui.bullet = MagicMock()
|
|
mock_imgui.same_line = MagicMock()
|
|
mock_imgui.new_line = MagicMock()
|
|
mock_imgui.indent = MagicMock()
|
|
mock_imgui.unindent = MagicMock()
|
|
mock_imgui.spacing = MagicMock()
|
|
mock_imgui.separator = MagicMock()
|
|
mock_imgui.push_style_color = MagicMock()
|
|
mock_imgui.pop_style_color = MagicMock()
|
|
mock_imgui.push_font = MagicMock()
|
|
mock_imgui.pop_font = MagicMock()
|
|
mock_imgui.small_button = MagicMock()
|
|
mock_imgui.get_style = MagicMock(return_value=MagicMock(
|
|
color_=MagicMock(side_effect=lambda col: MagicMock(x=1, y=1, z=1, w=1))
|
|
))
|
|
mock_imgui.get_io = MagicMock(return_value=MagicMock(fonts=MagicMock(fonts=[None])))
|
|
mock_imgui.calc_text_size = MagicMock(return_value=MagicMock(x=50, y=20))
|
|
mock_imgui.get_item_rect_min = MagicMock(return_value=MagicMock(x=0, y=0))
|
|
mock_imgui.get_window_draw_list = MagicMock(return_value=MagicMock(
|
|
add_line=MagicMock()
|
|
))
|
|
mock_imgui.is_item_hovered = MagicMock(return_value=False)
|
|
mock_imgui.is_mouse_released = MagicMock(return_value=False)
|
|
mock_imgui.get_text_line_height = MagicMock(return_value=20.0)
|
|
mock_imgui.ImVec2 = lambda *a: MagicMock(x=a[0] if a else 0, y=a[1] if len(a) > 1 else 0)
|
|
|
|
|
|
def test_tables_in_crlf_text_are_handled_by_python_renderer():
|
|
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.md_renderer_py.imgui") as mock_imgui, \
|
|
patch("src.markdown_helper.imgui_md") as mock_md:
|
|
_mock_imgui(mock_imgui)
|
|
MarkdownRenderer().render(text, context_id="t")
|
|
assert mock_md.render.call_count == 0, "imgui_md.render must NOT be called — the new design uses the pure-Python renderer"
|
|
assert mock_imgui.begin_table.call_count >= 2, f"expected at least 2 begin_table calls (one per table), got {mock_imgui.begin_table.call_count}"
|
|
assert mock_imgui.text_wrapped.called, "body text should still render via text_wrapped"
|
|
|
|
def test_duplicate_table_content_both_get_handled():
|
|
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.md_renderer_py.imgui") as mock_imgui, \
|
|
patch("src.markdown_helper.imgui_md") as mock_md:
|
|
_mock_imgui(mock_imgui)
|
|
MarkdownRenderer().render(text, context_id="dup")
|
|
assert mock_md.render.call_count == 0
|
|
assert mock_imgui.begin_table.call_count >= 2, f"expected 2 begin_table calls, got {mock_imgui.begin_table.call_count}"
|