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