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 
24 package ifc.sdbcx;
25 
26 import lib.MultiMethodTest;
27 
28 import com.sun.star.sdbc.SQLException;
29 import com.sun.star.sdbcx.XRowLocate;
30 
31 /**
32 * Testing <code>com.sun.star.sdbcx.XRowLocate</code>
33 * interface methods :
34 * <ul>
35 *  <li><code> getBookmark()</code></li>
36 *  <li><code> moveToBookmark()</code></li>
37 *  <li><code> moveRelativeToBookmark()</code></li>
38 *  <li><code> compareBookmarks()</code></li>
39 *  <li><code> hasOrderedBookmarks()</code></li>
40 *  <li><code> hashBookmark()</code></li>
41 * </ul> <p>
42 * Object relations needed :
43 * <ul>
44 * <li> <code>XRowLocate.HasOrderedBookmarks</code> <b>(optional)</b>:
45 *  <code>Boolean</code> type. If information about bookmark ordering
46 *  of object tested exists it placed in this relation.</li>
47 * </ul> <p>
48 * @see com.sun.star.sdbcx.XRowLocate
49 */
50 public class _XRowLocate extends MultiMethodTest {
51 
52     // oObj filled by MultiMethodTest
53     public XRowLocate oObj = null ;
54 
55     private Object bookmark1 = null, bookmark2 = null ;
56 
57     /**
58     * Gets the bookmark of the current cursor position and
59     * stores it for other methods use.
60     * Has OK status if method returns not null
61     * <code>XNameAccess</code> object, FAILED otherwise.
62     */
_getBookmark()63     public void _getBookmark() {
64 
65         try {
66             bookmark1 = oObj.getBookmark() ;
67         } catch (SQLException e) {
68             log.println("Exception occurred :" + e) ;
69         }
70 
71         tRes.tested("getBookmark()", bookmark1 != null) ;
72     }
73 
74     /**
75     * Moves to bookmark previously created by method <code>_getBookmark</code>
76     * then creates new bookmark and compare it to the first one. The
77     * row difference must be equal to 0. <p>
78     * Method tests to be completed successfully before :
79     * <ul>
80     * <li> <code>getBookmark()</code> : to have a bookmark to move to.</li>
81     * </ul>
82     * Method tests to be executed before :
83     * <ul>
84     * <li> <code>moveRelativeToBookmark()</code> : to move the cursor from
85     *    the initial position, to check if it returns back.</li>
86     * </ul> <p>
87     * Has OK status difference between positions of bookmarks (where
88     * cursor was moved to and created new one) equals to 0 and no
89     * exceptions occurred, FAILED otherwise.
90     */
_moveToBookmark()91     public void _moveToBookmark() {
92         requiredMethod("getBookmark()") ;
93         executeMethod("moveRelativeToBookmark()") ;
94 
95         int comparison = -1 ;
96         Object tmpBookmark = null ;
97         try {
98             synchronized(oObj) {
99                 oObj.moveToBookmark(bookmark1) ;
100                 tmpBookmark = oObj.getBookmark() ;
101             }
102             comparison = oObj.compareBookmarks(bookmark1, tmpBookmark) ;
103         } catch (SQLException e) {
104             log.println("Exception occurred :" + e) ;
105         }
106 
107         tRes.tested("moveToBookmark()", comparison == 0) ;
108     }
109 
110     /**
111     * Moves the cursor to the position with offset 2 from the
112     * bookmark created by <code>_getBookmark()</code> method and
113     * then creates a bookmark of new position. <p>
114     * Method tests to be completed successfully before :
115     * <ul>
116     * <li> <code>getBookmark()</code> : to have a bookmark to move to.</li>
117     * </ul> <p>
118     * Has OK status if no exceptions occurred while method call.
119     */
_moveRelativeToBookmark()120     public void _moveRelativeToBookmark() {
121         requiredMethod("getBookmark()") ;
122 
123         boolean result = true ;
124         try {
125             synchronized (oObj) {
126                 oObj.moveRelativeToBookmark(bookmark1, 1) ;
127                 bookmark2 = oObj.getBookmark() ;
128             }
129         } catch (SQLException e) {
130             log.println("Exception occurred :" + e) ;
131             result = false ;
132         }
133 
134         tRes.tested("moveRelativeToBookmark()", result) ;
135     }
136 
137     /**
138     * Compares bookmarks created in <code>getBookmark()</code> and
139     * <code>moveRelativeToBokkmark()</code> methods.
140     * Method tests to be completed successfully before :
141     * <ul>
142     * <li> <code>getBookmark()</code> : to have first bookmark to compare.</li>
143     * <li> <code>moveRelativeToBookmark()</code> : to have second
144     *   bookmark to compare.</li>
145     * </ul> <p>
146     * Has OK status if difference in bookmark positions equals to 2.
147     */
_compareBookmarks()148     public void _compareBookmarks() {
149         requiredMethod("getBookmark()") ;
150         requiredMethod("moveRelativeToBookmark()") ;
151 
152         int comparison = 0 ;
153         int comparison1 = 0 ;
154         try {
155             comparison = oObj.compareBookmarks(bookmark1, bookmark2) ;
156             comparison1 = oObj.compareBookmarks(bookmark1, bookmark1) ;
157         } catch (SQLException e) {
158             log.println("Exception occurred :" + e) ;
159         }
160 
161         if (comparison != -1) {
162             log.println("! Wrong compare number :" + comparison) ;
163         }
164 
165         tRes.tested("compareBookmarks()", comparison == -1 && comparison1 == 0) ;
166     }
167 
168     /**
169     * Calls method. If relation is not found, returned result is not
170     * checked. <p>
171     * Has OK status if method returned right value (in case if relation
172     * and value to compare to exist), or just successfully returned
173     * (in case of no relation).
174     */
_hasOrderedBookmarks()175     public void _hasOrderedBookmarks() {
176         boolean result = true ;
177         boolean res = true ;
178 
179         // Optional relation
180         Boolean has = (Boolean) tEnv.getObjRelation
181             ("XRowLocate.HasOrderedBookmarks") ;
182 
183         try {
184             res = oObj.hasOrderedBookmarks() ;
185         } catch (SQLException e) {
186             log.println("Exception occurred :" + e) ;
187             result = false ;
188         }
189 
190         if (has == null) {
191             log.println("Optional relation not found - result not checked") ;
192         } else {
193             result &= res == has.booleanValue() ;
194         }
195 
196         tRes.tested("hasOrderedBookmarks()", result) ;
197     }
198 
199     /**
200     * Gets hash values of two previously created bookmarks of different
201     * cursor positions and compares them. <p>
202     * Method tests to be completed successfully before :
203     * <ul>
204     * <li> <code>getBookmark()</code> : to have first bookmark.</li>
205     * <li> <code>moveRelativeToBookmark()</code> : to have second
206     *   bookmark.</li>
207     * </ul> <p>
208     * Has OK status if hash values of two bookmarks are different.
209     */
_hashBookmark()210     public void _hashBookmark() {
211         requiredMethod("getBookmark()") ;
212         requiredMethod("moveRelativeToBookmark()") ;
213 
214         boolean result = true ;
215         try {
216             int hash1 = oObj.hashBookmark(bookmark1) ;
217             int hash2 = oObj.hashBookmark(bookmark2) ;
218             log.println("1st hash = " + hash1 + ", 2nd = " + hash2) ;
219 
220             result = hash1 != hash2 ;
221         } catch (SQLException e) {
222             log.println("Exception occurred :" + e) ;
223             result = false ;
224         }
225 
226         tRes.tested("hashBookmark()", result) ;
227     }
228 
229 }  // finish class _XRowLocate
230 
231