[Libreoffice-commits] core.git: 149 commits - bin/gbuild-to-ide comphelper/qa comphelper/source desktop/source include/comphelper include/sal include/sfx2 include/svtools include/vcl Makefile.in offapi/com offapi/UnoApi_offapi.mk oox/source RepositoryModule_host.mk sc/Library_sc.mk sc/source sd/Library_sd.mk sd/source sfx2/inc sfx2/Library_sfx.mk sfx2/source solenv/gbuild svtools/inc svtools/Library_svt.mk svtools/source sw/Library_sw.mk sw/source uitest/calc_tests uitest/connection.py uitest/demo_ui uitest/helper.py uitest/impress_tests uitest/__init__.py uitest/main.py uitest/Makefile uitest/Module_uitest.mk uitest/README uitest/uihelper uitest/UITest_calc_demo.mk uitest/uitest_helper.py uitest/UITest_writer_demo.mk uitest/writer_tests vcl/CppunitTest_vcl_lifecycle.mk vcl/inc vcl/Library_vcl.mk vcl/source vcl/vcl.unx.component
Markus Mohrhard
markus.mohrhard at googlemail.com
Sat Jun 18 15:08:53 UTC 2016
Makefile.in | 3
RepositoryModule_host.mk | 3
bin/gbuild-to-ide | 2
comphelper/qa/string/test_string.cxx | 12
comphelper/source/misc/dispatchcommand.cxx | 2
comphelper/source/misc/string.cxx | 29
desktop/source/app/app.cxx | 1
include/comphelper/string.hxx | 3
include/sal/log-areas.dox | 2
include/sfx2/tabdlg.hxx | 3
include/svtools/treelistbox.hxx | 2
include/vcl/button.hxx | 23
include/vcl/combobox.hxx | 2
include/vcl/dialog.hxx | 2
include/vcl/dllapi.h | 6
include/vcl/edit.hxx | 2
include/vcl/lstbox.hxx | 2
include/vcl/spinfld.hxx | 2
include/vcl/tabctrl.hxx | 2
include/vcl/uitest/factory.hxx | 23
include/vcl/uitest/uiobject.hxx | 331 ++++++
include/vcl/uitest/uitest.hxx | 27
include/vcl/window.hxx | 13
offapi/UnoApi_offapi.mk | 7
offapi/com/sun/star/ui/test/UITest.idl | 29
offapi/com/sun/star/ui/test/XUIObject.idl | 34
offapi/com/sun/star/ui/test/XUITest.idl | 28
oox/source/export/chartexport.cxx | 20
sc/Library_sc.mk | 1
sc/source/ui/app/inputwin.cxx | 1
sc/source/ui/inc/gridwin.hxx | 3
sc/source/ui/inc/uiobject.hxx | 47
sc/source/ui/uitest/uiobject.cxx | 240 ++++
sc/source/ui/view/gridwin.cxx | 12
sd/Library_sd.mk | 1
sd/source/ui/framework/factories/BasicViewFactory.cxx | 7
sd/source/ui/inc/ViewShell.hxx | 2
sd/source/ui/inc/Window.hxx | 3
sd/source/ui/inc/uiobject.hxx | 52
sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx | 1
sd/source/ui/uitest/uiobject.cxx | 147 ++
sd/source/ui/view/sdwindow.cxx | 14
sd/source/ui/view/viewshel.cxx | 5
sfx2/Library_sfx.mk | 1
sfx2/inc/uitest/sfx_uiobject.hxx | 39
sfx2/source/dialog/tabdlg.cxx | 13
sfx2/source/uitest/sfx_uiobject.cxx | 90 +
solenv/gbuild/Module.mk | 40
solenv/gbuild/Postprocess.mk | 1
solenv/gbuild/TargetLocations.mk | 3
solenv/gbuild/UITest.mk | 114 ++
solenv/gbuild/extensions/post_SpeedUpTargets.mk | 14
solenv/gbuild/gbuild.mk | 1
svtools/Library_svt.mk | 1
svtools/inc/uitest/uiobject.hxx | 28
svtools/source/contnr/treelistbox.cxx | 6
svtools/source/dialogs/wizardmachine.cxx | 3
svtools/source/uitest/uiobject.cxx | 36
sw/Library_sw.mk | 1
sw/source/uibase/docvw/edtwin.cxx | 1
sw/source/uibase/docvw/edtwin3.cxx | 6
sw/source/uibase/inc/edtwin.hxx | 2
sw/source/uibase/inc/uiobject.hxx | 42
sw/source/uibase/uitest/uiobject.cxx | 114 ++
uitest/Makefile | 14
uitest/Module_uitest.mk | 16
uitest/README | 1
uitest/UITest_calc_demo.mk | 15
uitest/UITest_writer_demo.mk | 15
uitest/calc_tests/about_test.py | 29
uitest/calc_tests/calc_demo.txt | 5
uitest/calc_tests/create_chart.py | 186 +++
uitest/calc_tests/create_range_name.py | 72 +
uitest/calc_tests/function_wizard.py | 44
uitest/calc_tests/gridwindow.py | 65 +
uitest/connection.py | 139 ++
uitest/demo_ui/checkbox.py | 42
uitest/demo_ui/combobox.py | 33
uitest/demo_ui/demo_ui.txt | 10
uitest/demo_ui/edit.py | 44
uitest/demo_ui/gridwin.py | 73 +
uitest/demo_ui/listbox.py | 55 +
uitest/demo_ui/radiobutton.py | 43
uitest/demo_ui/tabdialog.py | 54 +
uitest/helper.py | 80 +
uitest/impress_tests/start.py | 114 ++
uitest/main.py | 75 +
uitest/uihelper/calc.py | 15
uitest/uitest_helper.py | 90 +
uitest/writer_tests/start.py | 109 ++
uitest/writer_tests/writer_demo.txt | 4
vcl/CppunitTest_vcl_lifecycle.mk | 1
vcl/Library_vcl.mk | 5
vcl/inc/window.h | 1
vcl/source/control/button.cxx | 19
vcl/source/control/combobox.cxx | 6
vcl/source/control/edit.cxx | 6
vcl/source/control/listbox.cxx | 6
vcl/source/control/spinfld.cxx | 6
vcl/source/control/tabctrl.cxx | 12
vcl/source/uitest/uiobject.cxx | 863 ++++++++++++++++
vcl/source/uitest/uitest.cxx | 40
vcl/source/uitest/uno/uiobject_uno.cxx | 121 ++
vcl/source/uitest/uno/uiobject_uno.hxx | 67 +
vcl/source/uitest/uno/uitest_uno.cxx | 108 ++
vcl/source/window/builder.cxx | 1
vcl/source/window/dialog.cxx | 25
vcl/source/window/layout.cxx | 7
vcl/source/window/window.cxx | 21
vcl/vcl.unx.component | 4
110 files changed, 4418 insertions(+), 50 deletions(-)
New commits:
commit d534e939d4b9c8ac09cd1e7e28e5ad43d1ee56ec
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 26 12:48:06 2016 +0200
uitest: add the radiobutton demo
Change-Id: I271a7388c2114304da26050f909c366edd8143b5
diff --git a/uitest/demo_ui/radiobutton.py b/uitest/demo_ui/radiobutton.py
new file mode 100644
index 0000000..bd8b1db
--- /dev/null
+++ b/uitest/demo_ui/radiobutton.py
@@ -0,0 +1,43 @@
+# -*- 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_radiobutton(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())
+
+ okBtn = xCellsDlg.getChild("ok")
+ okBtn.executeAction("CLICK", tuple())
+
+ ui_test.close_doc()
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
commit ab74c7d4eae55d7301b0eabad8ec7f253028bc62
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 16:03:04 2016 +0200
uitest: loplugin:stringconstant
Change-Id: I863615af7a942b91513511ba515b82f3523c6aa5
diff --git a/sd/source/ui/uitest/uiobject.cxx b/sd/source/ui/uitest/uiobject.cxx
index a8c0227..03b1538 100644
--- a/sd/source/ui/uitest/uiobject.cxx
+++ b/sd/source/ui/uitest/uiobject.cxx
@@ -76,7 +76,7 @@ namespace {
OUString getObjectName(SdrObject* pObject)
{
if (pObject->GetName().isEmpty())
- return OUString("Unnamed Drawinglayer object ") + OUString::number(pObject->GetOrdNum());
+ return "Unnamed Drawinglayer object " + OUString::number(pObject->GetOrdNum());
else
return pObject->GetName();
}
commit 53bdc87a596676d3c4a787615f30466e4efc3f7c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 16:01:48 2016 +0200
uitest: loplugin:staticcall
Change-Id: I0e8fd138689e73cd0b320d0898e0410baa2bcfa9
diff --git a/vcl/source/uitest/uno/uitest_uno.cxx b/vcl/source/uitest/uno/uitest_uno.cxx
index 10b7f12..5270089 100644
--- a/vcl/source/uitest/uno/uitest_uno.cxx
+++ b/vcl/source/uitest/uno/uitest_uno.cxx
@@ -69,13 +69,13 @@ void SAL_CALL UITestUnoObj::executeCommand(const OUString& rCommand)
throw (css::uno::RuntimeException, std::exception)
{
SolarMutexGuard aGuard;
- mpUITest->executeCommand(rCommand);
+ UITest::executeCommand(rCommand);
}
css::uno::Reference<css::ui::test::XUIObject> SAL_CALL UITestUnoObj::getTopFocusWindow()
throw (css::uno::RuntimeException, std::exception)
{
- std::unique_ptr<UIObject> pObj = mpUITest->getFocusTopWindow();
+ std::unique_ptr<UIObject> pObj = UITest::getFocusTopWindow();
return new UIObjectUnoObj(std::move(pObj));
}
commit e6a92c923769f0f3351fa081b17cb132536f934c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 16:00:38 2016 +0200
loplugin:unusedvariablecheck
Change-Id: I8bd6447915942c1869ec186d8ca01e5ac43b3e8a
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index e4845d4..cee0fb9 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -1027,7 +1027,6 @@ bool crashReportInfoExists()
if (sep >= 0)
{
std::string key = line.substr(0, sep);
- std::string value = line.substr(sep + 1);
if (key == "DumpFile")
return true;
}
commit 89f3205a4aa0c3834a5099ff639d9474e996d93b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 15:59:50 2016 +0200
uitest: loplugin:sallogareas
Change-Id: Ieb01166fbb0b07d1218072ae8bb953a36582361c
diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox
index 3a28b7c..dd32631 100644
--- a/include/sal/log-areas.dox
+++ b/include/sal/log-areas.dox
@@ -135,6 +135,7 @@ certain functionality.
@li @c sc.orcus.table
@li @c sc.qa
@li @c sc.ui - Calc UI
+ at li @c sc.uitest - Calc UI Test part
@li @c sc.viewdata
@section desktop
commit 97aa073301a85c82dff4de2d57268f47192d099d
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 15:58:52 2016 +0200
uitest: loplugin:stringconstant
Change-Id: Ib63a978bd488f41602d982789699ba3f3ca2dcf0
diff --git a/sc/source/ui/uitest/uiobject.cxx b/sc/source/ui/uitest/uiobject.cxx
index f46ce5b..298acf0 100644
--- a/sc/source/ui/uitest/uiobject.cxx
+++ b/sc/source/ui/uitest/uiobject.cxx
@@ -91,7 +91,7 @@ void ScGridWinUIObject::execute(const OUString& rAction,
if (rParameters.find("EXTEND") != rParameters.end())
{
auto itr = rParameters.find("EXTEND");
- if (itr->second.equalsIgnoreAsciiCaseAscii("true") || itr->second == "1")
+ if (itr->second.equalsIgnoreAsciiCase("true") || itr->second == "1")
bExtend = true;
}
commit 27e08d44f47b1830776f1efbdcd5e0838914f684
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 15:57:34 2016 +0200
uitest: loplugin:implicitboolconversion
Change-Id: Id852960cdfd49331251e89306a6a32eb9e45a666
diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx
index 9f4529d..8759705 100644
--- a/sw/source/uibase/uitest/uiobject.cxx
+++ b/sw/source/uibase/uitest/uiobject.cxx
@@ -44,14 +44,14 @@ StringMap SwEditWinUIObject::get_state()
sal_uInt16 nPages = rWrtShell.GetPageCnt();
aMap["Pages"] = OUString::number(nPages);
- aMap["StartWord"] = OUString::number(rWrtShell.IsStartWord());
- aMap["EndWord"] = OUString::number(rWrtShell.IsEndWord());
- aMap["StartSentence"] = OUString::number(rWrtShell.IsStartSentence());
- aMap["EndSentence"] = OUString::number(rWrtShell.IsEndSentence());
- aMap["StartPara"] = OUString::number(rWrtShell.IsSttPara());
- aMap["EndPara"] = OUString::number(rWrtShell.IsEndPara());
- aMap["StartDoc"] = OUString::number(rWrtShell.IsStartOfDoc());
- aMap["EndDoc"] = OUString::number(rWrtShell.IsEndOfDoc());
+ aMap["StartWord"] = OUString::boolean(rWrtShell.IsStartWord());
+ aMap["EndWord"] = OUString::boolean(rWrtShell.IsEndWord());
+ aMap["StartSentence"] = OUString::boolean(rWrtShell.IsStartSentence());
+ aMap["EndSentence"] = OUString::boolean(rWrtShell.IsEndSentence());
+ aMap["StartPara"] = OUString::boolean(rWrtShell.IsSttPara());
+ aMap["EndPara"] = OUString::boolean(rWrtShell.IsEndPara());
+ aMap["StartDoc"] = OUString::boolean(rWrtShell.IsStartOfDoc());
+ aMap["EndDoc"] = OUString::boolean(rWrtShell.IsEndOfDoc());
return aMap;
}
commit 55f93456744615174739364bb03676aa0f6986ce
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 14:06:08 2016 +0200
uitest: loplugin:staticmethods
Change-Id: I741a41ea12fe0ee70a73e144d4601c8aafe30ac8
diff --git a/include/vcl/uitest/uitest.hxx b/include/vcl/uitest/uitest.hxx
index 38966a0..9f226b8 100644
--- a/include/vcl/uitest/uitest.hxx
+++ b/include/vcl/uitest/uitest.hxx
@@ -19,9 +19,9 @@ class UITEST_DLLPUBLIC UITest
{
public:
- void executeCommand(const OUString& rCommand);
+ static void executeCommand(const OUString& rCommand);
- std::unique_ptr<UIObject> getFocusTopWindow();
+ static std::unique_ptr<UIObject> getFocusTopWindow();
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 5abf40cb3cb37311ef658c799e17aabb8d54fb9e
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 14:05:43 2016 +0200
uitest: plugin:sallogareas
Change-Id: Ib0ebd774542129f8a7c68e276f1f03cc46f32fb8
diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox
index 25588df..3a28b7c 100644
--- a/include/sal/log-areas.dox
+++ b/include/sal/log-areas.dox
@@ -446,6 +446,7 @@ certain functionality.
@li @c vcl.screensaverinhibitor
@li @c vcl.scrollbar - Scroll Bars
@li @c vcl.sm - Session Manager
+ at li @c vcl.uitest - The UI testing framework code
@li @c vcl.unity
@li @c vcl.unx.print
@li @c vcl.unx.dtrans
commit 5c82caaab4cf63c9cda20791f77acae6649f518b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat Jun 18 14:03:46 2016 +0200
uitest: loplugin:override
Change-Id: I014e036c803ef7eeba265eb36782781c3a62672c
diff --git a/include/vcl/dialog.hxx b/include/vcl/dialog.hxx
index afa8c2e..ecf086d8 100644
--- a/include/vcl/dialog.hxx
+++ b/include/vcl/dialog.hxx
@@ -96,7 +96,7 @@ public:
virtual short Execute();
bool IsInExecute() const { return mbInExecute; }
- virtual FactoryFunction GetUITestFactory() const;
+ virtual FactoryFunction GetUITestFactory() const override;
// Dialog::Execute replacement API
public:
commit 275dfaaffb2494214607a1c3e02a3e7fdd850865
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 26 12:44:34 2016 +0200
uitest: make the calc keycode demo a bit easier to understand
Change-Id: Ia24747994dc45b8c6636aee37a55d2ba4672993a
diff --git a/uitest/calc_tests/gridwindow.py b/uitest/calc_tests/gridwindow.py
index ae16e40..1f01ec9 100644
--- a/uitest/calc_tests/gridwindow.py
+++ b/uitest/calc_tests/gridwindow.py
@@ -55,10 +55,11 @@ def special_keys(xContext):
selectProps = mkPropertyValues({"CELL": "C3"})
xGridWindow.executeAction("SELECT", selectProps)
- # TODO: how to handle the enter
typeProps = mkPropertyValues({"KEYCODE": "CTRL+DOWN"})
xGridWindow.executeAction("TYPE", typeProps)
+ time.sleep(2)
+
ui_test.close_doc()
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 017d7b9f5483cc9373ace5fd02f55987d7eabe2a
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 26 12:43:23 2016 +0200
uitest: add more impress tests
Change-Id: I89bd0af49e530382f0201a108f8798f9a9d689e3
diff --git a/uitest/impress_tests/start.py b/uitest/impress_tests/start.py
index 0c5ef2a..c817cfe 100644
--- a/uitest/impress_tests/start.py
+++ b/uitest/impress_tests/start.py
@@ -29,6 +29,86 @@ def start_impress(xContext):
ui_test.create_doc_in_start_center("impress")
+ xImpressDoc = xUITest.getTopFocusWindow()
+ print(get_state_as_dict(xImpressDoc))
+ print(xImpressDoc.getChildren())
+
+ xEditWin = xImpressDoc.getChild("impress_win")
+ xEditWin.executeAction("SET", mkPropertyValues({"ZOOM": "200"}))
+
+ print(xEditWin.getChildren())
+
+ time.sleep(5)
+
+ ui_test.close_doc()
+
+def select_page(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("impress")
+
+ xImpressDoc = xUITest.getTopFocusWindow()
+ print(get_state_as_dict(xImpressDoc))
+ print(xImpressDoc.getChildren())
+
+ xEditWin = xImpressDoc.getChild("impress_win")
+
+ time.sleep(10)
+ print(get_state_as_dict(xEditWin))
+
+ xEditWin.executeAction("GOTO", mkPropertyValues({"PAGE": "2"}))
+
+ time.sleep(5)
+
+ print(get_state_as_dict(xEditWin))
+
+ ui_test.close_doc()
+
+def select_text(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("impress")
+
+ xImpressDoc = xUITest.getTopFocusWindow()
+ print(get_state_as_dict(xImpressDoc))
+ print(xImpressDoc.getChildren())
+
+ xEditWin = xImpressDoc.getChild("impress_win")
+
+ time.sleep(10)
+
+ print(get_state_as_dict(xEditWin))
+
+ ui_test.close_doc()
+
+def select_object(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("impress")
+
+ xImpressDoc = xUITest.getTopFocusWindow()
+ print(get_state_as_dict(xImpressDoc))
+ print(xImpressDoc.getChildren())
+
+ xEditWin = xImpressDoc.getChild("impress_win")
+
+ xEditWin.executeAction("SELECT", mkPropertyValues({"OBJECT":"Unnamed Drawinglayer object 1"}))
+ time.sleep(2)
+ xEditWin.executeAction("DESELECT", tuple())
+
+ time.sleep(4)
+
+ print(get_state_as_dict(xEditWin))
+
ui_test.close_doc()
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 60fdd56760269d1cca2cade50a0f7a5e2635f5ed
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon May 23 05:22:33 2016 +0200
uitest: support more impress operations
Change-Id: I74ab526dabbee1f8c203274f187c065d9fb413fd
diff --git a/sd/source/ui/inc/uiobject.hxx b/sd/source/ui/inc/uiobject.hxx
index f8b7e57..8e3d479 100644
--- a/sd/source/ui/inc/uiobject.hxx
+++ b/sd/source/ui/inc/uiobject.hxx
@@ -16,6 +16,9 @@ class DrawViewShell;
}
+class SdrObject;
+class SdrPageView;
+
class ImpressWindowUIObject : public WindowUIObject
{
public:
@@ -27,6 +30,8 @@ public:
virtual void execute(const OUString& rAction,
const StringMap& rParameters) override;
+ virtual std::set<OUString> get_children() const override;
+
static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
protected:
@@ -37,7 +42,11 @@ private:
VclPtr<sd::Window> mxWindow;
- sd::DrawViewShell* getViewShell();
+ sd::DrawViewShell* getViewShell() const;
+
+ SdrObject* getObject(const OUString& rName);
+
+ SdrPageView* getPageView();
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/uitest/uiobject.cxx b/sd/source/ui/uitest/uiobject.cxx
index 90535c6..a8c0227 100644
--- a/sd/source/ui/uitest/uiobject.cxx
+++ b/sd/source/ui/uitest/uiobject.cxx
@@ -11,6 +11,7 @@
#include "Window.hxx"
#include "DrawViewShell.hxx"
+#include "sdpage.hxx"
ImpressWindowUIObject::ImpressWindowUIObject(VclPtr<sd::Window> xWindow):
WindowUIObject(xWindow),
@@ -51,7 +52,53 @@ void ImpressWindowUIObject::execute(const OUString& rAction,
getViewShell()->SwitchPage(nVal);
}
}
- WindowUIObject::execute(rAction, rParameters);
+ else if (rAction == "SELECT")
+ {
+ if (rParameters.find("OBJECT") != rParameters.end())
+ {
+ auto itr = rParameters.find("OBJECT");
+ OUString aName = itr->second;
+ SdrObject* pObj = getObject(aName);
+ SdrPageView* pPageView = getPageView();
+ getViewShell()->GetView()->MarkObj(pObj, pPageView);
+ }
+ }
+ else if (rAction == "DESELECT")
+ {
+ getViewShell()->GetView()->UnMarkAll();
+ }
+ else
+ WindowUIObject::execute(rAction, rParameters);
+}
+
+namespace {
+
+OUString getObjectName(SdrObject* pObject)
+{
+ if (pObject->GetName().isEmpty())
+ return OUString("Unnamed Drawinglayer object ") + OUString::number(pObject->GetOrdNum());
+ else
+ return pObject->GetName();
+}
+
+}
+
+std::set<OUString> ImpressWindowUIObject::get_children() const
+{
+ SdrPage* pPage = getViewShell()->getCurrentPage();
+
+ std::set<OUString> aRet;
+ if (!pPage)
+ return aRet;
+
+ size_t nObjs = pPage->GetObjCount();
+ for (size_t i = 0; i < nObjs; ++i)
+ {
+ SdrObject* pObject = pPage->GetObj(i);
+ aRet.insert(getObjectName(pObject));
+ }
+
+ return aRet;
}
OUString ImpressWindowUIObject::get_name() const
@@ -66,7 +113,7 @@ std::unique_ptr<UIObject> ImpressWindowUIObject::create(vcl::Window* pWindow)
return std::unique_ptr<UIObject>(new ImpressWindowUIObject(pWin));
}
-sd::DrawViewShell* ImpressWindowUIObject::getViewShell()
+sd::DrawViewShell* ImpressWindowUIObject::getViewShell() const
{
sd::DrawViewShell* pViewShell = dynamic_cast<sd::DrawViewShell*>(mxWindow->GetViewShell());
assert(pViewShell);
@@ -74,4 +121,27 @@ sd::DrawViewShell* ImpressWindowUIObject::getViewShell()
return pViewShell;
}
+SdrObject* ImpressWindowUIObject::getObject(const OUString& rName)
+{
+ SdrPage* pPage = getViewShell()->getCurrentPage();
+
+ if (!pPage)
+ return nullptr;
+
+ size_t nObjs = pPage->GetObjCount();
+ for (size_t i = 0; i < nObjs; ++i)
+ {
+ SdrObject* pObj = pPage->GetObj(i);
+ if (rName == getObjectName(pObj))
+ return pObj;
+ }
+
+ return nullptr;
+}
+
+SdrPageView* ImpressWindowUIObject::getPageView()
+{
+ return getViewShell()->GetView()->GetSdrPageView();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit fdfc55da301435dfd52b0365b8edda7aa893f983
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun May 22 05:54:11 2016 +0200
uitest: add initial code for impress main edit window
Change-Id: I82eabe1df33878316907e664ddbcd8edf6a73d33
diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk
index 76e35ae..ae04336 100644
--- a/sd/Library_sd.mk
+++ b/sd/Library_sd.mk
@@ -411,6 +411,7 @@ $(eval $(call gb_Library_add_exception_objects,sd,\
sd/source/ui/tools/SdGlobalResourceContainer \
sd/source/ui/tools/SlotStateListener \
sd/source/ui/tools/TimerBasedTaskExecution \
+ sd/source/ui/uitest/uiobject \
sd/source/ui/unoidl/DrawController \
sd/source/ui/unoidl/SdUnoDrawView \
sd/source/ui/unoidl/SdUnoOutlineView \
diff --git a/sd/source/ui/inc/Window.hxx b/sd/source/ui/inc/Window.hxx
index 6d9d869..bfd38f4 100644
--- a/sd/source/ui/inc/Window.hxx
+++ b/sd/source/ui/inc/Window.hxx
@@ -49,6 +49,7 @@ public:
virtual void dispose() override;
void SetViewShell (ViewShell* pViewSh);
+ ViewShell* GetViewShell();
/** Set the zoom factor to the specified value and center the display
area around the zoom center.
@@ -192,6 +193,8 @@ protected:
Selection GetSurroundingTextSelection() const override;
/// @see OutputDevice::LogicInvalidate().
void LogicInvalidate(const Rectangle* pRectangle) override;
+
+ FactoryFunction GetUITestFactory() const override;
};
} // end of namespace sd
diff --git a/sd/source/ui/inc/uiobject.hxx b/sd/source/ui/inc/uiobject.hxx
new file mode 100644
index 0000000..f8b7e57
--- /dev/null
+++ b/sd/source/ui/inc/uiobject.hxx
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-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/.
+ */
+
+#include <vcl/uitest/uiobject.hxx>
+
+namespace sd {
+
+class Window;
+class DrawViewShell;
+
+}
+
+class ImpressWindowUIObject : public WindowUIObject
+{
+public:
+
+ ImpressWindowUIObject(VclPtr<sd::Window> xWindow);
+
+ virtual StringMap get_state() override;
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
+
+protected:
+
+ virtual OUString get_name() const override;
+
+private:
+
+ VclPtr<sd::Window> mxWindow;
+
+ sd::DrawViewShell* getViewShell();
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/uitest/uiobject.cxx b/sd/source/ui/uitest/uiobject.cxx
new file mode 100644
index 0000000..90535c6
--- /dev/null
+++ b/sd/source/ui/uitest/uiobject.cxx
@@ -0,0 +1,77 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-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/.
+ */
+
+#include "uiobject.hxx"
+
+#include "Window.hxx"
+#include "DrawViewShell.hxx"
+
+ImpressWindowUIObject::ImpressWindowUIObject(VclPtr<sd::Window> xWindow):
+ WindowUIObject(xWindow),
+ mxWindow(xWindow)
+{
+}
+
+StringMap ImpressWindowUIObject::get_state()
+{
+ StringMap aMap = WindowUIObject::get_state();
+
+ aMap["SelectedText"] = getViewShell()->GetSelectionText();
+ aMap["CurrentSlide"] = OUString::number(getViewShell()->GetCurPageId());
+
+ return aMap;
+}
+
+void ImpressWindowUIObject::execute(const OUString& rAction,
+ const StringMap& rParameters)
+{
+ if (rAction == "SET")
+ {
+ if (rParameters.find("ZOOM") != rParameters.end())
+ {
+ auto itr = rParameters.find("ZOOM");
+ OUString aVal = itr->second;
+ sal_Int32 nVal = aVal.toInt32();
+ getViewShell()->SetZoom(nVal);
+ }
+ }
+ else if (rAction == "GOTO")
+ {
+ if (rParameters.find("PAGE") != rParameters.end())
+ {
+ auto itr = rParameters.find("PAGE");
+ OUString aVal = itr->second;
+ sal_Int32 nVal = aVal.toInt32();
+ getViewShell()->SwitchPage(nVal);
+ }
+ }
+ WindowUIObject::execute(rAction, rParameters);
+}
+
+OUString ImpressWindowUIObject::get_name() const
+{
+ return OUString("ImpressWindowUIObject");
+}
+
+std::unique_ptr<UIObject> ImpressWindowUIObject::create(vcl::Window* pWindow)
+{
+ sd::Window* pWin = dynamic_cast<sd::Window*>(pWindow);
+ assert(pWin);
+ return std::unique_ptr<UIObject>(new ImpressWindowUIObject(pWin));
+}
+
+sd::DrawViewShell* ImpressWindowUIObject::getViewShell()
+{
+ sd::DrawViewShell* pViewShell = dynamic_cast<sd::DrawViewShell*>(mxWindow->GetViewShell());
+ assert(pViewShell);
+
+ return pViewShell;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/view/sdwindow.cxx b/sd/source/ui/view/sdwindow.cxx
index 580e7a6..f400e78 100644
--- a/sd/source/ui/view/sdwindow.cxx
+++ b/sd/source/ui/view/sdwindow.cxx
@@ -38,6 +38,7 @@
#include "AccessibleDrawDocumentView.hxx"
#include "WindowUpdater.hxx"
#include "ViewShellBase.hxx"
+#include "uiobject.hxx"
#include <vcl/svapp.hxx>
#include <vcl/settings.hxx>
@@ -129,6 +130,11 @@ void Window::SetViewShell (ViewShell* pViewSh)
}
}
+ViewShell* Window::GetViewShell()
+{
+ return mpViewShell;
+}
+
void Window::CalcMinZoom()
{
// Are we entitled to change the minimal zoom factor?
@@ -1021,6 +1027,14 @@ void Window::LogicInvalidate(const Rectangle* pRectangle)
rSfxViewShell.libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_TILES, sRectangle.getStr());
}
+FactoryFunction Window::GetUITestFactory() const
+{
+ if (get_id() == "impress_win")
+ return ImpressWindowUIObject::create;
+
+ return WindowUIObject::create;
+}
+
} // end of namespace sd
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit b67527fb75cd95201d9251064e8b9d5b1c4fe62a
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun May 22 05:52:36 2016 +0200
uitest: dump the implementation name as well
Change-Id: Ifefc5eb8c271aae0c815bb68535b1e3eb8afb2cd
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 512d053..0f399f1 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -392,6 +392,7 @@ OUString WindowUIObject::get_name() const
void WindowUIObject::dumpState() const
{
DUMP_UITEST(get_name() << " " << mxWindow->get_id());
+ DUMP_UITEST("Implementation Name: " << typeid(*mxWindow.get()).name());
StringMap aState = const_cast<WindowUIObject*>(this)->get_state();
for (auto itr = aState.begin(), itrEnd = aState.end(); itr != itrEnd; ++itr)
{
commit a32eb53ca1a379277b80a1ba01072a441f090919
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun May 22 03:03:07 2016 +0200
uitest: annotate a few draw/impress windows
Change-Id: I6352842535fddc99d30a4d0180ac01e7f8d5cd48
diff --git a/sd/source/ui/framework/factories/BasicViewFactory.cxx b/sd/source/ui/framework/factories/BasicViewFactory.cxx
index 3c8cc02..de3d4d5 100644
--- a/sd/source/ui/framework/factories/BasicViewFactory.cxx
+++ b/sd/source/ui/framework/factories/BasicViewFactory.cxx
@@ -36,6 +36,7 @@
#include "SlideSorterViewShell.hxx"
#include "FrameView.hxx"
#include "facreg.hxx"
+#include "Window.hxx"
#include <sfx2/viewfrm.hxx>
#include <vcl/wrkwin.hxx>
@@ -341,6 +342,7 @@ std::shared_ptr<ViewShell> BasicViewFactory::CreateViewShell (
&rWindow,
PK_STANDARD,
pFrameView));
+ pViewShell->GetContentWindow()->set_id("impress_win");
}
else if (rsViewURL.equals(FrameworkHelper::msDrawViewURL))
{
@@ -350,6 +352,7 @@ std::shared_ptr<ViewShell> BasicViewFactory::CreateViewShell (
*mpBase,
&rWindow,
pFrameView));
+ pViewShell->GetContentWindow()->set_id("draw_win");
}
else if (rsViewURL.equals(FrameworkHelper::msOutlineViewURL))
{
@@ -359,6 +362,7 @@ std::shared_ptr<ViewShell> BasicViewFactory::CreateViewShell (
*mpBase,
&rWindow,
pFrameView));
+ pViewShell->GetContentWindow()->set_id("outline_win");
}
else if (rsViewURL.equals(FrameworkHelper::msNotesViewURL))
{
@@ -369,6 +373,7 @@ std::shared_ptr<ViewShell> BasicViewFactory::CreateViewShell (
&rWindow,
PK_NOTES,
pFrameView));
+ pViewShell->GetContentWindow()->set_id("notes_win");
}
else if (rsViewURL.equals(FrameworkHelper::msHandoutViewURL))
{
@@ -379,6 +384,7 @@ std::shared_ptr<ViewShell> BasicViewFactory::CreateViewShell (
&rWindow,
PK_HANDOUT,
pFrameView));
+ pViewShell->GetContentWindow()->set_id("handout_win");
}
else if (rsViewURL.equals(FrameworkHelper::msPresentationViewURL))
{
@@ -388,6 +394,7 @@ std::shared_ptr<ViewShell> BasicViewFactory::CreateViewShell (
*mpBase,
&rWindow,
pFrameView));
+ pViewShell->GetContentWindow()->set_id("presentation_win");
}
else if (rsViewURL.equals(FrameworkHelper::msSlideSorterURL))
{
diff --git a/sd/source/ui/inc/ViewShell.hxx b/sd/source/ui/inc/ViewShell.hxx
index 462bfc5..4dd4fd9 100644
--- a/sd/source/ui/inc/ViewShell.hxx
+++ b/sd/source/ui/inc/ViewShell.hxx
@@ -142,6 +142,8 @@ public:
*/
inline vcl::Window* GetParentWindow() const { return mpParentWindow; }
+ sd::Window* GetContentWindow() const;
+
inline ::sd::View* GetView() const { return mpView; }
inline SdrView* GetDrawView() const;
SD_DLLPUBLIC DrawDocShell* GetDocSh() const;
diff --git a/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx b/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx
index 0b7ce99..ac9a8fc 100644
--- a/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx
+++ b/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx
@@ -123,6 +123,7 @@ SlideSorterViewShell::SlideSorterViewShell (
mpSlideSorter(),
mbIsArrangeGUIElementsPending(true)
{
+ GetContentWindow()->set_id("slidesorter");
meShellType = ST_SLIDE_SORTER;
if (pFrameViewArgument != nullptr)
diff --git a/sd/source/ui/view/viewshel.cxx b/sd/source/ui/view/viewshel.cxx
index 942f9a5..84d5d19 100644
--- a/sd/source/ui/view/viewshel.cxx
+++ b/sd/source/ui/view/viewshel.cxx
@@ -1604,6 +1604,11 @@ void ViewShell::NotifyAccUpdate( )
GetViewShellBase().GetDrawController().NotifyAccUpdate();
}
+sd::Window* ViewShell::GetContentWindow() const
+{
+ return mpContentWindow.get();
+}
+
} // end of namespace sd
//===== ViewShellObjectBarFactory =============================================
commit a259b9935990ec7c1fd804c0ff9f0a8b6e9044ec
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun May 22 01:43:16 2016 +0200
uitest: start with work on impress demos
Change-Id: I8407fe37f8906e21abc1033d6adf44f31cad1572
diff --git a/uitest/impress_tests/start.py b/uitest/impress_tests/start.py
new file mode 100644
index 0000000..0c5ef2a
--- /dev/null
+++ b/uitest/impress_tests/start.py
@@ -0,0 +1,34 @@
+# -*- 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, get_state_as_dict
+
+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 start_impress(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("impress")
+
+ ui_test.close_doc()
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 313265c26df651d57d59fa4527baf6752f6b2f2d
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sun May 22 01:39:09 2016 +0200
uitest: add writer demo ui tests to makefile
Change-Id: I4ba2321deb196f22c95db533266d82c541a95f0a
diff --git a/uitest/Module_uitest.mk b/uitest/Module_uitest.mk
index 9ebc2f7..2530bee 100644
--- a/uitest/Module_uitest.mk
+++ b/uitest/Module_uitest.mk
@@ -12,5 +12,5 @@ $(eval $(call gb_Module_Module,uitest))
$(eval $(call gb_Module_add_uicheck_targets,uitest,\
UITest_calc_demo \
- UITest_demo_ui \
+ UITest_writer_demo \
))
diff --git a/uitest/UITest_writer_demo.mk b/uitest/UITest_writer_demo.mk
new file mode 100644
index 0000000..c0c7f3d
--- /dev/null
+++ b/uitest/UITest_writer_demo.mk
@@ -0,0 +1,15 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# 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/.
+#
+
+$(eval $(call gb_UITest_UITest,writer_demo))
+
+$(eval $(call gb_UITest_add_modules,writer_demo,$(SRCDIR)/uitest,\
+ writer_tests/writer_demo.txt \
+))
+# vim: set noet sw=4 ts=4:
diff --git a/uitest/writer_tests/writer_demo.txt b/uitest/writer_tests/writer_demo.txt
new file mode 100644
index 0000000..0045e2a
--- /dev/null
+++ b/uitest/writer_tests/writer_demo.txt
@@ -0,0 +1,4 @@
+writer_tests.start.start_writer
+writer_tests.start.type_text
+writer_tests.start.goto_first_page
+writer_tests.start.select_text
commit 83b0ec6201172190bdcb16753c1166264f5f6cc5
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:50:46 2016 +0200
uitest: add demo for selecting writer text
Change-Id: Iffc3e16bf0fa5a02058b6ad008ff3f61ea2a23af
diff --git a/uitest/writer_tests/start.py b/uitest/writer_tests/start.py
index a0fe7d2..a5a23ca 100644
--- a/uitest/writer_tests/start.py
+++ b/uitest/writer_tests/start.py
@@ -81,4 +81,29 @@ def goto_first_page(xContext):
ui_test.close_doc()
+
+def select_text(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("writer")
+
+ xWriterDoc = xUITest.getTopFocusWindow()
+ xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+ xWriterEdit.executeAction("TYPE", mkPropertyValues({"TEXT": "This is my first writer text written through the UI testing"}))
+
+ time.sleep(2)
+ print(get_state_as_dict(xWriterEdit))
+
+ xWriterEdit.executeAction("SELECT", mkPropertyValues({"START_POS": "0", "END_POS": "4"}))
+
+ print(get_state_as_dict(xWriterEdit))
+
+ time.sleep(2)
+
+ ui_test.close_doc()
+
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit c1317d040c93816021268426d593b3e2cae871fe
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:50:13 2016 +0200
uitest: the demo is supposed to show how to goto the page start
Change-Id: I61d2a74b50be2ab8b5077344ecd41cfa0cba2e64
diff --git a/uitest/writer_tests/start.py b/uitest/writer_tests/start.py
index a9b722a..a0fe7d2 100644
--- a/uitest/writer_tests/start.py
+++ b/uitest/writer_tests/start.py
@@ -75,6 +75,8 @@ def goto_first_page(xContext):
xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"}))
state = get_state_as_dict(xWriterEdit)
+ xWriterEdit.executeAction("GOTO", mkPropertyValues({"PAGE": "1"}))
+ print(state)
time.sleep(2)
ui_test.close_doc()
commit 3ba10adaa853da547aa90d69b666ada4e683fe32
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:49:19 2016 +0200
uitest: support selecting writer text
Change-Id: I6d1c4e5a05bdcb3299af86a9044d912239659fb9
diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx
index 0102c98..9f4529d 100644
--- a/sw/source/uibase/uitest/uiobject.cxx
+++ b/sw/source/uibase/uitest/uiobject.cxx
@@ -79,6 +79,22 @@ void SwEditWinUIObject::execute(const OUString& rAction,
getWrtShell(mxEditWin).GotoPage(nVal, false);
}
}
+ else if (rAction == "SELECT")
+ {
+ if (rParameters.find("START_POS") != rParameters.end())
+ {
+ auto itr = rParameters.find("START_POS");
+ OUString aStartPos = itr->second;
+ sal_Int32 nStartPos = aStartPos.toInt32();
+
+ itr = rParameters.find("END_POS");
+ assert(itr != rParameters.end());
+ OUString aEndPos = itr->second;
+ sal_Int32 nEndPos = aEndPos.toInt32();
+
+ getWrtShell(mxEditWin).SelectText(nStartPos, nEndPos);
+ }
+ }
else
WindowUIObject::execute(rAction, rParameters);
}
commit d2dc8ded7008908e9290cff3db4d14682e7cbe71
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:48:44 2016 +0200
uitest: add more properties to writer state
Change-Id: Iadf223b38d84c1a6fb9892642f39e63dd16c72c8
diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx
index c6df6e1..0102c98 100644
--- a/sw/source/uibase/uitest/uiobject.cxx
+++ b/sw/source/uibase/uitest/uiobject.cxx
@@ -35,11 +35,24 @@ StringMap SwEditWinUIObject::get_state()
sal_uInt16 nPageNum = 0;
sal_uInt16 nVirtPageNum = 0;
- getWrtShell(mxEditWin).GetPageNum(nPageNum, nVirtPageNum);
+ SwWrtShell& rWrtShell = getWrtShell(mxEditWin);
+ rWrtShell.GetPageNum(nPageNum, nVirtPageNum);
aMap["CurrentPage"] = OUString::number(nPageNum);
- getWrtShell(mxEditWin).GetPageNum(nPageNum, nVirtPageNum, false);
+ rWrtShell.GetPageNum(nPageNum, nVirtPageNum, false);
aMap["TopVisiblePage"] = OUString::number(nPageNum);
+ sal_uInt16 nPages = rWrtShell.GetPageCnt();
+ aMap["Pages"] = OUString::number(nPages);
+
+ aMap["StartWord"] = OUString::number(rWrtShell.IsStartWord());
+ aMap["EndWord"] = OUString::number(rWrtShell.IsEndWord());
+ aMap["StartSentence"] = OUString::number(rWrtShell.IsStartSentence());
+ aMap["EndSentence"] = OUString::number(rWrtShell.IsEndSentence());
+ aMap["StartPara"] = OUString::number(rWrtShell.IsSttPara());
+ aMap["EndPara"] = OUString::number(rWrtShell.IsEndPara());
+ aMap["StartDoc"] = OUString::number(rWrtShell.IsStartOfDoc());
+ aMap["EndDoc"] = OUString::number(rWrtShell.IsEndOfDoc());
+
return aMap;
}
commit 0a52f261c6969992bb0b7ed3d8618884e1f62272
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:24:01 2016 +0200
uitest: add demo showing how to use page number
Change-Id: I718f4c6c8f01ceb556b9beadce5af88491c4efe0
diff --git a/uitest/writer_tests/start.py b/uitest/writer_tests/start.py
index 83b5ad2..a9b722a 100644
--- a/uitest/writer_tests/start.py
+++ b/uitest/writer_tests/start.py
@@ -5,7 +5,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
-from uitest_helper import UITest
+from uitest_helper import UITest, get_state_as_dict
from helper import mkPropertyValues
@@ -58,4 +58,25 @@ def type_text(xContext):
ui_test.close_doc()
+def goto_first_page(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("writer")
+
+ xWriterDoc = xUITest.getTopFocusWindow()
+ xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+ state = get_state_as_dict(xWriterEdit)
+ print(state)
+ while state["CurrentPage"] is "1":
+ xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"}))
+ state = get_state_as_dict(xWriterEdit)
+
+ time.sleep(2)
+
+ ui_test.close_doc()
+
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit b78bd71b8d607e3ff773da1f972fec68934d4840
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:22:36 2016 +0200
uitest: provide a way to jump at the beginning of page
Note that page numbers in writer are 1-based
Change-Id: I614ff08927b4cb92d3819b557ec6791199da69a4
diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx
index 555aef4..c6df6e1 100644
--- a/sw/source/uibase/uitest/uiobject.cxx
+++ b/sw/source/uibase/uitest/uiobject.cxx
@@ -56,6 +56,16 @@ void SwEditWinUIObject::execute(const OUString& rAction,
mxEditWin->GetView().SetZoom(SvxZoomType::PERCENT, nVal);
}
}
+ else if (rAction == "GOTO")
+ {
+ if (rParameters.find("PAGE") != rParameters.end())
+ {
+ auto itr = rParameters.find("PAGE");
+ OUString aVal = itr->second;
+ sal_Int32 nVal = aVal.toInt32();
+ getWrtShell(mxEditWin).GotoPage(nVal, false);
+ }
+ }
else
WindowUIObject::execute(rAction, rParameters);
}
commit 8b21af2d243bf033f9a9375f48be840e61300fce
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:22:01 2016 +0200
uitest: provide information about current page
Change-Id: Ie0ef65a023e156f65370e11f024fa6349841841e
diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx
index 907e7b9..555aef4 100644
--- a/sw/source/uibase/uitest/uiobject.cxx
+++ b/sw/source/uibase/uitest/uiobject.cxx
@@ -10,6 +10,7 @@
#include "uiobject.hxx"
#include "edtwin.hxx"
#include "view.hxx"
+#include "wrtsh.hxx"
SwEditWinUIObject::SwEditWinUIObject(VclPtr<SwEditWin> xEditWin):
WindowUIObject(xEditWin),
@@ -17,11 +18,28 @@ SwEditWinUIObject::SwEditWinUIObject(VclPtr<SwEditWin> xEditWin):
{
}
+namespace {
+
+SwWrtShell& getWrtShell(VclPtr<SwEditWin> xEditWin)
+{
+ return xEditWin->GetView().GetWrtShell();
+}
+
+}
+
StringMap SwEditWinUIObject::get_state()
{
StringMap aMap = WindowUIObject::get_state();
- // aMap["SelectedText"] = mxEditWin
+ aMap["SelectedText"] = mxEditWin->GetView().GetSelectionText();
+
+ sal_uInt16 nPageNum = 0;
+ sal_uInt16 nVirtPageNum = 0;
+ getWrtShell(mxEditWin).GetPageNum(nPageNum, nVirtPageNum);
+ aMap["CurrentPage"] = OUString::number(nPageNum);
+ getWrtShell(mxEditWin).GetPageNum(nPageNum, nVirtPageNum, false);
+ aMap["TopVisiblePage"] = OUString::number(nPageNum);
+
return aMap;
}
commit 229ab4ba12c3bf4ff535c150a9d2ef4ba29cfd57
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:21:08 2016 +0200
uitest: make handling the state of an object easier
Change-Id: I3dcb78752b62a42d3aa283910241fef813dc352b
diff --git a/uitest/uitest_helper.py b/uitest/uitest_helper.py
index cac4ea1..925010e 100644
--- a/uitest/uitest_helper.py
+++ b/uitest/uitest_helper.py
@@ -9,6 +9,8 @@ import time
from helper import EventListener
+from helper import convert_property_values_to_dict
+
class DialogNotExecutedException(Exception):
def __init__(self, command):
self.command = command
@@ -82,4 +84,7 @@ class UITest(object):
time_ += self.DEFAULT_SLEEP
time.sleep(self.DEFAULT_SLEEP)
+def get_state_as_dict(ui_object):
+ return convert_property_values_to_dict(ui_object.getState())
+
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit cb024cd4e9749ef4ad5a1bc19570623883da1d3b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Sat May 21 01:19:00 2016 +0200
uitest: add a way to convert property values to dicts
Change-Id: I21afd1c9b88525e576745905ee1ce21746f2d50c
diff --git a/uitest/helper.py b/uitest/helper.py
index 2d771e1..fcb9618 100644
--- a/uitest/helper.py
+++ b/uitest/helper.py
@@ -68,4 +68,13 @@ def mkPropertyValues(vals):
"""
return tuple([mkPropertyValue(name, value) for (name, value) in vals.items()])
+def convert_property_values_to_dict(propMap):
+ ret = {}
+ for entry in propMap:
+ name = entry.Name
+ val = entry.Value
+ ret[name] = val
+
+ return ret
+
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 18bfce49b17d648914df7f51dca9c5b115053b11
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 20:58:47 2016 +0200
uitest: add demo showing how to type text into writer
Change-Id: I32598d12c85ad36d5c5d9ab00c184bfb7e39a4bd
diff --git a/uitest/writer_tests/start.py b/uitest/writer_tests/start.py
index 65ca0ed..83b5ad2 100644
--- a/uitest/writer_tests/start.py
+++ b/uitest/writer_tests/start.py
@@ -41,4 +41,21 @@ def start_writer(xContext):
ui_test.close_doc()
+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("writer")
+
+ xWriterDoc = xUITest.getTopFocusWindow()
+ xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+ xWriterEdit.executeAction("TYPE", mkPropertyValues({"TEXT": "This is my first writer text written through the UI testing"}))
+
+ time.sleep(2)
+
+ ui_test.close_doc()
+
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit d9f8f73926ebbf030233731ed7f6bde06eb80d09
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 20:57:44 2016 +0200
uitest: forward unhandled actions to the base class
Change-Id: Iac08e77d9b0e80f2af93c8b229d083603f1d22d4
diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx
index 9d45be1..907e7b9 100644
--- a/sw/source/uibase/uitest/uiobject.cxx
+++ b/sw/source/uibase/uitest/uiobject.cxx
@@ -38,6 +38,8 @@ void SwEditWinUIObject::execute(const OUString& rAction,
mxEditWin->GetView().SetZoom(SvxZoomType::PERCENT, nVal);
}
}
+ else
+ WindowUIObject::execute(rAction, rParameters);
}
OUString SwEditWinUIObject::get_name() const
commit ebbb900ea24e7db9b3956e24a8c5ba0263e62f03
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 20:50:43 2016 +0200
uitest: add initial writer demos
Change-Id: If0aaf07b061fde3d5efa0d604af002efc872f726
diff --git a/uitest/writer_tests/start.py b/uitest/writer_tests/start.py
new file mode 100644
index 0000000..65ca0ed
--- /dev/null
+++ b/uitest/writer_tests/start.py
@@ -0,0 +1,44 @@
+# -*- 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 start_writer(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("writer")
+
+ xWriterDoc = xUITest.getTopFocusWindow()
+ print(xWriterDoc.getChildren())
+
+ xWriterEdit = xWriterDoc.getChild("writer_edit")
+ print(xWriterEdit.getState())
+
+ xWriterEdit.executeAction("SET", mkPropertyValues({"ZOOM": "200"}))
+
+ time.sleep(2)
+
+ ui_test.close_doc()
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 4eae49218f449b4057d15633c5be2b3b0f9b88f9
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 20:49:40 2016 +0200
uitest: add wrapper for writer's main edit window
Change-Id: Ibd6ffe85ca95cdc915f5c73b1b566de1d7413ee7
diff --git a/sw/Library_sw.mk b/sw/Library_sw.mk
index 0555d16..ea8c362 100644
--- a/sw/Library_sw.mk
+++ b/sw/Library_sw.mk
@@ -691,6 +691,7 @@ $(eval $(call gb_Library_add_exception_objects,sw,\
sw/source/uibase/table/chartins \
sw/source/uibase/table/swtablerep \
sw/source/uibase/table/tablemgr \
+ sw/source/uibase/uitest/uiobject \
sw/source/uibase/uiview/formatclipboard \
sw/source/uibase/uiview/pview \
sw/source/uibase/uiview/scroll \
diff --git a/sw/source/uibase/docvw/edtwin3.cxx b/sw/source/uibase/docvw/edtwin3.cxx
index 745bbd4..52c56de 100644
--- a/sw/source/uibase/docvw/edtwin3.cxx
+++ b/sw/source/uibase/docvw/edtwin3.cxx
@@ -34,6 +34,7 @@
#include "pagedesc.hxx"
#include <frmatr.hxx>
#include <editeng/frmdiritem.hxx>
+#include "uiobject.hxx"
// Core-Notify
void ScrollMDI( SwViewShell* pVwSh, const SwRect &rRect,
@@ -165,4 +166,9 @@ void SwEditWin::DataChanged( const DataChangedEvent& rDCEvt )
pSh->UnlockPaint();
}
+FactoryFunction SwEditWin::GetUITestFactory() const
+{
+ return SwEditWinUIObject::create;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/inc/edtwin.hxx b/sw/source/uibase/inc/edtwin.hxx
index cc4d528..1b713de 100644
--- a/sw/source/uibase/inc/edtwin.hxx
+++ b/sw/source/uibase/inc/edtwin.hxx
@@ -307,6 +307,8 @@ public:
void SetCursorTwipPosition(const Point& rPosition, bool bPoint, bool bClearMark);
/// Allows starting or ending a graphic move or resize action.
void SetGraphicTwipPosition(bool bStart, const Point& rPosition);
+
+ virtual FactoryFunction GetUITestFactory() const override;
};
#endif
diff --git a/sw/source/uibase/inc/uiobject.hxx b/sw/source/uibase/inc/uiobject.hxx
new file mode 100644
index 0000000..568aa6c
--- /dev/null
+++ b/sw/source/uibase/inc/uiobject.hxx
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-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/.
+ */
+
+#ifndef SW_SOURCE_UIBASE_INC_UIOBJECT_HXX
+#define SW_SOURCE_UIBASE_INC_UIOBJECT_HXX
+
+#include <vcl/uitest/uiobject.hxx>
+
+class SwEditWin;
+
+class SwEditWinUIObject : public WindowUIObject
+{
+public:
+
+ SwEditWinUIObject(VclPtr<SwEditWin> xEditWin);
+
+ virtual StringMap get_state() override;
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
+
+protected:
+
+ virtual OUString get_name() const override;
+
+private:
+
+ VclPtr<SwEditWin> mxEditWin;
+
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx
new file mode 100644
index 0000000..9d45be1
--- /dev/null
+++ b/sw/source/uibase/uitest/uiobject.cxx
@@ -0,0 +1,55 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-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/.
+ */
+
+#include "uiobject.hxx"
+#include "edtwin.hxx"
+#include "view.hxx"
+
+SwEditWinUIObject::SwEditWinUIObject(VclPtr<SwEditWin> xEditWin):
+ WindowUIObject(xEditWin),
+ mxEditWin(xEditWin)
+{
+}
+
+StringMap SwEditWinUIObject::get_state()
+{
+ StringMap aMap = WindowUIObject::get_state();
+
+ // aMap["SelectedText"] = mxEditWin
+ return aMap;
+}
+
+void SwEditWinUIObject::execute(const OUString& rAction,
+ const StringMap& rParameters)
+{
+ if (rAction == "SET")
+ {
+ if (rParameters.find("ZOOM") != rParameters.end())
+ {
+ auto itr = rParameters.find("ZOOM");
+ OUString aVal = itr->second;
+ sal_Int32 nVal = aVal.toInt32();
+ mxEditWin->GetView().SetZoom(SvxZoomType::PERCENT, nVal);
+ }
+ }
+}
+
+OUString SwEditWinUIObject::get_name() const
+{
+ return OUString("SwEditWinUIObject");
+}
+
+std::unique_ptr<UIObject> SwEditWinUIObject::create(vcl::Window* pWindow)
+{
+ SwEditWin* pEditWin = dynamic_cast<SwEditWin*>(pWindow);
+ assert(pEditWin);
+ return std::unique_ptr<UIObject>(new SwEditWinUIObject(pEditWin));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 725815366eb5543b4465af60a1072f1738db9147
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 05:34:45 2016 +0200
uitest: set id for main writer edit window
Change-Id: Ie039b9983dd2aa6ec2c79b35bfd87161a57438b5
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 5f8e026..b184da1 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -5089,6 +5089,7 @@ SwEditWin::SwEditWin(vcl::Window *pParent, SwView &rMyView):
m_nKS_NUMINDENTINC_Count(0),
m_pFrameControlsManager(new SwFrameControlsManager(this))
{
+ set_id("writer_edit");
SetHelpId(HID_EDIT_WIN);
EnableChildTransparentMode();
SetDialogControlFlags( DialogControlFlags::Return | DialogControlFlags::WantFocus );
commit c1191005c01ae5f512d7841736dd6eb6f0dc8049
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 05:12:33 2016 +0200
uitest: use the new cell content enter function
Change-Id: I75ff56a903226797284dff7f556bd425d40b4fd4
diff --git a/uitest/calc_tests/gridwindow.py b/uitest/calc_tests/gridwindow.py
index b67275a..ae16e40 100644
--- a/uitest/calc_tests/gridwindow.py
+++ b/uitest/calc_tests/gridwindow.py
@@ -9,6 +9,8 @@ from uitest_helper import UITest
from helper import mkPropertyValues
+from uihelper.calc import enter_text_to_cell
+
import time
try:
@@ -32,6 +34,11 @@ def input(xContext):
xGridWindow = xTopWindow.getChild("grid_window")
+ enter_text_to_cell(xGridWindow, "C3", "=A1")
+ enter_text_to_cell(xGridWindow, "A1", "2")
+
+ time.sleep(2)
+
ui_test.close_doc()
def special_keys(xContext):
commit 7ffaaf37c1e052339c1148283a773ce7e520739f
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 05:11:39 2016 +0200
uitest: split the demo
Change-Id: Iec2acce4e7777995d3e5a8e4bea5f069f579721d
diff --git a/uitest/calc_tests/gridwindow.py b/uitest/calc_tests/gridwindow.py
index 642da4b..b67275a 100644
--- a/uitest/calc_tests/gridwindow.py
+++ b/uitest/calc_tests/gridwindow.py
@@ -32,6 +32,19 @@ def input(xContext):
xGridWindow = xTopWindow.getChild("grid_window")
+ ui_test.close_doc()
+
+def special_keys(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+ xTopWindow = xUITest.getTopFocusWindow()
+
+ xGridWindow = xTopWindow.getChild("grid_window")
+
selectProps = mkPropertyValues({"CELL": "C3"})
xGridWindow.executeAction("SELECT", selectProps)
commit 4d7ace84c8b80177a5c8dae6f7ca9d8291fd2e5d
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 05:07:33 2016 +0200
uitest: add a demo case for new keycodes
Change-Id: Ieec7fcd9b942d99d0dc16794856af4b1eabebde8
diff --git a/uitest/calc_tests/gridwindow.py b/uitest/calc_tests/gridwindow.py
index 55005b2..642da4b 100644
--- a/uitest/calc_tests/gridwindow.py
+++ b/uitest/calc_tests/gridwindow.py
@@ -36,7 +36,7 @@ def input(xContext):
xGridWindow.executeAction("SELECT", selectProps)
# TODO: how to handle the enter
- typeProps = mkPropertyValues({"TEXT": "=2"})
+ typeProps = mkPropertyValues({"KEYCODE": "CTRL+DOWN"})
xGridWindow.executeAction("TYPE", typeProps)
ui_test.close_doc()
commit 7af600b43c40aa0744a951f55f5d6b63fe168088
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 04:59:37 2016 +0200
uitest: add calc uitest helper functions
Change-Id: I9201f697ede4d5f9a541eb06f20162ec5ad0542d
diff --git a/uitest/uihelper/__init__.py b/uitest/uihelper/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/uitest/uihelper/calc.py b/uitest/uihelper/calc.py
new file mode 100644
index 0000000..66e85e1
--- /dev/null
+++ b/uitest/uihelper/calc.py
@@ -0,0 +1,15 @@
+# -*- 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 helper import mkPropertyValues
+
+def enter_text_to_cell(gridwin, cell, text):
+ gridwin.executeAction("SELECT", mkPropertyValues({"CELL": cell}))
+ gridwin.executeAction("TYPE", mkPropertyValues({"TEXT": text}))
+ gridwin.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"}))
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 51a2cdb4fbe376c519544b8e484e03eebe943f76
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 20 04:58:56 2016 +0200
uitest: support more special keycodes
Change-Id: Ief5fde7c9840de0f7b0a34fec24837e3a8e5ae70
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index b7b39ea..512d053 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -132,6 +132,22 @@ std::vector<KeyEvent> generate_key_events_from_keycode(const OUString& rStr)
{
std::vector<KeyEvent> aEvents;
+ std::map<OUString, sal_uInt16> aKeyMap = {
+ {"ESC", KEY_ESCAPE},
+ {"DOWN", KEY_DOWN},
+ {"UP", KEY_UP},
+ {"LEFT", KEY_LEFT},
+ {"RIGHT", KEY_RIGHT},
+ {"DELETE", KEY_DELETE},
+ {"INSERT", KEY_INSERT},
+ {"BACKSPACE", KEY_BACKSPACE},
+ {"RETURN", KEY_RETURN},
+ {"HOME", KEY_HOME},
+ {"END", KEY_END},
+ {"PAGEUP", KEY_PAGEUP},
+ {"PAGEDOWN", KEY_PAGEDOWN}
+ };
+
// split string along '+'
// then translate to keycodes
bool bShift = false;
@@ -159,12 +175,21 @@ std::vector<KeyEvent> generate_key_events_from_keycode(const OUString& rStr)
aRemainingText = aToken;
}
- for (sal_Int32 i = 0; i < aRemainingText.getLength(); ++i)
+ if (aKeyMap.find(aRemainingText) != aKeyMap.end())
+ {
+ sal_uInt16 nKey = aKeyMap[aRemainingText];
+ vcl::KeyCode aCode(nKey, bShift, bMod1, bMod2, false);
+ aEvents.push_back(KeyEvent( 'a', aCode));
+ }
+ else
{
- bool bShiftThroughKey = false;
- sal_uInt16 nKey = get_key(aRemainingText[i], bShiftThroughKey);
- vcl::KeyCode aCode(nKey, bShift || bShiftThroughKey, bMod1, bMod2, false);
- aEvents.push_back(KeyEvent(aRemainingText[i], aCode));
+ for (sal_Int32 i = 0; i < aRemainingText.getLength(); ++i)
+ {
+ bool bShiftThroughKey = false;
+ sal_uInt16 nKey = get_key(aRemainingText[i], bShiftThroughKey);
+ vcl::KeyCode aCode(nKey, bShift || bShiftThroughKey, bMod1, bMod2, false);
+ aEvents.push_back(KeyEvent(aRemainingText[i], aCode));
+ }
}
return aEvents;
commit 559f2e233108ed5e9da305ffbf945d6ed568f7eb
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 20:52:43 2016 +0200
uitest: add demo showing how to activate chart
Change-Id: I40293ca1f786c08a51d01fde5e90b75af2e67f6b
diff --git a/uitest/calc_tests/create_chart.py b/uitest/calc_tests/create_chart.py
index 30f0aa7..1e72df7 100644
--- a/uitest/calc_tests/create_chart.py
+++ b/uitest/calc_tests/create_chart.py
@@ -150,4 +150,37 @@ def deselect_chart(xContext):
ui_test.close_doc()
+def activate_chart(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ fill_spreadsheet(xUITest)
+
+ xCalcDoc = xUITest.getTopFocusWindow()
+ xGridWindow = xCalcDoc.getChild("grid_window")
+
+ ui_test.execute_dialog_through_command(".uno:InsertObjectChart")
+
+ xChartDlg = xUITest.getTopFocusWindow()
+
+ xNextBtn = xChartDlg.getChild("finish")
+ xNextBtn.executeAction("CLICK", tuple())
+
+ xGridWindow.executeAction("DESELECT", mkPropertyValues({"OBJECT": ""}))
+
+ time.sleep(2)
+
+ xGridWindow.executeAction("SELECT", mkPropertyValues({"OBJECT": "Object 1"}))
+ xGridWindow.executeAction("ACTIVATE", tuple())
+
+ time.sleep(2)
+
+ xGridWindow.executeAction("DESELECT", mkPropertyValues({"OBJECT": ""}))
+
+ ui_test.close_doc()
+
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit fc0c5d6163e99d29498c9b8599d9bdf9a3e4ca6c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 20:46:58 2016 +0200
uitest: add demo showing how to deselect an UI object
Change-Id: Ie755dd93296de4031abe36833872c58032271d22
diff --git a/uitest/calc_tests/create_chart.py b/uitest/calc_tests/create_chart.py
index 7bb331c..30f0aa7 100644
--- a/uitest/calc_tests/create_chart.py
+++ b/uitest/calc_tests/create_chart.py
@@ -124,4 +124,30 @@ def create_from_second_page(xContext):
ui_test.close_doc()
+def deselect_chart(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ fill_spreadsheet(xUITest)
+
+ xCalcDoc = xUITest.getTopFocusWindow()
+ xGridWindow = xCalcDoc.getChild("grid_window")
+
+ ui_test.execute_dialog_through_command(".uno:InsertObjectChart")
+
+ xChartDlg = xUITest.getTopFocusWindow()
+
+ xNextBtn = xChartDlg.getChild("finish")
+ xNextBtn.executeAction("CLICK", tuple())
+
+ xGridWindow.executeAction("DESELECT", mkPropertyValues({"OBJECT": ""}))
+
+ time.sleep(2)
+
+ ui_test.close_doc()
+
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 20f74cf32bef511fd99f6d4689a5425a9145ebf1
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 20:46:26 2016 +0200
uitest: add way to deselect OLE object
Change-Id: I34515de0b149147e40c23df6fef1339d0b69d469
diff --git a/sc/source/ui/uitest/uiobject.cxx b/sc/source/ui/uitest/uiobject.cxx
index 4405fd9..f46ce5b 100644
--- a/sc/source/ui/uitest/uiobject.cxx
+++ b/sc/source/ui/uitest/uiobject.cxx
@@ -133,6 +133,17 @@ void ScGridWinUIObject::execute(const OUString& rAction,
SAL_WARN("sc.uitest", "unknown selection method");
}
}
+ else if (rAction == "DESELECT")
+ {
+ if (rParameters.find("OBJECT") != rParameters.end())
+ {
+ ScDrawView* pDrawView = getDrawView();
+ pDrawView->UnmarkAll();
+
+ ScTabViewShell* pViewShell = getViewShell();
+ pViewShell->SetDrawShell(false);
+ }
+ }
else if (rAction == "ACTIVATE")
{
ScDrawView* pDrawView = getDrawView();
commit 2d92504b2d8ff04b2fd8cea4fe4897cfbf82621f
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 20:21:06 2016 +0200
uitest: allow activating OLE objects
Change-Id: I960f5d644afb9392f8b3fe1d2f393c499af57bdb
diff --git a/sc/source/ui/inc/uiobject.hxx b/sc/source/ui/inc/uiobject.hxx
index 85dee59..f5e6ba9 100644
--- a/sc/source/ui/inc/uiobject.hxx
+++ b/sc/source/ui/inc/uiobject.hxx
@@ -12,6 +12,7 @@
class ScGridWindow;
class ScDBFunc;
class ScDrawView;
+class ScTabViewShell;
class ScGridWinUIObject : public WindowUIObject
{
@@ -40,6 +41,7 @@ private:
ScDBFunc* getDBFunc();
ScDrawView* getDrawView();
+ ScTabViewShell* getViewShell();
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/uitest/uiobject.cxx b/sc/source/ui/uitest/uiobject.cxx
index 84808c4..4405fd9 100644
--- a/sc/source/ui/uitest/uiobject.cxx
+++ b/sc/source/ui/uitest/uiobject.cxx
@@ -74,6 +74,14 @@ ScDrawView* ScGridWinUIObject::getDrawView()
return pDrawView;
}
+ScTabViewShell* ScGridWinUIObject::getViewShell()
+{
+ ScViewData* pViewData = mxGridWindow->getViewData();
+ ScTabViewShell* pViewShell = pViewData->GetViewShell();
+
+ return pViewShell;
+}
+
void ScGridWinUIObject::execute(const OUString& rAction,
const StringMap& rParameters)
{
@@ -125,6 +133,28 @@ void ScGridWinUIObject::execute(const OUString& rAction,
SAL_WARN("sc.uitest", "unknown selection method");
}
}
+ else if (rAction == "ACTIVATE")
+ {
+ ScDrawView* pDrawView = getDrawView();
+ const SdrMarkList& rMarkList = pDrawView->GetMarkedObjectList();
+ if (rMarkList.GetMarkCount() == 1)
+ {
+ SdrMark* pMark = rMarkList.GetMark(0);
+ SdrObject* pObj = pMark->GetMarkedSdrObj();
+ sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier();
+ if (nSdrObjKind == OBJ_OLE2)
+ {
+ ScTabViewShell* pViewShell = getViewShell();
+ pViewShell->ActivateObject( static_cast<SdrOle2Obj*>(pObj), 0 );
+ }
+ else
+ {
+ SAL_WARN("sc.uitest", "can't activate non-ole objects");
+ }
+ }
+ else
+ SAL_WARN("sc.uitest", "can't activate the current selection");
+ }
else
{
WindowUIObject::execute(rAction, rParameters);
commit 54d5931880e141fb3eb963da7040035569cfd8f3
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 19:30:19 2016 +0200
uitest: allow to select charts in calc
Change-Id: I7fd899d7abda968e9c849e46714208a650b3cfdb
diff --git a/sc/source/ui/inc/uiobject.hxx b/sc/source/ui/inc/uiobject.hxx
index 91d21a4..85dee59 100644
--- a/sc/source/ui/inc/uiobject.hxx
+++ b/sc/source/ui/inc/uiobject.hxx
@@ -11,6 +11,7 @@
class ScGridWindow;
class ScDBFunc;
+class ScDrawView;
class ScGridWinUIObject : public WindowUIObject
{
@@ -38,6 +39,7 @@ protected:
private:
ScDBFunc* getDBFunc();
+ ScDrawView* getDrawView();
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/uitest/uiobject.cxx b/sc/source/ui/uitest/uiobject.cxx
index 550aeef..84808c4 100644
--- a/sc/source/ui/uitest/uiobject.cxx
+++ b/sc/source/ui/uitest/uiobject.cxx
@@ -14,6 +14,7 @@
#include "viewdata.hxx"
#include "dbfunc.hxx"
+#include "tabvwsh.hxx"
#include <svx/svditer.hxx>
#include <svx/svdobj.hxx>
@@ -65,6 +66,14 @@ ScDBFunc* ScGridWinUIObject::getDBFunc()
return pFunc;
}
+ScDrawView* ScGridWinUIObject::getDrawView()
+{
+ ScViewData* pViewData = mxGridWindow->getViewData();
+ ScDrawView* pDrawView = pViewData->GetScDrawView();
+
+ return pDrawView;
+}
+
void ScGridWinUIObject::execute(const OUString& rAction,
const StringMap& rParameters)
{
@@ -103,6 +112,14 @@ void ScGridWinUIObject::execute(const OUString& rAction,
sal_Int32 nTab = rStr.toUInt32();
mxGridWindow->getViewData()->SetTabNo(nTab);
}
+ else if (rParameters.find("OBJECT") != rParameters.end())
+ {
+ auto itr = rParameters.find("OBJECT");
+ const OUString rStr = itr->second;
+
+ ScDrawView* pDrawView = getDrawView();
+ pDrawView->SelectObject(rStr);
+ }
else
{
SAL_WARN("sc.uitest", "unknown selection method");
commit e0e414cd79c6faaa8a2770742b103b5df7efa487
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 19:28:58 2016 +0200
uitest: provide charts as children of calc's grid window
diff --git a/sc/source/ui/inc/uiobject.hxx b/sc/source/ui/inc/uiobject.hxx
index df14daf..91d21a4 100644
--- a/sc/source/ui/inc/uiobject.hxx
+++ b/sc/source/ui/inc/uiobject.hxx
@@ -29,6 +29,8 @@ public:
static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
+ virtual std::set<OUString> get_children() const override;
+
protected:
virtual OUString get_name() const override;
diff --git a/sc/source/ui/uitest/uiobject.cxx b/sc/source/ui/uitest/uiobject.cxx
index d257b41..550aeef 100644
--- a/sc/source/ui/uitest/uiobject.cxx
+++ b/sc/source/ui/uitest/uiobject.cxx
@@ -15,6 +15,11 @@
#include "viewdata.hxx"
#include "dbfunc.hxx"
+#include <svx/svditer.hxx>
+#include <svx/svdobj.hxx>
+#include <svx/svdpage.hxx>
+#include <svx/svdoole2.hxx>
+
namespace {
ScAddress get_address_from_string(const OUString& rStr)
@@ -109,6 +114,54 @@ void ScGridWinUIObject::execute(const OUString& rAction,
}
}
+namespace {
+
+ScDrawLayer* get_draw_layer(VclPtr<ScGridWindow> xGridWindow)
+{
+ return xGridWindow->getViewData()->GetDocument()->GetDrawLayer();
+}
+
+SdrPage* get_draw_page(VclPtr<ScGridWindow> xGridWindow, SCTAB nTab)
+{
+ ScDrawLayer* pDrawLayer = get_draw_layer(xGridWindow);
+
+ return pDrawLayer->GetPage(nTab);
+}
+
+std::set<OUString> collect_charts(VclPtr<ScGridWindow> xGridWindow)
+{
+ SCTAB nTab = xGridWindow->getViewData()->GetTabNo();
+ SdrPage* pPage = get_draw_page(xGridWindow, nTab);
+
+ std::set<OUString> aRet;
+
+ if (!pPage)
+ return aRet;
+
+ SdrObjListIter aIter( *pPage, IM_FLAT );
+ SdrObject* pObject = aIter.Next();
+ while (pObject)
+ {
+ if (pObject->GetObjIdentifier() == OBJ_OLE2)
+ {
+ aRet.insert(static_cast<SdrOle2Obj*>(pObject)->GetPersistName());
+ }
+ else
+ SAL_DEBUG(pObject->GetName());
+ pObject = aIter.Next();
+ }
+
+ return aRet;
+}
+
+}
+
+std::set<OUString> ScGridWinUIObject::get_children() const
+{
+ std::set<OUString> aChildren = collect_charts(mxGridWindow);
+ return aChildren;
+}
+
std::unique_ptr<UIObject> ScGridWinUIObject::get_child(const OUString& /*rID*/)
{
return nullptr;
commit 8a9861c47b66afed9f9a22ee7f507ba99cd4162a
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 03:36:42 2016 +0200
uitest: add demo for chart wizard
Change-Id: I36b89e167408c2ab8b2a0f7d275ecb2dda4722b7
diff --git a/uitest/calc_tests/create_chart.py b/uitest/calc_tests/create_chart.py
new file mode 100644
index 0000000..7bb331c
--- /dev/null
+++ b/uitest/calc_tests/create_chart.py
@@ -0,0 +1,127 @@
+# -*- 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 add_content_to_cell(gridwin, cell, content):
+ selectProps = mkPropertyValues({"CELL": cell})
+ gridwin.executeAction("SELECT", selectProps)
+
+ contentProps = mkPropertyValues({"TEXT": content})
+ gridwin.executeAction("TYPE", contentProps)
+
+
+def fill_spreadsheet(xUITest):
+ xCalcDoc = xUITest.getTopFocusWindow()
+ xGridWindow = xCalcDoc.getChild("grid_window")
+
+ add_content_to_cell(xGridWindow, "A1", "col1")
+ add_content_to_cell(xGridWindow, "B1", "col2")
+ add_content_to_cell(xGridWindow, "C1", "col3")
+ add_content_to_cell(xGridWindow, "A2", "1")
+ add_content_to_cell(xGridWindow, "B2", "3")
+ add_content_to_cell(xGridWindow, "C2", "5")
+
+ xGridWindow.executeAction("SELECT", mkPropertyValues({"RANGE": "A1:C2"}))
+
+def cancel_immediately(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ fill_spreadsheet(xUITest)
+
+ ui_test.execute_dialog_through_command(".uno:InsertObjectChart")
+
+ xChartDlg = xUITest.getTopFocusWindow()
+
+ xCancelBtn = xChartDlg.getChild("cancel")
+ xCancelBtn.executeAction("CLICK", tuple())
+
+ ui_test.close_doc()
+
+def create_from_first_page(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ fill_spreadsheet(xUITest)
+
+ ui_test.execute_dialog_through_command(".uno:InsertObjectChart")
+
+ xChartDlg = xUITest.getTopFocusWindow()
+ print(xChartDlg.getChildren())
+ time.sleep(2)
+
+ xOkBtn = xChartDlg.getChild("finish")
+ xOkBtn.executeAction("CLICK", tuple())
+
+ time.sleep(2)
+
+ ui_test.close_doc()
+
+def create_from_second_page(xContext):
+ xUITest = xContext.ServiceManager.createInstanceWithContext(
+ "org.libreoffice.uitest.UITest", xContext)
+
+ ui_test = UITest(xUITest, xContext)
+
+ ui_test.create_doc_in_start_center("calc")
+
+ fill_spreadsheet(xUITest)
+
+ ui_test.execute_dialog_through_command(".uno:InsertObjectChart")
+
+ xChartDlg = xUITest.getTopFocusWindow()
+ print(xChartDlg.getChildren())
+ time.sleep(2)
+
+ xNextBtn = xChartDlg.getChild("next")
+ xNextBtn.executeAction("CLICK", tuple())
+
+ print(xChartDlg.getChildren())
+
+ time.sleep(2)
+
+ xDataInRows = xChartDlg.getChild("RB_DATAROWS")
+ xDataInRows.executeAction("CLICK", tuple())
+
+ time.sleep(2)
+
+ xDataInCols = xChartDlg.getChild("RB_DATACOLS")
+ xDataInCols.executeAction("CLICK", tuple())
+
+ time.sleep(2)
+
+ xCancelBtn = xChartDlg.getChild("finish")
+ xCancelBtn.executeAction("CLICK", tuple())
+
+ time.sleep(5)
+
+ ui_test.close_doc()
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 99a934520777a5d3f6323e8f52f8dc388239cfe7
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 03:36:18 2016 +0200
uitest: add wrapper for radio button
Change-Id: I8b4b35ac313796364502f8e9e2e836dc21f48a42
diff --git a/include/vcl/button.hxx b/include/vcl/button.hxx
index e9c8df9..0fb7c98 100644
--- a/include/vcl/button.hxx
+++ b/include/vcl/button.hxx
@@ -388,6 +388,8 @@ public:
*/
void group(RadioButton &rOther);
virtual void ShowFocus(const Rectangle& rRect) override;
+
+ virtual FactoryFunction GetUITestFactory() const override;
};
class VCL_DLLPUBLIC CheckBox : public Button
diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx
index f00d80f..0baddeb 100644
--- a/include/vcl/uitest/uiobject.hxx
+++ b/include/vcl/uitest/uiobject.hxx
@@ -199,6 +199,27 @@ protected:
virtual OUString get_name() const override;
};
+class UITEST_DLLPUBLIC RadioButtonUIObject : public WindowUIObject
+{
+private:
+ VclPtr<RadioButton> mxRadioButton;
+
+public:
+ RadioButtonUIObject(VclPtr<RadioButton> xCheckbox);
+ virtual ~RadioButtonUIObject();
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ virtual StringMap get_state() override;
+
+ static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
+
+protected:
+
+ virtual OUString get_name() const override;
+};
+
class UITEST_DLLPUBLIC TabPageUIObject : public WindowUIObject
{
private:
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 0546be2..ae8279c 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -2949,6 +2949,11 @@ void RadioButton::ShowFocus(const Rectangle& rRect)
Button::ShowFocus(rRect);
}
+FactoryFunction RadioButton::GetUITestFactory() const
+{
+ return RadioButtonUIObject::create;
+}
+
void CheckBox::ImplInitCheckBoxData()
{
meState = TRISTATE_FALSE;
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 6b4c471..b7b39ea 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -581,6 +581,44 @@ std::unique_ptr<UIObject> CheckBoxUIObject::create(vcl::Window* pWindow)
return std::unique_ptr<UIObject>(new CheckBoxUIObject(pCheckBox));
}
+RadioButtonUIObject::RadioButtonUIObject(VclPtr<RadioButton> xRadioButton):
+ WindowUIObject(xRadioButton),
+ mxRadioButton(xRadioButton)
+{
+}
+
+RadioButtonUIObject::~RadioButtonUIObject()
+{
+}
+
+void RadioButtonUIObject::execute(const OUString& rAction,
+ const StringMap& /*rParameters*/)
+{
+ if (rAction == "CLICK")
+ {
+ mxRadioButton->ImplCallClick();
+ }
+}
+
+StringMap RadioButtonUIObject::get_state()
+{
+ StringMap aMap = WindowUIObject::get_state();
+
+ return aMap;
+}
+
+OUString RadioButtonUIObject::get_name() const
+{
+ return OUString("RadioButtonUIObject");
+}
+
+std::unique_ptr<UIObject> RadioButtonUIObject::create(vcl::Window* pWindow)
+{
+ RadioButton* pRadioButton = dynamic_cast<RadioButton*>(pWindow);
+ assert(pRadioButton);
+ return std::unique_ptr<UIObject>(new RadioButtonUIObject(pRadioButton));
+}
+
TabPageUIObject::TabPageUIObject(VclPtr<TabPage> xTabPage):
WindowUIObject(xTabPage),
mxTabPage(xTabPage)
commit cca08f80b37e05564cffd2f51afd54322848112c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 03:35:08 2016 +0200
uitest: allow to disable tests
Change-Id: I67afd5d537e8dd80549c1bf6de51fc92b127f836
diff --git a/uitest/main.py b/uitest/main.py
index 9cda053..9039320 100644
--- a/uitest/main.py
+++ b/uitest/main.py
@@ -13,6 +13,9 @@ import importlib
from connection import PersistentConnection, OfficeConnection
def load_test(name):
+ if name.startswith("#"):
+ return None
+
module_name, obj_name = name.rsplit(".", 1)
module = importlib.import_module(module_name)
obj = getattr(module, obj_name)
@@ -20,10 +23,13 @@ def load_test(name):
def generic_test(opts, test_name):
print("executing: " + test_name)
+ func = load_test(test_name)
+ if func is None:
+ return
+
connection = PersistentConnection(opts)
connection.setUp()
xContext = connection.getContext()
- func = load_test(test_name)
func(xContext)
connection.tearDown()
commit d3868095865f2336c5d04dbd5799990bb7b37e0e
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 02:20:31 2016 +0200
uitest: add missing override
Change-Id: I5f3941550bd9256125d74f25e9e512b302e1e27d
diff --git a/include/vcl/button.hxx b/include/vcl/button.hxx
index 472949d..e9c8df9 100644
--- a/include/vcl/button.hxx
+++ b/include/vcl/button.hxx
@@ -96,7 +96,7 @@ public:
/// Sets the button state according to the FeatureStateEvent emitted by an Uno state change.
virtual void statusChanged(const css::frame::FeatureStateEvent& rEvent);
- virtual FactoryFunction GetUITestFactory() const;
+ virtual FactoryFunction GetUITestFactory() const override;
protected:
commit 742a1d7ea13be85947e103a506844dea450da1cc
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 19 02:19:33 2016 +0200
uitest: set ids for a few UI objects created in code
Change-Id: I421b97448bb596b134908ca6ddd60d7b4f60b186
diff --git a/sfx2/source/dialog/tabdlg.cxx b/sfx2/source/dialog/tabdlg.cxx
index 4b33e31..84dcd1c 100644
--- a/sfx2/source/dialog/tabdlg.cxx
+++ b/sfx2/source/dialog/tabdlg.cxx
@@ -440,14 +440,20 @@ void SfxTabDialog::Init_Impl(bool bFmtFlag)
m_pResetBtn = m_pUIBuilder->get<PushButton>("reset");
m_bOwnsResetBtn = m_pResetBtn == nullptr;
if (m_bOwnsResetBtn)
+ {
m_pResetBtn = VclPtr<PushButton>::Create(m_pActionArea.get());
+ m_pResetBtn->set_id("reset");
+ }
else
m_pImpl->bHideResetBtn = !m_pResetBtn->IsVisible();
m_pBaseFmtBtn = m_pUIBuilder->get<PushButton>("standard");
m_bOwnsBaseFmtBtn = m_pBaseFmtBtn == nullptr;
if (m_bOwnsBaseFmtBtn)
+ {
m_pBaseFmtBtn = VclPtr<PushButton>::Create(m_pActionArea.get());
+ m_pBaseFmtBtn->set_id("standard");
+ }
m_pOKBtn->SetClickHdl( LINK( this, SfxTabDialog, OkHdl ) );
m_pCancelBtn->SetClickHdl( LINK( this, SfxTabDialog, CancelHdl ) );
diff --git a/svtools/source/dialogs/wizardmachine.cxx b/svtools/source/dialogs/wizardmachine.cxx
index f7066e0..b83ca08 100644
--- a/svtools/source/dialogs/wizardmachine.cxx
+++ b/svtools/source/dialogs/wizardmachine.cxx
@@ -143,6 +143,7 @@ namespace svt
m_pPrevPage->SetSizePixel( LogicToPixel( Size( 50, 14 ), MAP_APPFONT ) );
m_pPrevPage->SetText(SVT_RESSTR(STR_WIZDLG_PREVIOUS));
m_pPrevPage->Show();
+ m_pPrevPage->set_id("previous");
if (_nButtonFlags & WizardButtonFlags::NEXT)
AddButton( m_pPrevPage, ( WIZARDDIALOG_BUTTON_SMALLSTDOFFSET_X) ); // half x-offset to the next button
@@ -160,6 +161,7 @@ namespace svt
m_pNextPage->SetSizePixel( LogicToPixel( Size( 50, 14 ), MAP_APPFONT ) );
m_pNextPage->SetText(OUString(SVT_RESSTR(STR_WIZDLG_NEXT)));
m_pNextPage->Show();
+ m_pNextPage->set_id("next");
AddButton( m_pNextPage, WIZARDDIALOG_BUTTON_STDOFFSET_X );
SetNextButton( m_pNextPage );
@@ -173,6 +175,7 @@ namespace svt
m_pFinish->SetSizePixel( LogicToPixel( Size( 50, 14 ), MAP_APPFONT ) );
m_pFinish->SetText(SVT_RESSTR(STR_WIZDLG_FINISH));
m_pFinish->Show();
+ m_pFinish->set_id("finish");
AddButton( m_pFinish, WIZARDDIALOG_BUTTON_STDOFFSET_X );
m_pFinish->SetClickHdl( LINK( this, OWizardMachine, OnFinish ) );
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index caf22e4..0546be2 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -1703,6 +1703,7 @@ void PushButton::ShowFocus(const Rectangle& rRect)
void OKButton::ImplInit( vcl::Window* pParent, WinBits nStyle )
{
+ set_id("ok");
PushButton::ImplInit( pParent, nStyle );
SetText( Button::GetStandardText( StandardButtonType::OK ) );
@@ -1748,6 +1749,7 @@ void OKButton::Click()
void CancelButton::ImplInit( vcl::Window* pParent, WinBits nStyle )
{
+ set_id("cancel");
PushButton::ImplInit( pParent, nStyle );
SetText( Button::GetStandardText( StandardButtonType::Cancel ) );
@@ -1799,6 +1801,7 @@ CloseButton::CloseButton( vcl::Window* pParent, WinBits nStyle )
void HelpButton::ImplInit( vcl::Window* pParent, WinBits nStyle )
{
+ set_id("help");
PushButton::ImplInit( pParent, nStyle | WB_NOPOINTERFOCUS );
SetText( Button::GetStandardText( StandardButtonType::Help ) );
commit f06c50870c507444177ed604e08884d44f3e9770
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Fri May 13 04:07:00 2016 +0200
Wall is a good idea for the vim ide integration
Change-Id: Ifb3c602335097ec1e837b60c236683382cfde3e1
diff --git a/bin/gbuild-to-ide b/bin/gbuild-to-ide
index 169cd16..fb2e888 100755
--- a/bin/gbuild-to-ide
+++ b/bin/gbuild-to-ide
@@ -441,7 +441,7 @@ class VimIntegrationGenerator(IdeIntegrationGenerator):
json.dump(global_list, export_file)
def generateCommand(self, lib, file):
- command = 'clang++ '
+ command = 'clang++ -Wall'
for key, value in lib.defs.items():
command += ' -D'
command += key
commit 42237e141b9dca778066f00fa1ca9e83fb27fd8e
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Wed May 11 01:44:17 2016 +0200
uitest: now we can actually enable the ui test demo
Change-Id: I18557ea0a7801ba118fd2486338112d8aa917b75
diff --git a/uitest/Module_uitest.mk b/uitest/Module_uitest.mk
index 4dbf020..9ebc2f7 100644
--- a/uitest/Module_uitest.mk
+++ b/uitest/Module_uitest.mk
@@ -12,4 +12,5 @@ $(eval $(call gb_Module_Module,uitest))
$(eval $(call gb_Module_add_uicheck_targets,uitest,\
UITest_calc_demo \
+ UITest_demo_ui \
))
commit 8ee75350a9bd5e5b3d4183ef0168c717896f202a
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Wed May 11 01:44:00 2016 +0200
uitest: close all the documents in the tests
Change-Id: I4ad9c2603edbf3ac6fc4db60481dc93c16ea63ff
diff --git a/uitest/demo_ui/checkbox.py b/uitest/demo_ui/checkbox.py
index 8a8bf08..5cc456b 100644
--- a/uitest/demo_ui/checkbox.py
+++ b/uitest/demo_ui/checkbox.py
@@ -34,6 +34,9 @@ def toggle_checkbox(xContext):
xNegativeNumRedCB = xCellsDlg.getChild("negnumred")
xNegativeNumRedCB.executeAction("CLICK",tuple())
+ okBtn = xCellsDlg.getChild("ok")
+ okBtn.executeAction("CLICK", tuple())
+
ui_test.close_doc()
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/demo_ui/combobox.py b/uitest/demo_ui/combobox.py
index ba917bb..6df980b 100644
--- a/uitest/demo_ui/combobox.py
+++ b/uitest/demo_ui/combobox.py
@@ -25,6 +25,9 @@ def select_entry_pos(xContext):
actionProps = mkPropertyValues(props)
scopeCB.executeAction("SELECT", actionProps)
+ xCancelBtn = xAddNameDlg.getChild("cancel")
+ xCancelBtn.executeAction("CLICK", tuple())
+
ui_test.close_doc()
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/demo_ui/edit.py b/uitest/demo_ui/edit.py
index 2b44f20..f418a36 100644
--- a/uitest/demo_ui/edit.py
+++ b/uitest/demo_ui/edit.py
@@ -39,8 +39,6 @@ def type_text(xContext):
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
index 21b19d4..03a4c9e 100644
--- a/uitest/demo_ui/listbox.py
+++ b/uitest/demo_ui/listbox.py
@@ -25,6 +25,9 @@ def select_entry_pos(xContext):
actionProps = mkPropertyValues(props)
categoryLB.executeAction("SELECT", actionProps)
+ xOkBtn = xCellsDlg.getChild("ok")
+ xOkBtn.executeAction("CLICK", tuple())
+
ui_test.close_doc()
def select_entry_text(xContext):
@@ -44,6 +47,9 @@ def select_entry_text(xContext):
actionProps = mkPropertyValues(props)
categoryLB.executeAction("SELECT", actionProps)
+ xOkBtn = xCellsDlg.getChild("ok")
+ xOkBtn.executeAction("CLICK", tuple())
+
ui_test.close_doc()
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/uitest/demo_ui/tabdialog.py b/uitest/demo_ui/tabdialog.py
index 9a6f720..09bf600 100644
--- a/uitest/demo_ui/tabdialog.py
+++ b/uitest/demo_ui/tabdialog.py
@@ -26,6 +26,9 @@ def select_tab_page_pos(xContext):
propsUNO = mkPropertyValues(props)
xCellsDlg.executeAction("SELECT", propsUNO)
+ xOkBtn = xCellsDlg.getChild("ok")
+ xOkBtn.executeAction("CLICK", tuple())
+
ui_test.close_doc()
def select_tab_page_name(xContext):
@@ -43,6 +46,9 @@ def select_tab_page_name(xContext):
propsUNO = mkPropertyValues(props)
xCellsDlg.executeAction("SELECT", propsUNO)
+ xOkBtn = xCellsDlg.getChild("ok")
+ xOkBtn.executeAction("CLICK", tuple())
+
ui_test.close_doc()
# vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 0c5abdea5fe40350df6234e71b70cab1f11764ac
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Wed May 11 01:42:39 2016 +0200
uitest: add method to get all children of a ui object
This makes writing ui tests so much easier.
Change-Id: Ice7d98c354fc9b68ee4532bc854561b5b9446e3f
diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx
index b9a3f48..f00d80f 100644
--- a/include/vcl/uitest/uiobject.hxx
+++ b/include/vcl/uitest/uiobject.hxx
@@ -22,6 +22,8 @@
#include <vcl/dllapi.h>
+#include <set>
+
typedef std::map<const OUString, OUString> StringMap;
/**
@@ -63,6 +65,11 @@ public:
virtual std::unique_ptr<UIObject> get_child(const OUString& rID);
/**
+ * Returns a set containing all decendants of the object.
+ */
+ virtual std::set<OUString> get_children() const;
+
+ /**
* Currently an internal method to dump the state of the current UIObject as represented by get_state().
*
* This method should not be exposed to the outside world.
@@ -96,6 +103,8 @@ public:
virtual std::unique_ptr<UIObject> get_child(const OUString& rID) override;
+ virtual std::set<OUString> get_children() const override;
+
virtual void dumpState() const override;
virtual void dumpHierarchy() const override;
diff --git a/offapi/com/sun/star/ui/test/XUIObject.idl b/offapi/com/sun/star/ui/test/XUIObject.idl
index 9a0ca6b..9409490 100644
--- a/offapi/com/sun/star/ui/test/XUIObject.idl
+++ b/offapi/com/sun/star/ui/test/XUIObject.idl
@@ -23,6 +23,8 @@ interface XUIObject
com::sun::star::beans::PropertyValues getState();
string getType();
+
+ sequence<string> getChildren();
};
}; }; }; }; };
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 2852415..6b4c471 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -56,6 +56,11 @@ std::unique_ptr<UIObject> UIObject::get_child(const OUString&)
return std::unique_ptr<UIObject>();
}
+std::set<OUString> UIObject::get_children() const
+{
+ return std::set<OUString>();
+}
+
void UIObject::dumpState() const
{
}
@@ -311,6 +316,29 @@ vcl::Window* findChild(vcl::Window* pParent, const OUString& rID)
return nullptr;
}
+void addChildren(vcl::Window* pParent, std::set<OUString>& rChildren)
+{
+ if (!pParent)
+ return;
+
+ size_t nCount = pParent->GetChildCount();
+ for (size_t i = 0; i < nCount; ++i)
+ {
+ vcl::Window* pChild = pParent->GetChild(i);
+ if (pChild)
+ {
+ OUString aId = pChild->get_id();
+ if (!aId.isEmpty())
+ {
+ auto ret = rChildren.insert(aId);
+ SAL_WARN_IF(!ret.second, "vcl.uitest", "duplicate ids for ui elements. violates locally unique requirement");
+ }
+
+ addChildren(pChild, rChildren);
+ }
+ }
+}
+
}
std::unique_ptr<UIObject> WindowUIObject::get_child(const OUString& rID)
@@ -322,6 +350,15 @@ std::unique_ptr<UIObject> WindowUIObject::get_child(const OUString& rID)
return aFunction(pWindow);
}
+std::set<OUString> WindowUIObject::get_children() const
+{
+ vcl::Window* pDialogParent = get_dialog_parent(mxWindow.get());
+ std::set<OUString> aChildren;
+ aChildren.insert(pDialogParent->get_id());
+ addChildren(pDialogParent, aChildren);
+ return aChildren;
+}
+
OUString WindowUIObject::get_name() const
{
return OUString("WindowUIObject");
diff --git a/vcl/source/uitest/uno/uiobject_uno.cxx b/vcl/source/uitest/uno/uiobject_uno.cxx
index 998a0d9..7c6ca83 100644
--- a/vcl/source/uitest/uno/uiobject_uno.cxx
+++ b/vcl/source/uitest/uno/uiobject_uno.cxx
@@ -10,6 +10,8 @@
#include "uiobject_uno.hxx"
#include <vcl/svapp.hxx>
+#include <set>
+
UIObjectUnoObj::UIObjectUnoObj(std::unique_ptr<UIObject> pObj):
UIObjectBase(m_aMutex),
mpObj(std::move(pObj))
@@ -69,6 +71,24 @@ css::uno::Sequence<css::beans::PropertyValue> UIObjectUnoObj::getState()
return aProps;
}
+css::uno::Sequence<OUString> UIObjectUnoObj::getChildren()
+ throw (css::uno::RuntimeException, std::exception)
+{
+ if (!mpObj)
+ throw css::uno::RuntimeException();
+
+ std::set<OUString> aChildren = mpObj->get_children();
+
+ css::uno::Sequence<OUString> aRet(aChildren.size());
+ sal_Int32 i = 0;
+ for (auto itr = aChildren.begin(), itrEnd = aChildren.end(); itr != itrEnd; ++itr, ++i)
+ {
+ aRet[i] = *itr;
+ }
+
+ return aRet;
+}
+
OUString SAL_CALL UIObjectUnoObj::getType()
throw (css::uno::RuntimeException, std::exception)
{
diff --git a/vcl/source/uitest/uno/uiobject_uno.hxx b/vcl/source/uitest/uno/uiobject_uno.hxx
index d3519bf..fe0669a 100644
--- a/vcl/source/uitest/uno/uiobject_uno.hxx
+++ b/vcl/source/uitest/uno/uiobject_uno.hxx
@@ -46,6 +46,9 @@ public:
css::uno::Sequence<css::beans::PropertyValue> SAL_CALL getState()
throw (css::uno::RuntimeException, std::exception) override;
+ css::uno::Sequence<OUString> SAL_CALL getChildren()
+ throw (css::uno::RuntimeException, std::exception) override;
+
OUString SAL_CALL getType()
throw (css::uno::RuntimeException, std::exception) override;
commit 4ec1c63b91ac1f0c77f7ead33b4cbbd9d80a613b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Tue May 10 01:27:59 2016 +0200
uitest: add the ui demo tests
The makefile part needs to be added but the tests currently hang as I'm
not closing the dialogs yet.
Change-Id: I8f938fb9b46213e6b1c7295bde780f119053447e
diff --git a/uitest/demo_ui/demo_ui.txt b/uitest/demo_ui/demo_ui.txt
new file mode 100644
index 0000000..6db5b79
--- /dev/null
+++ b/uitest/demo_ui/demo_ui.txt
@@ -0,0 +1,10 @@
+demo_ui.checkbox.toggle_checkbox
+demo_ui.combobox.select_entry_pos
+demo_ui.edit.type_text
+demo_ui.gridwin.select_cell
+demo_ui.gridwin.select_range
+demo_ui.gridwin.extend_range
+demo_ui.listbox.select_entry_pos
+demo_ui.listbox.select_entry_text
+demo_ui.tabdialog.select_tab_page_pos
+demo_ui.tabdialog.select_tab_page_name
commit 40804d6179c42bb39ec70f539f51ecf93934814c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Tue May 10 01:26:56 2016 +0200
uitest: report when a dialog was not executed correctly
Change-Id: Ibe603045b095e020e572bac986d766ac555b0e04
diff --git a/uitest/uitest_helper.py b/uitest/uitest_helper.py
index 5d5f158..cac4ea1 100644
--- a/uitest/uitest_helper.py
+++ b/uitest/uitest_helper.py
@@ -9,6 +9,13 @@ import time
from helper import EventListener
+class DialogNotExecutedException(Exception):
+ def __init__(self, command):
+ self.command = command
+
+ def __str__(self):
+ return "Dialog not executed for: " + self.command
+
class UITest(object):
DEFAULT_SLEEP = 0.1
@@ -28,8 +35,7 @@ class UITest(object):
time_ += self.DEFAULT_SLEEP
time.sleep(self.DEFAULT_SLEEP)
- # report a failure here
- print("failure execute modal dialog")
+ raise DialogNotExecutedException(command)
def execute_modeless_dialog_through_command(self, command):
with EventListener(self._xContext, "ModelessDialogVisible") as event:
@@ -42,8 +48,7 @@ class UITest(object):
time_ += self.DEFAULT_SLEEP
time.sleep(self.DEFAULT_SLEEP)
- # report a failure here
- print("failure execute modeless dialog")
+ raise DialogNotExecutedException(command)
def create_doc_in_start_center(self, app):
xStartCenter = self._xUITest.getTopFocusWindow()
commit 511f6f85d90884f864b5bf42eedb758841f72957
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Tue May 10 01:26:33 2016 +0200
uitest: make it easier to debug which test is causing issues
Change-Id: I10a777d15d99a1fea756160ec39093a2781119b1
diff --git a/uitest/main.py b/uitest/main.py
index 4ec8ad5..9cda053 100644
--- a/uitest/main.py
+++ b/uitest/main.py
@@ -19,6 +19,7 @@ def load_test(name):
return obj
def generic_test(opts, test_name):
+ print("executing: " + test_name)
connection = PersistentConnection(opts)
connection.setUp()
xContext = connection.getContext()
commit d46da071cb4412b708a54cab8252e56c85a9427d
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Tue May 10 00:56:09 2016 +0200
uitest: add all calc demo tests
Change-Id: I33417d49665f48cb20b1fb1dbe20a7a2cbbf5074
diff --git a/uitest/calc_tests/calc_demo.txt b/uitest/calc_tests/calc_demo.txt
index fd921da..6ff4e22 100644
--- a/uitest/calc_tests/calc_demo.txt
+++ b/uitest/calc_tests/calc_demo.txt
@@ -1 +1,5 @@
calc_tests.create_range_name.create_range_name
+calc_tests.create_range_name.create_local_range_name
+calc_tests.function_wizard.open_function_wizard
+calc_tests.gridwindow.input
+calc_tests.about_test.test_about_dlg
commit 0af2f86a286558c08ad4df87a15f5ba89f19eb01
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon May 9 22:09:44 2016 +0200
uitest: add README
Change-Id: I9511da3100bda9cedd18f6a4e3765bc6f3fbcb78
diff --git a/uitest/README b/uitest/README
new file mode 100644
index 0000000..c941673
--- /dev/null
+++ b/uitest/README
@@ -0,0 +1 @@
+The code for the UI testing framework and the UI tests.
commit 3ead72d365c722f2234ace08fdb3d313f709ace5
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon May 9 10:05:14 2016 +0200
uitest: build system part for new uitests
We now can call the uitests with make uitest.uickeck
Change-Id: I20c73efd93c7987f3b841cd0e3e7842ee7a5dab9
diff --git a/Makefile.in b/Makefile.in
index 5e8b9de..23ccc95 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -7,7 +7,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
-gb_Top_MODULE_CHECK_TARGETS := slowcheck unitcheck subsequentcheck perfcheck
+gb_Top_MODULE_CHECK_TARGETS := slowcheck unitcheck subsequentcheck perfcheck uicheck
.PHONY : all check-if-root bootstrap gbuild build build-non-l10n-only build-l10n-only check clean clean-build clean-host test-install distclean distro-pack-install docs download etags fetch findunusedcode get-submodules id install install-strip tags debugrun help showmodules translations packageinfo internal.clean $(gb_Top_MODULE_CHECK_TARGETS)
@@ -144,6 +144,7 @@ gbuild_TARGETS := AllLangHelp \
Rdb \
StaticLibrary \
UIConfig \
+ UITest \
UnoApi \
UnpackedTarball \
WinResTarget \
diff --git a/RepositoryModule_host.mk b/RepositoryModule_host.mk
index d2f1d84..5954a50 100644
--- a/RepositoryModule_host.mk
+++ b/RepositoryModule_host.mk
@@ -138,6 +138,7 @@ $(eval $(call gb_Module_add_moduledirs,libreoffice,\
ucb \
ucbhelper \
udkapi \
+ $(call gb_Helper_optional,PYUNO,uitest) \
UnoControls \
unodevtools \
unoil \
@@ -181,7 +182,7 @@ endef
# otherwise cyclic dependencies ruin everything.
# do not serialize on a partial build as that may fail due to missing deps.
# the default goal is all (see Module.mk)
-ifeq (,$(filter-out all build check unitcheck slowcheck subsequentcheck,$(MAKECMDGOALS)))
+ifeq (,$(filter-out all build check unitcheck slowcheck subsequentcheck uicheck,$(MAKECMDGOALS)))
$(eval $(call repositorymodule_serialize,\
scfilt \
$(call gb_Helper_optional,SCRIPTING,vbaobj) \
diff --git a/solenv/gbuild/Module.mk b/solenv/gbuild/Module.mk
index 468b80b..d4217ea 100644
--- a/solenv/gbuild/Module.mk
+++ b/solenv/gbuild/Module.mk
@@ -27,12 +27,14 @@
# recursive Module/checks
# Module/slowcheck run all slow unit tests
# Module/subsequentcheck run system tests all system tests
+# Module/uicheck run uitests all uitests
# recursive Module/subsequentchecks
# build (global) build the product top-level Module
# unitcheck (global) run unit tests top-level Module/unitcheck
# slowcheck (global) run slow unit tests top-level Module/slowcheck
# subsequentcheck (global) run system tests top-level Module/subsequentcheck
# perfcheck (global) run performance unit tests top-level Module/perfcheck
+# uicheck (global) run the uitests run all uitests
# all (global) default goal build unitcheck
@@ -47,6 +49,7 @@ gb_Module_SLOWCHECKTARGETSTACK :=
gb_Module_SUBSEQUENTCHECKTARGETSTACK :=
gb_Module_STAGINGCHECKTARGETSTACK :=
gb_Module_PERFCHECKTARGETSTACK :=
+gb_Module_UICHECKTARGETSTACK :=
gb_Module_CLEANTARGETSTACK :=
# The currently read gbuild makefile.
@@ -68,7 +71,7 @@ $(call gb_Module_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),MOD,5)
$(call gb_Output_announce_title,module $* cleared.)
-$(call gb_Helper_abbreviate_dirs,\
- rm -f $(call gb_Module_get_target,$*) $(call gb_Module_get_nonl10n_target,$*) $(call gb_Module_get_l10n_target,$*) $(call gb_Module_get_check_target,$*) $(call gb_Module_get_slowcheck_target,$*) $(call gb_Module_get_subsequentcheck_target,$*) $(call gb_Module_get_perfcheck_target,$*))
+ rm -f $(call gb_Module_get_target,$*) $(call gb_Module_get_nonl10n_target,$*) $(call gb_Module_get_l10n_target,$*) $(call gb_Module_get_check_target,$*) $(call gb_Module_get_slowcheck_target,$*) $(call gb_Module_get_subsequentcheck_target,$*) $(call gb_Module_get_perfcheck_target,$*) $(call gb_Module_get_uicheck,$*))
$(call gb_Module_get_l10n_target,%) :
$(call gb_Output_announce,$*,$(true),LOC,5)
@@ -112,6 +115,13 @@ $(call gb_Module_get_perfcheck_target,%) :
mkdir -p $(dir $@) && \
touch $@)
+$(call gb_Module_get_uicheck_target,%) :
+ $(call gb_Output_announce,$*,$(true),UIT,5)
+ $(call gb_Output_announce_title,module $* uicheck done.)
+ -$(call gb_Helper_abbreviate_dirs,\
+ mkdir -p $(dir $@) && \
+ touch $@)
+
$(call gb_Module_get_target,%) :
$(call gb_Output_announce,$*,$(true),MOD,5)
$(call gb_Output_announce_title,module $* done.)
@@ -119,7 +129,7 @@ $(call gb_Module_get_target,%) :
mkdir -p $(dir $@) && \
touch $@)
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list