summaryrefslogtreecommitdiff
path: root/sfx2/qa/complex
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2/qa/complex')
-rw-r--r--sfx2/qa/complex/CheckGlobalEventBroadcaster_writer1.java243
-rw-r--r--sfx2/qa/complex/DocHelper/makefile.mk46
-rw-r--r--sfx2/qa/complex/docinfo/DocumentProperties.java269
-rw-r--r--sfx2/qa/complex/makefile.mk61
-rwxr-xr-xsfx2/qa/complex/sfx2/DocumentInfo.java362
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/DocumentMetadataAccess.java (renamed from sfx2/qa/complex/DocumentMetadataAccessTest.java)736
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/DocumentProperties.java (renamed from sfx2/qa/complex/DocumentMetaData.java)311
-rwxr-xr-xsfx2/qa/complex/sfx2/GlobalEventBroadcaster.java273
-rwxr-xr-xsfx2/qa/complex/sfx2/StandaloneDocumentInfo.java99
-rwxr-xr-xsfx2/qa/complex/sfx2/UndoManager.java1464
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/makefile.mk (renamed from sfx2/qa/complex/docinfo/makefile.mk)56
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/standalonedocinfo/StandaloneDocumentInfoTest.java (renamed from sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoTest.java)2
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/standalonedocinfo/Test01.java (renamed from sfx2/qa/complex/standalonedocumentinfo/Test01.java)41
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/standalonedocinfo/TestHelper.java (renamed from sfx2/qa/complex/standalonedocumentinfo/TestHelper.java)16
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/testdocuments/CUSTOM.odt (renamed from sfx2/qa/complex/testdocuments/CUSTOM.odt)bin1021 -> 1021 bytes
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/testdocuments/TEST.odt (renamed from sfx2/qa/complex/testdocuments/TEST.odt)bin13803 -> 13803 bytes
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/testdocuments/TESTRDFA.odt (renamed from sfx2/qa/complex/testdocuments/TESTRDFA.odt)bin7540 -> 7540 bytes
-rwxr-xr-xsfx2/qa/complex/sfx2/testdocuments/empty.rdf13
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/tools/DialogThread.java (renamed from sfx2/qa/complex/DocHelper/DialogThread.java)19
-rwxr-xr-xsfx2/qa/complex/sfx2/tools/TestDocument.java40
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/tools/WriterHelper.java (renamed from sfx2/qa/complex/DocHelper/WriterHelper.java)101
-rwxr-xr-xsfx2/qa/complex/sfx2/undo/CalcDocumentTest.java96
-rwxr-xr-xsfx2/qa/complex/sfx2/undo/ChartDocumentTest.java277
-rwxr-xr-xsfx2/qa/complex/sfx2/undo/DocumentTest.java61
-rwxr-xr-xsfx2/qa/complex/sfx2/undo/DocumentTestBase.java29
-rwxr-xr-x[-rw-r--r--]sfx2/qa/complex/sfx2/undo/DrawDocumentTest.java (renamed from sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoUnitTest.java)55
-rwxr-xr-xsfx2/qa/complex/sfx2/undo/DrawingOrPresentationDocumentTest.java196
-rwxr-xr-xsfx2/qa/complex/sfx2/undo/ImpressDocumentTest.java46
-rwxr-xr-xsfx2/qa/complex/sfx2/undo/WriterDocumentTest.java104
-rw-r--r--sfx2/qa/complex/standalonedocumentinfo/makefile.mk85
-rw-r--r--sfx2/qa/complex/tests.sce3
31 files changed, 3739 insertions, 1365 deletions
diff --git a/sfx2/qa/complex/CheckGlobalEventBroadcaster_writer1.java b/sfx2/qa/complex/CheckGlobalEventBroadcaster_writer1.java
deleted file mode 100644
index d5dc17e183eb..000000000000
--- a/sfx2/qa/complex/CheckGlobalEventBroadcaster_writer1.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*************************************************************************
- *
- * 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.framework;
-
-import com.sun.star.awt.XWindow;
-import com.sun.star.document.XEventBroadcaster;
-import com.sun.star.document.XEventListener;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.sheet.XSpreadsheetDocument;
-import com.sun.star.text.XTextDocument;
-import com.sun.star.uno.UnoRuntime;
-import complex.framework.DocHelper.WriterHelper;
-import complexlib.ComplexTestCase;
-import java.util.ArrayList;
-import com.sun.star.task.XJobExecutor;
-import com.sun.star.util.URL;
-import util.UITools;
-
-/**
- * This testcase checks the GlobalEventBroadcaster
- * it will add an XEventListener and verify the Events
- * raised when opening/changing and closing Office Documents
- */
-public class CheckGlobalEventBroadcaster_writer1 extends ComplexTestCase {
- XMultiServiceFactory m_xMSF = null;
- XEventBroadcaster m_xEventBroadcaster = null;
- ArrayList notifyEvents = new ArrayList();
- XTextDocument xTextDoc;
- XSpreadsheetDocument xSheetDoc;
- XEventListener m_xEventListener = new EventListenerImpl();
-
- public String[] getTestMethodNames() {
- return new String[] {
- "initialize", "checkWriter", "cleanup"
- };
- }
-
- public void initialize() {
- m_xMSF = (XMultiServiceFactory) param.getMSF();
- log.println("check wether there is a valid MultiServiceFactory");
-
- if (m_xMSF == null) {
- assure("## Couldn't get MultiServiceFactory make sure your Office is started",
- true);
- }
-
- log.println("... done");
-
- log.println(
- "Create an instance of com.sun.star.frame.GlobalEventBroadcaster");
-
- Object GlobalEventBroadcaster = null;
- Object dispatcher = null;
-
- try {
- GlobalEventBroadcaster = m_xMSF.createInstance(
- "com.sun.star.frame.GlobalEventBroadcaster");
- } catch (com.sun.star.uno.Exception e) {
- assure("## Exception while creating instance", false);
- }
-
- log.println("... done");
-
- log.println("check wether the created instance is valid");
-
- if (GlobalEventBroadcaster == null) {
- assure("couldn't create service", false);
- }
-
- log.println("... done");
-
- log.println(
- "try to query the XEventBroadcaster from the gained Object");
- m_xEventBroadcaster = (XEventBroadcaster) UnoRuntime.queryInterface(
- XEventBroadcaster.class,
- GlobalEventBroadcaster);
-
- if (util.utils.isVoid(m_xEventBroadcaster)) {
- assure("couldn't get XEventBroadcaster", false);
- }
-
- log.println("... done");
-
- log.println("adding Listener");
- m_xEventBroadcaster.addEventListener(m_xEventListener);
- log.println("... done");
- }
-
- public void checkWriter() {
- log.println("-- Checking Writer --");
-
- WriterHelper wHelper = new WriterHelper(m_xMSF);
- String[] expected;
- boolean locRes = true;
- log.println("opening an empty writer doc");
- notifyEvents.clear();
- xTextDoc = wHelper.openEmptyDoc();
- shortWait();
- expected = new String[] { "OnUnfocus", "OnCreate", "OnViewCreated", "OnFocus" };
-
- assure("Wrong events fired when opening empty doc",
- proveExpectation(expected));
- log.println("... done");
-
- log.println("changing the writer doc");
- notifyEvents.clear();
- xTextDoc.getText().setString("GlobalEventBroadcaster");
- shortWait();
- expected = new String[] { "OnModifyChanged" };
-
- assure("Wrong events fired when changing doc",
- proveExpectation(expected));
- log.println("... done");
-
- log.println("closing the empty writer doc");
- notifyEvents.clear();
- wHelper.closeDoc(xTextDoc);
- shortWait();
- expected = new String[] { "OnUnfocus", "OnFocus", "OnViewClosed", "OnUnload" };
-
- assure("Wrong events fired when closing empty doc",
- proveExpectation(expected));
- log.println("... done");
-
- log.println("opening an writer doc via Window-New Window");
- notifyEvents.clear();
- xTextDoc = wHelper.openFromDialog(".uno:NewWindow", "", false);
- shortWait();
- expected = new String[] { "OnUnfocus", "OnCreate", "OnViewCreated", "OnFocus", "OnUnfocus", "OnViewCreated", "OnFocus", };
-
- assure("Wrong events fired when opening an writer doc via Window-New Window",
- proveExpectation(expected));
- log.println("... done");
-
- log.println("closing the created writer doc");
- notifyEvents.clear();
-
- wHelper.closeDoc(xTextDoc);
- shortWait();
- expected = new String[] { "OnViewClosed", "OnUnfocus", "OnFocus", "OnViewClosed", "OnUnload" };
-
- assure("Wrong events fired when closing Window-New Window",
- proveExpectation(expected));
-
- log.println("... done");
-
- log.println("Opening document with label wizard");
- xTextDoc = wHelper.openFromDialog("private:factory/swriter?slot=21051", "", false);
- shortWait();
- XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, wHelper.getToolkit ().getActiveTopWindow ());
- UITools ut = new UITools(m_xMSF,xWindow);
- notifyEvents.clear();
- log.println("pressing button 'New Document'");
- try{
- ut.clickButton ("New Document");
- } catch (Exception e) {
- log.println("Couldn't press Button");
- }
- log.println("... done");
- shortWait();
- shortWait();
- shortWait();
- expected = new String[] { "OnViewClosed", "OnCreate", "OnFocus", "OnModifyChanged" };
-
- assure("Wrong events fired when starting labels wizard",
- proveExpectation(expected));
-
- log.println("-- Done Writer --");
- }
-
- public void cleanup() {
- log.println("removing Listener");
- m_xEventBroadcaster.removeEventListener(m_xEventListener);
- log.println("... done");
- }
-
- /**
- * Sleeps for 0.5 sec. to allow StarOffice to react on <code>
- * reset</code> call.
- */
- private void shortWait() {
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- log.println("While waiting :" + e);
- }
- }
-
- private boolean proveExpectation(String[] expected) {
- boolean locRes = true;
- boolean failure = false;
-
- log.println("Fired Events:");
- for (int k=0;k<notifyEvents.size();k++) {
- System.out.println("\t- "+notifyEvents.get(k));
- }
-
- for (int i = 0; i < expected.length; i++) {
- locRes = notifyEvents.contains(expected[i]);
-
- if (!locRes) {
- log.println("The event " + expected[i] + " isn't fired");
- failure = true;
- }
- }
-
- return !failure;
- }
-
- public class EventListenerImpl implements XEventListener {
- public void disposing(com.sun.star.lang.EventObject eventObject) {
- log.println("disposing: " + eventObject.Source.toString());
- }
-
- public void notifyEvent(com.sun.star.document.EventObject eventObject) {
- notifyEvents.add(eventObject.EventName);
- }
- }
-}
diff --git a/sfx2/qa/complex/DocHelper/makefile.mk b/sfx2/qa/complex/DocHelper/makefile.mk
deleted file mode 100644
index 6b6ac9191cdb..000000000000
--- a/sfx2/qa/complex/DocHelper/makefile.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ = ..$/..$/..
-TARGET = DocHelper
-PRJNAME = $(TARGET)
-PACKAGE = complex$/framework$/dochelper
-
-# --- Settings -----------------------------------------------------
-.INCLUDE: settings.mk
-
-
-#----- compile .java files -----------------------------------------
-
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
-JAVAFILES = DialogThread.java WriterHelper.java
-JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
diff --git a/sfx2/qa/complex/docinfo/DocumentProperties.java b/sfx2/qa/complex/docinfo/DocumentProperties.java
deleted file mode 100644
index cff1dd341d48..000000000000
--- a/sfx2/qa/complex/docinfo/DocumentProperties.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*************************************************************************
- *
- * 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.docinfo;
-
-import com.sun.star.beans.PropertyValue;
-import com.sun.star.beans.XPropertyContainer;
-import com.sun.star.beans.XPropertySet;
-import com.sun.star.document.XDocumentInfo;
-import com.sun.star.document.XDocumentInfoSupplier;
-import com.sun.star.frame.XComponentLoader;
-import com.sun.star.frame.XStorable;
-import com.sun.star.lang.XComponent;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.text.XTextDocument;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.uno.XInterface;
-import com.sun.star.util.Date;
-
-import complexlib.ComplexTestCase;
-
-import util.DesktopTools;
-import util.WriterTools;
-
-
-public class DocumentProperties extends ComplexTestCase {
- XMultiServiceFactory m_xMSF = null;
- XTextDocument xTextDoc = null;
-
- public String[] getTestMethodNames() {
- return new String[] {"checkDocInfo", "cleanup"};
- }
-
- public void checkDocInfo() {
- m_xMSF = (XMultiServiceFactory) param.getMSF();
-
- log.println(
- "check wether there is a valid MultiServiceFactory");
-
- if (m_xMSF == null) {
- assure("## Couldn't get MultiServiceFactory make sure your Office is started",
- true);
- }
-
- log.println("... done");
-
- log.println("Opening a Writer document");
- xTextDoc = WriterTools.createTextDoc(m_xMSF);
- log.println("... done");
-
- XDocumentInfoSupplier xDocInfoSup =
- (XDocumentInfoSupplier) UnoRuntime.queryInterface(XDocumentInfoSupplier.class,
- xTextDoc);
- XDocumentInfo xDocInfo = xDocInfoSup.getDocumentInfo();
- XPropertyContainer xPropContainer =
- (XPropertyContainer) UnoRuntime.queryInterface(XPropertyContainer.class,
- xDocInfo);
-
- log.println("Trying to add a existing property");
-
- boolean worked =
- addProperty(xPropContainer, "Author", (short) 0, "");
- assure("Could set an existing property", !worked);
- log.println("...done");
-
- log.println("Trying to add a integer property");
- worked =
- addProperty(xPropContainer, "intValue", com.sun.star.beans.PropertyAttribute.READONLY,
- new Integer(17));
- assure("Couldn't set an integer property", worked);
- log.println("...done");
-
- log.println("Trying to add a double property");
- worked =
- addProperty(xPropContainer, "doubleValue", com.sun.star.beans.PropertyAttribute.REMOVEABLE ,
- new Double(17.7));
- assure("Couldn't set an double property", worked);
- log.println("...done");
-
- log.println("Trying to add a boolean property");
- worked =
- addProperty(xPropContainer, "booleanValue", com.sun.star.beans.PropertyAttribute.REMOVEABLE,
- Boolean.TRUE);
- assure("Couldn't set an boolean property", worked);
- log.println("...done");
-
- log.println("Trying to add a date property");
- worked =
- addProperty(xPropContainer, "dateValue", com.sun.star.beans.PropertyAttribute.REMOVEABLE,
- new Date());
- assure("Couldn't set an date property", worked);
- log.println("...done");
-
- log.println("trying to remove a read only Property");
- try {
- xPropContainer.removeProperty ("intValue");
- assure("Could remove read only property", false);
- } catch (Exception e) {
- log.println("\tException was thrown "+e);
- log.println("\t...OK");
- }
- log.println("...done");
-
-
- String tempdir = System.getProperty("java.io.tmpdir");
- String fs = System.getProperty("file.separator");
-
- if (!tempdir.endsWith(fs)) {
- tempdir += fs;
- }
-
- tempdir = util.utils.getFullURL(tempdir);
-
- log.println("Storing the document");
-
- try {
- XStorable store =
- (XStorable) UnoRuntime.queryInterface(XStorable.class,
- xTextDoc);
- store.storeToURL(tempdir + "DocInfo.oot",
- new PropertyValue[] {});
- DesktopTools.closeDoc(xTextDoc);
- } catch (Exception e) {
- assure("Couldn't store document", false);
- }
-
- log.println("...done");
-
- log.println("loading the document");
-
- try {
- XComponentLoader xCL =
- (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class,
- m_xMSF.createInstance(
- "com.sun.star.frame.Desktop"));
- XComponent xComp =
- xCL.loadComponentFromURL(tempdir + "DocInfo.oot",
- "_blank", 0, new PropertyValue[] {});
- xTextDoc =
- (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,
- xComp);
- } catch (Exception e) {
- assure("Couldn't load document", false);
- }
-
- log.println("...done");
-
- xDocInfoSup =
- (XDocumentInfoSupplier) UnoRuntime.queryInterface(XDocumentInfoSupplier.class,
- xTextDoc);
- xDocInfo = xDocInfoSup.getDocumentInfo();
-
- XPropertySet xProps =
- (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
- xDocInfo);
-
- assure("Integer doesn't work",
- checkType(xProps, "intValue", "java.lang.Integer"));
- assure("Double doesn't work",
- checkType(xProps, "doubleValue", "java.lang.Double"));
- assure("Boolean doesn't work",
- checkType(xProps, "booleanValue", "java.lang.Boolean"));
- assure("Date doesn't work",
- checkType(xProps, "dateValue",
- "com.sun.star.util.DateTime"));
-
- xPropContainer =
- (XPropertyContainer) UnoRuntime.queryInterface(XPropertyContainer.class,
- xDocInfo);
-
- log.println("trying to remove a not user defined Property");
- try {
- xPropContainer.removeProperty ("Author");
- assure("Could remove non user defined property", false);
- } catch (Exception e) {
- log.println("\tException was thrown "+e);
- log.println("\t...OK");
- }
- log.println("...done");
-
- log.println("Trying to remove a user defined property");
- try {
- xPropContainer.removeProperty ("dateValue");
- log.println("\t...OK");
- } catch (Exception e) {
- log.println("\tException was thrown "+e);
- log.println("\t...FAILED");
- assure("Could not remove user defined property", false);
- }
- log.println("...done");
-
- }
-
- public void cleanup() {
- DesktopTools.closeDoc(xTextDoc);
- }
-
- private boolean checkType(XPropertySet xProps, String aName,
- String expected) {
- boolean ret = true;
- log.println("Checking " + expected);
-
- String getting =
- getPropertyByName(xProps, aName).getClass().getName();
-
- if (!getting.equals(expected)) {
- log.println("\t Expected: " + expected);
- log.println("\t Detting: " + getting);
- ret = false;
- }
-
- if (ret) {
- log.println("...OK");
- }
-
- return ret;
- }
-
- private Object getPropertyByName(XPropertySet xProps, String aName) {
- Object ret = null;
-
- try {
- ret = xProps.getPropertyValue(aName);
- } catch (Exception e) {
- log.println("\tCouldn't get Property " + aName);
- log.println("\tMessage " + e);
- }
-
- return ret;
- }
-
- private boolean addProperty(XPropertyContainer xPropContainer,
- String aName, short attr, Object defaults) {
- boolean ret = true;
-
- try {
- xPropContainer.addProperty(aName, attr, defaults);
- } catch (Exception e) {
- ret = false;
- log.println("\tCouldn't get Property " + aName);
- log.println("\tMessage " + e);
- }
-
- return ret;
- }
-}
diff --git a/sfx2/qa/complex/makefile.mk b/sfx2/qa/complex/makefile.mk
deleted file mode 100644
index b8bc897fccf7..000000000000
--- a/sfx2/qa/complex/makefile.mk
+++ /dev/null
@@ -1,61 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ = ..$/..
-TARGET = CheckGlobalEventBroadcaster_writer1
-PRJNAME = $(TARGET)
-PACKAGE = complex$/framework
-
-# --- Settings -----------------------------------------------------
-.INCLUDE: settings.mk
-
-
-#----- compile .java files -----------------------------------------
-
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
-JAVAFILES = CheckGlobalEventBroadcaster_writer1.java \
- DocumentMetaData.java \
- DocumentMetadataAccessTest.java
-
-JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
-
-SUBDIRS = DocHelper
-#----- make a jar from compiled files ------------------------------
-
-MAXLINELENGTH = 100000
-
-JARCLASSDIRS = $(PACKAGE)
-JARTARGET = $(TARGET).jar
-JARCOMPRESS = TRUE
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-
-run:
- +java -cp $(CLASSPATH) org.openoffice.Runner -TestBase java_complex -sce tests.sce -tdoc $(PWD)$/testdocuments
diff --git a/sfx2/qa/complex/sfx2/DocumentInfo.java b/sfx2/qa/complex/sfx2/DocumentInfo.java
new file mode 100755
index 000000000000..ca7ae8b1dda0
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/DocumentInfo.java
@@ -0,0 +1,362 @@
+/*************************************************************************
+ *
+ * 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.sfx2;
+
+import com.sun.star.beans.PropertyAttribute;
+import com.sun.star.beans.Property;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.beans.XPropertyContainer;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.beans.XPropertySetInfo;
+import com.sun.star.document.XDocumentInfo;
+import com.sun.star.document.XDocumentInfoSupplier;
+import com.sun.star.frame.XComponentLoader;
+import com.sun.star.frame.XStorable;
+import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.text.XTextDocument;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.util.Date;
+
+
+
+import util.DesktopTools;
+import util.WriterTools;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openoffice.test.OfficeConnection;
+import static org.junit.Assert.*;
+
+public class DocumentInfo
+{
+ XMultiServiceFactory m_xMSF = null;
+ XTextDocument xTextDoc = null;
+ XTextDocument xTextDocSecond = null;
+
+ @Test public void checkDocInfo()
+ {
+ m_xMSF = getMSF();
+
+ System.out.println("check wether there is a valid MultiServiceFactory");
+
+ assertNotNull("## Couldn't get MultiServiceFactory make sure your Office is started", m_xMSF);
+
+ // TODO: need other temp directory!
+ String tempdir = System.getProperty("java.io.tmpdir");
+ String fs = System.getProperty("file.separator");
+
+ if (!tempdir.endsWith(fs))
+ {
+ tempdir += fs;
+ }
+ tempdir = util.utils.getFullURL(tempdir);
+ final String sTempDocument = tempdir + "DocInfo.oot";
+
+ if (true)
+ {
+ System.out.println("... done");
+
+
+ System.out.println("Opening a Writer document");
+ xTextDoc = WriterTools.createTextDoc(m_xMSF);
+ System.out.println("... done");
+
+ XDocumentInfoSupplier xDocInfoSup = UnoRuntime.queryInterface(XDocumentInfoSupplier.class, xTextDoc);
+ XDocumentInfo xDocInfo = xDocInfoSup.getDocumentInfo();
+ XPropertyContainer xPropContainer = UnoRuntime.queryInterface(XPropertyContainer.class, xDocInfo);
+
+ System.out.println("Trying to add a existing property");
+
+ boolean worked = addProperty(xPropContainer, "Author", (short) 0, "");
+ assertTrue("Could set an existing property", !worked);
+ System.out.println("...done");
+
+ System.out.println("Trying to add a integer property");
+ worked = addProperty(xPropContainer, "intValue", com.sun.star.beans.PropertyAttribute.READONLY, new Integer(17));
+ assertTrue("Couldn't set an integer property", worked);
+ System.out.println("...done");
+
+ System.out.println("Trying to add a double property");
+ worked = addProperty(xPropContainer, "doubleValue", com.sun.star.beans.PropertyAttribute.REMOVEABLE, new Double(17.7));
+ assertTrue("Couldn't set an double property", worked);
+ System.out.println("...done");
+
+ System.out.println("Trying to add a boolean property");
+ worked = addProperty(xPropContainer, "booleanValue", com.sun.star.beans.PropertyAttribute.REMOVEABLE, Boolean.TRUE);
+ assertTrue("Couldn't set an boolean property", worked);
+ System.out.println("...done");
+
+ System.out.println("Trying to add a date property");
+ worked = addProperty(xPropContainer, "dateValue", com.sun.star.beans.PropertyAttribute.REMOVEABLE, new Date());
+ assertTrue("Couldn't set an date property", worked);
+ System.out.println("...done");
+
+ System.out.println("trying to remove a read only Property");
+ try
+ {
+ xPropContainer.removeProperty("intValue");
+ fail("Could remove read only property");
+ }
+ catch (Exception e)
+ {
+ System.out.println("\tException was thrown " + e);
+ System.out.println("\t...OK");
+ }
+ System.out.println("...done");
+
+ XPropertySet xProps2 = UnoRuntime.queryInterface(XPropertySet.class, xPropContainer);
+ showPropertySet(xProps2);
+
+
+ System.out.println("Storing the document");
+ try
+ {
+ XStorable store = UnoRuntime.queryInterface(XStorable.class, xTextDoc);
+ store.storeToURL(sTempDocument, new PropertyValue[] {});
+ DesktopTools.closeDoc(xTextDoc);
+ }
+ catch (Exception e)
+ {
+ fail("Couldn't store document");
+ }
+
+ System.out.println("...done");
+ }
+
+
+ if (true)
+ {
+ System.out.println("loading the document");
+
+ try
+ {
+ XComponentLoader xCL = UnoRuntime.queryInterface(XComponentLoader.class, m_xMSF.createInstance("com.sun.star.frame.Desktop"));
+ XComponent xComp = xCL.loadComponentFromURL(sTempDocument, "_blank", 0, new PropertyValue[] {});
+ xTextDocSecond = UnoRuntime.queryInterface(XTextDocument.class, xComp);
+ }
+ catch (Exception e)
+ {
+ fail("Couldn't load document");
+ }
+
+ System.out.println("...done");
+
+ XDocumentInfoSupplier xDocInfoSup = UnoRuntime.queryInterface(XDocumentInfoSupplier.class, xTextDocSecond);
+ XDocumentInfo xDocInfo = xDocInfoSup.getDocumentInfo();
+ XPropertyContainer xPropContainer = UnoRuntime.queryInterface(XPropertyContainer.class, xDocInfo);
+
+ XPropertySet xProps = UnoRuntime.queryInterface(XPropertySet.class, xDocInfo);
+ showPropertySet(xProps);
+
+ assertTrue("Double doesn't work", checkType(xProps, "doubleValue", "java.lang.Double"));
+ assertTrue("Boolean doesn't work", checkType(xProps, "booleanValue", "java.lang.Boolean"));
+
+ // TODO: dateValue does not exist.
+ // assertTrue("Date doesn't work", checkType(xProps, "dateValue", "com.sun.star.util.DateTime"));
+
+ // TODO: is java.lang.Double
+ // assertTrue("Integer doesn't work", checkType(xProps, "intValue", "java.lang.Integer"));
+
+ xPropContainer = UnoRuntime.queryInterface(XPropertyContainer.class, xDocInfo);
+
+ System.out.println("trying to remove a not user defined Property");
+ try
+ {
+ xPropContainer.removeProperty("Author");
+ fail("Could remove non user defined property");
+ }
+ catch (Exception e)
+ {
+ System.out.println("\tException was thrown " + e);
+ System.out.println("\t...OK");
+ }
+ System.out.println("...done");
+
+
+ System.out.println("Trying to remove a user defined property");
+ try
+ {
+ xPropContainer.removeProperty("booleanValue");
+ System.out.println("\t...OK");
+ }
+ catch (Exception e)
+ {
+ System.out.println("\tException was thrown " + e);
+ System.out.println("\t...FAILED");
+ fail("Could not remove user defined property");
+ }
+ showPropertySet(xProps);
+ System.out.println("...done");
+ }
+ }
+
+ @After public void cleanup()
+ {
+ DesktopTools.closeDoc(xTextDocSecond);
+ DesktopTools.closeDoc(xTextDoc);
+ }
+
+ private void showPropertySet(XPropertySet xProps)
+ {
+ try
+ {
+ // get an XPropertySet, here the one of a text cursor
+ // XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, mxDocCursor);
+
+ // get the property info interface of this XPropertySet
+ XPropertySetInfo xPropsInfo = xProps.getPropertySetInfo();
+
+ // get all properties (NOT the values) from XPropertySetInfo
+ Property[] aProps = xPropsInfo.getProperties();
+ int i;
+ for (i = 0; i < aProps.length; ++i) {
+ // number of property within this info object
+ System.out.print("Property #" + i);
+
+ // name of property
+ System.out.print(": Name<" + aProps[i].Name);
+
+ // handle of property (only for XFastPropertySet)
+ System.out.print("> Handle<" + aProps[i].Handle);
+
+ // type of property
+ System.out.print("> " + aProps[i].Type.toString());
+
+ // attributes (flags)
+ System.out.print(" Attributes<");
+ short nAttribs = aProps[i].Attributes;
+ if ((nAttribs & PropertyAttribute.MAYBEVOID) != 0)
+ System.out.print("MAYBEVOID|");
+ if ((nAttribs & PropertyAttribute.BOUND) != 0)
+ System.out.print("BOUND|");
+ if ((nAttribs & PropertyAttribute.CONSTRAINED) != 0)
+ System.out.print("CONSTRAINED|");
+ if ((nAttribs & PropertyAttribute.READONLY) != 0)
+ System.out.print("READONLY|");
+ if ((nAttribs & PropertyAttribute.TRANSIENT) != 0)
+ System.out.print("TRANSIENT|");
+ if ((nAttribs & PropertyAttribute.MAYBEAMBIGUOUS ) != 0)
+ System.out.print("MAYBEAMBIGUOUS|");
+ if ((nAttribs & PropertyAttribute.MAYBEDEFAULT) != 0)
+ System.out.print("MAYBEDEFAULT|");
+ if ((nAttribs & PropertyAttribute.REMOVEABLE) != 0)
+ System.out.print("REMOVEABLE|");
+ System.out.println("0>");
+ }
+ } catch (Exception e) {
+ // If anything goes wrong, give the user a stack trace
+ e.printStackTrace(System.out);
+ }
+ }
+
+ private boolean checkType(XPropertySet xProps, String aName,
+ String expected)
+ {
+ boolean ret = true;
+ System.out.println("Checking " + expected);
+
+ String getting =
+ getPropertyByName(xProps, aName).getClass().getName();
+
+ if (!getting.equals(expected))
+ {
+ System.out.println("\t Expected: " + expected);
+ System.out.println("\t Getting: " + getting);
+ ret = false;
+ }
+
+ if (ret)
+ {
+ System.out.println("...OK");
+ }
+ return ret;
+ }
+
+ private Object getPropertyByName(XPropertySet xProps, String aName)
+ {
+ Object ret = null;
+
+ try
+ {
+ ret = xProps.getPropertyValue(aName);
+ }
+ catch (Exception e)
+ {
+ System.out.println("\tCouldn't get Property " + aName);
+ System.out.println("\tMessage " + e);
+ }
+
+ return ret;
+ }
+
+ private boolean addProperty(XPropertyContainer xPropContainer,
+ String aName, short attr, Object defaults)
+ {
+ boolean ret = true;
+
+ try
+ {
+ xPropContainer.addProperty(aName, attr, defaults);
+ }
+ catch (Exception e)
+ {
+ ret = false;
+ System.out.println("\tCouldn't get Property " + aName);
+ System.out.println("\tMessage " + e);
+ }
+
+ return ret;
+ }
+
+ private XMultiServiceFactory getMSF()
+ {
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());
+ return xMSF1;
+ }
+
+ // setup and close connections
+ @BeforeClass public static void setUpConnection() throws Exception
+ {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "starting class: " + DocumentInfo.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
+ connection.setUp();
+ }
+
+ @AfterClass public static void tearDownConnection()
+ throws InterruptedException, com.sun.star.uno.Exception
+ {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "finishing class: " + DocumentInfo.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
+ connection.tearDown();
+ }
+ private static final OfficeConnection connection = new OfficeConnection();
+}
diff --git a/sfx2/qa/complex/DocumentMetadataAccessTest.java b/sfx2/qa/complex/sfx2/DocumentMetadataAccess.java
index a61280c45fe5..d145b9028473 100644..100755
--- a/sfx2/qa/complex/DocumentMetadataAccessTest.java
+++ b/sfx2/qa/complex/sfx2/DocumentMetadataAccess.java
@@ -25,38 +25,60 @@
*
************************************************************************/
-package complex.framework;
+package complex.sfx2;
-import complexlib.ComplexTestCase;
+// import complexlib.ComplexTestCase;
+import com.sun.star.beans.Pair;
+import com.sun.star.rdf.Literal;
+import com.sun.star.rdf.XLiteral;
+import com.sun.star.rdf.XNamedGraph;
+import com.sun.star.rdf.BlankNode;
+import com.sun.star.rdf.XQuerySelectResult;
+import com.sun.star.rdf.XNode;
+import com.sun.star.rdf.XDocumentRepository;
+import com.sun.star.rdf.XMetadatable;
+import com.sun.star.rdf.Statement;
+import com.sun.star.rdf.FileFormat;
+import com.sun.star.rdf.URIs;
+import com.sun.star.rdf.URI;
+import com.sun.star.rdf.XDocumentMetadataAccess;
+import com.sun.star.rdf.XRepositorySupplier;
+import com.sun.star.rdf.XRepository;
+import com.sun.star.rdf.XBlankNode;
+import com.sun.star.rdf.XURI;
import helper.StreamSimulator;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
-import com.sun.star.uno.Any;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XComponent;
-import com.sun.star.lang.XInitialization;
+
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.lang.WrappedTargetException;
import com.sun.star.lang.WrappedTargetRuntimeException;
import com.sun.star.beans.XPropertySet;
import com.sun.star.beans.PropertyValue;
-import com.sun.star.beans.Pair;
import com.sun.star.beans.StringPair;
import com.sun.star.container.XEnumerationAccess;
import com.sun.star.container.XEnumeration;
-import com.sun.star.container.ElementExistException;
-import com.sun.star.container.NoSuchElementException;
import com.sun.star.io.XInputStream;
-import com.sun.star.io.XOutputStream;
import com.sun.star.util.XCloseable;
import com.sun.star.frame.XStorable;
-import com.sun.star.frame.XLoadable;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XTextRange;
import com.sun.star.text.XText;
-import com.sun.star.rdf.*;
+import complex.sfx2.tools.TestDocument;
+import lib.TestParameters;
+
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openoffice.test.OfficeConnection;
+import static org.junit.Assert.*;
/**
* Test case for interface com.sun.star.rdf.XDocumentMetadataAccess
@@ -68,7 +90,7 @@ import com.sun.star.rdf.*;
*
* @author mst
*/
-public class DocumentMetadataAccessTest extends ComplexTestCase
+public class DocumentMetadataAccess
{
XMultiServiceFactory xMSF;
XComponentContext xContext;
@@ -105,72 +127,77 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
XRepositorySupplier xRS;
XDocumentMetadataAccess xDMA;
- public String[] getTestMethodNames ()
- {
- return new String[] { "check", "checkRDFa" };
- }
+// public String[] getTestMethodNames ()
+// {
+// return new String[] { "check", "checkRDFa" };
+// }
+ /**
+ * The test parameters
+ */
+ private static TestParameters param = null;
- public void before()
+ @Before public void before()
{
try {
- xMSF = (XMultiServiceFactory) param.getMSF();
- assure("could not create MultiServiceFactory.", xMSF != null);
- XPropertySet xPropertySet = (XPropertySet)
- UnoRuntime.queryInterface(XPropertySet.class, xMSF);
+ xMSF = getMSF();
+ param = new TestParameters();
+ param.put("ServiceFactory", xMSF); // important for param.getMSF()
+
+ assertNotNull("could not create MultiServiceFactory.", xMSF);
+ XPropertySet xPropertySet = UnoRuntime.queryInterface(XPropertySet.class, xMSF);
Object defaultCtx = xPropertySet.getPropertyValue("DefaultContext");
- xContext = (XComponentContext)
- UnoRuntime.queryInterface(XComponentContext.class, defaultCtx);
- assure("could not get component context.", xContext != null);
+ xContext = UnoRuntime.queryInterface(XComponentContext.class, defaultCtx);
+ assertNotNull("could not get component context.", xContext);
tempDir = util.utils.getOfficeTemp/*Dir*/(xMSF);
- log.println("tempdir: " + tempDir);
+ System.out.println("tempdir: " + tempDir);
foo = URI.create(xContext, "uri:foo");
- assure("foo", null != foo);
+ assertNotNull("foo", foo);
bar = URI.create(xContext, "uri:bar");
- assure("bar", null != bar);
+ assertNotNull("bar", bar);
baz = URI.create(xContext, "uri:baz");
- assure("baz", null != baz);
+ assertNotNull("baz", baz);
blank1 = BlankNode.create(xContext, "_:1");
- assure("blank1", null != blank1);
+ assertNotNull("blank1", blank1);
blank2 = BlankNode.create(xContext, "_:2");
- assure("blank2", null != blank2);
+ assertNotNull("blank2", blank2);
blank3 = BlankNode.create(xContext, "_:3");
- assure("blank3", null != blank3);
+ assertNotNull("blank3", blank3);
blank4 = BlankNode.create(xContext, "_:4");
- assure("blank4", null != blank4);
+ assertNotNull("blank4", blank4);
rdf_type = URI.createKnown(xContext, URIs.RDF_TYPE);
- assure("rdf_type", null != rdf_type);
+ assertNotNull("rdf_type", rdf_type);
rdfs_label = URI.createKnown(xContext, URIs.RDFS_LABEL);
- assure("rdfs_label", null != rdfs_label);
+ assertNotNull("rdfs_label", rdfs_label);
pkg_Document = URI.createKnown(xContext, URIs.PKG_DOCUMENT);
- assure("pkg_Document", null != pkg_Document);
+ assertNotNull("pkg_Document", pkg_Document);
pkg_hasPart = URI.createKnown(xContext, URIs.PKG_HASPART);
- assure("pkg_hasPart", null != pkg_hasPart);
+ assertNotNull("pkg_hasPart", pkg_hasPart);
pkg_MetadataFile = URI.createKnown(xContext, URIs.PKG_METADATAFILE);
- assure("pkg_MetadataFile", null != pkg_MetadataFile);
+ assertNotNull("pkg_MetadataFile", pkg_MetadataFile);
odf_ContentFile = URI.createKnown(xContext, URIs.ODF_CONTENTFILE);
- assure("odf_ContentFile", null != odf_ContentFile);
+ assertNotNull("odf_ContentFile", odf_ContentFile);
odf_StylesFile = URI.createKnown(xContext, URIs.ODF_STYLESFILE);
- assure("odf_StylesFile", null != odf_StylesFile);
+ assertNotNull("odf_StylesFile", odf_StylesFile);
odf_Element = URI.createKnown(xContext, URIs.ODF_ELEMENT);
- assure("odf_Element", null != odf_Element);
+ assertNotNull("odf_Element", odf_Element);
} catch (Exception e) {
report(e);
}
}
- public void after()
+ @After public void after()
{
xRep = null;
xRS = null;
xDMA = null;
}
- public void check()
+ @Test public void check()
{
XComponent xComp = null;
XComponent xComp2 = null;
@@ -178,7 +205,7 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
XEnumeration xStmtsEnum;
XNamedGraph xManifest;
- log.println("Creating document with Repository...");
+ System.out.println("Creating document with Repository...");
// we cannot create a XDMA directly, we must create
// a document and get it from there :(
@@ -186,248 +213,241 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
PropertyValue[] loadProps = new PropertyValue[1];
loadProps[0] = new PropertyValue();
loadProps[0].Name = "Hidden";
- loadProps[0].Value = new Boolean(true);
+ loadProps[0].Value = true;
xComp = util.DesktopTools.openNewDoc(xMSF, "swriter", loadProps);
- XTextDocument xText = (XTextDocument) UnoRuntime.queryInterface(
- XTextDocument.class, xComp);
+ XTextDocument xText = UnoRuntime.queryInterface(XTextDocument.class, xComp);
- XRepositorySupplier xRS = (XRepositorySupplier)
- UnoRuntime.queryInterface(XRepositorySupplier.class, xComp);
- assure("xRS null", null != xRS);
- XDocumentMetadataAccess xDMA = (XDocumentMetadataAccess)
- UnoRuntime.queryInterface(XDocumentMetadataAccess.class, xRS);
- assure("xDMA null", null != xDMA);
- xRep = xRS.getRDFRepository();
- assure("xRep null", null != xRep);
+ XRepositorySupplier xRepoSupplier = UnoRuntime.queryInterface(XRepositorySupplier.class, xComp);
+ assertNotNull("xRS null", xRepoSupplier);
+ XDocumentMetadataAccess xDocMDAccess = UnoRuntime.queryInterface(XDocumentMetadataAccess.class, xRepoSupplier);
+ assertNotNull("xDMA null", xDocMDAccess);
+ xRep = xRepoSupplier.getRDFRepository();
+ assertNotNull("xRep null", xRep);
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking that new repository is initialized...");
+ System.out.println("Checking that new repository is initialized...");
- XURI xBaseURI = (XURI) xDMA;
+ XURI xBaseURI = (XURI) xDocMDAccess;
String baseURI = xBaseURI.getStringValue();
- assure("new: baseURI",
- null != xBaseURI && !xBaseURI.getStringValue().equals(""));
+ assertNotNull("new: baseURI", xBaseURI );
+ assertTrue("new: baseURI", !xBaseURI.getStringValue().equals(""));
- assure("new: # graphs", 1 == xRep.getGraphNames().length);
+ assertTrue("new: # graphs", 1 == xRep.getGraphNames().length);
XURI manifest = URI.createNS(xContext, xBaseURI.getStringValue(),
manifestPath);
xManifest = xRep.getGraph(manifest);
- assure("new: manifest graph", null != xManifest);
+ assertTrue("new: manifest graph", null != xManifest);
Statement[] manifestStmts = getManifestStmts(xBaseURI);
xStmtsEnum = xRep.getStatements(null, null, null);
- assure("new: manifest graph", eq(xStmtsEnum, manifestStmts));
+ assertTrue("new: manifest graph", eq(xStmtsEnum, manifestStmts));
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking some invalid args...");
+ System.out.println("Checking some invalid args...");
String content = "behold, for i am the content.";
XTextRange xTR = new TestRange(content);
XMetadatable xM = (XMetadatable) xTR;
try {
- xDMA.getElementByURI(null);
- assure("getElementByURI: null allowed", false);
+ xDocMDAccess.getElementByURI(null);
+ fail("getElementByURI: null allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.getMetadataGraphsWithType(null);
- assure("getMetadataGraphsWithType: null URI allowed", false);
+ xDocMDAccess.getMetadataGraphsWithType(null);
+ fail("getMetadataGraphsWithType: null URI allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("", new XURI[0]);
- assure("addMetadataFile: empty filename allowed", false);
+ xDocMDAccess.addMetadataFile("", new XURI[0]);
+ fail("addMetadataFile: empty filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("/foo", new XURI[0]);
- assure("addMetadataFile: absolute filename allowed", false);
+ xDocMDAccess.addMetadataFile("/foo", new XURI[0]);
+ fail("addMetadataFile: absolute filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("fo\"o", new XURI[0]);
- assure("addMetadataFile: invalid filename allowed", false);
+ xDocMDAccess.addMetadataFile("fo\"o", new XURI[0]);
+ fail("addMetadataFile: invalid filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("../foo", new XURI[0]);
- assure("addMetadataFile: filename with .. allowed", false);
+ xDocMDAccess.addMetadataFile("../foo", new XURI[0]);
+ fail("addMetadataFile: filename with .. allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("foo/../../bar", new XURI[0]);
- assure("addMetadataFile: filename with nest .. allowed", false);
+ xDocMDAccess.addMetadataFile("foo/../../bar", new XURI[0]);
+ fail("addMetadataFile: filename with nest .. allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("foo/././bar", new XURI[0]);
- assure("addMetadataFile: filename with nest . allowed", false);
+ xDocMDAccess.addMetadataFile("foo/././bar", new XURI[0]);
+ fail("addMetadataFile: filename with nest . allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("content.xml", new XURI[0]);
- assure("addMetadataFile: content.xml allowed", false);
+ xDocMDAccess.addMetadataFile("content.xml", new XURI[0]);
+ fail("addMetadataFile: content.xml allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("styles.xml", new XURI[0]);
- assure("addMetadataFile: styles.xml allowed", false);
+ xDocMDAccess.addMetadataFile("styles.xml", new XURI[0]);
+ fail("addMetadataFile: styles.xml allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("meta.xml", new XURI[0]);
- assure("addMetadataFile: meta.xml allowed", false);
+ xDocMDAccess.addMetadataFile("meta.xml", new XURI[0]);
+ fail("addMetadataFile: meta.xml allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addMetadataFile("settings.xml", new XURI[0]);
- assure("addMetadataFile: settings.xml allowed", false);
+ xDocMDAccess.addMetadataFile("settings.xml", new XURI[0]);
+ fail("addMetadataFile: settings.xml allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.importMetadataFile(FileFormat.RDF_XML, null, "foo",
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML, null, "foo",
foo, new XURI[0]);
- assure("importMetadataFile: null stream allowed", false);
+ fail("importMetadataFile: null stream allowed");
} catch (IllegalArgumentException e) {
// ignore
}
+
+ final String sEmptyRDF = TestDocument.getUrl("empty.rdf");
try {
- XInputStream xFooIn =
- new StreamSimulator(tempDir + "empty.rdf", true, param);
- xDMA.importMetadataFile(FileFormat.RDF_XML, xFooIn, "",
+ XInputStream xFooIn = new StreamSimulator(sEmptyRDF, true, param);
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML, xFooIn, "",
foo, new XURI[0]);
- assure("importMetadataFile: empty filename allowed", false);
+ fail("importMetadataFile: empty filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
XInputStream xFooIn =
- new StreamSimulator(tempDir + "empty.rdf", true, param);
- xDMA.importMetadataFile(FileFormat.RDF_XML, xFooIn, "meta.xml",
+ new StreamSimulator(sEmptyRDF, true, param);
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML, xFooIn, "meta.xml",
foo, new XURI[0]);
- assure("importMetadataFile: meta.xml filename allowed", false);
+ fail("importMetadataFile: meta.xml filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
XInputStream xFooIn =
- new StreamSimulator(tempDir + "empty.rdf", true, param);
- xDMA.importMetadataFile(FileFormat.RDF_XML,
+ new StreamSimulator(sEmptyRDF, true, param);
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML,
xFooIn, "foo", null, new XURI[0]);
- assure("importMetadataFile: null base URI allowed", false);
+ fail("importMetadataFile: null base URI allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
XInputStream xFooIn =
- new StreamSimulator(tempDir + "empty.rdf", true, param);
- xDMA.importMetadataFile(FileFormat.RDF_XML,
+ new StreamSimulator(sEmptyRDF, true, param);
+ xDocMDAccess.importMetadataFile(FileFormat.RDF_XML,
xFooIn, "foo", rdf_type, new XURI[0]);
- assure("importMetadataFile: non-absolute base URI allowed",
- false);
+ fail("importMetadataFile: non-absolute base URI allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.removeMetadataFile(null);
- assure("removeMetadataFile: null URI allowed", false);
+ xDocMDAccess.removeMetadataFile(null);
+ fail("removeMetadataFile: null URI allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addContentOrStylesFile("");
- assure("addContentOrStylesFile: empty filename allowed",
- false);
+ xDocMDAccess.addContentOrStylesFile("");
+ fail("addContentOrStylesFile: empty filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addContentOrStylesFile("/content.xml");
- assure("addContentOrStylesFile: absolute filename allowed",
- false);
+ xDocMDAccess.addContentOrStylesFile("/content.xml");
+ fail("addContentOrStylesFile: absolute filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.addContentOrStylesFile("foo.rdf");
- assure("addContentOrStylesFile: invalid filename allowed",
- false);
+ xDocMDAccess.addContentOrStylesFile("foo.rdf");
+ fail("addContentOrStylesFile: invalid filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.removeContentOrStylesFile("");
- assure("removeContentOrStylesFile: empty filename allowed",
- false);
+ xDocMDAccess.removeContentOrStylesFile("");
+ fail("removeContentOrStylesFile: empty filename allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.loadMetadataFromStorage(null, foo, null);
- assure("loadMetadataFromStorage: null storage allowed", false);
+ xDocMDAccess.loadMetadataFromStorage(null, foo, null);
+ fail("loadMetadataFromStorage: null storage allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.storeMetadataToStorage(null/*, base*/);
- assure("storeMetadataToStorage: null storage allowed", false);
+ xDocMDAccess.storeMetadataToStorage(null/*, base*/);
+ fail("storeMetadataToStorage: null storage allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.loadMetadataFromMedium(new PropertyValue[0]);
- assure("loadMetadataFromMedium: empty medium allowed", false);
+ xDocMDAccess.loadMetadataFromMedium(new PropertyValue[0]);
+ fail("loadMetadataFromMedium: empty medium allowed");
} catch (IllegalArgumentException e) {
// ignore
}
try {
- xDMA.storeMetadataToMedium(new PropertyValue[0]);
- assure("storeMetadataToMedium: empty medium allowed", false);
+ xDocMDAccess.storeMetadataToMedium(new PropertyValue[0]);
+ fail("storeMetadataToMedium: empty medium allowed");
} catch (IllegalArgumentException e) {
// ignore
}
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking file addition/removal...");
+ System.out.println("Checking file addition/removal...");
- xDMA.removeContentOrStylesFile(contentPath);
+ xDocMDAccess.removeContentOrStylesFile(contentPath);
xStmtsEnum = xManifest.getStatements(null, null, null);
- assure("removeContentOrStylesFile (content)",
+ assertTrue("removeContentOrStylesFile (content)",
eq(xStmtsEnum, new Statement[] {
manifestStmts[0], manifestStmts[2], manifestStmts[4]
}));
- xDMA.addContentOrStylesFile(contentPath);
+ xDocMDAccess.addContentOrStylesFile(contentPath);
xStmtsEnum = xManifest.getStatements(null, null, null);
- assure("addContentOrStylesFile (content)",
+ assertTrue("addContentOrStylesFile (content)",
eq(xStmtsEnum, manifestStmts));
- xDMA.removeContentOrStylesFile(stylesPath);
+ xDocMDAccess.removeContentOrStylesFile(stylesPath);
xStmtsEnum = xManifest.getStatements(null, null, null);
- assure("removeContentOrStylesFile (styles)",
+ assertTrue("removeContentOrStylesFile (styles)",
eq(xStmtsEnum, new Statement[] {
manifestStmts[0], manifestStmts[1], manifestStmts[3]
}));
- xDMA.addContentOrStylesFile(stylesPath);
+ xDocMDAccess.addContentOrStylesFile(stylesPath);
xStmtsEnum = xManifest.getStatements(null, null, null);
- assure("addContentOrStylesFile (styles)",
+ assertTrue("addContentOrStylesFile (styles)",
eq(xStmtsEnum, manifestStmts));
XURI xFoo = URI.createNS(xContext, xBaseURI.getStringValue(),
@@ -438,70 +458,67 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
new Statement(xFoo, rdf_type, pkg_MetadataFile, manifest);
Statement xM_FooTypeBar =
new Statement(xFoo, rdf_type, bar, manifest);
- xDMA.addMetadataFile(fooPath, new XURI[] { bar });
+ xDocMDAccess.addMetadataFile(fooPath, new XURI[] { bar });
xStmtsEnum = xManifest.getStatements(null, null, null);
- assure("addMetadataFile",
+ assertTrue("addMetadataFile",
eq(xStmtsEnum, merge(manifestStmts, new Statement[] {
xM_BaseHaspartFoo, xM_FooTypeMetadata, xM_FooTypeBar
})));
- XURI[] graphsBar = xDMA.getMetadataGraphsWithType(bar);
- assure("getMetadataGraphsWithType",
+ XURI[] graphsBar = xDocMDAccess.getMetadataGraphsWithType(bar);
+ assertTrue("getMetadataGraphsWithType",
graphsBar.length == 1 && eq(graphsBar[0], xFoo));
- xDMA.removeMetadataFile(xFoo);
+ xDocMDAccess.removeMetadataFile(xFoo);
xStmtsEnum = xManifest.getStatements(null, null, null);
- assure("removeMetadataFile",
+ assertTrue("removeMetadataFile",
eq(xStmtsEnum, manifestStmts));
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking mapping...");
+ System.out.println("Checking mapping...");
- XEnumerationAccess xTextEnum = (XEnumerationAccess)
- UnoRuntime.queryInterface(XEnumerationAccess.class,
- xText.getText());
+ XEnumerationAccess xTextEnum = UnoRuntime.queryInterface(XEnumerationAccess.class, xText.getText());
Object o = xTextEnum.createEnumeration().nextElement();
- XMetadatable xMeta1 = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, o);
+ XMetadatable xMeta1 = UnoRuntime.queryInterface(XMetadatable.class, o);
XURI uri;
XMetadatable xMeta;
- xMeta = xDMA.getElementByURI(xMeta1);
- assure("getElementByURI: null", null != xMeta);
+ xMeta = xDocMDAccess.getElementByURI(xMeta1);
+ assertTrue("getElementByURI: null", null != xMeta);
String XmlId = xMeta.getMetadataReference().Second;
String XmlId1 = xMeta1.getMetadataReference().Second;
- assure("getElementByURI: no xml id", !XmlId.equals(""));
- assure("getElementByURI: different xml id", XmlId.equals(XmlId1));
+ assertTrue("getElementByURI: no xml id", !XmlId.equals(""));
+ assertTrue("getElementByURI: different xml id", XmlId.equals(XmlId1));
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking storing and loading...");
+ System.out.println("Checking storing and loading...");
XURI xFoobar = URI.createNS(xContext, xBaseURI.getStringValue(),
fooBarPath);
Statement[] metadataStmts = getMetadataFileStmts(xBaseURI,
fooBarPath);
- xDMA.addMetadataFile(fooBarPath, new XURI[0]);
+ xDocMDAccess.addMetadataFile(fooBarPath, new XURI[0]);
xStmtsEnum = xRep.getStatements(null, null, null);
- assure("addMetadataFile",
+ assertTrue("addMetadataFile",
eq(xStmtsEnum, merge(manifestStmts, metadataStmts )));
Statement xFoobar_FooBarFoo =
new Statement(foo, bar, foo, xFoobar);
xRep.getGraph(xFoobar).addStatement(foo, bar, foo);
xStmtsEnum = xRep.getStatements(null, null, null);
- assure("addStatement",
+ assertTrue("addStatement",
eq(xStmtsEnum, merge(manifestStmts, merge(metadataStmts,
new Statement[] { xFoobar_FooBarFoo }))));
PropertyValue noMDNoContentFile = new PropertyValue();
noMDNoContentFile.Name = "URL";
- noMDNoContentFile.Value = util.utils.getFullTestURL("CUSTOM.odt");
+ noMDNoContentFile.Value = TestDocument.getUrl("CUSTOM.odt");
PropertyValue noMDFile = new PropertyValue();
noMDFile.Name = "URL";
- noMDFile.Value = util.utils.getFullTestURL("TEST.odt");
+ noMDFile.Value = TestDocument.getUrl("TEST.odt");
PropertyValue file = new PropertyValue();
file.Name = "URL";
file.Value = tempDir + "TESTDMA.odt";
@@ -520,76 +537,72 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
xStmtsEnum = xRep.getStatements(null, null, null);
XURI[] graphs = xRep.getGraphNames();
- xDMA.storeMetadataToMedium(args);
+ xDocMDAccess.storeMetadataToMedium(args);
// this should re-init
- xDMA.loadMetadataFromMedium(argsEmptyNoContent);
- xRep = xRS.getRDFRepository();
- assure("xRep null", null != xRep);
- assure("baseURI still tdoc?",
- !baseURI.equals(xDMA.getStringValue()));
- Statement[] manifestStmts2 = getManifestStmts((XURI) xDMA);
+ xDocMDAccess.loadMetadataFromMedium(argsEmptyNoContent);
+ xRep = xRepoSupplier.getRDFRepository();
+ assertTrue("xRep null", null != xRep);
+ assertTrue("baseURI still tdoc?",
+ !baseURI.equals(xDocMDAccess.getStringValue()));
+ Statement[] manifestStmts2 = getManifestStmts((XURI) xDocMDAccess);
xStmtsEnum = xRep.getStatements(null, null, null);
// there is no content or styles file in here, so we have just
// the package stmt
- assure("loadMetadataFromMedium (no metadata, no content)",
+ assertTrue("loadMetadataFromMedium (no metadata, no content)",
eq(xStmtsEnum, new Statement[] { manifestStmts2[0] }));
// this should re-init
- xDMA.loadMetadataFromMedium(argsEmpty);
- xRep = xRS.getRDFRepository();
- assure("xRep null", null != xRep);
- assure("baseURI still tdoc?",
- !baseURI.equals(xDMA.getStringValue()));
- Statement[] manifestStmts3 = getManifestStmts((XURI) xDMA);
+ xDocMDAccess.loadMetadataFromMedium(argsEmpty);
+ xRep = xRepoSupplier.getRDFRepository();
+ assertTrue("xRep null", null != xRep);
+ assertTrue("baseURI still tdoc?",
+ !baseURI.equals(xDocMDAccess.getStringValue()));
+ Statement[] manifestStmts3 = getManifestStmts((XURI) xDocMDAccess);
xStmtsEnum = xRep.getStatements(null, null, null);
- assure("loadMetadataFromMedium (no metadata)",
+ assertTrue("loadMetadataFromMedium (no metadata)",
eq(xStmtsEnum, manifestStmts3));
- xDMA.loadMetadataFromMedium(args);
- xRep = xRS.getRDFRepository();
- assure("xRep null", null != xRep);
- Statement[] manifestStmts4 = getManifestStmts((XURI) xDMA);
- Statement[] metadataStmts4 = getMetadataFileStmts((XURI) xDMA,
+ xDocMDAccess.loadMetadataFromMedium(args);
+ xRep = xRepoSupplier.getRDFRepository();
+ assertTrue("xRep null", null != xRep);
+ Statement[] manifestStmts4 = getManifestStmts((XURI) xDocMDAccess);
+ Statement[] metadataStmts4 = getMetadataFileStmts((XURI) xDocMDAccess,
fooBarPath);
xStmtsEnum = xRep.getStatements(null, null, null);
- assure("some graph(s) not reloaded",
+ assertTrue("some graph(s) not reloaded",
graphs.length == xRep.getGraphNames().length);
- XURI xFoobar4 = URI.createNS(xContext, xDMA.getStringValue(),
+ XURI xFoobar4 = URI.createNS(xContext, xDocMDAccess.getStringValue(),
fooBarPath);
Statement xFoobar_FooBarFoo4 =
new Statement(foo, bar, foo, xFoobar4);
- assure("loadMetadataFromMedium (re-load)",
+ assertTrue("loadMetadataFromMedium (re-load)",
eq(xStmtsEnum, merge(manifestStmts4, merge(metadataStmts4,
new Statement[] { xFoobar_FooBarFoo4 }))));
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking storing and loading via model...");
+ System.out.println("Checking storing and loading via model...");
String f = tempDir + "TESTPARA.odt";
- XStorable xStor = (XStorable) UnoRuntime.queryInterface(
- XStorable.class, xRS);
+ XStorable xStor = UnoRuntime.queryInterface(XStorable.class, xRepoSupplier);
xStor.storeToURL(f, new PropertyValue[0]);
xComp2 = util.DesktopTools.loadDoc(xMSF, f, loadProps);
- XDocumentMetadataAccess xDMA2 = (XDocumentMetadataAccess)
- UnoRuntime.queryInterface(XDocumentMetadataAccess.class,
- xComp2);
- assure("xDMA2 null", null != xDMA2);
+ XDocumentMetadataAccess xDMA2 = UnoRuntime.queryInterface(XDocumentMetadataAccess.class, xComp2);
+ assertTrue("xDMA2 null", null != xDMA2);
- XRepositorySupplier xRS2 = (XRepositorySupplier)
- UnoRuntime.queryInterface(XRepositorySupplier.class, xComp2);
- assure("xRS2 null", null != xRS2);
+ XRepositorySupplier xRS2 = UnoRuntime.queryInterface(XRepositorySupplier.class, xComp2);
+ assertTrue("xRS2 null", null != xRS2);
XRepository xRep2 = xRS2.getRDFRepository();
- assure("xRep2 null", null != xRep2);
+ assertTrue("xRep2 null", null != xRep2);
Statement[] manifestStmts5 = getManifestStmts((XURI) xDMA2);
Statement[] metadataStmts5 = getMetadataFileStmts((XURI) xDMA2,
@@ -600,11 +613,11 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
new Statement(foo, bar, foo, xFoobar5);
xStmtsEnum = xRep.getStatements(null, null, null);
XEnumeration xStmtsEnum2 = xRep2.getStatements(null, null, null);
- assure("load: repository differs",
+ assertTrue("load: repository differs",
eq(xStmtsEnum2, merge(manifestStmts5, merge(metadataStmts5,
new Statement[] { xFoobar_FooBarFoo5 }))));
- log.println("...done");
+ System.out.println("...done");
} catch (Exception e) {
report(e);
@@ -614,99 +627,91 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
}
}
- public void checkRDFa()
+ @Test public void checkRDFa()
{
XComponent xComp = null;
- String file;
try {
- file = util.utils.getFullTestURL("TESTRDFA.odt");
+ final String file = TestDocument.getUrl("TESTRDFA.odt");
xComp = loadRDFa(file);
if (xComp != null)
{
- file = tempDir + "TESTRDFA.odt";
- storeRDFa(xComp, file);
+ final String sNewFile = tempDir + "TESTRDFA.odt";
+ storeRDFa(xComp, sNewFile);
close(xComp);
- xComp = loadRDFa(file);
+
+ xComp = loadRDFa(sNewFile);
}
} finally {
close(xComp);
}
}
- public void storeRDFa(XComponent xComp, String file)
+ private void storeRDFa(XComponent xComp, String file)
{
try {
- log.println("Storing test document...");
+ System.out.println("Storing test document...");
- XStorable xStor = (XStorable) UnoRuntime.queryInterface(
- XStorable.class, xComp);
+ XStorable xStor = UnoRuntime.queryInterface(XStorable.class, xComp);
xStor.storeToURL(file, new PropertyValue[0]);
- log.println("...done");
+ System.out.println("...done");
} catch (Exception e) {
report(e);
}
}
- public XComponent loadRDFa(String file)
+ private XComponent loadRDFa(String file)
{
XComponent xComp = null;
try {
- log.println("Loading test document...");
+ System.out.println("Loading test document...");
PropertyValue[] loadProps = new PropertyValue[1];
loadProps[0] = new PropertyValue();
loadProps[0].Name = "Hidden";
- loadProps[0].Value = new Boolean(true);
+ loadProps[0].Value = true;
xComp = util.DesktopTools.loadDoc(xMSF, file, loadProps);
- XRepositorySupplier xRS = (XRepositorySupplier)
- UnoRuntime.queryInterface(XRepositorySupplier.class, xComp);
- assure("xRS null", null != xRS);
+ XRepositorySupplier xRepoSupplier = UnoRuntime.queryInterface(XRepositorySupplier.class, xComp);
+ assertTrue("xRS null", null != xRepoSupplier);
- XDocumentRepository xRep = (XDocumentRepository)
- UnoRuntime.queryInterface(XDocumentRepository.class,
- xRS.getRDFRepository());
- assure("xRep null", null != xRep);
+ XDocumentRepository xDocRepository = UnoRuntime.queryInterface(XDocumentRepository.class, xRepoSupplier.getRDFRepository());
+ assertTrue("xRep null", null != xDocRepository);
- XTextDocument xTextDoc = (XTextDocument)
- UnoRuntime.queryInterface(XTextDocument.class, xComp);
+ XTextDocument xTextDoc = UnoRuntime.queryInterface(XTextDocument.class, xComp);
XText xText = xTextDoc.getText();
- XEnumerationAccess xEA = (XEnumerationAccess)
- UnoRuntime.queryInterface(XEnumerationAccess.class, xText);
+ XEnumerationAccess xEA = UnoRuntime.queryInterface(XEnumerationAccess.class, xText);
XEnumeration xEnum = xEA.createEnumeration();
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking RDFa in loaded test document...");
+ System.out.println("Checking RDFa in loaded test document...");
XMetadatable xPara;
Pair<Statement[], Boolean> result;
Statement x_FooBarLit1 = new Statement(foo, bar, mkLit("1"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 1",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 1",
!result.Second &&
eq(result.First, new Statement[] {
x_FooBarLit1
}));
Statement x_FooBarLit2 = new Statement(foo, bar, mkLit("2"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 2",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 2",
!result.Second &&
eq(result.First, new Statement[] {
x_FooBarLit2
@@ -714,54 +719,47 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
Statement x_BlankBarLit3 =
new Statement(blank1, bar, mkLit("3"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 3",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 3",
!result.Second &&
eq(result.First, new Statement[] {
x_BlankBarLit3
}));
- XBlankNode b3 = (XBlankNode) UnoRuntime.queryInterface(
- XBlankNode.class, result.First[0].Subject);
+ XBlankNode b3 = UnoRuntime.queryInterface(XBlankNode.class, result.First[0].Subject);
Statement x_BlankBarLit4 =
new Statement(blank2, bar, mkLit("4"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 4",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 4",
!result.Second &&
eq(result.First, new Statement[] {
x_BlankBarLit4
}));
- XBlankNode b4 = (XBlankNode) UnoRuntime.queryInterface(
- XBlankNode.class, result.First[0].Subject);
+ XBlankNode b4 = UnoRuntime.queryInterface(XBlankNode.class, result.First[0].Subject);
Statement x_BlankBarLit5 =
new Statement(blank1, bar, mkLit("5"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 5",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 5",
!result.Second &&
eq(result.First, new Statement[] {
x_BlankBarLit5
}));
- XBlankNode b5 = (XBlankNode) UnoRuntime.queryInterface(
- XBlankNode.class, result.First[0].Subject);
+ XBlankNode b5 = UnoRuntime.queryInterface(XBlankNode.class, result.First[0].Subject);
- assure("RDFa: 3 != 4",
+ assertTrue("RDFa: 3 != 4",
!b3.getStringValue().equals(b4.getStringValue()));
- assure("RDFa: 3 == 5",
+ assertTrue("RDFa: 3 == 5",
b3.getStringValue().equals(b5.getStringValue()));
Statement x_FooBarLit6 = new Statement(foo, bar, mkLit("6"), null);
Statement x_FooBazLit6 = new Statement(foo, baz, mkLit("6"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 6",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 6",
!result.Second &&
eq(result.First, new Statement[] {
x_FooBarLit6, x_FooBazLit6
@@ -770,10 +768,9 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
Statement x_FooBarLit7 = new Statement(foo, bar, mkLit("7"), null);
Statement x_FooBazLit7 = new Statement(foo, baz, mkLit("7"), null);
Statement x_FooFooLit7 = new Statement(foo, foo, mkLit("7"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 7",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 7",
!result.Second &&
eq(result.First, new Statement[] {
x_FooBarLit7, x_FooBazLit7, x_FooFooLit7
@@ -784,28 +781,25 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
Statement x_FooBarLit = new Statement(foo, bar, lit, null);
Statement x_FooBarLittype = new Statement(foo, bar, lit_type, null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 8",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 8",
result.Second &&
eq(result.First, new Statement[] {
x_FooBarLit
}));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 9",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 9",
result.Second &&
eq(result.First, new Statement[] {
x_FooBarLit
}));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 10",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 10",
result.Second &&
eq(result.First, new Statement[] {
x_FooBarLittype
@@ -813,10 +807,9 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
Statement x_FooBarLit11
= new Statement(foo, bar, mkLit("11", bar), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 11",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 11",
!result.Second &&
eq(result.First, new Statement[] {
x_FooBarLit11
@@ -825,19 +818,17 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
XURI xFile = URI.createNS(xContext, file, "/" + contentPath);
Statement x_FileBarLit12 =
new Statement(xFile, bar, mkLit("12"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 12",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 12",
!result.Second &&
eq(result.First, new Statement[] {
x_FileBarLit12
}));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 13",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 13",
result.Second &&
eq(result.First, new Statement[] {
x_FooBarLit
@@ -845,51 +836,45 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
Statement x_FooLabelLit14 =
new Statement(foo, rdfs_label, mkLit("14"), null);
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 14",
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 14",
result.Second &&
eq(result.First, new Statement[] {
- x_FooBarLit
+ /* x_FooLabelLit14 */ x_FooBarLit
}));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 15", eq(result.First, new Statement[] { } ));
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 15", eq(result.First, new Statement[] { } ));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 16", eq(result.First, new Statement[] { } ));
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 16", eq(result.First, new Statement[] { } ));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 17", eq(result.First, new Statement[] { } ));
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 17", eq(result.First, new Statement[] { } ));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 18", eq(result.First, new Statement[] { } ));
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 18", eq(result.First, new Statement[] { } ));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
- XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 19", eq(result.First, new Statement[] { } ));
+ xPara = UnoRuntime.queryInterface(XMetadatable.class, xEnum.nextElement());
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 19", eq(result.First, new Statement[] { } ));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
+ xPara = UnoRuntime.queryInterface(
XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 20", eq(result.First, new Statement[] { } ));
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 20", eq(result.First, new Statement[] { } ));
- xPara = (XMetadatable) UnoRuntime.queryInterface(
+ xPara = UnoRuntime.queryInterface(
XMetadatable.class, xEnum.nextElement());
- result = xRep.getStatementRDFa(xPara);
- assure("RDFa: 21", eq(result.First, new Statement[] { } ));
+ result = xDocRepository.getStatementRDFa(xPara);
+ assertTrue("RDFa: 21", eq(result.First, new Statement[] { } ));
- log.println("...done");
+ System.out.println("...done");
} catch (Exception e) {
report(e);
@@ -905,33 +890,35 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
{
if (e instanceof WrappedTargetException)
{
- log.println("Cause:");
+ System.out.println("Cause:");
Exception cause = (Exception)
(((WrappedTargetException)e).TargetException);
- log.println(cause.toString());
+ System.out.println(cause.toString());
report2(cause);
} else if (e instanceof WrappedTargetRuntimeException) {
- log.println("Cause:");
+ System.out.println("Cause:");
Exception cause = (Exception)
(((WrappedTargetRuntimeException)e).TargetException);
- log.println(cause.toString());
+ System.out.println(cause.toString());
report2(cause);
}
}
public void report(Exception e) {
- log.println("Exception occurred:");
- e.printStackTrace((java.io.PrintWriter) log);
+ System.out.println("Exception occurred:");
+ e.printStackTrace(System.out);
report2(e);
- failed();
+ fail();
}
static void close(XComponent i_comp)
{
try {
- XCloseable xClos = (XCloseable) UnoRuntime.queryInterface(
- XCloseable.class, i_comp);
- if (xClos != null) xClos.close(true);
+ XCloseable xClos = UnoRuntime.queryInterface(XCloseable.class, i_comp);
+ if (xClos != null)
+ {
+ xClos.close(true);
+ }
} catch (Exception e) {
}
}
@@ -960,14 +947,16 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
}
public static String toS(XNode n) {
- if (null == n) return "< null >";
+ if (null == n)
+ {
+ return "< null >";
+ }
return n.getStringValue();
}
static boolean isBlank(XNode i_node)
{
- XBlankNode blank = (XBlankNode) UnoRuntime.queryInterface(
- XBlankNode.class, i_node);
+ XBlankNode blank = UnoRuntime.queryInterface(XBlankNode.class, i_node);
return blank != null;
}
@@ -1000,7 +989,7 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
java.util.Collection c = new java.util.Vector();
while (i_Enum.hasMoreElements()) {
Statement s = (Statement) i_Enum.nextElement();
-//log.println("toSeq: " + s.getSubject().getStringValue() + " " + s.getPredicate().getStringValue() + " " + s.getObject().getStringValue() + ".");
+//System.out.println("toSeq: " + s.getSubject().getStringValue() + " " + s.getPredicate().getStringValue() + " " + s.getObject().getStringValue() + ".");
c.add(s);
}
// return (Statement[]) c.toArray();
@@ -1035,11 +1024,17 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
{
XNode[] left = (XNode[]) i_Left;
XNode[] right = (XNode[]) i_Right;
- if (left.length != right.length) throw new RuntimeException();
+ if (left.length != right.length)
+ {
+ throw new RuntimeException();
+ }
for (int i = 0; i < left.length; ++i) {
int eq = (left[i].getStringValue().compareTo(
right[i].getStringValue()));
- if (eq != 0) return eq;
+ if (eq != 0)
+ {
+ return eq;
+ }
}
return 0;
}
@@ -1078,23 +1073,23 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
XURI lG = i_Left.Graph;
XURI rG = i_Right.Graph;
if (!eq(lG, rG)) {
- log.println("Graphs differ: " + toS(lG) + " != " + toS(rG));
+ System.out.println("Graphs differ: " + toS(lG) + " != " + toS(rG));
return false;
}
if (!eq(i_Left.Subject, i_Right.Subject)) {
- log.println("Subjects differ: " +
+ System.out.println("Subjects differ: " +
i_Left.Subject.getStringValue() + " != " +
i_Right.Subject.getStringValue());
return false;
}
if (!eq(i_Left.Predicate, i_Right.Predicate)) {
- log.println("Predicates differ: " +
+ System.out.println("Predicates differ: " +
i_Left.Predicate.getStringValue() + " != " +
i_Right.Predicate.getStringValue());
return false;
}
if (!eq(i_Left.Object, i_Right.Object)) {
- log.println("Objects differ: " +
+ System.out.println("Objects differ: " +
i_Left.Object.getStringValue() + " != " +
i_Right.Object.getStringValue());
return false;
@@ -1105,7 +1100,7 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
static boolean eq(Statement[] i_Result, Statement[] i_Expected)
{
if (i_Result.length != i_Expected.length) {
- log.println("eq: different lengths: " + i_Result.length + " " +
+ System.out.println("eq: different lengths: " + i_Result.length + " " +
i_Expected.length);
return false;
}
@@ -1113,8 +1108,13 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
java.util.Arrays.asList(i_Expected).toArray();
java.util.Arrays.sort(i_Result, new StmtComp());
java.util.Arrays.sort(expected, new StmtComp());
- for (int i = 0; i < expected.length; ++i) {
- if (!eq(i_Result[i], expected[i])) return false;
+ for (int i = 0; i < expected.length; ++i)
+ {
+ // This is better for debug!
+ final Statement a = i_Result[i];
+ final Statement b = expected[i];
+ final boolean cond = eq(a, b);
+ if (!cond) return false;
}
return true;
}
@@ -1141,15 +1141,15 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
static boolean eq(XQuerySelectResult i_Result,
String[] i_Vars, XNode[][] i_Bindings) throws Exception
{
- String[] vars = (String[]) i_Result.getBindingNames();
+ String[] vars = i_Result.getBindingNames();
XEnumeration iter = (XEnumeration) i_Result;
XNode[][] bindings = toSeqs(iter);
if (vars.length != i_Vars.length) {
- log.println("var lengths differ");
+ System.out.println("var lengths differ");
return false;
}
if (bindings.length != i_Bindings.length) {
- log.println("binding lengths differ: " + i_Bindings.length +
+ System.out.println("binding lengths differ: " + i_Bindings.length +
" vs " + bindings.length );
return false;
}
@@ -1157,16 +1157,16 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
java.util.Arrays.sort(i_Bindings, new BindingComp());
for (int i = 0; i < i_Bindings.length; ++i) {
if (i_Bindings[i].length != i_Vars.length) {
- log.println("TEST ERROR!");
+ System.out.println("TEST ERROR!");
throw new Exception();
}
if (bindings[i].length != i_Vars.length) {
- log.println("binding length and var length differ");
+ System.out.println("binding length and var length differ");
return false;
}
for (int j = 0; j < i_Vars.length; ++j) {
if (!eq(bindings[i][j], i_Bindings[i][j])) {
- log.println("bindings differ: " +
+ System.out.println("bindings differ: " +
toS(bindings[i][j]) + " != " + toS(i_Bindings[i][j]));
return false;
}
@@ -1174,7 +1174,7 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
}
for (int i = 0; i < i_Vars.length; ++i) {
if (!vars[i].equals(i_Vars[i])) {
- log.println("variable names differ: " +
+ System.out.println("variable names differ: " +
vars[i] + " != " + i_Vars[i]);
return false;
}
@@ -1253,17 +1253,27 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
public String getLocalName() { return ""; }
public StringPair getMetadataReference()
- { return new StringPair(m_Stream, m_XmlId); }
+ {
+ return new StringPair(m_Stream, m_XmlId);
+ }
public void setMetadataReference(StringPair i_Ref)
throws IllegalArgumentException
- { m_Stream = (String)i_Ref.First; m_XmlId = (String)i_Ref.Second; }
+ {
+ m_Stream = i_Ref.First;
+ m_XmlId = i_Ref.Second;
+ }
public void ensureMetadataReference()
- { m_Stream = "content.xml"; m_XmlId = "42"; }
+ {
+ m_Stream = "content.xml";
+ m_XmlId = "42";
+ }
public String getImplementationName() { return null; }
public String[] getSupportedServiceNames() { return null; }
public boolean supportsService(String i_Svc)
- { return i_Svc.equals("com.sun.star.text.Paragraph"); }
+ {
+ return i_Svc.equals("com.sun.star.text.Paragraph");
+ }
public XText getText() { return null; }
public XTextRange getStart() { return null; }
@@ -1271,5 +1281,33 @@ public class DocumentMetadataAccessTest extends ComplexTestCase
public String getString() { return m_Text; }
public void setString(String i_Str) { m_Text = i_Str; }
}
+
+
+
+ private XMultiServiceFactory getMSF()
+ {
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());
+ return xMSF1;
+ }
+
+ // setup and close connections
+ @BeforeClass public static void setUpConnection() throws Exception {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "starting class: " + DocumentMetadataAccess.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
+ connection.setUp();
+ }
+
+ @AfterClass public static void tearDownConnection()
+ throws InterruptedException, com.sun.star.uno.Exception
+ {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "finishing class: " + DocumentMetadataAccess.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
+ connection.tearDown();
+ }
+
+ private static final OfficeConnection connection = new OfficeConnection();
+
}
diff --git a/sfx2/qa/complex/DocumentMetaData.java b/sfx2/qa/complex/sfx2/DocumentProperties.java
index ae7970227c75..01ccaa21619b 100644..100755
--- a/sfx2/qa/complex/DocumentMetaData.java
+++ b/sfx2/qa/complex/sfx2/DocumentProperties.java
@@ -25,16 +25,14 @@
*
************************************************************************/
-package complex.framework;
+package complex.sfx2;
-import complexlib.ComplexTestCase;
-import helper.StreamSimulator;
+import complex.sfx2.tools.TestDocument;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
-import com.sun.star.uno.Any;
import com.sun.star.lang.XInitialization;
-import com.sun.star.lang.XSingleServiceFactory;
+
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.Locale;
import com.sun.star.lang.EventObject;
@@ -51,10 +49,15 @@ import com.sun.star.beans.NamedValue;
import com.sun.star.beans.PropertyAttribute;
import com.sun.star.beans.UnknownPropertyException;
import com.sun.star.beans.IllegalTypeException;
-import com.sun.star.embed.XStorage;
-import com.sun.star.io.XInputStream;
+
import com.sun.star.document.XDocumentProperties;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openoffice.test.OfficeConnection;
+import static org.junit.Assert.*;
/**
* Test case for the service com.sun.star.document.DocumentProperties.
@@ -63,13 +66,9 @@ import com.sun.star.document.XDocumentProperties;
*
* @author mst
*/
-public class DocumentMetaData extends ComplexTestCase
+public class DocumentProperties
{
- public String[] getTestMethodNames () {
- return new String[] { "check", "cleanup" };
- }
-
- public void cleanup() {
+ @After public void cleanup() {
// nothing to do
}
@@ -77,7 +76,7 @@ public class DocumentMetaData extends ComplexTestCase
class Listener implements XModifyListener {
private boolean m_Called;
- public Listener() {
+ Listener() {
m_Called = false;
}
@@ -95,19 +94,18 @@ public class DocumentMetaData extends ComplexTestCase
}
}
- public void check() {
+ @Test public void check() {
try {
- XMultiServiceFactory xMSF = (XMultiServiceFactory) param.getMSF();
- assure("could not create MultiServiceFactory.", xMSF != null);
- XPropertySet xPropertySet = (XPropertySet)
- UnoRuntime.queryInterface(XPropertySet.class, xMSF);
+ XMultiServiceFactory xMSF = getMSF();
+ assertNotNull("could not create MultiServiceFactory.", xMSF);
+ XPropertySet xPropertySet = UnoRuntime.queryInterface(XPropertySet.class, xMSF);
Object defaultCtx = xPropertySet.getPropertyValue("DefaultContext");
- XComponentContext xContext = (XComponentContext)
- UnoRuntime.queryInterface(XComponentContext.class, defaultCtx);
- assure("could not get component context.", xContext != null);
+ XComponentContext xContext = UnoRuntime.queryInterface(XComponentContext.class, defaultCtx);
+ assertNotNull("could not get component context.", xContext);
+ // TODO: Path to temp
String temp = util.utils.getOfficeTemp/*Dir*/(xMSF);
- log.println("tempdir: " + temp);
+ System.out.println("tempdir: " + temp);
PropertyValue[] noArgs = { };
PropertyValue mimetype = new PropertyValue();
@@ -120,61 +118,56 @@ public class DocumentMetaData extends ComplexTestCase
cfile.Value = temp + "EMPTY.odt";
PropertyValue[] mimeEmptyArgs = { mimetype, cfile };
- log.println("Creating service DocumentProperties...");
+ System.out.println("Creating service DocumentProperties...");
Object oDP =
// xMSF.createInstanceWithContext(
// "com.sun.star.document.DocumentProperties", xContext);
xMSF.createInstance("com.sun.star.document.DocumentProperties");
- XDocumentProperties xDP = (XDocumentProperties)
- UnoRuntime.queryInterface(XDocumentProperties.class, oDP);
+ XDocumentProperties xDP = UnoRuntime.queryInterface(XDocumentProperties.class, oDP);
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking initialize ...");
+ System.out.println("Checking initialize ...");
- XDocumentProperties xDP2 = (XDocumentProperties)
- UnoRuntime.queryInterface(XDocumentProperties.class,
- xMSF.createInstance(
- "com.sun.star.document.DocumentProperties"));
- XInitialization xInit = (XInitialization)
- UnoRuntime.queryInterface(XInitialization.class, xDP2);
+ XDocumentProperties xDP2 = UnoRuntime.queryInterface(XDocumentProperties.class, xMSF.createInstance("com.sun.star.document.DocumentProperties"));
+ XInitialization xInit = UnoRuntime.queryInterface(XInitialization.class, xDP2);
xInit.initialize(new Object[] { });
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking storing default-initialized meta data ...");
+ System.out.println("Checking storing default-initialized meta data ...");
// xDP2.storeToMedium(temp + "EMPTY.odt", mimeArgs);
xDP2.storeToMedium("", mimeEmptyArgs);
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking loading default-initialized meta data ...");
+ System.out.println("Checking loading default-initialized meta data ...");
// xDP2.loadFromMedium(temp + "EMPTY.odt", noArgs);
xDP2.loadFromMedium("", mimeEmptyArgs);
- assure ("Author", "".equals(xDP2.getAuthor()));
+ assertTrue ("Author", "".equals(xDP2.getAuthor()));
- log.println("...done");
+ System.out.println("...done");
- log.println("(Not) Checking preservation of custom meta data ...");
+ System.out.println("(Not) Checking preservation of custom meta data ...");
- xDP2.loadFromMedium(util.utils.getFullTestURL("CUSTOM.odt"),
+ xDP2.loadFromMedium(TestDocument.getUrl("CUSTOM.odt"),
noArgs);
- assure ("Author", "".equals(xDP2.getAuthor()));
+ assertTrue ("Author", "".equals(xDP2.getAuthor()));
xDP2.storeToMedium(temp + "CUSTOM.odt", mimeArgs);
//FIXME: now what? comparing for binary equality seems useless
// we could unzip the written file and grep for the custom stuff
// but would that work on windows...
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking loading from test document...");
+ System.out.println("Checking loading from test document...");
- String file = util.utils.getFullTestURL("TEST.odt");
+ String file = TestDocument.getUrl("TEST.odt");
xDP.loadFromMedium(file, noArgs);
/* XInputStream xStream =
new StreamSimulator("./testdocuments/TEST.odt", true, param);
@@ -188,68 +181,67 @@ public class DocumentMetaData extends ComplexTestCase
XStorage.class, oStor);
xDP.loadFromStorage(xStor);*/
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking meta-data import...");
+ System.out.println("Checking meta-data import...");
- assure ("Author", "Karl-Heinz Mustermann".equals(xDP.getAuthor()));
- assure ("Generator",
+ assertTrue("Author", "Karl-Heinz Mustermann".equals(xDP.getAuthor()));
+ assertTrue("Generator",
"StarOffice/8$Solaris_x86 OpenOffice.org_project/680m232$Build-9227"
.equals(xDP.getGenerator()));
- assure ("CreationDate", 2007 == xDP.getCreationDate().Year);
- assure ("Title", "Urgent Memo".equals(xDP.getTitle()));
- assure ("Subject", "Wichtige Mitteilung".equals(xDP.getSubject()));
- assure ("Description",
+ assertTrue("CreationDate", 2007 == xDP.getCreationDate().Year);
+ assertTrue("Title", "Urgent Memo".equals(xDP.getTitle()));
+ assertTrue("Subject", "Wichtige Mitteilung".equals(xDP.getSubject()));
+ assertTrue("Description",
"Modern internal company memorandum in full-blocked style"
.equals(xDP.getDescription()));
-// assure ("Language", "".equals(xDP.getLanguage()));
- assure ("ModifiedBy",
+// assertTrue("Language", "".equals(xDP.getLanguage()));
+ assertTrue("ModifiedBy",
"Karl-Heinz Mustermann".equals(xDP.getModifiedBy()));
- assure ("ModificationDate", 10 == xDP.getModificationDate().Month);
- assure ("PrintedBy",
+ assertTrue("ModificationDate", 10 == xDP.getModificationDate().Month);
+ assertTrue("PrintedBy",
"Karl-Heinz Mustermann".equals(xDP.getPrintedBy()));
- assure ("PrintDate", 29 == xDP.getPrintDate().Day);
- assure ("TemplateName",
+ assertTrue("PrintDate", 29 == xDP.getPrintDate().Day);
+ assertTrue("TemplateName",
"Modern Memo".equals(xDP.getTemplateName()));
- assure ("TemplateURL",
+ assertTrue("TemplateURL",
xDP.getTemplateURL().endsWith("memmodern.ott"));
- assure ("TemplateDate", 17 == xDP.getTemplateDate().Hours);
- assure ("AutoloadURL", "../TEST.odt".equals(xDP.getAutoloadURL()));
- assure ("AutoloadSecs", 0 == xDP.getAutoloadSecs());
- assure ("DefaultTarget", "_blank".equals(xDP.getDefaultTarget()));
- assure ("EditingCycles", 3 == xDP.getEditingCycles());
- assure ("EditingDuration", 320 == xDP.getEditingDuration());
+ assertTrue("TemplateDate", 17 == xDP.getTemplateDate().Hours);
+ assertTrue("AutoloadURL", "../TEST.odt".equals(xDP.getAutoloadURL()));
+ assertTrue("AutoloadSecs", 0 == xDP.getAutoloadSecs());
+ assertTrue("DefaultTarget", "_blank".equals(xDP.getDefaultTarget()));
+ assertTrue("EditingCycles", 3 == xDP.getEditingCycles());
+ assertTrue("EditingDuration", 320 == xDP.getEditingDuration());
String[] kws = xDP.getKeywords();
- assure ("Keywords", fromArray(kws).containsAll(
+ assertTrue("Keywords", fromArray(kws).containsAll(
fromArray(new Object[] { "Asien", "Memo", "Reis" })));
NamedValue[] ds = xDP.getDocumentStatistics();
/* for (int i = 0; i < ds.length; ++i) {
- log.println("nv: " + ds[i].Name + " " + ds[i].Value);
+ System.out.println("nv: " + ds[i].Name + " " + ds[i].Value);
}
NamedValue nv1 = new NamedValue("WordCount", new Integer(23));
NamedValue nv2 = new NamedValue("WordCount", new Integer(23));
- log.println("eq: " + nv1.equals(nv2)); // grrr, this is false...
+ System.out.println("eq: " + nv1.equals(nv2)); // grrr, this is false...
*/
- assure ("DocumentStatistics:WordCount", containsNV(ds,
+ assertTrue("DocumentStatistics:WordCount", containsNV(ds,
new NamedValue("WordCount", new Integer(23))));
- assure ("DocumentStatistics:PageCount", containsNV(ds,
+ assertTrue("DocumentStatistics:PageCount", containsNV(ds,
new NamedValue("PageCount", new Integer(1))));
XPropertyContainer udpc = xDP.getUserDefinedProperties();
- XPropertySet udps = (XPropertySet) UnoRuntime.queryInterface(
- XPropertySet.class, udpc);
- assure ("UserDefined 1", "Dies ist ein wichtiger Hinweis"
+ XPropertySet udps = UnoRuntime.queryInterface( XPropertySet.class, udpc );
+ assertTrue("UserDefined 1", "Dies ist ein wichtiger Hinweis"
.equals(udps.getPropertyValue("Hinweis")));
- assure ("UserDefined 2", ("Kann Spuren von N"
+ assertTrue("UserDefined 2", ("Kann Spuren von N"
+ new String(new byte[] { (byte) 0xc3, (byte) 0xbc }, "UTF-8")
+ "ssen enthalten")
.equals(udps.getPropertyValue("Warnung")));
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking meta-data updates...");
+ System.out.println("Checking meta-data updates...");
String str;
DateTime dt = new DateTime();
@@ -258,75 +250,75 @@ public class DocumentMetaData extends ComplexTestCase
str = "me";
xDP.setAuthor(str);
- assure ("setAuthor", str.equals(xDP.getAuthor()));
+ assertTrue("setAuthor", str.equals(xDP.getAuthor()));
str = "the computa";
xDP.setGenerator(str);
- assure ("setGenerator", str.equals(xDP.getGenerator()));
+ assertTrue("setGenerator", str.equals(xDP.getGenerator()));
dt.Year = 2038;
dt.Month = 1;
dt.Day = 1;
xDP.setCreationDate(dt);
- assure ("setCreationDate", dt.Year == xDP.getCreationDate().Year);
+ assertTrue("setCreationDate", dt.Year == xDP.getCreationDate().Year);
str = "El t'itulo";
xDP.setTitle(str);
- assure ("setTitle", str.equals(xDP.getTitle()));
+ assertTrue("setTitle", str.equals(xDP.getTitle()));
str = "Ein verkommenes Subjekt";
xDP.setSubject(str);
- assure ("setSubject", str.equals(xDP.getSubject()));
+ assertTrue("setSubject", str.equals(xDP.getSubject()));
str = "Este descripci'on no es importante";
xDP.setDescription(str);
- assure ("setDescription", str.equals(xDP.getDescription()));
+ assertTrue("setDescription", str.equals(xDP.getDescription()));
l.Language = "en";
l.Country = "GB";
xDP.setLanguage(l);
Locale l2 = xDP.getLanguage();
- assure ("setLanguage Lang", l.Language.equals(l2.Language));
- assure ("setLanguage Cty", l.Country.equals(l2.Country));
+ assertTrue("setLanguage Lang", l.Language.equals(l2.Language));
+ assertTrue("setLanguage Cty", l.Country.equals(l2.Country));
str = "myself";
xDP.setModifiedBy(str);
- assure ("setModifiedBy", str.equals(xDP.getModifiedBy()));
+ assertTrue("setModifiedBy", str.equals(xDP.getModifiedBy()));
dt.Year = 2042;
xDP.setModificationDate(dt);
- assure ("setModificationDate",
+ assertTrue("setModificationDate",
dt.Year == xDP.getModificationDate().Year);
str = "i didnt do it";
xDP.setPrintedBy(str);
- assure ("setPrintedBy", str.equals(xDP.getPrintedBy()));
+ assertTrue("setPrintedBy", str.equals(xDP.getPrintedBy()));
dt.Year = 2024;
xDP.setPrintDate(dt);
- assure ("setPrintDate", dt.Year == xDP.getPrintDate().Year);
+ assertTrue("setPrintDate", dt.Year == xDP.getPrintDate().Year);
str = "blah";
xDP.setTemplateName(str);
- assure ("setTemplateName", str.equals(xDP.getTemplateName()));
+ assertTrue("setTemplateName", str.equals(xDP.getTemplateName()));
str = "gopher://some-hole-in-the-ground/";
xDP.setTemplateURL(str);
- assure ("setTemplateURL", str.equals(xDP.getTemplateURL()));
+ assertTrue("setTemplateURL", str.equals(xDP.getTemplateURL()));
dt.Year = 2043;
xDP.setTemplateDate(dt);
- assure ("setTemplateDate", dt.Year == xDP.getTemplateDate().Year);
+ assertTrue("setTemplateDate", dt.Year == xDP.getTemplateDate().Year);
str = "http://nowhere/";
xDP.setAutoloadURL(str);
- assure ("setAutoloadURL", str.equals(xDP.getAutoloadURL()));
+ assertTrue("setAutoloadURL", str.equals(xDP.getAutoloadURL()));
i = 3661; // this might not work (due to conversion via double...)
xDP.setAutoloadSecs(i);
-// log.println("set: " + i + " get: " + xDP.getAutoloadSecs());
- assure ("setAutoloadSecs", i == xDP.getAutoloadSecs());
+// System.out.println("set: " + i + " get: " + xDP.getAutoloadSecs());
+ assertTrue("setAutoloadSecs", i == xDP.getAutoloadSecs());
str = "_blank";
xDP.setDefaultTarget(str);
- assure ("setDefaultTarget", str.equals(xDP.getDefaultTarget()));
+ assertTrue("setDefaultTarget", str.equals(xDP.getDefaultTarget()));
i = 42;
xDP.setEditingCycles((short) i);
- assure ("setEditingCycles", i == xDP.getEditingCycles());
+ assertTrue("setEditingCycles", i == xDP.getEditingCycles());
i = 84;
xDP.setEditingDuration(i);
- assure ("setEditingDuration", i == xDP.getEditingDuration());
+ assertTrue("setEditingDuration", i == xDP.getEditingDuration());
str = "";
String[] kws2 = new String[] {
"keywordly", "keywordlike", "keywordalicious" };
xDP.setKeywords(kws2);
kws = xDP.getKeywords();
- assure ("setKeywords", fromArray(kws).containsAll(fromArray(kws2)));
+ assertTrue("setKeywords", fromArray(kws).containsAll(fromArray(kws2)));
NamedValue[] ds2 = new NamedValue[] {
new NamedValue("SyllableCount", new Integer(9)),
@@ -334,16 +326,16 @@ public class DocumentMetaData extends ComplexTestCase
new NamedValue("SentenceCount", new Integer(7)) };
xDP.setDocumentStatistics(ds2);
ds = xDP.getDocumentStatistics();
- assure ("setDocumentStatistics:SyllableCount", containsNV(ds,
+ assertTrue("setDocumentStatistics:SyllableCount", containsNV(ds,
new NamedValue("SyllableCount", new Integer(9))));
- assure ("setDocumentStatistics:FrameCount", containsNV(ds,
+ assertTrue("setDocumentStatistics:FrameCount", containsNV(ds,
new NamedValue("FrameCount", new Integer(2))));
- assure ("setDocumentStatistics:SentenceCount", containsNV(ds,
+ assertTrue("setDocumentStatistics:SentenceCount", containsNV(ds,
new NamedValue("SentenceCount", new Integer(7))));
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking user-defined meta-data updates...");
+ System.out.println("Checking user-defined meta-data updates...");
// actually, this tests the PropertyBag service
// but maybe the DocumentProperties service will be implemented
@@ -369,8 +361,7 @@ public class DocumentMetaData extends ComplexTestCase
dur.Seconds = 555;
dur.MilliSeconds = 444;
- udpc.addProperty("Frobnicate", PropertyAttribute.REMOVEABLE,
- new Boolean(b));
+ udpc.addProperty("Frobnicate", PropertyAttribute.REMOVEABLE, b);
udpc.addProperty("FrobDuration", PropertyAttribute.REMOVEABLE, dur);
udpc.addProperty("FrobDuration2", PropertyAttribute.REMOVEABLE, t);
udpc.addProperty("FrobEndDate", PropertyAttribute.REMOVEABLE, date);
@@ -384,109 +375,106 @@ public class DocumentMetaData extends ComplexTestCase
udpc.removeProperty("Info 1");
udpc.removeProperty("Removed");
} catch (UnknownPropertyException e) {
- assure("removeProperty failed", false);
+ fail("removeProperty failed");
}
try {
udpc.addProperty("Forbidden", PropertyAttribute.REMOVEABLE,
new String[] { "foo", "bar" });
- assure("inserting value of non-supported type did not fail",
- false);
+ fail("inserting value of non-supported type did not fail");
} catch (IllegalTypeException e) {
// ignore
}
- assure ("UserDefined bool", new Boolean(b).equals(
+ assertTrue("UserDefined bool", new Boolean(b).equals(
udps.getPropertyValue("Frobnicate")));
- assure ("UserDefined duration", eqDuration(dur, (Duration)
+ assertTrue("UserDefined duration", eqDuration(dur, (Duration)
udps.getPropertyValue("FrobDuration")));
- assure ("UserDefined time", eqTime(t, (Time)
+ assertTrue("UserDefined time", eqTime(t, (Time)
udps.getPropertyValue("FrobDuration2")));
- assure ("UserDefined date", eqDate(date, (Date)
+ assertTrue("UserDefined date", eqDate(date, (Date)
udps.getPropertyValue("FrobEndDate")));
- assure ("UserDefined datetime", eqDateTime(dt, (DateTime)
+ assertTrue("UserDefined datetime", eqDateTime(dt, (DateTime)
udps.getPropertyValue("FrobStartTime")));
- assure ("UserDefined float", new Double(d).equals(
+ assertTrue("UserDefined float", new Double(d).equals(
udps.getPropertyValue("Pi")));
- assure ("UserDefined string", "bar".equals(
+ assertTrue("UserDefined string", "bar".equals(
udps.getPropertyValue("Foo")));
- assure ("UserDefined empty name", "eeeeek".equals(
+ assertTrue("UserDefined empty name", "eeeeek".equals(
udps.getPropertyValue("")));
try {
udps.getPropertyValue("Removed");
- assure("UserDefined remove didn't", false);
+ fail("UserDefined remove didn't");
} catch (UnknownPropertyException e) {
// ok
}
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking storing meta-data to file...");
+ System.out.println("Checking storing meta-data to file...");
xDP.storeToMedium(temp + "TEST.odt", mimeArgs);
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking loading meta-data from stored file...");
+ System.out.println("Checking loading meta-data from stored file...");
xDP.loadFromMedium(temp + "TEST.odt", noArgs);
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking user-defined meta-data from stored file...");
+ System.out.println("Checking user-defined meta-data from stored file...");
udpc = xDP.getUserDefinedProperties();
- udps = (XPropertySet) UnoRuntime.queryInterface(
- XPropertySet.class, udpc);
+ udps = UnoRuntime.queryInterface( XPropertySet.class, udpc );
- assure ("UserDefined bool", new Boolean(b).equals(
+ assertTrue("UserDefined bool", new Boolean(b).equals(
udps.getPropertyValue("Frobnicate")));
- assure ("UserDefined duration", eqDuration(dur, (Duration)
+ assertTrue("UserDefined duration", eqDuration(dur, (Duration)
udps.getPropertyValue("FrobDuration")));
// this is now a Duration!
Duration t_dur = new Duration(false, (short)0, (short)0, (short)0,
t.Hours, t.Minutes, t.Seconds,
(short)(10 * t.HundredthSeconds));
- assure ("UserDefined time", eqDuration(t_dur, (Duration)
+ assertTrue("UserDefined time", eqDuration(t_dur, (Duration)
udps.getPropertyValue("FrobDuration2")));
- assure ("UserDefined date", eqDate(date, (Date)
+ assertTrue("UserDefined date", eqDate(date, (Date)
udps.getPropertyValue("FrobEndDate")));
- assure ("UserDefined datetime", eqDateTime(dt, (DateTime)
+ assertTrue("UserDefined datetime", eqDateTime(dt, (DateTime)
udps.getPropertyValue("FrobStartTime")));
- assure ("UserDefined float", new Double(d).equals(
+ assertTrue("UserDefined float", new Double(d).equals(
udps.getPropertyValue("Pi")));
- assure ("UserDefined string", "bar".equals(
+ assertTrue("UserDefined string", "bar".equals(
udps.getPropertyValue("Foo")));
try {
udps.getPropertyValue("Removed");
- assure("UserDefined remove didn't", false);
+ fail("UserDefined remove didn't");
} catch (UnknownPropertyException e) {
// ok
}
- log.println("...done");
+ System.out.println("...done");
- log.println("Checking notification listener interface...");
+ System.out.println("Checking notification listener interface...");
Listener listener = new Listener();
- XModifyBroadcaster xMB = (XModifyBroadcaster)
- UnoRuntime.queryInterface(XModifyBroadcaster.class, xDP);
+ XModifyBroadcaster xMB = UnoRuntime.queryInterface( XModifyBroadcaster.class, xDP );
xMB.addModifyListener(listener);
xDP.setAuthor("not me");
- assure ("Listener Author", listener.reset());
+ assertTrue("Listener Author", listener.reset());
udpc.addProperty("Listener", PropertyAttribute.REMOVEABLE, "foo");
- assure ("Listener UserDefined Add", listener.reset());
+ assertTrue("Listener UserDefined Add", listener.reset());
udps.setPropertyValue("Listener", "bar");
- assure ("Listener UserDefined Set", listener.reset());
+ assertTrue("Listener UserDefined Set", listener.reset());
udpc.removeProperty("Listener");
- assure ("Listener UserDefined Remove", listener.reset());
+ assertTrue("Listener UserDefined Remove", listener.reset());
xMB.removeModifyListener(listener);
udpc.addProperty("Listener2", PropertyAttribute.REMOVEABLE, "foo");
- assure ("Removed Listener UserDefined Add", !listener.reset());
+ assertTrue("Removed Listener UserDefined Add", !listener.reset());
- log.println("...done");
+ System.out.println("...done");
} catch (Exception e) {
report(e);
@@ -538,9 +526,36 @@ public class DocumentMetaData extends ComplexTestCase
}
public void report(Exception e) {
- log.println("Exception occurred:");
- e.printStackTrace((java.io.PrintWriter) log);
- failed();
+ System.out.println("Exception occurred:");
+ e.printStackTrace();
+ fail();
+ }
+
+
+ private XMultiServiceFactory getMSF()
+ {
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface( XMultiServiceFactory.class, connection.getComponentContext().getServiceManager() );
+ return xMSF1;
}
+
+ // setup and close connections
+ @BeforeClass public static void setUpConnection() throws Exception {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "starting class: " + DocumentProperties.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
+ connection.setUp();
+ }
+
+ @AfterClass public static void tearDownConnection()
+ throws InterruptedException, com.sun.star.uno.Exception
+ {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "finishing class: " + DocumentProperties.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
+ connection.tearDown();
+ }
+
+ private static final OfficeConnection connection = new OfficeConnection();
+
}
diff --git a/sfx2/qa/complex/sfx2/GlobalEventBroadcaster.java b/sfx2/qa/complex/sfx2/GlobalEventBroadcaster.java
new file mode 100755
index 000000000000..41bd66ccb5b9
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/GlobalEventBroadcaster.java
@@ -0,0 +1,273 @@
+/*************************************************************************
+ *
+ * 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.sfx2;
+
+import com.sun.star.awt.XWindow;
+import com.sun.star.document.XEventBroadcaster;
+import com.sun.star.document.XEventListener;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.sheet.XSpreadsheetDocument;
+import com.sun.star.text.XTextDocument;
+import com.sun.star.uno.UnoRuntime;
+import complex.sfx2.tools.WriterHelper;
+
+import java.util.ArrayList;
+
+import util.UITools;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openoffice.test.OfficeConnection;
+import static org.junit.Assert.*;
+
+
+/**
+ * This testcase checks the GlobalEventBroadcaster
+ * it will add an XEventListener and verify the Events
+ * raised when opening/changing and closing Office Documents
+ */
+public class GlobalEventBroadcaster {
+ XMultiServiceFactory m_xMSF = null;
+ XEventBroadcaster m_xEventBroadcaster = null;
+ ArrayList notifyEvents = new ArrayList();
+ // XTextDocument xTextDoc;
+ XSpreadsheetDocument xSheetDoc;
+ XEventListener m_xEventListener = new EventListenerImpl();
+
+ @Before public void initialize() {
+ m_xMSF = getMSF();
+ System.out.println("check wether there is a valid MultiServiceFactory");
+
+ assertNotNull("## Couldn't get MultiServiceFactory make sure your Office is started", m_xMSF);
+
+ System.out.println("... done");
+
+ System.out.println(
+ "Create an instance of com.sun.star.frame.GlobalEventBroadcaster");
+
+ Object GlobalEventBroadcaster = null;
+
+ try {
+ GlobalEventBroadcaster = m_xMSF.createInstance(
+ "com.sun.star.frame.GlobalEventBroadcaster");
+ } catch (com.sun.star.uno.Exception e) {
+ fail("## Exception while creating instance");
+ }
+
+ System.out.println("... done");
+
+ System.out.println("check wether the created instance is valid");
+
+ assertNotNull("couldn't create service", GlobalEventBroadcaster);
+
+ System.out.println("... done");
+
+ System.out.println(
+ "try to query the XEventBroadcaster from the gained Object");
+ m_xEventBroadcaster = UnoRuntime.queryInterface(XEventBroadcaster.class, GlobalEventBroadcaster);
+
+ if (util.utils.isVoid(m_xEventBroadcaster)) {
+ fail("couldn't get XEventBroadcaster");
+ }
+
+ System.out.println("... done");
+
+ System.out.println("adding Listener");
+ m_xEventBroadcaster.addEventListener(m_xEventListener);
+ System.out.println("... done");
+ }
+
+ @Test public void checkWriter() {
+ System.out.println("-- Checking Writer --");
+
+ WriterHelper wHelper = new WriterHelper(m_xMSF);
+ String[] expected;
+ System.out.println("opening an empty writer doc");
+ notifyEvents.clear();
+ {
+ XTextDocument xTextDoc = wHelper.openEmptyDoc();
+ shortWait();
+ expected = new String[] { "OnUnfocus", "OnCreate", "OnViewCreated", "OnFocus" };
+
+ assertTrue("Wrong events fired when opening empty doc",
+ proveExpectation(expected));
+ System.out.println("... done");
+
+ System.out.println("changing the writer doc");
+ notifyEvents.clear();
+ xTextDoc.getText().setString("GlobalEventBroadcaster");
+ shortWait();
+ expected = new String[] { "OnModifyChanged" };
+
+ assertTrue("Wrong events fired when changing doc",
+ proveExpectation(expected));
+ System.out.println("... done");
+
+ System.out.println("closing the empty writer doc");
+ notifyEvents.clear();
+ wHelper.closeDoc(xTextDoc);
+ shortWait();
+ }
+ expected = new String[] { "OnUnfocus", "OnFocus", "OnViewClosed", "OnUnload" };
+
+ assertTrue("Wrong events fired when closing empty doc",
+ proveExpectation(expected));
+ System.out.println("... done");
+
+ System.out.println("opening an writer doc via Window-New Window");
+ notifyEvents.clear();
+ {
+ XTextDocument xTextDoc = wHelper.openFromDialog(".uno:NewWindow", "", false);
+
+ shortWait();
+ expected = new String[] { "OnUnfocus", "OnCreate", "OnViewCreated", "OnFocus", "OnUnfocus", "OnViewCreated", "OnFocus", };
+
+ assertTrue("Wrong events fired when opening an writer doc via Window-New Window",
+ proveExpectation(expected));
+ System.out.println("... done");
+
+ System.out.println("closing the created writer doc");
+ notifyEvents.clear();
+
+ wHelper.closeDoc(xTextDoc);
+ shortWait();
+ }
+ expected = new String[] { "OnViewClosed", "OnUnfocus", "OnFocus", "OnViewClosed", "OnUnload" };
+
+ assertTrue("Wrong events fired when closing Window-New Window",
+ proveExpectation(expected));
+
+ System.out.println("... done");
+ // TODO: It seems not possible to close the document without interactiv question
+ // there the follow test will not be execute
+ if (false) {
+ System.out.println("Opening document with label wizard");
+ XTextDocument xTextDoc = wHelper.openFromDialog("private:factory/swriter?slot=21051", "", false);
+ shortWait();
+ XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, wHelper.getToolkit().getActiveTopWindow());
+ UITools ut = new UITools(m_xMSF,xWindow);
+ notifyEvents.clear();
+ System.out.println("pressing button 'New Document'");
+ try{
+ ut.clickButton ("New Document");
+ } catch (Exception e) {
+ System.out.println("Couldn't press Button");
+ }
+ System.out.println("... done");
+ shortWait();
+ shortWait();
+ shortWait();
+ expected = new String[] { "OnViewClosed", "OnCreate", "OnFocus", "OnModifyChanged" };
+
+ assertTrue("Wrong events fired when starting labels wizard",
+ proveExpectation(expected));
+
+ System.out.println("Try to close document...");
+ wHelper.closeDoc(xTextDoc);
+ shortWait();
+ wHelper.closeFromDialog();
+ shortWait();
+ xTextDoc = null;
+ }
+
+ System.out.println("-- Done Writer --");
+ }
+
+ @After public void cleanup() {
+ System.out.println("removing Listener");
+ m_xEventBroadcaster.removeEventListener(m_xEventListener);
+ System.out.println("... done");
+ }
+
+ /**
+ * Sleeps for 0.5 sec. to allow StarOffice to react on <code>
+ * reset</code> call.
+ */
+ private void shortWait() {
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ System.out.println("While waiting :" + e);
+ }
+ }
+
+ private boolean proveExpectation(String[] expected) {
+ boolean locRes = true;
+ boolean failure = false;
+
+ System.out.println("Fired Events:");
+ for (int k=0;k<notifyEvents.size();k++) {
+ System.out.println("\t- "+notifyEvents.get(k));
+ }
+
+ for (int i = 0; i < expected.length; i++) {
+ locRes = notifyEvents.contains(expected[i]);
+
+ if (!locRes) {
+ System.out.println("The event " + expected[i] + " isn't fired");
+ failure = true;
+ }
+ }
+
+ return !failure;
+ }
+
+ public class EventListenerImpl implements XEventListener {
+ public void disposing(com.sun.star.lang.EventObject eventObject) {
+ System.out.println("disposing: " + eventObject.Source.toString());
+ }
+
+ public void notifyEvent(com.sun.star.document.EventObject eventObject) {
+ notifyEvents.add(eventObject.EventName);
+ }
+ }
+
+ private XMultiServiceFactory getMSF()
+ {
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());
+ return xMSF1;
+ }
+
+ // setup and close connections
+ @BeforeClass public static void setUpConnection() throws Exception {
+ System.out.println("setUpConnection()");
+ connection.setUp();
+ }
+
+ @AfterClass public static void tearDownConnection()
+ throws InterruptedException, com.sun.star.uno.Exception
+ {
+ System.out.println("tearDownConnection() CheckGlobalEventBroadcaster_writer1");
+ connection.tearDown();
+ }
+
+ private static final OfficeConnection connection = new OfficeConnection();
+
+}
diff --git a/sfx2/qa/complex/sfx2/StandaloneDocumentInfo.java b/sfx2/qa/complex/sfx2/StandaloneDocumentInfo.java
new file mode 100755
index 000000000000..1e9cbb1f4738
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/StandaloneDocumentInfo.java
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * 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.sfx2;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.UnoRuntime;
+import complex.sfx2.standalonedocinfo.StandaloneDocumentInfoTest;
+import complex.sfx2.standalonedocinfo.Test01;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openoffice.test.OfficeConnection;
+import static org.junit.Assert.*;
+
+/* Document here
+*/
+
+public class StandaloneDocumentInfo {
+ private XMultiServiceFactory m_xMSF = null;
+
+ @Before public void before() {
+ try {
+ m_xMSF = getMSF();
+ } catch(Exception e) {
+ fail( "Failed to create service factory!" );
+ }
+ if( m_xMSF ==null ) {
+ fail( "Failed to create service factory!" );
+ }
+ }
+
+ @After public void after() {
+ m_xMSF = null;
+ }
+
+ @Test public void ExecuteTest01() {
+ StandaloneDocumentInfoTest aTest = new Test01 (m_xMSF);
+ assertTrue( "Test01 failed!", aTest.test() );
+ }
+
+
+
+
+ private XMultiServiceFactory getMSF()
+ {
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());
+ return xMSF1;
+ }
+
+ // setup and close connections
+ @BeforeClass public static void setUpConnection() throws Exception
+ {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "starting class: " + StandaloneDocumentInfo.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
+ connection.setUp();
+ }
+
+ @AfterClass public static void tearDownConnection()
+ throws InterruptedException, com.sun.star.uno.Exception
+ {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( "finishing class: " + StandaloneDocumentInfo.class.getName() );
+ System.out.println( "------------------------------------------------------------" );
+ connection.tearDown();
+ }
+
+ private static final OfficeConnection connection = new OfficeConnection();
+
+}
+
+
diff --git a/sfx2/qa/complex/sfx2/UndoManager.java b/sfx2/qa/complex/sfx2/UndoManager.java
new file mode 100755
index 000000000000..f37530aba726
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/UndoManager.java
@@ -0,0 +1,1464 @@
+/*************************************************************************
+ *
+ * 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.sfx2;
+
+import com.sun.star.accessibility.XAccessible;
+import com.sun.star.accessibility.XAccessibleAction;
+import com.sun.star.awt.Point;
+import com.sun.star.awt.Size;
+import com.sun.star.awt.XControl;
+import com.sun.star.awt.XControlModel;
+import com.sun.star.beans.NamedValue;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.container.NoSuchElementException;
+import com.sun.star.container.XChild;
+import com.sun.star.container.XIndexContainer;
+import com.sun.star.container.XNameContainer;
+import com.sun.star.container.XNameReplace;
+import com.sun.star.container.XSet;
+import com.sun.star.document.EmptyUndoStackException;
+import com.sun.star.document.UndoContextNotClosedException;
+import com.sun.star.document.UndoFailedException;
+import com.sun.star.document.UndoManagerEvent;
+import com.sun.star.document.XEmbeddedScripts;
+import com.sun.star.document.XEventsSupplier;
+import com.sun.star.document.XUndoAction;
+import com.sun.star.lang.EventObject;
+import com.sun.star.lang.IndexOutOfBoundsException;
+import com.sun.star.lang.XEventListener;
+import java.lang.reflect.InvocationTargetException;
+import org.openoffice.test.tools.OfficeDocument;
+import com.sun.star.document.XUndoManagerSupplier;
+import com.sun.star.document.XUndoManager;
+import com.sun.star.document.XUndoManagerListener;
+import com.sun.star.drawing.XControlShape;
+import com.sun.star.drawing.XDrawPage;
+import com.sun.star.drawing.XDrawPageSupplier;
+import com.sun.star.drawing.XShapes;
+import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XServiceInfo;
+import com.sun.star.lang.XSingleComponentFactory;
+import com.sun.star.lang.XTypeProvider;
+import com.sun.star.script.ScriptEventDescriptor;
+import com.sun.star.script.XEventAttacherManager;
+import com.sun.star.script.XLibraryContainer;
+import com.sun.star.task.XJob;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.util.InvalidStateException;
+import com.sun.star.util.NotLockedException;
+import com.sun.star.view.XControlAccess;
+import complex.sfx2.undo.CalcDocumentTest;
+import complex.sfx2.undo.ChartDocumentTest;
+import complex.sfx2.undo.DocumentTest;
+import complex.sfx2.undo.DrawDocumentTest;
+import complex.sfx2.undo.ImpressDocumentTest;
+import complex.sfx2.undo.WriterDocumentTest;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Stack;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.openoffice.test.OfficeConnection;
+import org.openoffice.test.tools.DocumentType;
+import org.openoffice.test.tools.SpreadsheetDocument;
+
+/**
+ * Unit test for the UndoManager API
+ *
+ * @author frank.schoenheit@oracle.com
+ */
+public class UndoManager
+{
+ // -----------------------------------------------------------------------------------------------------------------
+ @Before
+ public void beforeTest() throws com.sun.star.uno.Exception
+ {
+ m_currentTestCase = null;
+ m_currentDocument = null;
+ m_undoListener = null;
+
+ // at our service factory, insert a new factory for our CallbackComponent
+ // this will allow the Basic code in our test documents to call back into this test case
+ // here, by just instantiating this service
+ final XSet globalFactory = UnoRuntime.queryInterface( XSet.class, getORB() );
+ m_callbackFactory = new CallbackComponentFactory();
+ globalFactory.insert( m_callbackFactory );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkWriterUndo() throws Exception
+ {
+ m_currentTestCase = new WriterDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkCalcUndo() throws Exception
+ {
+ m_currentTestCase = new CalcDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkDrawUndo() throws Exception
+ {
+ m_currentTestCase = new DrawDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkImpressUndo() throws Exception
+ {
+ m_currentTestCase = new ImpressDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkChartUndo() throws Exception
+ {
+ m_currentTestCase = new ChartDocumentTest( getORB() );
+ impl_checkUndo();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+//#i116813# disabled @Test
+ public void checkBrokenScripts() throws com.sun.star.uno.Exception, InterruptedException
+ {
+ System.out.println( "testing: broken scripts" );
+
+ m_currentDocument = OfficeDocument.blankDocument( getORB(), DocumentType.CALC );
+ m_undoListener = new UndoListener();
+ getUndoManager().addUndoManagerListener( m_undoListener );
+
+ impl_setupBrokenBasicScript();
+ final String scriptURI = "vnd.sun.star.script:default.callbacks.brokenScript?language=Basic&location=document";
+
+ // .............................................................................................................
+ // scenario 1: Pressing a button which is bound to execute the script
+ // (This is one of the many cases where SfxObjectShell::CallXScript is invoked)
+
+ // set up the button
+ final XPropertySet buttonModel = impl_setupButton();
+ buttonModel.setPropertyValue( "Label", "exec broken script" );
+ impl_assignScript( buttonModel, "XActionListener", "actionPerformed",
+ scriptURI );
+
+ // switch the doc's view to form alive mode (so the button will actually work)
+ m_currentDocument.getCurrentView().dispatch( ".uno:SwitchControlDesignMode" );
+
+ // click the button
+ m_callbackCalled = false;
+ impl_clickButton( buttonModel );
+ // the macro is executed asynchronously by the button, so wait at most 2 seconds for the callback to be
+ // triggered
+ impl_waitFor( m_callbackCondition, 2000 );
+ // check the callback has actually been called
+ assertTrue( "clicking the test button did not work as expected - basic script not called", m_callbackCalled );
+
+ // again, since the script is executed asynchronously, we might arrive here while its execution
+ // is not completely finished. Give OOo another (at most) 2 seconds to finish it.
+ m_undoListener.waitForAllContextsClosed( 20000 );
+ // assure that the Undo Context Depth of the doc is still "0": The Basic script entered such a
+ // context, and didn't close it (thus it is broken), but the application framework should have
+ // auto-closed the context after the macro finished.
+ assertEquals( "undo context was not auto-closed as expected", 0, m_undoListener.getCurrentUndoContextDepth() );
+
+ // .............................................................................................................
+ // scenario 2: dispatching the script URL. Technically, this is equivalent to configuring the
+ // script into a menu or toolbar, and selecting the respective menu/toolbar item
+ m_callbackCalled = false;
+ m_currentDocument.getCurrentView().dispatch( scriptURI );
+ assertTrue( "dispatching the Script URL did not work as expected - basic script not called", m_callbackCalled );
+ // same as above: The script didn't close the context, but the OOo framework should have
+ assertEquals( "undo context was not auto-closed as expected", 0, m_undoListener.getCurrentUndoContextDepth() );
+
+ // .............................................................................................................
+ // scenario 3: assigning the script to some document event, and triggering this event
+ final XEventsSupplier eventSupplier = UnoRuntime.queryInterface( XEventsSupplier.class, m_currentDocument.getDocument() );
+ final XNameReplace events = UnoRuntime.queryInterface( XNameReplace.class, eventSupplier.getEvents() );
+ final NamedValue[] scriptDescriptor = new NamedValue[] {
+ new NamedValue( "EventType", "Script" ),
+ new NamedValue( "Script", scriptURI )
+ };
+ events.replaceByName( "OnViewCreated", scriptDescriptor );
+
+ // The below doesn't work: event notification is broken in m96, see http://www.openoffice.org/issues/show_bug.cgi?id=116313
+/* m_callbackCalled = false;
+ m_currentDocument.getCurrentView().dispatch( ".uno:NewWindow" );
+ assertTrue( "triggering an event did not work as expected - basic script not called", m_callbackCalled );
+ // same as above: The script didn't close the context, but the OOo framework should have
+ assertEquals( "undo context was not auto-closed as expected", 0, m_undoListener.getCurrentUndoContextDepth() );
+ */
+
+ // .............................................................................................................
+ // scenario 4: let the script enter an Undo context, but not close it, as usual.
+ // Additionally, let the script close the document - the OOo framework code which cares for
+ // auto-closing of Undo contexts should survive this, ideally ...
+ m_closeAfterCallback = true;
+ m_callbackCalled = false;
+ m_currentDocument.getCurrentView().dispatch( scriptURI );
+ assertTrue( m_callbackCalled );
+ assertTrue( "The Basic script should have closed the document.", m_undoListener.isDisposed() );
+ m_currentDocument = null;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @Test
+ public void checkSerialization() throws com.sun.star.uno.Exception, InterruptedException
+ {
+ System.out.println( "testing: request serialization" );
+
+ m_currentDocument = OfficeDocument.blankDocument( getORB(), DocumentType.CALC );
+ final XUndoManager undoManager = getUndoManager();
+
+ final int threadCount = 10;
+ final int actionsPerThread = 10;
+ final int actionCount = threadCount * actionsPerThread;
+
+ // add some actions to the UndoManager, each knowing its position on the stack
+ final Object lock = new Object();
+ final Integer actionsUndone[] = new Integer[] { 0 };
+ for ( int i=actionCount; i>0; )
+ undoManager.addUndoAction( new CountingUndoAction( --i, lock, actionsUndone ) );
+
+ // some concurrent threads which undo the actions
+ Thread[] threads = new Thread[threadCount];
+ for ( int i=0; i<threadCount; ++i )
+ {
+ threads[i] = new Thread()
+ {
+ @Override
+ public void run()
+ {
+ for ( int j=0; j<actionsPerThread; ++j )
+ {
+ try { undoManager.undo(); }
+ catch ( final Exception e )
+ {
+ fail( "Those dummy actions are not expected to fail." );
+ return;
+ }
+ }
+ }
+ };
+ }
+
+ // start the threads
+ for ( int i=0; i<threadCount; ++i )
+ threads[i].start();
+
+ // wait for them to be finished
+ for ( int i=0; i<threadCount; ++i )
+ threads[i].join();
+
+ // ensure all actions have been undone
+ assertEquals( "not all actions have been undone", actionCount, actionsUndone[0].intValue() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @After
+ public void afterTest()
+ {
+ if ( m_currentTestCase != null )
+ m_currentTestCase.closeDocument();
+ else if ( m_currentDocument != null )
+ m_currentDocument.close();
+ m_currentTestCase = null;
+ m_currentDocument = null;
+ m_callbackFactory.dispose();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ /**
+ * returns the undo manager belonging to a given document
+ * @return
+ */
+ private XUndoManager getUndoManager()
+ {
+ final XUndoManagerSupplier suppUndo = UnoRuntime.queryInterface( XUndoManagerSupplier.class, m_currentDocument.getDocument() );
+ final XUndoManager undoManager = suppUndo.getUndoManager();
+ assertTrue( UnoRuntime.areSame( undoManager.getParent(), m_currentDocument.getDocument() ) );
+ return undoManager;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_waitFor( final Object i_condition, final int i_milliSeconds ) throws InterruptedException
+ {
+ synchronized( i_condition )
+ {
+ i_condition.wait( i_milliSeconds );
+ }
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_setupBrokenBasicScript()
+ {
+ try
+ {
+ final XEmbeddedScripts embeddedScripts = UnoRuntime.queryInterface( XEmbeddedScripts.class, m_currentDocument.getDocument() );
+ final XLibraryContainer basicLibs = embeddedScripts.getBasicLibraries();
+ final XNameContainer basicLib = basicLibs.createLibrary( "default" );
+
+ final String brokenScriptCode =
+ "Option Explicit\n" +
+ "\n" +
+ "Sub brokenScript\n" +
+ " Dim callback as Object\n" +
+ " ThisComponent.UndoManager.enterUndoContext( \"" + getCallbackUndoContextTitle() + "\" )\n" +
+ "\n" +
+ " callback = createUnoService( \"" + getCallbackComponentServiceName() + "\" )\n" +
+ " Dim emptyArgs() as new com.sun.star.beans.NamedValue\n" +
+ " Dim result as String\n" +
+ " result = callback.execute( emptyArgs() )\n" +
+ " If result = \"close\" Then\n" +
+ " ThisComponent.close( TRUE )\n" +
+ " End If\n" +
+ "End Sub\n" +
+ "\n";
+
+ basicLib.insertByName( "callbacks", brokenScriptCode );
+ }
+ catch( com.sun.star.uno.Exception e )
+ {
+ fail( "caught an exception while setting up the script: " + e.toString() );
+ }
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private XPropertySet impl_setupButton() throws com.sun.star.uno.Exception
+ {
+ // let the document create a shape
+ final XMultiServiceFactory docAsFactory = UnoRuntime.queryInterface( XMultiServiceFactory.class,
+ m_currentDocument.getDocument() );
+ final XControlShape xShape = UnoRuntime.queryInterface( XControlShape.class,
+ docAsFactory.createInstance( "com.sun.star.drawing.ControlShape" ) );
+
+ // position and size of the shape
+ xShape.setSize( new Size( 28 * 100, 10 * 100 ) );
+ xShape.setPosition( new Point( 10 * 100, 10 * 100 ) );
+
+ // create the form component (the model of a form control)
+ final String sQualifiedComponentName = "com.sun.star.form.component.CommandButton";
+ final XControlModel controlModel = UnoRuntime.queryInterface( XControlModel.class,
+ getORB().createInstance( sQualifiedComponentName ) );
+
+ // knitt both
+ xShape.setControl( controlModel );
+
+ // add the shape to the shapes collection of the document
+ SpreadsheetDocument spreadsheetDoc = (SpreadsheetDocument)m_currentDocument;
+ final XDrawPageSupplier suppDrawPage = UnoRuntime.queryInterface( XDrawPageSupplier.class,
+ spreadsheetDoc.getSheet( 0 ) );
+ final XDrawPage insertIntoPage = suppDrawPage.getDrawPage();
+
+ final XShapes sheetShapes = UnoRuntime.queryInterface( XShapes.class, insertIntoPage );
+ sheetShapes.add( xShape );
+
+ return UnoRuntime.queryInterface( XPropertySet.class, controlModel );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_assignScript( final XPropertySet i_controlModel, final String i_interfaceName,
+ final String i_interfaceMethod, final String i_scriptURI )
+ {
+ try
+ {
+ final XChild modelAsChild = UnoRuntime.queryInterface( XChild.class, i_controlModel );
+ final XIndexContainer parentForm = UnoRuntime.queryInterface( XIndexContainer.class, modelAsChild.getParent() );
+
+ final XEventAttacherManager manager = UnoRuntime.queryInterface( XEventAttacherManager.class, parentForm );
+
+ int containerPosition = -1;
+ for ( int i = 0; i < parentForm.getCount(); ++i )
+ {
+ final XPropertySet child = UnoRuntime.queryInterface( XPropertySet.class, parentForm.getByIndex( i ) );
+ if ( UnoRuntime.areSame( child, i_controlModel ) )
+ {
+ containerPosition = i;
+ break;
+ }
+ }
+ assertFalse( "could not find the given control model within its parent", containerPosition == -1 );
+ manager.registerScriptEvent( containerPosition, new ScriptEventDescriptor(
+ i_interfaceName,
+ i_interfaceMethod,
+ "",
+ "Script",
+ i_scriptURI
+ ) );
+ }
+ catch( com.sun.star.uno.Exception e )
+ {
+ fail( "caught an exception while assigning the script event to the button: " + e.toString() );
+ }
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_clickButton( final XPropertySet i_buttonModel ) throws NoSuchElementException, IndexOutOfBoundsException
+ {
+ final XControlAccess controlAccess = UnoRuntime.queryInterface( XControlAccess.class,
+ m_currentDocument.getCurrentView().getController() );
+ final XControl control = controlAccess.getControl( UnoRuntime.queryInterface( XControlModel.class, i_buttonModel ) );
+ final XAccessible accessible = UnoRuntime.queryInterface( XAccessible.class, control );
+ final XAccessibleAction controlActions = UnoRuntime.queryInterface( XAccessibleAction.class, accessible.getAccessibleContext() );
+ for ( int i=0; i<controlActions.getAccessibleActionCount(); ++i )
+ {
+ if ( controlActions.getAccessibleActionDescription(i).equals( "click" ) )
+ {
+ controlActions.doAccessibleAction(i);
+ return;
+ }
+ }
+ fail( "did not find the accessible action named 'click'" );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static class UndoListener implements XUndoManagerListener
+ {
+ public void undoActionAdded( UndoManagerEvent i_event )
+ {
+ assertFalse( "|undoActionAdded| called after document was disposed", m_isDisposed );
+
+ ++m_undoActionsAdded;
+ m_mostRecentlyAddedAction = i_event.UndoActionTitle;
+ }
+
+ public void actionUndone( UndoManagerEvent i_event )
+ {
+ assertFalse( "|actionUndone| called after document was disposed", m_isDisposed );
+
+ ++m_undoCount;
+ m_mostRecentlyUndone = i_event.UndoActionTitle;
+ }
+
+ public void actionRedone( UndoManagerEvent i_event )
+ {
+ assertFalse( "|actionRedone| called after document was disposed", m_isDisposed );
+
+ ++m_redoCount;
+ }
+
+ public void allActionsCleared( EventObject eo )
+ {
+ assertFalse( "|allActionsCleared| called after document was disposed", m_isDisposed );
+
+ m_wasCleared = true;
+ }
+
+ public void redoActionsCleared( EventObject eo )
+ {
+ assertFalse( "|redoActionsCleared| called after document was disposed", m_isDisposed );
+
+ m_redoWasCleared = true;
+ }
+
+ public void resetAll( EventObject i_event )
+ {
+ assertFalse( "|resetAll| called after document was disposed", m_isDisposed );
+
+ m_managerWasReset = true;
+ m_activeUndoContexts.clear();
+ }
+
+ public void enteredContext( UndoManagerEvent i_event )
+ {
+ assertFalse( "|enteredContext| called after document was disposed", m_isDisposed );
+
+ m_activeUndoContexts.push( i_event.UndoActionTitle );
+ assertEquals( "different opinions on the context nesting level (after entering)",
+ m_activeUndoContexts.size(), i_event.UndoContextDepth );
+ }
+
+ public void enteredHiddenContext( UndoManagerEvent i_event )
+ {
+ assertFalse( "|enteredHiddenContext| called after document was disposed", m_isDisposed );
+
+ m_activeUndoContexts.push( i_event.UndoActionTitle );
+ assertEquals( "different opinions on the context nesting level (after entering hidden)",
+ m_activeUndoContexts.size(), i_event.UndoContextDepth );
+ }
+
+ public void leftContext( UndoManagerEvent i_event )
+ {
+ assertFalse( "|leftContext| called after document was disposed", m_isDisposed );
+
+ assertEquals( "nested undo context descriptions do not match", m_activeUndoContexts.pop(), i_event.UndoActionTitle );
+ assertEquals( "different opinions on the context nesting level (after leaving)",
+ m_activeUndoContexts.size(), i_event.UndoContextDepth );
+ m_leftContext = true;
+ impl_notifyContextDepth();
+ }
+
+ public void leftHiddenContext( UndoManagerEvent i_event )
+ {
+ assertFalse( "|leftHiddenContext| called after document was disposed", m_isDisposed );
+ assertEquals( "|leftHiddenContext| is not expected to notify an action title", 0, i_event.UndoActionTitle.length() );
+
+ m_activeUndoContexts.pop();
+ assertEquals( "different opinions on the context nesting level (after leaving)",
+ m_activeUndoContexts.size(), i_event.UndoContextDepth );
+ m_leftHiddenContext = true;
+ impl_notifyContextDepth();
+ }
+
+ public void cancelledContext( UndoManagerEvent i_event )
+ {
+ assertFalse( "|cancelledContext| called after document was disposed", m_isDisposed );
+ assertEquals( "|cancelledContext| is not expected to notify an action title", 0, i_event.UndoActionTitle.length() );
+
+ m_activeUndoContexts.pop();
+ assertEquals( "different opinions on the context nesting level (after cancelling)",
+ m_activeUndoContexts.size(), i_event.UndoContextDepth );
+ m_cancelledContext = true;
+ impl_notifyContextDepth();
+ }
+
+ public void disposing( EventObject i_event )
+ {
+ m_isDisposed = true;
+ }
+
+ public void waitForAllContextsClosed( final int i_milliSeconds ) throws InterruptedException
+ {
+ synchronized ( m_allContextsClosedCondition )
+ {
+ if ( m_activeUndoContexts.empty() )
+ return;
+ m_allContextsClosedCondition.wait( i_milliSeconds );
+ }
+ }
+
+ private void impl_notifyContextDepth()
+ {
+ synchronized ( m_allContextsClosedCondition )
+ {
+ if ( m_activeUndoContexts.empty() )
+ {
+ m_allContextsClosedCondition.notifyAll();
+ }
+ }
+ }
+
+ private int getUndoActionsAdded() { return m_undoActionsAdded; }
+ private int getUndoActionCount() { return m_undoCount; }
+ private int getRedoActionCount() { return m_redoCount; }
+ private String getCurrentUndoContextTitle() { return m_activeUndoContexts.peek(); }
+ private String getMostRecentlyAddedActionTitle() { return m_mostRecentlyAddedAction; };
+ private String getMostRecentlyUndoneTitle() { return m_mostRecentlyUndone; }
+ private int getCurrentUndoContextDepth() { return m_activeUndoContexts.size(); }
+ private boolean isDisposed() { return m_isDisposed; }
+ private boolean wasContextLeft() { return m_leftContext; }
+ private boolean wasHiddenContextLeft() { return m_leftHiddenContext; }
+ private boolean hasContextBeenCancelled() { return m_cancelledContext; }
+ private boolean wereStacksCleared() { return m_wasCleared; }
+ private boolean wasRedoStackCleared() { return m_redoWasCleared; }
+ private boolean wasManagerReset() { return m_managerWasReset; }
+
+ void reset()
+ {
+ m_undoActionsAdded = m_undoCount = m_redoCount = 0;
+ m_activeUndoContexts.clear();
+ m_mostRecentlyAddedAction = m_mostRecentlyUndone = null;
+ // m_isDisposed is not cleared, intentionally
+ m_leftContext = m_leftHiddenContext = m_cancelledContext = m_wasCleared = m_redoWasCleared = m_managerWasReset = false;
+ }
+
+ private int m_undoActionsAdded = 0;
+ private int m_undoCount = 0;
+ private int m_redoCount = 0;
+ private boolean m_isDisposed = false;
+ private boolean m_leftContext = false;
+ private boolean m_leftHiddenContext = false;
+ private boolean m_cancelledContext = false;
+ private boolean m_wasCleared = false;
+ private boolean m_redoWasCleared = false;
+ private boolean m_managerWasReset = false;
+ private Stack< String >
+ m_activeUndoContexts = new Stack<String>();
+ private String m_mostRecentlyAddedAction = null;
+ private String m_mostRecentlyUndone = null;
+ private final Object m_allContextsClosedCondition = new Object();
+ };
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_checkUndo() throws Exception
+ {
+ System.out.println( "testing: " + m_currentTestCase.getDocumentDescription() );
+ m_currentDocument = m_currentTestCase.getDocument();
+ m_currentTestCase.initializeDocument();
+ m_currentTestCase.verifyInitialDocumentState();
+
+ final XUndoManager undoManager = getUndoManager();
+ undoManager.clear();
+ assertFalse( "clearing the Undo manager should result in the impossibility to undo anything", undoManager.isUndoPossible() );
+ assertFalse( "clearing the Undo manager should result in the impossibility to redo anything", undoManager.isRedoPossible() );
+
+ m_undoListener = new UndoListener();
+ undoManager.addUndoManagerListener( m_undoListener );
+
+ impl_testSingleModification( undoManager );
+ impl_testMultipleModifications( undoManager );
+ impl_testCustomUndoActions( undoManager );
+ impl_testLocking( undoManager );
+ impl_testNestedContexts( undoManager );
+ impl_testErrorHandling( undoManager );
+ impl_testContextHandling( undoManager );
+ impl_testStackHandling( undoManager );
+ impl_testClearance( undoManager );
+ impl_testHiddenContexts( undoManager );
+
+ // close the document, ensure the Undo manager listener gets notified
+ m_currentTestCase.closeDocument();
+ m_currentTestCase = null;
+ m_currentDocument = null;
+ assertTrue( "document is closed, but the UndoManagerListener has not been notified of the disposal", m_undoListener.isDisposed() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testSingleModification( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ m_currentTestCase.doSingleModification();
+ m_currentTestCase.verifySingleModificationDocumentState();
+
+ // undo the modification, ensure the listener got the proper notifications
+ assertEquals( "We did not yet do a undo!", 0, m_undoListener.getUndoActionCount() );
+ i_undoManager.undo();
+ assertEquals( "A simple undo does not result in the proper Undo count.",
+ 1, m_undoListener.getUndoActionCount() );
+
+ // verify the document is in its initial state, again
+ m_currentTestCase.verifyInitialDocumentState();
+
+ // redo the modification, ensure the listener got the proper notifications
+ assertEquals( "did not yet do a redo!", 0, m_undoListener.getRedoActionCount() );
+ i_undoManager.redo();
+ assertEquals( "did a redo, but got no notification of it!", 1, m_undoListener.getRedoActionCount() );
+ // ensure the document is in the proper state, again
+ m_currentTestCase.verifySingleModificationDocumentState();
+
+ // now do an Undo via the UI (aka the dispatch API), and see if this works, and notifies the listener as
+ // expected
+ m_currentTestCase.getDocument().getCurrentView().dispatch( ".uno:Undo" );
+ m_currentTestCase.verifyInitialDocumentState();
+ assertEquals( "UI-Undo does not notify the listener", 2, m_undoListener.getUndoActionCount() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testMultipleModifications( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ m_undoListener.reset();
+ assertEquals( "unexpected initial undo context depth", 0, m_undoListener.getCurrentUndoContextDepth() );
+ i_undoManager.enterUndoContext( "Batch Changes" );
+ assertEquals( "unexpected undo context depth after entering a context",
+ 1, m_undoListener.getCurrentUndoContextDepth() );
+ assertEquals( "entering an Undo context has not been notified properly",
+ "Batch Changes", m_undoListener.getCurrentUndoContextTitle() );
+
+ final int modifications = m_currentTestCase.doMultipleModifications();
+ assertEquals( "unexpected number of undo actions while doing batch changes to the document",
+ modifications, m_undoListener.getUndoActionsAdded() );
+ assertEquals( "seems the document operations touched the undo context depth",
+ 1, m_undoListener.getCurrentUndoContextDepth() );
+
+ i_undoManager.leaveUndoContext();
+ assertEquals( "unexpected undo context depth after leaving the last context",
+ 0, m_undoListener.getCurrentUndoContextDepth() );
+ assertEquals( "no Undo done, yet - still the listener has been notified of an Undo action",
+ 0, m_undoListener.getUndoActionCount() );
+
+ i_undoManager.undo();
+ assertEquals( "Just did an undo - the listener should have been notified", 1, m_undoListener.getUndoActionCount() );
+ m_currentTestCase.verifyInitialDocumentState();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testCustomUndoActions( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.clear();
+ m_undoListener.reset();
+ assertFalse( "undo stack not empty after clearing the undo manager", i_undoManager.isUndoPossible() );
+ assertFalse( "redo stack not empty after clearing the undo manager", i_undoManager.isRedoPossible() );
+ assertArrayEquals( ">0 descriptions for an empty undo stack?",
+ new String[0], i_undoManager.getAllUndoActionTitles() );
+ assertArrayEquals( ">0 descriptions for an empty redo stack?",
+ new String[0], i_undoManager.getAllRedoActionTitles() );
+
+ // add two actions, one directly, one within a context
+ final CustomUndoAction action1 = new CustomUndoAction( "UndoAction1" );
+ i_undoManager.addUndoAction( action1 );
+ assertEquals( "Adding an undo action not observed by the listener", 1, m_undoListener.getUndoActionsAdded() );
+ assertEquals( "Adding an undo action did not notify the proper title",
+ action1.getTitle(), m_undoListener.getMostRecentlyAddedActionTitle() );
+ final String contextTitle = "Undo Context";
+ i_undoManager.enterUndoContext( contextTitle );
+ final CustomUndoAction action2 = new CustomUndoAction( "UndoAction2" );
+ i_undoManager.addUndoAction( action2 );
+ assertEquals( "Adding an undo action not observed by the listener",
+ 2, m_undoListener.getUndoActionsAdded() );
+ assertEquals( "Adding an undo action did not notify the proper title",
+ action2.getTitle(), m_undoListener.getMostRecentlyAddedActionTitle() );
+ i_undoManager.leaveUndoContext();
+
+ // see if the manager has proper descriptions
+ assertArrayEquals( "unexpected Redo descriptions after adding two actions",
+ new String[0], i_undoManager.getAllRedoActionTitles() );
+ assertArrayEquals( "unexpected Undo descriptions after adding two actions",
+ new String[]{contextTitle, action1.getTitle()}, i_undoManager.getAllUndoActionTitles() );
+
+ // undo one action
+ i_undoManager.undo();
+ assertEquals( "improper action title notified during programmatic Undo",
+ contextTitle, m_undoListener.getMostRecentlyUndoneTitle() );
+ assertTrue( "nested custom undo action has not been undone as expected", action2.undoCalled() );
+ assertFalse( "nested custom undo action has not been undone as expected", action1.undoCalled() );
+ assertArrayEquals( "unexpected Redo descriptions after undoing a nested custom action",
+ new String[]{contextTitle}, i_undoManager.getAllRedoActionTitles() );
+ assertArrayEquals( "unexpected Undo descriptions after undoing a nested custom action",
+ new String[]{action1.getTitle()}, i_undoManager.getAllUndoActionTitles() );
+
+ // undo the second action, via UI dispatches
+ m_currentTestCase.getDocument().getCurrentView().dispatch( ".uno:Undo" );
+ assertEquals( "improper action title notified during UI Undo", action1.getTitle(), m_undoListener.getMostRecentlyUndoneTitle() );
+ assertTrue( "nested custom undo action has not been undone as expected", action1.undoCalled() );
+ assertArrayEquals( "unexpected Redo descriptions after undoing the second custom action",
+ new String[]{action1.getTitle(), contextTitle}, i_undoManager.getAllRedoActionTitles() );
+ assertArrayEquals( "unexpected Undo descriptions after undoing the second custom action",
+ new String[0], i_undoManager.getAllUndoActionTitles() );
+
+ // check the actions are disposed when the stacks are cleared
+ i_undoManager.clear();
+ assertTrue( action1.disposed() && action2.disposed() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testLocking( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // implicit Undo actions, triggered by changes to the document
+ assertFalse( "unexpected initial locking state", i_undoManager.isLocked() );
+ i_undoManager.lock();
+ assertTrue( "just locked the manager, why does it lie?", i_undoManager.isLocked() );
+ m_currentTestCase.doSingleModification();
+ assertEquals( "when the Undo manager is locked, no implicit additions should happen",
+ 0, m_undoListener.getUndoActionsAdded() );
+ i_undoManager.unlock();
+ assertEquals( "unlock is not expected to add collected actions - they should be discarded",
+ 0, m_undoListener.getUndoActionsAdded() );
+ assertFalse( "just unlocked the manager, why does it lie?", i_undoManager.isLocked() );
+
+ // explicit Undo actions
+ i_undoManager.lock();
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.unlock();
+ assertEquals( "explicit Undo actions are expected to be ignored when the manager is locked",
+ 0, m_undoListener.getUndoActionsAdded() );
+
+ // Undo contexts while being locked
+ i_undoManager.lock();
+ i_undoManager.enterUndoContext( "Dummy Context" );
+ i_undoManager.enterHiddenUndoContext();
+ assertEquals( "entering Undo contexts should be ignored when the manager is locked", 0, m_undoListener.getCurrentUndoContextDepth() );
+ i_undoManager.leaveUndoContext();
+ i_undoManager.leaveUndoContext();
+ i_undoManager.unlock();
+
+ // |unlock| error handling
+ assertFalse( "internal error: manager should not be locked at this point in time", i_undoManager.isLocked() );
+ boolean caughtExpected = false;
+ try { i_undoManager.unlock(); } catch ( final NotLockedException e ) { caughtExpected = true; }
+ assertTrue( "unlocking the manager when it is not locked should throw", caughtExpected );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testContextHandling( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ // .............................................................................................................
+ // part I: non-empty contexts
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // put one action on the undo and one on the redo stack, as precondition for the following tests
+ final XUndoAction undoAction1 = new CustomUndoAction( "Undo Action 1" );
+ i_undoManager.addUndoAction( undoAction1 );
+ final XUndoAction undoAction2 = new CustomUndoAction( "Undo Action 2" );
+ i_undoManager.addUndoAction( undoAction2 );
+ i_undoManager.undo();
+ assertTrue( "precondition for context handling tests not met (1)", i_undoManager.isUndoPossible() );
+ assertTrue( "precondition for context handling tests not met (2)", i_undoManager.isRedoPossible() );
+ assertArrayEquals( new String[] { undoAction1.getTitle() }, i_undoManager.getAllUndoActionTitles() );
+ assertArrayEquals( new String[] { undoAction2.getTitle() }, i_undoManager.getAllRedoActionTitles() );
+
+ final String[] expectedRedoActionComments = new String[] { undoAction2.getTitle() };
+ assertArrayEquals( expectedRedoActionComments, i_undoManager.getAllRedoActionTitles() );
+
+ // enter a context
+ i_undoManager.enterUndoContext( "Undo Context" );
+ // this should not (yet) touch the redo stack
+ assertArrayEquals( expectedRedoActionComments, i_undoManager.getAllRedoActionTitles() );
+ assertEquals( "unexpected undo context depth after entering a context", 1, m_undoListener.getCurrentUndoContextDepth() );
+ // add a single action
+ XUndoAction undoAction3 = new CustomUndoAction( "Undo Action 3" );
+ i_undoManager.addUndoAction( undoAction3 );
+ // still, the redo stack should be untouched - added at a lower level does not affect it at all
+ assertArrayEquals( expectedRedoActionComments, i_undoManager.getAllRedoActionTitles() );
+
+ // while the context is open, its title should already contribute to the stack, ...
+ assertEquals( "Undo Context", i_undoManager.getCurrentUndoActionTitle() );
+ // ... getAllUndo/RedoActionTitles should operate on the top level, not on the level defined by the open
+ // context, ...
+ assertArrayEquals( new String[] { "Undo Context", undoAction1.getTitle() },
+ i_undoManager.getAllUndoActionTitles() );
+ // ... but Undo and Redo should be impossible as long as the context is open
+ assertFalse( i_undoManager.isUndoPossible() );
+ assertFalse( i_undoManager.isRedoPossible() );
+
+ // leave the context, check the listener has been notified properly, and the notified context depth is correct
+ i_undoManager.leaveUndoContext();
+ assertTrue( m_undoListener.wasContextLeft() );
+ assertFalse( m_undoListener.wasHiddenContextLeft() );
+ assertFalse( m_undoListener.hasContextBeenCancelled() );
+ assertEquals( "unexpected undo context depth leaving a non-empty context", 0, m_undoListener.getCurrentUndoContextDepth() );
+ // leaving a non-empty context should have cleare the redo stack
+ assertArrayEquals( new String[0], i_undoManager.getAllRedoActionTitles() );
+ assertTrue( m_undoListener.wasRedoStackCleared() );
+
+ // .............................................................................................................
+ // part II: empty contexts
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // enter a context, leave it immediately without adding an action to it
+ i_undoManager.enterUndoContext( "Undo Context" );
+ i_undoManager.leaveUndoContext();
+ assertFalse( m_undoListener.wasContextLeft() );
+ assertFalse( m_undoListener.wasHiddenContextLeft() );
+ assertTrue( m_undoListener.hasContextBeenCancelled() );
+ assertFalse( "leaving an empty context should silently remove it, and not contribute to the stack",
+ i_undoManager.isUndoPossible() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testNestedContexts( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+ i_undoManager.enterUndoContext( "context 1" );
+ i_undoManager.enterUndoContext( "context 1.1" );
+ final CustomUndoAction action1 = new CustomUndoAction( "action 1.1.1" );
+ i_undoManager.addUndoAction( action1 );
+ i_undoManager.enterUndoContext( "context 1.1.2" );
+ final CustomUndoAction action2 = new CustomUndoAction( "action 1.1.2.1" );
+ i_undoManager.addUndoAction( action2 );
+ i_undoManager.leaveUndoContext();
+ final CustomUndoAction action3 = new CustomUndoAction( "action 1.1.3" );
+ i_undoManager.addUndoAction( action3 );
+ i_undoManager.leaveUndoContext();
+ i_undoManager.leaveUndoContext();
+ final CustomUndoAction action4 = new CustomUndoAction( "action 1.2" );
+ i_undoManager.addUndoAction( action4 );
+
+ i_undoManager.undo();
+ assertEquals( "undoing a single action notifies a wrong title", action4.getTitle(), m_undoListener.getMostRecentlyUndoneTitle() );
+ assertTrue( "custom Undo not called", action4.undoCalled() );
+ assertFalse( "too many custom Undos called", action1.undoCalled() || action2.undoCalled() || action3.undoCalled() );
+ i_undoManager.undo();
+ assertTrue( "nested actions not properly undone", action1.undoCalled() && action2.undoCalled() && action3.undoCalled() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testErrorHandling( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // try retrieving the comments for the current Undo/Redo - this should fail
+ boolean caughtExpected = false;
+ try { i_undoManager.getCurrentUndoActionTitle(); }
+ catch( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "trying the title of the current Undo action is expected to fail for an empty stack", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.getCurrentRedoActionTitle(); }
+ catch( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "trying the title of the current Redo action is expected to fail for an empty stack", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.undo(); } catch ( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "undo should throw if no Undo action is on the stack", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.redo(); } catch ( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "redo should throw if no Redo action is on the stack", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.leaveUndoContext(); } catch ( final InvalidStateException e ) { caughtExpected = true; }
+ assertTrue( "leaveUndoContext should throw if no context is currently open", caughtExpected );
+
+ caughtExpected = false;
+ try { i_undoManager.addUndoAction( null ); } catch ( com.sun.star.lang.IllegalArgumentException e ) { caughtExpected = true; }
+ assertTrue( "adding a NULL action should be rejected", caughtExpected );
+
+ i_undoManager.reset();
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.undo();
+ i_undoManager.enterUndoContext( "Undo Context" );
+ // those methods should fail when a context is open:
+ final String[] methodNames = new String[] { "undo", "redo", "clear", "clearRedo" };
+ for ( int i=0; i<methodNames.length; ++i )
+ {
+ caughtExpected = false;
+ try
+ {
+ Method method = i_undoManager.getClass().getMethod( methodNames[i], new Class[0] );
+ method.invoke( i_undoManager, new Object[0] );
+ }
+ catch ( IllegalAccessException ex ) { }
+ catch ( IllegalArgumentException ex ) { }
+ catch ( InvocationTargetException ex )
+ {
+ Throwable targetException = ex.getTargetException();
+ caughtExpected = ( targetException instanceof UndoContextNotClosedException );
+ }
+ catch ( NoSuchMethodException ex ) { }
+ catch ( SecurityException ex ) { }
+
+ assertTrue( methodNames[i] + " should be rejected when there is an open context", caughtExpected );
+ }
+ i_undoManager.leaveUndoContext();
+
+ // try Undo actions which fail in their Undo/Redo
+ for ( int i=0; i<4; ++i )
+ {
+ final boolean undo = ( i < 2 );
+ final boolean doByAPI = ( i % 2 ) == 0;
+
+ i_undoManager.reset();
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.addUndoAction( new FailingUndoAction( undo ? FAIL_UNDO : FAIL_REDO ) );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.undo();
+ if ( !undo )
+ i_undoManager.undo();
+ // assert preconditions for the below test
+ assertTrue( i_undoManager.isUndoPossible() );
+ assertTrue( i_undoManager.isRedoPossible() );
+
+ boolean caughtUndoFailed = false;
+ try
+ {
+ if ( undo )
+ if ( doByAPI )
+ i_undoManager.undo();
+ else
+ m_currentTestCase.getDocument().getCurrentView().dispatch( ".uno:Undo" );
+ else
+ if ( doByAPI )
+ i_undoManager.redo();
+ else
+ m_currentTestCase.getDocument().getCurrentView().dispatch( ".uno:Redo" );
+ }
+ catch ( UndoFailedException e )
+ {
+ caughtUndoFailed = true;
+ }
+ if ( doByAPI )
+ assertTrue( "Exceptions in XUndoAction.undo should be propagated at the API", caughtUndoFailed );
+ else
+ assertFalse( "Undo/Redo by UI should not let escape Exceptions", caughtUndoFailed );
+ if ( undo )
+ {
+ assertFalse( "a failing Undo should clear the Undo stack", i_undoManager.isUndoPossible() );
+ assertTrue( "a failing Undo should /not/ clear the Redo stack", i_undoManager.isRedoPossible() );
+ }
+ else
+ {
+ assertTrue( "a failing Redo should /not/ clear the Undo stack", i_undoManager.isUndoPossible() );
+ assertFalse( "a failing Redo should clear the Redo stack", i_undoManager.isRedoPossible() );
+ }
+ }
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testStackHandling( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ assertFalse( i_undoManager.isUndoPossible() );
+ assertFalse( i_undoManager.isRedoPossible() );
+
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ assertTrue( i_undoManager.isUndoPossible() );
+ assertFalse( i_undoManager.isRedoPossible() );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ assertTrue( i_undoManager.isUndoPossible() );
+ assertFalse( i_undoManager.isRedoPossible() );
+ i_undoManager.undo();
+ assertTrue( i_undoManager.isUndoPossible() );
+ assertTrue( i_undoManager.isRedoPossible() );
+ i_undoManager.undo();
+ assertFalse( i_undoManager.isUndoPossible() );
+ assertTrue( i_undoManager.isRedoPossible() );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ assertTrue( i_undoManager.isUndoPossible() );
+ assertFalse( "adding a new action should have cleared the Redo stack", i_undoManager.isRedoPossible() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testClearance( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+
+ // add an action, clear the stack, verify the listener has been called
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ assertFalse( "clearance listener unexpectedly called", m_undoListener.wereStacksCleared() );
+ assertFalse( "redo-clearance listener unexpectedly called", m_undoListener.wasRedoStackCleared() );
+ i_undoManager.clear();
+ assertTrue( "clearance listener not called as expected", m_undoListener.wereStacksCleared() );
+ assertFalse( "redo-clearance listener unexpectedly called (2)", m_undoListener.wasRedoStackCleared() );
+
+ // ensure the listener is also called if the stack is actually empty at the moment of the call
+ m_undoListener.reset();
+ assertFalse( i_undoManager.isUndoPossible() );
+ i_undoManager.clear();
+ assertTrue( "clearance listener is also expected to be called if the stack was empty before", m_undoListener.wereStacksCleared() );
+
+ // ensure the proper listeners are called for clearRedo
+ m_undoListener.reset();
+ i_undoManager.clearRedo();
+ assertFalse( m_undoListener.wereStacksCleared() );
+ assertTrue( m_undoListener.wasRedoStackCleared() );
+
+ // ensure the redo listener is also called upon implicit redo stack clearance
+ m_undoListener.reset();
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.undo();
+ assertTrue( i_undoManager.isUndoPossible() );
+ assertTrue( i_undoManager.isRedoPossible() );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ assertFalse( i_undoManager.isRedoPossible() );
+ assertTrue( "implicit clearance of the Redo stack does not notify listeners", m_undoListener.wasRedoStackCleared() );
+
+ // test resetting the manager
+ m_undoListener.reset();
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.undo();
+ assertTrue( i_undoManager.isUndoPossible() );
+ assertTrue( i_undoManager.isRedoPossible() );
+ i_undoManager.reset();
+ assertFalse( i_undoManager.isUndoPossible() );
+ assertFalse( i_undoManager.isRedoPossible() );
+ assertTrue( "|reset| does not properly notify", m_undoListener.wasManagerReset() );
+
+ // resetting the manager, with open undo contexts
+ m_undoListener.reset();
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.enterUndoContext( "Undo Context" );
+ i_undoManager.addUndoAction( new CustomUndoAction() );
+ i_undoManager.enterHiddenUndoContext();
+ i_undoManager.reset();
+ assertTrue( "|reset| while contexts are open does not properly notify", m_undoListener.wasManagerReset() );
+ // verify the manager really has the proper context depth now
+ i_undoManager.enterUndoContext( "Undo Context" );
+ assertEquals( "seems that |reset| did not really close the open contexts", 1, m_undoListener.getCurrentUndoContextDepth() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private void impl_testHiddenContexts( final XUndoManager i_undoManager ) throws com.sun.star.uno.Exception
+ {
+ i_undoManager.reset();
+ m_undoListener.reset();
+ assertFalse( "precondition for testing hidden undo contexts not met", i_undoManager.isUndoPossible() );
+
+ // entering a hidden context should be rejected if the stack is empty
+ boolean caughtExpected = false;
+ try { i_undoManager.enterHiddenUndoContext(); }
+ catch ( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "entering hidden contexts should be denied on an empty stack", caughtExpected );
+
+ // but it should be allowed if the context is not empty
+ final CustomUndoAction undoAction0 = new CustomUndoAction( "Step 0" );
+ i_undoManager.addUndoAction( undoAction0 );
+ final CustomUndoAction undoAction1 = new CustomUndoAction( "Step 1" );
+ i_undoManager.addUndoAction( undoAction1 );
+ i_undoManager.enterHiddenUndoContext();
+ final CustomUndoAction hiddenUndoAction = new CustomUndoAction( "hidden context action" );
+ i_undoManager.addUndoAction( hiddenUndoAction );
+ i_undoManager.leaveUndoContext();
+ assertFalse( "leaving a hidden should not call |leftUndocontext|", m_undoListener.wasContextLeft() );
+ assertTrue( "leaving a hidden does not call |leftHiddenUndocontext|", m_undoListener.wasHiddenContextLeft() );
+ assertFalse( "leaving a non-empty hidden context claims to have cancelled it", m_undoListener.hasContextBeenCancelled() );
+ assertEquals( "leaving a hidden context is not properly notified", 0, m_undoListener.getCurrentUndoContextDepth() );
+ assertArrayEquals( "unexpected Undo stack after leaving a hidden context",
+ new String[] { undoAction1.getTitle(), undoAction0.getTitle() },
+ i_undoManager.getAllUndoActionTitles() );
+
+ // and then calling |undo| once should not only undo everything in the hidden context, but also
+ // the previous action - but not more
+ i_undoManager.undo();
+ assertTrue( "Undo after leaving a hidden context does not actually undo the context actions",
+ hiddenUndoAction.undoCalled() );
+ assertTrue( "Undo after leaving a hidden context does not undo the predecessor action",
+ undoAction1.undoCalled() );
+ assertFalse( "Undo after leaving a hidden context undoes too much",
+ undoAction0.undoCalled() );
+
+ // leaving an empty hidden context should call the proper notification method
+ m_undoListener.reset();
+ i_undoManager.enterHiddenUndoContext();
+ i_undoManager.leaveUndoContext();
+ assertFalse( m_undoListener.wasContextLeft() );
+ assertFalse( m_undoListener.wasHiddenContextLeft() );
+ assertTrue( m_undoListener.hasContextBeenCancelled() );
+
+ // nesting hidden and normal contexts
+ m_undoListener.reset();
+ i_undoManager.reset();
+ final CustomUndoAction action0 = new CustomUndoAction( "action 0" );
+ i_undoManager.addUndoAction( action0 );
+ i_undoManager.enterUndoContext( "context 1" );
+ final CustomUndoAction action1 = new CustomUndoAction( "action 1" );
+ i_undoManager.addUndoAction( action1 );
+ i_undoManager.enterHiddenUndoContext();
+ final CustomUndoAction action2 = new CustomUndoAction( "action 2" );
+ i_undoManager.addUndoAction( action2 );
+ i_undoManager.enterUndoContext( "context 2" );
+ // is entering a hidden context rejected even at the nesting level > 0 (the above test was for nesting level == 0)?
+ caughtExpected = false;
+ try { i_undoManager.enterHiddenUndoContext(); }
+ catch( final EmptyUndoStackException e ) { caughtExpected = true; }
+ assertTrue( "at a nesting level > 0, denied hidden contexts does not work as expected", caughtExpected );
+ final CustomUndoAction action3 = new CustomUndoAction( "action 3" );
+ i_undoManager.addUndoAction( action3 );
+ i_undoManager.enterHiddenUndoContext();
+ assertEquals( "mixed hidden/normal context do are not properly notified", 4, m_undoListener.getCurrentUndoContextDepth() );
+ i_undoManager.leaveUndoContext();
+ assertTrue( "the left context was empty - why wasn't 'cancelled' notified?", m_undoListener.hasContextBeenCancelled() );
+ assertFalse( m_undoListener.wasContextLeft() );
+ assertFalse( m_undoListener.wasHiddenContextLeft() );
+ i_undoManager.leaveUndoContext();
+ i_undoManager.leaveUndoContext();
+ i_undoManager.leaveUndoContext();
+ i_undoManager.undo();
+ assertFalse( "one action too much has been undone", action0.undoCalled() );
+ assertTrue( action1.undoCalled() );
+ assertTrue( action2.undoCalled() );
+ assertTrue( action3.undoCalled() );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private XComponentContext getContext()
+ {
+ return m_connection.getComponentContext();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private XMultiServiceFactory getORB()
+ {
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(
+ XMultiServiceFactory.class, getContext().getServiceManager() );
+ return xMSF1;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @BeforeClass
+ public static void setUpConnection() throws Exception
+ {
+ System.out.println( "--------------------------------------------------------------------------------" );
+ System.out.println( "starting class: " + UndoManager.class.getName() );
+ System.out.println( "connecting ..." );
+ m_connection.setUp();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @AfterClass
+ public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception
+ {
+ System.out.println();
+ System.out.println( "tearing down connection" );
+ m_connection.tearDown();
+ System.out.println( "finished class: " + UndoManager.class.getName() );
+ System.out.println( "--------------------------------------------------------------------------------" );
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static class CustomUndoAction implements XUndoAction, XComponent
+ {
+ CustomUndoAction()
+ {
+ m_title = "Custom Undo Action";
+ }
+
+ CustomUndoAction( final String i_title )
+ {
+ m_title = i_title;
+ }
+
+ public String getTitle()
+ {
+ return m_title;
+ }
+
+ public void undo() throws UndoFailedException
+ {
+ m_undoCalled = true;
+ }
+
+ public void redo() throws UndoFailedException
+ {
+ m_redoCalled = true;
+ }
+
+ public void dispose()
+ {
+ m_disposed = true;
+ }
+
+ public void addEventListener( XEventListener xl )
+ {
+ fail( "addEventListener is not expected to be called in the course of this test" );
+ }
+
+ public void removeEventListener( XEventListener xl )
+ {
+ fail( "removeEventListener is not expected to be called in the course of this test" );
+ }
+
+ boolean undoCalled() { return m_undoCalled; }
+ boolean redoCalled() { return m_redoCalled; }
+ boolean disposed() { return m_disposed; }
+
+ private final String m_title;
+ private boolean m_undoCalled = false;
+ private boolean m_redoCalled = false;
+ private boolean m_disposed = false;
+ }
+
+ private static short FAIL_UNDO = 1;
+ private static short FAIL_REDO = 2;
+
+ private static class FailingUndoAction implements XUndoAction
+ {
+ FailingUndoAction( final short i_failWhich )
+ {
+ m_failWhich = i_failWhich;
+ }
+
+ public String getTitle()
+ {
+ return "failing undo";
+ }
+
+ public void undo() throws UndoFailedException
+ {
+ if ( m_failWhich != FAIL_REDO )
+ impl_throw();
+ }
+
+ public void redo() throws UndoFailedException
+ {
+ if ( m_failWhich != FAIL_UNDO )
+ impl_throw();
+ }
+
+ private void impl_throw() throws UndoFailedException
+ {
+ throw new UndoFailedException();
+ }
+
+ private final short m_failWhich;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static class CountingUndoAction implements XUndoAction
+ {
+ CountingUndoAction( final int i_expectedOrder, final Object i_lock, final Integer[] i_actionsUndoneCounter )
+ {
+ m_expectedOrder = i_expectedOrder;
+ m_lock = i_lock;
+ m_actionsUndoneCounter = i_actionsUndoneCounter;
+ }
+
+ public String getTitle()
+ {
+ return "Counting Undo Action";
+ }
+
+ public void undo() throws UndoFailedException
+ {
+ synchronized( m_lock )
+ {
+ assertEquals( "Undo action called out of order", m_expectedOrder, m_actionsUndoneCounter[0].intValue() );
+ ++m_actionsUndoneCounter[0];
+ }
+ }
+
+ public void redo() throws UndoFailedException
+ {
+ fail( "CountingUndoAction.redo is not expected to be called in this test." );
+ }
+ private final int m_expectedOrder;
+ private final Object m_lock;
+ private Integer[] m_actionsUndoneCounter;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static String getCallbackUndoContextTitle()
+ {
+ return "Some Unfinished Undo Context";
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private static String getCallbackComponentServiceName()
+ {
+ return "org.openoffice.complex.sfx2.Callback";
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ /**
+ * a factory for a callback component which, at OOo runtime, is inserted into OOo's "component repository"
+ */
+ private class CallbackComponentFactory implements XSingleComponentFactory, XServiceInfo, XComponent
+ {
+ public Object createInstanceWithContext( XComponentContext i_context ) throws com.sun.star.uno.Exception
+ {
+ return new CallbackComponent();
+ }
+
+ public Object createInstanceWithArgumentsAndContext( Object[] i_arguments, XComponentContext i_context ) throws com.sun.star.uno.Exception
+ {
+ return createInstanceWithContext( i_context );
+ }
+
+ public String getImplementationName()
+ {
+ return "org.openoffice.complex.sfx2.CallbackComponent";
+ }
+
+ public boolean supportsService( String i_serviceName )
+ {
+ return i_serviceName.equals( getCallbackComponentServiceName() );
+ }
+
+ public String[] getSupportedServiceNames()
+ {
+ return new String[] { getCallbackComponentServiceName() };
+ }
+
+ public void dispose()
+ {
+ final EventObject event = new EventObject( this );
+
+ final ArrayList eventListenersCopy = (ArrayList)m_eventListeners.clone();
+ final Iterator iter = eventListenersCopy.iterator();
+ while ( iter.hasNext() )
+ {
+ ((XEventListener)iter.next()).disposing( event );
+ }
+ }
+
+ public void addEventListener( XEventListener i_listener )
+ {
+ if ( i_listener != null )
+ m_eventListeners.add( i_listener );
+ }
+
+ public void removeEventListener( XEventListener i_listener )
+ {
+ m_eventListeners.remove( i_listener );
+ }
+
+ private final ArrayList m_eventListeners = new ArrayList();
+ };
+
+ // -----------------------------------------------------------------------------------------------------------------
+ private class CallbackComponent implements XJob, XTypeProvider
+ {
+ CallbackComponent()
+ {
+ }
+
+ public Object execute( NamedValue[] i_parameters ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception
+ {
+ // this method is called from within the Basic script which is to check whether the OOo framework
+ // properly cleans up unfinished Undo contexts. It is called immediately after the context has been
+ // entered, so verify the expected Undo manager state.
+ assertEquals( getCallbackUndoContextTitle(), m_undoListener.getCurrentUndoContextTitle() );
+ assertEquals( 1, m_undoListener.getCurrentUndoContextDepth() );
+
+ synchronized( m_callbackCondition )
+ {
+ m_callbackCalled = true;
+ m_callbackCondition.notifyAll();
+ }
+ return m_closeAfterCallback ? "close" : "";
+ }
+
+ public Type[] getTypes()
+ {
+ final Class interfaces[] = getClass().getInterfaces();
+ Type types[] = new Type[ interfaces.length ];
+ for ( int i = 0; i < interfaces.length; ++i )
+ types[i] = new Type(interfaces[i]);
+ return types;
+ }
+
+ public byte[] getImplementationId()
+ {
+ return getClass().toString().getBytes();
+ }
+ }
+
+ private static final OfficeConnection m_connection = new OfficeConnection();
+ private DocumentTest m_currentTestCase;
+ private OfficeDocument m_currentDocument;
+ private UndoListener m_undoListener;
+ private CallbackComponentFactory m_callbackFactory = null;
+ private boolean m_callbackCalled = false;
+ private boolean m_closeAfterCallback = false;
+ private final Object m_callbackCondition = new Object();
+}
diff --git a/sfx2/qa/complex/docinfo/makefile.mk b/sfx2/qa/complex/sfx2/makefile.mk
index 0c350f1a9618..20b170fba3b4 100644..100755
--- a/sfx2/qa/complex/docinfo/makefile.mk
+++ b/sfx2/qa/complex/sfx2/makefile.mk
@@ -25,32 +25,60 @@
#
#*************************************************************************
-PRJ = ..$/..$/..
-TARGET = DocumentProperties
+.IF "$(OOO_JUNIT_JAR)" == ""
+nothing .PHONY:
+ @echo -----------------------------------------------------
+ @echo - JUnit not available, not building anything
+ @echo -----------------------------------------------------
+.ELSE # IF "$(OOO_JUNIT_JAR)" != ""
+
+PRJ = ../../..
PRJNAME = sfx2
-PACKAGE = complex$/docinfo
+TARGET = qa_complex
+PACKAGE = complex/sfx2
# --- Settings -----------------------------------------------------
-
.INCLUDE: settings.mk
#----- compile .java files -----------------------------------------
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
-JAVAFILES = DocumentProperties.java
-
-#----- make a jar from compiled files ------------------------------
+JARFILES = OOoRunnerLight.jar ridl.jar test.jar test-tools.jar unoil.jar
+EXTRAJARFILES = $(OOO_JUNIT_JAR)
+JAVAFILES = $(shell @$(FIND) . -name "*.java") \
-MAXLINELENGTH = 100000
+#----- create a jar from compiled files ----------------------------
-JARCLASSDIRS = $(PACKAGE)
JARTARGET = $(TARGET).jar
-JARCOMPRESS = TRUE
+
+#----- JUnit tests class -------------------------------------------
+
+JAVATESTFILES = \
+ DocumentInfo.java \
+ DocumentProperties.java \
+ StandaloneDocumentInfo.java \
+ DocumentMetadataAccess.java \
+ UndoManager.java \
+
+# disabled: #i115674#
+# GlobalEventBroadcaster.java \
# --- Targets ------------------------------------------------------
-.INCLUDE : target.mk
+.INCLUDE: target.mk
+
+ALL : ALLTAR
+
+# --- subsequent tests ---------------------------------------------
+
+.IF "$(OOO_SUBSEQUENT_TESTS)" != ""
+
+.INCLUDE: installationtest.mk
+
+ALLTAR : javatest
+
+ # Sample how to debug
+ # JAVAIFLAGS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9003,suspend=y
+.END # "$(OOO_SUBSEQUENT_TESTS)" == ""
-run:
- $(JAVAI) $(JAVAIFLAGS) -cp $(CLASSPATH) org.openoffice.Runner -TestBase java_complex -o $(PACKAGE:s#$/#.#).$(JAVAFILES:b)
+.END # ELSE "$(OOO_JUNIT_JAR)" != ""
diff --git a/sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoTest.java b/sfx2/qa/complex/sfx2/standalonedocinfo/StandaloneDocumentInfoTest.java
index f5512bf9723b..d255f3d16822 100644..100755
--- a/sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoTest.java
+++ b/sfx2/qa/complex/sfx2/standalonedocinfo/StandaloneDocumentInfoTest.java
@@ -24,7 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.standalonedocumentinfo;
+package complex.sfx2.standalonedocinfo;
public interface StandaloneDocumentInfoTest {
boolean test();
diff --git a/sfx2/qa/complex/standalonedocumentinfo/Test01.java b/sfx2/qa/complex/sfx2/standalonedocinfo/Test01.java
index 92c59d81e1c4..bf54bb4ca90b 100644..100755
--- a/sfx2/qa/complex/standalonedocumentinfo/Test01.java
+++ b/sfx2/qa/complex/sfx2/standalonedocinfo/Test01.java
@@ -24,16 +24,10 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.standalonedocumentinfo;
-
-import com.sun.star.beans.Property;
-import com.sun.star.beans.XProperty;
-import com.sun.star.beans.XPropertySetInfo;
-import com.sun.star.io.IOException;
-import com.sun.star.io.XInputStream;
-import com.sun.star.io.XOutputStream;
-import complexlib.ComplexTestCase;
+package complex.sfx2.standalonedocinfo;
+import complex.sfx2.standalonedocinfo.TestHelper;
+import complex.sfx2.standalonedocinfo.StandaloneDocumentInfoTest;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.document.XStandaloneDocumentInfo;
import com.sun.star.io.XTempFile;
@@ -43,19 +37,15 @@ import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.AnyConverter;
-import com.sun.star.task.ErrorCodeIOException;
-import java.util.Properties;
-import java.util.Random;
-import share.LogWriter;
public class Test01 implements StandaloneDocumentInfoTest {
XMultiServiceFactory m_xMSF = null;
TestHelper m_aTestHelper = null;
- public Test01 ( XMultiServiceFactory xMSF, LogWriter aLogWriter ) {
+ public Test01 ( XMultiServiceFactory xMSF ) {
m_xMSF = xMSF;
- m_aTestHelper = new TestHelper( aLogWriter, "Test01: " );
+ m_aTestHelper = new TestHelper( "Test01: " );
}
public boolean test() {
@@ -71,19 +61,16 @@ public class Test01 implements StandaloneDocumentInfoTest {
m_aTestHelper.Message ( "==============================" );
//create a new temporary file
Object oTempFile = m_xMSF.createInstance ( "com.sun.star.io.TempFile" );
- XTempFile xTempFile = (XTempFile) UnoRuntime.queryInterface (
- XTempFile.class, oTempFile );
+ XTempFile xTempFile = UnoRuntime.queryInterface(XTempFile.class, oTempFile);
//create a text document and initiallize it
Object oTextDocument = m_xMSF.createInstance ( "com.sun.star.text.TextDocument" );
- XLoadable xLoadable = (XLoadable) UnoRuntime.queryInterface (
- XLoadable.class, oTextDocument );
+ XLoadable xLoadable = UnoRuntime.queryInterface(XLoadable.class, oTextDocument);
xLoadable.initNew();
m_aTestHelper.Message ( "New document initialized." );
//store the instance to the temporary file URL
- XStorable xStorable = (XStorable) UnoRuntime.queryInterface (
- XStorable.class, oTextDocument );
+ XStorable xStorable = UnoRuntime.queryInterface(XStorable.class, oTextDocument);
String sURL = AnyConverter.toString ( xTempFile.getUri () );
PropertyValue aProps[] = new PropertyValue[2];
aProps[0] = new PropertyValue();
@@ -101,15 +88,13 @@ public class Test01 implements StandaloneDocumentInfoTest {
Object oStandaloneDocInfo = m_xMSF.createInstance (
"com.sun.star.document.StandaloneDocumentInfo" );
XStandaloneDocumentInfo xStandaloneDocInfo =
- (XStandaloneDocumentInfo) UnoRuntime.queryInterface (
- XStandaloneDocumentInfo.class, oStandaloneDocInfo );
+ UnoRuntime.queryInterface(XStandaloneDocumentInfo.class, oStandaloneDocInfo);
xStandaloneDocInfo.loadFromURL ( sURL );
m_aTestHelper.Message ( "StandaloneDocumentInfo loaded." );
//get the title from the object and check it
XPropertySet xPropSet =
- (XPropertySet)UnoRuntime.queryInterface (
- XPropertySet.class, oStandaloneDocInfo );
+ UnoRuntime.queryInterface(XPropertySet.class, oStandaloneDocInfo);
String sTitle = xPropSet.getPropertyValue ( "Title" ).toString ();
m_aTestHelper.Message ( "Get title: " + sTitle );
if ( sTitle.compareTo ( sDocTitle[i] ) != 0 ) {
@@ -134,14 +119,12 @@ public class Test01 implements StandaloneDocumentInfoTest {
Object oStandaloneDocInfo_ = m_xMSF.createInstance (
"com.sun.star.document.StandaloneDocumentInfo" );
XStandaloneDocumentInfo xStandaloneDocInfo_ =
- (XStandaloneDocumentInfo)UnoRuntime.queryInterface (
- XStandaloneDocumentInfo.class, oStandaloneDocInfo_ );
+ UnoRuntime.queryInterface(XStandaloneDocumentInfo.class, oStandaloneDocInfo_);
xStandaloneDocInfo_.loadFromURL ( sURL );
m_aTestHelper.Message ( "New StandaloneDocumentInfo loaded." );
//get the title and check it
- XPropertySet xPropSet_ = (XPropertySet)UnoRuntime.queryInterface (
- XPropertySet.class, oStandaloneDocInfo_ );
+ XPropertySet xPropSet_ = UnoRuntime.queryInterface(XPropertySet.class, oStandaloneDocInfo_);
String sTitle_ = xPropSet_.getPropertyValue ( "Title" ).toString ();
m_aTestHelper.Message ( "Get new title: " + sTitle_ );
if ( sTitle_.compareTo ( sTitle ) != 0 ) {
diff --git a/sfx2/qa/complex/standalonedocumentinfo/TestHelper.java b/sfx2/qa/complex/sfx2/standalonedocinfo/TestHelper.java
index f319fe412227..a650ce9bb2e4 100644..100755
--- a/sfx2/qa/complex/standalonedocumentinfo/TestHelper.java
+++ b/sfx2/qa/complex/sfx2/standalonedocinfo/TestHelper.java
@@ -24,25 +24,25 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.standalonedocumentinfo;
+package complex.sfx2.standalonedocinfo;
-import share.LogWriter;
public class TestHelper {
- LogWriter m_aLogWriter;
+
String m_sTestPrefix;
- /** Creates a new instance of TestHelper */
- public TestHelper ( LogWriter aLogWriter, String sTestPrefix ) {
- m_aLogWriter = aLogWriter;
+ /** Creates a new instance of TestHelper
+ * @param sTestPrefix
+ */
+ public TestHelper ( String sTestPrefix ) {
m_sTestPrefix = sTestPrefix;
}
public void Error ( String sError ) {
- m_aLogWriter.println ( m_sTestPrefix + "Error: " + sError );
+ System.out.println ( m_sTestPrefix + "Error: " + sError );
}
public void Message ( String sMessage ) {
- m_aLogWriter.println ( m_sTestPrefix + sMessage );
+ System.out.println ( m_sTestPrefix + sMessage );
}
}
diff --git a/sfx2/qa/complex/testdocuments/CUSTOM.odt b/sfx2/qa/complex/sfx2/testdocuments/CUSTOM.odt
index 831a8f451dfd..831a8f451dfd 100644..100755
--- a/sfx2/qa/complex/testdocuments/CUSTOM.odt
+++ b/sfx2/qa/complex/sfx2/testdocuments/CUSTOM.odt
Binary files differ
diff --git a/sfx2/qa/complex/testdocuments/TEST.odt b/sfx2/qa/complex/sfx2/testdocuments/TEST.odt
index 7c6f0b60f7b0..7c6f0b60f7b0 100644..100755
--- a/sfx2/qa/complex/testdocuments/TEST.odt
+++ b/sfx2/qa/complex/sfx2/testdocuments/TEST.odt
Binary files differ
diff --git a/sfx2/qa/complex/testdocuments/TESTRDFA.odt b/sfx2/qa/complex/sfx2/testdocuments/TESTRDFA.odt
index d59739142df6..d59739142df6 100644..100755
--- a/sfx2/qa/complex/testdocuments/TESTRDFA.odt
+++ b/sfx2/qa/complex/sfx2/testdocuments/TESTRDFA.odt
Binary files differ
diff --git a/sfx2/qa/complex/sfx2/testdocuments/empty.rdf b/sfx2/qa/complex/sfx2/testdocuments/empty.rdf
new file mode 100755
index 000000000000..af62bab39dfa
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/testdocuments/empty.rdf
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+
+<RDF
+ xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:s="http://www.w3.org/2000/01/rdf-schema#">
+
+<!--
+ This is the RDF Schema for the RDF data model as described in the
+ Resource Description Framework (RDF) Model and Syntax Specification
+ http://www.w3.org/TR/REC-rdf-syntax -->
+
+</RDF>
diff --git a/sfx2/qa/complex/DocHelper/DialogThread.java b/sfx2/qa/complex/sfx2/tools/DialogThread.java
index 7151ccbb292d..e67e65f218db 100644..100755
--- a/sfx2/qa/complex/DocHelper/DialogThread.java
+++ b/sfx2/qa/complex/sfx2/tools/DialogThread.java
@@ -24,7 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.framework.DocHelper;
+package complex.sfx2.tools;
import com.sun.star.beans.PropertyValue;
import com.sun.star.frame.XController;
@@ -37,9 +37,6 @@ import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.URL;
import com.sun.star.util.XURLTransformer;
-import java.lang.Thread;
-
-
/**
* This class opens a given dialog in a separate Thread by dispatching an url
*
@@ -55,21 +52,17 @@ public class DialogThread extends Thread {
this.m_url = url;
}
+ @Override
public void run() {
- XModel aModel = (XModel) UnoRuntime.queryInterface(XModel.class,
- m_xDoc);
+ XModel aModel = UnoRuntime.queryInterface( XModel.class, m_xDoc );
XController xController = aModel.getCurrentController();
//Opening Dialog
try {
- XDispatchProvider xDispProv = (XDispatchProvider) UnoRuntime.queryInterface(
- XDispatchProvider.class,
- xController.getFrame());
- XURLTransformer xParser = (com.sun.star.util.XURLTransformer) UnoRuntime.queryInterface(
- XURLTransformer.class,
- m_xMSF.createInstance(
- "com.sun.star.util.URLTransformer"));
+ XDispatchProvider xDispProv = UnoRuntime.queryInterface( XDispatchProvider.class, xController.getFrame() );
+ XURLTransformer xParser = UnoRuntime.queryInterface( XURLTransformer.class,
+ m_xMSF.createInstance( "com.sun.star.util.URLTransformer" ) );
// Because it's an in/out parameter
// we must use an array of URL objects.
diff --git a/sfx2/qa/complex/sfx2/tools/TestDocument.java b/sfx2/qa/complex/sfx2/tools/TestDocument.java
new file mode 100755
index 000000000000..8f2108df358e
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/tools/TestDocument.java
@@ -0,0 +1,40 @@
+/*************************************************************************
+*
+* 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.sfx2.tools;
+
+import java.io.File;
+import org.openoffice.test.OfficeFileUrl;
+import org.openoffice.test.Argument;
+
+public final class TestDocument {
+ public static String getUrl(String name) {
+ return OfficeFileUrl.getAbsolute(new File(Argument.get("tdoc"), name));
+ }
+
+ private TestDocument() {}
+}
diff --git a/sfx2/qa/complex/DocHelper/WriterHelper.java b/sfx2/qa/complex/sfx2/tools/WriterHelper.java
index b65e8e915423..4767028572bb 100644..100755
--- a/sfx2/qa/complex/DocHelper/WriterHelper.java
+++ b/sfx2/qa/complex/sfx2/tools/WriterHelper.java
@@ -24,7 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-package complex.framework.DocHelper;
+package complex.sfx2.tools;
import com.sun.star.accessibility.AccessibleRole;
import com.sun.star.accessibility.XAccessible;
@@ -40,7 +40,6 @@ import com.sun.star.text.XTextDocument;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.XCloseable;
-import complex.framework.DocHelper.DialogThread;
import java.io.PrintWriter;
import util.AccessibilityTools;
@@ -73,19 +72,20 @@ public class WriterHelper {
* @return if an error occurs the errormessage is returned and an empty String if not
*/
public String closeDoc(XTextDocument xTextDoc) {
- XCloseable closer = (XCloseable) UnoRuntime.queryInterface(
- XCloseable.class, xTextDoc);
+ XCloseable closer = UnoRuntime.queryInterface(XCloseable.class, xTextDoc);
String err = "";
try {
closer.close(true);
} catch (com.sun.star.util.CloseVetoException e) {
err = "couldn't close document " + e;
+ System.out.println(err);
}
return err;
}
+ private XTextDocument xLocalDoc = null;
/** a TextDocument is opened by pressing a button in a dialog given by uno-URL
* @param url the uno-URL of the dialog to be opened
* @param createButton the language dependend label of the button to be pressed
@@ -95,30 +95,25 @@ public class WriterHelper {
*/
public XTextDocument openFromDialog(String url, String createButton,
boolean destroyLocal) {
- XTextDocument xLocalDoc = WriterTools.createTextDoc(m_xMSF);
- XComponent comp = (XComponent) UnoRuntime.queryInterface(
- XComponent.class, xLocalDoc);
+ xLocalDoc = WriterTools.createTextDoc(m_xMSF);
+ XComponent comp = UnoRuntime.queryInterface(XComponent.class, xLocalDoc);
DialogThread diagThread = new DialogThread(comp, m_xMSF, url);
diagThread.start();
shortWait();
if (createButton.length() > 1) {
XExtendedToolkit tk = getToolkit();
- AccessibilityTools at = new AccessibilityTools();
Object atw = tk.getActiveTopWindow();
- XWindow xWindow = (XWindow) UnoRuntime.queryInterface(
- XWindow.class, atw);
+ XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, atw);
- XAccessible xRoot = at.getAccessibleObject(xWindow);
- XAccessibleContext buttonContext = at.getAccessibleObjectForRole(
+ XAccessible xRoot = AccessibilityTools.getAccessibleObject(xWindow);
+ XAccessibleContext buttonContext = AccessibilityTools.getAccessibleObjectForRole(
xRoot,
AccessibleRole.PUSH_BUTTON,
createButton);
- XAccessibleAction buttonAction = (XAccessibleAction) UnoRuntime.queryInterface(
- XAccessibleAction.class,
- buttonContext);
+ XAccessibleAction buttonAction = UnoRuntime.queryInterface(XAccessibleAction.class, buttonContext);
try {
System.out.println("Name: " +
@@ -133,47 +128,52 @@ public class WriterHelper {
XDesktop xDesktop = getDesktop();
- XTextDocument returnDoc = (XTextDocument) UnoRuntime.queryInterface(
- XTextDocument.class,
- xDesktop.getCurrentComponent());
+ XTextDocument returnDoc = UnoRuntime.queryInterface(XTextDocument.class, xDesktop.getCurrentComponent());
if (destroyLocal) {
closeDoc(xLocalDoc);
+ xLocalDoc = null;
}
return returnDoc;
}
+ public void closeFromDialog()
+ {
+ closeDoc(xLocalDoc);
+ xLocalDoc = null;
+ }
+ public void kill()
+ {
+ XDesktop xDesktop = getDesktop();
+ xDesktop.terminate();
+ }
+
public XTextDocument DocByAutopilot(XMultiServiceFactory msf,
int[] indexes, boolean destroyLocal,
String bName) {
- XTextDocument xLocalDoc = WriterTools.createTextDoc(m_xMSF);
+ XTextDocument xTextDoc = WriterTools.createTextDoc(m_xMSF);
Object toolkit = null;
try {
toolkit = msf.createInstance("com.sun.star.awt.Toolkit");
} catch (com.sun.star.uno.Exception e) {
- e.printStackTrace();
+ e.printStackTrace( System.err );
}
- XExtendedToolkit tk = (XExtendedToolkit) UnoRuntime.queryInterface(
- XExtendedToolkit.class, toolkit);
+ XExtendedToolkit tk = UnoRuntime.queryInterface(XExtendedToolkit.class, toolkit);
shortWait();
- AccessibilityTools at = new AccessibilityTools();
-
Object atw = tk.getActiveTopWindow();
- XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class,
- atw);
+ XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, atw);
- XAccessible xRoot = at.getAccessibleObject(xWindow);
+ XAccessible xRoot = AccessibilityTools.getAccessibleObject(xWindow);
- XAccessibleContext ARoot = at.getAccessibleObjectForRole(xRoot,
+ XAccessibleContext ARoot = AccessibilityTools.getAccessibleObjectForRole(xRoot,
AccessibleRole.MENU_BAR);
- XAccessibleSelection sel = (XAccessibleSelection) UnoRuntime.queryInterface(
- XAccessibleSelection.class, ARoot);
+ XAccessibleSelection sel = UnoRuntime.queryInterface(XAccessibleSelection.class, ARoot);
for (int k = 0; k < indexes.length; k++) {
try {
@@ -181,8 +181,7 @@ public class WriterHelper {
shortWait();
ARoot = ARoot.getAccessibleChild(indexes[k])
.getAccessibleContext();
- sel = (XAccessibleSelection) UnoRuntime.queryInterface(
- XAccessibleSelection.class, ARoot);
+ sel = UnoRuntime.queryInterface(XAccessibleSelection.class, ARoot);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
}
}
@@ -191,17 +190,13 @@ public class WriterHelper {
atw = tk.getActiveTopWindow();
- xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, atw);
+ xWindow = UnoRuntime.queryInterface(XWindow.class, atw);
- xRoot = at.getAccessibleObject(xWindow);
+ xRoot = AccessibilityTools.getAccessibleObject(xWindow);
//at.printAccessibleTree(new PrintWriter(System.out),xRoot);
- XAccessibleAction action = (XAccessibleAction) UnoRuntime.queryInterface(
- XAccessibleAction.class,
- at.getAccessibleObjectForRole(xRoot,
- AccessibleRole.PUSH_BUTTON,
- bName));
+ XAccessibleAction action = UnoRuntime.queryInterface(XAccessibleAction.class, AccessibilityTools.getAccessibleObjectForRole(xRoot, AccessibleRole.PUSH_BUTTON, bName));
try {
action.doAccessibleAction(0);
@@ -212,17 +207,13 @@ public class WriterHelper {
atw = tk.getActiveTopWindow();
- xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, atw);
+ xWindow = UnoRuntime.queryInterface(XWindow.class, atw);
- xRoot = at.getAccessibleObject(xWindow);
+ xRoot = AccessibilityTools.getAccessibleObject(xWindow);
- at.printAccessibleTree(new PrintWriter(System.out),xRoot);
+ AccessibilityTools.printAccessibleTree(new PrintWriter(System.out),xRoot);
- action = (XAccessibleAction) UnoRuntime.queryInterface(
- XAccessibleAction.class,
- at.getAccessibleObjectForRole(xRoot,
- AccessibleRole.PUSH_BUTTON,
- "Yes"));
+ action = UnoRuntime.queryInterface(XAccessibleAction.class, AccessibilityTools.getAccessibleObjectForRole(xRoot, AccessibleRole.PUSH_BUTTON, "Yes"));
try {
if (action != null) action.doAccessibleAction(0);
@@ -233,12 +224,10 @@ public class WriterHelper {
XDesktop xDesktop = getDesktop();
- XTextDocument returnDoc = (XTextDocument) UnoRuntime.queryInterface(
- XTextDocument.class,
- xDesktop.getCurrentComponent());
+ XTextDocument returnDoc = UnoRuntime.queryInterface(XTextDocument.class, xDesktop.getCurrentComponent());
if (destroyLocal) {
- closeDoc(xLocalDoc);
+ closeDoc(xTextDoc);
}
return returnDoc;
@@ -266,11 +255,10 @@ public class WriterHelper {
toolkit = m_xMSF.createInstance("com.sun.star.awt.Toolkit");
} catch (com.sun.star.uno.Exception e) {
System.out.println("Couldn't get toolkit");
- e.printStackTrace();
+ e.printStackTrace( System.err );
}
- XExtendedToolkit tk = (XExtendedToolkit) UnoRuntime.queryInterface(
- XExtendedToolkit.class, toolkit);
+ XExtendedToolkit tk = UnoRuntime.queryInterface(XExtendedToolkit.class, toolkit);
return tk;
}
@@ -285,11 +273,10 @@ public class WriterHelper {
desk = m_xMSF.createInstance("com.sun.star.frame.Desktop");
} catch (com.sun.star.uno.Exception e) {
System.out.println("Couldn't get desktop");
- e.printStackTrace();
+ e.printStackTrace( System.err );
}
- XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(
- XDesktop.class, desk);
+ XDesktop xDesktop = UnoRuntime.queryInterface(XDesktop.class, desk);
return xDesktop;
}
diff --git a/sfx2/qa/complex/sfx2/undo/CalcDocumentTest.java b/sfx2/qa/complex/sfx2/undo/CalcDocumentTest.java
new file mode 100755
index 000000000000..34825fdbada9
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/CalcDocumentTest.java
@@ -0,0 +1,96 @@
+package complex.sfx2.undo;
+
+import org.openoffice.test.tools.SpreadsheetDocument;
+import com.sun.star.table.XCellRange;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.table.XCell;
+import com.sun.star.uno.UnoRuntime;
+import org.openoffice.test.tools.DocumentType;
+import static org.junit.Assert.*;
+
+/**
+ * implements the {@link DocumentTest} interface on top of a spreadsheet document
+ * @author frank.schoenheit@oracle.com
+ */
+public class CalcDocumentTest extends DocumentTestBase
+{
+ public CalcDocumentTest( final XMultiServiceFactory i_orb ) throws Exception
+ {
+ super( i_orb, DocumentType.CALC );
+ }
+
+ public String getDocumentDescription()
+ {
+ return "spreadsheet document";
+ }
+
+ public void initializeDocument() throws com.sun.star.uno.Exception
+ {
+ final XCell cellA1 = getCellA1();
+ cellA1.setValue( INIT_VALUE );
+ assertEquals( "initializing the cell value didn't work", cellA1.getValue(), INIT_VALUE, 0 );
+
+ XCellRange range = UnoRuntime.queryInterface( XCellRange.class,
+ ((SpreadsheetDocument)m_document).getSheet(0) );
+
+ for ( int i=0; i<12; ++i )
+ {
+ XCell cell = range.getCellByPosition( 1, i );
+ cell.setFormula( "" );
+ }
+ }
+
+ public void doSingleModification() throws com.sun.star.uno.Exception
+ {
+ final XCell cellA1 = getCellA1();
+ assertEquals( "initial cell value not as expected", INIT_VALUE, cellA1.getValue(), 0 );
+ cellA1.setValue( MODIFIED_VALUE );
+ assertEquals( "modified cell value not as expected", MODIFIED_VALUE, cellA1.getValue(), 0 );
+ }
+
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XCell cellA1 = getCellA1();
+ assertEquals( "cell A1 doesn't have its initial value", INIT_VALUE, cellA1.getValue(), 0 );
+
+ XCellRange range = UnoRuntime.queryInterface( XCellRange.class,
+ ((SpreadsheetDocument)m_document).getSheet(0) );
+ for ( int i=0; i<12; ++i )
+ {
+ final XCell cell = range.getCellByPosition( 1, i );
+ assertEquals( "Cell B" + (i+1) + " not having its initial value (an empty string)", "", cell.getFormula() );
+ }
+ }
+
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XCell cellA1 = getCellA1();
+ assertEquals( "cell A1 doesn't have the value which we gave it", MODIFIED_VALUE, cellA1.getValue(), 0 );
+ }
+
+ public int doMultipleModifications() throws com.sun.star.uno.Exception
+ {
+ XCellRange range = UnoRuntime.queryInterface( XCellRange.class,
+ ((SpreadsheetDocument)m_document).getSheet(0) );
+
+ final String[] months = new String[] {
+ "January", "February", "March", "April", "May", "June", "July", "August",
+ "September", "October", "November", "December" };
+ for ( int i=0; i<12; ++i )
+ {
+ final XCell cell = range.getCellByPosition( 1, i );
+ cell.setFormula( months[i] );
+ }
+ return 12;
+ }
+
+ private XCell getCellA1() throws com.sun.star.uno.Exception
+ {
+ XCellRange range = UnoRuntime.queryInterface( XCellRange.class,
+ ((SpreadsheetDocument)m_document).getSheet(0) );
+ return range.getCellByPosition( 0, 0 );
+ }
+
+ private static final double INIT_VALUE = 100.0;
+ private static final double MODIFIED_VALUE = 200.0;
+}
diff --git a/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java b/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java
new file mode 100755
index 000000000000..7c8421ec6e5b
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java
@@ -0,0 +1,277 @@
+/*************************************************************************
+ * 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.sfx2.undo;
+
+import com.sun.star.chart2.XAxis;
+import com.sun.star.chart2.XCoordinateSystem;
+import com.sun.star.chart2.XCoordinateSystemContainer;
+import com.sun.star.awt.Size;
+import com.sun.star.beans.NamedValue;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.chart2.XChartDocument;
+import com.sun.star.chart2.XDiagram;
+import com.sun.star.container.XIndexAccess;
+import com.sun.star.document.UndoFailedException;
+import com.sun.star.document.XUndoAction;
+import com.sun.star.document.XUndoManager;
+import com.sun.star.document.XUndoManagerSupplier;
+import com.sun.star.drawing.XShape;
+import com.sun.star.embed.EmbedStates;
+import com.sun.star.embed.EmbedVerbs;
+import com.sun.star.embed.VerbDescriptor;
+import com.sun.star.embed.WrongStateException;
+import com.sun.star.embed.XEmbeddedObject;
+import com.sun.star.embed.XStateChangeBroadcaster;
+import com.sun.star.embed.XStateChangeListener;
+import com.sun.star.lang.EventObject;
+import com.sun.star.lang.IndexOutOfBoundsException;
+import com.sun.star.lang.WrappedTargetException;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.text.XTextContent;
+import com.sun.star.text.XTextRange;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.view.XSelectionSupplier;
+import org.openoffice.test.tools.DocumentType;
+import org.openoffice.test.tools.OfficeDocument;
+import static org.junit.Assert.*;
+
+/**
+ * @author frank.schoenheit@oracle.com
+ */
+public class ChartDocumentTest implements DocumentTest
+{
+ public ChartDocumentTest( final XMultiServiceFactory i_orb ) throws com.sun.star.uno.Exception, InterruptedException
+ {
+ m_textDocument = OfficeDocument.blankDocument( i_orb, DocumentType.WRITER );
+
+ // create a OLE shape in the document
+ final XMultiServiceFactory factory = UnoRuntime.queryInterface( XMultiServiceFactory.class, m_textDocument.getDocument() );
+ final String shapeServiceName = "com.sun.star.text.TextEmbeddedObject";
+ final XPropertySet shapeProps = UnoRuntime.queryInterface( XPropertySet.class, factory.createInstance( shapeServiceName ) );
+ shapeProps.setPropertyValue("CLSID", "12dcae26-281f-416f-a234-c3086127382e");
+
+ final XShape shape = UnoRuntime.queryInterface( XShape.class, shapeProps );
+ shape.setSize( new Size( 16000, 9000 ) );
+
+ final XTextContent chartTextContent = UnoRuntime.queryInterface( XTextContent.class, shapeProps );
+
+ final XSelectionSupplier selSupplier = UnoRuntime.queryInterface( XSelectionSupplier.class,
+ m_textDocument.getCurrentView().getController() );
+ final Object selection = selSupplier.getSelection();
+ final XTextRange textRange = getAssociatedTextRange( selection );
+ if ( textRange == null )
+ throw new RuntimeException( "can't locate a text range" );
+
+ // insert the chart
+ textRange.getText().insertTextContent(textRange, chartTextContent, false);
+
+ // retrieve the chart model
+ XChartDocument chartDoc = UnoRuntime.queryInterface( XChartDocument.class, shapeProps.getPropertyValue( "Model" ) );
+ m_chartDocument = new OfficeDocument( i_orb, chartDoc );
+
+ // actually activate the object
+ final XEmbeddedObject embeddedChart = UnoRuntime.queryInterface( XEmbeddedObject.class,
+ shapeProps.getPropertyValue( "EmbeddedObject" ) );
+ embeddedChart.doVerb( EmbedVerbs.MS_OLEVERB_SHOW );
+
+ final int state = embeddedChart.getCurrentState();
+ if ( state != EmbedStates.UI_ACTIVE )
+ fail( "unable to activate the embedded chart" );
+ }
+
+ public String getDocumentDescription()
+ {
+ return "chart document";
+ }
+
+ public void initializeDocument() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet wallProperties = impl_getWallProperties();
+ wallProperties.setPropertyValue( "FillStyle", com.sun.star.drawing.FillStyle.SOLID );
+ wallProperties.setPropertyValue( "FillColor", 0x00FFFFFF );
+ }
+
+ public void closeDocument()
+ {
+ m_textDocument.close();
+ }
+
+ private XPropertySet impl_getWallProperties()
+ {
+ final XChartDocument chartDoc = UnoRuntime.queryInterface( XChartDocument.class, m_chartDocument.getDocument() );
+ final XDiagram diagram = chartDoc.getFirstDiagram();
+ final XPropertySet wallProperties = diagram.getWall();
+ return wallProperties;
+ }
+
+ private XPropertySet impl_getYAxisProperties()
+ {
+ XPropertySet axisProperties = null;
+ try
+ {
+ final XChartDocument chartDoc = UnoRuntime.queryInterface( XChartDocument.class, m_chartDocument.getDocument() );
+ final XDiagram diagram = chartDoc.getFirstDiagram();
+ final XCoordinateSystemContainer coordContainer = UnoRuntime.queryInterface( XCoordinateSystemContainer.class, diagram );
+ final XCoordinateSystem[] coordSystems = coordContainer.getCoordinateSystems();
+ final XCoordinateSystem coordSystem = coordSystems[0];
+ final XAxis primaryYAxis = coordSystem.getAxisByDimension( 1, 0 );
+ axisProperties = UnoRuntime.queryInterface( XPropertySet.class, primaryYAxis );
+ }
+ catch ( Exception ex )
+ {
+ fail( "internal error: could not retrieve primary Y axis properties" );
+ }
+ return axisProperties;
+ }
+
+ private XUndoManager impl_getUndoManager()
+ {
+ final XUndoManagerSupplier undoManagerSupp = UnoRuntime.queryInterface( XUndoManagerSupplier.class, m_chartDocument.getDocument() );
+ final XUndoManager undoManager = undoManagerSupp.getUndoManager();
+ return undoManager;
+ }
+
+ public void doSingleModification() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet wallProperties = impl_getWallProperties();
+
+ // simulate an Undo action, as long as the chart implementation doesn't add Undo actions itself
+ final XUndoManager undoManager = impl_getUndoManager();
+ undoManager.addUndoAction( new PropertyUndoAction( wallProperties, "FillColor", 0xCCFF44 ) );
+ // (the UndoAction will actually set the property value)
+ }
+
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet wallProperties = impl_getWallProperties();
+ assertEquals( 0x00FFFFFF, ((Integer)wallProperties.getPropertyValue( "FillColor" )).intValue() );
+ }
+
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet wallProperties = impl_getWallProperties();
+ assertEquals( 0xCCFF44, ((Integer)wallProperties.getPropertyValue( "FillColor" )).intValue() );
+ }
+
+ public int doMultipleModifications() throws com.sun.star.uno.Exception
+ {
+ final XPropertySet axisProperties = impl_getYAxisProperties();
+
+ final XUndoManager undoManager = impl_getUndoManager();
+ undoManager.addUndoAction( new PropertyUndoAction( axisProperties, "LineWidth", 300 ) );
+ undoManager.addUndoAction( new PropertyUndoAction( axisProperties, "LineColor", 0x000000 ) );
+
+ return 2;
+ }
+
+ public OfficeDocument getDocument()
+ {
+ return m_chartDocument;
+ }
+
+ private XTextRange getAssociatedTextRange( final Object i_object ) throws WrappedTargetException, IndexOutOfBoundsException
+ {
+ // possible cases:
+ // 1. a container of other objects - e.g. selection of 0 to n text portions, or 1 to n drawing objects
+ final XIndexAccess indexer = UnoRuntime.queryInterface( XIndexAccess.class, i_object );
+ if ((indexer != null) && indexer.getCount() > 0) {
+ final int count = indexer.getCount();
+ for (int i = 0; i < count; ++i) {
+ final XTextRange range = getAssociatedTextRange( indexer.getByIndex(i) );
+ if (range != null) {
+ return range;
+ }
+ }
+ }
+ // 2. another TextContent, having an anchor we can use
+ final XTextContent textContent = UnoRuntime.queryInterface(XTextContent.class, i_object);
+ if (textContent != null) {
+ final XTextRange range = textContent.getAnchor();
+ if (range != null) {
+ return range;
+ }
+ }
+
+ // an object which supports XTextRange directly
+ final XTextRange range = UnoRuntime.queryInterface(XTextRange.class, i_object);
+ if (range != null) {
+ return range;
+ }
+
+ return null;
+ }
+
+ private static class PropertyUndoAction implements XUndoAction
+ {
+ PropertyUndoAction( final XPropertySet i_component, final String i_propertyName, final Object i_newValue ) throws com.sun.star.uno.Exception
+ {
+ m_component = i_component;
+ m_propertyName = i_propertyName;
+ m_newValue = i_newValue;
+
+ m_oldValue = i_component.getPropertyValue( m_propertyName );
+ i_component.setPropertyValue( m_propertyName, m_newValue );
+ }
+
+ public String getTitle()
+ {
+ return "some dummy Undo Action";
+ }
+
+ public void undo() throws UndoFailedException
+ {
+ try
+ {
+ m_component.setPropertyValue( m_propertyName, m_oldValue );
+ }
+ catch ( com.sun.star.uno.Exception ex )
+ {
+ throw new UndoFailedException( "", this, ex );
+ }
+ }
+
+ public void redo() throws UndoFailedException
+ {
+ try
+ {
+ m_component.setPropertyValue( m_propertyName, m_newValue );
+ }
+ catch ( com.sun.star.uno.Exception ex )
+ {
+ throw new UndoFailedException( "", this, ex );
+ }
+ }
+
+ private final XPropertySet m_component;
+ private final String m_propertyName;
+ private final Object m_oldValue;
+ private final Object m_newValue;
+ }
+
+ private final OfficeDocument m_textDocument;
+ private final OfficeDocument m_chartDocument;
+}
diff --git a/sfx2/qa/complex/sfx2/undo/DocumentTest.java b/sfx2/qa/complex/sfx2/undo/DocumentTest.java
new file mode 100755
index 000000000000..d6de90884673
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/DocumentTest.java
@@ -0,0 +1,61 @@
+package complex.sfx2.undo;
+
+import org.openoffice.test.tools.OfficeDocument;
+
+/**
+ * wrapper around an OfficeDocument, for running a standardized test procedure (related do Undo functionality)
+ * on the document.
+ *
+ * @author frank.schoenheit@oracle.com
+ */
+public interface DocumentTest
+{
+ /**
+ * returns a human-readable description for the document/type which the tests operates on
+ */
+ public String getDocumentDescription();
+
+ /**
+ * initializes the document to a state where the subsequent tests can be ran
+ */
+ public void initializeDocument() throws com.sun.star.uno.Exception;
+
+ /**
+ * closes the document which the test is based on
+ */
+ public void closeDocument();
+
+ /**
+ * does a simple modification to the document, which results in one Undo action being auto-generated
+ * by the OOo implementation
+ */
+ public void doSingleModification() throws com.sun.star.uno.Exception;
+
+ /**
+ * verifies the document is in the same state as after {@link #initializeDocument}
+ */
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception;
+
+ /**
+ * verifies the document is in the state as expected after {@link #doSingleModification}
+ * @throws com.sun.star.uno.Exception
+ */
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception;
+
+ /**
+ * does multiple modifications do the document, which would normally result in multiple Undo actions.
+ *
+ * The test framework will encapsulate the call into an {@link XUndoManager.enterUndoContext()} and
+ * {@link XUndoManager.leaveUndoContext()} call.
+ *
+ * @return
+ * the number of modifications done to the document. The caller assumes (and asserts) that the number
+ * of actions on the Undo stack equals this number.
+ */
+ public int doMultipleModifications() throws com.sun.star.uno.Exception;
+
+ /**
+ * returns the document which the test operates on
+ */
+ public OfficeDocument getDocument();
+}
diff --git a/sfx2/qa/complex/sfx2/undo/DocumentTestBase.java b/sfx2/qa/complex/sfx2/undo/DocumentTestBase.java
new file mode 100755
index 000000000000..11adc80c2e85
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/DocumentTestBase.java
@@ -0,0 +1,29 @@
+package complex.sfx2.undo;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.Exception;
+import org.openoffice.test.tools.DocumentType;
+import org.openoffice.test.tools.OfficeDocument;
+
+/**
+ * @author frank.schoenheit@oracle.com
+ */
+abstract class DocumentTestBase implements DocumentTest
+{
+ DocumentTestBase( final XMultiServiceFactory i_orb, final DocumentType i_docType ) throws Exception
+ {
+ m_document = OfficeDocument.blankDocument( i_orb, i_docType );
+ }
+
+ public OfficeDocument getDocument()
+ {
+ return m_document;
+ }
+
+ public void closeDocument()
+ {
+ m_document.close();
+ }
+
+ protected final OfficeDocument m_document;
+}
diff --git a/sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoUnitTest.java b/sfx2/qa/complex/sfx2/undo/DrawDocumentTest.java
index 0136f8941df5..d98e1372dea5 100644..100755
--- a/sfx2/qa/complex/standalonedocumentinfo/StandaloneDocumentInfoUnitTest.java
+++ b/sfx2/qa/complex/sfx2/undo/DrawDocumentTest.java
@@ -1,5 +1,4 @@
/*************************************************************************
- *
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
@@ -23,47 +22,25 @@
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
- ************************************************************************/
-package complex.standalonedocumentinfo;
-
-import complexlib.ComplexTestCase;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.uno.UnoRuntime;
-
-/* Document here
-*/
+ *************************************************************************/
-public class StandaloneDocumentInfoUnitTest extends ComplexTestCase {
- private XMultiServiceFactory m_xMSF = null;
+package complex.sfx2.undo;
- public String[] getTestMethodNames() {
- return new String[] {
- "ExecuteTest01"};
- }
-
- public String[] getTestObjectNames() {
- return new String[] {"StandaloneDocumentInfoUnitTest"};
- }
-
- public void before() {
- try {
- m_xMSF = (XMultiServiceFactory)param.getMSF();
- } catch(Exception e) {
- failed( "Failed to create service factory!" );
- }
- if( m_xMSF ==null ) {
- failed( "Failed to create service factory!" );
- }
- }
-
- public void after() {
- m_xMSF = null;
+import com.sun.star.lang.XMultiServiceFactory;
+import org.openoffice.test.tools.DocumentType;
+
+/**
+ * @author frank.schoenheit@oracle.com
+ */
+public class DrawDocumentTest extends DrawingOrPresentationDocumentTest
+{
+ public DrawDocumentTest( XMultiServiceFactory i_orb ) throws com.sun.star.uno.Exception
+ {
+ super( i_orb, DocumentType.DRAWING );
}
- public void ExecuteTest01() {
- StandaloneDocumentInfoTest aTest = new Test01 (m_xMSF, log);
- assure( "Test01 failed!", aTest.test() );
+ public String getDocumentDescription()
+ {
+ return "drawing document";
}
}
-
-
diff --git a/sfx2/qa/complex/sfx2/undo/DrawingOrPresentationDocumentTest.java b/sfx2/qa/complex/sfx2/undo/DrawingOrPresentationDocumentTest.java
new file mode 100755
index 000000000000..916e1908e93d
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/DrawingOrPresentationDocumentTest.java
@@ -0,0 +1,196 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package complex.sfx2.undo;
+
+import com.sun.star.awt.Rectangle;
+import com.sun.star.document.XUndoManager;
+import com.sun.star.document.XUndoManagerSupplier;
+import com.sun.star.document.XUndoAction;
+import com.sun.star.awt.Point;
+import com.sun.star.awt.Size;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.drawing.CircleKind;
+import com.sun.star.drawing.XDrawPages;
+import com.sun.star.drawing.XDrawPagesSupplier;
+import com.sun.star.drawing.XShape;
+import com.sun.star.drawing.XShapes;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.UnoRuntime;
+import org.openoffice.test.tools.DocumentType;
+import static org.junit.Assert.*;
+
+/**
+ * implements the {@link DocumentTest} interface on top of a drawing document
+ * @author frank.schoenheit@oracle.com
+ */
+public abstract class DrawingOrPresentationDocumentTest extends DocumentTestBase
+{
+ public DrawingOrPresentationDocumentTest( XMultiServiceFactory i_orb, final DocumentType i_docType ) throws com.sun.star.uno.Exception
+ {
+ super( i_orb, i_docType );
+ }
+
+ public void initializeDocument() throws com.sun.star.uno.Exception
+ {
+ // remove all shapes - Impress has two default shapes in a new doc; just get rid of them
+ final XShapes firstPageShapes = getFirstPageShapes();
+ while ( firstPageShapes.getCount() > 0 )
+ firstPageShapes.remove( UnoRuntime.queryInterface( XShape.class, firstPageShapes.getByIndex( 0 ) ) );
+ }
+
+ public void doSingleModification() throws com.sun.star.uno.Exception
+ {
+ // add a simple centered shape to the first page
+ Rectangle pagePlayground = impl_getFirstPagePlayground();
+ impl_createCircleShape(
+ ( pagePlayground.X + ( pagePlayground.Width - BIG_CIRCLE_SIZE ) / 2 ),
+ ( pagePlayground.Y + ( pagePlayground.Height - BIG_CIRCLE_SIZE ) / 2 ),
+ BIG_CIRCLE_SIZE,
+ FILL_COLOR
+ );
+ }
+
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XShapes firstPageShapes = getFirstPageShapes();
+ assertEquals( "there should be no shapes at all", 0, firstPageShapes.getCount() );
+ }
+
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XShapes firstPageShapes = getFirstPageShapes();
+ assertEquals( "there should be one shape, not more, not less", 1, firstPageShapes.getCount() );
+
+ final Object shape = firstPageShapes.getByIndex(0);
+ verifyShapeGeometry( shape, BIG_CIRCLE_SIZE, BIG_CIRCLE_SIZE );
+ final XPropertySet shapeProps = UnoRuntime.queryInterface( XPropertySet.class, shape );
+ assertEquals( "wrong circle tpye", CIRCLE_TYPE.getValue(), ((CircleKind)shapeProps.getPropertyValue( "CircleKind" )).getValue() );
+ //assertEquals( "wrong circle fill color", FILL_COLOR, ((Integer)shapeProps.getPropertyValue( "FillColor" )).intValue() );
+ // disable this particular check: A bug in the drawing layer API restores the FillColor to its
+ // default value upon re-insertion. This is issue #i115080#
+ }
+
+ public int doMultipleModifications() throws com.sun.star.uno.Exception
+ {
+ // add a simple centered shape to the first page
+ Rectangle pagePlayground = impl_getFirstPagePlayground();
+ impl_createCircleShape(
+ pagePlayground.X,
+ pagePlayground.Y,
+ SMALL_CIRCLE_SIZE,
+ ALTERNATE_FILL_COLOR
+ );
+ impl_createCircleShape(
+ pagePlayground.X + pagePlayground.Width - SMALL_CIRCLE_SIZE,
+ pagePlayground.Y,
+ SMALL_CIRCLE_SIZE,
+ ALTERNATE_FILL_COLOR
+ );
+ impl_createCircleShape(
+ pagePlayground.X,
+ pagePlayground.Y + pagePlayground.Height - SMALL_CIRCLE_SIZE,
+ SMALL_CIRCLE_SIZE,
+ ALTERNATE_FILL_COLOR
+ );
+ impl_createCircleShape(
+ pagePlayground.X + pagePlayground.Width - SMALL_CIRCLE_SIZE,
+ pagePlayground.Y + pagePlayground.Height - SMALL_CIRCLE_SIZE,
+ SMALL_CIRCLE_SIZE,
+ ALTERNATE_FILL_COLOR
+ );
+ return 4;
+ }
+
+ private void impl_createCircleShape( final int i_x, final int i_y, final int i_size, final int i_color ) throws com.sun.star.uno.Exception
+ {
+ final XPropertySet shapeProps = getDocument().createInstance( "com.sun.star.drawing.EllipseShape", XPropertySet.class );
+ shapeProps.setPropertyValue( "CircleKind", CIRCLE_TYPE );
+ shapeProps.setPropertyValue( "FillColor", i_color );
+
+ final XShape shape = UnoRuntime.queryInterface( XShape.class, shapeProps );
+ final Size shapeSize = new Size( i_size, i_size );
+ shape.setSize( shapeSize );
+ final Point shapePos = new Point( i_x, i_y );
+ shape.setPosition( shapePos );
+
+ final XShapes pageShapes = UnoRuntime.queryInterface( XShapes.class, getFirstPageShapes() );
+ pageShapes.add( shape );
+
+ // Sadly, Draw/Impress currently do not create Undo actions for programmatic changes to the document.
+ // Which renders the test here slightly useless ... unless we fake the Undo actions ourself.
+ final XUndoManagerSupplier suppUndoManager = UnoRuntime.queryInterface( XUndoManagerSupplier.class, getDocument().getDocument() );
+ final XUndoManager undoManager = suppUndoManager.getUndoManager();
+ undoManager.addUndoAction( new ShapeInsertionUndoAction( shape, pageShapes ) );
+ }
+
+ private Rectangle impl_getFirstPagePlayground() throws com.sun.star.uno.Exception
+ {
+ final XShapes firstPageShapes = getFirstPageShapes();
+ final XPropertySet firstPageProps = UnoRuntime.queryInterface( XPropertySet.class, firstPageShapes );
+ final int pageWidth = ((Integer)firstPageProps.getPropertyValue( "Width" )).intValue();
+ final int pageHeight = ((Integer)firstPageProps.getPropertyValue( "Height" )).intValue();
+ final int borderLeft = ((Integer)firstPageProps.getPropertyValue( "BorderLeft" )).intValue();
+ final int borderTop = ((Integer)firstPageProps.getPropertyValue( "BorderTop" )).intValue();
+ final int borderRight = ((Integer)firstPageProps.getPropertyValue( "BorderRight" )).intValue();
+ final int borderBottom = ((Integer)firstPageProps.getPropertyValue( "BorderBottom" )).intValue();
+ return new Rectangle( borderLeft, borderTop, pageWidth - borderLeft - borderRight, pageHeight - borderTop - borderBottom );
+ }
+
+ /**
+ * returns the XShapes interface of the first page of our drawing document
+ */
+ private XShapes getFirstPageShapes() throws com.sun.star.uno.Exception
+ {
+ final XDrawPagesSupplier suppPages = UnoRuntime.queryInterface( XDrawPagesSupplier.class, getDocument().getDocument() );
+ final XDrawPages pages = suppPages.getDrawPages();
+ return UnoRuntime.queryInterface( XShapes.class, pages.getByIndex( 0 ) );
+ }
+
+ /**
+ * verifies the given shape has the given size
+ */
+ private void verifyShapeGeometry( final Object i_shapeObject, final int i_expectedWidth, final int i_expectedHeight )
+ throws com.sun.star.uno.Exception
+ {
+ final XShape shape = UnoRuntime.queryInterface( XShape.class, i_shapeObject );
+ final Size shapeSize = shape.getSize();
+ assertEquals( "unexpected shape width", i_expectedWidth, shapeSize.Width );
+ assertEquals( "unexpected shape height", i_expectedHeight, shapeSize.Height );
+ }
+
+ private static class ShapeInsertionUndoAction implements XUndoAction
+ {
+ ShapeInsertionUndoAction( final XShape i_shape, final XShapes i_shapeCollection )
+ {
+ m_shape = i_shape;
+ m_shapeCollection = i_shapeCollection;
+ }
+
+ public String getTitle()
+ {
+ return "insert shape";
+ }
+
+ public void undo()
+ {
+ m_shapeCollection.remove( m_shape );
+ }
+
+ public void redo()
+ {
+ m_shapeCollection.add( m_shape );
+ }
+
+ private final XShape m_shape;
+ private final XShapes m_shapeCollection;
+ }
+
+ private static CircleKind CIRCLE_TYPE = CircleKind.FULL;
+ private static int FILL_COLOR = 0xCC2244;
+ private static int ALTERNATE_FILL_COLOR = 0x44CC22;
+ private static int BIG_CIRCLE_SIZE = 5000;
+ private static int SMALL_CIRCLE_SIZE = 2000;
+}
diff --git a/sfx2/qa/complex/sfx2/undo/ImpressDocumentTest.java b/sfx2/qa/complex/sfx2/undo/ImpressDocumentTest.java
new file mode 100755
index 000000000000..c15fc760e0c3
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/ImpressDocumentTest.java
@@ -0,0 +1,46 @@
+/*************************************************************************
+ * 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.sfx2.undo;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import org.openoffice.test.tools.DocumentType;
+
+/**
+ * @author frank.schoenheit@oracle.com
+ */
+public class ImpressDocumentTest extends DrawingOrPresentationDocumentTest
+{
+ public ImpressDocumentTest( XMultiServiceFactory i_orb ) throws com.sun.star.uno.Exception
+ {
+ super( i_orb, DocumentType.PRESENTATION );
+ }
+
+ public String getDocumentDescription()
+ {
+ return "presentation document";
+ }
+}
diff --git a/sfx2/qa/complex/sfx2/undo/WriterDocumentTest.java b/sfx2/qa/complex/sfx2/undo/WriterDocumentTest.java
new file mode 100755
index 000000000000..702fb85ebb11
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/undo/WriterDocumentTest.java
@@ -0,0 +1,104 @@
+package complex.sfx2.undo;
+
+import com.sun.star.text.XTextRange;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.table.XCell;
+import com.sun.star.table.XCellRange;
+import com.sun.star.text.XTextCursor;
+import com.sun.star.text.XTextTable;
+import com.sun.star.text.XText;
+import com.sun.star.text.XTextDocument;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.UnoRuntime;
+import org.openoffice.test.tools.DocumentType;
+import static org.junit.Assert.*;
+
+/**
+ * implements the {@link DocumentTest} interface on top of a spreadsheet document
+ * @author frank.schoenheit@oracle.com
+ */
+public class WriterDocumentTest extends DocumentTestBase
+{
+ public WriterDocumentTest( final XMultiServiceFactory i_orb ) throws com.sun.star.uno.Exception
+ {
+ super( i_orb, DocumentType.WRITER );
+ }
+
+ public String getDocumentDescription()
+ {
+ return "text document";
+ }
+
+ public void initializeDocument() throws com.sun.star.uno.Exception
+ {
+ // TODO?
+ }
+
+ public void doSingleModification() throws com.sun.star.uno.Exception
+ {
+ final XTextDocument textDoc = UnoRuntime.queryInterface( XTextDocument.class, getDocument().getDocument() );
+ final XText docText = textDoc.getText();
+ docText.setString( s_blindText );
+ }
+
+ public void verifyInitialDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XTextDocument textDoc = UnoRuntime.queryInterface( XTextDocument.class, getDocument().getDocument() );
+ final XText docText = textDoc.getText();
+ assertEquals( "document should be empty", "", docText.getString() );
+ }
+
+ public void verifySingleModificationDocumentState() throws com.sun.star.uno.Exception
+ {
+ final XTextDocument textDoc = UnoRuntime.queryInterface( XTextDocument.class, getDocument().getDocument() );
+ final XText docText = textDoc.getText();
+ assertEquals( "blind text not found", s_blindText, docText.getString() );
+ }
+
+ public int doMultipleModifications() throws com.sun.star.uno.Exception
+ {
+ final XTextDocument textDoc = UnoRuntime.queryInterface( XTextDocument.class, getDocument().getDocument() );
+ final XText docText = textDoc.getText();
+
+ int expectedUndoActions = 0;
+
+ // create a cursor
+ final XTextCursor cursor = docText.createTextCursor();
+
+ // create a table
+ final XTextTable textTable = UnoRuntime.queryInterface( XTextTable.class,
+ getDocument().createInstance( "com.sun.star.text.TextTable" ) );
+ textTable.initialize( 3, 3 );
+ final XPropertySet tableProps = UnoRuntime.queryInterface( XPropertySet.class, textTable );
+ tableProps.setPropertyValue( "BackColor", 0xCCFF44 );
+
+ // insert the table into the doc
+ docText.insertTextContent( cursor, textTable, false );
+ ++expectedUndoActions; //FIXME this will create 2 actions! currently the event is sent for every individual action; should it be sent for top-level actions only? how many internal actions are created is an implementation detail!
+ ++expectedUndoActions;
+
+ // write some content into the center cell
+ final XCellRange cellRange = UnoRuntime.queryInterface( XCellRange.class, textTable );
+ final XCell centerCell = cellRange.getCellByPosition( 1, 1 );
+ final XTextRange cellText = UnoRuntime.queryInterface( XTextRange.class, centerCell );
+ cellText.setString( "Undo Manager API Test" );
+ ++expectedUndoActions;
+
+ // give it another color
+ final XPropertySet cellProps = UnoRuntime.queryInterface( XPropertySet.class, centerCell );
+ cellProps.setPropertyValue( "BackColor", 0x44CCFF );
+ ++expectedUndoActions;
+
+ return expectedUndoActions;
+ }
+
+ private static final String s_blindText =
+ "Lorem ipsum dolor. Sit amet penatibus. A cum turpis. Aenean ac eu. " +
+ "Ligula est urna nulla vestibulum ullamcorper. Nec sit in amet tincidunt mus. " +
+ "Tellus sagittis mi. Suscipit cursus in vestibulum in eros ipsum felis cursus lectus " +
+ "nunc quis condimentum in risus nec wisi aenean luctus hendrerit magna habitasse commodo orci. " +
+ "Nisl etiam quis. Vestibulum justo eleifend aliquet luctus sed turpis volutpat ullamcorper " +
+ "aliquam penatibus sagittis pede tincidunt egestas. Nibh massa lectus. Sem mattis purus morbi " +
+ "scelerisque turpis donec urna phasellus. Quis at lacus. Viverra mauris mollis. " +
+ "Dolor tincidunt condimentum.";
+}
diff --git a/sfx2/qa/complex/standalonedocumentinfo/makefile.mk b/sfx2/qa/complex/standalonedocumentinfo/makefile.mk
deleted file mode 100644
index c65556aeb763..000000000000
--- a/sfx2/qa/complex/standalonedocumentinfo/makefile.mk
+++ /dev/null
@@ -1,85 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ = ..$/..$/..
-TARGET = StandaloneDocumentInfoUnitTest
-PRJNAME = binfilter
-PACKAGE = complex$/standalonedocumentinfo
-
-# --- Settings -----------------------------------------------------
-.INCLUDE: settings.mk
-
-
-#----- compile .java files -----------------------------------------
-
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar OOoRunner.jar
-
-JAVAFILES =\
- StandaloneDocumentInfoUnitTest.java\
- StandaloneDocumentInfoTest.java\
- Test01.java\
- TestHelper.java\
-
-JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
-
-#----- make a jar from compiled files ------------------------------
-
-MAXLINELENGTH = 100000
-
-JARCLASSDIRS = $(PACKAGE)
-JARTARGET = $(TARGET).jar
-JARCOMPRESS = TRUE
-
-# --- Parameters for the test --------------------------------------
-
-# start an office if the parameter is set for the makefile
-.IF "$(OFFICE)" == ""
-CT_APPEXECCOMMAND =
-.ELSE
-CT_APPEXECCOMMAND = -AppExecutionCommand "$(OFFICE)$/soffice -accept=socket,host=localhost,port=8100;urp;"
-.ENDIF
-
-# test base is java complex
-CT_TESTBASE = -TestBase java_complex
-
-# test looks something like the.full.package.TestName
-CT_TEST = -o $(PACKAGE:s\$/\.\).$(JAVAFILES:b)
-
-# start the runner application
-CT_APP = org.openoffice.Runner
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE: target.mk
-
-RUN: run
-
-run:
- +java -cp $(CLASSPATH) $(CT_APP) $(CT_TESTBASE) $(CT_APPEXECCOMMAND) $(CT_TEST)
-
-
-
diff --git a/sfx2/qa/complex/tests.sce b/sfx2/qa/complex/tests.sce
deleted file mode 100644
index c38852927ede..000000000000
--- a/sfx2/qa/complex/tests.sce
+++ /dev/null
@@ -1,3 +0,0 @@
--o complex.framework.DocumentMetaData
--o complex.framework.DocumentMetadataAccessTest
-#-o complex.framework.CheckGlobalEventBroadcaster_writer1