/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.excel.common;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import de.rcenvironment.components.excel.common.internal.ExcelServiceOLE;
import de.rcenvironment.core.datamodel.api.DataType;
import de.rcenvironment.core.datamodel.api.TypedDatumFactory;
import de.rcenvironment.core.datamodel.testutils.TypedDatumFactoryDefaultStub;
import de.rcenvironment.core.datamodel.types.api.FloatTD;
import de.rcenvironment.core.datamodel.types.api.SmallTableTD;
/**
* Test class for ExcelFile.
*
*
* Unit test (not unit plugin/osgi test) needs jacob dll libs in java library path.
* To execute this test as a usual unit test, please add vm-argument with path to jacob dlls.
* -Djava.library.path=${workspace_loc:de.rcenvironment.libraries.custom.win32}/native
*
*
* @author Markus Kunde
* @author Oliver Seebach
*/
public class ExcelServiceOLETest {
private static final double DELTA = (1/10);
private static final int S20_RESULT = 20;
private static final int S15_RESULT = 15;
private static final int S30_RESULT = 30;
private static final String EXTERNAL_TEST_EXCELFILE = "externalFiles/ExcelTester_OLE.xls";
private static final String EXTERNAL_TEMP_EXCELFILE = "externalFiles/ExcelTesterTemp.xls";
private ExcelService excelService;
private File xlFile = new File(EXTERNAL_TEMP_EXCELFILE);
private TypedDatumFactory typedDatumFactory = new TypedDatumFactoryDefaultStub();
/**
* SetUp method.
* @throws Exception errors
*
*/
@Before
public void setUp() throws Exception {
FileUtils.copyFile(new File(EXTERNAL_TEST_EXCELFILE), new File(EXTERNAL_TEMP_EXCELFILE));
excelService = new ExcelServiceOLE(typedDatumFactory);
}
/**
* Deletes temp Excel file.
*
* @throws java.lang.Exception if something goes wrong
*/
@After
public void tearDown() throws Exception {
FileUtils.deleteQuietly(new File(EXTERNAL_TEMP_EXCELFILE));
}
/**
* Get macros test.
*
*/
@Test
public void testGetMacrosOLE() {
String[] macros = excelService.getMacros(xlFile);
assertEquals(1, macros.length);
assertEquals("Modul1.Makro1", macros[0]);
}
/**
* run macros test.
* @throws IOException io error
* @throws IllegalArgumentException illegal argument
* @throws InvalidFormatException invalid format
*
*/
@Test
public void testRunMacrosOLE() throws InvalidFormatException, IllegalArgumentException, IOException {
assertEquals(DataType.Empty,
excelService.getValueOfCells(xlFile, new ExcelAddress(xlFile, "Tabelle1!C8")).getTypedDatumOfCell(0, 0).getDataType());
excelService.runMacro(xlFile, "Modul1.Makro1");
assertEquals(S30_RESULT,
((FloatTD) excelService.getValueOfCells(xlFile, new ExcelAddress(xlFile, "Tabelle1!C8")).getTypedDatumOfCell(0, 0))
.getFloatValue(), DELTA);
}
/**
* recalculate formulas test.
* @throws IOException io error
* @throws IllegalArgumentException illegal argument
* @throws InvalidFormatException invalid format
*
*/
@Test
public void testRecalculateFormulasOLE() throws InvalidFormatException, IllegalArgumentException, IOException {
assertEquals(S15_RESULT,
((FloatTD) excelService.getValueOfCells(xlFile, new ExcelAddress(xlFile, "Tabelle1!A8")).getTypedDatumOfCell(0, 0))
.getFloatValue(), DELTA);
SmallTableTD values = typedDatumFactory.createSmallTable(1, 1);
values.setTypedDatumForCell(typedDatumFactory.createInteger(6), 0, 0);
excelService.setValues(xlFile, new ExcelAddress(xlFile, "Tabelle1!A1"), values);
excelService.recalculateFormulas(xlFile);
assertEquals(S20_RESULT, ((FloatTD) excelService.getValueOfCells(xlFile, new ExcelAddress(xlFile, "Tabelle1!A8"))
.getTypedDatumOfCell(0, 0)).getFloatValue(), DELTA);
}
}