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.util;
25 
26 import lib.MultiMethodTest;
27 
28 import com.sun.star.container.XIndexAccess;
29 import com.sun.star.table.XCell;
30 import com.sun.star.util.XSearchDescriptor;
31 import com.sun.star.util.XSearchable;
32 
33 /**
34  * Testing <code>com.sun.star.util.XSearchable</code>
35  * interface methods :
36  * <ul>
37  *  <li><code> createSearchDescriptor()</code></li>
38  *  <li><code> findAll()</code></li>
39  *  <li><code> findFirst()</code></li>
40  *  <li><code> findNext()</code></li>
41  * </ul> <p>
42  *
43  * The requipment for the tested object is that it
44  * <b>must containt</b> string 'xTextDoc'. Only
45  * in that case this interface is tested correctly. <p>
46  *
47  * Test is <b> NOT </b> multithread compilant. <p>
48  * @see com.sun.star.util.XSearchable
49  */
50 public class _XSearchable extends MultiMethodTest {
51 
52     public XSearchable oObj = null;                // oObj filled by MultiMethodTest
53     public XSearchDescriptor Sdesc = null;
54     public Object start = null;
55     private String mSearchString = "xTextDoc";
56     private boolean mDispose = false;
57     private boolean mExcludeFindNext = false;
58 
59     /**
60      * Creates an entry to search for, if the current object does not provide
61      * one. In this case, the environment is disposed after the test, since
62      * the inserted object may influence following tests.
63      *
64      */
65     protected void before() {
66         Object o = tEnv.getObjRelation("SEARCHSTRING");
67         if (o != null) {
68             mSearchString = (String)o;
69         }
70         o = tEnv.getObjRelation("XSearchable.MAKEENTRYINCELL");
71         if (o != null) {
72             XCell[] cells = new XCell[0];
73             if (o instanceof XCell) {
74                 cells = new XCell[]{(XCell)o};
75             }
76             else if (o instanceof XCell[]) {
77                 cells = (XCell[])o;
78             }
79             else {
80                 log.println("Needed object relation 'XSearchable.MAKEENTRYINCELL' is there, but is of type '"
81                             + o.getClass().getName() + "'. Should be 'XCell' or 'XCell[]' instead.");
82             }
83             for (int i=0; i<cells.length; i++) {
84                 cells[i].setFormula(mSearchString);
85             }
86             mDispose = true;
87         }
88         mExcludeFindNext = (tEnv.getObjRelation("EXCLUDEFINDNEXT")==null)?false:true;
89     }
90 
91     /**
92      * Creates the search descriptor which searches for
93      * 'xTextDoc' string. <p>
94      * Has <b> OK </b> status if the method returns not
95      * <code>null</code> value.
96      */
97     public void _createSearchDescriptor() {
98 
99         log.println("testing createSearchDescriptor() ... ");
100 
101         Sdesc = oObj.createSearchDescriptor();
102         Sdesc.setSearchString(mSearchString);
103         tRes.tested("createSearchDescriptor()", Sdesc != null);
104 
105     }
106 
107     /**
108      * Performs search using descriptor created before. <p>
109      * Has <b> OK </b> status if the method not <code>null</code>
110      * collections. <p>
111      * The following method tests are to be completed successfully before :
112      * <ul>
113      *  <li> <code> createSearchDescriptor() </code> : creates the descriptor
114      *  required for search. </li>
115      * </ul>
116      */
117     public void _findAll() {
118 
119         requiredMethod("createSearchDescriptor()");
120         log.println("testing findAll()");
121 
122         XIndexAccess IA = oObj.findAll(Sdesc);
123         tRes.tested("findAll()", IA != null);
124     }
125 
126     /**
127      * Performs search using descriptor created before. Storing the
128      * first occurence result. <p>
129      * Has <b> OK </b> status if the method not <code>null</code>
130      * value. <p>
131      * The following method tests are to be completed successfully before :
132      * <ul>
133      *  <li> <code> createSearchDescriptor() </code> : creates the descriptor
134      *  required for search. </li>
135      * </ul>
136      */
137     public void _findFirst() {
138 
139         requiredMethod("createSearchDescriptor()");
140         log.println("testing findFirst()");
141         start = oObj.findFirst(Sdesc);
142         tRes.tested("findFirst()", start != null);
143     }
144 
145     /**
146      * Performs search using descriptor and first search result
147      * created before. <p>
148      * Has <b> OK </b> status if the method not <code>null</code>
149      * value. <p>
150      * The following method tests are to be completed successfully before :
151      * <ul>
152      *  <li> <code> findFirst() </code> : to have first search result. </li>
153      * </ul>
154      */
155     public void _findNext() {
156         if (mExcludeFindNext) {
157             log.println("Testing findNext() excluded, because only one" +
158                         " search result is available.");
159             tRes.tested("findNext()", true);
160         }
161         else{
162             requiredMethod("findFirst()");
163 
164             log.println("testing findNext()");
165             Object xI = oObj.findNext(start,Sdesc);
166             tRes.tested("findNext()", xI != null);
167         }
168     }
169 
170     /**
171      * In case the interface itself made the entry to search for, the environment
172      * must be disposed
173      */
174     protected void after() {
175         if(mDispose) {
176             disposeEnvironment();
177         }
178     }
179 }
180 
181 
182