aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tests/test_renderers.py
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2025-10-24 23:15:35 +0800
committer简律纯 <i@jyunko.cn>2025-10-24 23:15:35 +0800
commit08299b37dfda86e56e4f2b442f68ccd2da7a82e3 (patch)
treee155d11412a26f692d08b8eb796fa689fc5a4019 /tests/test_renderers.py
parent990048eb2163127615de60d9359c150bdfb99536 (diff)
downloadconventional_role_play-08299b37dfda86e56e4f2b442f68ccd2da7a82e3.tar.gz
conventional_role_play-08299b37dfda86e56e4f2b442f68ccd2da7a82e3.zip
feat: Enhance Processor, RuleExtractor, and Renderers with type hints and improved documentation
- Added type hints to Processor methods for better clarity and type safety. - Improved documentation for Processor methods, including detailed descriptions of parameters and return types. - Refactored RuleExtractor to support optional configuration file loading and added error handling for file operations. - Enhanced MarkdownRenderer to handle both list and dictionary inputs, with improved rendering logic. - Created comprehensive examples and tests for all components, ensuring robust functionality and error handling. - Added example rules for D&D 5E and structured output files for various formats (JSON, HTML, Markdown). - Established a testing framework with clear instructions and coverage reporting.
Diffstat (limited to 'tests/test_renderers.py')
-rw-r--r--tests/test_renderers.py114
1 files changed, 114 insertions, 0 deletions
diff --git a/tests/test_renderers.py b/tests/test_renderers.py
new file mode 100644
index 0000000..13e4540
--- /dev/null
+++ b/tests/test_renderers.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python3
+"""
+Renderers 模块单元测试
+"""
+
+import unittest
+import json
+from conventionalrp.renderers.html_renderer import HTMLRenderer
+from conventionalrp.renderers.json_renderer import JSONRenderer
+from conventionalrp.renderers.markdown_renderer import MarkdownRenderer
+
+
+class TestRenderers(unittest.TestCase):
+ """测试所有渲染器"""
+
+ def setUp(self):
+ """设置测试数据"""
+ self.sample_data = [
+ {
+ "type": "metadata",
+ "timestamp": "2025-10-24 14:30:01",
+ "speaker": "艾莉娅",
+ "content": [
+ {"type": "dialogue", "content": "「测试对话」"}
+ ]
+ },
+ {
+ "type": "metadata",
+ "timestamp": "2025-10-24 14:30:05",
+ "speaker": "DM",
+ "content": [
+ {"type": "text", "content": "测试文本"}
+ ]
+ }
+ ]
+
+ self.dict_data = {
+ "title": "测试标题",
+ "content": "测试内容"
+ }
+
+ def test_html_renderer_basic(self):
+ """测试 HTML 渲染器基本功能"""
+ renderer = HTMLRenderer()
+ output = renderer.render(self.sample_data)
+
+ self.assertIsInstance(output, str)
+ self.assertIn("<html>", output)
+ self.assertIn("</html>", output)
+ self.assertIn("<title>", output)
+
+ def test_html_renderer_set_style(self):
+ """测试 HTML 渲染器设置样式"""
+ renderer = HTMLRenderer()
+ renderer.set_style("custom_style")
+ # 当前实现为占位符,仅测试不抛出异常
+ self.assertIsNotNone(renderer)
+
+ def test_json_renderer_basic(self):
+ """测试 JSON 渲染器基本功能"""
+ renderer = JSONRenderer()
+ output = renderer.render(self.sample_data)
+
+ self.assertIsInstance(output, str)
+
+ # 验证输出是有效的 JSON
+ parsed = json.loads(output)
+ self.assertIsInstance(parsed, list)
+ self.assertEqual(len(parsed), len(self.sample_data))
+
+ def test_json_renderer_unicode(self):
+ """测试 JSON 渲染器处理 Unicode"""
+ renderer = JSONRenderer()
+ output = renderer.render(self.sample_data)
+
+ # 应该保留中文字符
+ self.assertIn("艾莉娅", output)
+ self.assertIn("测试", output)
+
+ def test_markdown_renderer_basic(self):
+ """测试 Markdown 渲染器基本功能"""
+ renderer = MarkdownRenderer()
+ output = renderer.render(self.dict_data)
+
+ self.assertIsInstance(output, str)
+ self.assertIn("##", output) # 应该有标题标记
+ self.assertIn("测试标题", output)
+
+ def test_markdown_renderer_set_style(self):
+ """测试 Markdown 渲染器设置样式"""
+ renderer = MarkdownRenderer()
+ style = {"heading_level": 2}
+ renderer.set_style(style)
+ self.assertEqual(renderer.style, style)
+
+ def test_all_renderers_empty_data(self):
+ """测试所有渲染器处理空数据"""
+ empty_data = []
+
+ html_renderer = HTMLRenderer()
+ html_output = html_renderer.render(empty_data)
+ self.assertIsInstance(html_output, str)
+
+ json_renderer = JSONRenderer()
+ json_output = json_renderer.render(empty_data)
+ self.assertEqual(json_output, "[]")
+
+ md_renderer = MarkdownRenderer()
+ md_output = md_renderer.render({})
+ self.assertEqual(md_output, "")
+
+
+if __name__ == "__main__":
+ unittest.main()