[core/output] Add initial version of i3bar output
Add output handler for i3bar protocol and add some tests for it. Right now, it only support start and end. see #23
This commit is contained in:
parent
a2c6214baa
commit
6f52825ef0
5 changed files with 59 additions and 6 deletions
|
@ -19,7 +19,8 @@ class Engine(object):
|
|||
This class connects input/output, instantiates all
|
||||
required modules and drives the "event loop"
|
||||
"""
|
||||
def __init__(self, config):
|
||||
def __init__(self, config, output=None):
|
||||
self._output = output
|
||||
self._running = True
|
||||
self._modules = []
|
||||
self.load_modules(config.modules())
|
||||
|
@ -45,7 +46,10 @@ class Engine(object):
|
|||
|
||||
def run(self):
|
||||
"""Start the event loop"""
|
||||
self._output.start()
|
||||
while self.running():
|
||||
pass
|
||||
|
||||
self._output.stop()
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||
|
|
21
bumblebee/output.py
Normal file
21
bumblebee/output.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
# pylint: disable=R0201
|
||||
|
||||
"""Output classes"""
|
||||
|
||||
import sys
|
||||
import json
|
||||
|
||||
class I3BarOutput(object):
|
||||
"""Manage output according to the i3bar protocol"""
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def start(self):
|
||||
"""Print start preamble for i3bar protocol"""
|
||||
sys.stdout.write(json.dumps({"version": 1, "click_events": True}) + "[\n")
|
||||
|
||||
def stop(self):
|
||||
"""Finish i3bar protocol"""
|
||||
sys.stdout.write("]\n")
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
|
@ -1,3 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
find . -name "*.py"|xargs pylint
|
||||
find . -name "*.py"|xargs pylint --disable=R0903
|
||||
|
|
|
@ -10,8 +10,8 @@ class TestEngine(unittest.TestCase):
|
|||
self.testModule = "test"
|
||||
self.testModuleSpec = "bumblebee.modules.{}".format(self.testModule)
|
||||
self.testModules = [
|
||||
{ "module": "test", "name": "a" },
|
||||
{ "module": "test", "name": "b" },
|
||||
{"module": "test", "name": "a"},
|
||||
{"module": "test", "name": "b"},
|
||||
]
|
||||
|
||||
def test_stop(self):
|
||||
|
@ -27,8 +27,8 @@ class TestEngine(unittest.TestCase):
|
|||
modules = self.engine.load_modules(self.testModules)
|
||||
self.assertEquals(len(modules), len(self.testModules))
|
||||
self.assertEquals(
|
||||
[ module.__module__ for module in modules ],
|
||||
[ self.testModuleSpec for module in modules ]
|
||||
[module.__module__ for module in modules],
|
||||
[self.testModuleSpec for module in modules]
|
||||
)
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||
|
|
28
tests/test_i3baroutput.py
Normal file
28
tests/test_i3baroutput.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
# pylint: disable=C0103,C0111
|
||||
import json
|
||||
import unittest
|
||||
import mock
|
||||
try:
|
||||
from StringIO import StringIO
|
||||
except ImportError:
|
||||
from io import StringIO
|
||||
|
||||
from bumblebee.output import I3BarOutput
|
||||
|
||||
class TestI3BarOutput(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.output = I3BarOutput()
|
||||
self.expectedStart = json.dumps({"version": 1, "click_events": True}) + "[\n"
|
||||
self.expectedStop = "]\n"
|
||||
|
||||
@mock.patch("sys.stdout", new_callable=StringIO)
|
||||
def test_start(self, stdout):
|
||||
self.output.start()
|
||||
self.assertEquals(self.expectedStart, stdout.getvalue())
|
||||
|
||||
@mock.patch("sys.stdout", new_callable=StringIO)
|
||||
def test_stop(self, stdout):
|
||||
self.output.stop()
|
||||
self.assertEquals(self.expectedStop, stdout.getvalue())
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
Loading…
Reference in a new issue