1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 package complex.sfx2; 24 25 import com.sun.star.awt.XWindow; 26 import com.sun.star.document.XEventBroadcaster; 27 import com.sun.star.document.XEventListener; 28 import com.sun.star.lang.XMultiServiceFactory; 29 import com.sun.star.sheet.XSpreadsheetDocument; 30 import com.sun.star.text.XTextDocument; 31 import com.sun.star.uno.UnoRuntime; 32 import complex.sfx2.tools.WriterHelper; 33 34 import java.util.ArrayList; 35 36 import util.UITools; 37 38 import org.junit.After; 39 import org.junit.AfterClass; 40 import org.junit.Before; 41 import org.junit.BeforeClass; 42 import org.junit.Test; 43 import org.openoffice.test.OfficeConnection; 44 import static org.junit.Assert.*; 45 46 47 /** 48 * This testcase checks the GlobalEventBroadcaster 49 * it will add an XEventListener and verify the Events 50 * raised when opening/changing and closing Office Documents 51 */ 52 public class GlobalEventBroadcaster { 53 XMultiServiceFactory m_xMSF = null; 54 XEventBroadcaster m_xEventBroadcaster = null; 55 ArrayList notifyEvents = new ArrayList(); 56 // XTextDocument xTextDoc; 57 XSpreadsheetDocument xSheetDoc; 58 XEventListener m_xEventListener = new EventListenerImpl(); 59 60 @Before public void initialize() { 61 m_xMSF = getMSF(); 62 System.out.println("check wether there is a valid MultiServiceFactory"); 63 64 assertNotNull("## Couldn't get MultiServiceFactory make sure your Office is started", m_xMSF); 65 66 System.out.println("... done"); 67 68 System.out.println( 69 "Create an instance of com.sun.star.frame.GlobalEventBroadcaster"); 70 71 Object GlobalEventBroadcaster = null; 72 73 try { 74 GlobalEventBroadcaster = m_xMSF.createInstance( 75 "com.sun.star.frame.GlobalEventBroadcaster"); 76 } catch (com.sun.star.uno.Exception e) { 77 fail("## Exception while creating instance"); 78 } 79 80 System.out.println("... done"); 81 82 System.out.println("check wether the created instance is valid"); 83 84 assertNotNull("couldn't create service", GlobalEventBroadcaster); 85 86 System.out.println("... done"); 87 88 System.out.println( 89 "try to query the XEventBroadcaster from the gained Object"); 90 m_xEventBroadcaster = UnoRuntime.queryInterface(XEventBroadcaster.class, GlobalEventBroadcaster); 91 92 if (util.utils.isVoid(m_xEventBroadcaster)) { 93 fail("couldn't get XEventBroadcaster"); 94 } 95 96 System.out.println("... done"); 97 98 System.out.println("adding Listener"); 99 m_xEventBroadcaster.addEventListener(m_xEventListener); 100 System.out.println("... done"); 101 } 102 103 @Test public void checkWriter() { 104 System.out.println("-- Checking Writer --"); 105 106 WriterHelper wHelper = new WriterHelper(m_xMSF); 107 String[] expected; 108 System.out.println("opening an empty writer doc"); 109 notifyEvents.clear(); 110 { 111 XTextDocument xTextDoc = wHelper.openEmptyDoc(); 112 shortWait(); 113 expected = new String[] { "OnUnfocus", "OnCreate", "OnViewCreated", "OnFocus" }; 114 115 assertTrue("Wrong events fired when opening empty doc", 116 proveExpectation(expected)); 117 System.out.println("... done"); 118 119 System.out.println("changing the writer doc"); 120 notifyEvents.clear(); 121 xTextDoc.getText().setString("GlobalEventBroadcaster"); 122 shortWait(); 123 expected = new String[] { "OnModifyChanged" }; 124 125 assertTrue("Wrong events fired when changing doc", 126 proveExpectation(expected)); 127 System.out.println("... done"); 128 129 System.out.println("closing the empty writer doc"); 130 notifyEvents.clear(); 131 wHelper.closeDoc(xTextDoc); 132 shortWait(); 133 } 134 expected = new String[] { "OnUnfocus", "OnFocus", "OnViewClosed", "OnUnload" }; 135 136 assertTrue("Wrong events fired when closing empty doc", 137 proveExpectation(expected)); 138 System.out.println("... done"); 139 140 System.out.println("opening an writer doc via Window-New Window"); 141 notifyEvents.clear(); 142 { 143 XTextDocument xTextDoc = wHelper.openFromDialog(".uno:NewWindow", "", false); 144 145 shortWait(); 146 expected = new String[] { "OnUnfocus", "OnCreate", "OnViewCreated", "OnFocus", "OnUnfocus", "OnViewCreated", "OnFocus", }; 147 148 assertTrue("Wrong events fired when opening an writer doc via Window-New Window", 149 proveExpectation(expected)); 150 System.out.println("... done"); 151 152 System.out.println("closing the created writer doc"); 153 notifyEvents.clear(); 154 155 wHelper.closeDoc(xTextDoc); 156 shortWait(); 157 } 158 expected = new String[] { "OnViewClosed", "OnUnfocus", "OnFocus", "OnViewClosed", "OnUnload" }; 159 160 assertTrue("Wrong events fired when closing Window-New Window", 161 proveExpectation(expected)); 162 163 System.out.println("... done"); 164 // TODO: It seems not possible to close the document without interactiv question 165 // there the follow test will not be execute 166 if (false) { 167 System.out.println("Opening document with label wizard"); 168 XTextDocument xTextDoc = wHelper.openFromDialog("private:factory/swriter?slot=21051", "", false); 169 shortWait(); 170 XWindow xWindow = UnoRuntime.queryInterface(XWindow.class, wHelper.getToolkit().getActiveTopWindow()); 171 UITools ut = new UITools(m_xMSF,xWindow); 172 notifyEvents.clear(); 173 System.out.println("pressing button 'New Document'"); 174 try{ 175 ut.clickButton ("New Document"); 176 } catch (Exception e) { 177 System.out.println("Couldn't press Button"); 178 } 179 System.out.println("... done"); 180 shortWait(); 181 shortWait(); 182 shortWait(); 183 expected = new String[] { "OnViewClosed", "OnCreate", "OnFocus", "OnModifyChanged" }; 184 185 assertTrue("Wrong events fired when starting labels wizard", 186 proveExpectation(expected)); 187 188 System.out.println("Try to close document..."); 189 wHelper.closeDoc(xTextDoc); 190 shortWait(); 191 wHelper.closeFromDialog(); 192 shortWait(); 193 xTextDoc = null; 194 } 195 196 System.out.println("-- Done Writer --"); 197 } 198 199 @After public void cleanup() { 200 System.out.println("removing Listener"); 201 m_xEventBroadcaster.removeEventListener(m_xEventListener); 202 System.out.println("... done"); 203 } 204 205 /** 206 * Sleeps for 0.5 sec. to allow StarOffice to react on <code> 207 * reset</code> call. 208 */ 209 private void shortWait() { 210 try { 211 Thread.sleep(2000); 212 } catch (InterruptedException e) { 213 System.out.println("While waiting :" + e); 214 } 215 } 216 217 private boolean proveExpectation(String[] expected) { 218 boolean locRes = true; 219 boolean failure = false; 220 221 System.out.println("Fired Events:"); 222 for (int k=0;k<notifyEvents.size();k++) { 223 System.out.println("\t- "+notifyEvents.get(k)); 224 } 225 226 for (int i = 0; i < expected.length; i++) { 227 locRes = notifyEvents.contains(expected[i]); 228 229 if (!locRes) { 230 System.out.println("The event " + expected[i] + " isn't fired"); 231 failure = true; 232 } 233 } 234 235 return !failure; 236 } 237 238 public class EventListenerImpl implements XEventListener { 239 public void disposing(com.sun.star.lang.EventObject eventObject) { 240 System.out.println("disposing: " + eventObject.Source.toString()); 241 } 242 243 public void notifyEvent(com.sun.star.document.EventObject eventObject) { 244 notifyEvents.add(eventObject.EventName); 245 } 246 } 247 248 private XMultiServiceFactory getMSF() 249 { 250 final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager()); 251 return xMSF1; 252 } 253 254 // setup and close connections 255 @BeforeClass public static void setUpConnection() throws Exception { 256 System.out.println("setUpConnection()"); 257 connection.setUp(); 258 } 259 260 @AfterClass public static void tearDownConnection() 261 throws InterruptedException, com.sun.star.uno.Exception 262 { 263 System.out.println("tearDownConnection() CheckGlobalEventBroadcaster_writer1"); 264 connection.tearDown(); 265 } 266 267 private static final OfficeConnection connection = new OfficeConnection(); 268 269 } 270