summaryrefslogtreecommitdiff
path: root/framework/qa/complex/dispatches/checkdispatchapi.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/qa/complex/dispatches/checkdispatchapi.java')
-rw-r--r--framework/qa/complex/dispatches/checkdispatchapi.java462
1 files changed, 462 insertions, 0 deletions
diff --git a/framework/qa/complex/dispatches/checkdispatchapi.java b/framework/qa/complex/dispatches/checkdispatchapi.java
new file mode 100644
index 000000000000..518ec277ae53
--- /dev/null
+++ b/framework/qa/complex/dispatches/checkdispatchapi.java
@@ -0,0 +1,462 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package complex.dispatches;
+
+import com.sun.star.frame.*;
+import com.sun.star.lang.*;
+import com.sun.star.util.*;
+import com.sun.star.beans.*;
+import com.sun.star.uno.*;
+
+import java.util.*;
+
+import complexlib.ComplexTestCase;
+
+import helper.*;
+
+//-----------------------------------------------
+/** @short Check the interface XDispatchInformationProvider
+
+ @descr Because there exists more then one implementation of a dispatch
+ object, we have to test all these implementations ...
+ */
+public class checkdispatchapi extends ComplexTestCase
+{
+ //-------------------------------------------
+ // some const
+
+ //-------------------------------------------
+ // member
+
+ /** points to the global uno service manager. */
+ private XMultiServiceFactory m_xMSF = null;
+ private connectivity.tools.HsqlDatabase db;
+
+ /** can be used to create new test frames. */
+ private XFrame m_xDesktop = null;
+
+ /** provides XDispatchInformationProvider interface. */
+ private XFrame m_xFrame = null;
+
+ //-------------------------------------------
+ // test environment
+
+ //-------------------------------------------
+ /** @short A function to tell the framework,
+ which test functions are available.
+
+ @return All test methods.
+ @todo Think about selection of tests from outside ...
+ */
+ public String[] getTestMethodNames()
+ {
+ return new String[]
+ {
+ "checkDispatchInfoOfWriter",
+ "checkDispatchInfoOfCalc",
+ "checkDispatchInfoOfDraw",
+ "checkDispatchInfoOfImpress",
+ "checkDispatchInfoOfMath",
+ "checkDispatchInfoOfChart",
+ "checkDispatchInfoOfBibliography",
+ "checkDispatchInfoOfQueryDesign",
+ "checkDispatchInfoOfTableDesign",
+ "checkDispatchInfoOfFormGridView",
+ "checkDispatchInfoOfDataSourceBrowser",
+ "checkDispatchInfoOfRelationDesign",
+ "checkDispatchInfoOfBasic",
+ "checkDispatchInfoOfStartModule",
+ "checkInterceptorLifeTime",
+ "checkInterception"
+ };
+ }
+
+ //-------------------------------------------
+ /** @short Create the environment for following tests.
+
+ @descr create an empty test frame, where we can load
+ different components inside.
+ */
+ public void before()
+ {
+ try
+ {
+ // get uno service manager from global test environment
+ m_xMSF = (XMultiServiceFactory)param.getMSF();
+
+ db = new connectivity.tools.HsqlDatabase(m_xMSF);
+
+ // create desktop
+ m_xDesktop = (XFrame)UnoRuntime.queryInterface(
+ XFrame.class,
+ m_xMSF.createInstance("com.sun.star.frame.Desktop"));
+
+ m_xFrame = impl_createNewFrame();
+ }
+ catch(java.lang.Throwable ex)
+ {
+ failed("Cant initialize test environment.");
+ }
+ }
+
+ //-------------------------------------------
+ /** @short close the environment.
+ */
+ public void after()
+ {
+ db.close();
+ impl_closeFrame(m_xFrame);
+ m_xFrame = null;
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfWriter()
+ {
+ impl_checkDispatchInfoOfXXX("private:factory/swriter");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfCalc()
+ {
+ impl_checkDispatchInfoOfXXX("private:factory/scalc");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfDraw()
+ {
+ impl_checkDispatchInfoOfXXX("private:factory/sdraw");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfImpress()
+ {
+ impl_checkDispatchInfoOfXXX("private:factory/simpress");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfChart()
+ {
+ impl_checkDispatchInfoOfXXX("private:factory/schart");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfMath()
+ {
+ impl_checkDispatchInfoOfXXX("private:factory/smath");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfDataBase()
+ {
+ impl_checkDispatchInfoOfXXX("private:factory/sdatabase");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfBibliography()
+ {
+ impl_checkDispatchInfoOfXXX(".component:Bibliography/View1");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfQueryDesign()
+ {
+ callDatabaseDispatch(".component:DB/QueryDesign");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfTableDesign()
+ {
+ callDatabaseDispatch(".component:DB/TableDesign");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfFormGridView()
+ {
+ impl_checkDispatchInfoOfXXX(".component:DB/FormGridView");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfDataSourceBrowser()
+ {
+ impl_checkDispatchInfoOfXXX(".component:DB/DataSourceBrowser");
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfRelationDesign()
+ {
+ callDatabaseDispatch(".component:DB/RelationDesign");
+ }
+ //-------------------------------------------
+ private void callDatabaseDispatch(String url)
+ {
+ try
+ {
+ final PropertyValue args = new PropertyValue();
+ args.Name = "ActiveConnection";
+ args.Value = (Object)db.defaultConnection();
+
+ XFrame xFrame = impl_createNewFrame();
+
+ impl_loadIntoFrame(xFrame, url, new PropertyValue[] { args });
+ impl_checkDispatchInfo(xFrame);
+ impl_closeFrame(xFrame);
+ } catch(java.lang.Exception e ) {
+ }
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfBasic()
+ {
+ Object aComponent = impl_createUNOComponent("com.sun.star.script.BasicIDE");
+ impl_checkDispatchInfo(aComponent);
+ }
+
+ //-------------------------------------------
+ public void checkDispatchInfoOfStartModule()
+ {
+ Object aComponent = impl_createUNOComponent("com.sun.star.frame.StartModule");
+ impl_checkDispatchInfo(aComponent);
+ }
+
+ //-------------------------------------------
+ public void checkInterceptorLifeTime()
+ {
+ // Note: It's important for the following test, that aInterceptor will be hold alive by the uno reference
+ // xInterceptor. Otherwhise we cant check some internal states of aInterceptor at the end of this method, because
+ // it was already killed .-)
+
+ Interceptor aInterceptor = new Interceptor(log);
+ com.sun.star.frame.XDispatchProviderInterceptor xInterceptor = (com.sun.star.frame.XDispatchProviderInterceptor)UnoRuntime.queryInterface(
+ com.sun.star.frame.XDispatchProviderInterceptor.class,
+ aInterceptor);
+
+ com.sun.star.frame.XFrame xFrame = impl_createNewFrame();
+ com.sun.star.frame.XDispatchProviderInterception xInterception = (com.sun.star.frame.XDispatchProviderInterception)UnoRuntime.queryInterface(
+ com.sun.star.frame.XDispatchProviderInterception.class,
+ xFrame);
+
+ xInterception.registerDispatchProviderInterceptor(xInterceptor);
+ impl_closeFrame(xFrame);
+
+ int nRegCount = aInterceptor.getRegistrationCount();
+ boolean bIsRegistered = aInterceptor.isRegistered();
+
+ log.println("registration count = "+nRegCount );
+ log.println("is registered ? = "+bIsRegistered);
+
+ if (nRegCount < 1)
+ failed("Interceptor was never registered.");
+
+ if (bIsRegistered)
+ failed("Interceptor was not deregistered automaticly on closing the corresponding frame.");
+
+ log.println("Destruction of interception chain works as designed .-)");
+ }
+
+ //-------------------------------------------
+ public void checkInterception()
+ {
+ String [] lDisabledURLs = new String [1];
+ lDisabledURLs[0] = ".uno:Open";
+
+ log.println("create and initialize interceptor ...");
+ Interceptor aInterceptor = new Interceptor(log);
+ aInterceptor.setURLs4URLs4Blocking(lDisabledURLs);
+
+ com.sun.star.frame.XDispatchProviderInterceptor xInterceptor = (com.sun.star.frame.XDispatchProviderInterceptor)UnoRuntime.queryInterface(
+ com.sun.star.frame.XDispatchProviderInterceptor.class,
+ aInterceptor);
+
+ log.println("create and initialize frame ...");
+ com.sun.star.frame.XFrame xFrame = impl_createNewFrame();
+ impl_loadIntoFrame(xFrame, "private:factory/swriter", null);
+
+ com.sun.star.frame.XDispatchProviderInterception xInterception = (com.sun.star.frame.XDispatchProviderInterception)UnoRuntime.queryInterface(
+ com.sun.star.frame.XDispatchProviderInterception.class,
+ xFrame);
+
+ log.println("register interceptor ...");
+ xInterception.registerDispatchProviderInterceptor(xInterceptor);
+
+ log.println("deregister interceptor ...");
+ xInterception.releaseDispatchProviderInterceptor(xInterceptor);
+ }
+
+ //-------------------------------------------
+ private void impl_checkDispatchInfoOfXXX(String sXXX)
+ {
+ XFrame xFrame = impl_createNewFrame();
+ impl_loadIntoFrame(xFrame, sXXX,null);
+ impl_checkDispatchInfo(xFrame);
+ impl_closeFrame(xFrame);
+ }
+
+ //-------------------------------------------
+ /** @short load an URL into the current test frame.
+ */
+ private void impl_loadIntoFrame(XFrame xFrame, String sURL,PropertyValue args[])
+ {
+ XComponentLoader xLoader = (XComponentLoader)UnoRuntime.queryInterface(
+ XComponentLoader.class,
+ xFrame);
+ if (xLoader == null)
+ failed("Frame does not provide required interface XComponentLoader.");
+
+ XComponent xDoc = null;
+ try
+ {
+ xDoc = xLoader.loadComponentFromURL(sURL, "_self", 0, args);
+ }
+ catch(java.lang.Throwable ex)
+ {
+ xDoc = null;
+ }
+
+ if (xDoc == null)
+ failed("Could not load \""+sURL+"\".");
+ }
+
+ //-------------------------------------------
+ /** @short create an uno implementation directly.
+ */
+ private Object impl_createUNOComponent(String sName)
+ {
+ Object aComponent = null;
+ try
+ {
+ aComponent = m_xMSF.createInstance(sName);
+ }
+ catch(java.lang.Throwable ex)
+ {
+ aComponent = null;
+ }
+
+ if (aComponent == null)
+ failed("Could not create UNO component \""+sName+"\".");
+ return aComponent;
+ }
+
+ //-------------------------------------------
+ /** @short check the interface XDispatchInformationProvider
+ at the specified component.
+ */
+ private void impl_checkDispatchInfo(Object aComponent)
+ {
+ XDispatchInformationProvider xInfoProvider = (XDispatchInformationProvider)UnoRuntime.queryInterface(
+ XDispatchInformationProvider.class,
+ aComponent);
+ if (xInfoProvider == null)
+ {
+ // Warning
+ log.println("Warning:\tComponent does not provide the [optional!] interface XDispatchInformationProvider.");
+ return;
+ }
+
+ try
+ {
+ short[] lGroups = xInfoProvider.getSupportedCommandGroups();
+ int c1 = lGroups.length;
+ int i1 = 0;
+ for (i1=0; i1<c1; ++i1)
+ {
+ short nGroup = lGroups[i1];
+ DispatchInformation[] lInfos = xInfoProvider.getConfigurableDispatchInformation(nGroup);
+ int c2 = lInfos.length;
+ int i2 = 0;
+
+ // check for empty lists
+ // Warning
+ if (lInfos.length < 1)
+ log.println("Warning:\tCould not get any DispatchInformation for group ["+nGroup+"].");
+
+ // check for duplicates (and by the way, if the info item match the requested group)
+ HashMap aCheckMap = new HashMap(c2);
+ for (i2=0; i2<c2; ++i2)
+ {
+ DispatchInformation aInfo = lInfos[i2];
+ if (aInfo.GroupId != nGroup)
+ {
+ // Error
+ failed("At least one DispatchInformation item does not match the requested group.\n\trequested group=["+nGroup+
+ "] returned groupd=["+aInfo.GroupId+"] command=\""+aInfo.Command+"\"", true); // true => dont break this test
+ continue;
+ }
+
+ if (aCheckMap.containsKey(aInfo.Command))
+ {
+ // Error
+ failed("Found a duplicate item: group=["+aInfo.GroupId+"] command=\""+aInfo.Command+"\"", true); // true => dont break this test
+ continue;
+ }
+
+ aCheckMap.put(aInfo.Command, aInfo.Command);
+ log.println("\t["+aInfo.GroupId+"] \""+aInfo.Command+"\"");
+ }
+ }
+ }
+ catch(java.lang.Throwable ex)
+ {
+ failed("Exception caught during using XDispatchInformationProvider.");
+ ex.printStackTrace();
+ }
+ }
+
+ //-------------------------------------------
+ private synchronized com.sun.star.frame.XFrame impl_createNewFrame()
+ {
+ com.sun.star.frame.XFrame xFrame = null;
+
+ try
+ {
+ xFrame = m_xDesktop.findFrame("_blank", 0);
+ xFrame.getContainerWindow().setVisible(true);
+ }
+ catch(java.lang.Throwable ex)
+ {
+ failed("Could not create the frame instance.");
+ }
+
+ return xFrame;
+ }
+
+ //-------------------------------------------
+ private synchronized void impl_closeFrame(com.sun.star.frame.XFrame xFrame)
+ {
+ com.sun.star.util.XCloseable xClose = (com.sun.star.util.XCloseable)UnoRuntime.queryInterface(
+ com.sun.star.util.XCloseable.class,
+ xFrame);
+ try
+ {
+ xClose.close(false);
+ }
+ catch(com.sun.star.util.CloseVetoException exVeto)
+ {
+ failed("Test frame couldn't be closed successfully.");
+ }
+ }
+}