You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
5.1 KiB
201 lines
5.1 KiB
#!/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()
|