blob: 9a7b3d8f5c49b2691a8110103f290f710cf53dc5 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the 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();
}