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 24*b1cdbd2cSJim Jagielski package mod._sc; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import java.io.PrintWriter; 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski import lib.StatusException; 29*b1cdbd2cSJim Jagielski import lib.TestCase; 30*b1cdbd2cSJim Jagielski import lib.TestEnvironment; 31*b1cdbd2cSJim Jagielski import lib.TestParameters; 32*b1cdbd2cSJim Jagielski import util.AccessibilityTools; 33*b1cdbd2cSJim Jagielski import util.SOfficeFactory; 34*b1cdbd2cSJim Jagielski import util.utils; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.AccessibleRole; 37*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.XAccessible; 38*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.XAccessibleAction; 39*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.XAccessibleContext; 40*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.XAccessibleText; 41*b1cdbd2cSJim Jagielski import com.sun.star.awt.XExtendedToolkit; 42*b1cdbd2cSJim Jagielski import com.sun.star.awt.XWindow; 43*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 44*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 45*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 46*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 47*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski public class ScAccessibleCsvRuler extends TestCase { 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski Thread lThread = null; 52*b1cdbd2cSJim Jagielski static XAccessibleAction accAction = null; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski /** 55*b1cdbd2cSJim Jagielski * Called to create an instance of <code>TestEnvironment</code> with an 56*b1cdbd2cSJim Jagielski * object to test and related objects. Subclasses should implement this 57*b1cdbd2cSJim Jagielski * method to provide the implementation and related objects. The method is 58*b1cdbd2cSJim Jagielski * called from <code>getTestEnvironment()</code>. 59*b1cdbd2cSJim Jagielski * 60*b1cdbd2cSJim Jagielski * @param Param test parameters 61*b1cdbd2cSJim Jagielski * @param log writer to log information while testing 62*b1cdbd2cSJim Jagielski * 63*b1cdbd2cSJim Jagielski * @see TestEnvironment 64*b1cdbd2cSJim Jagielski * @see #getTestEnvironment 65*b1cdbd2cSJim Jagielski */ createTestEnvironment(TestParameters Param, PrintWriter log)66*b1cdbd2cSJim Jagielski protected TestEnvironment createTestEnvironment(TestParameters Param, 67*b1cdbd2cSJim Jagielski PrintWriter log) { 68*b1cdbd2cSJim Jagielski XInterface oObj = null; 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski shortWait(); 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski XMultiServiceFactory msf = (XMultiServiceFactory) Param.getMSF(); 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski try { 75*b1cdbd2cSJim Jagielski oObj = (XInterface) msf.createInstance("com.sun.star.awt.Toolkit"); 76*b1cdbd2cSJim Jagielski } catch (com.sun.star.uno.Exception e) { 77*b1cdbd2cSJim Jagielski log.println("Couldn't get toolkit"); 78*b1cdbd2cSJim Jagielski e.printStackTrace(log); 79*b1cdbd2cSJim Jagielski throw new StatusException("Couldn't get toolkit", e); 80*b1cdbd2cSJim Jagielski } 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski XExtendedToolkit tk = (XExtendedToolkit) UnoRuntime.queryInterface( 83*b1cdbd2cSJim Jagielski XExtendedToolkit.class, oObj); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, 86*b1cdbd2cSJim Jagielski tk.getActiveTopWindow()); 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski XAccessible xRoot = AccessibilityTools.getAccessibleObject(xWindow); 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski oObj = AccessibilityTools.getAccessibleObjectForRole(xRoot, AccessibleRole.PUSH_BUTTON, 91*b1cdbd2cSJim Jagielski "Cancel"); 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski accAction = (XAccessibleAction) UnoRuntime.queryInterface( 94*b1cdbd2cSJim Jagielski XAccessibleAction.class, oObj); 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski XAccessibleContext acc = AccessibilityTools.getAccessibleObjectForRole(xRoot, 97*b1cdbd2cSJim Jagielski AccessibleRole.RADIO_BUTTON); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski log.println("Click on: " + acc.getAccessibleName()); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski XAccessibleAction accAction2 = (XAccessibleAction) UnoRuntime.queryInterface( 102*b1cdbd2cSJim Jagielski XAccessibleAction.class, acc); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski try { 105*b1cdbd2cSJim Jagielski accAction2.doAccessibleAction(0); 106*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException iae) { 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski //util.dbg.printInterfaces(oObj); 111*b1cdbd2cSJim Jagielski AccessibilityTools.printAccessibleTree(log, xRoot); 112*b1cdbd2cSJim Jagielski oObj = AccessibilityTools.getAccessibleObjectForRole(xRoot, AccessibleRole.TEXT, 113*b1cdbd2cSJim Jagielski "Ruler", true); 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski log.println("ImplementationName " + utils.getImplName(oObj)); 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski TestEnvironment tEnv = new TestEnvironment(oObj); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski tEnv.addObjRelation("EditOnly", 120*b1cdbd2cSJim Jagielski "This method isn't supported in this dialog"); 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski XAccessibleText text = (XAccessibleText) UnoRuntime.queryInterface( 123*b1cdbd2cSJim Jagielski XAccessibleText.class, oObj); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski int lastone = 100; 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski for (int i = 0; i < 1000; i++) { 128*b1cdbd2cSJim Jagielski try { 129*b1cdbd2cSJim Jagielski text.getCharacterBounds(i); 130*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 131*b1cdbd2cSJim Jagielski lastone = i - 1; 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski break; 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski } 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski tEnv.addObjRelation("LimitedBounds", new Integer(lastone)); 138*b1cdbd2cSJim Jagielski tEnv.addObjRelation("PreviousUsed",new int[]{11,22,33,44,55,66,77,88,99}); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski return tEnv; 141*b1cdbd2cSJim Jagielski } 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski /** 144*b1cdbd2cSJim Jagielski * Called while disposing a <code>TestEnvironment</code>. 145*b1cdbd2cSJim Jagielski * Disposes calc document. 146*b1cdbd2cSJim Jagielski * @param Param test parameters 147*b1cdbd2cSJim Jagielski * @param log writer to log information while testing 148*b1cdbd2cSJim Jagielski */ cleanup( TestParameters Param, PrintWriter log)149*b1cdbd2cSJim Jagielski protected void cleanup( TestParameters Param, PrintWriter log) { 150*b1cdbd2cSJim Jagielski /* log.println( " closing Dialog " ); 151*b1cdbd2cSJim Jagielski try { 152*b1cdbd2cSJim Jagielski accAction.doAccessibleAction(0); 153*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException iae) { 154*b1cdbd2cSJim Jagielski log.println("Couldn't close dialog"); 155*b1cdbd2cSJim Jagielski } */ 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski /** 159*b1cdbd2cSJim Jagielski * Called while the <code>TestCase</code> initialization. In the 160*b1cdbd2cSJim Jagielski * implementation does nothing. Subclasses can override to initialize 161*b1cdbd2cSJim Jagielski * objects shared among all <code>TestEnvironment</code>s. 162*b1cdbd2cSJim Jagielski * 163*b1cdbd2cSJim Jagielski * @param Param test parameters 164*b1cdbd2cSJim Jagielski * @param log writer to log information while testing 165*b1cdbd2cSJim Jagielski * 166*b1cdbd2cSJim Jagielski * @see #initializeTestCase 167*b1cdbd2cSJim Jagielski */ initialize(TestParameters Param, PrintWriter log)168*b1cdbd2cSJim Jagielski protected void initialize(TestParameters Param, PrintWriter log) { 169*b1cdbd2cSJim Jagielski // get a soffice factory object 170*b1cdbd2cSJim Jagielski SOfficeFactory SOF = SOfficeFactory.getFactory( (XMultiServiceFactory)Param.getMSF()); 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski log.println("opening dialog"); 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski PropertyValue[] args = new PropertyValue[1]; 175*b1cdbd2cSJim Jagielski try { 176*b1cdbd2cSJim Jagielski args[0] = new PropertyValue(); 177*b1cdbd2cSJim Jagielski args[0].Name = "InteractionHandler"; 178*b1cdbd2cSJim Jagielski args[0].Value = ((XMultiServiceFactory)Param.getMSF()).createInstance( 179*b1cdbd2cSJim Jagielski "com.sun.star.comp.uui.UUIInteractionHandler"); 180*b1cdbd2cSJim Jagielski } catch(com.sun.star.uno.Exception e) { 181*b1cdbd2cSJim Jagielski } 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski lThread = new loadThread(SOF, args); 184*b1cdbd2cSJim Jagielski lThread.start(); 185*b1cdbd2cSJim Jagielski shortWait(); 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski /** 190*b1cdbd2cSJim Jagielski * Sleeps for 2 sec. to allow StarOffice to react on <code> 191*b1cdbd2cSJim Jagielski * reset</code> call. 192*b1cdbd2cSJim Jagielski */ shortWait()193*b1cdbd2cSJim Jagielski private void shortWait() { 194*b1cdbd2cSJim Jagielski try { 195*b1cdbd2cSJim Jagielski Thread.sleep(2000) ; 196*b1cdbd2cSJim Jagielski } catch (InterruptedException e) { 197*b1cdbd2cSJim Jagielski log.println("While waiting :" + e) ; 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski } 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski public class loadThread extends Thread { 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski private SOfficeFactory SOF = null ; 204*b1cdbd2cSJim Jagielski private PropertyValue[] args = null; 205*b1cdbd2cSJim Jagielski public XComponent xSpreadSheedDoc = null; 206*b1cdbd2cSJim Jagielski loadThread(SOfficeFactory SOF, PropertyValue[] Args)207*b1cdbd2cSJim Jagielski public loadThread(SOfficeFactory SOF, PropertyValue[] Args) { 208*b1cdbd2cSJim Jagielski this.SOF = SOF; 209*b1cdbd2cSJim Jagielski this.args = Args; 210*b1cdbd2cSJim Jagielski } 211*b1cdbd2cSJim Jagielski run()212*b1cdbd2cSJim Jagielski public void run() { 213*b1cdbd2cSJim Jagielski try { 214*b1cdbd2cSJim Jagielski String url= utils.getFullTestURL("10test.csv"); 215*b1cdbd2cSJim Jagielski log.println("loading "+url); 216*b1cdbd2cSJim Jagielski SOF.loadDocument(url,args); 217*b1cdbd2cSJim Jagielski } catch (com.sun.star.uno.Exception e) { 218*b1cdbd2cSJim Jagielski e.printStackTrace(); 219*b1cdbd2cSJim Jagielski throw new StatusException( "Couldn't create document ", e ); 220*b1cdbd2cSJim Jagielski } 221*b1cdbd2cSJim Jagielski } 222*b1cdbd2cSJim Jagielski } 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski } 225