xref: /AOO41X/main/qadevOOo/tests/java/ifc/form/_XUpdateBroadcaster.java (revision ef39d40d3f5e66cf3f035b3e93783012b340500d)
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