[tests] Purge tests and start with a clean implementation of subprocess
Seems like subprocess and friends (Popen, communicate) are not so easy to mock cleanly. Therefore, start from scratch and carefully write test by test, until (at least) the old test coverage has been restored.
This commit is contained in:
parent
1c6122fc3f
commit
6dbe440cb5
23 changed files with 61 additions and 1240 deletions
|
@ -1,129 +0,0 @@
|
|||
# pylint: disable=C0103,C0111
|
||||
|
||||
import unittest
|
||||
import json
|
||||
import subprocess
|
||||
import mock
|
||||
|
||||
import bumblebee.input
|
||||
from bumblebee.input import I3BarInput
|
||||
from tests.util import MockWidget, MockModule, assertPopen, assertMouseEvent, MockEpoll
|
||||
|
||||
class TestI3BarInput(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.input = I3BarInput()
|
||||
self.input.need_event = True
|
||||
self.anyModule = MockModule()
|
||||
self.anyWidget = MockWidget("test")
|
||||
self.anyModule.id = "test-module"
|
||||
self._called = 0
|
||||
|
||||
def callback(self, event):
|
||||
self._called += 1
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_basic_read_event(self, mock_input, mock_select):
|
||||
mock_input.readline.return_value = "somedata"
|
||||
mock_input.fileno.return_value = 1
|
||||
mock_select.return_value = MockEpoll()
|
||||
self.input.start()
|
||||
self.input.stop()
|
||||
mock_input.readline.assert_any_call()
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_ignore_invalid_data(self, mock_input, mock_select):
|
||||
mock_select.return_value = MockEpoll()
|
||||
mock_input.readline.return_value = "garbage"
|
||||
self.input.start()
|
||||
self.assertEquals(self.input.alive(), True)
|
||||
self.assertEquals(self.input.stop(), True)
|
||||
mock_input.readline.assert_any_call()
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_ignore_invalid_event(self, mock_input, mock_select):
|
||||
mock_select.return_value = MockEpoll()
|
||||
mock_input.readline.return_value = json.dumps({
|
||||
"name": None,
|
||||
"instance": None,
|
||||
"button": 1,
|
||||
})
|
||||
self.input.start()
|
||||
self.assertEquals(self.input.alive(), True)
|
||||
self.assertEquals(self.input.stop(), True)
|
||||
mock_input.readline.assert_any_call()
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_ignore_partial_event(self, mock_input, mock_select):
|
||||
mock_select.return_value = MockEpoll()
|
||||
self.input.register_callback(None, button=1, cmd=self.callback)
|
||||
mock_input.readline.return_value = json.dumps({
|
||||
"button": 1,
|
||||
})
|
||||
self.input.start()
|
||||
self.assertEquals(self.input.alive(), True)
|
||||
self.assertEquals(self.input.stop(), True)
|
||||
mock_input.readline.assert_any_call()
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_global_callback(self, mock_input, mock_select):
|
||||
self.input.register_callback(None, button=1, cmd=self.callback)
|
||||
assertMouseEvent(mock_input, None, mock_select, self, None,
|
||||
bumblebee.input.LEFT_MOUSE, None, "someinstance")
|
||||
self.assertTrue(self._called > 0)
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_remove_global_callback(self, mock_input, mock_select):
|
||||
self.input.register_callback(None, button=1, cmd=self.callback)
|
||||
self.input.deregister_callbacks(None)
|
||||
assertMouseEvent(mock_input, None, mock_select, self, None,
|
||||
bumblebee.input.LEFT_MOUSE, None, "someinstance")
|
||||
self.assertTrue(self._called == 0)
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_global_callback_button_missmatch(self, mock_input, mock_select):
|
||||
self.input.register_callback(self.anyModule, button=1, cmd=self.callback)
|
||||
assertMouseEvent(mock_input, None, mock_select, self, None,
|
||||
bumblebee.input.RIGHT_MOUSE, None, "someinstance")
|
||||
self.assertTrue(self._called == 0)
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_module_callback(self, mock_input, mock_select):
|
||||
self.input.register_callback(self.anyModule, button=1, cmd=self.callback)
|
||||
assertMouseEvent(mock_input, None, mock_select, self, self.anyModule,
|
||||
bumblebee.input.LEFT_MOUSE, None)
|
||||
self.assertTrue(self._called > 0)
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_remove_module_callback(self, mock_input, mock_select):
|
||||
self.input.register_callback(self.anyModule, button=1, cmd=self.callback)
|
||||
self.input.deregister_callbacks(self.anyModule)
|
||||
assertMouseEvent(mock_input, None, mock_select, self, None,
|
||||
bumblebee.input.LEFT_MOUSE, None, self.anyWidget.id)
|
||||
self.assertTrue(self._called == 0)
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_widget_callback(self, mock_input, mock_select):
|
||||
self.input.register_callback(self.anyWidget, button=1, cmd=self.callback)
|
||||
assertMouseEvent(mock_input, None, mock_select, self, None,
|
||||
bumblebee.input.LEFT_MOUSE, None, self.anyWidget.id)
|
||||
self.assertTrue(self._called > 0)
|
||||
|
||||
@mock.patch("select.epoll")
|
||||
@mock.patch("subprocess.Popen")
|
||||
@mock.patch("sys.stdin")
|
||||
def test_widget_cmd_callback(self, mock_input, mock_output, mock_select):
|
||||
self.input.register_callback(self.anyWidget, button=1, cmd="echo")
|
||||
assertMouseEvent(mock_input, mock_output, mock_select, self, None,
|
||||
bumblebee.input.LEFT_MOUSE, "echo", self.anyWidget.id)
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
Loading…
Add table
Add a link
Reference in a new issue