bumblebee-status/tests/test_i3baroutput.py

140 lines
5 KiB
Python
Raw Normal View History

# pylint: disable=C0103,C0111
import json
import mock
import unittest
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
import tests.mocks as mocks
from bumblebee.output import I3BarOutput
class TestI3BarOutput(unittest.TestCase):
def setUp(self):
self.theme = mock.Mock()
self.theme.separator_fg.return_value = "#123456"
self.theme.separator_bg.return_value = "#000000"
self.theme.separator.return_value = ""
self.theme.prefix.return_value = ""
self.theme.suffix.return_value = ""
self.theme.separator_block_width.return_value = 1
self.theme.fg.return_value = "#ababab"
self.theme.bg.return_value = "#ababab"
self.theme.align.return_value = None
self.theme.minwidth.return_value = ""
self.theme.default_separators.return_value = False
self.config = mock.Mock()
self.config.markup.return_value = ""
self.config.unused_keys.return_value = []
self.output = I3BarOutput(self.theme, self.config)
self._stdout = mock.patch("bumblebee.output.sys.stdout", new_callable=StringIO)
self.stdout = self._stdout.start()
self.anyWidget = mocks.MockWidget("some text")
self.anyModule = mock.Mock()
self.anyModule.id = mocks.rand(10)
self.anyModule.name = mocks.rand(10)
self.expectedStart = json.dumps({"version": 1, "click_events": True}) + "\n[\n"
self.expectedStop = "]\n"
self.anyColor = "#ffffff"
self.anotherColor = "#cdcdcd"
def tearDown(self):
self._stdout.stop()
def test_start(self):
self.output.start()
self.assertEquals(self.expectedStart, self.stdout.getvalue())
def test_stop(self):
self.output.stop()
self.assertEquals(self.expectedStop, self.stdout.getvalue())
def test_draw_single_widget(self):
self.output.draw(self.anyWidget, self.anyModule)
self.output.flush()
result = json.loads(self.stdout.getvalue())[0]
self.assertEquals(result["full_text"], self.anyWidget.full_text())
def test_draw_multiple_widgets(self):
for i in range(4):
self.output.draw(self.anyWidget, self.anyModule)
self.output.flush()
result = json.loads(self.stdout.getvalue())
for res in result:
self.assertEquals(res["full_text"], self.anyWidget.full_text())
def test_begin(self):
self.output.begin()
self.assertEquals("", self.stdout.getvalue())
def test_end(self):
self.output.end()
self.assertEquals(",\n", self.stdout.getvalue())
def test_prefix(self):
self.theme.prefix.return_value = " - "
self.output.draw(self.anyWidget, self.anyModule)
self.output.flush()
result = json.loads(self.stdout.getvalue())[0]
self.assertEquals(result["full_text"], " - {}".format(self.anyWidget.full_text()))
def test_suffix(self):
self.theme.suffix.return_value = " - "
self.output.draw(self.anyWidget, self.anyModule)
self.output.flush()
result = json.loads(self.stdout.getvalue())[0]
self.assertEquals(result["full_text"], "{} - ".format(self.anyWidget.full_text()))
def test_bothfix(self):
self.theme.prefix.return_value = "*"
self.theme.suffix.return_value = " - "
self.output.draw(self.anyWidget, self.anyModule)
self.output.flush()
result = json.loads(self.stdout.getvalue())[0]
self.assertEquals(result["full_text"], "*{} - ".format(self.anyWidget.full_text()))
def test_colors(self):
self.theme.fg.return_value = self.anyColor
self.theme.bg.return_value = self.anotherColor
self.output.draw(self.anyWidget, self.anyModule)
self.output.flush()
result = json.loads(self.stdout.getvalue())[0]
self.assertEquals(result["color"], self.anyColor)
self.assertEquals(result["background"], self.anotherColor)
def test_widget_link(self):
self.anyWidget.link_module(self.anyModule)
self.assertEquals(self.anyWidget._module, self.anyModule)
self.assertEquals(self.anyWidget.module, self.anyModule.name)
def test_unlinked_widget_state(self):
state = self.anyWidget.state()
self.assertTrue(type(state) == list)
def test_linked_widget_state(self):
self.anyWidget.link_module(self.anyModule)
for lst in [ "samplestate", ["a", "b", "c"], [] ]:
self.anyModule.state.return_value = lst
state = self.anyWidget.state()
self.assertEquals(type(state), list)
if type(lst) is not list: lst = [lst]
self.assertEquals(state, lst)
def test_widget_fulltext(self):
self.anyWidget.full_text("some text")
self.assertEquals(self.anyWidget.full_text(), "some text")
self.anyWidget.full_text(lambda x: "callable fulltext")
self.assertEquals(self.anyWidget.full_text(), "callable fulltext")
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4