1
0
Fork 0
libreoffice/sw/qa/uitest/writer_tests5/xwindow.py
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

176 lines
6.1 KiB
Python

# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
from uitest.framework import UITestCase
import unohelper
from com.sun.star.awt import XMouseListener
from com.sun.star.awt import MouseButton
from com.sun.star.awt import MouseEvent
from com.sun.star.awt import KeyEvent
from com.sun.star.awt import XKeyListener
mouseListenerCount = 0
mouseEventsIntercepted = 0
mousePressedEventsIntercepted = 0
mouseReleasedEventsIntercepted = 0
mouseEnteredEventsIntercepted = 0
mouseExitedEventsIntercepted = 0
keymousePressedEventsIntercepted = 0
keymouseReleasedEventsIntercepted = 0
class XMouseListenerExtended(unohelper.Base, XMouseListener):
def __init__(self):
global mouseListenerCount
mouseListenerCount += 1
super().__init__()
# is invoked when a mouse button has been pressed on a window.
@classmethod
def mousePressed(self, xMouseEvent):
global mousePressedEventsIntercepted
mousePressedEventsIntercepted += 1
# is invoked when a mouse button has been released on a window.
@classmethod
def mouseReleased(self, xMouseEvent):
global mouseReleasedEventsIntercepted
mouseReleasedEventsIntercepted += 1
# is invoked when the mouse enters a window.
@classmethod
def mouseEntered(self, xMouseEvent):
global mouseEventsIntercepted
mouseEventsIntercepted += 1
return super(XMouseListenerExtended, self).mouseEntered(xMouseEvent)
# is invoked when the mouse exits a window.
@classmethod
def mouseExited(self, xMouseEvent):
global mouseEventsIntercepted
mouseEventsIntercepted += 1
return super(XMouseListenerExtended, self).mouseExited(xMouseEvent)
class XKeyListenerExtended(unohelper.Base, XKeyListener):
# is invoked when a key has been pressed
@classmethod
def keyPressed(self, xKeyEvent):
global keymousePressedEventsIntercepted
keymousePressedEventsIntercepted += 1
return super(XKeyListenerExtended, self).keyPressed(xKeyEvent)
# is invoked when a key has been released
@classmethod
def keyReleased(self, xKeyEvent):
global keymouseReleasedEventsIntercepted
keymouseReleasedEventsIntercepted += 1
return super(XKeyListenerExtended, self).keyReleased(xKeyEvent)
# Test that registered mouse/key listeners for top window receive mouse/key events
class XWindow(UITestCase):
def test_listeners(self):
global mouseListenerCount
with self.ui_test.create_doc_in_start_center("writer") as xDoc:
# create new mouse listener
xFrame = xDoc.getCurrentController().getFrame()
self.assertIsNotNone(xFrame)
xWindow = xFrame.getContainerWindow()
self.assertIsNotNone(xWindow)
# add new mouse listener
xMouseListener = XMouseListenerExtended()
self.assertIsNotNone(xMouseListener)
xWindow.addMouseListener(xMouseListener)
self.assertEqual(1, mouseListenerCount)
# add new key listener
xKeyListener = XKeyListenerExtended()
self.assertIsNotNone(xKeyListener)
xWindow.addKeyListener(xKeyListener)
# create dummy mouse event
xMouseEvent = MouseEvent()
xMouseEvent.Modifiers = 0
xMouseEvent.Buttons = MouseButton.LEFT
xMouseEvent.X = 10
xMouseEvent.Y = 10
xMouseEvent.ClickCount = 1
xMouseEvent.PopupTrigger = False
xMouseEvent.Source = xWindow
xMouseEvent2 = MouseEvent()
xMouseEvent2.Modifiers = 0
xMouseEvent2.Buttons = MouseButton.LEFT
xMouseEvent2.X = 300
xMouseEvent2.Y = 300
xMouseEvent2.ClickCount = 1
xMouseEvent2.PopupTrigger = False
xMouseEvent2.Source = xWindow
# send mouse event
xToolkitRobot = xWindow.getToolkit()
self.assertIsNotNone(xToolkitRobot)
# Click in the menubar/toolbar area
xToolkitRobot.mouseMove(xMouseEvent)
xToolkitRobot.mousePress(xMouseEvent)
xToolkitRobot.mouseRelease(xMouseEvent)
# Click into the document content
xToolkitRobot.mousePress(xMouseEvent2)
xToolkitRobot.mouseRelease(xMouseEvent2)
# send key press event
xKeyEvent = KeyEvent()
xKeyEvent.Modifiers = 0
xKeyEvent.KeyCode = 70
xKeyEvent.KeyChar = 70
xKeyEvent.Source = xWindow
xToolkitRobot.keyPress(xKeyEvent)
xToolkitRobot.keyRelease(xKeyEvent)
# Wait for async events to be processed
xToolkit = self.xContext.ServiceManager.createInstance('com.sun.star.awt.Toolkit')
xToolkit.processEventsToIdle()
# remove mouse listener
xWindow.removeMouseListener(xMouseListener)
self.assertEqual(1, mouseListenerCount)
del xMouseListener
# remove key listener
xWindow.removeKeyListener(xKeyListener)
del xKeyListener
global keymousePressedEventsIntercepted
# Not expected any interceptions
self.assertEqual(0, keymousePressedEventsIntercepted)
global keymouseReleasedEventsIntercepted
# Not expected any interceptions
self.assertEqual(0, keymouseReleasedEventsIntercepted)
global mousePressedEventsIntercepted
self.assertEqual(0, mousePressedEventsIntercepted)
global mouseReleasedEventsIntercepted
self.assertEqual(0, mouseReleasedEventsIntercepted)
global mouseEventsIntercepted
# Not expected 3 interceptions
self.assertEqual(0, mouseEventsIntercepted)
# close document
# vim: set shiftwidth=4 softtabstop=4 expandtab: