"""
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 "