1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 package mod._toolkit; 28 29 import com.sun.star.accessibility.AccessibleRole; 30 import com.sun.star.accessibility.XAccessible; 31 import com.sun.star.accessibility.XAccessibleAction; 32 import com.sun.star.accessibility.XAccessibleContext; 33 import com.sun.star.accessibility.XAccessibleText; 34 import com.sun.star.awt.XExtendedToolkit; 35 import com.sun.star.awt.XWindow; 36 import com.sun.star.lang.XMultiServiceFactory; 37 import com.sun.star.text.XTextDocument; 38 import com.sun.star.uno.UnoRuntime; 39 import com.sun.star.uno.XInterface; 40 41 import java.io.PrintWriter; 42 43 import lib.StatusException; 44 import lib.TestCase; 45 import lib.TestEnvironment; 46 import lib.TestParameters; 47 48 import util.AccessibilityTools; 49 import util.SOfficeFactory; 50 import util.utils; 51 52 53 /** 54 * Test for object which is represented by accessible component 55 * of a menu item in main menu of a document. <p> 56 * 57 * Object implements the following interfaces : 58 * <ul> 59 * <li> <code>::com::sun::star::accessibility::XAccessibleExtendedComponent</code></li> 60 * <li> <code>::com::sun::star::accessibility::XAccessibleEventBroadcaster</code></li> 61 * <li> <code>::com::sun::star::accessibility::XAccessibleComponent</code></li> 62 * <li> <code>::com::sun::star::accessibility::XAccessibleValue</code></li> 63 * <li> <code>::com::sun::star::accessibility::XAccessibleAction</code></li> 64 * <li> <code>::com::sun::star::accessibility::XAccessibleContext</code></li> 65 * <li> <code>::com::sun::star::accessibility::XAccessibleText</code></li> 66 * </ul> <p> 67 * 68 * @see com.sun.star.accessibility.XAccessibleExtendedComponent 69 * @see com.sun.star.accessibility.XAccessibleEventBroadcaster 70 * @see com.sun.star.accessibility.XAccessibleComponent 71 * @see com.sun.star.accessibility.XAccessibleValue 72 * @see com.sun.star.accessibility.XAccessibleAction 73 * @see com.sun.star.accessibility.XAccessibleContext 74 * @see com.sun.star.accessibility.XAccessibleText 75 * @see ifc.accessibility._XAccessibleExtendedComponent 76 * @see ifc.accessibility._XAccessibleEventBroadcaster 77 * @see ifc.accessibility._XAccessibleComponent 78 * @see ifc.accessibility._XAccessibleValue 79 * @see ifc.accessibility._XAccessibleAction 80 * @see ifc.accessibility._XAccessibleContext 81 * @see ifc.accessibility._XAccessibleText 82 */ 83 public class AccessibleMenuItem extends TestCase { 84 private static XTextDocument xTextDoc = null; 85 private static XAccessibleAction action = null; 86 private static XMultiServiceFactory msf = null; 87 88 /** 89 * Finds first accessible component with role <code>MENUITEM</code> 90 * walking through the accessible component tree of a document. 91 */ 92 protected TestEnvironment createTestEnvironment(TestParameters Param, 93 PrintWriter log) { 94 XInterface oObj = null; 95 96 try { 97 oObj = (XInterface) msf.createInstance("com.sun.star.awt.Toolkit"); 98 } catch (com.sun.star.uno.Exception e) { 99 log.println("Couldn't get toolkit"); 100 e.printStackTrace(log); 101 throw new StatusException("Couldn't get toolkit", e); 102 } 103 104 XExtendedToolkit tk = (XExtendedToolkit) UnoRuntime.queryInterface( 105 XExtendedToolkit.class, oObj); 106 107 shortWait(); 108 109 AccessibilityTools at = new AccessibilityTools(); 110 111 Object atw = tk.getActiveTopWindow(); 112 113 XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, 114 atw); 115 116 XAccessible xRoot = at.getAccessibleObject(xWindow); 117 118 at.printAccessibleTree(log, xRoot, Param.getBool(util.PropertyName.DEBUG_IS_ACTIVE)); 119 XAccessibleContext MenuBar = at.getAccessibleObjectForRole(xRoot, 120 AccessibleRole.MENU_BAR); 121 122 try { 123 //activate Edit-Menu 124 XAccessible Menu = MenuBar.getAccessibleChild(1); 125 XAccessibleAction act = (XAccessibleAction) UnoRuntime.queryInterface( 126 XAccessibleAction.class, Menu); 127 act.doAccessibleAction(0); 128 shortWait(); 129 130 131 //get a menue-item 132 oObj = Menu.getAccessibleContext().getAccessibleChild(11); 133 } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 134 } 135 136 137 //oObj = at.getAccessibleObjectForRole(xRoot, AccessibleRole.MENUITEM); 138 log.println("ImplementationName " + utils.getImplName(oObj)); 139 140 TestEnvironment tEnv = new TestEnvironment(oObj); 141 142 final XAccessibleAction action = (XAccessibleAction) UnoRuntime.queryInterface( 143 XAccessibleAction.class, oObj); 144 145 tEnv.addObjRelation("EventProducer", 146 new ifc.accessibility._XAccessibleEventBroadcaster.EventProducer() { 147 public void fireEvent() { 148 try { 149 action.doAccessibleAction(0); 150 } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 151 } 152 } 153 }); 154 155 XAccessibleText text = (XAccessibleText) UnoRuntime.queryInterface( 156 XAccessibleText.class, oObj); 157 158 tEnv.addObjRelation("XAccessibleText.Text", text.getText()); 159 160 tEnv.addObjRelation("EditOnly", 161 "Can't change or select Text in MenuBarItem"); 162 163 tEnv.addObjRelation("Destroy", new Boolean(true)); 164 165 tEnv.addObjRelation("LimitedBounds", "yes"); 166 167 return tEnv; 168 } 169 170 /** 171 * Creates writer document. 172 */ 173 protected void initialize(TestParameters Param, PrintWriter log) { 174 try { 175 msf = (XMultiServiceFactory) Param.getMSF(); 176 177 SOfficeFactory SOF = SOfficeFactory.getFactory(msf); 178 xTextDoc = SOF.createTextDoc(null); 179 } catch (com.sun.star.uno.Exception e) { 180 throw new StatusException("Can't create document", e); 181 } 182 } 183 184 /** 185 * Disposes document. 186 */ 187 protected void cleanup(TestParameters Param, PrintWriter log) { 188 util.DesktopTools.closeDoc(xTextDoc); 189 ; 190 } 191 192 /** 193 * Sleeps for 0.5 sec. to allow StarOffice to react on <code> 194 * reset</code> call. 195 */ 196 private void shortWait() { 197 try { 198 Thread.sleep(500); 199 } catch (InterruptedException e) { 200 log.println("While waiting :" + e); 201 } 202 } 203 }