From ed5640d8b587fbcfed7dd7967f3de04b37a76f26 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:06:44 +0200 Subject: Adding upstream version 4:7.4.7. Signed-off-by: Daniel Baumann --- smoketest/CppunitTest_smoketest.mk | 55 ++ smoketest/Extension_TestExtension.mk | 14 + smoketest/Jar_TestExtension.mk | 29 + smoketest/Jar_smoketest.mk | 27 + smoketest/Library_smoketest.mk | 37 + smoketest/Makefile | 7 + smoketest/Module_smoketest.mk | 47 ++ smoketest/README.md | 19 + smoketest/Zip_smoketestdoc.mk | 38 + smoketest/com/sun/star/comp/smoketest/MANIFEST.MF | 2 + .../sun/star/comp/smoketest/META-INF/manifest.xml | 4 + .../com/sun/star/comp/smoketest/TestExtension.java | 126 ++++ .../com/sun/star/comp/smoketest/description.xml | 26 + smoketest/data/Basic/Standard/Events.xml | 57 ++ smoketest/data/Basic/Standard/Global.xml | 811 +++++++++++++++++++++ smoketest/data/Basic/Standard/Test_10er.xml | 671 +++++++++++++++++ smoketest/data/Basic/Standard/Test_DB.xml | 138 ++++ smoketest/data/Basic/Standard/Test_Ext.xml | 108 +++ smoketest/data/Basic/Standard/script-lb.xml | 26 + smoketest/data/Basic/script-lc.xml | 22 + smoketest/data/Dialogs/Standard/OptionsDlg.xml | 54 ++ smoketest/data/Dialogs/Standard/dialog-lb.xml | 22 + smoketest/data/Dialogs/dialog-lc.xml | 22 + smoketest/data/META-INF/manifest.xml | 40 + smoketest/data/content.xml | 103 +++ smoketest/data/meta.xml | 33 + smoketest/data/mimetype | 1 + smoketest/data/settings.xml | 109 +++ smoketest/data/styles.xml | 115 +++ smoketest/org/libreoffice/smoketest/Services.java | 51 ++ .../smoketest/SmoketestCommandEnvironment.java | 108 +++ smoketest/org/libreoffice/smoketest/manifest | 3 + .../org/libreoffice/smoketest/smoketest.component | 25 + smoketest/smoketest.cxx | 199 +++++ smoketest/smoketest_too.cxx | 1 + 35 files changed, 3150 insertions(+) create mode 100644 smoketest/CppunitTest_smoketest.mk create mode 100644 smoketest/Extension_TestExtension.mk create mode 100644 smoketest/Jar_TestExtension.mk create mode 100644 smoketest/Jar_smoketest.mk create mode 100644 smoketest/Library_smoketest.mk create mode 100644 smoketest/Makefile create mode 100644 smoketest/Module_smoketest.mk create mode 100644 smoketest/README.md create mode 100644 smoketest/Zip_smoketestdoc.mk create mode 100644 smoketest/com/sun/star/comp/smoketest/MANIFEST.MF create mode 100644 smoketest/com/sun/star/comp/smoketest/META-INF/manifest.xml create mode 100644 smoketest/com/sun/star/comp/smoketest/TestExtension.java create mode 100644 smoketest/com/sun/star/comp/smoketest/description.xml create mode 100644 smoketest/data/Basic/Standard/Events.xml create mode 100644 smoketest/data/Basic/Standard/Global.xml create mode 100644 smoketest/data/Basic/Standard/Test_10er.xml create mode 100644 smoketest/data/Basic/Standard/Test_DB.xml create mode 100644 smoketest/data/Basic/Standard/Test_Ext.xml create mode 100644 smoketest/data/Basic/Standard/script-lb.xml create mode 100644 smoketest/data/Basic/script-lc.xml create mode 100644 smoketest/data/Dialogs/Standard/OptionsDlg.xml create mode 100644 smoketest/data/Dialogs/Standard/dialog-lb.xml create mode 100644 smoketest/data/Dialogs/dialog-lc.xml create mode 100644 smoketest/data/META-INF/manifest.xml create mode 100644 smoketest/data/content.xml create mode 100644 smoketest/data/meta.xml create mode 100644 smoketest/data/mimetype create mode 100644 smoketest/data/settings.xml create mode 100644 smoketest/data/styles.xml create mode 100644 smoketest/org/libreoffice/smoketest/Services.java create mode 100644 smoketest/org/libreoffice/smoketest/SmoketestCommandEnvironment.java create mode 100644 smoketest/org/libreoffice/smoketest/manifest create mode 100644 smoketest/org/libreoffice/smoketest/smoketest.component create mode 100644 smoketest/smoketest.cxx create mode 100644 smoketest/smoketest_too.cxx (limited to 'smoketest') diff --git a/smoketest/CppunitTest_smoketest.mk b/smoketest/CppunitTest_smoketest.mk new file mode 100644 index 000000000..f7d64cae5 --- /dev/null +++ b/smoketest/CppunitTest_smoketest.mk @@ -0,0 +1,55 @@ +# -*- 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_CppunitTest_CppunitTest,smoketest)) + +$(eval $(call gb_CppunitTest_add_exception_objects,smoketest,\ + smoketest/smoketest_too \ +)) + +$(eval $(call gb_CppunitTest_use_external,smoketest,boost_headers)) + +$(eval $(call gb_CppunitTest_use_sdk_api,smoketest)) + +$(eval $(call gb_CppunitTest_use_libraries,smoketest,\ + cppu \ + cppuhelper \ + sal \ + unotest \ +)) + +$(eval $(call gb_CppunitTest_use_ure,smoketest)) + +ifeq ($(ENABLE_MACOSX_SANDBOX),TRUE) +userinstallation=$(shell $(INSTROOT)/$(LIBO_BIN_FOLDER)/soffice --nstemporarydirectory) +else +userinstallation=$(WORKDIR)/CustomTarget/smoketest +endif + +$(eval $(call gb_CppunitTest_add_arguments,smoketest,\ + -env:arg-soffice=$(gb_JunitTest_SOFFICEARG) \ + -env:arg-user=$(userinstallation) \ + -env:arg-env=$(gb_Helper_LIBRARY_PATH_VAR)"$$$${$(gb_Helper_LIBRARY_PATH_VAR)+=$$$$$(gb_Helper_LIBRARY_PATH_VAR)}" \ + -env:arg-testarg.smoketest.doc=$(WORKDIR)/Zip/smoketestdoc.sxw \ +)) + +$(call gb_CppunitTest_get_target,smoketest): \ + clean_CustomTarget_smoketest \ + $(WORKDIR)/Zip/smoketestdoc.sxw + +clean_CustomTarget_smoketest: + rm -rf $(WORKDIR)/CustomTarget/smoketest + mkdir -p $(WORKDIR)/CustomTarget/smoketest/user + cp $(SRCDIR)/qadevOOo/qa/registrymodifications.xcu $(WORKDIR)/CustomTarget/smoketest/user + +$(WORKDIR)/Zip/smoketestdoc.sxw: $(call gb_Zip_get_target,smoketestdoc) + cp $< $@ + +# vim: set noet sw=4 ts=4: diff --git a/smoketest/Extension_TestExtension.mk b/smoketest/Extension_TestExtension.mk new file mode 100644 index 000000000..83ab2517f --- /dev/null +++ b/smoketest/Extension_TestExtension.mk @@ -0,0 +1,14 @@ +# -*- 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_Extension_Extension,TestExtension,smoketest/com/sun/star/comp/smoketest,nodeliver)) + +$(eval $(call gb_Extension_add_file,TestExtension,TestExtension.jar,$(call gb_Jar_get_target,TestExtension))) + +# vim: set noet sw=4 ts=4: diff --git a/smoketest/Jar_TestExtension.mk b/smoketest/Jar_TestExtension.mk new file mode 100644 index 000000000..c0621d94d --- /dev/null +++ b/smoketest/Jar_TestExtension.mk @@ -0,0 +1,29 @@ +# -*- 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_Jar_Jar,TestExtension)) + +$(eval $(call gb_Jar_set_manifest,TestExtension,$(SRCDIR)/smoketest/com/sun/star/comp/smoketest/MANIFEST.MF)) + +$(eval $(call gb_Jar_add_manifest_classpath,TestExtension,\ + libreoffice.jar \ +)) + +$(eval $(call gb_Jar_use_jars,TestExtension,\ + libreoffice \ +)) + +$(eval $(call gb_Jar_set_packageroot,TestExtension,com)) + +$(eval $(call gb_Jar_add_sourcefiles,TestExtension,\ + smoketest/com/sun/star/comp/smoketest/TestExtension \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/smoketest/Jar_smoketest.mk b/smoketest/Jar_smoketest.mk new file mode 100644 index 000000000..a62022031 --- /dev/null +++ b/smoketest/Jar_smoketest.mk @@ -0,0 +1,27 @@ +# -*- 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_Jar_Jar,smoketest)) + +$(eval $(call gb_Jar_add_sourcefiles,smoketest, \ + smoketest/org/libreoffice/smoketest/Services \ + smoketest/org/libreoffice/smoketest/SmoketestCommandEnvironment \ +)) + +$(eval $(call gb_Jar_set_componentfile,smoketest,smoketest/org/libreoffice/smoketest/smoketest,OOO,services)) + +$(eval $(call gb_Jar_set_manifest,smoketest,$(SRCDIR)/smoketest/org/libreoffice/smoketest/manifest)) + +$(eval $(call gb_Jar_set_packageroot,smoketest,org)) + +$(eval $(call gb_Jar_use_jars,smoketest, \ + libreoffice \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/smoketest/Library_smoketest.mk b/smoketest/Library_smoketest.mk new file mode 100644 index 000000000..b7751491a --- /dev/null +++ b/smoketest/Library_smoketest.mk @@ -0,0 +1,37 @@ +# -*- 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/. +# + +# this is a Library that contains a unit test, so it can be packaged +$(eval $(call gb_Library_Library,smoketest)) + +# necessary because this is no CppUnitTest but a Library +$(eval $(call gb_Library_add_defs,smoketest,\ + -DCPPUNIT_PLUGIN_EXPORT='extern "C" SAL_DLLPUBLIC_EXPORT' \ +)) + +$(eval $(call gb_Library_use_sdk_api,smoketest)) + +$(eval $(call gb_Library_use_libraries,smoketest,\ + cppu \ + cppuhelper \ + sal \ + unotest \ +)) + +$(eval $(call gb_Library_use_externals,smoketest,\ + boost_headers \ + cppunit \ +)) + +$(eval $(call gb_Library_add_exception_objects,smoketest,\ + smoketest/smoketest \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/smoketest/Makefile b/smoketest/Makefile new file mode 100644 index 000000000..ccb1c85a0 --- /dev/null +++ b/smoketest/Makefile @@ -0,0 +1,7 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- + +module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) + +include $(module_directory)/../solenv/gbuild/partial_build.mk + +# vim: set noet sw=4 ts=4: diff --git a/smoketest/Module_smoketest.mk b/smoketest/Module_smoketest.mk new file mode 100644 index 000000000..5d66a0daa --- /dev/null +++ b/smoketest/Module_smoketest.mk @@ -0,0 +1,47 @@ +# -*- 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_Module_Module,smoketest)) + +ifeq ($(CROSS_COMPILING),) + +ifneq (,$(filter DESKTOP,$(BUILD_TYPE))) +$(eval $(call gb_Module_add_targets,smoketest,\ + Library_smoketest \ + Zip_smoketestdoc \ +)) +endif + +ifneq ($(ENABLE_JAVA),) +ifneq ($(filter EXTENSIONS,$(BUILD_TYPE)),) +$(eval $(call gb_Module_add_targets,smoketest,\ + Extension_TestExtension \ + Jar_TestExtension \ +)) +endif +endif + +ifneq (MACOSX/TRUE,$(OS)/$(ENABLE_MACOSX_SANDBOX)) +ifneq ($(filter EXTENSIONS,$(BUILD_TYPE)),) +$(eval $(call gb_Module_add_subsequentcheck_targets,smoketest,\ + CppunitTest_smoketest \ +)) +endif +endif + +endif + +ifneq ($(ENABLE_JAVA),) +$(eval $(call gb_Module_add_targets,smoketest,\ + Jar_smoketest \ +)) +endif + +# vim: set noet sw=4 ts=4: diff --git a/smoketest/README.md b/smoketest/README.md new file mode 100644 index 000000000..5cd48ecb3 --- /dev/null +++ b/smoketest/README.md @@ -0,0 +1,19 @@ +# Smoke Test +Smoke test for each component of LibreOffice. + +* `smoketest`: + +The main `smoketest.cxx` is launched connects via binary UNO +over a socket to a remote LibreOffice instance. This loads a document +which is zipped at build time into the `workdir/` from the `data/` +directory. This in turn contains a set of macros in +`data/Basic/Standard`. + +`smoketest.cxx` does a remote the `StartTestWithDefaultOptions` +macro and waits for a `dispatchFinished` from the macro's execution. To +debug this best load `workdir/Zip/smoketestdoc.sxw` - and hit `start +smoketest` - this will launch a number of components and build a +suitable report in the form of a table. + +The StarBasic smoketests also log their output, this ends up +in `instdir/user/temp/smoketest.log`. diff --git a/smoketest/Zip_smoketestdoc.mk b/smoketest/Zip_smoketestdoc.mk new file mode 100644 index 000000000..de3fb6b5e --- /dev/null +++ b/smoketest/Zip_smoketestdoc.mk @@ -0,0 +1,38 @@ +# -*- 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/. +# + +SMOKETESTDOC_DIR:=$(SRCDIR)/smoketest/data + +$(eval $(call gb_Zip_Zip,smoketestdoc,$(SRCDIR)/smoketest/data)) + +$(eval $(call gb_Zip_add_commandoptions,smoketestdoc,-D)) + +$(eval $(call gb_Zip_add_file,smoketestdoc,mimetype)) + +$(eval $(call gb_Zip_add_file,smoketestdoc,content.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,meta.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,settings.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,styles.xml)) + +$(eval $(call gb_Zip_add_file,smoketestdoc,META-INF/manifest.xml)) + +$(eval $(call gb_Zip_add_file,smoketestdoc,Basic/script-lc.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,Basic/Standard/script-lb.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,Basic/Standard/Events.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,Basic/Standard/Global.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,Basic/Standard/Test_10er.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,Basic/Standard/Test_DB.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,Basic/Standard/Test_Ext.xml)) + +$(eval $(call gb_Zip_add_file,smoketestdoc,Dialogs/dialog-lc.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,Dialogs/Standard/dialog-lb.xml)) +$(eval $(call gb_Zip_add_file,smoketestdoc,Dialogs/Standard/OptionsDlg.xml)) + +# vim: set noet sw=4 ts=4: diff --git a/smoketest/com/sun/star/comp/smoketest/MANIFEST.MF b/smoketest/com/sun/star/comp/smoketest/MANIFEST.MF new file mode 100644 index 000000000..09e2f42ca --- /dev/null +++ b/smoketest/com/sun/star/comp/smoketest/MANIFEST.MF @@ -0,0 +1,2 @@ +RegistrationClassName: com.sun.star.comp.smoketest.TestExtension + diff --git a/smoketest/com/sun/star/comp/smoketest/META-INF/manifest.xml b/smoketest/com/sun/star/comp/smoketest/META-INF/manifest.xml new file mode 100644 index 000000000..0e7304442 --- /dev/null +++ b/smoketest/com/sun/star/comp/smoketest/META-INF/manifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/smoketest/com/sun/star/comp/smoketest/TestExtension.java b/smoketest/com/sun/star/comp/smoketest/TestExtension.java new file mode 100644 index 000000000..c953607e2 --- /dev/null +++ b/smoketest/com/sun/star/comp/smoketest/TestExtension.java @@ -0,0 +1,126 @@ +/* + * 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/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package com.sun.star.comp.smoketest; + +import com.sun.star.lib.uno.helper.Factory; +import com.sun.star.lang.XSingleComponentFactory; +import com.sun.star.lib.uno.helper.WeakBase; +import com.sun.star.registry.XRegistryKey; +import com.sun.star.lang.XServiceInfo; + +/** This class capsulates the class, that implements the minimal component, a + * factory for creating the service (__getComponentFactory) and a + * method, that writes the information into the given registry key + * (__writeRegistryServiceInfo). + */ +public class TestExtension { + /** This class implements the component. At least the interfaces XServiceInfo, + * XTypeProvider, and XInitialization should be provided by the service. + */ + public static class _TestExtension extends WeakBase + implements XServiceInfo { + /** The service name, that must be used to get an instance of this service. + */ + private static final String __serviceName = + "com.sun.star.comp.smoketest.TestExtension"; + + /** This method returns an array of all supported service names. + * @return Array of supported service names. + */ + public String[] getSupportedServiceNames() { + return getServiceNames(); + } + + /** This method is a simple helper function to used in the + * static component initialisation functions as well as in + * getSupportedServiceNames. + */ + public static String[] getServiceNames() { + String[] sSupportedServiceNames = { __serviceName }; + return sSupportedServiceNames; + } + + /** This method returns true, if the given service will be + * supported by the component. + * @param sServiceName Service name. + * @return True, if the given service name will be supported. + */ + public boolean supportsService( String sServiceName ) { + return sServiceName.equals( __serviceName ); + } + + /** Return the class name of the component. + * @return Class name of the component. + */ + public String getImplementationName() { + return _TestExtension.class.getName(); + } + } + + + /** + * Gives a factory for creating the service. + * This method is called by the JavaLoader + *

