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
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()
|