/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ package complex.calcPreview; // import complexlib.ComplexTestCase; import com.sun.star.awt.XWindow; import com.sun.star.container.XIndexAccess; import com.sun.star.frame.XController; import com.sun.star.frame.XDispatch; import com.sun.star.frame.XDispatchProvider; import com.sun.star.frame.XModel; // import com.sun.star.lang.XComponent; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.sheet.XSpreadsheet; // import com.sun.star.sheet.XSpreadsheetDocument; import com.sun.star.sheet.XSpreadsheets; import com.sun.star.table.XCell; // import com.sun.star.uno.Any; import com.sun.star.uno.AnyConverter; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XInterface; import com.sun.star.util.URL; import com.sun.star.util.XURLTransformer; import com.sun.star.accessibility.AccessibleRole; import com.sun.star.accessibility.XAccessible; import com.sun.star.accessibility.XAccessibleText; import com.sun.star.accessibility.XAccessibleValue; import com.sun.star.accessibility.XAccessibleComponent; import com.sun.star.accessibility.XAccessibleContext; import util.AccessibilityTools; import util.SOfficeFactory; import util.utils; import com.sun.star.beans.XPropertySet; // import com.sun.star.beans.XPropertySetInfo; import com.sun.star.container.XNameAccess; import com.sun.star.lang.XComponent; import com.sun.star.sheet.XHeaderFooterContent; import com.sun.star.sheet.XSpreadsheetDocument; import com.sun.star.style.XStyle; import com.sun.star.style.XStyleFamiliesSupplier; import com.sun.star.text.XText; // import com.sun.star.drawing.XDrawPageSupplier; // import com.sun.star.drawing.XDrawPage; // import com.sun.star.drawing.XShape; // import com.sun.star.drawing.XShapes; // import com.sun.star.beans.Property; // import com.sun.star.lang.XServiceInfo; // import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.openoffice.test.OfficeConnection; import static org.junit.Assert.*; /** * A complex test for the preview of Calc documents. This complex test * needs interaction from the user: documents have to be resized and moved. */ public class ViewForwarder { /** The MultiServiceFactory **/ private XMultiServiceFactory mXMSF = null; /** Get all test methods. * @return The test methods. */ // public String[] getTestMethodNames() { // return new String[]{"checkPositiveViewForwarder", // "checkNegativeViewForwarder", // "checkPreviewHeaderCells", // "checkPreviewShape" // }; // } /** * Get a MultiServiceFactory from the Office before the test. */ @Before public void before() { mXMSF = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager()); // SOfficeFactory SOF = SOfficeFactory.getFactory(mXMSF); // param = new TestParameters(); // param.put("ServiceFactory", xMsf); // mXMSF = (XMultiServiceFactory)param.getMSF(); } /** Create a spreadsheet document, insert some text, header and footer. * Let the user resize the document and check the contents. */ @Test public void checkPositiveViewForwarder() { SOfficeFactory SOF = SOfficeFactory.getFactory( mXMSF ); XSpreadsheetDocument xSpreadsheetDoc = null; try { System.out.println("Creating a spreadsheet document"); xSpreadsheetDoc = SOF.createCalcDoc(null); } catch (com.sun.star.uno.Exception e) { fail(e.getMessage()); return; } XInterface oObj = null; // inserting some content to have non-empty page preview XCell xCell = null; try { XSpreadsheets oSheets = xSpreadsheetDoc.getSheets() ; XIndexAccess oIndexSheets = UnoRuntime.queryInterface(XIndexAccess.class, oSheets); Object o = oIndexSheets.getByIndex(0); XSpreadsheet oSheet = (XSpreadsheet)AnyConverter.toObject( new com.sun.star.uno.Type(XSpreadsheet.class), o); xCell = oSheet.getCellByPosition(0, 0) ; xCell.setFormula("ScAccessiblePageHeader"); xCell = oSheet.getCellByPosition(0, 1) ; xCell.setFormula("Cell 1"); xCell = oSheet.getCellByPosition(0, 2) ; xCell.setFormula("Cell 2"); } catch(com.sun.star.lang.IllegalArgumentException e) { System.out.println("Exception ceating relation :"); fail(e.getMessage()); } catch(com.sun.star.lang.WrappedTargetException e) { System.out.println("Exception ceating relation :"); fail(e.getMessage()); } catch(com.sun.star.lang.IndexOutOfBoundsException e) { System.out.println("Exception ceating relation :"); fail(e.getMessage()); } XModel aModel = UnoRuntime.queryInterface(XModel.class, xSpreadsheetDoc); XController xController = aModel.getCurrentController(); // get page styles XStyleFamiliesSupplier StyleFam = UnoRuntime.queryInterface( XStyleFamiliesSupplier.class, xSpreadsheetDoc ); XNameAccess StyleFamNames = StyleFam.getStyleFamilies(); XStyle StdStyle = null; try{ Object o = StyleFamNames.getByName("PageStyles"); XNameAccess PageStyles = (XNameAccess)AnyConverter.toObject( new com.sun.star.uno.Type(XNameAccess.class), o); o = PageStyles.getByName("Default"); StdStyle = (XStyle)AnyConverter.toObject( new com.sun.star.uno.Type(XStyle.class), o); } catch(com.sun.star.lang.IllegalArgumentException e) { fail(e.getMessage()); } catch(com.sun.star.lang.WrappedTargetException e){ fail(e.getMessage()); return; } catch(com.sun.star.container.NoSuchElementException e){ fail(e.getMessage()); return; } //get the property-set final XPropertySet PropSet = UnoRuntime.queryInterface(XPropertySet.class, StdStyle); XHeaderFooterContent RPHFC = null; // get the header try { Object o = PropSet.getPropertyValue("RightPageHeaderContent"); RPHFC = (XHeaderFooterContent)AnyConverter.toObject( new com.sun.star.uno.Type(XHeaderFooterContent.class), o); } catch(com.sun.star.lang.IllegalArgumentException e) { fail(e.getMessage()); } catch(com.sun.star.lang.WrappedTargetException e){ fail(e.getMessage()); return; } catch(com.sun.star.beans.UnknownPropertyException e){ fail(e.getMessage()); return; } // insert text into header XText center = RPHFC.getCenterText(); center.setString("First line \n\r Second line \n\r third line "); try { PropSet.setPropertyValue("RightPageHeaderContent",RPHFC); } catch (com.sun.star.beans.UnknownPropertyException e) { } catch (com.sun.star.beans.PropertyVetoException e) { } catch (com.sun.star.lang.IllegalArgumentException e) { } catch (com.sun.star.lang.WrappedTargetException e) {} // get footer RPHFC = null; try { Object o = PropSet.getPropertyValue("RightPageHeaderContent"); RPHFC = (XHeaderFooterContent)AnyConverter.toObject( new com.sun.star.uno.Type(XHeaderFooterContent.class), o); } catch(com.sun.star.lang.IllegalArgumentException e) { fail(e.getMessage()); } catch(com.sun.star.lang.WrappedTargetException e){ fail(e.getMessage()); return; } catch(com.sun.star.beans.UnknownPropertyException e){ fail(e.getMessage()); return; } // insert text into footer center = RPHFC.getCenterText(); center.setString("Third last line\n\r Second last line\n\r last line"); try { PropSet.setPropertyValue("RightPageFooterContent",RPHFC); } catch (com.sun.star.beans.UnknownPropertyException e) { } catch (com.sun.star.beans.PropertyVetoException e) { } catch (com.sun.star.lang.IllegalArgumentException e) { } catch (com.sun.star.lang.WrappedTargetException e) {} // switching to 'Page Preview' mode try { XDispatchProvider xDispProv = UnoRuntime.queryInterface(XDispatchProvider.class, xController); XURLTransformer xParser = UnoRuntime.queryInterface(XURLTransformer.class, mXMSF.createInstance("com.sun.star.util.URLTransformer")); // Because it's an in/out parameter we must use an // array of URL objects. URL[] aParseURL = new URL[1]; aParseURL[0] = new URL(); aParseURL[0].Complete = ".uno:PrintPreview"; xParser.parseStrict(aParseURL); URL aURL = aParseURL[0]; XDispatch xDispatcher = xDispProv.queryDispatch(aURL, "", 0); if(xDispatcher != null) { xDispatcher.dispatch( aURL, null ); } } catch (com.sun.star.uno.Exception e) { fail("Couldn't change mode"); return; } try { Thread.sleep(500); } catch (InterruptedException ex) {} System.out.println("Press any key after resizing "); try{ byte[]b = new byte[16]; System.in.read(b); } catch (Exception e) { e.printStackTrace(); } // get the accessible content AccessibilityTools at = new AccessibilityTools(); XWindow xWindow = at.getCurrentWindow(mXMSF, aModel); XAccessible xRoot = at.getAccessibleObject(xWindow); XAccessible parent = null; try { parent = at.getAccessibleObjectForRole (xRoot, AccessibleRole.HEADER, "").getAccessibleChild(0); oObj = parent.getAccessibleContext().getAccessibleChild(0); } catch (com.sun.star.lang.IndexOutOfBoundsException iabe) { fail(iabe.getMessage()); return; } System.out.println("ImplementationName " + utils.getImplName(oObj)); XAccessibleComponent accPC = UnoRuntime.queryInterface(XAccessibleComponent.class, parent); System.out.println("Parent-BoundsX= "+accPC.getBounds().X); System.out.println("Parent-BoundsY= "+accPC.getBounds().Y); System.out.println("Parent-BoundsWidth= "+accPC.getBounds().Width); System.out.println("Parent-BoundsHeight= "+accPC.getBounds().Height); XAccessibleComponent accPPC = UnoRuntime.queryInterface(XAccessibleComponent.class, parent.getAccessibleContext().getAccessibleParent()); System.out.println("P-Parent-BoundsX= "+accPPC.getBounds().X); System.out.println("P-Parent-BoundsY= "+accPPC.getBounds().Y); System.out.println("P-Parent-BoundsWidth= "+accPPC.getBounds().Width); System.out.println("P-Parent-BoundsHeight= "+accPPC.getBounds().Height); try { Thread.sleep(500); } catch (InterruptedException ex) {} System.out.println("Press any key when the second line is on top"); try{ byte[]b = new byte[16]; System.in.read(b); } catch (Exception e) { e.printStackTrace(); } try { System.out.println("ChildCount: "+ parent.getAccessibleContext().getAccessibleChildCount()); System.out.println("Getting child 0 again"); oObj = parent.getAccessibleContext().getAccessibleChild(0); } catch (com.sun.star.lang.IndexOutOfBoundsException iabe) { fail(iabe.getMessage()); return; } XAccessibleText accT = UnoRuntime.queryInterface(XAccessibleText.class, oObj); System.out.println("Getting the text: "+accT.getText()); XAccessibleComponent accC = UnoRuntime.queryInterface(XAccessibleComponent.class, oObj); System.out.println("BoundsX= "+accC.getBounds().X); System.out.println("BoundsY= "+accC.getBounds().Y); System.out.println("BoundsWidth= "+accC.getBounds().Width); System.out.println("BoundsHeight= "+accC.getBounds().Height); accPC = UnoRuntime.queryInterface(XAccessibleComponent.class, parent); System.out.println("Parent-BoundsX= "+accPC.getBounds().X); System.out.println("Parent-BoundsY= "+accPC.getBounds().Y); System.out.println("Parent-BoundsWidth= "+accPC.getBounds().Width); System.out.println("Parent-BoundsHeight= "+accPC.getBounds().Height); accPPC = UnoRuntime.queryInterface(XAccessibleComponent.class, parent.getAccessibleContext().getAccessibleParent()); System.out.println("P-Parent-BoundsX= "+accPPC.getBounds().X); System.out.println("P-Parent-BoundsY= "+accPPC.getBounds().Y); System.out.println("P-Parent-BoundsWidth= "+accPPC.getBounds().Width); System.out.println("P-Parent-BoundsHeight= "+accPPC.getBounds().Height); System.out.println("Press any key when the footer is visible."); try{ byte[]b = new byte[16]; System.in.read(b); } catch (Exception e) { e.printStackTrace(); } try { parent = at.getAccessibleObjectForRole (xRoot, AccessibleRole.FOOTER, "").getAccessibleChild(0); } catch (com.sun.star.lang.IndexOutOfBoundsException iabe) { fail(iabe.getMessage()); return; } accPC = UnoRuntime.queryInterface(XAccessibleComponent.class, parent); try { System.out.println("ChildCount: "+ parent.getAccessibleContext().getAccessibleChildCount()); System.out.println("Getting child 0 again"); oObj = parent.getAccessibleContext().getAccessibleChild(0); } catch (com.sun.star.lang.IndexOutOfBoundsException iabe) { fail(iabe.getMessage()); return; } accT = UnoRuntime.queryInterface(XAccessibleText.class, oObj); System.out.println("Getting the text: "+accT.getText()); accC = UnoRuntime.queryInterface(XAccessibleComponent.class, oObj); System.out.println("BoundsX= "+accC.getBounds().X); System.out.println("BoundsY= "+accC.getBounds().Y); System.out.println("BoundsWidth= "+accC.getBounds().Width); System.out.println("BoundsHeight= "+accC.getBounds().Height); accPC = UnoRuntime.queryInterface(XAccessibleComponent.class, parent); System.out.println("Parent-BoundsX= "+accPC.getBounds().X); System.out.println("Parent-BoundsY= "+accPC.getBounds().Y); System.out.println("Parent-BoundsWidth= "+accPC.getBounds().Width); System.out.println("Parent-BoundsHeight= "+accPC.getBounds().Height); accPPC = UnoRuntime.queryInterface(XAccessibleComponent.class, parent.getAccessibleContext().getAccessibleParent()); System.out.println("P-Parent-BoundsX= "+accPPC.getBounds().X); System.out.println("P-Parent-BoundsY= "+accPPC.getBounds().Y); System.out.println("P-Parent-BoundsWidth= "+accPPC.getBounds().Width); System.out.println("P-Parent-BoundsHeight= "+accPPC.getBounds().Height); System.out.println("Press any key when the page content is on top"); try{ byte[]b = new byte[16]; System.in.read(b); } catch (Exception e) { e.printStackTrace(); } try { parent = at.getAccessibleObjectForRole (xRoot, AccessibleRole.DOCUMENT, "").getAccessibleChild(0); } catch (com.sun.star.lang.IndexOutOfBoundsException iabe) { fail(iabe.getMessage()); return; } System.out.println("PARENT: " + parent.getAccessibleContext().getAccessibleName()); accPC = UnoRuntime.queryInterface(XAccessibleComponent.class, parent); int cCount = 0; try { cCount = parent.getAccessibleContext().getAccessibleChildCount(); System.out.println("ChildCount: "+cCount); System.out.println("Getting child 0 again"); oObj = parent.getAccessibleContext().getAccessibleChild(0); } catch (com.sun.star.lang.IndexOutOfBoundsException iabe) { fail(iabe.getMessage()); return; } for (int i=0; i