1ef39d40dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3ef39d40dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4ef39d40dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5ef39d40dSAndrew Rist  * distributed with this work for additional information
6ef39d40dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7ef39d40dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8ef39d40dSAndrew Rist  * "License"); you may not use this file except in compliance
9ef39d40dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10ef39d40dSAndrew Rist  *
11ef39d40dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12ef39d40dSAndrew Rist  *
13ef39d40dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14ef39d40dSAndrew Rist  * software distributed under the License is distributed on an
15ef39d40dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16ef39d40dSAndrew Rist  * KIND, either express or implied.  See the License for the
17ef39d40dSAndrew Rist  * specific language governing permissions and limitations
18ef39d40dSAndrew Rist  * under the License.
19ef39d40dSAndrew Rist  *
20ef39d40dSAndrew Rist  *************************************************************/
21ef39d40dSAndrew Rist 
22ef39d40dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package ifc.sdb;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import lib.MultiMethodTest;
27cdf0e10cSrcweir import lib.Status;
28cdf0e10cSrcweir import lib.StatusException;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir import com.sun.star.lang.EventObject;
31cdf0e10cSrcweir import com.sun.star.sdb.RowChangeEvent;
32cdf0e10cSrcweir import com.sun.star.sdb.XRowSetApproveBroadcaster;
33cdf0e10cSrcweir import com.sun.star.sdb.XRowSetApproveListener;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir /**
36cdf0e10cSrcweir * <code>com.sun.star.sdb.XRowSetApproveBroadcaster</code> interface test. <p>
37cdf0e10cSrcweir * Required object relations :
38cdf0e10cSrcweir * <ul>
39cdf0e10cSrcweir * <li> <code>'XRowSetApproveBroadcaster.ApproveChecker'</code>:
40cdf0e10cSrcweir *      implementation of inner interface <code>RowSetApproveChecker</code>
41cdf0e10cSrcweir *      which can move cursor within a rowset, change row, and change the
42cdf0e10cSrcweir *      whole rowset. </li>
43cdf0e10cSrcweir * </ul> <p>
44cdf0e10cSrcweir * It is better to recreate the object after test, because of unknown
45cdf0e10cSrcweir * actions made by <code>RowSetApproveChecker</code> interface implementation.
46cdf0e10cSrcweir *
47cdf0e10cSrcweir * @see com.sun.star.sdb.XRowSetApproveBroadcaster
48cdf0e10cSrcweir * @see _XRowSetApproveBroadcaster.RowSetApproveChecker
49cdf0e10cSrcweir */
50cdf0e10cSrcweir public class _XRowSetApproveBroadcaster extends MultiMethodTest {
51cdf0e10cSrcweir 
52cdf0e10cSrcweir     // oObj filled by MultiMethodTest
53cdf0e10cSrcweir     public XRowSetApproveBroadcaster oObj = null ;
54cdf0e10cSrcweir 
55cdf0e10cSrcweir     /**
56cdf0e10cSrcweir     * The purpose of this interface is to pass to this test
57cdf0e10cSrcweir     * relation which can make some operations with row set
58cdf0e10cSrcweir     * on which <code>XRowSetApproveListener</code>s can react.
59cdf0e10cSrcweir     * @see com.sun.star.sdb.XRowSetApproveListener
60cdf0e10cSrcweir     */
61cdf0e10cSrcweir     public static interface RowSetApproveChecker {
62cdf0e10cSrcweir         /**
63cdf0e10cSrcweir         * Moves cursor within row set. Method <code>approveCursorMove</code>
64cdf0e10cSrcweir         * of <code>XRowSetApproveListener</code> must be called.
65cdf0e10cSrcweir         */
moveCursor()66cdf0e10cSrcweir         public void moveCursor() ;
67cdf0e10cSrcweir         /**
68cdf0e10cSrcweir         * Change rows in row set. Method <code>approveRowChange</code>
69cdf0e10cSrcweir         * of <code>XRowSetApproveListener</code> must be called.
70cdf0e10cSrcweir         * @return <code>RowChangeEvent</code> structure which contains
71cdf0e10cSrcweir         * what type of change was made and how many rows it affected.
72cdf0e10cSrcweir         * @see com.sun.star.sdb.RowChangeEvent
73cdf0e10cSrcweir         */
changeRow()74cdf0e10cSrcweir         public RowChangeEvent changeRow() ;
75cdf0e10cSrcweir         /**
76cdf0e10cSrcweir         * Change the whole row set. Method <code>approveRowSetChange</code>
77cdf0e10cSrcweir         * of <code>XRowSetApproveListener</code> must be called.
78cdf0e10cSrcweir         */
changeRowSet()79cdf0e10cSrcweir         public void changeRowSet() ;
80cdf0e10cSrcweir     }
81cdf0e10cSrcweir 
82cdf0e10cSrcweir     /**
83cdf0e10cSrcweir     * Implementation of <code>XRowSetApproveListener</code> interface
84cdf0e10cSrcweir     * which just detects and stores approve requipements. They are checked
85cdf0e10cSrcweir     * later.
86cdf0e10cSrcweir     */
87cdf0e10cSrcweir     private class TestListener implements XRowSetApproveListener {
88cdf0e10cSrcweir         public boolean approveRequests = true ;
89cdf0e10cSrcweir         public boolean approveCursorMoveCalled = false ;
90cdf0e10cSrcweir         public boolean approveRowChangeCalled = false ;
91cdf0e10cSrcweir         public RowChangeEvent approveRowChangeEvent = null ;
92cdf0e10cSrcweir         public boolean approveRowSetChangeCalled = false ;
93cdf0e10cSrcweir 
TestListener(boolean approve)94cdf0e10cSrcweir         public TestListener(boolean approve) {
95cdf0e10cSrcweir             approveRequests = approve ;
96cdf0e10cSrcweir         }
97cdf0e10cSrcweir 
reset()98cdf0e10cSrcweir         public void reset() {
99cdf0e10cSrcweir             approveCursorMoveCalled = false ;
100cdf0e10cSrcweir             approveRowChangeCalled = false ;
101cdf0e10cSrcweir             approveRowSetChangeCalled = false ;
102cdf0e10cSrcweir         }
approveCursorMove(EventObject ev)103cdf0e10cSrcweir         public boolean approveCursorMove(EventObject ev) {
104cdf0e10cSrcweir             approveCursorMoveCalled = true ;
105cdf0e10cSrcweir             return approveRequests ;
106cdf0e10cSrcweir         }
approveRowChange(RowChangeEvent ev)107cdf0e10cSrcweir         public boolean approveRowChange(RowChangeEvent ev) {
108cdf0e10cSrcweir             approveRowChangeCalled = true ;
109cdf0e10cSrcweir             approveRowChangeEvent = ev ;
110cdf0e10cSrcweir             return approveRequests ;
111cdf0e10cSrcweir         }
approveRowSetChange(EventObject ev)112cdf0e10cSrcweir         public boolean approveRowSetChange(EventObject ev) {
113cdf0e10cSrcweir             approveRowSetChangeCalled = true ;
114cdf0e10cSrcweir             return approveRequests ;
115cdf0e10cSrcweir         }
disposing(EventObject ev)116cdf0e10cSrcweir         public void disposing(EventObject ev) {}
117cdf0e10cSrcweir     }
118cdf0e10cSrcweir     private TestListener listener1 = null ;
119cdf0e10cSrcweir 
120cdf0e10cSrcweir     private RowSetApproveChecker checker = null ;
121cdf0e10cSrcweir 
122cdf0e10cSrcweir     /**
123cdf0e10cSrcweir     * Tries to retrieve object relation.
124cdf0e10cSrcweir     */
before()125cdf0e10cSrcweir     public void before() {
126cdf0e10cSrcweir         checker = (RowSetApproveChecker) tEnv.getObjRelation
127cdf0e10cSrcweir             ("XRowSetApproveBroadcaster.ApproveChecker") ;
128cdf0e10cSrcweir 
129cdf0e10cSrcweir         if (checker == null) {
130cdf0e10cSrcweir             log.println("!!! Relation for test not found !!!") ;
131cdf0e10cSrcweir             throw new StatusException(Status.failed
132cdf0e10cSrcweir                 ("!!! Relation for test not found !!!")) ;
133cdf0e10cSrcweir         }
134cdf0e10cSrcweir     }
135cdf0e10cSrcweir 
136cdf0e10cSrcweir     /**
137cdf0e10cSrcweir     * Creates and adds listener, then call <code>RowSetApproveChecker</code>
138cdf0e10cSrcweir     * methods for listener methods to be called. Then checks if
139cdf0e10cSrcweir     * listener methods were called on appropriate actions. <p>
140cdf0e10cSrcweir     * Has OK status : If and only if appropriate listener methods called,
141cdf0e10cSrcweir     * and listener <code>approveRowChange</code> method has write parameter,
142cdf0e10cSrcweir     * i.e. type and rows number expected.
143cdf0e10cSrcweir     */
_addRowSetApproveListener()144cdf0e10cSrcweir     public void _addRowSetApproveListener() {
145cdf0e10cSrcweir         listener1 = new TestListener(true) ;
146cdf0e10cSrcweir         oObj.addRowSetApproveListener(listener1) ;
147cdf0e10cSrcweir         log.println("Listener added.") ;
148cdf0e10cSrcweir 
149cdf0e10cSrcweir         boolean result = true ;
150cdf0e10cSrcweir 
151cdf0e10cSrcweir         checker.moveCursor() ;
152cdf0e10cSrcweir         log.println("Cursor moved.") ;
153cdf0e10cSrcweir         result &= listener1.approveCursorMoveCalled ;
154cdf0e10cSrcweir 
155cdf0e10cSrcweir         listener1.reset() ;
156cdf0e10cSrcweir         RowChangeEvent actualEvent = checker.changeRow() ;
157cdf0e10cSrcweir         log.println("Row changed.") ;
158cdf0e10cSrcweir 
159cdf0e10cSrcweir         RowChangeEvent event = listener1.approveRowChangeEvent ;
160cdf0e10cSrcweir         result &= listener1.approveRowChangeCalled ;
161cdf0e10cSrcweir 
162cdf0e10cSrcweir         boolean eventOK = event.Action == actualEvent.Action &&
163cdf0e10cSrcweir                           event.Rows == actualEvent.Rows ;
164cdf0e10cSrcweir 
165cdf0e10cSrcweir         result &= eventOK ;
166cdf0e10cSrcweir 
167cdf0e10cSrcweir         listener1.reset() ;
168cdf0e10cSrcweir         checker.changeRowSet();
169cdf0e10cSrcweir         log.println("Row set changed.") ;
170cdf0e10cSrcweir         result &= listener1.approveRowSetChangeCalled ;
171cdf0e10cSrcweir 
172cdf0e10cSrcweir         tRes.tested("addRowSetApproveListener()", result) ;
173cdf0e10cSrcweir     }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir     /**
176cdf0e10cSrcweir     * Removes listener inserted before, then perform all actions
177cdf0e10cSrcweir     * on which listener must react. <p>
178cdf0e10cSrcweir     * Has OK status if no listener methods were called. <p>
179cdf0e10cSrcweir     * Methods required to pass before :
180cdf0e10cSrcweir     * <ul>
181cdf0e10cSrcweir     * <li> <code>_addRowSetApproveListener</code> </li>
182cdf0e10cSrcweir     * </ul>
183cdf0e10cSrcweir     */
_removeRowSetApproveListener()184cdf0e10cSrcweir     public void _removeRowSetApproveListener() {
185cdf0e10cSrcweir         requiredMethod("addRowSetApproveListener()") ;
186cdf0e10cSrcweir 
187cdf0e10cSrcweir         listener1.reset() ;
188cdf0e10cSrcweir 
189cdf0e10cSrcweir         oObj.removeRowSetApproveListener(listener1) ;
190cdf0e10cSrcweir 
191cdf0e10cSrcweir         checker.moveCursor() ;
192cdf0e10cSrcweir         checker.changeRow() ;
193cdf0e10cSrcweir         checker.changeRowSet() ;
194cdf0e10cSrcweir 
195cdf0e10cSrcweir         tRes.tested("removeRowSetApproveListener()",
196cdf0e10cSrcweir             !listener1.approveCursorMoveCalled &&
197cdf0e10cSrcweir             !listener1.approveRowChangeCalled &&
198cdf0e10cSrcweir             !listener1.approveRowSetChangeCalled) ;
199cdf0e10cSrcweir     }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir     /**
202cdf0e10cSrcweir     * Disposes object environment.
203cdf0e10cSrcweir     */
after()204cdf0e10cSrcweir     public void after() {
205cdf0e10cSrcweir         disposeEnvironment() ;
206cdf0e10cSrcweir     }
207cdf0e10cSrcweir 
208cdf0e10cSrcweir }  // finish class _XRowSetApproveBroadcaster
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 
211