blob: 9c4d750b52b65e8c81b293ef4270d9483969a3d5 [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for tiny_render."""
import unittest
import tiny_render
# Admittedly, the HTML generated by this isn't always _beautiful_ to read
# (especially with e.g., ordered lists). Since the intent is for the HTML to be
# shipped alongside the plain-text, the hope is that people won't have to
# subject themselves to reading the HTML often. :)
class Test(unittest.TestCase):
"""Tests for tiny_render."""
def test_bold(self):
pieces = [
tiny_render.Bold("hello"),
", ",
tiny_render.Bold(["world", "!"]),
]
self.assertEqual(
tiny_render.render_text_pieces(pieces),
"**hello**, **world!**",
)
self.assertEqual(
tiny_render.render_html_pieces(pieces),
"<b>hello</b>, <b>world!</b>",
)
def test_line_break(self):
pieces = [
"hello",
tiny_render.line_break,
["world", "!"],
]
self.assertEqual(
tiny_render.render_text_pieces(pieces),
"hello\nworld!",
)
self.assertEqual(
tiny_render.render_html_pieces(pieces),
"hello<br />\nworld!",
)
def test_linkification(self):
pieces = [
"hello ",
tiny_render.Link(href="https://google.com", inner="world!"),
]
self.assertEqual(
tiny_render.render_text_pieces(pieces),
"hello world!",
)
self.assertEqual(
tiny_render.render_html_pieces(pieces),
'hello <a href="https://google.com">world!</a>',
)
def test_unordered_list(self):
pieces = [
"hello:",
tiny_render.UnorderedList(
[
"world",
"w o r l d",
]
),
]
self.assertEqual(
tiny_render.render_text_pieces(pieces),
"\n".join(
(
"hello:",
" - world",
" - w o r l d",
)
),
)
self.assertEqual(
tiny_render.render_html_pieces(pieces),
"\n".join(
(
"hello:<ul>",
"<li>world</li>",
"<li>w o r l d</li>",
"</ul>",
"",
)
),
)
def test_nested_unordered_list(self):
pieces = [
"hello:",
tiny_render.UnorderedList(
[
"world",
["and more:", tiny_render.UnorderedList(["w o r l d"])],
"world2",
]
),
]
self.assertEqual(
tiny_render.render_text_pieces(pieces),
"\n".join(
(
"hello:",
" - world",
" - and more:",
" - w o r l d",
" - world2",
)
),
)
self.assertEqual(
tiny_render.render_html_pieces(pieces),
"\n".join(
(
"hello:<ul>",
"<li>world</li>",
"<li>and more:<ul>",
"<li>w o r l d</li>",
"</ul>",
"</li>",
"<li>world2</li>",
"</ul>",
"",
)
),
)
def test_switch(self):
pieces = ["hello ", tiny_render.Switch(text="text", html="html")]
self.assertEqual(tiny_render.render_text_pieces(pieces), "hello text")
self.assertEqual(tiny_render.render_html_pieces(pieces), "hello html")
def test_golden(self):
pieces = [
"hello",
tiny_render.UnorderedList(
[
tiny_render.Switch(
text="text", html=tiny_render.Bold("html")
),
"the",
tiny_render.Bold("sun"),
]
),
tiny_render.line_break,
["is", " out!"],
]
self.assertEqual(
tiny_render.render_text_pieces(pieces),
"\n".join(
(
"hello",
" - text",
" - the",
" - **sun**",
"is out!",
)
),
)
self.assertEqual(
tiny_render.render_html_pieces(pieces),
"\n".join(
(
"hello<ul>",
"<li><b>html</b></li>",
"<li>the</li>",
"<li><b>sun</b></li>",
"</ul>",
"<br />",
"is out!",
)
),
)
if __name__ == "__main__":
unittest.main()