Files
cthulhu/tests/test_chromium_omnibox_regressions.py
2026-05-15 15:48:52 -04:00

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()