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):
renderer = HTMLRenderer()
output = renderer.render(self.sample_data)
self.assertIsInstance(output, str)
self.assertIn("", output)
self.assertIn("", output)
self.assertIn("
", output)
def test_html_renderer_set_style(self):
renderer = HTMLRenderer()
renderer.set_style("custom_style")
# now style is set, just ensure no exceptions
self.assertIsNotNone(renderer)
def test_json_renderer_basic(self):
renderer = JSONRenderer()
output = renderer.render(self.sample_data)
self.assertIsInstance(output, str)
# Output should be valid JSON
parsed = json.loads(output)
self.assertIsInstance(parsed, list)
self.assertEqual(len(parsed), len(self.sample_data))
def test_json_renderer_unicode(self):
renderer = JSONRenderer()
output = renderer.render(self.sample_data)
# should preserve Chinese characters
self.assertIn("艾莉娅", output)
self.assertIn("测试", output)
def test_markdown_renderer_basic(self):
renderer = MarkdownRenderer()
output = renderer.render(self.dict_data)
self.assertIsInstance(output, str)
self.assertIn("##", output)
self.assertIn("test content", output)
def test_markdown_renderer_set_style(self):
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()