eris/fill3_test.py

133 lines
5.8 KiB
Python
Executable file

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (C) 2015-2016 Andrew Hamilton. All rights reserved.
# Licensed under the Artistic License 2.0.
import unittest
import fill3 as fill
# import pygments.lexers
# import pygments.styles.default
# import pygments.styles.emacs
class WidgetTests(unittest.TestCase):
TEXT_A = fill.Text("A")
TEXT_B = fill.Text("B")
def assert_string(self, appearance, expected_string):
self.assertEqual(str(fill.join("\n", appearance)), expected_string)
def test_rows_widget(self):
rows = fill.Row([self.TEXT_A, self.TEXT_B])
self.assert_string(rows.appearance_min(), "AB")
rows = fill.Row([fill.Filler(self.TEXT_A),
fill.Filler(self.TEXT_B)])
self.assert_string(rows.appearance((4, 1)), "A B ")
def test_columns_widget(self):
columns = fill.Column([self.TEXT_A, self.TEXT_B])
self.assert_string(columns.appearance_min(), "A\n"
"B")
def test_text_widget(self):
self.assert_string(self.TEXT_A.appearance_min(), "A")
text = "foo\nbar"
self.assert_string(fill.Text(text).appearance_min(), "foo\n"
"bar")
def test_portal_widget(self):
row = fill.Row([fill.Text("foo"), fill.Text("bar")])
portal = fill.Portal(row, (1, 0))
self.assert_string(portal.appearance((5, 1)), "oobar")
portal.position = (0, 10)
self.assert_string(portal.appearance((1, 1)), " ")
def test_border_widget(self):
contents = fill.Filler(self.TEXT_A)
self.assert_string(fill.Border(contents).appearance((3, 3)), "┌─┐\n"
"│A│\n"
"└─┘")
for empty_contents in [fill.Filler(fill.Text("")), fill.Column([])]:
self.assert_string(fill.Border(empty_contents).appearance((2, 2)),
"┌┐\n"
"└┘")
self.assert_string(fill.Border(fill.Column([])).appearance_min(),
"┌┐\n"
"└┘")
self.assert_string(fill.Border(empty_contents).appearance((3, 3)),
"┌─┐\n"
"│ │\n"
"└─┘")
text = fill.Text("abcdef")
self.assert_string(fill.Border(text, title="AB").appearance((8, 3)),
"┌─ AB ─┐\n"
"│abcdef│\n"
"└──────┘")
# def test_pygments_widget(self):
# text = "print('hello world')"
# tokens = pygments.lex(text, pygments.lexers.PythonLexer())
# code = fill.Code(tokens, pygments.styles.default.DefaultStyle)
# self.assert_string(code.appearance_min(),
# "\x1b[1m\x1b[38;2;0;128;0m\x1b[48;2;248;248;248m"
# "print\x1b(B\x1b[m\x1b[315m\x1b[48;2;248;248;248m"
# "(\x1b(B\x1b[m\x1b[38;2;186;33;33m\x1b[48;2;248;248;248m"
# "'hello world'\x1b(B\x1b[m\x1b[315m\x1b[48;2;248;248;248m"
# ")\x1b(B\x1b[m\x1b[315m\x1b[40m\n\x1b(B\x1b[m\x1b[31m"
# "\x1b[48;2;248;248;248m \x1b[0m")
def test_placeholder_widget(self):
placeholder = fill.Placeholder(self.TEXT_A)
self.assert_string(placeholder.appearance_min(), "A")
placeholder.widget = self.TEXT_B
self.assert_string(placeholder.appearance_min(), "B")
def test_scroll_bar(self):
scroll_bar = fill.ScrollBar(is_horizontal=True, bar_char="#")
self.assertEqual(scroll_bar.interval, (0, 0))
self.assert_string(scroll_bar.appearance((1, 1)), "#")
scroll_bar.interval = (0, 0.5)
self.assert_string(scroll_bar.appearance((2, 1)), "# ")
scroll_bar.interval = (0, 0.1)
self.assert_string(scroll_bar.appearance((2, 1)), "# ")
scroll_bar.interval = (0.25, 0.75)
self.assert_string(scroll_bar.appearance((4, 1)), " ## ")
scroll_bar = fill.ScrollBar(is_horizontal=False, bar_char="#")
self.assertEqual(scroll_bar.interval, (0, 0))
self.assert_string(scroll_bar.appearance((1, 1)), "#")
scroll_bar.interval = (0, 0.5)
self.assert_string(scroll_bar.appearance((1, 2)), "#\n"
" ")
scroll_bar.interval = (0, 0.1)
self.assert_string(scroll_bar.appearance((1, 2)), "#\n"
" ")
scroll_bar.interval = (0.25, 0.75)
self.assert_string(scroll_bar.appearance((1, 4)), " \n"
"#\n"
"#\n"
" ")
def test_table_widget(self):
table = fill.Table([])
self.assert_string(table.appearance_min(), "")
table = fill.Table([[self.TEXT_A]])
self.assert_string(table.appearance_min(), "A")
table = fill.Table([[self.TEXT_A, self.TEXT_B]])
self.assert_string(table.appearance_min(), "AB")
table = fill.Table([[self.TEXT_A, self.TEXT_B],
[self.TEXT_B, self.TEXT_A]])
self.assert_string(table.appearance_min(), "AB\n"
"BA")
label_foo = fill.Text("FOO")
table = fill.Table([[label_foo, self.TEXT_B],
[self.TEXT_B, self.TEXT_A]])
self.assert_string(table.appearance_min(), "FOOB\n"
"B A")
if __name__ == "__main__":
unittest.main()