69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
import unittest
|
|
from unittest import mock
|
|
|
|
import gi
|
|
gi.require_version("Atspi", "2.0")
|
|
from gi.repository import Atspi
|
|
|
|
from cthulhu import ax_object
|
|
from cthulhu import cthulhu_state
|
|
from cthulhu import focus_manager
|
|
|
|
|
|
class ChromiumOmniboxRegressionTests(unittest.TestCase):
|
|
def tearDown(self):
|
|
cthulhu_state.activeWindow = None
|
|
cthulhu_state.locusOfFocus = None
|
|
|
|
def test_detects_chromium_popup_item_with_broken_ancestry(self):
|
|
popupItem = object()
|
|
|
|
with (
|
|
mock.patch.object(ax_object.AXObject, "is_dead", return_value=False),
|
|
mock.patch.object(ax_object.AXObject, "get_toolkit_name", return_value="chromium"),
|
|
mock.patch.object(ax_object.AXObject, "get_role", return_value=Atspi.Role.LIST_ITEM),
|
|
mock.patch.object(ax_object.AXObject, "get_parent", return_value=None),
|
|
mock.patch.object(ax_object.debug, "print_tokens"),
|
|
):
|
|
self.assertTrue(ax_object.AXObject.has_broken_popup_ancestry(popupItem))
|
|
|
|
def test_ignores_chromium_popup_item_with_valid_ancestry(self):
|
|
popupItem = object()
|
|
parent = object()
|
|
|
|
def get_role(obj):
|
|
if obj is popupItem:
|
|
return Atspi.Role.LIST_ITEM
|
|
return Atspi.Role.APPLICATION
|
|
|
|
with (
|
|
mock.patch.object(ax_object.AXObject, "is_dead", return_value=False),
|
|
mock.patch.object(ax_object.AXObject, "get_toolkit_name", return_value="chromium"),
|
|
mock.patch.object(ax_object.AXObject, "get_role", side_effect=get_role),
|
|
mock.patch.object(ax_object.AXObject, "get_parent", side_effect=[parent, None]),
|
|
):
|
|
self.assertFalse(ax_object.AXObject.has_broken_popup_ancestry(popupItem))
|
|
|
|
def test_preserves_active_window_when_chromium_popup_ancestry_is_broken(self):
|
|
activeWindow = object()
|
|
popupItem = object()
|
|
cthulhu_state.activeWindow = activeWindow
|
|
cthulhu_state.locusOfFocus = popupItem
|
|
|
|
controller = mock.Mock()
|
|
app = mock.Mock()
|
|
manager = None
|
|
with (
|
|
mock.patch.object(focus_manager.dbus_service, "get_remote_controller", return_value=controller),
|
|
mock.patch.object(focus_manager.AXObject, "has_broken_popup_ancestry", return_value=True),
|
|
):
|
|
manager = focus_manager.FocusManager(app)
|
|
manager.set_active_window(None)
|
|
|
|
self.assertIs(manager.get_active_window(), activeWindow)
|
|
self.assertIs(cthulhu_state.activeWindow, activeWindow)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|