/************************************************************** * * 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 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ package fvt.uno.sc.formula; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.openoffice.test.common.Testspace; import org.openoffice.test.common.Logger; import org.openoffice.test.uno.UnoApp; import testlib.uno.SCUtil; import static testlib.uno.TestUtil.*; import com.sun.star.lang.XComponent; 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.text.XText; import com.sun.star.uno.UnoRuntime; import com.sun.star.util.XModifiable; import java.util.logging.Level; public class TestFormulaDocs { @Rule public Logger log = Logger.getLogger(this); UnoApp unoApp = new UnoApp(); XComponent scComponent = null; @Before public void setUp() throws Exception { unoApp.start(); } @After public void tearDown() throws Exception { unoApp.close(); } /** * Test evaluation of formulas in a sample document * * @throws Exception */ @Test public void testFormulaDocs() throws Exception { testOneDoc( "uno/sc/fvt/FormulaTest1.ods"); } public void testOneDoc( String filename) throws Exception { // open the spreadsheet document String sample = Testspace.prepareData( filename); XSpreadsheetDocument scDoc = SCUtil.openFile( sample, unoApp); XSpreadsheet xSheet = SCUtil.getCurrentSheet( scDoc); // find the "TestID" and "TestOK" markers int nTestIdCol = -1; int nTestOkCol = -1; int nTestRowStart = -1; for( int y = 0; y < 8; ++y) { for( int x = 0; x < 8; ++x) { XCell xCell = xSheet.getCellByPosition( x, y); XText xText = (XText)UnoRuntime.queryInterface( XText.class, xCell); String name = xText.getString(); if( name.equals( "TestID")) { assertTrue( "Multiple rows with TestID marker!", nTestIdCol == -1); assertTrue( nTestRowStart == -1); nTestIdCol = x; nTestRowStart = y + 1; } else if( name.equals( "TestOK")) { assertTrue( "Multiple rows with TestOK marker!", nTestOkCol == -1); assertTrue( "TestID and TestOK marker not in same row!", nTestRowStart == y + 1); nTestOkCol = x; } } } assertTrue( "Column \"TestID\" not found!", nTestIdCol >= 0); assertTrue( "Column \"TestOK\" not found!", nTestOkCol >= 0); int nTestRowEnd = nTestRowStart + 100; // TODO: get the last row from the sheet int nTestCount = 0; int nFailCount = 0; for( int y = nTestRowStart; y < nTestRowEnd; ++y) { // get the test id XCell xCell = xSheet.getCellByPosition( nTestIdCol, y); XText xText = (XText)UnoRuntime.queryInterface( XText.class, xCell); String testId = xText.getString(); // ignore rows without test ids if( testId.length() == 0) continue; ++nTestCount; // get and check the test result xCell = xSheet.getCellByPosition( nTestOkCol, y); String testOk = ((XText)UnoRuntime.queryInterface( XText.class, xCell)).getString(); assertTrue( "Test result must be TRUE or FALSE", testOk.equals("TRUE") || testOk.equals("FALSE")); boolean bOK = testOk.equals("TRUE"); // mark evaluated test results SCUtil.setProperties( xCell, "CellBackColor", (Integer)(bOK ? 0x00FF00 : 0xFF0000)); // handle failed test cases if( !bOK) { ++nFailCount; log.log( Level.SEVERE, "\ttest \""+testId+" failed"); } } assertTrue( (""+nFailCount+" of "+nTestCount+" tests failed"), nFailCount==0); XModifiable modified = (XModifiable)UnoRuntime.queryInterface( XModifiable.class, scDoc); modified.setModified( false); SCUtil.closeFile( scDoc); } }