/* | |
* ==================================================================== | |
* 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 org.apache.poi.ss.formula; | |
import java.io.IOException; | |
import java.util.HashMap; | |
import java.util.Map; | |
import junit.framework.TestCase; | |
import org.apache.poi.hssf.HSSFTestDataSamples; | |
import org.apache.poi.ss.usermodel.Cell; | |
import org.apache.poi.ss.usermodel.CellType; | |
import org.apache.poi.ss.usermodel.FormulaEvaluator; | |
import org.apache.poi.ss.usermodel.Row; | |
import org.apache.poi.ss.usermodel.Sheet; | |
import org.apache.poi.ss.usermodel.Workbook; | |
public class TestMissingWorkbook extends TestCase { | |
protected Workbook mainWorkbook; | |
protected Workbook sourceWorkbook; | |
protected final String MAIN_WORKBOOK_FILENAME; | |
protected final String SOURCE_DUMMY_WORKBOOK_FILENAME; | |
protected final String SOURCE_WORKBOOK_FILENAME; | |
public TestMissingWorkbook() { | |
this("52575_main.xls", "source_dummy.xls", "52575_source.xls"); | |
} | |
protected TestMissingWorkbook(String MAIN_WORKBOOK_FILENAME, | |
String SOURCE_DUMMY_WORKBOOK_FILENAME, String SOURCE_WORKBOOK_FILENAME) { | |
this.MAIN_WORKBOOK_FILENAME = MAIN_WORKBOOK_FILENAME; | |
this.SOURCE_DUMMY_WORKBOOK_FILENAME = SOURCE_DUMMY_WORKBOOK_FILENAME; | |
this.SOURCE_WORKBOOK_FILENAME = SOURCE_WORKBOOK_FILENAME; | |
} | |
@Override | |
protected void setUp() throws Exception { | |
mainWorkbook = HSSFTestDataSamples.openSampleWorkbook(MAIN_WORKBOOK_FILENAME); | |
sourceWorkbook = HSSFTestDataSamples.openSampleWorkbook(SOURCE_WORKBOOK_FILENAME); | |
assertNotNull(mainWorkbook); | |
assertNotNull(sourceWorkbook); | |
} | |
public void testMissingWorkbookMissing() throws IOException { | |
FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator(); | |
Sheet lSheet = mainWorkbook.getSheetAt(0); | |
Row lARow = lSheet.getRow(0); | |
Cell lA1Cell = lARow.getCell(0); | |
assertEquals(CellType.FORMULA, lA1Cell.getCellTypeEnum()); | |
try { | |
evaluator.evaluateFormulaCellEnum(lA1Cell); | |
fail("Missing external workbook reference exception expected!"); | |
}catch(RuntimeException re) { | |
assertTrue("Unexpected exception: " + re, re.getMessage().indexOf(SOURCE_DUMMY_WORKBOOK_FILENAME) != -1); | |
} | |
} | |
public void testMissingWorkbookMissingOverride() throws IOException { | |
Sheet lSheet = mainWorkbook.getSheetAt(0); | |
Cell lA1Cell = lSheet.getRow(0).getCell(0); | |
Cell lB1Cell = lSheet.getRow(1).getCell(0); | |
Cell lC1Cell = lSheet.getRow(2).getCell(0); | |
assertEquals(CellType.FORMULA, lA1Cell.getCellTypeEnum()); | |
assertEquals(CellType.FORMULA, lB1Cell.getCellTypeEnum()); | |
assertEquals(CellType.FORMULA, lC1Cell.getCellTypeEnum()); | |
// Check cached values | |
assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d); | |
assertEquals("POI rocks!", lB1Cell.getStringCellValue()); | |
assertEquals(true, lC1Cell.getBooleanCellValue()); | |
// Evaluate | |
FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator(); | |
evaluator.setIgnoreMissingWorkbooks(true); | |
assertEquals(CellType.NUMERIC, evaluator.evaluateFormulaCellEnum(lA1Cell)); | |
assertEquals(CellType.STRING, evaluator.evaluateFormulaCellEnum(lB1Cell)); | |
assertEquals(CellType.BOOLEAN, evaluator.evaluateFormulaCellEnum(lC1Cell)); | |
assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d); | |
assertEquals("POI rocks!", lB1Cell.getStringCellValue()); | |
assertEquals(true, lC1Cell.getBooleanCellValue()); | |
} | |
public void testExistingWorkbook() throws IOException { | |
Sheet lSheet = mainWorkbook.getSheetAt(0); | |
Cell lA1Cell = lSheet.getRow(0).getCell(0); | |
Cell lB1Cell = lSheet.getRow(1).getCell(0); | |
Cell lC1Cell = lSheet.getRow(2).getCell(0); | |
assertEquals(CellType.FORMULA, lA1Cell.getCellTypeEnum()); | |
assertEquals(CellType.FORMULA, lB1Cell.getCellTypeEnum()); | |
assertEquals(CellType.FORMULA, lC1Cell.getCellTypeEnum()); | |
FormulaEvaluator lMainWorkbookEvaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator(); | |
FormulaEvaluator lSourceEvaluator = sourceWorkbook.getCreationHelper().createFormulaEvaluator(); | |
Map<String,FormulaEvaluator> workbooks = new HashMap<String, FormulaEvaluator>(); | |
workbooks.put(MAIN_WORKBOOK_FILENAME, lMainWorkbookEvaluator); | |
workbooks.put(SOURCE_DUMMY_WORKBOOK_FILENAME, lSourceEvaluator); | |
lMainWorkbookEvaluator.setupReferencedWorkbooks(workbooks); | |
assertEquals(CellType.NUMERIC, lMainWorkbookEvaluator.evaluateFormulaCellEnum(lA1Cell)); | |
assertEquals(CellType.STRING, lMainWorkbookEvaluator.evaluateFormulaCellEnum(lB1Cell)); | |
assertEquals(CellType.BOOLEAN, lMainWorkbookEvaluator.evaluateFormulaCellEnum(lC1Cell)); | |
assertEquals(20.0d, lA1Cell.getNumericCellValue(), 0.00001d); | |
assertEquals("Apache rocks!", lB1Cell.getStringCellValue()); | |
assertEquals(false, lC1Cell.getBooleanCellValue()); | |
} | |
} |