123 lines
2.8 KiB
Python
123 lines
2.8 KiB
Python
import time
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
from i3pystatus import IntervalModule
|
|
|
|
left_click = 1
|
|
right_click = 3
|
|
scroll_up = 4
|
|
scroll_down = 5
|
|
|
|
|
|
@pytest.mark.parametrize("events, expected", [
|
|
# Fast click
|
|
(((0, left_click),),
|
|
'no action'),
|
|
|
|
# Slow click
|
|
(((0.4, left_click),),
|
|
'leftclick'),
|
|
|
|
# Slow double click
|
|
(((0.4, left_click),
|
|
(0.4, left_click),),
|
|
'leftclick'),
|
|
|
|
# Fast double click
|
|
(((0.2, left_click),
|
|
(0, left_click),),
|
|
'doubleleftclick'),
|
|
|
|
# Fast double click + Slow click
|
|
(((0.2, left_click),
|
|
(0, left_click),
|
|
(0.3, left_click),),
|
|
'leftclick'),
|
|
|
|
# Alternate double click
|
|
(((0.2, left_click),
|
|
(0, right_click),),
|
|
'leftclick'),
|
|
|
|
# Slow click, no callback
|
|
(((0.4, right_click),),
|
|
'no action'),
|
|
|
|
# Fast double click
|
|
(((0.2, right_click),
|
|
(0, right_click),),
|
|
'doublerightclick'),
|
|
|
|
# Fast double click
|
|
(((0, scroll_down),
|
|
(0, scroll_down),),
|
|
'downscroll'),
|
|
|
|
# Slow click
|
|
(((0.4, scroll_up),),
|
|
'upscroll'),
|
|
|
|
# Fast double click
|
|
(((0, scroll_up),
|
|
(0, scroll_up),),
|
|
'doubleupscroll'),
|
|
])
|
|
def test_clicks(events, expected):
|
|
class TestClicks(IntervalModule):
|
|
def set_action(self, action):
|
|
self._action = action
|
|
|
|
on_leftclick = [set_action, "leftclick"]
|
|
on_doubleleftclick = [set_action, "doubleleftclick"]
|
|
|
|
# on_rightclick = [set_action, "rightclick"]
|
|
on_doublerightclick = [set_action, "doublerightclick"]
|
|
|
|
on_upscroll = [set_action, "upscroll"]
|
|
on_doubleupscroll = [set_action, "doubleupscroll"]
|
|
|
|
on_downscroll = [set_action, "downscroll"]
|
|
# on_doubledownscroll = [set_action, "doubledownscroll"]
|
|
|
|
_action = 'no action'
|
|
|
|
# Divide all times by 10 to make the test run faster
|
|
TestClicks.multi_click_timeout /= 10
|
|
|
|
m = TestClicks()
|
|
for sl, ev in events:
|
|
m.on_click(ev)
|
|
time.sleep(sl / 10)
|
|
assert m._action == expected
|
|
|
|
|
|
@pytest.mark.parametrize("button, stored_value", [
|
|
(left_click, "leftclick"),
|
|
(right_click, "rightclick")
|
|
])
|
|
def test_callback_handler_method(button, stored_value):
|
|
class TestClicks(IntervalModule):
|
|
def set_action(self, action):
|
|
self._action = action
|
|
|
|
on_leftclick = [set_action, "leftclick"]
|
|
on_rightclick = ["set_action", "rightclick"]
|
|
|
|
dut = TestClicks()
|
|
|
|
dut.on_click(button)
|
|
assert dut._action == stored_value
|
|
|
|
|
|
def test_callback_handler_function():
|
|
callback_mock = MagicMock()
|
|
|
|
class TestClicks(IntervalModule):
|
|
on_upscroll = [callback_mock.callback, "upscroll"]
|
|
|
|
dut = TestClicks()
|
|
dut.on_click(scroll_up)
|
|
callback_mock.callback.assert_called_once_with("upscroll")
|