You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TestMissingWorkbook.java 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. * ====================================================================
  3. * Licensed to the Apache Software Foundation (ASF) under one or more
  4. * contributor license agreements. See the NOTICE file distributed with
  5. * this work for additional information regarding copyright ownership.
  6. * The ASF licenses this file to You under the Apache License, Version 2.0
  7. * (the "License"); you may not use this file except in compliance with
  8. * the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. * ====================================================================
  18. */
  19. package org.apache.poi.ss.formula;
  20. import junit.framework.TestCase;
  21. import org.apache.poi.hssf.HSSFTestDataSamples;
  22. import org.apache.poi.hssf.usermodel.*;
  23. import org.apache.poi.ss.usermodel.Cell;
  24. import org.apache.poi.ss.usermodel.FormulaEvaluator;
  25. import java.io.IOException;
  26. public class TestMissingWorkbook extends TestCase {
  27. private static final String MAIN_WORKBOOK_FILENAME = "52575_main.xls";
  28. private static final String SOURCE_DUMMY_WORKBOOK_FILENAME = "source_dummy.xls";
  29. private static final String SOURCE_WORKBOOK_FILENAME = "52575_source.xls";
  30. private static final String propertyKey = WorkbookEvaluator.class.getName() + ".IGNORE_MISSING_WORKBOOKS";
  31. private HSSFWorkbook mainWorkbook;
  32. private HSSFWorkbook sourceWorkbook;
  33. @Override
  34. protected void setUp() throws Exception {
  35. mainWorkbook = HSSFTestDataSamples.openSampleWorkbook(MAIN_WORKBOOK_FILENAME);
  36. sourceWorkbook = HSSFTestDataSamples.openSampleWorkbook(SOURCE_WORKBOOK_FILENAME);
  37. assertNotNull(mainWorkbook);
  38. assertNotNull(sourceWorkbook);
  39. }
  40. public void testMissingWorkbookMissing() throws IOException {
  41. FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator();
  42. HSSFSheet lSheet = mainWorkbook.getSheetAt(0);
  43. HSSFRow lARow = lSheet.getRow(0);
  44. HSSFCell lA1Cell = lARow.getCell(0);
  45. assertEquals(Cell.CELL_TYPE_FORMULA, lA1Cell.getCellType());
  46. try {
  47. evaluator.evaluateFormulaCell(lA1Cell);
  48. fail("Missing external workbook reference exception expected!");
  49. }catch(RuntimeException re) {
  50. assertTrue("Unexpected exception: " + re, re.getMessage().indexOf(SOURCE_DUMMY_WORKBOOK_FILENAME) != -1);
  51. }
  52. }
  53. public void testMissingWorkbookMissingOverride() throws IOException {
  54. HSSFSheet lSheet = mainWorkbook.getSheetAt(0);
  55. HSSFCell lA1Cell = lSheet.getRow(0).getCell(0);
  56. HSSFCell lB1Cell = lSheet.getRow(1).getCell(0);
  57. HSSFCell lC1Cell = lSheet.getRow(2).getCell(0);
  58. assertEquals(Cell.CELL_TYPE_FORMULA, lA1Cell.getCellType());
  59. assertEquals(Cell.CELL_TYPE_FORMULA, lB1Cell.getCellType());
  60. assertEquals(Cell.CELL_TYPE_FORMULA, lC1Cell.getCellType());
  61. FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator();
  62. System.setProperty(propertyKey, Boolean.toString(true));
  63. assertEquals(Cell.CELL_TYPE_NUMERIC, evaluator.evaluateFormulaCell(lA1Cell));
  64. assertEquals(Cell.CELL_TYPE_STRING, evaluator.evaluateFormulaCell(lB1Cell));
  65. assertEquals(Cell.CELL_TYPE_BOOLEAN, evaluator.evaluateFormulaCell(lC1Cell));
  66. assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d);
  67. assertEquals("POI rocks!", lB1Cell.getStringCellValue());
  68. assertEquals(true, lC1Cell.getBooleanCellValue());
  69. }
  70. public void testExistingWorkbook() throws IOException {
  71. HSSFSheet lSheet = mainWorkbook.getSheetAt(0);
  72. HSSFCell lA1Cell = lSheet.getRow(0).getCell(0);
  73. HSSFCell lB1Cell = lSheet.getRow(1).getCell(0);
  74. HSSFCell lC1Cell = lSheet.getRow(2).getCell(0);
  75. assertEquals(Cell.CELL_TYPE_FORMULA, lA1Cell.getCellType());
  76. assertEquals(Cell.CELL_TYPE_FORMULA, lB1Cell.getCellType());
  77. assertEquals(Cell.CELL_TYPE_FORMULA, lC1Cell.getCellType());
  78. HSSFFormulaEvaluator lMainWorkbookEvaluator = new HSSFFormulaEvaluator(mainWorkbook);
  79. HSSFFormulaEvaluator lSourceEvaluator = new HSSFFormulaEvaluator(sourceWorkbook);
  80. HSSFFormulaEvaluator.setupEnvironment(
  81. new String[]{MAIN_WORKBOOK_FILENAME, SOURCE_DUMMY_WORKBOOK_FILENAME},
  82. new HSSFFormulaEvaluator[] {lMainWorkbookEvaluator, lSourceEvaluator});
  83. assertEquals(Cell.CELL_TYPE_NUMERIC, lMainWorkbookEvaluator.evaluateFormulaCell(lA1Cell));
  84. assertEquals(Cell.CELL_TYPE_STRING, lMainWorkbookEvaluator.evaluateFormulaCell(lB1Cell));
  85. assertEquals(Cell.CELL_TYPE_BOOLEAN, lMainWorkbookEvaluator.evaluateFormulaCell(lC1Cell));
  86. assertEquals(20.0d, lA1Cell.getNumericCellValue(), 0.00001d);
  87. assertEquals("Apache rocks!", lB1Cell.getStringCellValue());
  88. assertEquals(false, lC1Cell.getBooleanCellValue());
  89. }
  90. }