[Libreoffice-commits] core.git: Branch 'private/moggi/ui-test' - 13 commits - desktop/source include/vcl uitest/calc_tests uitest/connection.py uitest/demo_ui uitest/helper.py uitest/__init__.py uitest/main.py uitest/uitest_helper.py vcl/inc vcl/source
Markus Mohrhard
markus.mohrhard at googlemail.com
Mon Mar 28 16:37:18 UTC 2016
Rebased ref, commits from common ancestor:
commit e6e2af2cb6093ca287733f05f2289df3fddb3bc5
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Mar 24 01:21:13 2016 +0100
add test for tdf#98427
Change-Id: I4cc29cfd3b2ac0b4889e82c3565319455cafc1eb
diff --git a/uitest/calc_tests/function_wizard.py b/uitest/calc_tests/function_wizard.py
new file mode 100644
index 0000000..6d8aa32
--- /dev/null
+++ b/uitest/calc_tests/function_wizard.py
@@ -0,0 +1,42 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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_helper import UITest
+
+from helper import mkPropertyValues
+import time
+
+try:
+ import pyuno
+ import uno
+ import unohelper
+except ImportError:
+ print("pyuno not found: try to set PYTHONPATH and URE_BOOTSTRAP variables")
+ print("PYTHONPATH=/installation/opt/program")
+ print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc")
+ raise
+
+# tdf#98427
+def open_function_wizard(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ ui_test.execute_modeless_dialog_through_command(".uno:FunctionDialog")
+
+ xFunctionDlg = xUITest.getTopFocusWindow()
+
+ xArrayChkBox = xFunctionDlg.getChild("array")
+ xArrayChkBox.executeAction("CLICK", tuple())
+
+ xCancelBtn = xFunctionDlg.getChild("cancel")
+ xCancelBtn.executeAction("CLICK", tuple())
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 9d794a37a3a04eb5326ad382e59b74a42fea255a
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Mar 24 00:45:44 2016 +0100
also remove the screenshot part from function names
Change-Id: Iac4f1724ed9c2a470ea1a1fe1ab0e834eb3f1795
diff --git a/uitest/calc_tests/about_test.py b/uitest/calc_tests/about_test.py
index a9beb8e..9766518 100644
--- a/uitest/calc_tests/about_test.py
+++ b/uitest/calc_tests/about_test.py
@@ -9,7 +9,7 @@ import time
from uitest_helper import UITest
-def test_about_dlg_with_screenshot(xContext):
+def test_about_dlg(xContext):
xUITest = xContext.ServiceManager.createInstanceWithContext(
"org.libreoffice.uitest.UITest", xContext)
diff --git a/uitest/main.py b/uitest/main.py
index 11e92ee..e4d4f39 100644
--- a/uitest/main.py
+++ b/uitest/main.py
@@ -57,7 +57,7 @@ if __name__ == "__main__":
generic_test(opts, line)
elif "--calc-demo" in opts:
- generic_test(opts, "calc_tests.about_test.test_about_dlg_with_screenshot")
+ generic_test(opts, "calc_tests.about_test.test_about_dlg")
generic_test(opts, "calc_tests.create_range_name.create_range_name")
else:
usage()
commit 8d60cadd3a4755be2892e9bf883b6831ef5e63a1
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Mar 24 00:43:51 2016 +0100
remove all references to the screenshot functionality
Change-Id: I3fb853fafbb2bc8271597cc1743fee99913257af
diff --git a/uitest/calc_tests/about_test.py b/uitest/calc_tests/about_test.py
index d90ee06..a9beb8e 100644
--- a/uitest/calc_tests/about_test.py
+++ b/uitest/calc_tests/about_test.py
@@ -8,20 +8,6 @@
import time
from uitest_helper import UITest
-from helper import Screenshot
-
-def get_bounding_box(props):
- size_str = None
- pos_str = None
- for prop in props:
- if prop.Name == "AbsPosition":
- pos_str = prop.Value
- elif prop.Name == "Size":
- size_str = prop.Value
-
- x1, y1 = pos_str.split("x")
- dx, dy = size_str.split("x")
- return x1, y1, str(int(x1) + int(dx)), str(int(y1) + int(dy))
def test_about_dlg_with_screenshot(xContext):
xUITest = xContext.ServiceManager.createInstanceWithContext(
@@ -35,13 +21,6 @@ def test_about_dlg_with_screenshot(xContext):
xAboutDlg = xUITest.getTopFocusWindow()
- # take the screenshot
- time.sleep(1)
- aboutDlgState = xAboutDlg.getState()
- x1, y1, x2, y2 = get_bounding_box(aboutDlgState)
- screenshot = Screenshot()
- screenshot.take_screenshot(x1, y1, x2, y2)
-
xCloseBtn = xAboutDlg.getChild("close")
xCloseBtn.executeAction("CLICK", tuple())
diff --git a/uitest/helper.py b/uitest/helper.py
index e660739..2c57d11 100644
--- a/uitest/helper.py
+++ b/uitest/helper.py
@@ -49,36 +49,6 @@ class EventListener(XDocumentEventListener,unohelper.Base):
def disposing(event):
pass
-class Screenshot(object):
-
- def __init__(self):
- pass
-
- def _create_python_path(self):
- """ creates a clean PATH env variable
-
- We need to avoid picking the LibreOffice python and
- the corresponding PYTHONPATH, PYTHONHOME variables
- """
- env = os.environ.copy()
-
- # remove any python properties pointing to soffice internal python
- del env['PYTHONPATH']
- del env['PYTHONHOME']
-
- # remove path pointing to instdir to avoid picking up the soffice provided python
- path = env['PATH']
- path_parts = path.split(':')
- cleaned_path = (path for path in path_parts if path.find("instdir") == -1)
- new_path = ":".join( cleaned_path )
- env['PATH'] = new_path
- return env
-
- def take_screenshot(self, x1, y1, x2, y2):
- env = self._create_python_path()
- popen = subprocess.Popen(" ".join(["./screenshot.py", x1, y1, x2, y2]), shell=True, env=env)
- popen.wait()
-
def mkPropertyValue(name, value):
""" Create a UNO ProertyValue from two input values.
"""
diff --git a/uitest/screenshot.py b/uitest/screenshot.py
deleted file mode 100755
index af3cd44..0000000
--- a/uitest/screenshot.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-
-import pyscreenshot as ImageGrab
-
-if __name__ == "__main__":
- # part of the screen
- if len(sys.argv) != 5:
- sys.exit(1)
- im=ImageGrab.grab(bbox=(int(sys.argv[1]),int(sys.argv[2]),int(sys.argv[3]),int(sys.argv[4]))) # X1,Y1,X2,Y2
- im.show()
commit bc3e166f85ef9562411fe72dfe89496a6659533b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu Mar 24 00:35:18 2016 +0100
move uitest python part from dev-tools
Change-Id: I5a6464cb4e110d1da48b5f525f63e0a7de6dea58
diff --git a/uitest/__init__.py b/uitest/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/uitest/calc_tests/__init__.py b/uitest/calc_tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/uitest/calc_tests/about_test.py b/uitest/calc_tests/about_test.py
new file mode 100644
index 0000000..d90ee06
--- /dev/null
+++ b/uitest/calc_tests/about_test.py
@@ -0,0 +1,48 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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/.
+#
+
+import time
+
+from uitest_helper import UITest
+from helper import Screenshot
+
+def get_bounding_box(props):
+ size_str = None
+ pos_str = None
+ for prop in props:
+ if prop.Name == "AbsPosition":
+ pos_str = prop.Value
+ elif prop.Name == "Size":
+ size_str = prop.Value
+
+ x1, y1 = pos_str.split("x")
+ dx, dy = size_str.split("x")
+ return x1, y1, str(int(x1) + int(dx)), str(int(y1) + int(dy))
+
+def test_about_dlg_with_screenshot(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ ui_test.execute_dialog_through_command(".uno:About")
+
+ xAboutDlg = xUITest.getTopFocusWindow()
+
+ # take the screenshot
+ time.sleep(1)
+ aboutDlgState = xAboutDlg.getState()
+ x1, y1, x2, y2 = get_bounding_box(aboutDlgState)
+ screenshot = Screenshot()
+ screenshot.take_screenshot(x1, y1, x2, y2)
+
+ xCloseBtn = xAboutDlg.getChild("close")
+ xCloseBtn.executeAction("CLICK", tuple())
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/calc_tests/create_range_name.py b/uitest/calc_tests/create_range_name.py
new file mode 100644
index 0000000..9019753
--- /dev/null
+++ b/uitest/calc_tests/create_range_name.py
@@ -0,0 +1,42 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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_helper import UITest
+
+from helper import mkPropertyValues
+
+try:
+ import pyuno
+ import uno
+ import unohelper
+except ImportError:
+ print("pyuno not found: try to set PYTHONPATH and URE_BOOTSTRAP variables")
+ print("PYTHONPATH=/installation/opt/program")
+ print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc")
+ raise
+
+def create_range_name(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ ui_test.execute_modeless_dialog_through_command(".uno:AddName")
+
+ xAddNameDlg = xUITest.getTopFocusWindow()
+
+ props = {"TEXT": "simpleRangeName"}
+ actionProps = mkPropertyValues(props)
+
+ xEdit = xAddNameDlg.getChild("edit")
+ xEdit.executeAction("TYPE", actionProps)
+ xAddBtn = xAddNameDlg.getChild("add")
+ xAddBtn.executeAction("CLICK", tuple())
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/connection.py b/uitest/connection.py
new file mode 100644
index 0000000..0c87f30
--- /dev/null
+++ b/uitest/connection.py
@@ -0,0 +1,147 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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/.
+#
+
+import os
+import subprocess
+import sys
+import time
+import uuid
+import datetime
+
+try:
+ import pyuno
+ import uno
+ import unohelper
+except ImportError:
+ print("pyuno not found: try to set PYTHONPATH and URE_BOOTSTRAP variables")
+ print("PYTHONPATH=/installation/opt/program")
+ print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc")
+ raise
+
+class OfficeConnection:
+ def __init__(self, args):
+ self.args = args
+ self.soffice = None
+ self.socket = None
+ self.xContext = None
+ self.pro = None
+
+ def setUp(self):
+ (method, sep, rest) = self.args["--soffice"].partition(":")
+ if sep != ":":
+ raise Exception("soffice parameter does not specify method")
+ if method == "path":
+ socket = "pipe,name=pytest" + str(uuid.uuid1())
+ try:
+ userdir = self.args["--userdir"]
+ except KeyError:
+ raise Exception("'path' method requires --userdir")
+ if not(userdir.startswith("file://")):
+ raise Exception("--userdir must be file URL")
+ self.soffice = self.bootstrap(rest, userdir, socket)
+ elif method == "connect":
+ socket = rest
+ else:
+ raise Exception("unsupported connection method: " + method)
+ self.xContext = self.connect(socket)
+
+ def bootstrap(self, soffice, userdir, socket):
+ argv = [ soffice, "--accept=" + socket + ";urp",
+ "-env:UserInstallation=" + userdir,
+ "--quickstart=no", "--nofirststartwizard",
+ "--norestore", "--nologo" ]
+ if "--valgrind" in self.args:
+ argv.append("--valgrind")
+ self.pro = subprocess.Popen(argv)
+ return self.pro
+
+ def connect(self, socket):
+ xLocalContext = uno.getComponentContext()
+ xUnoResolver = xLocalContext.ServiceManager.createInstanceWithContext(
+ "com.sun.star.bridge.UnoUrlResolver", xLocalContext)
+ url = "uno:" + socket + ";urp;StarOffice.ComponentContext"
+ print("OfficeConnection: connecting to: " + url)
+ while True:
+ try:
+ xContext = xUnoResolver.resolve(url)
+ return xContext
+# except com.sun.star.connection.NoConnectException
+ except pyuno.getClass("com.sun.star.connection.NoConnectException"):
+ print("NoConnectException: sleeping...")
+ time.sleep(1)
+
+ def tearDown(self):
+ if self.soffice:
+ if self.xContext:
+ try:
+ print("tearDown: calling terminate()...")
+ xMgr = self.xContext.ServiceManager
+ xDesktop = xMgr.createInstanceWithContext(
+ "com.sun.star.frame.Desktop", self.xContext)
+ xDesktop.terminate()
+ print("...done")
+# except com.sun.star.lang.DisposedException:
+ except pyuno.getClass("com.sun.star.beans.UnknownPropertyException"):
+ print("caught UnknownPropertyException while TearDown")
+ pass # ignore, also means disposed
+ except pyuno.getClass("com.sun.star.lang.DisposedException"):
+ print("caught DisposedException while TearDown")
+ pass # ignore
+ else:
+ self.soffice.terminate()
+ ret = self.soffice.wait()
+ self.xContext = None
+ self.socket = None
+ self.soffice = None
+ if ret != 0:
+ raise Exception("Exit status indicates failure: " + str(ret))
+
+ def kill(self):
+ command = "kill " + str(self.pro.pid)
+ print(command)
+ os.system(command)
+
+ @classmethod
+ def getHelpText(cls):
+ message = """
+ --soffice=method:location
+ specify soffice instance to connect to
+ supported methods: 'path', 'connect'
+ --userdir=URL specify user installation directory for 'path' method
+ --valgrind pass --valgrind to soffice for 'path' method
+
+ 'location' is a pathname, not a URL. 'userdir' is a URL.
+ """
+ return message
+
+
+class PersistentConnection:
+ def __init__(self, args):
+ self.args = args
+ self.connection = None
+ def getContext(self):
+ return self.connection.xContext
+ def setUp(self):
+ assert(not self.connection)
+ conn = OfficeConnection(self.args)
+ conn.setUp()
+ self.connection = conn
+ def preTest(self):
+ assert(self.connection)
+ def postTest(self):
+ assert(self.connection)
+ def tearDown(self):
+ if self.connection:
+ try:
+ self.connection.tearDown()
+ finally:
+ self.connection = None
+ def kill(self):
+ if self.connection:
+ self.connection.kill()
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/demo_ui/checkbox.py b/uitest/demo_ui/checkbox.py
new file mode 100644
index 0000000..b855652
--- /dev/null
+++ b/uitest/demo_ui/checkbox.py
@@ -0,0 +1,37 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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_helper import UITest
+
+from helper import mkPropertyValues
+
+import time
+
+try:
+ import pyuno
+ import uno
+ import unohelper
+except ImportError:
+ print("pyuno not found: try to set PYTHONPATH and URE_BOOTSTRAP variables")
+ print("PYTHONPATH=/installation/opt/program")
+ print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc")
+ raise
+
+def toggle_checkbox(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ ui_test.execute_dialog_through_command(".uno:FormatCellDialog")
+ xCellsDlg = xUITest.getTopFocusWindow()
+ xNegativeNumRedCB = xCellsDlg.getChild("negnumred")
+ xNegativeNumRedCB.executeAction("CLICK",tuple())
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/demo_ui/combobox.py b/uitest/demo_ui/combobox.py
new file mode 100644
index 0000000..8cb7ac8
--- /dev/null
+++ b/uitest/demo_ui/combobox.py
@@ -0,0 +1,28 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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_helper import UITest
+
+from helper import mkPropertyValues
+
+def select_entry_pos(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ ui_test.execute_modeless_dialog_through_command(".uno:AddName")
+ xAddNameDlg = xUITest.getTopFocusWindow()
+
+ scopeCB = xAddNameDlg.getChild("scope")
+ props = {"POS": "1"}
+ actionProps = mkPropertyValues(props)
+ scopeCB.executeAction("SELECT", actionProps)
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/demo_ui/edit.py b/uitest/demo_ui/edit.py
new file mode 100644
index 0000000..dab55c5
--- /dev/null
+++ b/uitest/demo_ui/edit.py
@@ -0,0 +1,47 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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_helper import UITest
+
+from helper import mkPropertyValues
+
+try:
+ import pyuno
+ import uno
+ import unohelper
+except ImportError:
+ print("pyuno not found: try to set PYTHONPATH and URE_BOOTSTRAP variables")
+ print("PYTHONPATH=/installation/opt/program")
+ print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc")
+ raise
+
+def type_text(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ ui_test.execute_modeless_dialog_through_command(".uno:AddName")
+ xAddNameDlg = xUITest.getTopFocusWindow()
+
+ xEdit = xAddNameDlg.getChild("edit")
+
+ props = {"TEXT": "simpleRangeName"}
+ actionProps = mkPropertyValues(props)
+ xEdit.executeAction("TYPE", actionProps)
+
+ xAddBtn = xAddNameDlg.getChild("cancel")
+ xAddBtn.executeAction("CLICK", tuple())
+
+ xUITest.executeCommand(".uno:CloseDoc")
+
+ ui_test.close_doc()
+
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/demo_ui/listbox.py b/uitest/demo_ui/listbox.py
new file mode 100644
index 0000000..41c6e4d
--- /dev/null
+++ b/uitest/demo_ui/listbox.py
@@ -0,0 +1,45 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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_helper import UITest
+
+from helper import mkPropertyValues
+
+def select_entry_pos(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ ui_test.execute_dialog_through_command(".uno:FormatCellDialog")
+ xCellsDlg = xUITest.getTopFocusWindow()
+
+ categoryLB = xCellsDlg.getChild("categorylb")
+ props = {"POS": "4"}
+ actionProps = mkPropertyValues(props)
+ categoryLB.executeAction("SELECT", actionProps)
+
+def select_entry_text(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ ui_test.execute_dialog_through_command(".uno:FormatCellDialog")
+ xCellsDlg = xUITest.getTopFocusWindow()
+
+ categoryLB = xCellsDlg.getChild("categorylb")
+ props = {"TEXT": "Time"}
+
+ actionProps = mkPropertyValues(props)
+ categoryLB.executeAction("SELECT", actionProps)
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/helper.py b/uitest/helper.py
new file mode 100644
index 0000000..e660739
--- /dev/null
+++ b/uitest/helper.py
@@ -0,0 +1,93 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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/.
+#
+
+import os
+import subprocess
+
+try:
+ import pyuno
+ import uno
+ import unohelper
+except ImportError:
+ print("pyuno not found: try to set PYTHONPATH and URE_BOOTSTRAP variables")
+ print("PYTHONPATH=/installation/opt/program")
+ print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc")
+ raise
+
+try:
+ from com.sun.star.document import XDocumentEventListener
+except ImportError:
+ print("UNO API class not found: try to set URE_BOOTSTRAP variable")
+ print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc")
+ raise
+
+class EventListener(XDocumentEventListener,unohelper.Base):
+
+ def __init__(self, xContext, eventName):
+ self.xGEB = xContext.ServiceManager.createInstanceWithContext(
+ "com.sun.star.frame.GlobalEventBroadcaster", xContext)
+ self.xContext = xContext
+ self.executed = False
+ self.eventName = eventName
+
+ def __enter__(self):
+ self.xGEB.addDocumentEventListener(self)
+ return self
+
+ def __exit__(self, type, value, traceback):
+ self.xGEB.removeDocumentEventListener(self)
+
+ def documentEventOccured(self, event):
+ print(str(event.EventName))
+ if event.EventName == self.eventName:
+ self.executed = True
+
+ def disposing(event):
+ pass
+
+class Screenshot(object):
+
+ def __init__(self):
+ pass
+
+ def _create_python_path(self):
+ """ creates a clean PATH env variable
+
+ We need to avoid picking the LibreOffice python and
+ the corresponding PYTHONPATH, PYTHONHOME variables
+ """
+ env = os.environ.copy()
+
+ # remove any python properties pointing to soffice internal python
+ del env['PYTHONPATH']
+ del env['PYTHONHOME']
+
+ # remove path pointing to instdir to avoid picking up the soffice provided python
+ path = env['PATH']
+ path_parts = path.split(':')
+ cleaned_path = (path for path in path_parts if path.find("instdir") == -1)
+ new_path = ":".join( cleaned_path )
+ env['PATH'] = new_path
+ return env
+
+ def take_screenshot(self, x1, y1, x2, y2):
+ env = self._create_python_path()
+ popen = subprocess.Popen(" ".join(["./screenshot.py", x1, y1, x2, y2]), shell=True, env=env)
+ popen.wait()
+
+def mkPropertyValue(name, value):
+ """ Create a UNO ProertyValue from two input values.
+ """
+ return uno.createUnoStruct("com.sun.star.beans.PropertyValue",
+ name, 0, value, 0)
+
+def mkPropertyValues(vals):
+ """ Create UNO property values from a map.
+ """
+ return tuple([mkPropertyValue(name, value) for (name, value) in vals.items()])
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/main.py b/uitest/main.py
new file mode 100644
index 0000000..11e92ee
--- /dev/null
+++ b/uitest/main.py
@@ -0,0 +1,66 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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/.
+#
+
+import sys
+import getopt
+import os
+import importlib
+
+from connection import PersistentConnection, OfficeConnection
+
+def load_test(name):
+ module_name, obj_name = name.rsplit(".", 1)
+ module = importlib.import_module(module_name)
+ obj = getattr(module, obj_name)
+ return obj
+
+def generic_test(opts, test_name):
+ connection = PersistentConnection(opts)
+ connection.setUp()
+ xContext = connection.getContext()
+ func = load_test(test_name)
+ func(xContext)
+ connection.tearDown()
+
+def parseArgs(argv):
+ (optlist,args) = getopt.getopt(argv[1:], "hr",
+ ["help", "soffice=", "userdir=", "calc-demo", "file="])
+ return (dict(optlist), args)
+
+def usage():
+ message = """usage: {program} [option]... [task_file]..."
+ -h | --help: print usage information
+ {connection_params}
+ the 'task_file' parameters should be
+ full absolute pathnames, not URLs."""
+ print(message.format(program = os.path.basename(sys.argv[0]), \
+ connection_params = OfficeConnection.getHelpText()))
+
+if __name__ == "__main__":
+ (opts,args) = parseArgs(sys.argv)
+ if "-h" in opts or "--help" in opts:
+ usage()
+ sys.exit()
+ elif not "--soffice" in opts:
+ usage()
+ sys.exit(1)
+ elif "--file" in opts:
+ file_name = opts["--file"]
+ with open(file_name) as f:
+ lines = f.readlines()
+ for line in lines:
+ line = line.strip()
+ generic_test(opts, line)
+
+ elif "--calc-demo" in opts:
+ generic_test(opts, "calc_tests.about_test.test_about_dlg_with_screenshot")
+ generic_test(opts, "calc_tests.create_range_name.create_range_name")
+ else:
+ usage()
+ sys.exit(1)
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/screenshot.py b/uitest/screenshot.py
new file mode 100755
index 0000000..af3cd44
--- /dev/null
+++ b/uitest/screenshot.py
@@ -0,0 +1,12 @@
+#!/usr/bin/env python
+
+import sys
+
+import pyscreenshot as ImageGrab
+
+if __name__ == "__main__":
+ # part of the screen
+ if len(sys.argv) != 5:
+ sys.exit(1)
+ im=ImageGrab.grab(bbox=(int(sys.argv[1]),int(sys.argv[2]),int(sys.argv[3]),int(sys.argv[4]))) # X1,Y1,X2,Y2
+ im.show()
diff --git a/uitest/uitest_helper.py b/uitest/uitest_helper.py
new file mode 100644
index 0000000..3f46618
--- /dev/null
+++ b/uitest/uitest_helper.py
@@ -0,0 +1,77 @@
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+#
+# 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/.
+#
+
+import time
+
+from helper import EventListener
+
+class UITest(object):
+
+ def __init__(self, xUITest, xContext):
+ self._xUITest = xUITest
+ self._xContext = xContext
+
+ def execute_dialog_through_command(self, command):
+ with EventListener(self._xContext, "DialogExecute") as event:
+ self._xUITest.executeCommand(command)
+ time_ = 0
+ while time_ < 30:
+ if event.executed:
+ time.sleep(1)
+ return
+ time_ += 1
+ time.sleep(1)
+
+ # report a failure here
+ print("failure execute modal dialog")
+
+ def execute_modeless_dialog_through_command(self, command):
+ with EventListener(self._xContext, "ModelessDialogVisible") as event:
+ self._xUITest.executeCommand(command)
+ time_ = 0
+ while time_ < 30:
+ if event.executed:
+ time.sleep(1)
+ return
+ time_ += 1
+ time.sleep(1)
+
+ # report a failure here
+ print("failure execute modeless dialog")
+
+ def create_doc_in_start_center(self, app):
+ xStartCenter = self._xUITest.getTopFocusWindow()
+ xBtn = xStartCenter.getChild(app + "_all")
+ with EventListener(self._xContext, "OnNew") as event:
+ xBtn.executeAction("CLICK", tuple())
+ time_ = 0
+ while time_ < 30:
+ if event.executed:
+ return
+ time_ += 1
+ time.sleep(1)
+
+ print("failure doc in start center")
+
+ # report a failure here
+
+ def close_doc(self):
+ # also need to handle "OnViewClosed" event
+ with EventListener(self._xContext, "DialogExecute") as event:
+ self._xUITest.executeCommand(".uno.CloseDoc")
+ time_ = 0
+ while time_ < 30:
+ if event.executed:
+ xCloseDlg = self._xUITest.getTopFocusWindow()
+ xNoBtn = xCloseDlg.getChild("discard")
+ xNoBtn.executeAction("CLICK", tuple())
+ return
+
+ time_ += 1
+ time.sleep(1)
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 6586cf5289349dcc6af111b7364836e78386460d
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Tue Feb 16 10:41:06 2016 +0100
ignore crashreport if norestore was specified
Change-Id: I849b3e693e59e6846ee5afed1b75790531b68696
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index 3166b34..65d4639 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -2259,6 +2259,11 @@ void Desktop::OpenClients()
}
}
+#if HAVE_FEATURE_BREAKPAD
+ if (!rArgs.IsNoRestore() && crashReportInfoExists())
+ handleCrashReport();
+#endif
+
// Disable AutoSave feature in case "--norestore" or a similar command line switch is set on the command line.
// The reason behind: AutoSave/EmergencySave/AutoRecovery share the same data.
// But the require that all documents, which are saved as backup should exists inside
commit a07cdf67aad424fcaa702541fbe86736740d1d75
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Mar 28 18:35:51 2016 +0200
temp
diff --git a/vcl/source/uitest/uno/uiobject_uno.cxx b/vcl/source/uitest/uno/uiobject_uno.cxx
index 8f3a3c5..fc66839 100644
--- a/vcl/source/uitest/uno/uiobject_uno.cxx
+++ b/vcl/source/uitest/uno/uiobject_uno.cxx
@@ -24,7 +24,10 @@ css::uno::Reference<css::ui::test::XUIObject> SAL_CALL UIObjectUnoObj::getChild(
throw (css::uno::RuntimeException, std::exception)
{
SolarMutexGuard aGuard;
+ SAL_DEBUG(mpObj->get_state()["ID"]);
+ SAL_DEBUG(rID);
std::unique_ptr<UIObject> pObj = mpObj->get_child(rID);
+ assert(pObj);
return new UIObjectUnoObj(std::move(pObj));
}
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 6585e9b..c48ba70 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -44,6 +44,9 @@
#include <vcl/settings.hxx>
#include <vcl/sysdata.hxx>
+#include "uitest/uiobject_impl.hxx"
+#include <vcl/uitest/uitest.hxx>
+
#include <salframe.hxx>
#include <salobj.hxx>
#include <salinst.hxx>
@@ -1831,7 +1834,35 @@ void Window::KeyInput( const KeyEvent& rKEvt )
if (cod.IsShift() && cod.IsMod1() && cod.GetCode() == KEY_F12)
{
+ WindowUIObject aObject(this);
+ aObject.dumpState();
+
+ StringMap aMap;
+ aMap["TEXT"] = "asd%3";
+ aObject.execute("TYPE", aMap);
+ }
+ if (cod.IsShift() && cod.IsMod1() && cod.GetCode() == KEY_F10)
+ {
+ WindowUIObject aObject(this);
+ std::unique_ptr<UIObject> pCancelBtn = aObject.get_child("edit");
+ StringMap aMap;
+ aMap["TEXT"] = "asd%3";
+ pCancelBtn->execute("SET", aMap);
+ return;
+ }
+
+ if (cod.IsShift() && cod.IsMod1() && cod.GetCode() == KEY_F11)
+ {
+ WindowUIObject aObject(this);
+ aObject.dumpHierarchy();
+ }
+
+ if (cod.IsShift() && cod.IsMod1() && cod.GetCode() == KEY_F9)
+ {
+ UITest aTest;
+ std::unique_ptr<UIObject> pObject = aTest.getFocusTopWindow();
+ pObject->dumpState();
}
NotifyEvent aNEvt( MouseNotifyEvent::KEYINPUT, this, &rKEvt );
commit 834e240192604f5c268ee40e1a8a0021a3b35ff5
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Mar 28 18:35:14 2016 +0200
add todo comment
Change-Id: Ie2f5f1342f3d91aeb43d5c9c62a2dbac4c801451
diff --git a/vcl/inc/uitest/uiobject_impl.hxx b/vcl/inc/uitest/uiobject_impl.hxx
index 44e2084..a23d57fc 100644
--- a/vcl/inc/uitest/uiobject_impl.hxx
+++ b/vcl/inc/uitest/uiobject_impl.hxx
@@ -44,6 +44,7 @@ protected:
};
+// TODO: moggi: what about push buttons?
class ButtonUIObject : public WindowUIObject
{
VclPtr<Button> mxButton;
commit 65f75d444ec7f1c4354749952d86d80d2e94f97c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Mar 28 18:34:44 2016 +0200
initial support for spinbuttons in uitesting
Change-Id: I4e62cb65cecdff8ac1a89c3f9c3a14e5206a9115
diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx
index 63246e8..55f5088 100644
--- a/include/vcl/uitest/uiobject.hxx
+++ b/include/vcl/uitest/uiobject.hxx
@@ -23,6 +23,7 @@ enum class UIObjectType
CHECKBOX,
LISTBOX,
COMBOBOX,
+ SPINBUTTON,
TABPAGE,
UNKNOWN
};
diff --git a/vcl/inc/uitest/uiobject_impl.hxx b/vcl/inc/uitest/uiobject_impl.hxx
index f8391b4..44e2084 100644
--- a/vcl/inc/uitest/uiobject_impl.hxx
+++ b/vcl/inc/uitest/uiobject_impl.hxx
@@ -15,6 +15,7 @@
class TabPage;
class ComboBox;
+class SpinButton;
class WindowUIObject : public UIObject
{
@@ -183,4 +184,25 @@ protected:
virtual OUString get_name() const override;
};
+class SpinUIObject : public WindowUIObject
+{
+private:
+ VclPtr<SpinButton> mxSpinButton;
+
+public:
+
+ SpinUIObject(VclPtr<SpinButton> xSpinButton);
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ virtual StringMap get_state() override;
+
+ virtual UIObjectType get_type() const override;
+
+protected:
+
+ virtual OUString get_name() const override;
+};
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 57ef1ec..259cb9f 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -14,6 +14,7 @@
#include <vcl/tabpage.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/combobox.hxx>
+#include <vcl/spin.hxx>
#include <rtl/ustrbuf.hxx>
@@ -548,4 +549,42 @@ OUString ComboBoxUIObject::get_name() const
return OUString("ComboBoxUIObject");
}
+SpinUIObject::SpinUIObject(VclPtr<SpinButton> xSpinButton):
+ WindowUIObject(xSpinButton),
+ mxSpinButton(xSpinButton)
+{
+}
+
+void SpinUIObject::execute(const OUString& rAction,
+ const StringMap& rParameters)
+{
+ if (rAction == "UP")
+ {
+ /* code */
+ }
+ else if (rAction == "DOWN")
+ {
+ }
+}
+
+StringMap SpinUIObject::get_state()
+{
+ StringMap aMap = WindowUIObject::get_state();
+ aMap["Min"] = OUString::number(mxSpinButton->GetRangeMin());
+ aMap["Max"] = OUString::number(mxSpinButton->GetRangeMax());
+ aMap["Step"] = OUString::number(mxSpinButton->GetValueStep());
+ aMap["Value"] = OUString::number(mxSpinButton->GetValue());
+
+ return aMap;
+}
+
+UIObjectType SpinUIObject::get_type() const
+{
+ return UIObjectType::SPINBUTTON;
+}
+
+OUString SpinUIObject::get_name() const
+{
+ return OUString("SpinUIObject");
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 5102cd012be33c5d0ff182e7c2581a4b85b00e12
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Mar 28 18:33:30 2016 +0200
add initial support for combo boxes to uitesting
Change-Id: I82aa2d877216bc1bb984bd16e2d1d54a15fcc4fa
diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx
index 2754f67..63246e8 100644
--- a/include/vcl/uitest/uiobject.hxx
+++ b/include/vcl/uitest/uiobject.hxx
@@ -22,6 +22,7 @@ enum class UIObjectType
EDIT,
CHECKBOX,
LISTBOX,
+ COMBOBOX,
TABPAGE,
UNKNOWN
};
diff --git a/vcl/inc/uitest/uiobject_impl.hxx b/vcl/inc/uitest/uiobject_impl.hxx
index 7a5bd04..f8391b4 100644
--- a/vcl/inc/uitest/uiobject_impl.hxx
+++ b/vcl/inc/uitest/uiobject_impl.hxx
@@ -14,6 +14,7 @@
#include <vcl/edit.hxx>
class TabPage;
+class ComboBox;
class WindowUIObject : public UIObject
{
@@ -160,4 +161,26 @@ protected:
virtual OUString get_name() const override;
};
+// TODO: moggi: should it inherit from EditUIObject?
+class ComboBoxUIObject : public WindowUIObject
+{
+private:
+ VclPtr<ComboBox> mxComboBox;
+
+public:
+
+ ComboBoxUIObject(VclPtr<ComboBox> xListBox);
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ virtual StringMap get_state() override;
+
+ virtual UIObjectType get_type() const override;
+
+protected:
+
+ virtual OUString get_name() const override;
+};
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/uitest/factory.cxx b/vcl/source/uitest/factory.cxx
index 9827c02..77c3eb9 100644
--- a/vcl/source/uitest/factory.cxx
+++ b/vcl/source/uitest/factory.cxx
@@ -12,6 +12,7 @@
#include <vcl/tabpage.hxx>
#include <vcl/lstbox.hxx>
+#include <vcl/combobox.hxx>
std::unique_ptr<UIObject> UITestWrapperFactory::createObject(vcl::Window* pWindow)
{
@@ -68,6 +69,13 @@ std::unique_ptr<UIObject> UITestWrapperFactory::createObject(vcl::Window* pWindo
return std::unique_ptr<UIObject>(new CheckBoxUIObject(pCheckBox));
}
break;
+ case WINDOW_COMBOBOX:
+ {
+ ComboBox* pComboBox = dynamic_cast<ComboBox*>(pWindow);
+ assert(pComboBox);
+ return std::unique_ptr<UIObject>(new ComboBoxUIObject(pComboBox));
+ }
+ break;
case WINDOW_LISTBOX:
{
ListBox* pListBox = dynamic_cast<ListBox*>(pWindow);
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index d401ccb..57ef1ec 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -13,6 +13,7 @@
#include <vcl/event.hxx>
#include <vcl/tabpage.hxx>
#include <vcl/lstbox.hxx>
+#include <vcl/combobox.hxx>
#include <rtl/ustrbuf.hxx>
@@ -508,4 +509,43 @@ OUString ListBoxUIObject::get_name() const
return OUString("ListBoxUIObject");
}
+ComboBoxUIObject::ComboBoxUIObject(VclPtr<ComboBox> xComboBox):
+ WindowUIObject(xComboBox),
+ mxComboBox(xComboBox)
+{
+}
+
+void ComboBoxUIObject::execute(const OUString& rAction,
+ const StringMap& rParameters)
+{
+ if (rAction == "SELECT")
+ {
+ if (rParameters.find("POS") != rParameters.end())
+ {
+ auto itr = rParameters.find("POS");
+ OUString aVal = itr->second;
+ sal_Int32 nPos = aVal.toInt32();
+ mxComboBox->SelectEntryPos(nPos);
+ }
+ mxComboBox->Select();
+ }
+}
+
+StringMap ComboBoxUIObject::get_state()
+{
+ StringMap aMap = WindowUIObject::get_state();
+
+ return aMap;
+}
+
+UIObjectType ComboBoxUIObject::get_type() const
+{
+ return UIObjectType::COMBOBOX;
+}
+
+OUString ComboBoxUIObject::get_name() const
+{
+ return OUString("ComboBoxUIObject");
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 22447f419f6ded1ee34344f452c2dda0d9b8a069
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Mar 28 18:30:57 2016 +0200
don't allow access to disabled or hidden listbox
This should maybe be extended to other parts of the framework.
Change-Id: I03137bc34a1e4b8e6ba4024f66d1dfde122bb9d2
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index b266b7d..d401ccb 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -464,6 +464,9 @@ ListBoxUIObject::ListBoxUIObject(VclPtr<ListBox> xListBox):
void ListBoxUIObject::execute(const OUString& rAction,
const StringMap& rParameters)
{
+ if (!mxListBox->IsEnabled() || !mxListBox->IsReallyVisible())
+ return;
+
if (rAction == "SELECT")
{
bool bSelect = true;
commit 0ab5e82ffc23ea7b4d26a43a803a8d7eabff74f6
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Mar 28 18:29:48 2016 +0200
initial work on tab page ui testing support
Change-Id: I76fdaad1f84d3b18b130decd7bdb4eef82d341e9
diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx
index c982dfb..2754f67 100644
--- a/include/vcl/uitest/uiobject.hxx
+++ b/include/vcl/uitest/uiobject.hxx
@@ -22,6 +22,7 @@ enum class UIObjectType
EDIT,
CHECKBOX,
LISTBOX,
+ TABPAGE,
UNKNOWN
};
diff --git a/vcl/inc/uitest/uiobject_impl.hxx b/vcl/inc/uitest/uiobject_impl.hxx
index 3efeebe..7a5bd04 100644
--- a/vcl/inc/uitest/uiobject_impl.hxx
+++ b/vcl/inc/uitest/uiobject_impl.hxx
@@ -13,6 +13,8 @@
#include <vcl/dialog.hxx>
#include <vcl/edit.hxx>
+class TabPage;
+
class WindowUIObject : public UIObject
{
VclPtr<vcl::Window> mxWindow;
@@ -117,6 +119,26 @@ protected:
virtual OUString get_name() const override;
};
+class TabPageUIObject : public WindowUIObject
+{
+private:
+ VclPtr<TabPage> mxTabPage;
+public:
+ TabPageUIObject(VclPtr<TabPage> xTabPage);
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ virtual StringMap get_state() override;
+
+
+ virtual UIObjectType get_type() const override;
+
+protected:
+
+ virtual OUString get_name() const override;
+};
+
class ListBoxUIObject : public WindowUIObject
{
private:
diff --git a/vcl/source/uitest/factory.cxx b/vcl/source/uitest/factory.cxx
index ef5c4f0..9827c02 100644
--- a/vcl/source/uitest/factory.cxx
+++ b/vcl/source/uitest/factory.cxx
@@ -10,6 +10,7 @@
#include "uitest/factory.hxx"
#include "uitest/uiobject_impl.hxx"
+#include <vcl/tabpage.hxx>
#include <vcl/lstbox.hxx>
std::unique_ptr<UIObject> UITestWrapperFactory::createObject(vcl::Window* pWindow)
@@ -74,6 +75,13 @@ std::unique_ptr<UIObject> UITestWrapperFactory::createObject(vcl::Window* pWindo
return std::unique_ptr<UIObject>(new ListBoxUIObject(pListBox));
}
break;
+ case WINDOW_TABPAGE:
+ {
+ //TabPage* pTabPage = dynamic_cast<TabPage*>(pWindow);
+ //assert(pTabPage);
+ // return std::unique_ptr<UIObject>(new TabPageUIObject(pTabPage));
+ }
+ break;
default:
break;
}
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 3082443..b266b7d 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -11,6 +11,7 @@
#include "uitest/factory.hxx"
#include <vcl/event.hxx>
+#include <vcl/tabpage.hxx>
#include <vcl/lstbox.hxx>
#include <rtl/ustrbuf.hxx>
@@ -425,6 +426,35 @@ OUString CheckBoxUIObject::get_name() const
return OUString("CheckBoxUIObject");
}
+TabPageUIObject::TabPageUIObject(VclPtr<TabPage> xTabPage):
+ WindowUIObject(xTabPage),
+ mxTabPage(xTabPage)
+{
+}
+
+void TabPageUIObject::execute(const OUString& rAction,
+ const StringMap& rParameters)
+{
+
+}
+
+StringMap TabPageUIObject::get_state()
+{
+ StringMap aMap = WindowUIObject::get_state();
+
+ return aMap;
+}
+
+UIObjectType TabPageUIObject::get_type() const
+{
+ return UIObjectType::TABPAGE;
+}
+
+OUString TabPageUIObject::get_name() const
+{
+ return OUString("TabPageUIObject");
+}
+
ListBoxUIObject::ListBoxUIObject(VclPtr<ListBox> xListBox):
WindowUIObject(xListBox),
mxListBox(xListBox)
commit 13286dc9b657ef8d426296a7e794f2e62d597e44
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Mar 28 18:27:00 2016 +0200
provide a few more properties for list boxes
Change-Id: I3d4af79a97daacb3d431a4018c88c0eb943e4723
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index a130f17..3082443 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -459,6 +459,8 @@ StringMap ListBoxUIObject::get_state()
StringMap aMap = WindowUIObject::get_state();
aMap["ReadOnly"] = OUString::boolean(mxListBox->IsReadOnly());
aMap["MultiSelect"] = OUString::boolean(mxListBox->IsMultiSelectionEnabled());
+ aMap["EntryCount"] = OUString::number(mxListBox->GetEntryCount());
+ aMap["SelectEntryCount"] = OUString::number(mxListBox->GetSelectEntryCount());
return aMap;
}
commit 9a41a17ea45f3ccbfbe5d42626ba2eb7dc91d0d8
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Mar 28 18:26:34 2016 +0200
provide a few more properties in the state map
Change-Id: I0819a1bb2134d77852633e7a94bf94dadcdfdec0
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 0abfb51..a130f17 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -161,6 +161,8 @@ StringMap WindowUIObject::get_state()
aPos += aParentPos;
}
aMap["AbsPosition"] = to_string(aPos);
+ aMap["Text"] = mxWindow->GetText();
+ aMap["DisplayText"] = mxWindow->GetDisplayText();
return aMap;
}
More information about the Libreoffice-commits
mailing list