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 package ifc.accessibility;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import com.sun.star.accessibility.AccessibleRole;
26cdf0e10cSrcweir import com.sun.star.accessibility.XAccessible;
27cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext;
28cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleSelection;
29cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
30cdf0e10cSrcweir 
31cdf0e10cSrcweir import lib.MultiMethodTest;
32cdf0e10cSrcweir import lib.Status;
33cdf0e10cSrcweir import lib.StatusException;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir 
36cdf0e10cSrcweir /**
37cdf0e10cSrcweir  * Testing <code>com.sun.star.accessibility.XAccessibleSelection</code>
38cdf0e10cSrcweir  * interface methods :
39cdf0e10cSrcweir  * <ul>
40cdf0e10cSrcweir  *  <li><code>selectAccessibleChild()</code></li>
41cdf0e10cSrcweir  *  <li><code>isAccessibleChildSelected()</code></li>
42cdf0e10cSrcweir  *  <li><code>clearAccessibleSelection()</code></li>
43cdf0e10cSrcweir  *  <li><code>selectAllAccessibleChildren()</code></li>
44cdf0e10cSrcweir  *  <li><code>getSelectedAccessibleChildCount()</code></li>
45cdf0e10cSrcweir  *  <li><code>getSelectedAccessibleChild()</code></li>
46cdf0e10cSrcweir  *  <li><code>deselectAccessibleChild()</code></li>
47cdf0e10cSrcweir  * </ul> <p>
48cdf0e10cSrcweir  *
49cdf0e10cSrcweir  * This test needs the following object relations :
50cdf0e10cSrcweir  * <ul>
51cdf0e10cSrcweir  *  <li> <code>'XAccessibleSelection.multiSelection'</code>
52cdf0e10cSrcweir  *  (of type <code>Boolean</code>) <b> optional </b>:
53cdf0e10cSrcweir  *   Indicates whether or not mutiply children could be selected.
54cdf0e10cSrcweir  *   If the relation is <code>false</code> then more than 1 child
55cdf0e10cSrcweir  *   couldn't be selected. </li>
56cdf0e10cSrcweir  * </ul> <p>
57cdf0e10cSrcweir  *
58cdf0e10cSrcweir  * @see com.sun.star.accessibility.XAccessibleSelection
59cdf0e10cSrcweir  */
60cdf0e10cSrcweir public class _XAccessibleSelection extends MultiMethodTest {
61cdf0e10cSrcweir     private static final String className = "com.sun.star.accessibility.XAccessibleSelection";
62cdf0e10cSrcweir     public XAccessibleSelection oObj = null;
63cdf0e10cSrcweir     XAccessibleContext xAC = null;
64cdf0e10cSrcweir     int childCount;
65cdf0e10cSrcweir     protected boolean multiSelection = true;
66cdf0e10cSrcweir     protected boolean OneAlwaysSelected = false;
67cdf0e10cSrcweir 
68cdf0e10cSrcweir     // temporary while accessibility package is in com.sun.star
getTestedClassName()69cdf0e10cSrcweir     protected String getTestedClassName() {
70cdf0e10cSrcweir         return className;
71cdf0e10cSrcweir     }
72cdf0e10cSrcweir 
73cdf0e10cSrcweir     /**
74cdf0e10cSrcweir      * Retrieves the interface <code>XAccessibleContext</code>
75cdf0e10cSrcweir      * and object relation.
76cdf0e10cSrcweir      * @see com.sun.star.accessibility.XAccessibleContext
77*e6b649b5SPedro Giffuni      * @see ifc.accessibility._XAccessibleContext
78cdf0e10cSrcweir      */
before()79cdf0e10cSrcweir     protected void before() {
80cdf0e10cSrcweir         xAC = (XAccessibleContext) UnoRuntime.queryInterface(
81cdf0e10cSrcweir                       XAccessibleContext.class, oObj);
82cdf0e10cSrcweir 
83cdf0e10cSrcweir         if (xAC == null) {
84cdf0e10cSrcweir             throw new StatusException(Status.failed(
85cdf0e10cSrcweir                                               "Couldn't query XAccessibleContext. Test must be modified"));
86cdf0e10cSrcweir         }
87cdf0e10cSrcweir 
88cdf0e10cSrcweir         Boolean b = (Boolean) tEnv.getObjRelation(
89cdf0e10cSrcweir                             "XAccessibleSelection.multiSelection");
90cdf0e10cSrcweir 
91cdf0e10cSrcweir         if (b != null) {
92cdf0e10cSrcweir             multiSelection = b.booleanValue();
93cdf0e10cSrcweir         }
94cdf0e10cSrcweir 
95cdf0e10cSrcweir         Boolean b2 = (Boolean) tEnv.getObjRelation(
96cdf0e10cSrcweir                              "XAccessibleSelection.OneAlwaysSelected");
97cdf0e10cSrcweir 
98cdf0e10cSrcweir         if (b2 != null) {
99cdf0e10cSrcweir             OneAlwaysSelected = b2.booleanValue();
100cdf0e10cSrcweir         }
101cdf0e10cSrcweir 
102cdf0e10cSrcweir         childCount = xAC.getAccessibleChildCount();
103cdf0e10cSrcweir         log.println("Child count: " + childCount);
104cdf0e10cSrcweir     }
105cdf0e10cSrcweir 
106cdf0e10cSrcweir     /**
107cdf0e10cSrcweir      * Selects accessible child with index some wrong indexes
108cdf0e10cSrcweir      * and with legal index.
109cdf0e10cSrcweir      * Has OK status if exception was thrown for wrong indexes
110cdf0e10cSrcweir      * and if exception wasn't thrown for correct index.
111cdf0e10cSrcweir      */
_selectAccessibleChild()112cdf0e10cSrcweir     public void _selectAccessibleChild() {
113cdf0e10cSrcweir         boolean res = true;
114cdf0e10cSrcweir 
115cdf0e10cSrcweir         try {
116cdf0e10cSrcweir             log.println("Try to select child with index " + childCount);
117cdf0e10cSrcweir             oObj.selectAccessibleChild(childCount);
118cdf0e10cSrcweir             log.println("Exception was expected");
119cdf0e10cSrcweir             res = false;
120cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
121cdf0e10cSrcweir             log.println("Expected exception");
122cdf0e10cSrcweir             res = true;
123cdf0e10cSrcweir         }
124cdf0e10cSrcweir 
125cdf0e10cSrcweir         try {
126cdf0e10cSrcweir             log.println("Try to select child with index -1");
127cdf0e10cSrcweir             oObj.selectAccessibleChild(-1);
128cdf0e10cSrcweir             log.println("Exception was expected");
129cdf0e10cSrcweir             res = false;
130cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
131cdf0e10cSrcweir             log.println("Expected exception");
132cdf0e10cSrcweir             res &= true;
133cdf0e10cSrcweir         }
134cdf0e10cSrcweir 
135cdf0e10cSrcweir         log.println("ChildCount: " + childCount);
136cdf0e10cSrcweir 
137cdf0e10cSrcweir         int usedChilds = childCount;
138cdf0e10cSrcweir 
139cdf0e10cSrcweir         if (childCount > 500) {
140cdf0e10cSrcweir             log.println("Restricting to 500");
141cdf0e10cSrcweir             usedChilds = 500;
142cdf0e10cSrcweir         }
143cdf0e10cSrcweir 
144cdf0e10cSrcweir         if (usedChilds > 0) {
145cdf0e10cSrcweir             try {
146cdf0e10cSrcweir                 for (int i = 0; i < usedChilds; i++) {
147cdf0e10cSrcweir                     log.print("Trying to select child with index " + i + ": ");
148cdf0e10cSrcweir 
149cdf0e10cSrcweir                     if (isSelectable(tEnv.getTestObject(), i)) {
150cdf0e10cSrcweir                         oObj.selectAccessibleChild(i);
151cdf0e10cSrcweir                         log.println("OK");
152cdf0e10cSrcweir                     } else {
153cdf0e10cSrcweir                         log.println("Child isn't selectable");
154cdf0e10cSrcweir                     }
155cdf0e10cSrcweir                 }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir                 res &= true;
158cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
159cdf0e10cSrcweir                 log.println("Unexpected exception");
160cdf0e10cSrcweir                 e.printStackTrace(log);
161cdf0e10cSrcweir                 res = false;
162cdf0e10cSrcweir             }
163cdf0e10cSrcweir         }
164cdf0e10cSrcweir 
165cdf0e10cSrcweir         tRes.tested("selectAccessibleChild()", res);
166cdf0e10cSrcweir     }
167cdf0e10cSrcweir 
168cdf0e10cSrcweir     /**
169cdf0e10cSrcweir      * Calls the method with the wrong index and with the correct index.
170cdf0e10cSrcweir      * Has OK status if exception was thrown for wrong index and
171cdf0e10cSrcweir      * if exception wasn't thrown for the correct index.
172cdf0e10cSrcweir      */
_isAccessibleChildSelected()173cdf0e10cSrcweir     public void _isAccessibleChildSelected() {
174cdf0e10cSrcweir         executeMethod("selectAccessibleChild()");
175cdf0e10cSrcweir 
176cdf0e10cSrcweir         boolean res = true;
177cdf0e10cSrcweir         boolean isSelected = false;
178cdf0e10cSrcweir 
179cdf0e10cSrcweir         try {
180cdf0e10cSrcweir             log.print("isAccessibleChildSelected(-1)? ");
181cdf0e10cSrcweir             isSelected = oObj.isAccessibleChildSelected(-1);
182cdf0e10cSrcweir             log.println(res);
183cdf0e10cSrcweir             log.println("Exception was expected");
184cdf0e10cSrcweir             res = false;
185cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
186cdf0e10cSrcweir             log.println("Expected exception");
187cdf0e10cSrcweir             res = true;
188cdf0e10cSrcweir         }
189cdf0e10cSrcweir 
190cdf0e10cSrcweir         try {
191cdf0e10cSrcweir             log.print("isAccessibleChildSelected(" + childCount + ")? ");
192cdf0e10cSrcweir             isSelected = oObj.isAccessibleChildSelected(childCount);
193cdf0e10cSrcweir             log.println(isSelected);
194cdf0e10cSrcweir             log.println("Exception was expected");
195cdf0e10cSrcweir             res = false;
196cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
197cdf0e10cSrcweir             log.println("Expected exception");
198cdf0e10cSrcweir             res &= true;
199cdf0e10cSrcweir         }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir         int SelectableChildCount = chkSelectable(tEnv.getTestObject());
202cdf0e10cSrcweir 
203cdf0e10cSrcweir         if (SelectableChildCount > 500) {
204cdf0e10cSrcweir             SelectableChildCount = 500;
205cdf0e10cSrcweir         }
206cdf0e10cSrcweir 
207cdf0e10cSrcweir         log.println("SelectableChildCount: " + SelectableChildCount);
208cdf0e10cSrcweir 
209cdf0e10cSrcweir         if (SelectableChildCount > 0) {
210cdf0e10cSrcweir             try {
211cdf0e10cSrcweir                 oObj.selectAllAccessibleChildren();
212cdf0e10cSrcweir 
213cdf0e10cSrcweir                 for (int k = 0; k < SelectableChildCount; k++) {
214cdf0e10cSrcweir                     log.println("Trying to select child with index " + k);
215cdf0e10cSrcweir 
216cdf0e10cSrcweir                     if (isSelectable(tEnv.getTestObject(), k)) {
217cdf0e10cSrcweir                         oObj.selectAccessibleChild(k);
218cdf0e10cSrcweir                         shortWait();
219cdf0e10cSrcweir                         isSelected = oObj.isAccessibleChildSelected(k);
220cdf0e10cSrcweir                         log.println("isAccessibleChildSelected - " +
221cdf0e10cSrcweir                                     isSelected);
222cdf0e10cSrcweir                         res &= isSelected;
223cdf0e10cSrcweir                     } else {
224cdf0e10cSrcweir                         log.println("Child isn't selectable");
225cdf0e10cSrcweir                     }
226cdf0e10cSrcweir                 }
227cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
228cdf0e10cSrcweir                 log.println("Unexpected exception");
229cdf0e10cSrcweir                 e.printStackTrace(log);
230cdf0e10cSrcweir                 res = false;
231cdf0e10cSrcweir             }
232cdf0e10cSrcweir         }
233cdf0e10cSrcweir 
234cdf0e10cSrcweir         tRes.tested("isAccessibleChildSelected()", res);
235cdf0e10cSrcweir     }
236cdf0e10cSrcweir 
237cdf0e10cSrcweir     /**
238cdf0e10cSrcweir      * Calls the method.
239cdf0e10cSrcweir      * Has OK status if the method <code>isAccessibleChildSelected()</code>
240cdf0e10cSrcweir      * returned <code>false</code>.
241cdf0e10cSrcweir      */
_clearAccessibleSelection()242cdf0e10cSrcweir     public void _clearAccessibleSelection() {
243cdf0e10cSrcweir         executeMethod("isAccessibleChildSelected()");
244cdf0e10cSrcweir 
245cdf0e10cSrcweir         boolean res = true;
246cdf0e10cSrcweir 
247cdf0e10cSrcweir         log.println("clearAccessibleSelection");
248cdf0e10cSrcweir         oObj.clearAccessibleSelection();
249cdf0e10cSrcweir 
250cdf0e10cSrcweir 
251cdf0e10cSrcweir         // clearAccessibleSelection() call is oneway so we need
252cdf0e10cSrcweir         // some waiting
253cdf0e10cSrcweir         shortWait();
254cdf0e10cSrcweir 
255cdf0e10cSrcweir         if ((childCount > 0) && !OneAlwaysSelected) {
256cdf0e10cSrcweir             try {
257cdf0e10cSrcweir                 log.print("isAccessibleChildSelected(" + (childCount - 1) +
258cdf0e10cSrcweir                           ")? ");
259cdf0e10cSrcweir 
260cdf0e10cSrcweir                 boolean isSel = oObj.isAccessibleChildSelected(childCount - 1);
261cdf0e10cSrcweir                 log.println(isSel);
262cdf0e10cSrcweir                 res = !isSel;
263cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
264cdf0e10cSrcweir                 log.println("Unexpected exception");
265cdf0e10cSrcweir                 e.printStackTrace(log);
266cdf0e10cSrcweir                 res = false;
267cdf0e10cSrcweir             }
268cdf0e10cSrcweir         } else if (OneAlwaysSelected) {
269cdf0e10cSrcweir             log.println("Can't clear selection, one child is always selected");
270cdf0e10cSrcweir         }
271cdf0e10cSrcweir 
272cdf0e10cSrcweir         tRes.tested("clearAccessibleSelection()", res);
273cdf0e10cSrcweir     }
274cdf0e10cSrcweir 
275cdf0e10cSrcweir     /**
276cdf0e10cSrcweir      * Calls the method.
277cdf0e10cSrcweir      * Has OK status if the method <code>isAccessibleChildSelected()</code>
278cdf0e10cSrcweir      * returns <code>true</code> for first and for last accessible child
279cdf0e10cSrcweir      * or if multiselection is not allowed.
280cdf0e10cSrcweir      */
_selectAllAccessibleChildren()281cdf0e10cSrcweir     public void _selectAllAccessibleChildren() {
282cdf0e10cSrcweir         executeMethod("clearAccessibleSelection()");
283cdf0e10cSrcweir 
284cdf0e10cSrcweir         log.println("selectAllAccessibleChildren...");
285cdf0e10cSrcweir         oObj.selectAllAccessibleChildren();
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 
288cdf0e10cSrcweir         // selectAllAccessibleChildren() call is oneway so we need
289cdf0e10cSrcweir         // some waiting
290cdf0e10cSrcweir         shortWait();
291cdf0e10cSrcweir 
292cdf0e10cSrcweir         boolean res = true;
293cdf0e10cSrcweir         boolean isSelected = true;
294cdf0e10cSrcweir 
295cdf0e10cSrcweir         int SelectableChildCount = chkSelectable(tEnv.getTestObject());
296cdf0e10cSrcweir 
297cdf0e10cSrcweir         if ((SelectableChildCount > 0) && multiSelection) {
298cdf0e10cSrcweir             try {
299cdf0e10cSrcweir                 log.print("isAccessibleChildSelected(1)? ");
300cdf0e10cSrcweir                 isSelected = oObj.isAccessibleChildSelected(1);
301cdf0e10cSrcweir                 log.println(isSelected);
302cdf0e10cSrcweir                 res = isSelected;
303cdf0e10cSrcweir 
304cdf0e10cSrcweir                 log.print("isAccessibleChildSelected(" + (childCount - 1) +
305cdf0e10cSrcweir                           ")? ");
306cdf0e10cSrcweir                 isSelected = oObj.isAccessibleChildSelected(childCount - 1);
307cdf0e10cSrcweir                 log.println(isSelected);
308cdf0e10cSrcweir                 res &= isSelected;
309cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
310cdf0e10cSrcweir                 log.println("Unexpected exception");
311cdf0e10cSrcweir                 e.printStackTrace(log);
312cdf0e10cSrcweir                 res = false;
313cdf0e10cSrcweir             }
314cdf0e10cSrcweir         }
315cdf0e10cSrcweir 
316cdf0e10cSrcweir         tRes.tested("selectAllAccessibleChildren()", res);
317cdf0e10cSrcweir     }
318cdf0e10cSrcweir 
319cdf0e10cSrcweir     /**
320cdf0e10cSrcweir      * Calls the method. Clears accessible selection and calls the method again.
321cdf0e10cSrcweir      * <p>
322cdf0e10cSrcweir      * Has OK status if the method returns number equal to number of accessible
323cdf0e10cSrcweir      * child count after first call if multiselection allowed, or
324cdf0e10cSrcweir      * 1 returned if multiselection not allowed.
325cdf0e10cSrcweir      * And if the method returns a zero after clearing selection.
326cdf0e10cSrcweir      */
_getSelectedAccessibleChildCount()327cdf0e10cSrcweir     public void _getSelectedAccessibleChildCount() {
328cdf0e10cSrcweir         log.println("getSelectedAccessibleChildCount():");
329cdf0e10cSrcweir 
330cdf0e10cSrcweir         if (multiSelection) {
331cdf0e10cSrcweir             oObj.selectAllAccessibleChildren();
332cdf0e10cSrcweir         } else {
333cdf0e10cSrcweir             int usedChilds = childCount;
334cdf0e10cSrcweir 
335cdf0e10cSrcweir             if (childCount > 500) {
336cdf0e10cSrcweir                 log.println("Restricting to 500");
337cdf0e10cSrcweir                 usedChilds = 500;
338cdf0e10cSrcweir             }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir             if (usedChilds > 0) {
341cdf0e10cSrcweir                 try {
342cdf0e10cSrcweir                     for (int i = 0; i < usedChilds; i++) {
343cdf0e10cSrcweir 
344cdf0e10cSrcweir                         if (isSelectable(tEnv.getTestObject(), i)) {
345cdf0e10cSrcweir                             log.print("Trying to select child with index "+i+": ");
346cdf0e10cSrcweir                             oObj.selectAccessibleChild(i);
347cdf0e10cSrcweir                             long curtime = System.currentTimeMillis();
348cdf0e10cSrcweir                             long checktime = System.currentTimeMillis();
349cdf0e10cSrcweir 
350cdf0e10cSrcweir                             while (!oObj.isAccessibleChildSelected(i) && (checktime-curtime<5000)) {
351cdf0e10cSrcweir                                 checktime = System.currentTimeMillis();
352cdf0e10cSrcweir                             }
353cdf0e10cSrcweir 
354cdf0e10cSrcweir                             log.println("OK");
355cdf0e10cSrcweir                         }
356cdf0e10cSrcweir                     }
357cdf0e10cSrcweir                 } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
358cdf0e10cSrcweir                     log.println("Unexpected exception");
359cdf0e10cSrcweir                     e.printStackTrace(log);
360cdf0e10cSrcweir                 }
361cdf0e10cSrcweir             }
362cdf0e10cSrcweir         }
363cdf0e10cSrcweir 
364cdf0e10cSrcweir         int sCount = chkSelectable(tEnv.getTestObject());
365cdf0e10cSrcweir         log.println("Found " + sCount + " selectable Childs");
366cdf0e10cSrcweir 
367cdf0e10cSrcweir         int selectedCount = oObj.getSelectedAccessibleChildCount();
368cdf0e10cSrcweir         log.println("After selecting all accessible " + selectedCount +
369cdf0e10cSrcweir                     " are selected");
370cdf0e10cSrcweir 
371cdf0e10cSrcweir         boolean res = true;
372cdf0e10cSrcweir 
373cdf0e10cSrcweir         if (multiSelection) {
374cdf0e10cSrcweir             res &= (selectedCount == sCount);
375cdf0e10cSrcweir         } else {
376cdf0e10cSrcweir             res &= (selectedCount == 1);
377cdf0e10cSrcweir         }
378cdf0e10cSrcweir 
379cdf0e10cSrcweir         log.println("clearAccessibleSelection...");
380cdf0e10cSrcweir         oObj.clearAccessibleSelection();
381cdf0e10cSrcweir         log.print("getSelectedAccessibleChildCount: ");
382cdf0e10cSrcweir         selectedCount = oObj.getSelectedAccessibleChildCount();
383cdf0e10cSrcweir         log.println(selectedCount);
384cdf0e10cSrcweir 
385cdf0e10cSrcweir         if (OneAlwaysSelected) {
386cdf0e10cSrcweir             res &= (selectedCount == 1);
387cdf0e10cSrcweir         } else {
388cdf0e10cSrcweir             res &= (selectedCount == 0);
389cdf0e10cSrcweir         }
390cdf0e10cSrcweir 
391cdf0e10cSrcweir         tRes.tested("getSelectedAccessibleChildCount()", res);
392cdf0e10cSrcweir     }
393cdf0e10cSrcweir 
394cdf0e10cSrcweir     /**
395cdf0e10cSrcweir      * Calls the method with wrong and correct indexes.
396cdf0e10cSrcweir      * Has OK status if exception was thrown for the wrong indexes,
397cdf0e10cSrcweir      * if exception wasn't thrown for the correct index and
398cdf0e10cSrcweir      * if the method have returned a not null for the correct index.
399cdf0e10cSrcweir      */
_getSelectedAccessibleChild()400cdf0e10cSrcweir     public void _getSelectedAccessibleChild() {
401cdf0e10cSrcweir         executeMethod("getSelectedAccessibleChildCount()");
402cdf0e10cSrcweir 
403cdf0e10cSrcweir         boolean res = true;
404cdf0e10cSrcweir         int selectedCount = oObj.getSelectedAccessibleChildCount();
405cdf0e10cSrcweir         log.println("getSelectedAccessibleChildCount: " + selectedCount);
406cdf0e10cSrcweir 
407cdf0e10cSrcweir         try {
408cdf0e10cSrcweir             log.println("getSelectedAccessibleChild(-1)");
409cdf0e10cSrcweir             oObj.getSelectedAccessibleChild(-1);
410cdf0e10cSrcweir             log.println("Exception was expected");
411cdf0e10cSrcweir             res = false;
412cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
413cdf0e10cSrcweir             log.println("Expected exception");
414cdf0e10cSrcweir             res = true;
415cdf0e10cSrcweir         }
416cdf0e10cSrcweir 
417cdf0e10cSrcweir         try {
418cdf0e10cSrcweir             log.println("getSelectedAccessibleChild(" + selectedCount + ")");
419cdf0e10cSrcweir             oObj.getSelectedAccessibleChild(selectedCount);
420cdf0e10cSrcweir             log.println("Exception was expected");
421cdf0e10cSrcweir             res &= false;
422cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
423cdf0e10cSrcweir             log.println("Expected exception");
424cdf0e10cSrcweir             res &= true;
425cdf0e10cSrcweir         }
426cdf0e10cSrcweir 
427cdf0e10cSrcweir         int SelectableChildCount = chkSelectable(tEnv.getTestObject());
428cdf0e10cSrcweir 
429cdf0e10cSrcweir         if (SelectableChildCount > 500) {
430cdf0e10cSrcweir             SelectableChildCount = 500;
431cdf0e10cSrcweir         }
432cdf0e10cSrcweir 
433cdf0e10cSrcweir         if (SelectableChildCount > 0) {
434cdf0e10cSrcweir             int k = 0;
435cdf0e10cSrcweir             try {
436cdf0e10cSrcweir                 for (k = 0; k < SelectableChildCount; k++) {
437cdf0e10cSrcweir                     log.println("Trying to select child with index " + k);
438cdf0e10cSrcweir 
439cdf0e10cSrcweir                     if (isSelectable(tEnv.getTestObject(), k)) {
440cdf0e10cSrcweir                         oObj.selectAccessibleChild(k);
441cdf0e10cSrcweir                         shortWait();
442cdf0e10cSrcweir                         log.println("selected child count: " +
443cdf0e10cSrcweir                                     oObj.getSelectedAccessibleChildCount());
444cdf0e10cSrcweir                         XAccessible selChild = oObj.getSelectedAccessibleChild(0);
445cdf0e10cSrcweir                         res &= (selChild != null);
446cdf0e10cSrcweir                         log.println("valid child - " + (selChild != null));
447cdf0e10cSrcweir                     } else {
448cdf0e10cSrcweir                         log.println("Child isn't selectable");
449cdf0e10cSrcweir                     }
450cdf0e10cSrcweir                 }
451cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
452cdf0e10cSrcweir                 log.println("Unexpected exception: Last relevant calls:\n " +
453cdf0e10cSrcweir                             "\toObj.selectAccessibleChild("+k+")\n" +
454cdf0e10cSrcweir                             "\toObj.getSelectedAccessibleChild(0)");
455cdf0e10cSrcweir                 e.printStackTrace(log);
456cdf0e10cSrcweir                 res = false;
457cdf0e10cSrcweir             }
458cdf0e10cSrcweir         }
459cdf0e10cSrcweir 
460cdf0e10cSrcweir         tRes.tested("getSelectedAccessibleChild()", res);
461cdf0e10cSrcweir     }
462cdf0e10cSrcweir 
463cdf0e10cSrcweir     /**
464cdf0e10cSrcweir      * Calls the method with wrong and with correct indexes.
465cdf0e10cSrcweir      * Has OK status if exceptions were thrown for the calls with
466cdf0e10cSrcweir      * the wrong indexes, if exception wasn't thrown for the call
467cdf0e10cSrcweir      * with correct index and if number of selected child was
468cdf0e10cSrcweir      * decreased after the correct call.
469cdf0e10cSrcweir      */
_deselectAccessibleChild()470cdf0e10cSrcweir     public void _deselectAccessibleChild() {
471cdf0e10cSrcweir         executeMethod("getSelectedAccessibleChild()");
472cdf0e10cSrcweir 
473cdf0e10cSrcweir         boolean res = true;
474cdf0e10cSrcweir         int selCount = oObj.getSelectedAccessibleChildCount();
475cdf0e10cSrcweir         log.println("getSelectedAccessibleChildCount():" + selCount);
476cdf0e10cSrcweir 
477cdf0e10cSrcweir         try {
478cdf0e10cSrcweir             log.println("deselectAccessibleChild(-1)");
479cdf0e10cSrcweir             oObj.deselectAccessibleChild(-1);
480cdf0e10cSrcweir             log.println("Exception was expected");
481cdf0e10cSrcweir             res = false;
482cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
483cdf0e10cSrcweir             log.println("Expected exception");
484cdf0e10cSrcweir             res &= true;
485cdf0e10cSrcweir         }
486cdf0e10cSrcweir 
487cdf0e10cSrcweir         try {
488cdf0e10cSrcweir             log.println("deselectAccessibleChild(" + (childCount + 1) + ")");
489cdf0e10cSrcweir             oObj.deselectAccessibleChild(childCount + 1);
490cdf0e10cSrcweir             log.println("Exception was expected");
491cdf0e10cSrcweir             res = false;
492cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
493cdf0e10cSrcweir             log.println("Expected exception");
494cdf0e10cSrcweir             res &= true;
495cdf0e10cSrcweir         }
496cdf0e10cSrcweir 
497cdf0e10cSrcweir         log.println("#################");
498cdf0e10cSrcweir         log.println("Selecting all accessible");
499cdf0e10cSrcweir         oObj.selectAllAccessibleChildren();
500cdf0e10cSrcweir         selCount = oObj.getSelectedAccessibleChildCount();
501cdf0e10cSrcweir         log.println("getSelectedAccessibleChildCount():" + selCount);
502cdf0e10cSrcweir 
503cdf0e10cSrcweir         if ((childCount > 0) && (selCount > 0)) {
504cdf0e10cSrcweir             try {
505cdf0e10cSrcweir                 int maxCount = chkSelectable(tEnv.getTestObject());
506cdf0e10cSrcweir 
507cdf0e10cSrcweir                 if (childCount > 100) {
508cdf0e10cSrcweir                     maxCount = 100;
509cdf0e10cSrcweir                 }
510cdf0e10cSrcweir 
511cdf0e10cSrcweir                 for (int k = 0; k < maxCount; k++) {
512cdf0e10cSrcweir                     log.println("deselectAccessibleChild(" + k + ")");
513cdf0e10cSrcweir 
514cdf0e10cSrcweir                     if (oObj.isAccessibleChildSelected(k)) {
515cdf0e10cSrcweir                         oObj.deselectAccessibleChild(k);
516cdf0e10cSrcweir                     }
517cdf0e10cSrcweir                 }
518cdf0e10cSrcweir 
519cdf0e10cSrcweir                 int newSelCount = oObj.getSelectedAccessibleChildCount();
520cdf0e10cSrcweir                 log.println("getSelectedAccessibleChildCount():" +
521cdf0e10cSrcweir                             newSelCount);
522cdf0e10cSrcweir 
523cdf0e10cSrcweir                 if (OneAlwaysSelected && (selCount == 1)) {
524cdf0e10cSrcweir                     log.println("One Child is always selected");
525cdf0e10cSrcweir                     res &= true;
526cdf0e10cSrcweir                 } else {
527cdf0e10cSrcweir                     res &= (selCount > newSelCount);
528cdf0e10cSrcweir                 }
529cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
530cdf0e10cSrcweir                 log.println("Unexpected exception");
531cdf0e10cSrcweir                 e.printStackTrace(log);
532cdf0e10cSrcweir                 res = false;
533cdf0e10cSrcweir             }
534cdf0e10cSrcweir         }
535cdf0e10cSrcweir 
536cdf0e10cSrcweir         tRes.tested("deselectAccessibleChild()", res);
537cdf0e10cSrcweir     }
538cdf0e10cSrcweir 
chkSelectable(Object Testcase)539cdf0e10cSrcweir     protected static int chkSelectable(Object Testcase) {
540cdf0e10cSrcweir         int ret = 0;
541cdf0e10cSrcweir         XAccessibleContext accCon = (XAccessibleContext) UnoRuntime.queryInterface(
542cdf0e10cSrcweir                                             XAccessibleContext.class, Testcase);
543cdf0e10cSrcweir         int cc = accCon.getAccessibleChildCount();
544cdf0e10cSrcweir 
545cdf0e10cSrcweir         if (cc > 500) {
546cdf0e10cSrcweir             return cc;
547cdf0e10cSrcweir         }
548cdf0e10cSrcweir 
549cdf0e10cSrcweir         for (int i = 0; i < cc; i++) {
550cdf0e10cSrcweir             try {
551cdf0e10cSrcweir                 if (accCon.getAccessibleChild(i).getAccessibleContext()
552cdf0e10cSrcweir                           .getAccessibleStateSet()
553cdf0e10cSrcweir                           .contains(com.sun.star.accessibility.AccessibleStateType.SELECTABLE)) {
554cdf0e10cSrcweir                     ret = ret + 1;
555cdf0e10cSrcweir                     System.out.println("Child " + i + " is selectable");
556cdf0e10cSrcweir                 }
557cdf0e10cSrcweir             } catch (com.sun.star.lang.IndexOutOfBoundsException iab) {
558cdf0e10cSrcweir             }
559cdf0e10cSrcweir         }
560cdf0e10cSrcweir 
561cdf0e10cSrcweir         return ret;
562cdf0e10cSrcweir     }
563cdf0e10cSrcweir 
isSelectable(Object Testcase, int index)564cdf0e10cSrcweir     protected static boolean isSelectable(Object Testcase, int index) {
565cdf0e10cSrcweir         XAccessibleContext accCon = (XAccessibleContext) UnoRuntime.queryInterface(
566cdf0e10cSrcweir                                             XAccessibleContext.class, Testcase);
567cdf0e10cSrcweir         boolean res = false;
568cdf0e10cSrcweir 
569cdf0e10cSrcweir         try {
570cdf0e10cSrcweir             if (accCon.getAccessibleChild(index).getAccessibleContext()
571cdf0e10cSrcweir                       .getAccessibleStateSet()
572cdf0e10cSrcweir                       .contains(com.sun.star.accessibility.AccessibleStateType.SELECTABLE)) {
573cdf0e10cSrcweir                 res = true;
574cdf0e10cSrcweir             }
575cdf0e10cSrcweir 
576cdf0e10cSrcweir             //selecting menuitems or the separator will lead to closing the menu
577cdf0e10cSrcweir             if ((accCon.getAccessibleChild(index).getAccessibleContext()
578cdf0e10cSrcweir                        .getAccessibleRole() == AccessibleRole.MENU_ITEM) ||
579cdf0e10cSrcweir                     (accCon.getAccessibleChild(index).getAccessibleContext()
580cdf0e10cSrcweir                            .getAccessibleRole() == AccessibleRole.SEPARATOR)) {
581cdf0e10cSrcweir                 res = false;
582cdf0e10cSrcweir             }
583cdf0e10cSrcweir         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
584cdf0e10cSrcweir             System.out.println("Exception while checking for selectability");
585cdf0e10cSrcweir         }
586cdf0e10cSrcweir 
587cdf0e10cSrcweir         return res;
588cdf0e10cSrcweir     }
589cdf0e10cSrcweir 
shortWait()590cdf0e10cSrcweir     private void shortWait() {
591cdf0e10cSrcweir         try {
592cdf0e10cSrcweir             Thread.sleep(500);
593cdf0e10cSrcweir         } catch (InterruptedException ex) {
594cdf0e10cSrcweir         }
595cdf0e10cSrcweir     }
596*e6b649b5SPedro Giffuni }
597