+ * @return returns a XSingleComponentFactory for creating + * the component + * @param sImplName the name of the implementation for which a + * service is desired + * @see com.sun.star.comp.loader.JavaLoader + */ + public static XSingleComponentFactory __getComponentFactory(String sImplName) + { + XSingleComponentFactory xFactory = null; + + if ( sImplName.equals( _TestExtension.class.getName() ) ) + xFactory = Factory.createComponentFactory(_TestExtension.class, + _TestExtension.getServiceNames()); + + return xFactory; + } + + /** + * Writes the service information into the given registry key. + * This method is called by the JavaLoader + *

+ * @return returns true if the operation succeeded + * @param regKey the registryKey + * @see com.sun.star.comp.loader.JavaLoader + */ + public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { + return Factory.writeRegistryServiceInfo(_TestExtension.class.getName(), + _TestExtension.getServiceNames(), + regKey); + } + /** This method is a member of the interface for initializing an object + * directly after its creation. + * @param object This array of arbitrary objects will be passed to the + * component after its creation. + * @throws com.sun.star.uno.Exception Every exception will not be handled, but will be + * passed to the caller. + */ + public void initialize( Object[] object ) + throws com.sun.star.uno.Exception { + /* The component describes what arguments are expected and in which + * order! At this point you can read the objects and initialize + * your component using these objects. + */ + } + +} diff --git a/smoketest/com/sun/star/comp/smoketest/description.xml b/smoketest/com/sun/star/comp/smoketest/description.xml new file mode 100644 index 000000000..ccbac75df --- /dev/null +++ b/smoketest/com/sun/star/comp/smoketest/description.xml @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/smoketest/data/Basic/Standard/Events.xml b/smoketest/data/Basic/Standard/Events.xml new file mode 100644 index 000000000..127af2f79 --- /dev/null +++ b/smoketest/data/Basic/Standard/Events.xml @@ -0,0 +1,57 @@ + + + +REM ***** BASIC ***** + +Global s_CloseListenerCalled As Boolean + +Sub PressCancel + gDlgState = cDlgCancel +end Sub + +Sub PressOk + gDlgState = cDlgOk +end Sub + +Sub PressTest + gOptionsDialog.EndExecute() + gDlgState = cDlgStartTest +end Sub + +Sub closeListener_queryClosing + ' not interested in + closeListener_queryClosing = TRUE +End Sub + +Sub closeListener_notifyClosing + s_CloseListenerCalled = TRUE +End Sub + +Sub closeListener_disposing + ' not interested in +End Sub + +Sub ResetCloseListenerFlag + s_CloseListenerCalled = FALSE +End Sub + +Function HasCloseListenerBeenCalled As Boolean + HasCloseListenerBeenCalled = s_CloseListenerCalled +End Function + diff --git a/smoketest/data/Basic/Standard/Global.xml b/smoketest/data/Basic/Standard/Global.xml new file mode 100644 index 000000000..fa28297fe --- /dev/null +++ b/smoketest/data/Basic/Standard/Global.xml @@ -0,0 +1,811 @@ + + + +REM ***** BASIC ***** + +const cMaxErrorStates = 14 + +const cCoGreen = 4057917, cCoRed = 16711680, cCoGrey = 12632256 +const cParagraphBreak = 0 + +global const cExtensionFileName = "TestExtension.oxt" + +global const cDocNew = 0, cDocSaveOpen8 = 1, cDocClose = 3, cDocMacros = 4 +global const cDBService = 0, cDBOpen = 1, cDBInsert = 2, cDBDelete = 3, cDBSeek = 4, cDBClose = 5 +global const cEXTService = 0, cEXTInstall = 1, cEXTUninstall = 2 +global const cTestClosureSetupDoc = 0, cTestClosureWriteStatus = 1 +global const cLogfileFailed = 255 + +global const cStWriter = 0, cStCalc = 1, cStPraesentation = 2, cStZeichnen = 3 +global const cStHTML = 6, cStChart = 4, cStJava = 7 +global const cStMath = 5, cStDataBase = 9 +global const cStExtension = 11 +global const cStTestGlue = 12 +global const cStNone = -1 + +global const cFlt8 = 0, cFltNewDoc = 64, cFltXML = 128 + +global const frmWriter = 1, frmCalc = 2, frmImpress = 4 +global const frmMath = 5, frmChart = 7, frmHyperText = 8, frmDraw = 9 +global const frmDataBase = 10, frmJava = 13 +global const frmExtension = 14 +global const frmTestClosure = 15 + +Global gCurrentDocTest As Integer +Global gCurrentTestCase As Integer + +global const cLogUnknown = 0, cLogFalse = 1, cLogTrue = 2 + +'UserFieldKennungen +Global const cYes = "y", cNo = "n" +Global const cStateNo = 0, cStateYes = 1 + +'FieldTypes +Global const cFtExtUser = 21, cFtPageNum = 5, cFtStatistic = 8, cFtDateTime = 27, cFtDatabase = 31 + +'UnoStrings +Global const cUnoSeparator = "." +Global const cUnoPrefix = "com.sun.star." +Global const cUnoUserField = cUnoPrefix + "text.FieldMaster.User" +Global const cUnoExtUserField = cUnoPrefix + "text.TextField.ExtendedUser" +Global const cUnoMasterDataBase = cUnoPrefix + "text.FieldMaster.Database" +Global const cUnoDataBase = cUnoPrefix + "text.TextField.Database" +Global const cUnoDateTime = cUnoPrefix + "text.TextField.DateTime" +Global const cUnoTextGraphi2 = cUnoPrefix + "text.Graphic" +Global const cUnoJavaLoader = cUnoPrefix + "loader.Java" +Global const cUnoDatabaseContext = cUnoPrefix + "sdb.DatabaseContext" +Global const cUnoRowSet = cUnoPrefix + "sdb.RowSet" +Global const cUnoSmoketestTestExtension = cUnoPrefix + "comp.smoketest.TestExtension" +Global const cUnoSmoketestCommandEnvironment = cUnoPrefix + "deployment.test.SmoketestCommandEnvironment" +Global const cExtensionManager = cUnoPrefix + "deployment.ExtensionManager" + +'UserFieldNames +Global const cUserFieldTestWriter = "Writer", cUserFieldTestCalc = "Calc", cUserFieldTestImpress = "Impress" +Global const cUserFieldTestDraw = "Draw", cUserFieldTestMath = "Math", cUserFieldTestChart = "Chart" +Global const cUserFieldTestHTML = "HTML", cUserFieldTestJava = "Java", cUserFieldTestDatabase = "Database" +Global const cUserFieldTestExtension = "Extension" +Global const cUserFieldTestTerminateAfterTest = "Terminate", cUserFieldTestOpenSave8 = "SaveOpen8", cUserFieldTestMacros = "Macros" + +Global const cOptionsDialogName = "OptionsDlg", cTest10Modul = "Standard" + +Global const cDlgCancel = 1, cDlgOk = 0, cDlgStartTest = 2 + +global gErrorState (cMaxErrorStates, 5) as integer +Global gTestCaseAnnotations( cMaxErrorStates, 5 ) As String + +global gOutputDoc as Object +global gOutputDocNotUno as Object +global gOptionsDialog as Object + +Global bMakeWriterTest as boolean, bMakeCalcTest as boolean, bMakeImpressTest as boolean +Global bMakeDrawTest as Boolean, bMakeMathTest as boolean, bMakeChartTest as boolean +Global bMakeHTMLTest as boolean, bMakeJavaTest as boolean, bMakeDBTest as boolean +Global bMakeExtensionTest as boolean +Global bMakeTerminateAfterTest as boolean, bShowTable as boolean +Global bMakeSaveOpen8Test as boolean, bMakeMacrosTest as boolean + +global sExtensionURL as string + +Dim gDlgState as Integer + +Sub SetGlobalDoc + gOutputDoc = ThisComponent +end Sub + +Sub ClearStatus + for j% = 0 to cMaxErrorStates + for i% = 0 to 5 + gErrorState (j%, i%) = cLogUnknown + gTestCaseAnnotations( J%, i% ) = "" + next i% + next j% +end Sub + +Sub ClearAllText + call SetGlobalDoc + call ClearDoc (gOutputDoc) + call ClearStatus +end Sub + +Sub Main + On Local Error Goto MainError + + gCurrentDocTest = frmTestClosure + gCurrentTestCase = cLogfileFailed + + DeleteAllSavedFiles() + DeleteAllLogFiles() + SetupWorkPath() + + if GetSystem (sWorkPath) = "windows" then + sWorkPath = ConvertPathToWin (sWorkPath) + end if + + LocalTestLog% = OpenLogDat( GetLogFileName( gCurrentDocTest ) ) + + gCurrentTestCase = cTestClosureSetupDoc + + call SetGlobalDoc + + Dim bWasModified as Boolean + bWasModified = gOutputDoc.isModified() + + if bShowTable then + call ClearDoc (gOutputDoc) + end If + + call ClearStatus + + LogTestResult( GetTestGlueDescription( gCurrentTestCase ), TRUE ) + + Dim nPreserveFileHandle% + nPreserveFileHandle% = LocalTestLog% + Call Test_10er.Main + LocalTestLog% = nPreserveFileHandle% + + gCurrentDocTest = frmTestClosure + gCurrentTestCase = cTestClosureWriteStatus + if bShowTable then + call CreateStatusTable2 + call CreateStatusTable + call CreateDocState + LogTestResult( GetTestGlueDescription( gCurrentTestCase ), TRUE ) + ' do this LogTestResult call before CreateSecondState, since the latter accesses (and displays) the result + call CreateSecondState + gOutputDoc.CurrentController.ViewCursor.JumpToFirstPage + Else + LogTestResult( GetTestGlueDescription( gCurrentTestCase ), TRUE ) + End If + + ' print the 'test complete' marker + Print #LocalTestLog%, "---" + LocalTestLog% = 0 + + gOutputDoc.setModified( bWasModified ) + + Exit Sub + +MainError: + If ( gCurrentTestCase = cLogfileFailed ) then + LogTestResult( "", False ) + Exit Sub + else + LogTestResult( "testclosure " + GetTestGlueDescription( gCurrentTestCase ), FALSE ) + Close #LocalTestLog% + LocalTestLog = 0 + End If +End Sub + +Function GetTestGlueDescription( nTestCase as Integer ) + Select Case ( nTestCase ) + case cTestClosureSetupDoc + GetTestGlueDescription = "setup" + case cTestClosureWriteStatus + GetTestGlueDescription = "write_status" + case Else + GetTestGlueDescription = "" + End Select +End Function + +Sub CreateStatusTable + dim tableHeaders(7) as string + tableHeaders(cStWriter) = "Writer" + tableHeaders(cStCalc) = "Calc" + tableHeaders(cStPraesentation) = "Präsen- tation" + tableHeaders(cStZeichnen) = "Zeichn." + tableHeaders(cStChart) = "Diagr." + tableHeaders(cStMath) = "Math" + tableHeaders(cStHTML) = "HTML" + tableHeaders(cStJava) = "Java" + + dim tableRows(4) as string + tableRows(cDocNew) = "new" + tableRows(cDocSaveOpen8) = "V8.0" + tableRows(cDocClose) = "close" + tableRows(cDocMacros) = "macros" + + aDoc = gOutputDoc + + xText = aDoc.Text + xCursor = xText.createTextCursor() + + xCursor.gotoStart(FALSE) + xCursor.GoRight (4, False) + SetParagraphBreak (xCursor) + xCursor.GoRight (1, False) + SetParagraphBreak (xCursor) + xCursor.GoRight (1, False) + + table = aDoc.createInstance("com.sun.star.text.TextTable") + table.initialize(7,9) + table.Name = "StTab1" + table.BackColor = cCoGrey + xText.insertTextContent(xCursor, table, FALSE) + + for i% = 0 to 7 + tableCell = table.getCellByPosition( i% + 1, 0 ) + tableCell.String = tableHeaders( i% ) + next i% + + for i% = LBound( tableRows ) to UBound( tableRows ) + tableCell = table.getCellByPosition( 0, i% + 1 ) + tableCell.String=tableRows(i%) + next i% +end Sub + +Sub CreateStatusTable2 + dim tableHeaders(4) as string + tableHeaders(0) = "Database" + tableHeaders(1) = "" + tableHeaders(2) = "Extension" + tableHeaders(3) = "" + tableHeaders(4) = "Other" + + dim tableRows(5) as string + tableRows(cDBService ) = "services" + tableRows(cDBOpen ) = "open" + tableRows(cDBInsert ) = "insert" + tableRows(cDBDelete ) = "delete" + tableRows(cDBSeek ) = "seek" + tableRows(cDBClose ) = "close" + + dim tableRows2(2) as string + tableRows2(cEXTService ) = "services" + tableRows2(cEXTInstall ) = "install" + tableRows2(cEXTUninstall ) = "uninstall" + + dim tableRows3(1) as string + tableRows3(cTestClosureSetupDoc ) = "setup test" + tableRows3(cTestClosureWriteStatus ) = "write test result" + + aDoc = gOutputDoc + + xText = aDoc.Text + xCursor = xText.createTextCursor() + + xCursor.gotoStart(FALSE) + xCursor.GoRight (4, False) + SetParagraphBreak (xCursor) + SetParagraphBreak (xCursor) + xCursor.gotoEnd(FALSE) + + table = aDoc.createInstance("com.sun.star.text.TextTable") + table.initialize(7,6) + table.Name = "StTab2" + table.BackColor = cCoGrey + + xText.insertTextContent(xCursor, table, FALSE) + + for i% = LBound( tableHeaders ) to UBound( tableHeaders ) + tableCell = table.getCellByPosition( i% + 1, 0 ) + tableCell.String = tableHeaders(i%) + next i% + + for i% = LBound( tableRows ) to UBound( tableRows ) + tableCell = table.getCellByPosition( 0, i% + 1 ) + tableCell.String=tableRows(i%) + next i% + + for i% = LBound( tableRows2 ) to UBound( tableRows2 ) + tableCell = table.getCellByPosition( 2, i% + 1 ) + tableCell.String=tableRows2(i%) + next i% + + for i% = LBound( tableRows3 ) to UBound( tableRows3 ) + tableCell = table.getCellByPosition( 4, i% + 1 ) + tableCell.String=tableRows3(i%) + next i% +end Sub + + +Sub CreateDocState + aDoc = gOutputDoc + table = aDoc.TextTables.GetByIndex (1) + + for j% = 0 to 7 + for i% = 0 to 5 + sRangeName = GetRangeName(j%, i%+1) + + tableCursor = table.createCursorByCellName(sRangeName) + + cName = tableCursor.getRangeName() + xCell = table.getCellByName(cName) + + xCell.BackTransparent = False + + If gErrorState (j%, i%) = cLogTrue Then + xCell.BackColor = cCoGreen + else + If gErrorState (j%, i%) = cLogFalse Then + xCell.BackColor = cCoRed + If ( gTestCaseAnnotations( j%, i% ) <> "" ) Then + Dim annotation as Object + annotation = aDoc.createInstance( "com.sun.star.text.TextField.Annotation" ) + annotation.Author = "smoketest" + annotation.Content = gTestCaseAnnotations( j%, i% ) + xCell.insertTextContent( xCell, annotation, false ) + End If + else + xCell.BackColor = cCoGrey + end If + end If + next i% + next j% +end Sub + +Sub CreateSecondState + aDoc = gOutputDoc + table = aDoc.TextTables.GetByIndex (0) + + Dim stateIndex(2) as Integer + stateIndex(0) = cStDataBase + stateIndex(1) = cStExtension + stateIndex(2) = cStTestGlue + + Dim j as Integer + For j = LBound( stateIndex ) To UBound( stateIndex ) + for i% = 1 to 6 + tableCell = table.getCellByPosition( 2 * j + 1, i% ) + tableCell.BackTransparent = False + + if gErrorState( stateIndex(j), i% - 1 ) = cLogTrue then + tableCell.BackColor = cCoGreen + else + if gErrorState ( stateIndex(j), i% - 1 ) = cLogFalse then + tableCell.BackColor = cCoRed + If ( gTestCaseAnnotations( stateIndex(j), i% - 1 ) <> "" ) Then + Dim annotation as Object + annotation = aDoc.createInstance( "com.sun.star.text.TextField.Annotation" ) + annotation.Author = "smoketest" + annotation.Content = gTestCaseAnnotations( stateIndex(j), i% - 1 ) + tableCell.insertTextContent( tableCell, annotation, false ) + End If + else + tableCell.BackColor = cCoGrey + end If + end If + next i% + next j% +end Sub + +Function GetRangeName (nColumn as integer, nRow as integer) as string + GetRangeName = chr (nColumn+66) + Trim(Str(nRow+1)) +end Function + +Sub LogTestResult( sTestCaseDescription as String, bSuccess as Boolean ) + If ( gCurrentTestCase = cLogfileFailed ) Then + Dim sAnnotation as String + sAnnotation = "creating logfile '" + GetLogFileName( gCurrentDocTest ) + "' failed" + LogState( FALSE, sAnnotation, GlobalTestLog ) + RecordTestCaseStatus( 0, FALSE, sAnnotation ) + Else + bSuccess = RecordTestCaseStatus( gCurrentTestCase, bSuccess, sTestCaseDescription ) + If ( LocalTestLog <> 0 ) Then + LogState( bSuccess, sTestCaseDescription, LocalTestLog ) + EndIf + if ( GlobalTestLog <> 0 ) Then + LogState( bSuccess, sTestCaseDescription, GlobalTestLog ) + EndIf + End If +End Sub + +Function RecordTestCaseStatus( nAction as Integer, bState as Boolean, sFailureAnnotation as String ) as Boolean + Dim nStatusType as Integer + Dim nState as integer + nStatusType = GetStatusType( gCurrentDocTest ) + If nStatusType = cStNone then Exit Function + + If ( gErrorState( nStatusType, nAction ) = cLogFalse ) Then + ' don't overwrite a previous "failed" state for this test + bState = FALSE + End If + + if bState then + nState = cLogTrue + else + nState = cLogFalse + end If + + gErrorState (nStatusType, nAction) = nState + + If ( nState = cLogFalse ) And ( sFailureAnnotation <> "" ) Then + if gTestCaseAnnotations(nStatusType, nAction) <> "" then + gTestCaseAnnotations(nStatusType, nAction) = _ + gTestCaseAnnotations(nStatusType, nAction) & "; " + end if + gTestCaseAnnotations( nStatusType, nAction ) = gTestCaseAnnotations( nStatusType, nAction ) + sFailureAnnotation + End If + + RecordTestCaseStatus = bState +End Function + +Function GetStatusType (nDocType as Integer) as Integer + Select Case ( nDocType ) + case frmWriter + GetStatusType = cStWriter ' text document + case frmCalc + GetStatusType = cStCalc ' spreadsheet document + case frmImpress + GetStatusType = cStPraesentation ' presentation + case frmDraw + GetStatusType = cStZeichnen ' drawing + case frmMath + GetStatusType = cStMath ' formula + case frmHyperText + GetStatusType = cStHTML ' HTML document + case frmChart + GetStatusType = cStChart ' chart + case frmJava + GetStatusType = cStJava 'Java + case frmTestClosure + GetStatusType = cStTestGlue ' test framework + case frmDataBase + GetStatusType = cStDataBase 'DataBase + case frmExtension + GetStatusType = cStExtension 'Extension + case else + GetStatusType = cStNone + end Select +end Function + +Sub SetParagraphBreak (aCursor as Object) + aCursor.Text.InsertControlCharacter (aCursor, cParagraphBreak, True) +end Sub + +Sub ClearDoc (aDoc as Object) + Dim aText as Object + Dim i% + for i%=1 to aDoc.TextTables.count + aDoc.TextTables.GetByIndex(0).dispose + next + + aText = aDoc.Text.CreateTextCursor + aText.GotoStart (False) + aText.GoRight (3, False) + SetParagraphBreak (aText) + aText.GotoEnd (True) + aText.String="" +end Sub + +Sub ClearDocFull (aDoc as Object) + Dim aText as Object + Dim i% + for i%=1 to aDoc.TextTables.count + aDoc.TextTables.GetByIndex(0).dispose + next + + aText = aDoc.Text.CreateTextCursor + aText.GotoStart (False) + aText.GotoEnd (True) + aText.String="" +end Sub + +Sub SetGlobalOptionsDialog () + + Dim oLibContainer As Object, oLib As Object + Dim oInputStreamProvider As Object + Dim oDialog As Object + + Const sLibName = cTest10Modul + Const sDialogName = cOptionsDialogName + + REM get library and input stream provider + oLibContainer = DialogLibraries + + REM load the library + oLibContainer.loadLibrary( sLibName ) + + oLib = oLibContainer.getByName( sLibName ) + oInputStreamProvider = oLib.getByName( sDialogName ) + + REM create dialog control + gOptionsDialog = CreateUnoDialog( oInputStreamProvider ) + +end Sub + +Sub ShowOptionsDlg + + call SetGlobalDoc + call SetGlobalOptionsDialog + call GetOptions + + REM show the dialog + gOptionsDialog.execute() + + ' now the dialog will run until a button is pressed + + Select Case (gDlgState) + case cDlgOk + call SetOptions () + case cDlgStartTest + call SetOptions () + call StartTestByOptions () + end Select + + gOptionsDialog.dispose() + +end Sub + +Sub SetOptions + call SetGlobalDoc + SetUserFieldState (cUserFieldTestWriter, -(gOptionsDialog.getControl("cbWriterTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestCalc, -(gOptionsDialog.getControl("cbCalcTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestImpress, -(gOptionsDialog.getControl("cbImpressTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestDraw, -(gOptionsDialog.getControl("cbDrawTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestHTML, -(gOptionsDialog.getControl("cbHTMLTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestMath, -(gOptionsDialog.getControl("cbMathTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestChart, -(gOptionsDialog.getControl("cbChartTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestJava, -(gOptionsDialog.getControl("cbJavaTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestDatabase, -(gOptionsDialog.getControl("cbDatabaseTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestExtension, -(gOptionsDialog.getControl("cbExtensionTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestOpenSave8, -(gOptionsDialog.getControl("cbSaveOpen8Test").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestMacros, -(gOptionsDialog.getControl("cbMacrosTest").getState), gOutputDoc) + SetUserFieldState (cUserFieldTestTerminateAfterTest, -(gOptionsDialog.getControl("cbTerminateAfterTest").getState), gOutputDoc) +end Sub + +Sub GetOptions + call SetGlobalDoc + gOptionsDialog.getControl("cbWriterTest").setState( -( GetUserFieldState (cUserFieldTestWriter, gOutputDoc))) + gOptionsDialog.getControl("cbCalcTest").setState ( -( GetUserFieldState (cUserFieldTestCalc, gOutputDoc))) + gOptionsDialog.getControl("cbImpressTest").setState( -( GetUserFieldState (cUserFieldTestImpress, gOutputDoc))) + gOptionsDialog.getControl("cbDrawTest").setState( -( GetUserFieldState (cUserFieldTestDraw, gOutputDoc))) + gOptionsDialog.getControl("cbHTMLTest").setState( -( GetUserFieldState (cUserFieldTestHTML, gOutputDoc))) + gOptionsDialog.getControl("cbMathTest").setState( -( GetUserFieldState (cUserFieldTestMath, gOutputDoc))) + gOptionsDialog.getControl("cbChartTest").setState( -( GetUserFieldState (cUserFieldTestChart, gOutputDoc))) + gOptionsDialog.getControl("cbJavaTest").setState( -( GetUserFieldState (cUserFieldTestJava, gOutputDoc))) + gOptionsDialog.getControl("cbDatabaseTest").setState( -( GetUserFieldState (cUserFieldTestDatabase, gOutputDoc))) + gOptionsDialog.getControl("cbExtensionTest").setState( -( GetUserFieldState (cUserFieldTestExtension, gOutputDoc))) + gOptionsDialog.getControl("cbSaveOpen8Test").setState( -( GetUserFieldState (cUserFieldTestOpenSave8, gOutputDoc))) + gOptionsDialog.getControl("cbMacrosTest").setState( -( GetUserFieldState (cUserFieldTestMacros, gOutputDoc))) + gOptionsDialog.getControl("cbTerminateAfterTest").setState( -( GetUserFieldState (cUserFieldTestTerminateAfterTest, gOutputDoc))) +End Sub + +Sub ReadOptions + call SetGlobalDoc + bMakeWriterTest = GetUserFieldState (cUserFieldTestWriter, gOutputDoc) + bMakeCalcTest = GetUserFieldState (cUserFieldTestCalc, gOutputDoc) + bMakeImpressTest = GetUserFieldState (cUserFieldTestImpress, gOutputDoc) + bMakeDrawTest = GetUserFieldState (cUserFieldTestDraw, gOutputDoc) + bMakeHTMLTest = GetUserFieldState (cUserFieldTestHTML, gOutputDoc) + bMakeMathTest = GetUserFieldState (cUserFieldTestMath, gOutputDoc) + bMakeChartTest = GetUserFieldState (cUserFieldTestChart, gOutputDoc) + bMakeJavaTest = GetUserFieldState (cUserFieldTestJava, gOutputDoc) + bMakeDBTest = GetUserFieldState (cUserFieldTestDatabase, gOutputDoc) + bMakeExtensionTest = GetUserFieldState (cUserFieldTestExtension, gOutputDoc) + bMakeSaveOpen8Test = GetUserFieldState (cUserFieldTestOpenSave8, gOutputDoc) + bMakeMacrosTest = GetUserFieldState (cUserFieldTestMacros, gOutputDoc) + bMakeTerminateAfterTest = GetUserFieldState (cUserFieldTestTerminateAfterTest, gOutputDoc) +end Sub + +Sub SetDefaultOptions + bMakeWriterTest = true + bMakeCalcTest = true + bMakeImpressTest = true + bMakeDrawTest = true + bMakeHTMLTest = true + bMakeMathTest = true + bMakeChartTest = true + if Environ("ENABLE_JAVA") = "" then + bMakeJavaTest = false + bMakeDBTest = false + bMakeExtensionTest = false + else + bMakeJavaTest = true + bMakeDBTest = true + bMakeExtensionTest = true + End If + bMakeSaveOpen8Test = true + bMakeMacrosTest = true + bMakeTerminateAfterTest = false +end Sub + +Sub StartTestByOptions + bShowTable = true + call ReadOptions + call Main + if bMakeTerminateAfterTest then + ClearDocFull (gOutputDoc) + gOutputDoc.dispose + 'StarDesktop.Terminate + + 'EnableReschedule( false ) + 'DispatchSlot( 5300 ) + stop + End If +end Sub + +Function StartTestWithDefaultOptions + bShowTable = false + call SetDefaultOptions + call Main + dim component(cMaxErrorStates) as string + component(cStWriter) = "Writer" + component(cStCalc) = "Calc" + component(cStPraesentation) = "Impress" + component(cStZeichnen) = "Draw" + component(cStChart) = "Chart" + component(cStMath) = "Math" + component(cStHTML) = "HTML" + component(cStJava) = "Java" + component(cStDataBase) = "Base" + component(cStExtension) = "Extensions" + dim action(4) as string + action(cDocNew) = "new" + action(cDocSaveOpen8) = "V8.0" + action(cDocClose) = "close" + action(cDocMacros) = "macros" + dim baseAction(5) as string + baseAction(cDBService) = "services" + baseAction(cDBOpen) = "open" + baseAction(cDBInsert) = "insert" + baseAction(cDBDelete) = "delete" + baseAction(cDBSeek) = "seek" + baseAction(cDBClose) = "close" + dim extAction(2) as string + extAction(cEXTService) = "services" + extAction(cEXTInstall) = "install" + extAction(cEXTUninstall) = "uninstall" + dim result as string + for i = 0 to cMaxErrorStates + for j = 0 to 5 + if gErrorState(i, j) = cLogFalse then + result = result & " " & component(i) & ":" + if i = cStDataBase then + result = result & baseAction(j) + else if i = cStExtension then + result = result & extAction(j) + else + result = result & action(j) + end if + end if + if gTestCaseAnnotations(i, j) <> "" then + result = result & "(" & _ + gTestCaseAnnotations(i, j) & ")" + end if + end if + next j + next i + StartTestWithDefaultOptions = result +end Function + +Sub DispatchSlot(SlotID as Integer) + Dim oArg() as new com.sun.star.beans.PropertyValue + Dim oUrl as new com.sun.star.util.URL + Dim oTrans as Object + Dim oDisp as Object + + oTrans = createUNOService("com.sun.star.util.URLTransformer") + oUrl.Complete = "slot:" & CStr(SlotID) + oTrans.parsestrict(oUrl) + + oDisp = StarDesktop.queryDispatch(oUrl, "_self", 0) + oDisp.dispatch(oUrl, oArg()) +End Sub + +Sub LoadLibrary( LibName As String ) + + dim args(1) + dim arg as new com.sun.star.beans.PropertyValue + arg.Name = "LibraryName" + arg.Value = LibName + args(0) = arg + + dim url as new com.sun.star.util.URL + dim trans as object + trans = createUnoService("com.sun.star.util.URLTransformer" ) + url.Complete = "slot:6517" + trans.parsestrict( url ) + + dim disp as object + disp = StarDesktop.currentFrame.queryDispatch( url, "", 0 ) + disp.dispatch( url, args() ) + +End Sub + +Sub ExecuteSlot( SlotNr As String, oDoc as Object ) + dim args() + dim url as new com.sun.star.util.URL + dim trans as object + dim disp as object + + trans = createUnoService("com.sun.star.util.URLTransformer" ) + url.Complete = "slot:" + SlotNr + trans.parsestrict( url ) + + disp = oDoc.CurrentController.Frame.queryDispatch( url, "", 0 ) + disp.dispatch( url, args() ) + +End Sub + +Sub DelAllUserFields (aDoc as Object) + Dim aFieldType as Object + Dim aElements as Variant + Dim i% + Dim aFieldMasters, aFieldMaster as Object + Dim sElement$ + aFieldMasters = aDoc.TextFieldMasters + aElements = aFieldMasters.ElementNames + for i = 0 to UBound(aElements) + sElement$ = aElements(i) + if 0 <> instr(sElement$, cUnoUserField ) then + aFieldMaster = aFieldMasters.GetByName(sElement$) + aFieldMaster.Dispose + endif + next +end Sub + +Function GetUserFieldState (sName as String, aDoc as Object) as boolean + Dim sFieldText as String + Dim bState as boolean + sFieldText = ReadUserField (sName, aDoc) + + if LCase(sFieldText) = cYes then + bState = true + else + bState = false + end IF + + GetUserFieldState = bState +end Function + +Sub SetUserFieldState (sName as String, nState as boolean, aDoc as Object) + Dim sFieldText as String + + sFieldText = cNo 'default + + Select case nState + case true + sFieldText = cYes + case false + sFieldText = cNo + end Select + + WriteUserField (sFieldText, sName, aDoc) +end Sub + +Function ReadUserField(sFieldName as String, aDoc as Object) as String + Dim aMasters as Object + aMasters = aDoc.TextFieldMasters + if aMasters.HasByName (cUnoUserField+cUnoSeparator+sFieldName) then + ReadUserField = aMasters.GetByName (cUnoUserField+cUnoSeparator+sFieldName).Content + else + ReadUserField = "" + end If +End Function + +Sub WriteUserField(sValue as String, sFieldName as String, aDoc as Object, optional aCursor as Object) + Dim aMasters, aUserField, aTxtCursor as Object + aMasters = aDoc.TextFieldMasters + if aMasters.HasByName (cUnoUserField+cUnoSeparator+sFieldName) then + aUserField = aMasters.GetByName (cUnoUserField+cUnoSeparator+sFieldName) + else + aUserField = aDoc.CreateInstance (cUnoUserField) + aUserField.Name = sFieldName + end if + aUserField.Content = sValue +End Sub + +Sub WriteExtUserField(nIndex as Integer, aCursor as Object, aDoc as Object) + Dim aUserField as Object + aUserField = aDoc.CreateInstance (cUnoExtUserField) + aUserField.UserDataType = nIndex + aCursor.Text.InsertTextContent (aCursor, aUserField, True) + aUserField.Fix = True +End Sub + diff --git a/smoketest/data/Basic/Standard/Test_10er.xml b/smoketest/data/Basic/Standard/Test_10er.xml new file mode 100644 index 000000000..67e5e40c1 --- /dev/null +++ b/smoketest/data/Basic/Standard/Test_10er.xml @@ -0,0 +1,671 @@ + + + +REM 10er Test + +const sSWLogFileName = "swlog.dat", sSCLogFileName = "sclog.dat" +const sSDLogFileName = "sdlog.dat", sSMathLogFileName = "smalog.dat" +const sSChartLogFileName = "schlog.dat" +const sSHptLogFileName = "shptlog.dat" +const sSDrawLogFileName = "sdrwlog.dat", sJavaLogFileName = "javalog.dat" +const sSDBLogFileName = "dblog.dat", sExtLogFileName = "extlog.dat" +const sTestGlueLogFileName = "testclosure.log" +const sLogFileName = "smoketest.log" +const cTempFileName = "smoketest_file" + +const cMessageSaveOpen8Doc = "Save/Open open Documents (8.0)" +const cMessageNewDoc = "New Document" +const cMessageCloseDoc = "Close Document" +const cMessageRunMacros = "Run Macros" + +Global sWorkPath$ +Global sWorkPathURL$ +Global LocalTestLog% +Global GlobalTestLog% + +Sub Main + call TestAllDocs() +end Sub + +Sub DeleteAllSavedFiles() + Dim sFileName as String + sFileName = sWorkPath+cTempFileName+"."+GetDocEndings(frmWriter) + If FileExists (sFileName) then + Kill (sFileName) + End If + sFileName = sWorkPath+cTempFileName+"."+GetDocEndings(frmCalc) + If FileExists (sFileName) then + Kill (sFileName) + End If + sFileName = sWorkPath+cTempFileName+"."+GetDocEndings(frmImpress) + If FileExists (sFileName) then + Kill (sFileName) + End If + sFileName = sWorkPath+cTempFileName+"."+GetDocEndings(frmDraw) + If FileExists (sFileName) then + Kill (sFileName) + End If + sFileName = sWorkPath+cTempFileName+"."+GetDocEndings(frmHyperText) + If FileExists (sFileName) then + Kill (sFileName) + End If +End Sub + +Sub DeleteAllLogFiles() + If FileExists (sWorkPath+sLogFileName) then + Kill (sWorkPath+sLogFileName) + End If + If FileExists (sWorkPath+sSWLogFileName) then + Kill (sWorkPath+sSWLogFileName) + End If + If FileExists (sWorkPath+sSCLogFileName) then + Kill (sWorkPath+sSCLogFileName) + End If + If FileExists (sWorkPath+sSDLogFileName) then + Kill (sWorkPath+sSDLogFileName) + End If + If FileExists (sWorkPath+sSMathLogFileName) then + Kill (sWorkPath+sSMathLogFileName) + End If + If FileExists (sWorkPath+sSChartLogFileName) then + Kill (sWorkPath+sSChartLogFileName) + End If + If FileExists (sWorkPath+sSHptLogFileName) then + Kill (sWorkPath+sSHptLogFileName) + End If + If FileExists (sWorkPath+sSDrawLogFileName) then + Kill (sWorkPath+sSDrawLogFileName) + End If + If FileExists (sWorkPath+sJavaLogFileName) then + Kill (sWorkPath+sJavaLogFileName) + End If + If FileExists (sWorkPath+sTestGlueLogFileName) then + Kill (sWorkPath+sTestGlueLogFileName) + End If + If FileExists (sWorkPath+sSDBLogFileName) then + Kill (sWorkPath+sSDBLogFileName) + End If + If FileExists (sWorkPath+sExtLogFileName) then + Kill (sWorkPath+sExtLogFileName) + End If +end Sub + +Function OpenLogDat (sFileName as String) as Integer + Dim LocaleFileChannel% + If FileExists (sWorkPath+sFileName) then + Kill (sWorkPath+sFileName) + End If + LocaleFileChannel% = Freefile + Open sWorkPath+sFileName For Output As LocaleFileChannel% + OpenLogDat = LocaleFileChannel% +end Function + +Sub SetupWorkPath + Dim configManager as Object + configManager = CreateUnoService( "com.sun.star.config.SpecialConfigManager" ) + + sWorkPath = configManager.SubstituteVariables( "$(userpath)/temp/" ) + sWorkPathURL = configManager.SubstituteVariables( "$(userurl)/temp/" ) +End Sub + +Function GetSystem (sTmpWorkPath as string) as string + GetSystem = "" + if InStr (sTmpWorkPath, ":") then + GetSystem = "windows" + else + GetSystem = "unix" + End If +end Function + +Function ConvertPathToWin (sTmpWorkPath as string) as string + for i%=1 to Len(sTmpWorkPath) + sTemp = Mid (sTmpWorkPath, i%, 1) + if sTemp = "/" then + sTmpWorkPath = Left (sTmpWorkPath, i%-1) + "\" + Right (sTmpWorkPath, Len(sTmpWorkPath)-i%) + else + if sTemp = "|" then + sTmpWorkPath = Left (sTmpWorkPath, i%-1) + ":" + Right (sTmpWorkPath, Len(sTmpWorkPath)-i%) + end If + end If + next i% + ConvertPathToWin = sTmpWorkPath +end Function + +Sub TestAllDocs() +DIM sDocURL as String, sDocPath as String +DIM nStrPos as Long + + 'search ExtensionURL + sDocURL = gOutputDoc.URL + CompatibilityMode(true) + nStrPos = InStrRev (sDocURL, "/" ) + CompatibilityMode(false) + sExtensionURL = Left (sDocURL, nStrPos) + "../Extension/" + cExtensionFileName + + GlobalTestLog = OpenLogDat (sLogFileName) + call WriteTestSequence + + ' Do extension test first to avoid OOM with ASAN + if bMakeExtensionTest then + gCurrentDocTest = frmExtension + call Test_Ext.TestExtensions + end if + + if bMakeWriterTest then + gCurrentDocTest = frmWriter + call MakeDocTest + end if + if bMakeCalcTest then + gCurrentDocTest = frmCalc + call MakeDocTest + end if + if bMakeImpressTest then + gCurrentDocTest = frmImpress + call MakeDocTest + end if + if bMakeDrawTest then + gCurrentDocTest = frmDraw + call MakeDocTest + end if + if bMakeHTMLTest then + gCurrentDocTest = frmHyperText + call MakeDocTest + end if + if bMakeChartTest then + gCurrentDocTest = frmChart + call MakeChartTest + end if + if bMakeMathTest then + gCurrentDocTest = frmMath + call MakeNewDoc + end if + if bMakeJavaTest then + gCurrentDocTest = frmJava + call TestJava + end if + if bMakeDBTest then + gCurrentDocTest = frmDataBase + call Test_DB.TestDB + end if + + Close #GlobalTestLog + GlobalTestLog = 0 +end Sub + +Sub WriteTestSequence + Print #GlobalTestLog, "Sequence of testing" + + if bMakeExtensionTest then + WriteExtensionTests ("Extension : ", GlobalTestLog) + if bMakeWriterTest then + WriteTests ("writer : ", true, GlobalTestLog) + end if + if bMakeCalcTest then + WriteTests ("calc : ", true, GlobalTestLog) + end if + if bMakeImpressTest then + WriteTests ("impress : ", true, GlobalTestLog) + end if + if bMakeDrawTest then + WriteTests ("draw : ", true, GlobalTestLog) + end if + if bMakeHTMLTest then + WriteTests ("HTML : ", true, GlobalTestLog) + end if + if bMakeChartTest then + WriteTests ("chart : ", false, GlobalTestLog) + end if + if bMakeMathTest then + WriteTests ("math : ", false, GlobalTestLog) + end if + if bMakeJavaTest then + WriteTests ("Java : ", false, GlobalTestLog) + end if + if bMakeDBTest then + WriteDBTests ("Database : ", GlobalTestLog) + end if + end if + + Print #GlobalTestLog, "testclosure : setup, write_status" + + Print #GlobalTestLog + end Sub + + Sub WriteTests (sText as string, bTestAll as boolean) + Dim sWriteStr as string + + sWriteStr = sText + sWriteStr = sWriteStr + "new" + if bTestAll then + if bMakeSaveOpen8Test then + sWriteStr = sWriteStr + ", save 8.0" + end if + if bMakeSaveOpen8Test then + sWriteStr = sWriteStr + ", open 8.0" + end if + if bMakeMacrosTest then + sWriteStr = sWriteStr + ", run macros" + end if + end if + + sWriteStr = sWriteStr + ", close" + + Print #GlobalTestLog, sWriteStr +end Sub + +Sub WriteDBTests (sText as string, nFileChannel as integer) + Dim sWriteStr as string + + sWriteStr = sText + sWriteStr = sWriteStr + "open / services" + sWriteStr = sWriteStr + ", insert" + sWriteStr = sWriteStr + ", delete" + sWriteStr = sWriteStr + ", seek" + sWriteStr = sWriteStr + ", close" + + Print #nFileChannel, sWriteStr +end Sub + +Sub WriteExtensionTests (sText as string, nFileChannel as integer) + Dim sWriteStr as string + + sWriteStr = sText + sWriteStr = sWriteStr + "services" + sWriteStr = sWriteStr + ", install" + sWriteStr = sWriteStr + ", uninstall" + + Print #nFileChannel, sWriteStr +end Sub + +Sub MakeDocTest + Dim oDoc as Object + Dim sFileNameXML$, sFileName8$ + Dim bSuccess as Boolean + + On Local Error GoTo DOCTESTERROR + gCurrentTestCase = cLogfileFailed + LocalTestLog% = OpenLogDat (GetLogFileName(gCurrentDocTest)) + gCurrentTestCase = cDocNew + oDoc = LoadDoc ("private:factory/" + GetDocFilter(gCurrentDocTest or cFltNewDoc)) + LogTestResult( GetDocFilter(gCurrentDocTest or cFltNewDoc)+" "+ cMessageNewDoc, not IsNull (oDoc) ) + if not IsNull (oDoc) then + gCurrentTestCase = cDocSaveOpen8 + if bMakeSaveOpen8Test and IsFilterAvailable (gCurrentDocTest or cFlt8) then + sFileName8 = sWorkPathURL+cTempFileName+"."+GetDocEndings(gCurrentDocTest or cFlt8) + SaveDoc (sFileName8, oDoc, GetDocFilter(gCurrentDocTest or cFlt8)) + end if + gCurrentTestCase = cDocClose + bSuccess = CloseDoc( oDoc ) + LogTestResult( GetDocFilter(gCurrentDocTest)+" "+ cMessageCloseDoc, bSuccess ) + gCurrentTestCase = cDocSaveOpen8 + if bMakeSaveOpen8Test and IsFilterAvailable (gCurrentDocTest or cFlt8) then + oDoc = LoadDoc (sFileName8) + +' oDoc = Documents.open(sFileName) + LogTestResult( GetDocFilter(gCurrentDocTest or cFltNewDoc)+" "+ cMessageSaveOpen8Doc, not IsNull (oDoc) ) + + if not IsNull (oDoc) then + gCurrentTestCase = cDocClose + oDoc.close (true) + end If + end if + + gCurrentTestCase = cDocMacros + ' Just one calc macro test for now + ' To-Do split this into its own per-module/test .xml and add more + if bMakeMacrosTest and gCurrentDocTest = frmCalc then + oDoc = LoadDoc ("private:factory/" + GetDocFilter(gCurrentDocTest or cFltNewDoc)) + oDocCtrl = oDoc.getCurrentController() + oDocFrame = oDocCtrl.getFrame() + oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper") + + dim args(0) as new com.sun.star.beans.PropertyValue + + args(0).Name = "ToPoint" + args(0).Value = "$A$1" + oDispatcher.executeDispatch(oDocFrame, ".uno:GoToCell", "", 0, args()) + args(0).Name = "By" + args(0).Value = 5 + oDispatcher.executeDispatch(oDocFrame, ".uno:GoRightSel", "", 0, args()) + args(0).Name = "By" + args(0).Value = 5 + oDispatcher.executeDispatch(oDocFrame, ".uno:GoDownSel", "", 0, args()) + + oRangeAddr = oDoc.getCurrentSelection().getRangeAddress() + + bResult = oRangeAddr.StartColumn = 0 and oRangeAddr.EndColumn = 5 and oRangeAddr.StartRow = 0 and oRangeAddr.EndRow = 5 + + LogTestResult( GetDocFilter(gCurrentDocTest or cFltNewDoc)+" "+ cMessageRunMacros, bResult ) + + if not IsNull (oDoc) then + gCurrentTestCase = cDocClose + oDoc.close (true) + end If + end if + + end If + Print #LocalTestLog, "---" + Close #LocalTestLog% + LocalTestLog = 0 + Exit Sub ' Without error + + DOCTESTERROR: + If ( gCurrentTestCase = cLogfileFailed ) then + LogTestResult( " ", False ) + Exit Sub + else + LogTestResult( GetDocFilter(gCurrentDocTest or cFltNewDoc)+" "+ GetErrorMessage(gCurrentTestCase), False ) + Close #LocalTestLog% + LocalTestLog = 0 + End If + Exit Sub ' With error +End Sub + +Sub MakeNewDoc + DIM oDoc as Object + Dim bSuccess as Boolean + On Local Error GoTo DOCTESTERROR2 + gCurrentTestCase = cLogfileFailed + LocalTestLog% = OpenLogDat (GetLogFileName(gCurrentDocTest)) + gCurrentTestCase = cDocNew +' oDoc = Documents.Add(GetDocFilter(gCurrentDocTest)) + oDoc = LoadDoc ("private:factory/" + GetDocFilter(gCurrentDocTest or cFltNewDoc)) + LogTestResult( GetDocFilter(gCurrentDocTest or cFltNewDoc)+" "+ cMessageNewDoc, not IsNull (oDoc) ) + if not IsNull (oDoc) then + gCurrentTestCase = cDocClose + bSuccess = CloseDoc( oDoc ) + LogTestResult( GetDocFilter(gCurrentDocTest)+" "+ cMessageCloseDoc, bSuccess ) + end If + Print #LocalTestLog, "---" + Close #LocalTestLog% + LocalTestLog = 0 + Exit Sub ' Without error + + DOCTESTERROR2: + If ( gCurrentTestCase = cLogfileFailed ) then + LogTestResult( " ", False ) + Exit Sub + else + LogTestResult( GetDocFilter(gCurrentDocTest or cFltNewDoc)+" "+ GetErrorMessage(gCurrentTestCase), False ) + Close #LocalTestLog% + LocalTestLog = 0 + End If + Exit Sub ' With error +End Sub + +Sub MakeChartTest + Dim oCharts as Object + Dim oDoc as Object + Dim oRange(0) as New com.sun.star.table.CellRangeAddress + Dim oRect as New com.sun.star.awt.Rectangle + const cChartName="TestChart" + Dim bSuccess as Boolean + On Local Error GoTo CHARTTESTERROR + gCurrentTestCase = cLogfileFailed + LocalTestLog% = OpenLogDat (GetLogFileName(gCurrentDocTest)) + gCurrentTestCase = cDocNew + oDoc = LoadDoc ("private:factory/" + GetDocFilter(frmCalc or cFltNewDoc)) + if not IsNull (oDoc) then + oCharts = oDoc.sheets(0).Charts + oCharts.AddNewByName (cChartName, oRect, oRange(), true, true) + bSuccess=oCharts.HasByName(cChartName) + LogTestResult( GetDocFilter(gCurrentDocTest or cFltNewDoc)+" "+ cMessageNewDoc, bSuccess ) + gCurrentTestCase = cDocClose + oDoc.close (true) + else + LogTestResult( GetDocFilter(frmCalc or cFltNewDoc)+" "+ cMessageNewDoc, FALSE ) + End if + Print #LocalTestLog, "---" + Close #LocalTestLog% + LocalTestLog = 0 + Exit Sub ' Without error + + CHARTTESTERROR: + If ( gCurrentTestCase = cLogfileFailed ) then + LogTestResult( " ", False ) + Exit Sub + else + LogTestResult( GetDocFilter(gCurrentDocTest or cFltNewDoc)+" "+ GetErrorMessage(gCurrentTestCase), FALSE ) + Close #LocalTestLog% + LocalTestLog = 0 + End If + Exit Sub ' With error +End Sub + +Sub LogState (bState as Boolean, sText as String, nLocaleFileChannel as integer) + if bState then + Print #nLocaleFileChannel, sText+" -> ok" + else + Print #nLocaleFileChannel, sText+" -> error" + end If +end Sub + +Function GetDocEndings (DocType as Integer) as String + Select Case ( DocType ) + case frmWriter or cFlt8 + GetDocEndings = "odt" ' Textdokument + case frmCalc or cFlt8 + GetDocEndings = "ods" 'Tabellendokument + case frmImpress or cFlt8 + GetDocEndings = "odp" 'PrÕsentation + case frmDraw or cFlt8 + GetDocEndings = "odg" 'Zeichen + case frmHyperText, frmHyperText or cFltXML + GetDocEndings = "html" 'Hypertext-Dokument + case frmWriter or cFltXML + GetDocEndings = "sxw" ' Textdokument + case frmCalc or cFltXML + GetDocEndings = "sxc" 'Tabellendokument + case frmImpress or cFltXML + GetDocEndings = "sxi" 'PrÕsentation + case frmDraw or cFltXML + GetDocEndings = "sxd" 'Zeichen + case else + GetDocEndings = "" + end Select +end Function + +Function GetDocFilter (DocType as Integer) as String + Select Case ( DocType ) + case frmWriter or cFlt8 + GetDocFilter = "writer8" ' text document + case frmCalc or cFlt8 + GetDocFilter = "calc8" ' spreadsheet document + case frmImpress or cFlt8 + GetDocFilter = "impress8" ' presentation + case frmDraw or cFlt8 + GetDocFilter = "draw8" ' drawing + case frmMath or cFlt8 + GetDocFilter = "math8" ' formula + + case frmWriter or cFltXML + GetDocFilter = "StarOffice XML (Writer)" ' text document + case frmCalc or cFltXML + GetDocFilter = "StarOffice XML (Calc)" ' spreadsheet document + case frmImpress or cFltXML + GetDocFilter = "StarOffice XML (Impress)" ' presentation + case frmDraw or cFltXML + GetDocFilter = "StarOffice XML (Draw)" ' drawing + case frmMath or cFltXML + GetDocFilter = "StarOffice XML (Math)" ' formula + + case frmHyperText, frmHyperText or cFltXML + GetDocFilter = "HTML" ' HTML document + + case frmWriter or cFltNewDoc + GetDocFilter = "swriter" ' text document + case frmCalc or cFltNewDoc + GetDocFilter = "scalc" ' spreadsheet document + case frmImpress or cFltNewDoc + GetDocFilter = "simpress" ' presentation + case frmDraw or cFltNewDoc + GetDocFilter = "sdraw" ' drawing + case frmMath or cFltNewDoc + GetDocFilter = "smath" ' formula + case frmHyperText or cFltNewDoc + GetDocFilter = "swriter/web" ' HTML document + case frmChart or cFltNewDoc + GetDocFilter = "schart" ' chart + case else + GetDocFilter = "" + end Select +end Function + +Function GetLogFileName (DocType as Integer) as String + Select Case ( DocType ) + case frmWriter + GetLogFileName = sSWLogFileName ' text document + case frmCalc + GetLogFileName = sSCLogFileName ' spreadsheet document + case frmImpress + GetLogFileName = sSDLogFileName ' presentation + case frmDraw + GetLogFileName = sSDrawLogFileName ' drawing + case frmMath + GetLogFileName = sSMathLogFileName ' formula + case frmHyperText + GetLogFileName = sSHptLogFileName ' HTML document + case frmChart + GetLogFileName = sSChartLogFileName ' chart + case frmJava + GetLogFileName = sJavaLogFileName 'Java + case frmTestClosure + GetLogFileName = sTestGlueLogFileName ' test framework + case frmDataBase + GetLogFileName = sSDBLogFileName 'Database + case frmExtension + GetLogFileName = sExtLogFileName 'Extension + case else + GetLogFileName = "" + end Select +end Function + +Function GetErrorMessageOnAction (nAction as Integer) as String + Select Case ( nAction ) + case cDocNew + GetErrorMessageOnAction = cMessageNewDoc + case cDocSaveOpen8 + GetErrorMessageOnAction = cMessageSaveOpen8Doc + case cDocMacros + GetErrorMessageOnAction = cMessageRunMacros + case cDocClose + GetErrorMessageOnAction = cMessageCloseDoc + case else + GetErrorMessageOnAction = "" + end Select +end Function + +Function IsFilterAvailable (FilterType as Integer) as boolean + IsFilterAvailable = true + if (FilterType = (frmHyperText or cFltXML)) then + IsFilterAvailable = false + end if +End Function + +Function TestJava + Dim oObj as Object + gCurrentTestCase = cLogfileFailed + LocalTestLog% = OpenLogDat (GetLogFileName(gCurrentDocTest)) + gCurrentTestCase = cDocNew + oObj = createUnoService( cUnoJavaLoader ) + LogTestResult( "Java "+ cMessageNewDoc, not IsNull (oObj) ) + + Print #LocalTestLog, "---" + Close #LocalTestLog% + LocalTestLog = 0 + + TestJava = not IsNull (oObj) +End Function + +Sub LoadLibrary( LibName as String ) + + dim args(1) + dim arg as new com.sun.star.beans.PropertyValue + arg.Name = "LibraryName" + arg.Value = LibName + args(0) = arg + + dim url as new com.sun.star.util.URL + dim trans as object + trans = createUnoService("com.sun.star.util.URLTransformer" ) + url.Complete = "slot:6517" + trans.parsestrict( url ) + + dim disp as object + disp = StarDesktop.currentFrame.queryDispatch( url, "", 0 ) + disp.dispatch( url, args() ) + +End Sub + +Sub LoadDoc (DocName as String) as Object + dim trans as object + trans = createUnoService("com.sun.star.util.URLTransformer" ) + url = createUnoStruct("com.sun.star.util.URL" ) + url.Complete = DocName + if Left(DocName, 5 ) <> "file:" then + trans.parsestrict( url ) + endif + + Dim aPropArray(0) as Object + aPropArray(0) = CreateUnoStruct("com.sun.star.beans.PropertyValue") + aPropArray(0).Name = "OpenFlags" + aPropArray(0).Value = "S" + + dim doc as object + dim noargs() + doc = StarDesktop.loadComponentFromURL( url.Complete, "_blank", 0, aPropArray() ) ' XModel + LoadDoc = doc +End Sub + +Sub SaveDoc (DocName as String, oDoc as Object, sFilterName as string ) + dim trans as object + trans = createUnoService("com.sun.star.util.URLTransformer" ) + url = createUnoStruct("com.sun.star.util.URL" ) + url.Complete = DocName + if Left(DocName, 5 ) <> "file:" then + trans.parsestrict( url ) + endif + + if not (sFilterName = "") then + Dim aPropArray(0) as Object + aPropArray(0) = CreateUnoStruct("com.sun.star.beans.PropertyValue") + aPropArray(0).Name = "FilterName" + aPropArray(0).Value = sFilterName + + oDoc.storeAsURL( url.Complete, aPropArray() ) + else + MessageBox "Filtername is unknown!" + end if +end Sub + +Function CloseDoc( oDoc as Object ) + Dim oListener as Object + oListener = CreateUnoListener( "Events.closeListener_", "com.sun.star.util.XCloseListener" ) + oDoc.addCloseListener( oListener ) + + Events.ResetCloseListenerFlag() + oDoc.close( true ) + closeDoc = Events.HasCloseListenerBeenCalled() + + if ( Not Events.HasCloseListenerBeenCalled() ) Then + ' do this only if closing was not successful - otherwise, we'd get a DisposedException + oDoc.removeCloseListener( oListener ) + End If +End Function + diff --git a/smoketest/data/Basic/Standard/Test_DB.xml b/smoketest/data/Basic/Standard/Test_DB.xml new file mode 100644 index 000000000..d3452d141 --- /dev/null +++ b/smoketest/data/Basic/Standard/Test_DB.xml @@ -0,0 +1,138 @@ + + + +REM ***** Database Test ***** + +const cMessageDatabaseService = "Database Service" +const cMessageDatabaseOpen = "Open Database" +const cMessageDatabaseInsert = "Insert record into Database" +const cMessageDatabaseDelete = "Delete record from Database" +const cMessageDatabaseSeek = "Read other record from Database" +const cMessageDatabaseClose = "Close Database" + +Sub TestDB + + Dim oDBConnection as Object, oDataSource as Object, oDBContext as Object + Dim sDBName as String, sTable as String, sCurrentMessage as String + Dim nRowCount as Integer + Dim bResult as Boolean + Const sTestString = "Automatic Test" + + On Local Error GoTo DBERROR + + gCurrentTestCase = cLogfileFailed + LocalTestLog% = OpenLogDat (GetLogFileName(gCurrentDocTest)) + + gCurrentTestCase = cDBService + sCurrentMessage = cMessageDatabaseService + " " + cUnoDatabaseContext + + oDBContext = CreateUnoService(cUnoDatabaseContext) + sDBName="Bibliography" 'Names of Databases + + gCurrentTestCase = cDBOpen + sCurrentMessage = cMessageDatabaseOpen + + oDataSource = oDBContext.GetByName(sDBName) + sTable=oDataSource.Tables.ElementNames(0) + oDBConnection = oDBContext.GetByName(sDBName).GetConnection("","") + + LogTestResult( "Database "+ cMessageDatabaseOpen, not IsNull (oDBConnection) ) + if (IsNull(oDBConnection)) then + Close #LocalTestLog% + LocalTestLog = 0 + Exit Sub + End If + + ' Database is open now + + gCurrentTestCase = cDBService + sCurrentMessage = cMessageDatabaseService + " " + cUnoRowSet + oRowSet = createUnoService(cUnoRowSet) + + if (IsNull(oRowSet)) then + LogTestResult( "Database "+ cMessageDatabaseService + " " + cUnoRowSet, not IsNull (oRowSet) ) + Exit Sub + else + LogTestResult( "Database "+ cMessageDatabaseService, TRUE ) + End If + + gCurrentTestCase = cDBInsert + sCurrentMessage = cMessageDatabaseInsert + + oRowSet.ActiveConnection = oDBConnection + + oRowSet.CommandType = com.sun.star.sdb.CommandType.COMMAND + oRowSet.Command = "SELECT * FROM " + sTable + oRowSet.execute() + + oRowSet.moveToInsertRow + oRowSet.updateString(5, sTestString) + + oRowSet.insertRow() + nRowCount=oRowSet.RowCount + + oRowSet.moveToCurrentRow() + + bResult = (oRowSet.getString(5) = sTestString) + LogTestResult( "Database "+ cMessageDatabaseInsert, bResult ) + + 'delete only if insert passed + + if (bResult) Then + gCurrentTestCase = cDBDelete + sCurrentMessage = cMessageDatabaseDelete + oRowSet.deleteRow() + bResult = (nRowCount - oRowSet.RowCount = 0) + if ( bResult ) Then + oRowSet.next() + bResult = (nRowCount - oRowSet.RowCount = 1) + End If + LogTestResult( "Database "+ cMessageDatabaseDelete, bResult ) + End If + + ' read other record + + gCurrentTestCase = cDBSeek + sCurrentMessage = cMessageDatabaseSeek + oRowSet.first() + bResult = not (oRowSet.getString(5) = sTestString) + LogTestResult( "Database "+ cMessageDatabaseSeek, bResult ) + + gCurrentTestCase = cDBClose + sCurrentMessage = cMessageDatabaseClose + oDBConnection.Dispose() + LogTestResult( "Database "+ cMessageDatabaseClose, True ) + + Print #LocalTestLog, "---" + Close #LocalTestLog% + LocalTestLog = 0 + Exit Sub ' Without error + + DBERROR: + If ( gCurrentTestCase = cLogfileFailed ) then + LogTestResult( " ", False ) + Exit Sub + else + LogTestResult( "Database "+ sCurrentMessage, FALSE ) + Close #LocalTestLog% + LocalTestLog = 0 + End If + Exit Sub ' With error +End Sub + diff --git a/smoketest/data/Basic/Standard/Test_Ext.xml b/smoketest/data/Basic/Standard/Test_Ext.xml new file mode 100644 index 000000000..a46449a13 --- /dev/null +++ b/smoketest/data/Basic/Standard/Test_Ext.xml @@ -0,0 +1,108 @@ + + + +REM ***** BASIC ***** + +const cMessageExtensionService = "Extension Service" +const cMessageExtensionInstall = "Install Extension" +const cMessageExtensionUninstall = "Uninstall Extension" + +Sub TestExtensions + Dim oTestExtension as Object, obj_null as Object + Dim sCurrentMessage as String + Dim bResult as Boolean + Dim sImplementationNameString as String + sImplementationNameString = cUnoSmoketestTestExtension + "$_TestExtension" + + On Local Error GoTo EXTERROR + + gCurrentTestCase = cLogfileFailed + LocalTestLog% = OpenLogDat (GetLogFileName(gCurrentDocTest)) + + sCurrentMessage = "SmokeTestCommandEnvironment (implemented in Java)" + gCurrentTestCase = cEXTService + + 'Create an implementation of com.sun.star.ucb.XCommandEnvironment which is needed for + 'adding the extension. The implementation is in + 'smoketest/org/libreoffice/smoketest/SmoketestCommandEnvironment.java and the code is in smoketest.jar + cmdEnv = createUnoService(cUnoSmoketestCommandEnvironment) + + 'Create the component context and then get the singleton ExtensionManager + 'A singleton cannot be created with createUnoService + sCurrentMessage = cMessageExtensionService + ctx = getDefaultContext + ext_mgr = ctx.getValueByName("/singletons/" + cExtensionManager) + + LogTestResult( "Extension "+ cMessageExtensionService, not IsNull (ext_mgr) ) + if (IsNull(ext_mgr)) then + Close #LocalTestLog% + LocalTestLog = 0 + Exit Sub + End If + + sCurrentMessage = cMessageExtensionInstall + gCurrentTestCase = cEXTInstall + + 'Add the extension. We must provide a file URL here. + 'By passing "user" we determine that the actions we perform on + 'XExtensionManager only affect the user installation. To modify the share installation one would pass "share". + + Dim props() as Object + ext_mgr.addExtension(sExtensionURL, props, "user", obj_null, cmdEnv) + + 'Check if the extension has been added by creating a service which is contained in the extension. + oTestExtension = createUnoService(cUnoSmoketestTestExtension) + bResult = (oTestExtension.getImplementationName = sImplementationNameString) + LogTestResult( "Extension "+ cMessageExtensionInstall, bResult ) + if (not bResult) then + Close #LocalTestLog% + LocalTestLog = 0 + Exit Sub + End If + + sCurrentMessage = cMessageExtensionUninstall + gCurrentTestCase = cEXTUninstall + + 'Remove the package + ext_mgr.removeExtension("org.libreoffice.smoketest.TestExtension", cExtensionFileName, "user",obj_null, cmdEnv) + + 'Try to create the service which is contained in the now removed extension. + oTestExtension = createUnoService(cUnoSmoketestTestExtension) + + 'The service must not be available anymore. Therefore isNull must return true. + LogTestResult( "Extension "+ cMessageExtensionUninstall, IsNull (oTestExtension) ) + + Print #LocalTestLog, "---" + Close #LocalTestLog% + LocalTestLog = 0 + Exit Sub ' Without error + + EXTERROR: + If ( gCurrentTestCase = cLogfileFailed ) then + LogTestResult( " ", False ) + Exit Sub + else + LogTestResult( "Extension "+ sCurrentMessage, False ) + Close #LocalTestLog% + LocalTestLog = 0 + End If + Exit Sub ' With error + +End Sub + diff --git a/smoketest/data/Basic/Standard/script-lb.xml b/smoketest/data/Basic/Standard/script-lb.xml new file mode 100644 index 000000000..e91b91fda --- /dev/null +++ b/smoketest/data/Basic/Standard/script-lb.xml @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/smoketest/data/Basic/script-lc.xml b/smoketest/data/Basic/script-lc.xml new file mode 100644 index 000000000..9d2b85bca --- /dev/null +++ b/smoketest/data/Basic/script-lc.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/smoketest/data/Dialogs/Standard/OptionsDlg.xml b/smoketest/data/Dialogs/Standard/OptionsDlg.xml new file mode 100644 index 000000000..69308d7a4 --- /dev/null +++ b/smoketest/data/Dialogs/Standard/OptionsDlg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smoketest/data/Dialogs/Standard/dialog-lb.xml b/smoketest/data/Dialogs/Standard/dialog-lb.xml new file mode 100644 index 000000000..a03595567 --- /dev/null +++ b/smoketest/data/Dialogs/Standard/dialog-lb.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/smoketest/data/Dialogs/dialog-lc.xml b/smoketest/data/Dialogs/dialog-lc.xml new file mode 100644 index 000000000..9d2b85bca --- /dev/null +++ b/smoketest/data/Dialogs/dialog-lc.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/smoketest/data/META-INF/manifest.xml b/smoketest/data/META-INF/manifest.xml new file mode 100644 index 000000000..f515ffa84 --- /dev/null +++ b/smoketest/data/META-INF/manifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smoketest/data/content.xml b/smoketest/data/content.xml new file mode 100644 index 000000000..fc43425f9 --- /dev/null +++ b/smoketest/data/content.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + stardiv.one.form.control.CommandButton + + + + + + + + + + + + stardiv.one.form.control.CommandButton + + + + + + + + + + + + stardiv.one.form.control.CommandButton + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smoketest/data/meta.xml b/smoketest/data/meta.xml new file mode 100644 index 000000000..56c652335 --- /dev/null +++ b/smoketest/data/meta.xml @@ -0,0 +1,33 @@ + + + + + Oracle_Open_Office/3.2$Win32 OpenOffice.org_project/300m77$Build-9496$CWS-renaissance2 + 2001-06-08T15:59:03 + 2007-01-18T12:45:22 + de-DE + 0 + PT0S + + + + + + + diff --git a/smoketest/data/mimetype b/smoketest/data/mimetype new file mode 100644 index 000000000..9df49bfcd --- /dev/null +++ b/smoketest/data/mimetype @@ -0,0 +1 @@ +application/vnd.sun.xml.writer \ No newline at end of file diff --git a/smoketest/data/settings.xml b/smoketest/data/settings.xml new file mode 100644 index 000000000..284db0962 --- /dev/null +++ b/smoketest/data/settings.xml @@ -0,0 +1,109 @@ + + + + + + 0 + 0 + 36382 + 17120 + true + false + + + view2 + 17120 + 3002 + 0 + 0 + 36380 + 17119 + 0 + 0 + false + 100 + false + + + + + false + false + false + false + 1 + false + false + true + false + true + false + true + true + false + true + true + GgX+/01pY3Jvc29mdCBYUFMgRG9jdW1lbnQgV3JpdGVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFhQUyBEb2N1bWVudCBXcml0ZXIAAAAWAAEAPAQAAAAAAAAFAFZUAAAkbQAAM1ROVwIACABNAGkAYwByAG8AcwBvAGYAdAAgAFgAUABTACAARABvAGMAdQBtAGUAbgB0ACAAVwByAGkAdABlAHIAAAAAAAAAAQQABtwAWAMD/wAAAQABAJoLNAhkAAEADwBYAgIAAQBYAgIAAABBADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAQAAAP////8AAAAAAAAAAAAAAAAAAAAARElOVSIAEAFMAwwAytL2cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAQAQAAU01USgAAAAAQAAABTQBpAGMAcgBvAHMAbwBmAHQAIABYAFAAUwAgAEQAbwBjAHUAbQBlAG4AdAAgAFcAcgBpAHQAZQByAAAASW5wdXRCaW4ARk9STVNPVVJDRQBSRVNETEwAVW5pcmVzRExMAEludGVybGVhdmluZwBPRkYASW1hZ2VUeXBlAEpQRUdNZWQAT3JpZW50YXRpb24AUE9SVFJBSVQAQ29sbGF0ZQBPRkYAUmVzb2x1dGlvbgBPcHRpb24xAFBhcGVyU2l6ZQBMRVRURVIAQ29sb3JNb2RlADI0YnBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABNWERXAQEAABIAQ09NUEFUX0RVUExFWF9NT0RFDgBEVVBMRVhfVU5LTk9XTg== + Adreßbuch + false + adressen + false + false + false + true + true + true + false + 0 + false + true + false + Microsoft XPS Document Writer + + true + false + true + true + 0 + true + false + false + false + true + true + 0 + true + false + true + false + false + true + false + true + + false + true + true + disabled + false + false + false + + + diff --git a/smoketest/data/styles.xml b/smoketest/data/styles.xml new file mode 100644 index 000000000..d3ed484ed --- /dev/null +++ b/smoketest/data/styles.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smoketest/org/libreoffice/smoketest/Services.java b/smoketest/org/libreoffice/smoketest/Services.java new file mode 100644 index 000000000..4f74769e1 --- /dev/null +++ b/smoketest/org/libreoffice/smoketest/Services.java @@ -0,0 +1,51 @@ +/* + * 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/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.smoketest; + +import com.sun.star.lib.uno.helper.Factory; +import com.sun.star.lang.XSingleComponentFactory; + +/** This class is the registration class for all services in this module. + * + * Note that not all files which can be used as service need to be registered + * by this class. + */ +public class Services { + + /** + * Gives a factory for creating the service. + * This method is called by the JavaLoader + *

