[formatting] reformat using "black -t py34"

getting rid of thinking about consistent formatting...
This commit is contained in:
tobi-wan-kenobi 2020-05-03 11:15:52 +02:00
parent fa98bcbdd1
commit 30c1f712a6
119 changed files with 3961 additions and 3495 deletions

View file

@ -3,74 +3,83 @@ import unittest
import core.config
class config(unittest.TestCase):
def setUp(self):
self.someModules = [ 'b', 'x', 'a' ]
self.moreModules = [ 'this', 'module', 'here' ]
self.someTheme = 'some-theme'
self.someIconset = 'some-iconset'
self.someModules = ["b", "x", "a"]
self.moreModules = ["this", "module", "here"]
self.someTheme = "some-theme"
self.someIconset = "some-iconset"
self.defaultConfig = core.config.Config([])
def test_module(self):
cfg = core.config.Config([ '-m' ] + self.someModules)
cfg = core.config.Config(["-m"] + self.someModules)
self.assertEqual(self.someModules, cfg.modules())
def test_module_ordering_maintained(self):
cfg = core.config.Config([ '-m' ] + self.someModules + [ '-m' ] + self.moreModules)
cfg = core.config.Config(["-m"] + self.someModules + ["-m"] + self.moreModules)
self.assertEqual(self.someModules + self.moreModules, cfg.modules())
def test_default_interval(self):
self.assertEqual(1, self.defaultConfig.interval())
def test_interval(self):
cfg = core.config.Config([ '-p', 'interval=4'])
cfg = core.config.Config(["-p", "interval=4"])
self.assertEqual(4, cfg.interval())
def test_float_interval(self):
cfg = core.config.Config([ '-p', 'interval=0.5'])
cfg = core.config.Config(["-p", "interval=0.5"])
self.assertEqual(0.5, cfg.interval())
def test_default_theme(self):
self.assertEqual('default', self.defaultConfig.theme())
self.assertEqual("default", self.defaultConfig.theme())
def test_theme(self):
cfg = core.config.Config(['-t', self.someTheme])
cfg = core.config.Config(["-t", self.someTheme])
self.assertEqual(self.someTheme, cfg.theme())
def test_default_iconset(self):
self.assertEqual('auto', self.defaultConfig.iconset())
self.assertEqual("auto", self.defaultConfig.iconset())
def test_iconset(self):
cfg = core.config.Config(['-i', self.someIconset])
cfg = core.config.Config(["-i", self.someIconset])
self.assertEqual(self.someIconset, cfg.iconset())
def test_right_to_left(self):
cfg = core.config.Config(['-r'])
cfg = core.config.Config(["-r"])
self.assertTrue(cfg.reverse())
self.assertFalse(self.defaultConfig.reverse())
def test_logfile(self):
cfg = core.config.Config(['-f', 'my-custom-logfile'])
cfg = core.config.Config(["-f", "my-custom-logfile"])
self.assertEquals(None, self.defaultConfig.logfile())
self.assertEquals('my-custom-logfile', cfg.logfile())
self.assertEquals("my-custom-logfile", cfg.logfile())
def test_all_modules(self):
modules = core.config.all_modules()
self.assertGreater(len(modules), 0)
for module in modules:
pyname = '{}.py'.format(module)
base = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', '..', 'modules'))
self.assertTrue(os.path.exists(os.path.join(base, 'contrib', pyname)) or os.path.exists(os.path.join(base, 'core', pyname)))
pyname = "{}.py".format(module)
base = os.path.abspath(
os.path.join(
os.path.dirname(os.path.realpath(__file__)), "..", "..", "modules"
)
)
self.assertTrue(
os.path.exists(os.path.join(base, "contrib", pyname))
or os.path.exists(os.path.join(base, "core", pyname))
)
def test_list_output(self):
with unittest.mock.patch('core.config.sys') as sys:
cfg = core.config.Config([ '-l', 'themes' ])
cfg = core.config.Config([ '-l', 'modules' ])
cfg = core.config.Config([ '-l', 'modules-markdown' ])
with unittest.mock.patch("core.config.sys") as sys:
cfg = core.config.Config(["-l", "themes"])
cfg = core.config.Config(["-l", "modules"])
cfg = core.config.Config(["-l", "modules-markdown"])
# TODO: think of some plausibility testing here
def test_missing_parameter(self):
cfg = core.config.Config([ '-p', 'test.key' ])
self.assertEqual('no-value-set', cfg.get('test.key', 'no-value-set'))
cfg = core.config.Config(["-p", "test.key"])
self.assertEqual("no-value-set", cfg.get("test.key", "no-value-set"))
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -5,59 +5,62 @@ import core.widget
import core.module
import core.config
class TestModule(core.module.Module):
def __init__(self, config=None, theme=None):
config = core.config.Config([])
super().__init__(config, theme, core.widget.Widget(self.get))
self.text = ''
self.text = ""
@core.decorators.scrollable
def get(self, widget):
return self.text
class config(unittest.TestCase):
def setUp(self):
self.module = TestModule()
self.widget = self.module.widget()
self.width = 10
self.module.set('width', self.width)
self.module.set("width", self.width)
def test_no_text(self):
self.assertEqual('', self.module.text)
self.assertEqual('', self.module.get(self.widget))
self.assertEqual("", self.module.text)
self.assertEqual("", self.module.get(self.widget))
def test_smaller(self):
self.module.text = 'test'
self.module.text = "test"
self.assertLess(len(self.module.text), self.width)
self.assertEqual('test', self.module.get(self.widget))
self.assertEqual("test", self.module.get(self.widget))
def test_bigger(self):
self.module.text = 'abcdefghijklmnopqrst'
self.module.text = "abcdefghijklmnopqrst"
self.assertGreater(len(self.module.text), self.width)
self.assertEqual(self.module.text[:self.width], self.module.get(self.widget))
self.assertEqual(self.module.text[: self.width], self.module.get(self.widget))
def test_bounce(self):
self.module.text = 'abcd'
self.module.set('width', 2)
self.assertEqual('ab', self.module.get(self.widget))
self.assertEqual('bc', self.module.get(self.widget))
self.assertEqual('cd', self.module.get(self.widget))
self.assertEqual('bc', self.module.get(self.widget))
self.assertEqual('ab', self.module.get(self.widget))
self.assertEqual('bc', self.module.get(self.widget))
self.assertEqual('cd', self.module.get(self.widget))
self.assertEqual('bc', self.module.get(self.widget))
self.assertEqual('ab', self.module.get(self.widget))
self.module.text = "abcd"
self.module.set("width", 2)
self.assertEqual("ab", self.module.get(self.widget))
self.assertEqual("bc", self.module.get(self.widget))
self.assertEqual("cd", self.module.get(self.widget))
self.assertEqual("bc", self.module.get(self.widget))
self.assertEqual("ab", self.module.get(self.widget))
self.assertEqual("bc", self.module.get(self.widget))
self.assertEqual("cd", self.module.get(self.widget))
self.assertEqual("bc", self.module.get(self.widget))
self.assertEqual("ab", self.module.get(self.widget))
def test_nobounce(self):
self.module.set('scrolling.bounce', False)
self.module.text = 'abcd'
self.module.set('width', 2)
self.assertEqual('ab', self.module.get(self.widget))
self.assertEqual('bc', self.module.get(self.widget))
self.assertEqual('cd', self.module.get(self.widget))
self.assertEqual('ab', self.module.get(self.widget))
self.assertEqual('bc', self.module.get(self.widget))
self.assertEqual('cd', self.module.get(self.widget))
self.module.set("scrolling.bounce", False)
self.module.text = "abcd"
self.module.set("width", 2)
self.assertEqual("ab", self.module.get(self.widget))
self.assertEqual("bc", self.module.get(self.widget))
self.assertEqual("cd", self.module.get(self.widget))
self.assertEqual("ab", self.module.get(self.widget))
self.assertEqual("bc", self.module.get(self.widget))
self.assertEqual("cd", self.module.get(self.widget))
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -2,25 +2,26 @@ import unittest
import core.event
class event(unittest.TestCase):
def setUp(self):
self.someEvent = 'event'
self.someEvent = "event"
self.called = {}
self.params = []
core.event.clear()
def callback1(self):
self.called['callback1'] = True
self.called["callback1"] = True
def callback2(self):
self.called['callback2'] = True
self.called["callback2"] = True
def callback_args(self, val1, val2):
self.called['callback_args'] = True
self.called["callback_args"] = True
self.params = [val1, val2]
def callback_kwargs(self, val1, val2, key1=None, key2=None):
self.called['callback_kwargs'] = True
self.called["callback_kwargs"] = True
self.params = [val1, val2, key1, key2]
def test_simple_callback(self):
@ -32,27 +33,30 @@ class event(unittest.TestCase):
self.assertEqual(2, len(self.called.keys()))
def test_arg_callback(self):
core.event.register(self.someEvent, self.callback_args, 'a', 'b')
core.event.register(self.someEvent, self.callback_args, "a", "b")
core.event.trigger(self.someEvent)
self.assertEqual(1, len(self.called.keys()))
self.assertEqual(['a', 'b'], self.params)
self.assertEqual(["a", "b"], self.params)
def test_kwargs_callback(self):
core.event.register(self.someEvent, self.callback_kwargs, 'a', 'b', key1='test', key2='x')
core.event.register(
self.someEvent, self.callback_kwargs, "a", "b", key1="test", key2="x"
)
core.event.trigger(self.someEvent)
self.assertEqual(1, len(self.called.keys()))
self.assertEqual(['a', 'b', 'test', 'x'], self.params)
self.assertEqual(["a", "b", "test", "x"], self.params)
def test_arg_trigger(self):
core.event.register(self.someEvent, self.callback_args)
core.event.trigger(self.someEvent, 'a', 'b')
core.event.trigger(self.someEvent, "a", "b")
self.assertEqual(1, len(self.called.keys()))
self.assertEqual(['a', 'b'], self.params)
self.assertEqual(["a", "b"], self.params)
def test_kwargs_trigger(self):
core.event.register(self.someEvent, self.callback_kwargs)
core.event.trigger(self.someEvent, 'a', 'b', key1='test', key2='x')
core.event.trigger(self.someEvent, "a", "b", key1="test", key2="x")
self.assertEqual(1, len(self.called.keys()))
self.assertEqual(['a', 'b', 'test', 'x'], self.params)
self.assertEqual(["a", "b", "test", "x"], self.params)
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -2,31 +2,44 @@ import unittest
import core.input
class config(unittest.TestCase):
def setUp(self):
self.inputObject = core.input.Object()
self.anotherObject = core.input.Object()
self.someEvent = { 'button': core.input.LEFT_MOUSE, 'instance': self.inputObject.id }
self.anotherEvent = { 'button': core.input.RIGHT_MOUSE, 'instance': self.inputObject.id}
self.someEvent = {
"button": core.input.LEFT_MOUSE,
"instance": self.inputObject.id,
}
self.anotherEvent = {
"button": core.input.RIGHT_MOUSE,
"instance": self.inputObject.id,
}
self.callback = unittest.mock.MagicMock()
self.callback2 = unittest.mock.MagicMock()
self.someCommand = 'some sample command'
self.someCommand = "some sample command"
def test_callable_gets_called(self):
core.input.register(self.inputObject, self.someEvent['button'], self.callback)
core.input.register(self.inputObject, self.someEvent["button"], self.callback)
core.input.trigger(self.someEvent)
self.callback.assert_called_once_with(self.someEvent)
def test_nonexistent_callback(self):
core.input.register(self.inputObject, self.someEvent['button'], self.callback)
core.input.register(self.inputObject, self.someEvent["button"], self.callback)
core.input.trigger(self.anotherEvent)
self.callback.assert_not_called()
def test_different_events(self):
core.input.register(self.inputObject, self.someEvent['button'], self.callback)
core.input.register(self.inputObject, self.anotherEvent['button'], self.callback)
core.input.register(self.anotherObject, self.someEvent['button'], self.callback2)
core.input.register(self.anotherObject, self.anotherEvent['button'], self.callback2)
core.input.register(self.inputObject, self.someEvent["button"], self.callback)
core.input.register(
self.inputObject, self.anotherEvent["button"], self.callback
)
core.input.register(
self.anotherObject, self.someEvent["button"], self.callback2
)
core.input.register(
self.anotherObject, self.anotherEvent["button"], self.callback2
)
core.input.trigger(self.someEvent)
core.input.trigger(self.anotherEvent)
self.callback.assert_any_call(self.someEvent)
@ -34,35 +47,42 @@ class config(unittest.TestCase):
self.callback2.assert_not_called()
def test_multiple_registrations(self):
core.input.register(self.inputObject, self.someEvent['button'], self.callback)
core.input.register(self.inputObject, self.someEvent['button'], self.callback2)
core.input.register(self.inputObject, self.someEvent["button"], self.callback)
core.input.register(self.inputObject, self.someEvent["button"], self.callback2)
core.input.trigger(self.someEvent)
self.callback.assert_called_once_with(self.someEvent)
self.callback2.assert_called_once_with(self.someEvent)
def test_event_names(self):
self.assertEqual(core.input.button_name(core.input.LEFT_MOUSE), 'left-mouse')
self.assertEqual(core.input.button_name(core.input.RIGHT_MOUSE), 'right-mouse')
self.assertEqual(core.input.button_name(core.input.MIDDLE_MOUSE), 'middle-mouse')
self.assertEqual(core.input.button_name(core.input.WHEEL_UP), 'wheel-up')
self.assertEqual(core.input.button_name(core.input.WHEEL_DOWN), 'wheel-down')
self.assertEqual(core.input.button_name(12345), 'n/a')
self.assertEqual(core.input.button_name(core.input.LEFT_MOUSE), "left-mouse")
self.assertEqual(core.input.button_name(core.input.RIGHT_MOUSE), "right-mouse")
self.assertEqual(
core.input.button_name(core.input.MIDDLE_MOUSE), "middle-mouse"
)
self.assertEqual(core.input.button_name(core.input.WHEEL_UP), "wheel-up")
self.assertEqual(core.input.button_name(core.input.WHEEL_DOWN), "wheel-down")
self.assertEqual(core.input.button_name(12345), "n/a")
def test_non_callable_callback(self):
with unittest.mock.patch('core.input.util.cli') as cli:
cli.execute.return_value = ''
core.input.register(self.inputObject, self.someEvent['button'], self.someCommand)
with unittest.mock.patch("core.input.util.cli") as cli:
cli.execute.return_value = ""
core.input.register(
self.inputObject, self.someEvent["button"], self.someCommand
)
core.input.trigger(self.someEvent)
cli.execute.assert_called_once_with(self.someCommand, wait=False)
def test_non_existent_callback(self):
with unittest.mock.patch('core.input.util.cli') as cli:
cli.execute.return_value = ''
cli.execute.side_effect = RuntimeError('some-error')
core.input.register(self.inputObject, self.someEvent['button'], self.someCommand)
with unittest.mock.patch("core.input.util.cli") as cli:
cli.execute.return_value = ""
cli.execute.side_effect = RuntimeError("some-error")
core.input.register(
self.inputObject, self.someEvent["button"], self.someCommand
)
try:
core.input.trigger(self.someEvent)
except Exception:
self.fail('input module propagated exception')
self.fail("input module propagated exception")
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -7,91 +7,116 @@ import core.module
import core.widget
import core.config
class TestModule(core.module.Module):
def update(self):
if self.fail:
raise Exception(self.error)
pass
class module(unittest.TestCase):
def setUp(self):
self.invalidModuleName = 'invalid-module-name'
self.validModuleName = 'test'
self.someWidget = core.widget.Widget('randomeWidgetContent', name='A')
self.anotherWidget = core.widget.Widget('more Widget content', name='B')
self.unusedWidgetName = 'C'
self.invalidModuleName = "invalid-module-name"
self.validModuleName = "test"
self.someWidget = core.widget.Widget("randomeWidgetContent", name="A")
self.anotherWidget = core.widget.Widget("more Widget content", name="B")
self.unusedWidgetName = "C"
def test_loadinvalid_module(self):
config = unittest.mock.MagicMock()
module = core.module.load(module_name=self.invalidModuleName, config=config)
self.assertEqual('core.module', module.__class__.__module__, 'module must be a module object')
self.assertEqual('Error', module.__class__.__name__, 'an invalid module must be a core.module.Error')
self.assertEqual(
"core.module", module.__class__.__module__, "module must be a module object"
)
self.assertEqual(
"Error",
module.__class__.__name__,
"an invalid module must be a core.module.Error",
)
@unittest.skipIf(sys.version_info.major == 3 and sys.version_info.minor in [ 4, 5 ], 'importlib error reporting in Python 3.{4,5} different')
@unittest.skipIf(
sys.version_info.major == 3 and sys.version_info.minor in [4, 5],
"importlib error reporting in Python 3.{4,5} different",
)
def test_importerror(self):
with unittest.mock.patch('core.module.importlib') as importlib:
importlib.import_module.side_effect = ImportError('some-error')
with unittest.mock.patch("core.module.importlib") as importlib:
importlib.import_module.side_effect = ImportError("some-error")
config = unittest.mock.MagicMock()
module = core.module.load(module_name=self.validModuleName, config=config)
module.widget().full_text()
self.assertEqual('Error', module.__class__.__name__, 'an invalid module must be a core.module.Error')
self.assertEqual(module.widget().full_text(), 'test: some-error')
self.assertEqual(
"Error",
module.__class__.__name__,
"an invalid module must be a core.module.Error",
)
self.assertEqual(module.widget().full_text(), "test: some-error")
def test_loadvalid_module(self):
module = core.module.load(module_name=self.validModuleName)
self.assertEqual('modules.core.{}'.format(self.validModuleName), module.__class__.__module__, 'module must be a modules.core.<name> object')
self.assertEqual('Module', module.__class__.__name__, 'a valid module must have a Module class')
self.assertEqual([], module.state(None), 'default state of module is empty')
self.assertEqual(
"modules.core.{}".format(self.validModuleName),
module.__class__.__module__,
"module must be a modules.core.<name> object",
)
self.assertEqual(
"Module",
module.__class__.__name__,
"a valid module must have a Module class",
)
self.assertEqual([], module.state(None), "default state of module is empty")
def test_empty_widgets(self):
module = core.module.Module(widgets=[])
self.assertEqual([], module.widgets())
def test_error_widget(self):
cfg = core.config.Config(shlex.split('-p test_module.foo=5'))
module = core.module.Error(cfg, 'test-mod', 'xyz')
self.assertEqual(['critical'], module.state(None), 'error module must have critical state')
cfg = core.config.Config(shlex.split("-p test_module.foo=5"))
module = core.module.Error(cfg, "test-mod", "xyz")
self.assertEqual(
["critical"], module.state(None), "error module must have critical state"
)
full_text = module.full_text(module.widget())
self.assertTrue('test-mod' in full_text)
self.assertTrue('xyz' in full_text)
self.assertTrue("test-mod" in full_text)
self.assertTrue("xyz" in full_text)
def test_single_widget(self):
module = core.module.Module(widgets=self.someWidget)
self.assertEqual([self.someWidget], module.widgets())
def test_widget_list(self):
module = core.module.Module(widgets=[ self.someWidget, self.anotherWidget ])
self.assertEqual([ self.someWidget, self.anotherWidget ], module.widgets())
module = core.module.Module(widgets=[self.someWidget, self.anotherWidget])
self.assertEqual([self.someWidget, self.anotherWidget], module.widgets())
def test_module_Name(self):
module = TestModule()
self.assertEqual('test_module', module.name, 'module has wrong name')
self.assertEqual('test_module', module.module_name, 'module has wrong name')
self.assertEqual("test_module", module.name, "module has wrong name")
self.assertEqual("test_module", module.module_name, "module has wrong name")
def testvalid_parameter(self):
cfg = core.config.Config(shlex.split('-p test_module.foo=5'))
cfg = core.config.Config(shlex.split("-p test_module.foo=5"))
module = TestModule(config=cfg)
self.assertEqual(5, int(module.parameter('foo')))
self.assertEqual(5, int(module.parameter("foo")))
def test_default_parameter(self):
cfg = core.config.Config([])
module = TestModule(config=cfg)
self.assertEqual('default', module.parameter('foo', 'default'))
self.assertEqual("default", module.parameter("foo", "default"))
def test_default_is_none(self):
cfg = core.config.Config([])
module = TestModule(config=cfg)
self.assertEqual(None, module.parameter('foo'))
self.assertEqual(None, module.parameter("foo"))
def test_error_widget(self):
cfg = core.config.Config([])
module = TestModule(config=cfg)
module.fail = True
module.error = '!!'
module.error = "!!"
module.update_wrapper()
self.assertEqual(1, len(module.widgets()))
self.assertEqual('error: !!', module.widget().full_text())
self.assertEqual("error: !!", module.widget().full_text())
def test_get_widget_by_name(self):
cfg = core.config.Config([])
@ -106,10 +131,11 @@ class module(unittest.TestCase):
cfg = core.config.Config([])
module = TestModule(config=cfg, widgets=[self.someWidget, self.anotherWidget])
self.assertEqual('critical', module.threshold_state(100, 80, 99))
self.assertEqual('warning', module.threshold_state(100, 80, 100))
self.assertEqual('warning', module.threshold_state(81, 80, 100))
self.assertEqual("critical", module.threshold_state(100, 80, 99))
self.assertEqual("warning", module.threshold_state(100, 80, 100))
self.assertEqual("warning", module.threshold_state(81, 80, 100))
self.assertEqual(None, module.threshold_state(80, 80, 100))
self.assertEqual(None, module.threshold_state(10, 80, 100))
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -5,76 +5,93 @@ import core.config
import core.output
import core.module
class TestModule(core.module.Module):
pass
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.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()
module=self.someModule,
widget=self.someModule.widget(),
)
def test_start(self):
core.event.clear()
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'])
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"])
def test_stop(self):
self.assertEqual('\n]', self.i3.stop()['suffix'], 'wrong i3bar protocol during stop')
self.assertEqual(
"\n]", self.i3.stop()["suffix"], "wrong i3bar protocol during stop"
)
def test_no_modules_by_default(self):
self.assertEqual(0, len(self.i3.modules()), 'module list should be empty by default')
self.assertEqual(
0, len(self.i3.modules()), "module list should be empty by default"
)
def test_register_single_module(self):
self.i3.modules(self.someModule)
self.assertEqual(1, len(self.i3.modules()), 'setting single module does not work')
self.assertEqual(
1, len(self.i3.modules()), "setting single module does not work"
)
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')
self.i3.modules([self.someModule, self.someModule, self.someModule])
self.assertEqual(3, len(self.i3.modules()), "setting module list does not work")
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 = 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_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')
self.assertEqual(
[], data["blocks"], "expected empty list of status line entries"
)
self.assertEqual(",", data["suffix"], 'expected "," as suffix')
def test_statusline(self):
self.i3.modules([ self.someModule, self.someModule, self.someModule ])
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')
self.assertEqual(
len(self.someModule.widgets()) * 3,
len(data["blocks"]),
"wrong number of widgets",
)
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)
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)
def test_no_separator(self):
result = self.i3.__separator_block(self.someModule, self.someModule.widget())
@ -84,9 +101,12 @@ class i3(unittest.TestCase):
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'])
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_dump_json(self):
obj = unittest.mock.MagicMock()
@ -95,47 +115,48 @@ class i3(unittest.TestCase):
obj.dict_assert_called_once_with()
def test_assign(self):
src = {
'a': 'x', 'b': 'y', 'c': 'z'
}
src = {"a": "x", "b": "y", "c": "z"}
dst = {}
core.output.assign(src, dst, 'a')
self.assertEqual(dst['a'], src['a'])
core.output.assign(src, dst, "a")
self.assertEqual(dst["a"], src["a"])
core.output.assign(src, dst, '123', 'b')
self.assertEqual(dst['123'], src['b'])
core.output.assign(src, dst, "123", "b")
self.assertEqual(dst["123"], src["b"])
core.output.assign(src, dst, 'blub', default='def')
self.assertEqual('def', dst['blub'])
core.output.assign(src, dst, "blub", default="def")
self.assertEqual("def", dst["blub"])
def test_pango_detection(self):
self.assertFalse(self.someBlock.is_pango({}))
self.assertTrue(self.someBlock.is_pango({ 'pango': {} }))
self.assertTrue(self.someBlock.is_pango({"pango": {}}))
def test_pangoize(self):
self.assertEqual('test', self.someBlock.pangoize('test'))
self.assertFalse('markup' in self.someBlock.dict())
self.assertEqual("test", self.someBlock.pangoize("test"))
self.assertFalse("markup" in self.someBlock.dict())
pango = self.someBlock.pangoize({ 'pango': { 'attr': 'blub', 'x': 'y', 'full_text': 'test' } })
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'])
self.assertTrue("<span " in pango)
self.assertTrue(">test</span>" in pango)
self.assertEqual("pango", self.someBlock.dict()["markup"])
def test_padding(self):
self.someBlock.set('padding', '***')
self.someBlock.set('full_text', 'test')
self.someBlock.set("padding", "***")
self.someBlock.set("full_text", "test")
self.assertEqual('***test***', self.someBlock.dict()['full_text'])
self.assertEqual("***test***", self.someBlock.dict()["full_text"])
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')
self.someBlock.set("padding", "*")
self.someBlock.set("prefix", "pre")
self.someBlock.set("suffix", "suf")
self.someBlock.set("full_text", "test")
self.assertEqual("*pre*test*suf*", self.someBlock.dict()["full_text"])
self.assertEqual('*pre*test*suf*', self.someBlock.dict()['full_text'])
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -5,40 +5,24 @@ import core.theme
import core.event
import core.widget
class theme(unittest.TestCase):
def setUp(self):
core.event.clear()
self.invalidThemeName = 'this-theme-does-not-exist'
self.validThemeName = 'default'
self.defaultsTheme = {
'defaults': {
'fg': 'red', 'bg': 'black'
}
}
self.invalidThemeName = "this-theme-does-not-exist"
self.validThemeName = "default"
self.defaultsTheme = {"defaults": {"fg": "red", "bg": "black"}}
self.cycleTheme = {
'cycle': [
{ 'fg': 'red', 'bg': 'black' },
{ 'fg': 'black', 'bg': 'red' },
{ 'fg': 'white', 'bg': 'blue' }
"cycle": [
{"fg": "red", "bg": "black"},
{"fg": "black", "bg": "red"},
{"fg": "white", "bg": "blue"},
]
}
self.colorTheme = {
'colors': [{
'red': '#ff0000', 'blue': '#0000ff'
}]
}
self.walTheme = {
'colors': ['wal']
}
self.cycleValueTheme = {
'defaults': {
'fg': [ 'red', 'green', 'blue' ]
}
}
self.stateTheme = {
'warning': { 'fg': 'yellow' },
'critical': { 'fg': 'red' }
}
self.colorTheme = {"colors": [{"red": "#ff0000", "blue": "#0000ff"}]}
self.walTheme = {"colors": ["wal"]}
self.cycleValueTheme = {"defaults": {"fg": ["red", "green", "blue"]}}
self.stateTheme = {"warning": {"fg": "yellow"}, "critical": {"fg": "red"}}
def test_invalid_theme(self):
with self.assertRaises(RuntimeError):
@ -50,82 +34,85 @@ class theme(unittest.TestCase):
def test_defaults(self):
theme = core.theme.Theme(raw_data=self.defaultsTheme)
self.assertEqual(self.defaultsTheme['defaults']['fg'], theme.get('fg'))
self.assertEqual(self.defaultsTheme['defaults']['bg'], theme.get('bg'))
self.assertEqual(self.defaultsTheme["defaults"]["fg"], theme.get("fg"))
self.assertEqual(self.defaultsTheme["defaults"]["bg"], theme.get("bg"))
def test_cycle(self):
theme = core.theme.Theme(raw_data=self.cycleTheme)
self.assertEqual(None, theme.get('prev-bg'))
self.assertEqual(self.cycleTheme['cycle'][0]['fg'], theme.get('fg'))
self.assertEqual(self.cycleTheme['cycle'][0]['bg'], theme.get('bg'))
core.event.trigger('next-widget')
self.assertEqual(self.cycleTheme['cycle'][0]['bg'], theme.get('bg', 'previous'))
core.event.trigger('next-widget')
self.assertEqual(self.cycleTheme['cycle'][2]['fg'], theme.get('fg'))
self.assertEqual(self.cycleTheme['cycle'][2]['bg'], theme.get('bg'))
self.assertEqual(None, theme.get("prev-bg"))
self.assertEqual(self.cycleTheme["cycle"][0]["fg"], theme.get("fg"))
self.assertEqual(self.cycleTheme["cycle"][0]["bg"], theme.get("bg"))
core.event.trigger("next-widget")
self.assertEqual(self.cycleTheme["cycle"][0]["bg"], theme.get("bg", "previous"))
core.event.trigger("next-widget")
self.assertEqual(self.cycleTheme["cycle"][2]["fg"], theme.get("fg"))
self.assertEqual(self.cycleTheme["cycle"][2]["bg"], theme.get("bg"))
with unittest.mock.patch('core.output.sys.stdout'):
core.event.trigger('draw')
self.assertEqual(self.cycleTheme['cycle'][0]['fg'], theme.get('fg'))
self.assertEqual(self.cycleTheme['cycle'][0]['bg'], theme.get('bg'))
with unittest.mock.patch("core.output.sys.stdout"):
core.event.trigger("draw")
self.assertEqual(self.cycleTheme["cycle"][0]["fg"], theme.get("fg"))
self.assertEqual(self.cycleTheme["cycle"][0]["bg"], theme.get("bg"))
def test_custom_iconset(self):
theme = core.theme.Theme(raw_data=self.defaultsTheme)
self.assertNotEqual('aaa', theme.get('padding'))
theme = core.theme.Theme(raw_data=self.defaultsTheme, iconset={
'defaults': { 'padding': 'aaa' }
})
self.assertEqual('aaa', theme.get('padding'))
self.assertNotEqual("aaa", theme.get("padding"))
theme = core.theme.Theme(
raw_data=self.defaultsTheme, iconset={"defaults": {"padding": "aaa"}}
)
self.assertEqual("aaa", theme.get("padding"))
def test_colors(self):
theme = core.theme.Theme(raw_data=self.defaultsTheme)
self.assertEqual({}, theme.keywords())
theme = core.theme.Theme(raw_data=self.colorTheme)
self.assertEqual(self.colorTheme['colors'][0], theme.keywords())
self.assertEqual(self.colorTheme["colors"][0], theme.keywords())
def test_wal_colors(self):
with unittest.mock.patch('core.theme.io') as io:
with unittest.mock.patch('core.theme.os') as os:
with unittest.mock.patch("core.theme.io") as io:
with unittest.mock.patch("core.theme.os") as os:
os.path.isfile.return_value = True
io.open.return_value = unittest.mock.MagicMock()
io.open.return_value.__enter__.return_value.read.return_value='''
io.open.return_value.__enter__.return_value.read.return_value = """
{ "colors": { "red": "#ff0000" } }
'''
"""
theme = core.theme.Theme(raw_data=self.walTheme)
self.assertEqual({'red': '#ff0000'}, theme.keywords())
self.assertEqual({"red": "#ff0000"}, theme.keywords())
def test_wal_special(self):
with unittest.mock.patch('core.theme.io') as io:
with unittest.mock.patch('core.theme.os') as os:
with unittest.mock.patch("core.theme.io") as io:
with unittest.mock.patch("core.theme.os") as os:
os.path.isfile.return_value = True
io.open.return_value.__enter__.return_value.read.return_value='''
io.open.return_value.__enter__.return_value.read.return_value = """
{ "special": { "background": "#ff0000" } }
'''
"""
theme = core.theme.Theme(raw_data=self.walTheme)
self.assertEqual({'background': '#ff0000'}, theme.keywords())
self.assertEqual({"background": "#ff0000"}, theme.keywords())
def test_cycle_value(self):
widget = core.widget.Widget()
expected = self.cycleValueTheme['defaults']['fg']
expected = self.cycleValueTheme["defaults"]["fg"]
theme = core.theme.Theme(raw_data=self.cycleValueTheme)
for i in range(0, len(expected)*3):
self.assertEqual(expected[i%len(expected)], theme.get('fg', widget))
self.assertEqual(expected[i%len(expected)], theme.get('fg', widget)) # ensure multiple invocations are OK
core.event.trigger('draw')
for i in range(0, len(expected) * 3):
self.assertEqual(expected[i % len(expected)], theme.get("fg", widget))
self.assertEqual(
expected[i % len(expected)], theme.get("fg", widget)
) # ensure multiple invocations are OK
core.event.trigger("draw")
def test_state(self):
widget = core.widget.Widget()
theme = core.theme.Theme(raw_data=self.stateTheme)
self.assertEqual(None, theme.get('fg', widget))
self.assertEqual(None, theme.get("fg", widget))
widget.state = types.MethodType(lambda self: ['warning'], widget)
self.assertEqual(self.stateTheme['warning']['fg'], theme.get('fg', widget))
widget.state = types.MethodType(lambda self: ["warning"], widget)
self.assertEqual(self.stateTheme["warning"]["fg"], theme.get("fg", widget))
widget.state = types.MethodType(lambda self: ["critical"], widget)
self.assertEqual(self.stateTheme["critical"]["fg"], theme.get("fg", widget))
widget.state = types.MethodType(lambda self: ['critical'], widget)
self.assertEqual(self.stateTheme['critical']['fg'], theme.get('fg', widget))
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4

View file

@ -5,6 +5,7 @@ import core.widget
import core.module
import core.config
class TestModule(core.module.Module):
def __init__(self, widgets, config=core.config.Config([]), theme=None):
super().__init__(config, theme, widgets)
@ -18,13 +19,16 @@ class TestModule(core.module.Module):
def state(self, widget):
return self.states
class widget(unittest.TestCase):
def setUp(self):
self.someValue = 'some random value'
self.someOtherValue = 'some different value'
self.callbackReturnValue = 'callback return value'
self.someValue = "some random value"
self.someOtherValue = "some different value"
self.callbackReturnValue = "callback return value"
self.someWidget = core.widget.Widget(full_text=self.someValue)
self.someCallback = unittest.mock.MagicMock(return_value=self.callbackReturnValue)
self.someCallback = unittest.mock.MagicMock(
return_value=self.callbackReturnValue
)
self.assertNotEqual(self.someValue, self.someOtherValue)
@ -54,38 +58,38 @@ class widget(unittest.TestCase):
self.assertEqual([], self.someWidget.state())
def test_single_widget_state(self):
self.someWidget.set('state', 'state1')
self.assertEqual(['state1'], self.someWidget.state())
self.someWidget.set("state", "state1")
self.assertEqual(["state1"], self.someWidget.state())
def test_multiple_widget_states(self):
self.someWidget.set('state', ['state1', 'state2'])
self.assertEqual(['state1', 'state2'], self.someWidget.state())
self.someWidget.set("state", ["state1", "state2"])
self.assertEqual(["state1", "state2"], self.someWidget.state())
def test_widget_module_state(self):
module = TestModule(widgets=self.someWidget)
self.someWidget.set('state', ['state1', 'state2'])
self.someWidget.set("state", ["state1", "state2"])
module.states = 'x'
self.assertEqual(['state1', 'state2', 'x'], self.someWidget.state())
module.states = ['a', 'b']
self.assertEqual(['state1', 'state2', 'a', 'b'], self.someWidget.state())
module.states = "x"
self.assertEqual(["state1", "state2", "x"], self.someWidget.state())
module.states = ["a", "b"]
self.assertEqual(["state1", "state2", "a", "b"], self.someWidget.state())
def test_multiple_widget_themes(self):
widget1 = core.widget.Widget(full_text='a')
widget2 = core.widget.Widget(full_text='b')
widget3 = core.widget.Widget(full_text='c')
widget1 = core.widget.Widget(full_text="a")
widget2 = core.widget.Widget(full_text="b")
widget3 = core.widget.Widget(full_text="c")
module = TestModule(widgets=[widget1, widget2, widget3])
module.set('theme.test', '1,2,3')
module.set('theme.test2', 'x')
module.set("theme.test", "1,2,3")
module.set("theme.test2", "x")
self.assertEqual('1', widget1.theme('test'))
self.assertEqual('2', widget2.theme('test'))
self.assertEqual('3', widget3.theme('test'))
self.assertEqual("1", widget1.theme("test"))
self.assertEqual("2", widget2.theme("test"))
self.assertEqual("3", widget3.theme("test"))
self.assertEqual('x', widget1.theme('test2'))
self.assertEqual(None, widget2.theme('test2'))
self.assertEqual(None, widget3.theme('test2'))
self.assertEqual("x", widget1.theme("test2"))
self.assertEqual(None, widget2.theme("test2"))
self.assertEqual(None, widget3.theme("test2"))
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4