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.

BaseTestMissingWorkbook.java 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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 static org.junit.jupiter.api.Assertions.assertEquals;
  21. import static org.junit.jupiter.api.Assertions.assertFalse;
  22. import static org.junit.jupiter.api.Assertions.assertNotNull;
  23. import static org.junit.jupiter.api.Assertions.assertThrows;
  24. import static org.junit.jupiter.api.Assertions.assertTrue;
  25. import java.util.HashMap;
  26. import java.util.Map;
  27. import org.apache.poi.hssf.HSSFTestDataSamples;
  28. import org.apache.poi.ss.usermodel.Cell;
  29. import org.apache.poi.ss.usermodel.CellType;
  30. import org.apache.poi.ss.usermodel.FormulaEvaluator;
  31. import org.apache.poi.ss.usermodel.Row;
  32. import org.apache.poi.ss.usermodel.Sheet;
  33. import org.apache.poi.ss.usermodel.Workbook;
  34. import org.junit.jupiter.api.AfterEach;
  35. import org.junit.jupiter.api.BeforeEach;
  36. import org.junit.jupiter.api.Test;
  37. public abstract class BaseTestMissingWorkbook {
  38. protected Workbook mainWorkbook;
  39. protected Workbook sourceWorkbook;
  40. protected final String MAIN_WORKBOOK_FILENAME;
  41. protected final String SOURCE_DUMMY_WORKBOOK_FILENAME;
  42. protected final String SOURCE_WORKBOOK_FILENAME;
  43. protected BaseTestMissingWorkbook(String MAIN_WORKBOOK_FILENAME,
  44. String SOURCE_DUMMY_WORKBOOK_FILENAME, String SOURCE_WORKBOOK_FILENAME) {
  45. this.MAIN_WORKBOOK_FILENAME = MAIN_WORKBOOK_FILENAME;
  46. this.SOURCE_DUMMY_WORKBOOK_FILENAME = SOURCE_DUMMY_WORKBOOK_FILENAME;
  47. this.SOURCE_WORKBOOK_FILENAME = SOURCE_WORKBOOK_FILENAME;
  48. }
  49. @BeforeEach
  50. public void setUp() throws Exception {
  51. mainWorkbook = HSSFTestDataSamples.openSampleWorkbook(MAIN_WORKBOOK_FILENAME);
  52. sourceWorkbook = HSSFTestDataSamples.openSampleWorkbook(SOURCE_WORKBOOK_FILENAME);
  53. assertNotNull(mainWorkbook);
  54. assertNotNull(sourceWorkbook);
  55. }
  56. @AfterEach
  57. public void tearDown() throws Exception {
  58. if(mainWorkbook != null) {
  59. mainWorkbook.close();
  60. }
  61. if(sourceWorkbook != null) {
  62. sourceWorkbook.close();
  63. }
  64. }
  65. @Test
  66. public void testMissingWorkbookMissing() {
  67. FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator();
  68. Sheet lSheet = mainWorkbook.getSheetAt(0);
  69. Row lARow = lSheet.getRow(0);
  70. Cell lA1Cell = lARow.getCell(0);
  71. assertEquals(CellType.FORMULA, lA1Cell.getCellType());
  72. RuntimeException re = assertThrows(RuntimeException.class, () -> evaluator.evaluateFormulaCell(lA1Cell),
  73. "Missing external workbook reference exception expected!");
  74. assertTrue(re.getMessage().contains(SOURCE_DUMMY_WORKBOOK_FILENAME));
  75. }
  76. @Test
  77. public void testMissingWorkbookMissingOverride() {
  78. Sheet lSheet = mainWorkbook.getSheetAt(0);
  79. Cell lA1Cell = lSheet.getRow(0).getCell(0);
  80. Cell lB1Cell = lSheet.getRow(1).getCell(0);
  81. Cell lC1Cell = lSheet.getRow(2).getCell(0);
  82. assertEquals(CellType.FORMULA, lA1Cell.getCellType());
  83. assertEquals(CellType.FORMULA, lB1Cell.getCellType());
  84. assertEquals(CellType.FORMULA, lC1Cell.getCellType());
  85. // Check cached values
  86. assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d);
  87. assertEquals("POI rocks!", lB1Cell.getStringCellValue());
  88. assertTrue(lC1Cell.getBooleanCellValue());
  89. // Evaluate
  90. FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator();
  91. evaluator.setIgnoreMissingWorkbooks(true);
  92. assertEquals(CellType.NUMERIC, evaluator.evaluateFormulaCell(lA1Cell));
  93. assertEquals(CellType.STRING, evaluator.evaluateFormulaCell(lB1Cell));
  94. assertEquals(CellType.BOOLEAN, evaluator.evaluateFormulaCell(lC1Cell));
  95. assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d);
  96. assertEquals("POI rocks!", lB1Cell.getStringCellValue());
  97. assertTrue(lC1Cell.getBooleanCellValue());
  98. }
  99. @Test
  100. public void testExistingWorkbook() {
  101. Sheet lSheet = mainWorkbook.getSheetAt(0);
  102. Cell lA1Cell = lSheet.getRow(0).getCell(0);
  103. Cell lB1Cell = lSheet.getRow(1).getCell(0);
  104. Cell lC1Cell = lSheet.getRow(2).getCell(0);
  105. assertEquals(CellType.FORMULA, lA1Cell.getCellType());
  106. assertEquals(CellType.FORMULA, lB1Cell.getCellType());
  107. assertEquals(CellType.FORMULA, lC1Cell.getCellType());
  108. FormulaEvaluator lMainWorkbookEvaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator();
  109. FormulaEvaluator lSourceEvaluator = sourceWorkbook.getCreationHelper().createFormulaEvaluator();
  110. Map<String,FormulaEvaluator> workbooks = new HashMap<>();
  111. workbooks.put(MAIN_WORKBOOK_FILENAME, lMainWorkbookEvaluator);
  112. workbooks.put(SOURCE_DUMMY_WORKBOOK_FILENAME, lSourceEvaluator);
  113. lMainWorkbookEvaluator.setupReferencedWorkbooks(workbooks);
  114. assertEquals(CellType.NUMERIC, lMainWorkbookEvaluator.evaluateFormulaCell(lA1Cell));
  115. assertEquals(CellType.STRING, lMainWorkbookEvaluator.evaluateFormulaCell(lB1Cell));
  116. assertEquals(CellType.BOOLEAN, lMainWorkbookEvaluator.evaluateFormulaCell(lC1Cell));
  117. assertEquals(20.0d, lA1Cell.getNumericCellValue(), 0.00001d);
  118. assertEquals("Apache rocks!", lB1Cell.getStringCellValue());
  119. assertFalse(lC1Cell.getBooleanCellValue());
  120. }
  121. }