/************************************************************************* * * 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 ifc.sheet; import lib.MultiMethodTest; import com.sun.star.sheet.CellDeleteMode; import com.sun.star.sheet.CellInsertMode; import com.sun.star.sheet.XCellRangeAddressable; import com.sun.star.sheet.XCellRangeMovement; import com.sun.star.sheet.XSpreadsheet; import com.sun.star.table.CellAddress; import com.sun.star.table.CellRangeAddress; import com.sun.star.table.XColumnRowRange; import com.sun.star.table.XTableRows; import com.sun.star.uno.UnoRuntime; /** * Testing com.sun.star.sheet.XCellRangeMovement * interface methods : *

* Test object must implements interfaces XCellRangeAddressable * and XSpreadsheet also.

* @see com.sun.star.sheet.XCellRangeMovement * @see com.sun.star.sheet.XSpreadsheet * @see com.sun.star.sheet.XCellRangeAddressable */ public class _XCellRangeMovement extends MultiMethodTest { public XCellRangeMovement oObj = null; /** * Test sets specific values to cells in the range, copies this cell range * to another position in document and checks cell's values in new position.

* Has OK status if cell's values in source range are equal to * cell's values in destination range and no exceptions were thrown.

*/ public void _copyRange(){ log.println("Prepare cells before test methods."); XSpreadsheet oSheet = (XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, oObj); try { oSheet.getCellByPosition(1,1).setValue(100); oSheet.getCellByPosition(1,2).setValue(200); oSheet.getCellByPosition(2,1).setValue(300); oSheet.getCellByPosition(2,2).setValue(400); } catch (com.sun.star.lang.IndexOutOfBoundsException e) { e.printStackTrace(log); tRes.tested("copyRange()", false); } XCellRangeAddressable oAddr = (XCellRangeAddressable) UnoRuntime.queryInterface (XCellRangeAddressable.class, oObj); short iSheet = oAddr.getRangeAddress().Sheet; CellAddress sDest; CellRangeAddress sSrc; sSrc = new CellRangeAddress(iSheet, 1, 1, 2, 2); sDest = new CellAddress(iSheet, 1, 10); boolean result = true; boolean loc_result = true; oObj.copyRange(sDest, sSrc); try { loc_result = (oSheet.getCellByPosition(1, 10).getValue() == 100); loc_result &= (oSheet.getCellByPosition(1, 11).getValue() == 200); loc_result &= (oSheet.getCellByPosition(2, 10).getValue() == 300); loc_result &= (oSheet.getCellByPosition(2, 11).getValue() == 400); } catch (com.sun.star.lang.IndexOutOfBoundsException e) { e.printStackTrace(log); tRes.tested("copyRange()", false); } result &= loc_result; tRes.tested("copyRange()", result); } /** * Test sets specific values to cells in the two contiguous rows, inserts * new empty row between them and checks value in * one cell of the inserted row.

* Has OK status if value of cell in the inserted row is zero * and no exceptions were thrown.

*/ public void _insertCells(){ boolean result = false; XSpreadsheet oSheet = (XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, oObj); XCellRangeAddressable oAddr = (XCellRangeAddressable) UnoRuntime.queryInterface (XCellRangeAddressable.class, oObj); short iSheet = oAddr.getRangeAddress().Sheet; try { oSheet.getCellByPosition(0,20).setValue(100); oSheet.getCellByPosition(1,20).setValue(100); oSheet.getCellByPosition(2,20).setValue(100); oSheet.getCellByPosition(3,20).setValue(100); oSheet.getCellByPosition(0,21).setValue(200); oSheet.getCellByPosition(1,21).setValue(200); oSheet.getCellByPosition(2,21).setValue(200); oSheet.getCellByPosition(3,21).setValue(200); // catch some sleight of hand threads if (oSheet.getCellByPosition(1,21).getValue() == 200){ //log.println("Rows closed."); } else{ log.println("Cells were already inserted. "+ "Delete old cells now"); XColumnRowRange oColumnRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, oSheet); XTableRows oRows = (XTableRows) oColumnRowRange.getRows(); oRows.removeByIndex(21,1); } CellRangeAddress sSrc = new CellRangeAddress(iSheet, 0, 21, 5, 21); oObj.insertCells (sSrc, CellInsertMode.DOWN) ; // check the result double res = oSheet.getCellByPosition(1, 21).getValue(); if (res == 0.0) { result = true; } } catch (com.sun.star.lang.IndexOutOfBoundsException e) { e.printStackTrace(log); result = false; } tRes.tested("insertCells()", result); } /** * Test sets specific values to cells in the range, moves this cell range * to another position in document and checks cell's values in new position. *

Has OK status if sum of values in source range is equal to sum * of values in destination range and no exceptions were thrown.

*/ public void _moveRange(){ boolean result = false; XSpreadsheet oSheet = (XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, oObj); XCellRangeAddressable oAddr = (XCellRangeAddressable) UnoRuntime.queryInterface (XCellRangeAddressable.class, oObj); short iSheet = oAddr.getRangeAddress().Sheet; //prepare source range try { oSheet.getCellByPosition(4,0).setValue(111); oSheet.getCellByPosition(4,1).setValue(222); CellRangeAddress sSrc = new CellRangeAddress(iSheet, 4, 0, 4, 1); CellAddress sDest = new CellAddress(iSheet, 4, 4); oObj.moveRange(sDest, sSrc); double cntA = 0; double cntB = 0; cntA = oSheet.getCellByPosition(4, 4).getValue(); cntB = oSheet.getCellByPosition(4, 5).getValue(); if (cntA + cntB == 333.0){ result = true; } //clean up oSheet.getCellByPosition(4,4).setValue(0); oSheet.getCellByPosition(4,5).setValue(0); } catch (com.sun.star.lang.IndexOutOfBoundsException e) { e.printStackTrace(log); result = false; } tRes.tested("moveRange()", result); } /** * Test sets specific values to cells in the range, deletes this cell range * from document and checks values of cells in position * of the deleted range. *

Has OK status if sum of cell values in position of the deleted * range is equal to zero and no exceptions were thrown.

*/ public void _removeRange(){ boolean result = false; XSpreadsheet oSheet = (XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, oObj); XCellRangeAddressable oAddr = (XCellRangeAddressable) UnoRuntime.queryInterface (XCellRangeAddressable.class, oObj); short iSheet = oAddr.getRangeAddress().Sheet; try { //prepare source range oSheet.getCellByPosition(5, 0).setValue(333); oSheet.getCellByPosition(5, 1).setValue(444); CellRangeAddress sSrc = new CellRangeAddress(iSheet, 5, 0, 5, 1); oObj.removeRange(sSrc, CellDeleteMode.UP); double cntA = 0; double cntB = 0; cntA = oSheet.getCellByPosition(5, 0).getValue(); cntB = oSheet.getCellByPosition(5, 1).getValue(); if (cntA + cntB == 0.0){ result = true; } //clean up oSheet.getCellByPosition(5, 0).setValue(0); oSheet.getCellByPosition(5, 1).setValue(0); } catch (com.sun.star.lang.IndexOutOfBoundsException e) { e.printStackTrace(log); result = false; } tRes.tested("removeRange()", result); } } // EOC _XCellRangeMovement