| #!/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() |