1*ef39d40dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*ef39d40dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*ef39d40dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*ef39d40dSAndrew Rist * distributed with this work for additional information 6*ef39d40dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*ef39d40dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*ef39d40dSAndrew Rist * "License"); you may not use this file except in compliance 9*ef39d40dSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*ef39d40dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*ef39d40dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*ef39d40dSAndrew Rist * software distributed under the License is distributed on an 15*ef39d40dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ef39d40dSAndrew Rist * KIND, either express or implied. See the License for the 17*ef39d40dSAndrew Rist * specific language governing permissions and limitations 18*ef39d40dSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*ef39d40dSAndrew Rist *************************************************************/ 21*ef39d40dSAndrew Rist 22*ef39d40dSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir package ifc.form; 25cdf0e10cSrcweir 26cdf0e10cSrcweir import lib.MultiMethodTest; 27cdf0e10cSrcweir import lib.StatusException; 28cdf0e10cSrcweir 29cdf0e10cSrcweir import com.sun.star.form.XUpdateBroadcaster; 30cdf0e10cSrcweir import com.sun.star.form.XUpdateListener; 31cdf0e10cSrcweir import com.sun.star.lang.EventObject; 32cdf0e10cSrcweir 33cdf0e10cSrcweir /** 34cdf0e10cSrcweir * Testing <code>com.sun.star.form.XUpdateBroadcaster</code> 35cdf0e10cSrcweir * interface methods : 36cdf0e10cSrcweir * <ul> 37cdf0e10cSrcweir * <li><code> addUpdateListener()</code></li> 38cdf0e10cSrcweir * <li><code> removeUpdateListener()</code></li> 39cdf0e10cSrcweir * </ul> 40cdf0e10cSrcweir * This test needs the following object relations : 41cdf0e10cSrcweir * <ul> 42cdf0e10cSrcweir * <li> <code>'XUpdateBroadcaster.Checker'</code> : <code> 43cdf0e10cSrcweir * _XUpdateBroadcaster.UpdateChecker</code> interface implementation 44cdf0e10cSrcweir * which can update, commit data and check if the data was successfully 45cdf0e10cSrcweir * commited.</li> 46cdf0e10cSrcweir * <ul> <p> 47cdf0e10cSrcweir * Test is <b> NOT </b> multithread compilant. <p> 48cdf0e10cSrcweir * @see com.sun.star.form.XUpdateBroadcaster 49cdf0e10cSrcweir */ 50cdf0e10cSrcweir public class _XUpdateBroadcaster extends MultiMethodTest { 51cdf0e10cSrcweir 52cdf0e10cSrcweir public XUpdateBroadcaster oObj = null; 53cdf0e10cSrcweir UpdateChecker checker = null ; 54cdf0e10cSrcweir 55cdf0e10cSrcweir /** 56cdf0e10cSrcweir * Interface for relation. Updating, commiting and checking 57cdf0e10cSrcweir * if data was commited is object dependent behaviour. 58cdf0e10cSrcweir */ 59cdf0e10cSrcweir public static interface UpdateChecker { 60cdf0e10cSrcweir /** 61cdf0e10cSrcweir * Method must make some data update in the object tested. 62cdf0e10cSrcweir */ update()63cdf0e10cSrcweir public void update() throws com.sun.star.uno.Exception ; 64cdf0e10cSrcweir /** 65cdf0e10cSrcweir * Method must commit data change made by method <code>update</code>. 66cdf0e10cSrcweir */ commit()67cdf0e10cSrcweir public void commit() throws com.sun.star.uno.Exception ; 68cdf0e10cSrcweir /** 69cdf0e10cSrcweir * Checks if the data commited by <code>commit</code> method 70cdf0e10cSrcweir * became permanent in data source. 71cdf0e10cSrcweir * @return <code>true</code> if data was commited. 72cdf0e10cSrcweir */ wasCommited()73cdf0e10cSrcweir public boolean wasCommited() throws com.sun.star.uno.Exception ; 74cdf0e10cSrcweir } 75cdf0e10cSrcweir 76cdf0e10cSrcweir /** 77cdf0e10cSrcweir * Retrieves object relations. 78cdf0e10cSrcweir * @throws StatusException If one of relations not found. 79cdf0e10cSrcweir */ before()80cdf0e10cSrcweir public void before() { 81cdf0e10cSrcweir checker = (UpdateChecker) 82cdf0e10cSrcweir tEnv.getObjRelation("XUpdateBroadcaster.Checker") ; 83cdf0e10cSrcweir if (checker == null) { 84cdf0e10cSrcweir log.println("Relation not found") ; 85cdf0e10cSrcweir throw new StatusException("Relation not found", 86cdf0e10cSrcweir new NullPointerException("Relation not found")) ; 87cdf0e10cSrcweir } 88cdf0e10cSrcweir } 89cdf0e10cSrcweir 90cdf0e10cSrcweir /** 91cdf0e10cSrcweir * Listener implementation, which can accept or reject update 92cdf0e10cSrcweir * requests and store event calls. 93cdf0e10cSrcweir */ 94cdf0e10cSrcweir protected class TestListener implements XUpdateListener { 95cdf0e10cSrcweir /** 96cdf0e10cSrcweir * Indicates must listener approve update requests or not. 97cdf0e10cSrcweir */ 98cdf0e10cSrcweir public boolean approve = false ; 99cdf0e10cSrcweir /** 100cdf0e10cSrcweir * Indicates that <code>approveUpdate</code> method was called. 101cdf0e10cSrcweir */ 102cdf0e10cSrcweir public boolean approveCalled = false ; 103cdf0e10cSrcweir /** 104cdf0e10cSrcweir * Indicates that <code>updated</code> method was called. 105cdf0e10cSrcweir */ 106cdf0e10cSrcweir public boolean updateCalled = false ; 107cdf0e10cSrcweir 108cdf0e10cSrcweir /** 109cdf0e10cSrcweir * Clears all flags. 110cdf0e10cSrcweir */ init()111cdf0e10cSrcweir public void init() { 112cdf0e10cSrcweir approveCalled = false ; 113cdf0e10cSrcweir updateCalled = false ; 114cdf0e10cSrcweir } disposing(EventObject ev)115cdf0e10cSrcweir public void disposing(EventObject ev) {} approveUpdate(EventObject ev)116cdf0e10cSrcweir public boolean approveUpdate(EventObject ev) { 117cdf0e10cSrcweir approveCalled = true ; 118cdf0e10cSrcweir return approve ; 119cdf0e10cSrcweir } updated(EventObject ev)120cdf0e10cSrcweir public void updated(EventObject ev) { 121cdf0e10cSrcweir updateCalled = true ; 122cdf0e10cSrcweir } 123cdf0e10cSrcweir } 124cdf0e10cSrcweir 125cdf0e10cSrcweir private TestListener listener = new TestListener(); 126cdf0e10cSrcweir 127cdf0e10cSrcweir /** 128cdf0e10cSrcweir * The listener methods calls are checked twice with approving 129cdf0e10cSrcweir * and rejecting updates. <p> 130cdf0e10cSrcweir * Has <b>OK</b> status if on update rejected only <code> 131cdf0e10cSrcweir * approveUpdate</code> listener method was called, and if 132cdf0e10cSrcweir * on update approved <code>approveUpdate</code> and 133cdf0e10cSrcweir * <code>updated</code> methods called, and data was commited 134cdf0e10cSrcweir * to the source. 135cdf0e10cSrcweir */ _addUpdateListener()136cdf0e10cSrcweir public void _addUpdateListener() { 137cdf0e10cSrcweir boolean bResult = true; 138cdf0e10cSrcweir 139cdf0e10cSrcweir oObj.addUpdateListener(listener) ; 140cdf0e10cSrcweir 141cdf0e10cSrcweir try { 142cdf0e10cSrcweir checker.update() ; 143cdf0e10cSrcweir shortWait() ; 144cdf0e10cSrcweir checker.commit() ; 145cdf0e10cSrcweir shortWait() ; 146cdf0e10cSrcweir boolean commited = checker.wasCommited() ; 147cdf0e10cSrcweir 148cdf0e10cSrcweir shortWait() ; 149cdf0e10cSrcweir 150cdf0e10cSrcweir bResult = listener.approveCalled && 151cdf0e10cSrcweir ! listener.updateCalled && 152cdf0e10cSrcweir ! commited ; 153cdf0e10cSrcweir 154cdf0e10cSrcweir log.println("Calling with no approving : approveUpdate() was " + 155cdf0e10cSrcweir (listener.approveCalled ? "":"NOT")+" called, updated() was "+ 156cdf0e10cSrcweir (listener.updateCalled ? "":"NOT")+" called, the value was " + 157cdf0e10cSrcweir (commited ? "" : "NOT") + " commited.") ; 158cdf0e10cSrcweir 159cdf0e10cSrcweir shortWait() ; 160cdf0e10cSrcweir 161cdf0e10cSrcweir listener.init() ; 162cdf0e10cSrcweir listener.approve = true ; 163cdf0e10cSrcweir shortWait() ; 164cdf0e10cSrcweir checker.update() ; 165cdf0e10cSrcweir shortWait() ; 166cdf0e10cSrcweir checker.commit() ; 167cdf0e10cSrcweir shortWait() ; 168cdf0e10cSrcweir commited = checker.wasCommited() ; 169cdf0e10cSrcweir 170cdf0e10cSrcweir shortWait() ; 171cdf0e10cSrcweir 172cdf0e10cSrcweir log.println("Calling with approving : approveUpdate() was " + 173cdf0e10cSrcweir (listener.approveCalled ? "":"NOT")+" called, updated() was "+ 174cdf0e10cSrcweir (listener.updateCalled ? "":"NOT")+" called, the value was "+ 175cdf0e10cSrcweir (commited ? "" : "NOT") + " commited.") ; 176cdf0e10cSrcweir 177cdf0e10cSrcweir bResult = listener.approveCalled && 178cdf0e10cSrcweir listener.updateCalled && 179cdf0e10cSrcweir commited ; 180cdf0e10cSrcweir } catch (com.sun.star.uno.Exception e) { 181cdf0e10cSrcweir bResult = false ; 182cdf0e10cSrcweir e.printStackTrace(log) ; 183cdf0e10cSrcweir } 184cdf0e10cSrcweir 185cdf0e10cSrcweir tRes.tested("addUpdateListener()", bResult); 186cdf0e10cSrcweir } 187cdf0e10cSrcweir 188cdf0e10cSrcweir /** 189cdf0e10cSrcweir * Removes listener, updates data, and checks if no listener 190cdf0e10cSrcweir * methods were called. <p> 191cdf0e10cSrcweir * Has <b> OK </b> status if after listener removing no of its methods 192cdf0e10cSrcweir * were called. <p> 193cdf0e10cSrcweir * The following method tests are to be completed successfully before : 194cdf0e10cSrcweir * <ul> 195cdf0e10cSrcweir * <li> <code> addUpdateListener </code> : to have a listener added.</li> 196cdf0e10cSrcweir * </ul> 197cdf0e10cSrcweir */ _removeUpdateListener()198cdf0e10cSrcweir public void _removeUpdateListener() { 199cdf0e10cSrcweir requiredMethod("addUpdateListener()"); 200cdf0e10cSrcweir boolean bResult = true; 201cdf0e10cSrcweir 202cdf0e10cSrcweir listener.init() ; 203cdf0e10cSrcweir listener.approve = true ; 204cdf0e10cSrcweir 205cdf0e10cSrcweir oObj.removeUpdateListener(listener); 206cdf0e10cSrcweir 207cdf0e10cSrcweir try { 208cdf0e10cSrcweir checker.update() ; 209cdf0e10cSrcweir shortWait() ; 210cdf0e10cSrcweir checker.commit() ; 211cdf0e10cSrcweir 212cdf0e10cSrcweir shortWait() ; 213cdf0e10cSrcweir 214cdf0e10cSrcweir bResult = ! listener.approveCalled && 215cdf0e10cSrcweir ! listener.updateCalled ; 216cdf0e10cSrcweir } 217cdf0e10cSrcweir catch (com.sun.star.uno.Exception e) { 218cdf0e10cSrcweir log.println("Exception occured during removeUpdateListener()"); 219cdf0e10cSrcweir e.printStackTrace(log); 220cdf0e10cSrcweir bResult = false; 221cdf0e10cSrcweir } 222cdf0e10cSrcweir 223cdf0e10cSrcweir tRes.tested("removeUpdateListener()", bResult); 224cdf0e10cSrcweir } 225cdf0e10cSrcweir shortWait()226cdf0e10cSrcweir private void shortWait() { 227cdf0e10cSrcweir try { 228cdf0e10cSrcweir Thread.sleep(200); 229cdf0e10cSrcweir } 230cdf0e10cSrcweir catch (InterruptedException ex) { 231cdf0e10cSrcweir } 232cdf0e10cSrcweir 233cdf0e10cSrcweir } 234cdf0e10cSrcweir 235cdf0e10cSrcweir /** 236cdf0e10cSrcweir * Forces environment recreation. 237cdf0e10cSrcweir */ after()238cdf0e10cSrcweir protected void after() { 239cdf0e10cSrcweir disposeEnvironment(); 240cdf0e10cSrcweir } 241cdf0e10cSrcweir 242cdf0e10cSrcweir } 243cdf0e10cSrcweir 244cdf0e10cSrcweir 245