| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # Copyright 2020 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Tests for tiny_render.""" |
| |
| from __future__ import print_function |
| |
| 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() |