diff options
| author | 2025-10-24 23:15:35 +0800 | |
|---|---|---|
| committer | 2025-10-24 23:15:35 +0800 | |
| commit | 08299b37dfda86e56e4f2b442f68ccd2da7a82e3 (patch) | |
| tree | e155d11412a26f692d08b8eb796fa689fc5a4019 /tests/test_renderers.py | |
| parent | 990048eb2163127615de60d9359c150bdfb99536 (diff) | |
| download | conventional_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.py | 114 |
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() |
