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.

178 lines
4.1 KiB

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