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