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 mod._sw; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import java.io.PrintWriter; 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski import lib.Status; 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.WriterTools; 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.awt.XWindow; 39*b1cdbd2cSJim Jagielski import com.sun.star.frame.XController; 40*b1cdbd2cSJim Jagielski import com.sun.star.frame.XDispatch; 41*b1cdbd2cSJim Jagielski import com.sun.star.frame.XDispatchProvider; 42*b1cdbd2cSJim Jagielski import com.sun.star.frame.XModel; 43*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 44*b1cdbd2cSJim Jagielski import com.sun.star.text.ControlCharacter; 45*b1cdbd2cSJim Jagielski import com.sun.star.text.XText; 46*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextCursor; 47*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextDocument; 48*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 49*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface; 50*b1cdbd2cSJim Jagielski import com.sun.star.util.URL; 51*b1cdbd2cSJim Jagielski import com.sun.star.util.XURLTransformer; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski public class SwAccessibleDocumentPageView extends TestCase { 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski XTextDocument xTextDoc = null; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski /** 58*b1cdbd2cSJim Jagielski * Called to create an instance of <code>TestEnvironment</code> 59*b1cdbd2cSJim Jagielski * with an object to test and related objects. 60*b1cdbd2cSJim Jagielski * Switchs the document to Print Preview mode. 61*b1cdbd2cSJim Jagielski * Obtains accissible object for the document page view. 62*b1cdbd2cSJim Jagielski * 63*b1cdbd2cSJim Jagielski * @param Param test parameters 64*b1cdbd2cSJim Jagielski * @param log writer to log information while testing 65*b1cdbd2cSJim Jagielski * 66*b1cdbd2cSJim Jagielski * @see TestEnvironment 67*b1cdbd2cSJim Jagielski * @see #getTestEnvironment 68*b1cdbd2cSJim Jagielski */ createTestEnvironment( TestParameters Param, PrintWriter log)69*b1cdbd2cSJim Jagielski protected TestEnvironment createTestEnvironment( 70*b1cdbd2cSJim Jagielski TestParameters Param, PrintWriter log) { 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski XInterface oObj = null; 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski XText oText = xTextDoc.getText(); 75*b1cdbd2cSJim Jagielski XTextCursor oCursor = oText.createTextCursor(); 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski log.println( "inserting some lines" ); 78*b1cdbd2cSJim Jagielski try { 79*b1cdbd2cSJim Jagielski for (int i=0; i<25; i++){ 80*b1cdbd2cSJim Jagielski oText.insertString( oCursor,"Paragraph Number: " + i, false); 81*b1cdbd2cSJim Jagielski oText.insertString( oCursor, 82*b1cdbd2cSJim Jagielski " The quick brown fox jumps over the lazy Dog: SwAccessibleDocumentPageView", 83*b1cdbd2cSJim Jagielski false); 84*b1cdbd2cSJim Jagielski oText.insertControlCharacter( 85*b1cdbd2cSJim Jagielski oCursor, ControlCharacter.PARAGRAPH_BREAK, false ); 86*b1cdbd2cSJim Jagielski oText.insertString( oCursor, 87*b1cdbd2cSJim Jagielski "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG: SwAccessibleDocumentPageView", 88*b1cdbd2cSJim Jagielski false); 89*b1cdbd2cSJim Jagielski oText.insertControlCharacter(oCursor, 90*b1cdbd2cSJim Jagielski ControlCharacter.PARAGRAPH_BREAK, false ); 91*b1cdbd2cSJim Jagielski oText.insertControlCharacter( 92*b1cdbd2cSJim Jagielski oCursor, ControlCharacter.LINE_BREAK, false ); 93*b1cdbd2cSJim Jagielski } 94*b1cdbd2cSJim Jagielski } catch ( com.sun.star.lang.IllegalArgumentException e ){ 95*b1cdbd2cSJim Jagielski e.printStackTrace(log); 96*b1cdbd2cSJim Jagielski throw new StatusException( "Couldn't insert lines", e ); 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski XController xController = xTextDoc.getCurrentController(); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski XModel aModel = (XModel) 102*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XModel.class, xTextDoc); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski //switch to 'Print Preview' mode 105*b1cdbd2cSJim Jagielski try { 106*b1cdbd2cSJim Jagielski XDispatchProvider xDispProv = (XDispatchProvider) 107*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XDispatchProvider.class, xController); 108*b1cdbd2cSJim Jagielski XURLTransformer xParser = (com.sun.star.util.XURLTransformer) 109*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XURLTransformer.class, 110*b1cdbd2cSJim Jagielski ( (XMultiServiceFactory) Param.getMSF()).createInstance("com.sun.star.util.URLTransformer")); 111*b1cdbd2cSJim Jagielski // Because it's an in/out parameter we must use an array of URL objects. 112*b1cdbd2cSJim Jagielski URL[] aParseURL = new URL[1]; 113*b1cdbd2cSJim Jagielski aParseURL[0] = new URL(); 114*b1cdbd2cSJim Jagielski aParseURL[0].Complete = ".uno:PrintPreview"; 115*b1cdbd2cSJim Jagielski xParser.parseStrict(aParseURL); 116*b1cdbd2cSJim Jagielski URL aURL = aParseURL[0]; 117*b1cdbd2cSJim Jagielski XDispatch xDispatcher = xDispProv.queryDispatch(aURL, "", 0); 118*b1cdbd2cSJim Jagielski if(xDispatcher != null) 119*b1cdbd2cSJim Jagielski xDispatcher.dispatch( aURL, null ); 120*b1cdbd2cSJim Jagielski } catch (com.sun.star.uno.Exception e) { 121*b1cdbd2cSJim Jagielski log.println("Couldn't change mode"); 122*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed("Couldn't change mode")); 123*b1cdbd2cSJim Jagielski } 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski shortWait(); 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski AccessibilityTools at = new AccessibilityTools(); 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski XWindow xWindow = at.getCurrentWindow( (XMultiServiceFactory) Param.getMSF(), aModel); 130*b1cdbd2cSJim Jagielski XAccessible xRoot = at.getAccessibleObject(xWindow); 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski at.getAccessibleObjectForRole(xRoot, AccessibleRole.DOCUMENT ); 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski oObj = AccessibilityTools.SearchedContext; 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski log.println("ImplementationName " + utils.getImplName(oObj)); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski TestEnvironment tEnv = new TestEnvironment(oObj); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski final XText the_text = oText; 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski tEnv.addObjRelation("EventProducer", 143*b1cdbd2cSJim Jagielski new ifc.accessibility._XAccessibleEventBroadcaster.EventProducer() { 144*b1cdbd2cSJim Jagielski public void fireEvent() { 145*b1cdbd2cSJim Jagielski String oldText = the_text.getString(); 146*b1cdbd2cSJim Jagielski the_text.setString("EVENT FIRED"); 147*b1cdbd2cSJim Jagielski shortWait(); 148*b1cdbd2cSJim Jagielski the_text.setString(oldText); 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski }); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski return tEnv; 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski } 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski /** 158*b1cdbd2cSJim Jagielski * Sleeps for 1 sec. to allow StarOffice to react on <code> 159*b1cdbd2cSJim Jagielski * reset</code> call. 160*b1cdbd2cSJim Jagielski */ shortWait()161*b1cdbd2cSJim Jagielski private void shortWait() { 162*b1cdbd2cSJim Jagielski try { 163*b1cdbd2cSJim Jagielski Thread.sleep(2000) ; 164*b1cdbd2cSJim Jagielski } catch (InterruptedException e) { 165*b1cdbd2cSJim Jagielski log.println("While waiting :" + e) ; 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski /** 171*b1cdbd2cSJim Jagielski * Called while disposing a <code>TestEnvironment</code>. 172*b1cdbd2cSJim Jagielski * Disposes text document. 173*b1cdbd2cSJim Jagielski * @param Param test parameters 174*b1cdbd2cSJim Jagielski * @param log writer to log information while testing 175*b1cdbd2cSJim Jagielski */ cleanup( TestParameters Param, PrintWriter log)176*b1cdbd2cSJim Jagielski protected void cleanup( TestParameters Param, PrintWriter log) { 177*b1cdbd2cSJim Jagielski log.println("dispose text document"); 178*b1cdbd2cSJim Jagielski util.DesktopTools.closeDoc(xTextDoc); 179*b1cdbd2cSJim Jagielski } 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski /** 182*b1cdbd2cSJim Jagielski * Called while the <code>TestCase</code> initialization. In the 183*b1cdbd2cSJim Jagielski * implementation does nothing. Subclasses can override to initialize 184*b1cdbd2cSJim Jagielski * objects shared among all <code>TestEnvironment</code>s. 185*b1cdbd2cSJim Jagielski * 186*b1cdbd2cSJim Jagielski * @param Param test parameters 187*b1cdbd2cSJim Jagielski * @param log writer to log information while testing 188*b1cdbd2cSJim Jagielski * 189*b1cdbd2cSJim Jagielski * @see #initializeTestCase 190*b1cdbd2cSJim Jagielski */ initialize(TestParameters Param, PrintWriter log)191*b1cdbd2cSJim Jagielski protected void initialize(TestParameters Param, PrintWriter log) { 192*b1cdbd2cSJim Jagielski log.println( "creating a text document" ); 193*b1cdbd2cSJim Jagielski xTextDoc = WriterTools.createTextDoc( (XMultiServiceFactory) Param.getMSF()); 194*b1cdbd2cSJim Jagielski } 195*b1cdbd2cSJim Jagielski } 196