""" HTML 渲染器单元测试 测试 HtmlRenderer 类的各个渲染方法 """ import pytest from pathlib import Path from renderers.html_renderer import HtmlRenderer, DPI from core.elements import TextElement, ImageElement, ShapeElement, TableElement class TestHtmlRenderer: """HtmlRenderer 测试类""" def test_renderer_has_dpi_constant(self): """测试渲染器有 DPI 常量""" assert DPI == 96 def test_init_renderer(self): """测试创建渲染器""" renderer = HtmlRenderer() assert renderer is not None class TestRenderText: """render_text 方法测试类""" def test_render_text_basic(self): """测试渲染基本文本""" renderer = HtmlRenderer() elem = TextElement( content="Test Content", box=[1, 2, 3, 0.5], font={"size": 18, "color": "#333333"}, ) html = renderer.render_text(elem) assert "Test Content" in html assert "text-element" in html assert "left: 96px" in html # 1 * 96 assert "top: 192px" in html # 2 * 96 assert "font-size: 18pt" in html assert "color: #333333" in html def test_render_text_with_bold(self): """测试渲染粗体文本""" renderer = HtmlRenderer() elem = TextElement( content="Bold Text", box=[0, 0, 1, 1], font={"size": 16, "bold": True} ) html = renderer.render_text(elem) assert "font-weight: bold;" in html def test_render_text_with_italic(self): """测试渲染斜体文本""" renderer = HtmlRenderer() elem = TextElement( content="Italic Text", box=[0, 0, 1, 1], font={"size": 16, "italic": True} ) html = renderer.render_text(elem) assert "font-style: italic;" in html def test_render_text_with_center_align(self): """测试渲染居中对齐文本""" renderer = HtmlRenderer() elem = TextElement( content="Centered", box=[0, 0, 1, 1], font={"align": "center"} ) html = renderer.render_text(elem) assert "text-align: center;" in html def test_render_text_with_right_align(self): """测试渲染右对齐文本""" renderer = HtmlRenderer() elem = TextElement( content="Right Aligned", box=[0, 0, 1, 1], font={"align": "right"} ) html = renderer.render_text(elem) assert "text-align: right;" in html def test_render_text_with_default_align(self): """测试默认左对齐""" renderer = HtmlRenderer() elem = TextElement(content="Default", box=[0, 0, 1, 1], font={}) html = renderer.render_text(elem) assert "text-align: left;" in html def test_render_text_escapes_html(self): """测试 HTML 特殊字符转义""" renderer = HtmlRenderer() elem = TextElement( content="", box=[0, 0, 1, 1], font={} ) html = renderer.render_text(elem) assert "<" in html assert ">" in html assert "