300 lines
11 KiB
Java
300 lines
11 KiB
Java
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
package ifc.sheet;
|
|
|
|
import lib.MultiMethodTest;
|
|
import lib.Status;
|
|
import lib.StatusException;
|
|
|
|
import com.sun.star.beans.XPropertySet;
|
|
import com.sun.star.sheet.CellFlags;
|
|
import com.sun.star.sheet.FormulaResult;
|
|
import com.sun.star.sheet.XCellRangesQuery;
|
|
import com.sun.star.sheet.XSheetCellRanges;
|
|
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.XTableColumns;
|
|
import com.sun.star.table.XTableRows;
|
|
import com.sun.star.uno.UnoRuntime;
|
|
|
|
/**
|
|
* Test the XCellRangesQuery interface.
|
|
* Needed object relations:
|
|
* <ul>
|
|
* <li>"SHEET": an XSpreadSheet object
|
|
* </li>
|
|
* <li>"XCellRangesQuery.EXPECTEDRESULTS": the expected results for the test
|
|
* methods as a String array.<br>
|
|
* @see mod._sc.ScCellCursorObj or
|
|
* @see mod._sc.ScCellObj for an example how this should look like.
|
|
* </li>
|
|
* </ul>
|
|
*/
|
|
public class _XCellRangesQuery extends MultiMethodTest {
|
|
public XCellRangesQuery oObj;
|
|
protected XSpreadsheet oSheet;
|
|
protected XTableRows oRows;
|
|
protected XTableColumns oColumns;
|
|
protected String[] mExpectedResults = null;
|
|
protected boolean bMakeEntriesAndDispose = false;
|
|
String getting = "";
|
|
String expected = "";
|
|
// provide the object with constants to fill the expected results array
|
|
public static final int QUERYCOLUMNDIFFERENCES = 0;
|
|
public static final int QUERYCONTENTCELLS = 1;
|
|
public static final int QUERYEMPTYCELLS = 2;
|
|
public static final int QUERYFORMULACELLS = 3;
|
|
public static final int QUERYINTERSECTION = 4;
|
|
public static final int QUERYROWDIFFERENCES = 5;
|
|
public static final int QUERYVISIBLECELLS = 6;
|
|
|
|
@Override
|
|
protected void before() {
|
|
oSheet = (XSpreadsheet) tEnv.getObjRelation("SHEET");
|
|
|
|
if (oSheet == null) {
|
|
log.println("Object relation oSheet is missing");
|
|
log.println("Trying to query the needed Interface");
|
|
oSheet = UnoRuntime.queryInterface(
|
|
XSpreadsheet.class, tEnv.getTestObject());
|
|
|
|
if (oSheet == null) {
|
|
throw new StatusException(Status.failed(
|
|
"Object relation oSheet is missing"));
|
|
}
|
|
}
|
|
|
|
// expected results
|
|
mExpectedResults = (String[])tEnv.getObjRelation(
|
|
"XCellRangesQuery.EXPECTEDRESULTS");
|
|
|
|
XColumnRowRange oColumnRowRange = UnoRuntime.queryInterface(
|
|
XColumnRowRange.class,
|
|
oSheet);
|
|
oRows = oColumnRowRange.getRows();
|
|
oColumns = oColumnRowRange.getColumns();
|
|
|
|
// set this in object if the interface has to make its own settings
|
|
// and the environment has to be disposed: this is necessary for objects
|
|
// that do not make entries on the sheet themselves
|
|
Object o = tEnv.getObjRelation("XCellRangesQuery.CREATEENTRIES");
|
|
if (o instanceof Boolean) {
|
|
bMakeEntriesAndDispose = ((Boolean)o).booleanValue();
|
|
}
|
|
if(bMakeEntriesAndDispose) {
|
|
oRows.removeByIndex(4, oRows.getCount() - 4);
|
|
oColumns.removeByIndex(4, oColumns.getCount() - 4);
|
|
|
|
try {
|
|
oSheet.getCellByPosition(1, 1).setValue(5);
|
|
oSheet.getCellByPosition(1, 2).setValue(15);
|
|
oSheet.getCellByPosition(2, 1).setFormula("=B2+B3");
|
|
oSheet.getCellByPosition(1, 3).setFormula("=B2+B4");
|
|
oSheet.getCellByPosition(3, 2).setFormula("");
|
|
oSheet.getCellByPosition(3, 3).setFormula("");
|
|
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
|
|
log.println("Couldn't fill cells " + e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Tested method returns each cell of each column that is different to the
|
|
* cell in a given row
|
|
*/
|
|
public void _queryColumnDifferences() {
|
|
boolean res = true;
|
|
XSheetCellRanges ranges = oObj.queryColumnDifferences(
|
|
new CellAddress((short) 0, 1, 1));
|
|
getting = ranges.getRangeAddressesAsString();
|
|
expected = mExpectedResults[QUERYCOLUMNDIFFERENCES];
|
|
|
|
if (!getting.startsWith(expected)) {
|
|
log.println("Getting: " + getting);
|
|
log.println("Should have started with: " + expected);
|
|
res = false;
|
|
}
|
|
|
|
tRes.tested("queryColumnDifferences()", res);
|
|
}
|
|
|
|
/**
|
|
* Tested method returns all cells of a given type, defined in
|
|
* CellFlags
|
|
* @see com.sun.star.sheet.CellFlags
|
|
*/
|
|
public void _queryContentCells() {
|
|
boolean res = true;
|
|
XSheetCellRanges ranges = oObj.queryContentCells(
|
|
(short) CellFlags.VALUE);
|
|
getting = ranges.getRangeAddressesAsString();
|
|
expected = mExpectedResults[QUERYCONTENTCELLS];
|
|
|
|
if (!getting.startsWith(expected)) {
|
|
log.println("Getting: " + getting);
|
|
log.println("Should have started with: " + expected);
|
|
res = false;
|
|
}
|
|
|
|
tRes.tested("queryContentCells()", res);
|
|
}
|
|
|
|
/**
|
|
* Tested method returns all empty cells of the range
|
|
*/
|
|
public void _queryEmptyCells() {
|
|
boolean res = true;
|
|
XSheetCellRanges ranges = oObj.queryEmptyCells();
|
|
getting = ranges.getRangeAddressesAsString();
|
|
expected = mExpectedResults[QUERYEMPTYCELLS];
|
|
|
|
int startIndex = 0;
|
|
int endIndex = -5;
|
|
String checkString = null;
|
|
|
|
while (endIndex != -1) {
|
|
startIndex = endIndex + 5;
|
|
endIndex = expected.indexOf(" ... ", startIndex);
|
|
if (endIndex == -1) {
|
|
checkString = expected.substring(startIndex);
|
|
}
|
|
else {
|
|
checkString = expected.substring(startIndex, endIndex);
|
|
}
|
|
res &= (getting.indexOf(checkString) > -1);
|
|
}
|
|
|
|
if (!res) {
|
|
log.println("Getting: " + getting);
|
|
log.println("Should have contained: " + expected);
|
|
}
|
|
|
|
tRes.tested("queryEmptyCells()", res);
|
|
}
|
|
|
|
/**
|
|
* Tested method returns all cells of a given type, defined in
|
|
* FormulaResult
|
|
* @see com.sun.star.sheet.FormulaResult
|
|
*/
|
|
public void _queryFormulaCells() {
|
|
boolean res = true;
|
|
XSheetCellRanges ranges = oObj.queryFormulaCells(
|
|
(short) FormulaResult.VALUE);
|
|
getting = ranges.getRangeAddressesAsString();
|
|
expected = mExpectedResults[QUERYFORMULACELLS];
|
|
|
|
if (!getting.equals(expected)) {
|
|
log.println("Getting: " + getting);
|
|
log.println("Expected: " + expected);
|
|
res = false;
|
|
}
|
|
|
|
tRes.tested("queryFormulaCells()", res);
|
|
}
|
|
|
|
public void _queryIntersection() {
|
|
boolean res = true;
|
|
XSheetCellRanges ranges = oObj.queryIntersection(
|
|
new CellRangeAddress((short) 0, 3, 3, 7, 7));
|
|
getting = ranges.getRangeAddressesAsString();
|
|
expected = mExpectedResults[QUERYINTERSECTION];
|
|
|
|
if (!getting.startsWith(expected)) {
|
|
log.println("Getting: " + getting);
|
|
log.println("Should have started with: " + expected);
|
|
res = false;
|
|
}
|
|
|
|
tRes.tested("queryIntersection()", res);
|
|
}
|
|
|
|
/**
|
|
* Tested method returns each cell of each row that is different to the
|
|
* cell in a given column
|
|
*/
|
|
public void _queryRowDifferences() {
|
|
boolean res = true;
|
|
XSheetCellRanges ranges = oObj.queryRowDifferences(
|
|
new CellAddress((short) 0, 1, 1));
|
|
getting = ranges.getRangeAddressesAsString();
|
|
expected = mExpectedResults[QUERYROWDIFFERENCES];
|
|
|
|
if (!getting.startsWith(expected)) {
|
|
log.println("Getting: " + getting);
|
|
log.println("Should have started with: " + expected);
|
|
res = false;
|
|
}
|
|
|
|
tRes.tested("queryRowDifferences()", res);
|
|
}
|
|
|
|
public void _queryVisibleCells() {
|
|
setRowVisible(false);
|
|
|
|
boolean res = true;
|
|
XSheetCellRanges ranges = oObj.queryVisibleCells();
|
|
getting = ranges.getRangeAddressesAsString();
|
|
expected = mExpectedResults[QUERYVISIBLECELLS];
|
|
|
|
if (!getting.startsWith(expected)) {
|
|
log.println("Getting: " + getting);
|
|
log.println("Should have started with: " + expected);
|
|
res = false;
|
|
}
|
|
|
|
setRowVisible(true);
|
|
tRes.tested("queryVisibleCells()", res);
|
|
}
|
|
|
|
protected void setRowVisible(boolean vis) {
|
|
try {
|
|
XPropertySet rowProp = UnoRuntime.queryInterface(
|
|
XPropertySet.class,
|
|
oRows.getByIndex(0));
|
|
rowProp.setPropertyValue("IsVisible", Boolean.valueOf(vis));
|
|
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
|
|
log.println("couldn't get Row " + e.getLocalizedMessage());
|
|
} catch (com.sun.star.lang.WrappedTargetException e) {
|
|
log.println("problems setting Property 'isVisible' " +
|
|
e.getLocalizedMessage());
|
|
} catch (com.sun.star.beans.UnknownPropertyException e) {
|
|
log.println("problems setting Property 'isVisible' " +
|
|
e.getLocalizedMessage());
|
|
} catch (com.sun.star.beans.PropertyVetoException e) {
|
|
log.println("problems setting Property 'isVisible' " +
|
|
e.getLocalizedMessage());
|
|
} catch (com.sun.star.lang.IllegalArgumentException e) {
|
|
log.println("problems setting Property 'isVisible' " +
|
|
e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Forces environment recreation.
|
|
*/
|
|
@Override
|
|
protected void after() {
|
|
if(bMakeEntriesAndDispose) {
|
|
disposeEnvironment();
|
|
}
|
|
}
|
|
}
|