Add guarded AT-SPI pointer mouse review backend
This commit is contained in:
@@ -7,6 +7,7 @@ from unittest import mock
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
|
||||
|
||||
from cthulhu import input_event_manager
|
||||
from cthulhu import mouse_review
|
||||
|
||||
|
||||
class FakeDevice:
|
||||
@@ -131,5 +132,93 @@ class InputEventManagerPointerMonitorTests(unittest.TestCase):
|
||||
self.assertEqual(device.disconnect_calls, [17])
|
||||
|
||||
|
||||
class MouseReviewBackendSelectionTests(unittest.TestCase):
|
||||
@staticmethod
|
||||
def _make_app(enabled=False):
|
||||
app = mock.Mock()
|
||||
settingsManager = mock.Mock()
|
||||
settingsManager.getSetting.return_value = enabled
|
||||
app.getSettingsManager.return_value = settingsManager
|
||||
app.getScriptManager.return_value = mock.Mock()
|
||||
return app
|
||||
|
||||
def test_prefers_atspi_backend_when_version_and_capability_are_available(self):
|
||||
listener = mock.Mock()
|
||||
deviceManager = mock.Mock()
|
||||
deviceManager.enable_pointer_monitoring.return_value = True
|
||||
|
||||
with (
|
||||
mock.patch.object(mouse_review.Atspi.EventListener, "new", return_value=listener),
|
||||
mock.patch.object(mouse_review.Atspi, "get_version", return_value=(2, 60, 0)),
|
||||
mock.patch.object(
|
||||
mouse_review.Atspi,
|
||||
"DeviceCapability",
|
||||
new=types.SimpleNamespace(POINTER_MONITOR=8),
|
||||
create=True,
|
||||
),
|
||||
mock.patch.object(mouse_review.input_event_manager, "get_manager", return_value=deviceManager),
|
||||
mock.patch.object(mouse_review, "Wnck", None),
|
||||
):
|
||||
reviewer = mouse_review.MouseReviewer(self._make_app())
|
||||
|
||||
self.assertTrue(reviewer._useAtspi)
|
||||
self.assertTrue(reviewer._mouseReviewCapable)
|
||||
deviceManager.activate_device.assert_called_once_with()
|
||||
deviceManager.enable_pointer_monitoring.assert_called_once_with()
|
||||
|
||||
def test_activate_uses_pointer_watcher_for_atspi_backend(self):
|
||||
listener = mock.Mock()
|
||||
deviceManager = mock.Mock()
|
||||
deviceManager.enable_pointer_monitoring.return_value = True
|
||||
|
||||
with (
|
||||
mock.patch.object(mouse_review.Atspi.EventListener, "new", return_value=listener),
|
||||
mock.patch.object(mouse_review.Atspi, "get_version", return_value=(2, 60, 0)),
|
||||
mock.patch.object(
|
||||
mouse_review.Atspi,
|
||||
"DeviceCapability",
|
||||
new=types.SimpleNamespace(POINTER_MONITOR=8),
|
||||
create=True,
|
||||
),
|
||||
mock.patch.object(mouse_review.input_event_manager, "get_manager", return_value=deviceManager),
|
||||
mock.patch.object(mouse_review.cthulhu_state, "locusOfFocus", None),
|
||||
mock.patch.object(mouse_review, "Wnck", None),
|
||||
):
|
||||
reviewer = mouse_review.MouseReviewer(self._make_app(enabled=False))
|
||||
reviewer.activate()
|
||||
reviewer.deactivate()
|
||||
|
||||
deviceManager.start_pointer_watcher.assert_called_once_with(reviewer._on_pointer_moved)
|
||||
deviceManager.stop_pointer_watcher.assert_called_once_with()
|
||||
listener.register.assert_not_called()
|
||||
|
||||
def test_keeps_legacy_backend_when_atspi_pointer_monitor_is_unavailable(self):
|
||||
listener = mock.Mock()
|
||||
pointer = mock.Mock()
|
||||
seat = mock.Mock()
|
||||
seat.get_pointer.return_value = pointer
|
||||
screen = mock.Mock()
|
||||
screen.get_windows_stacked.return_value = []
|
||||
screen.get_active_workspace.return_value = None
|
||||
fakeWnck = mock.Mock()
|
||||
fakeWnck.Screen.get_default.return_value = screen
|
||||
|
||||
with (
|
||||
mock.patch.object(mouse_review.Atspi.EventListener, "new", return_value=listener),
|
||||
mock.patch.object(mouse_review.Atspi, "get_version", return_value=(2, 58, 4)),
|
||||
mock.patch.object(mouse_review.input_event_manager, "get_manager"),
|
||||
mock.patch.object(mouse_review.cthulhu_state, "locusOfFocus", None),
|
||||
mock.patch.object(mouse_review.Gdk.Display, "get_default", return_value=mock.Mock()),
|
||||
mock.patch.object(mouse_review.Gdk.Display, "get_default_seat", return_value=seat),
|
||||
mock.patch.object(mouse_review, "Wnck", fakeWnck),
|
||||
):
|
||||
reviewer = mouse_review.MouseReviewer(self._make_app(enabled=False))
|
||||
reviewer.activate()
|
||||
|
||||
self.assertFalse(reviewer._useAtspi)
|
||||
self.assertTrue(reviewer._mouseReviewCapable)
|
||||
listener.register.assert_called_once_with("mouse:abs")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user