eris/tests/fill3_test.py

136 lines
6 KiB
Python
Raw Normal View History

#!/usr/bin/env python3.7
2015-12-14 18:03:11 +00:00
# -*- coding: utf-8 -*-
2019-02-04 11:48:47 +10:00
# Copyright (C) 2015-2019 Andrew Hamilton. All rights reserved.
2015-12-14 18:03:11 +00:00
# Licensed under the Artistic License 2.0.
import unittest
2018-09-17 23:59:38 +10:00
import eris.fill3 as fill3
2015-12-14 18:03:11 +00:00
class WidgetTests(unittest.TestCase):
2016-02-19 09:20:33 +00:00
TEXT_A = fill3.Text("A")
TEXT_B = fill3.Text("B")
2015-12-14 18:03:11 +00:00
def assert_string(self, appearance, expected_string):
2016-02-19 09:20:33 +00:00
self.assertEqual(str(fill3.join("\n", appearance)), expected_string)
2015-12-14 18:03:11 +00:00
def test_rows_widget(self):
2016-02-19 09:20:33 +00:00
rows = fill3.Row([self.TEXT_A, self.TEXT_B])
2015-12-14 18:03:11 +00:00
self.assert_string(rows.appearance_min(), "AB")
2016-02-19 09:20:33 +00:00
rows = fill3.Row([fill3.Filler(self.TEXT_A),
fill3.Filler(self.TEXT_B)])
2015-12-14 18:03:11 +00:00
self.assert_string(rows.appearance((4, 1)), "A B ")
def test_columns_widget(self):
2016-02-19 09:20:33 +00:00
columns = fill3.Column([self.TEXT_A, self.TEXT_B])
2015-12-14 18:03:11 +00:00
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"
2016-02-19 09:20:33 +00:00
self.assert_string(fill3.Text(text).appearance_min(), "foo\n"
"bar")
2015-12-14 18:03:11 +00:00
def test_portal_widget(self):
2016-02-19 09:20:33 +00:00
row = fill3.Row([fill3.Text("foo"), fill3.Text("bar")])
portal = fill3.Portal(row, (1, 0))
2015-12-14 18:03:11 +00:00
self.assert_string(portal.appearance((5, 1)), "oobar")
portal.position = (0, 10)
self.assert_string(portal.appearance((1, 1)), " ")
def test_border_widget(self):
2016-02-19 09:20:33 +00:00
contents = fill3.Filler(self.TEXT_A)
self.assert_string(fill3.Border(contents).appearance((3, 3)), "┌─┐\n"
"│A│\n"
"└─┘")
for empty_contents in [fill3.Filler(fill3.Text("")), fill3.Column([])]:
self.assert_string(fill3.Border(empty_contents).appearance((2, 2)),
2015-12-14 18:03:11 +00:00
"┌┐\n"
"└┘")
2016-02-19 09:20:33 +00:00
self.assert_string(fill3.Border(fill3.Column([])).appearance_min(),
2015-12-14 18:03:11 +00:00
"┌┐\n"
"└┘")
2016-02-19 09:20:33 +00:00
self.assert_string(fill3.Border(empty_contents).appearance((3, 3)),
2015-12-14 18:03:11 +00:00
"┌─┐\n"
"│ │\n"
"└─┘")
2016-02-19 09:20:33 +00:00
text = fill3.Text("abcdef")
self.assert_string(fill3.Border(text, title="AB").appearance((8, 3)),
2015-12-14 18:03:11 +00:00
"┌─ AB ─┐\n"
"│abcdef│\n"
"└──────┘")
self.assert_string(fill3.Border(text, title="ABC").appearance((6, 3)),
"┌ …C ┐\n"
"│abcd│\n"
"└────┘")
2015-12-14 18:03:11 +00:00
def test_placeholder_widget(self):
2016-02-19 09:20:33 +00:00
placeholder = fill3.Placeholder(self.TEXT_A)
2015-12-14 18:03:11 +00:00
self.assert_string(placeholder.appearance_min(), "A")
placeholder.widget = self.TEXT_B
self.assert_string(placeholder.appearance_min(), "B")
def assert_string2(self, appearance, expected_string):
self.assertEqual(
("\n".join(line.data for line in appearance),
2019-12-04 18:39:22 +10:00
"".join("i" if style.fg_color ==
fill3.ScrollBar.DEFAULT_BACKGROUND_COLOR else " "
for line in appearance for style in line.style)),
expected_string)
2015-12-14 18:03:11 +00:00
def test_scroll_bar(self):
scroll_bar = fill3.ScrollBar(is_horizontal=True)
2015-12-14 18:03:11 +00:00
self.assertEqual(scroll_bar.interval, (0, 0))
self.assert_string2(scroll_bar.appearance((1, 1)), (" ", "i"))
2015-12-14 18:03:11 +00:00
scroll_bar.interval = (0, 0.5)
self.assert_string2(scroll_bar.appearance((2, 1)), (" ", "i "))
2015-12-14 18:03:11 +00:00
scroll_bar.interval = (0, 0.1)
self.assert_string2(scroll_bar.appearance((2, 1)), (" ", "i "))
2015-12-14 18:03:11 +00:00
scroll_bar.interval = (0.25, 0.75)
self.assert_string2(scroll_bar.appearance((4, 1)), ("", " i "))
scroll_bar.interval = (0, 0.75)
self.assert_string2(scroll_bar.appearance((2, 1)), ("", "i "))
scroll_bar = fill3.ScrollBar(is_horizontal=False)
2015-12-14 18:03:11 +00:00
self.assertEqual(scroll_bar.interval, (0, 0))
self.assert_string2(scroll_bar.appearance((1, 1)), ("", " "))
2015-12-14 18:03:11 +00:00
scroll_bar.interval = (0, 0.5)
self.assert_string2(scroll_bar.appearance((1, 2)), ("\n"
"", " i"))
2015-12-14 18:03:11 +00:00
scroll_bar.interval = (0, 0.1)
self.assert_string2(scroll_bar.appearance((1, 2)), ("\n"
"", " i"))
2015-12-14 18:03:11 +00:00
scroll_bar.interval = (0.25, 0.75)
self.assert_string2(scroll_bar.appearance((1, 4)), (" \n"
"\n"
"\n"
"", " i"))
scroll_bar.interval = (0, 0.75)
self.assert_string2(scroll_bar.appearance((1, 2)), ("\n"
"", " i"))
2015-12-14 18:03:11 +00:00
def test_table_widget(self):
2016-02-19 09:20:33 +00:00
table = fill3.Table([])
2015-12-14 18:03:11 +00:00
self.assert_string(table.appearance_min(), "")
2016-02-19 09:20:33 +00:00
table = fill3.Table([[self.TEXT_A]])
2015-12-14 18:03:11 +00:00
self.assert_string(table.appearance_min(), "A")
2016-02-19 09:20:33 +00:00
table = fill3.Table([[self.TEXT_A, self.TEXT_B]])
2015-12-14 18:03:11 +00:00
self.assert_string(table.appearance_min(), "AB")
2016-02-19 09:20:33 +00:00
table = fill3.Table([[self.TEXT_A, self.TEXT_B],
2015-12-14 18:03:11 +00:00
[self.TEXT_B, self.TEXT_A]])
self.assert_string(table.appearance_min(), "AB\n"
"BA")
2016-02-19 09:20:33 +00:00
label_foo = fill3.Text("FOO")
table = fill3.Table([[label_foo, self.TEXT_B],
[self.TEXT_B, self.TEXT_A]])
2015-12-14 18:03:11 +00:00
self.assert_string(table.appearance_min(), "FOOB\n"
"B A")
if __name__ == "__main__":
unittest.main()