+ * @return returns a XSingleComponentFactory for creating + * the component + * @param sImplName the name of the implementation for which a + * service is desired + * @see com.sun.star.comp.loader.JavaLoader + */ + public static XSingleComponentFactory __getComponentFactory(String sImplName) + { + XSingleComponentFactory xFactory = null; + + if ( sImplName.equals( SmoketestCommandEnvironment.class.getName() ) ) + xFactory = Factory.createComponentFactory(SmoketestCommandEnvironment.class, + SmoketestCommandEnvironment.getServiceNames()); + + return xFactory; + } +} diff --git a/smoketest/org/libreoffice/smoketest/SmoketestCommandEnvironment.java b/smoketest/org/libreoffice/smoketest/SmoketestCommandEnvironment.java new file mode 100644 index 000000000..8d6fdb2e4 --- /dev/null +++ b/smoketest/org/libreoffice/smoketest/SmoketestCommandEnvironment.java @@ -0,0 +1,108 @@ +/* + * 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/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package org.libreoffice.smoketest; + +import com.sun.star.lib.uno.helper.WeakBase; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.lang.XServiceInfo; +import com.sun.star.ucb.XCommandEnvironment; + +/** This service is for use by the smoketest which checks the installation of + * extensions. The service provides the XCommandEnvironment interface, which + * is needed for adding extensions. + */ +public class SmoketestCommandEnvironment extends WeakBase + implements XServiceInfo, XCommandEnvironment { + + private static final String __serviceName = + "com.sun.star.deployment.test.SmoketestCommandEnvironment"; + + public static String[] getServiceNames() { + String[] sSupportedServiceNames = { __serviceName}; + return sSupportedServiceNames; + } + + //XServiceInfo ------------------------------------------------------------- + public String[] getSupportedServiceNames() { + return getServiceNames(); + } + + + public boolean supportsService( String sServiceName ) { + boolean bSupported = false; + if (sServiceName.equals(__serviceName)) + bSupported = true; + return bSupported; + } + + public String getImplementationName() { + return SmoketestCommandEnvironment.class.getName(); + } + + //XCommandEnvironment ================================================ + public com.sun.star.task.XInteractionHandler getInteractionHandler() + { + return new InteractionImpl(); + } + + public com.sun.star.ucb.XProgressHandler getProgressHandler() + { + return new ProgressImpl(); + } +} + + + + +class InteractionImpl implements com.sun.star.task.XInteractionHandler +{ + public void handle( com.sun.star.task.XInteractionRequest xRequest ) + { + boolean approve = true; + + com.sun.star.task.XInteractionContinuation[] conts = xRequest.getContinuations(); + for (int i = 0; i < conts.length; i++) + { + if (approve) + { + com.sun.star.task.XInteractionApprove xApprove = + UnoRuntime.queryInterface(com.sun.star.task.XInteractionApprove.class, conts[i]); + if (xApprove != null) + xApprove.select(); + //don't query again for ongoing extensions + approve = false; + } + } + } +} + +class ProgressImpl implements com.sun.star.ucb.XProgressHandler +{ + public void push(Object status) + { + } + + public void update(Object status) + { + } + + public void pop() + { + } +} diff --git a/smoketest/org/libreoffice/smoketest/manifest b/smoketest/org/libreoffice/smoketest/manifest new file mode 100644 index 000000000..88cb26f5b --- /dev/null +++ b/smoketest/org/libreoffice/smoketest/manifest @@ -0,0 +1,3 @@ +Sealed: true +RegistrationClassName: org.libreoffice.smoketest.Services +UNO-Type-Path: diff --git a/smoketest/org/libreoffice/smoketest/smoketest.component b/smoketest/org/libreoffice/smoketest/smoketest.component new file mode 100644 index 000000000..fa7d8f100 --- /dev/null +++ b/smoketest/org/libreoffice/smoketest/smoketest.component @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/smoketest/smoketest.cxx b/smoketest/smoketest.cxx new file mode 100644 index 000000000..80a29036f --- /dev/null +++ b/smoketest/smoketest.cxx @@ -0,0 +1,199 @@ +/* -*- 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/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + +struct Result { + osl::Condition condition; + bool success; + OUString result; + Result() + : success(false) + { + } + Result(const Result&) = delete; + Result& operator=(const Result&) = delete; +}; + +class Listener: + public cppu::WeakImplHelper< css::frame::XDispatchResultListener > +{ +public: + explicit Listener(Result * result): result_(result) { OSL_ASSERT(result != nullptr); } + +private: + virtual void SAL_CALL disposing(css::lang::EventObject const &) override {} + + virtual void SAL_CALL dispatchFinished( + css::frame::DispatchResultEvent const & Result) override; + + Result * result_; +}; + +void Listener::dispatchFinished(css::frame::DispatchResultEvent const & Result) +{ + result_->success = + (Result.State == css::frame::DispatchResultState::SUCCESS) && + (Result.Result >>= result_->result); + result_->condition.set(); +} + +class Callback: public cppu::WeakImplHelper< css::awt::XCallback > { +public: + Callback( + css::uno::Reference< css::frame::XNotifyingDispatch > const & dispatch, + css::util::URL const & url, + css::uno::Sequence< css::beans::PropertyValue > const & arguments, + css::uno::Reference< css::frame::XDispatchResultListener > const & + listener): + dispatch_(dispatch), url_(url), arguments_(arguments), + listener_(listener) + { OSL_ASSERT(dispatch.is()); } + +private: + virtual void SAL_CALL notify(css::uno::Any const &) override + { dispatch_->dispatchWithNotification(url_, arguments_, listener_); } + + css::uno::Reference< css::frame::XNotifyingDispatch > dispatch_; + css::util::URL url_; + css::uno::Sequence< css::beans::PropertyValue > arguments_; + css::uno::Reference< css::frame::XDispatchResultListener > listener_; +}; + +class Test: public CppUnit::TestFixture { +public: + virtual void setUp() override; + + virtual void tearDown() override; + +private: + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); + + void test(); + + test::OfficeConnection connection_; +}; + +void Test::setUp() { + connection_.setUp(); +} + +void Test::tearDown() { + connection_.tearDown(); +} + +void Test::test() { + OUString doc; + CPPUNIT_ASSERT( + test::getTestArgument( + u"smoketest.doc", &doc)); + css::uno::Sequence< css::beans::PropertyValue > args{ + { /* Name */ "MacroExecutionMode", + /* Handle */ -1, + /* Value */ css::uno::Any(css::document::MacroExecMode::ALWAYS_EXECUTE_NO_WARN), + /* State */ css::beans::PropertyState_DIRECT_VALUE }, + { /* Name */ "ReadOnly", + /* Handle */ -1, + /* Value */ css::uno::Any(true), + /* State */ css::beans::PropertyState_DIRECT_VALUE } + }; + css::util::URL url; + url.Complete = "vnd.sun.star.script:Standard.Global.StartTestWithDefaultOptions?" + "language=Basic&location=document"; + + css::uno::Reference< css::frame::XDesktop2 > xDesktop = css::frame::Desktop::create(connection_.getComponentContext()); + + css::uno::Reference< css::frame::XNotifyingDispatch > disp( + css::uno::Reference< css::frame::XDispatchProvider >( + css::uno::Reference< css::frame::XController >( + css::uno::Reference< css::frame::XModel >( + xDesktop->loadComponentFromURL( + test::toAbsoluteFileUrl(doc), + "_default", + 0, args), + css::uno::UNO_QUERY_THROW)->getCurrentController(), + css::uno::UNO_SET_THROW)->getFrame(), + css::uno::UNO_QUERY_THROW)->queryDispatch( + url, "_self", 0), + css::uno::UNO_QUERY_THROW); + Result result; + // Shifted to main thread to work around potential deadlocks (i112867): + css::awt::AsyncCallback::create( + connection_.getComponentContext())->addCallback( + new Callback( + disp, url, css::uno::Sequence< css::beans::PropertyValue >(), + new Listener(&result)), + css::uno::Any()); + // Wait for result.condition or connection_ going stale: + for (;;) { + osl::Condition::Result res = result.condition.wait(std::chrono::seconds(1)); // 1 sec delay + if (res == osl::Condition::result_ok) { + break; + } + CPPUNIT_ASSERT_EQUAL(osl::Condition::result_timeout, res); + CPPUNIT_ASSERT(connection_.isStillAlive()); + } + CPPUNIT_ASSERT(result.success); + CPPUNIT_ASSERT_EQUAL(OUString(), result.result); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/smoketest/smoketest_too.cxx b/smoketest/smoketest_too.cxx new file mode 100644 index 000000000..8c54d2554 --- /dev/null +++ b/smoketest/smoketest_too.cxx @@ -0,0 +1 @@ +#include "smoketest.cxx" -- cgit v1.2.3