[tests] switch to pytest

This commit is contained in:
Tobias Witek 2020-06-20 14:53:44 +02:00
parent b2e92d816d
commit 39fa7788b4
37 changed files with 1009 additions and 2259 deletions

View file

@ -1,162 +1,173 @@
import json
import unittest
import pytest
import core.event
import core.config
import core.output
import core.module
class TestModule(core.module.Module):
class SampleModule(core.module.Module):
pass
@pytest.fixture(autouse=True)
def clear_events():
core.event.clear()
class i3(unittest.TestCase):
def setUp(self):
self.i3 = core.output.i3()
widget = unittest.mock.MagicMock()
widget.full_text.return_value = "test"
self.someModule = TestModule(
config=core.config.Config([]), widgets=[widget, widget, widget]
)
self.paddedTheme = core.theme.Theme(raw_data={"defaults": {"padding": " "}})
self.separator = "***"
self.separatorTheme = core.theme.Theme(
raw_data={
"defaults": {"separator": self.separator, "fg": "red", "bg": "blue"}
}
)
self.someBlock = core.output.block(
theme=self.separatorTheme,
module=self.someModule,
widget=self.someModule.widget(),
)
@pytest.fixture
def i3():
return core.output.i3()
def test_start(self):
core.event.clear()
@pytest.fixture
def module_a(mocker):
widget = mocker.MagicMock()
widget.full_text.return_value = "test"
return SampleModule(
config=core.config.Config([]), widgets=[widget, widget, widget]
)
all_data = self.i3.start()
data = all_data["blocks"]
self.assertEqual(1, data["version"], "i3bar protocol version 1 expected")
self.assertTrue(data["click_events"], "click events should be enabled")
self.assertEqual("\n[", all_data["suffix"])
@pytest.fixture
def paddedTheme():
return core.theme.Theme(raw_data={"defaults": {"padding": " "}})
def test_stop(self):
self.assertEqual(
"\n]", self.i3.stop()["suffix"], "wrong i3bar protocol during stop"
)
@pytest.fixture
def separatorTheme():
return core.theme.Theme(
raw_data={
"defaults": {"separator": "***", "fg": "red", "bg": "blue"}
}
)
def test_no_modules_by_default(self):
self.assertEqual(
0, len(self.i3.modules()), "module list should be empty by default"
)
@pytest.fixture
def block_a(separatorTheme, module_a):
return core.output.block(
theme=separatorTheme,
module=module_a,
widget=module_a.widget(),
)
def test_register_single_module(self):
self.i3.modules(self.someModule)
self.assertEqual(
1, len(self.i3.modules()), "setting single module does not work"
)
#def setUp(self):
# self.i3 = core.output.i3()
# widget = unittest.mock.MagicMock()
# widget.full_text.return_value = "test"
# self.someModule = SampleModule(
# config=core.config.Config([]), widgets=[widget, widget, widget]
# )
# self.separator = "***"
#
def test_start(i3):
all_data = i3.start()
data = all_data["blocks"]
def test_register_multiple_modules(self):
self.i3.modules([self.someModule, self.someModule, self.someModule])
self.assertEqual(3, len(self.i3.modules()), "setting module list does not work")
assert data["version"] == 1
assert data["click_events"] == True
assert all_data["suffix"] == "\n["
def test_draw_existing_module(self):
self.i3.test_draw = unittest.mock.MagicMock(
return_value={"blocks": {"test": True}, "suffix": "end"}
)
self.i3.draw("test_draw")
self.i3.test_draw.assert_called_once_with()
def test_stop(i3):
assert i3.stop()["suffix"] == "\n]"
def test_empty_status_line(self):
data = self.i3.statusline()
self.assertEqual(
[], data["blocks"], "expected empty list of status line entries"
)
self.assertEqual(",", data["suffix"], 'expected "," as suffix')
def test_no_modules_by_default(i3):
assert i3.modules() == []
def test_statusline(self):
self.i3.modules([self.someModule, self.someModule, self.someModule])
self.i3.update()
data = self.i3.statusline()
self.assertEqual(
len(self.someModule.widgets()) * 3,
len(data["blocks"]),
"wrong number of widgets",
)
def test_register_single_module(i3, module_a):
i3.modules(module_a)
def test_padding(self):
self.i3.theme(self.paddedTheme)
blk = core.output.block(
self.i3.theme(), self.someModule, self.someModule.widget()
)
blk.set("full_text", "abc")
result = blk.dict()["full_text"]
self.assertEqual(" abc ", result)
assert i3.modules() == [module_a]
def test_no_separator(self):
result = self.i3.separator_block(self.someModule, self.someModule.widget())
self.assertEqual([], result)
def test_register_multiple_modules(i3, module_a):
i3.modules([module_a, module_a, module_a])
assert i3.modules() == [module_a, module_a, module_a]
def test_separator(self):
self.i3.theme(self.separatorTheme)
result = self.i3.separator_block(self.someModule, self.someModule.widget())
self.assertEqual(1, len(result))
self.assertEqual("***", result[0].dict()["full_text"])
self.assertTrue(result[0].dict().get("_decorator", False))
self.assertEqual(
self.separatorTheme.get("bg", self.someModule.widget()),
result[0].dict()["color"],
)
def test_draw_existing_module(mocker, i3):
i3.test_draw = mocker.MagicMock(
return_value={"blocks": {"test": True}, "suffix": "end"}
)
i3.draw("test_draw")
i3.test_draw.assert_called_once_with()
def test_dump_json(self):
obj = unittest.mock.MagicMock()
obj.dict = unittest.mock.MagicMock()
core.output.dump_json(obj)
obj.dict_assert_called_once_with()
def test_empty_status_line(i3):
data = i3.statusline()
def test_assign(self):
src = {"a": "x", "b": "y", "c": "z"}
dst = {}
assert data["blocks"] == []
assert data["suffix"] == ","
core.output.assign(src, dst, "a")
self.assertEqual(dst["a"], src["a"])
def test_statusline(i3, module_a):
i3.modules([module_a, module_a, module_a])
i3.update()
data = i3.statusline()
assert len(data["blocks"]) == len(module_a.widgets())*3
core.output.assign(src, dst, "123", "b")
self.assertEqual(dst["123"], src["b"])
def test_padding(i3, paddedTheme, module_a):
i3.theme(paddedTheme)
blk = core.output.block(
i3.theme(), module_a, module_a.widget()
)
blk.set("full_text", "abc")
result = blk.dict()["full_text"]
assert result == " abc "
core.output.assign(src, dst, "blub", default="def")
self.assertEqual("def", dst["blub"])
def test_no_separator(i3, module_a):
result = i3.separator_block(module_a, module_a.widget())
assert result == []
def test_pango_detection(self):
self.assertFalse(self.someBlock.is_pango({}))
self.assertTrue(self.someBlock.is_pango({"pango": {}}))
def test_separator(i3, separatorTheme, module_a):
i3.theme(separatorTheme)
result = i3.separator_block(module_a, module_a.widget())
def test_pangoize(self):
self.assertEqual("test", self.someBlock.pangoize("test"))
self.assertFalse("markup" in self.someBlock.dict())
assert len(result) == 1
assert result[0].dict()["full_text"] == "***"
assert result[0].dict().get("_decorator") == True
assert result[0].dict()["color"] == separatorTheme.get("bg", module_a.widget())
pango = self.someBlock.pangoize(
{"pango": {"attr": "blub", "x": "y", "full_text": "test"}}
)
self.assertTrue('attr="blub"' in pango)
self.assertTrue('x="y"' in pango)
self.assertTrue("<span " in pango)
self.assertTrue(">test</span>" in pango)
self.assertEqual("pango", self.someBlock.dict()["markup"])
def test_dump_json(mocker):
obj = mocker.MagicMock()
obj.dict = mocker.MagicMock()
core.output.dump_json(obj)
obj.dict_assert_called_once_with()
def test_padding(self):
self.someBlock.set("padding", "***")
self.someBlock.set("full_text", "test")
def test_assign():
src = {"a": "x", "b": "y", "c": "z"}
dst = {}
self.assertEqual("***test***", self.someBlock.dict()["full_text"])
core.output.assign(src, dst, "a")
assert src["a"] == dst["a"]
def test_pre_suffix(self):
self.someBlock.set("padding", "*")
self.someBlock.set("prefix", "pre")
self.someBlock.set("suffix", "suf")
self.someBlock.set("full_text", "test")
core.output.assign(src, dst, "123", "b")
assert src["b"] == dst["123"]
self.assertEqual("*pre*test*suf*", self.someBlock.dict()["full_text"])
core.output.assign(src, dst, "blub", default="def")
assert dst["blub"] == "def"
def test_pango_detection(block_a):
assert block_a.is_pango({}) == False
assert block_a.is_pango({ "pango": {} }) == True
def test_pangoize(block_a):
assert block_a.pangoize("test") == "test"
assert not "markup" in block_a.dict()
pango = block_a.pangoize(
{"pango": {"attr": "blub", "x": "y", "full_text": "test"}}
)
assert 'attr="blub"' in pango
assert 'x="y"' in pango
assert "<span " in pango
assert ">test</span>" in pango
assert block_a.dict()["markup"] == "pango"
def test_padding(block_a):
block_a.set("padding", "***")
block_a.set("full_text", "test")
assert block_a.dict()["full_text"] == "***test***"
def test_pre_suffix(block_a):
block_a.set("padding", "*")
block_a.set("prefix", "pre")
block_a.set("suffix", "suf")
block_a.set("full_text", "test")
assert block_a.dict()["full_text"] == "*pre*test*suf*"
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4