bumblebee-status/tests/core/test_module.py

186 lines
5.4 KiB
Python
Raw Normal View History

2020-06-20 14:53:44 +02:00
import pytest
import sys
import shlex
import core.module
import core.widget
import core.config
2020-05-16 11:55:25 +02:00
import core.input
2020-06-20 14:53:44 +02:00
@pytest.fixture(autouse=True)
def clear_events():
core.event.clear()
@pytest.fixture
def empty_config():
return core.config.Config([])
@pytest.fixture
def widget_a():
return core.widget.Widget("randomwWidget content", name="A")
@pytest.fixture
def widget_b():
return core.widget.Widget("another randomwWidget content", name="B")
class SampleModule(core.module.Module):
def update(self):
if self.fail:
raise Exception(self.error)
pass
2020-06-20 14:53:44 +02:00
def test_loadinvalid_module(mocker):
config = mocker.MagicMock()
module = core.module.load(module_name="i-do-not-exist", config=config)
assert module.__class__.__module__ == "core.module"
assert module.__class__.__name__ == "Error"
@pytest.mark.skipif(
sys.version_info.major == 3 and sys.version_info.minor in [4, 5],
reason="importlib error reporting in Python 3.{4,5} different",
)
def test_importerror(mocker):
importlib = mocker.patch("core.module.importlib")
importlib.import_module.side_effect = ImportError("some-error")
config = mocker.MagicMock()
module = core.module.load(module_name="test", config=config)
assert module.__class__.__name__ == "Error"
assert module.widget().full_text() == "test: some-error" or
module.widget().full_text() == "test: unable to load module"
2020-06-20 14:53:44 +02:00
def test_loadvalid_module():
module = core.module.load(module_name="test")
assert module.__class__.__module__ == "modules.core.test"
assert module.__class__.__name__ == "Module"
assert module.state(None) == []
def test_empty_widgets():
module = core.module.Module(widgets=[])
assert module.widgets() == []
def test_error_widget():
cfg = core.config.Config(shlex.split("-p test_module.foo=5"))
module = core.module.Error("test-mod", "xyz", config=cfg)
full_text = module.full_text(module.widget())
assert module.state(None) == ["critical"]
assert "test-mod" in full_text
assert "xyz" in full_text
def test_single_widget(widget_a):
module = core.module.Module(widgets=widget_a)
assert module.widgets() == [widget_a]
def test_widget_list(widget_a, widget_b):
module = core.module.Module(widgets=[widget_a, widget_b])
assert module.widgets() == [widget_a, widget_b]
def test_module_Name():
module = SampleModule()
assert module.name == "test_module"
assert module.module_name == "test_module"
def testvalid_parameter():
cfg = core.config.Config(shlex.split("-p test_module.foo=5"))
module = SampleModule(config=cfg)
assert module.parameter("foo") == "5"
def test_default_parameter(empty_config):
module = SampleModule(config=empty_config)
assert module.parameter("foo", "default") == "default"
def test_default_is_none(empty_config):
module = SampleModule(config=empty_config)
assert module.parameter("foo") == None
def test_error_widget(empty_config):
module = SampleModule(config=empty_config)
module.fail = True
module.error = "!!"
module.update_wrapper()
assert len(module.widgets()) == 1
assert module.widget().full_text() == "error: !!"
def test_get_widget_by_name(empty_config, widget_a, widget_b):
module = SampleModule(config=empty_config, widgets=[widget_a, widget_b])
assert module.widget(widget_a.name) == widget_a
assert module.widget(widget_b.name) == widget_b
assert module.widget("i-do-not-exist") == None
assert module.widget() == widget_a
def test_get_widget_by_id(empty_config, widget_a, widget_b):
module = SampleModule(config=empty_config, widgets=[widget_a, widget_b])
assert module.widget(widget_id=widget_a.id) == widget_a
assert module.widget(widget_id=widget_b.id) == widget_b
assert module.widget(widget_id="i-do-not-exist") == None
2020-06-20 14:53:44 +02:00
def test_default_thresholds(empty_config, widget_a, widget_b):
module = SampleModule(config=empty_config, widgets=[widget_a, widget_b])
assert module.threshold_state(100, 80, 99) == "critical"
assert module.threshold_state(100, 80, 100) == "warning"
assert module.threshold_state(81, 80, 100) == "warning"
assert module.threshold_state(80, 80, 100) == None
assert module.threshold_state(10, 80, 100) == None
def test_configured_callbacks(mocker, empty_config, widget_a, widget_b):
module = SampleModule(config=empty_config, widgets=[widget_a, widget_b])
cmd = "sample-tool arg1 arg2 arg3"
module.set("left-click", cmd)
module.register_callbacks()
cli = mocker.patch("core.input.util.cli")
cli.execute.return_value = ""
core.input.trigger(
{"button": core.input.LEFT_MOUSE, "instance": module.id,}
)
cli.execute.assert_called_once_with(cmd, wait=False, shell=True)
def test_configured_callbacks_with_parameters(mocker, empty_config, widget_a):
module = SampleModule(config=empty_config, widgets=[widget_a])
cmd = "sample-tool {instance} {name}"
module.set("left-click", cmd)
module.register_callbacks()
cli = mocker.patch("core.input.util.cli")
cli.execute.return_value = ""
core.input.trigger(
{"button": core.input.LEFT_MOUSE, "instance": module.id, "name": "sample-name",}
)
cli.execute.assert_called_once_with(
cmd.format(instance=module.id, name="sample-name"), wait=False, shell=True,
)
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4