]> source.dussan.org Git - poi.git/commitdiff
Close file-resources in unit-tests, fix IDE warnings
authorDominik Stadler <centic@apache.org>
Thu, 15 Aug 2019 07:54:58 +0000 (07:54 +0000)
committerDominik Stadler <centic@apache.org>
Thu, 15 Aug 2019 07:54:58 +0000 (07:54 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1865208 13f79535-47bb-0310-9956-ffa450edef68

15 files changed:
src/ooxml/testcases/org/apache/poi/xssf/model/TestThemesTable.java
src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFEvaluationSheet.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestMissingWorkbookOnXSSF.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFChart.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFChartSheet.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFColor.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFShape.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheetRowGrouping.java
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java
src/testcases/org/apache/poi/ss/formula/TestMissingWorkbook.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java

index 2f0ece24204a317c8b96941e361746bbd1f97584..2642fb0074fd4f289d4d7aca2a633a9d2efc2b7c 100644 (file)
 package org.apache.poi.xssf.model;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.util.LinkedHashMap;
 import java.util.Locale;
 import java.util.Map;
@@ -70,7 +74,9 @@ public class TestThemesTable {
         XSSFWorkbook simpleRS = XSSFTestDataSamples.writeOutAndReadBack(simple);
         XSSFWorkbook complexRS = XSSFTestDataSamples.writeOutAndReadBack(complex);
         // Fetch fresh copies to test with
+        simple.close();
         simple = XSSFTestDataSamples.openSampleWorkbook(testFileSimple);
+        complex.close();
         complex = XSSFTestDataSamples.openSampleWorkbook(testFileComplex);
         // Files and descriptions
         Map<String,XSSFWorkbook> workbooks = new LinkedHashMap<>();
@@ -111,13 +117,13 @@ public class TestThemesTable {
                 XSSFFont font = cell.getCellStyle().getFont();
                 CTColor ctColor = font.getCTFont().getColorArray(0);
                 assertNotNull(ctColor);
-                assertEquals(true, ctColor.isSetTheme());
+                assertTrue(ctColor.isSetTheme());
                 assertEquals(themeElem.idx, ctColor.getTheme());
                 
                 // Get the colour, via the theme
                 XSSFColor color = font.getXSSFColor();
                 // Theme colours aren't tinted
-                assertEquals(false, color.hasTint());
+                assertFalse(color.hasTint());
                 // Check the RGB part (no tint)
                 assertEquals(
                         "Wrong theme colour " + themeElem.name + " on " + whatWorkbook,
@@ -141,6 +147,11 @@ public class TestThemesTable {
                 fos.close();
             }
         }
+
+        simpleRS.close();
+        simple.close();
+        complexRS.close();
+        complex.close();
     }
 
     /**
@@ -155,80 +166,78 @@ public class TestThemesTable {
      * Note - Grey Row has an odd way of doing the styling... 
      */
     @Test
-    public void themedAndNonThemedColours() {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(testFileComplex);
-        XSSFSheet sheet = wb.getSheetAt(0);
-        XSSFCellStyle style;
-        XSSFColor color;
-        XSSFCell cell;
-        
-        String[] names = {"White","Black","Grey","Dark Blue","Blue","Red","Green"};
-        String[] explicitFHexes = { "FFFFFFFF", "FF000000", "FFC0C0C0", "FF002060",
-                                    "FF0070C0", "FFFF0000", "FF00B050" };
-        String[] explicitBHexes = { "FFFFFFFF", "FF000000", "FFC0C0C0", "FF002060",
-                                    "FF0000FF", "FFFF0000", "FF00FF00" };
-        assertEquals(7, names.length);
-        
-        // Check the non-CF colours in Columns A, B, C and E
-        for (int rn=1; rn<8; rn++) {
-            int idx = rn-1;
-            XSSFRow row = sheet.getRow(rn);
-            assertNotNull("Missing row " + rn, row);
-            
-            // Theme cells come first
-            XSSFCell themeCell = row.getCell(0);
-            ThemeElement themeElem = ThemeElement.byId(idx);
-            assertCellContents(themeElem.name, themeCell);
+    public void themedAndNonThemedColours() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(testFileComplex)) {
+            XSSFSheet sheet = wb.getSheetAt(0);
 
-            // Sanity check names
-            assertCellContents(names[idx], row.getCell(1));
-            assertCellContents(names[idx], row.getCell(2));
-            assertCellContents(names[idx], row.getCell(4));
-            
-            
-            // Check the colours
-            
-            //  A: Theme Based, Foreground
-            style = themeCell.getCellStyle();
-            color = style.getFont().getXSSFColor();
-            assertEquals(true, color.isThemed());
-            assertEquals(idx, color.getTheme());
-            assertEquals(rgbExpected[idx], Hex.encodeHexString(color.getRGB()));
-            
-            //  B: Theme Based, Foreground
-            cell = row.getCell(1);
-            style = cell.getCellStyle();
-            color = style.getFont().getXSSFColor();
-            assertEquals(true, color.isThemed());
-            if (idx != 2) {
+            String[] names = {"White", "Black", "Grey", "Dark Blue", "Blue", "Red", "Green"};
+            String[] explicitFHexes = {"FFFFFFFF", "FF000000", "FFC0C0C0", "FF002060",
+                    "FF0070C0", "FFFF0000", "FF00B050"};
+            String[] explicitBHexes = {"FFFFFFFF", "FF000000", "FFC0C0C0", "FF002060",
+                    "FF0000FF", "FFFF0000", "FF00FF00"};
+            assertEquals(7, names.length);
+
+            // Check the non-CF colours in Columns A, B, C and E
+            for (int rn = 1; rn < 8; rn++) {
+                int idx = rn - 1;
+                XSSFRow row = sheet.getRow(rn);
+                assertNotNull("Missing row " + rn, row);
+
+                // Theme cells come first
+                XSSFCell themeCell = row.getCell(0);
+                ThemeElement themeElem = ThemeElement.byId(idx);
+                assertCellContents(themeElem.name, themeCell);
+
+                // Sanity check names
+                assertCellContents(names[idx], row.getCell(1));
+                assertCellContents(names[idx], row.getCell(2));
+                assertCellContents(names[idx], row.getCell(4));
+
+
+                // Check the colours
+
+                //  A: Theme Based, Foreground
+                XSSFCellStyle style = themeCell.getCellStyle();
+                XSSFColor color = style.getFont().getXSSFColor();
+                assertTrue(color.isThemed());
                 assertEquals(idx, color.getTheme());
                 assertEquals(rgbExpected[idx], Hex.encodeHexString(color.getRGB()));
-            } else {
-                assertEquals(1, color.getTheme());
-                assertEquals(0.50, color.getTint(), 0.001);
+
+                //  B: Theme Based, Foreground
+                XSSFCell cell = row.getCell(1);
+                style = cell.getCellStyle();
+                color = style.getFont().getXSSFColor();
+                assertTrue(color.isThemed());
+                if (idx != 2) {
+                    assertEquals(idx, color.getTheme());
+                    assertEquals(rgbExpected[idx], Hex.encodeHexString(color.getRGB()));
+                } else {
+                    assertEquals(1, color.getTheme());
+                    assertEquals(0.50, color.getTint(), 0.001);
+                }
+
+                //  C: Explicit, Foreground
+                cell = row.getCell(2);
+                style = cell.getCellStyle();
+                color = style.getFont().getXSSFColor();
+                assertFalse(color.isThemed());
+                assertEquals(explicitFHexes[idx], color.getARGBHex());
+
+                // E: Explicit Background, Foreground all Black
+                cell = row.getCell(4);
+                style = cell.getCellStyle();
+
+                color = style.getFont().getXSSFColor();
+                assertTrue(color.isThemed());
+                assertEquals("FF000000", color.getARGBHex());
+
+                color = style.getFillForegroundXSSFColor();
+                assertFalse(color.isThemed());
+                assertEquals(explicitBHexes[idx], color.getARGBHex());
+                color = style.getFillBackgroundColorColor();
+                assertFalse(color.isThemed());
+                assertNull(color.getARGBHex());
             }
-            
-            //  C: Explicit, Foreground
-            cell = row.getCell(2);
-            style = cell.getCellStyle();
-            color = style.getFont().getXSSFColor();
-            assertEquals(false, color.isThemed());
-            assertEquals(explicitFHexes[idx], color.getARGBHex());
-            
-            // E: Explicit Background, Foreground all Black
-            cell = row.getCell(4);
-            style = cell.getCellStyle();
-            
-            color = style.getFont().getXSSFColor();
-            assertEquals(true, color.isThemed());
-            assertEquals("FF000000", color.getARGBHex());
-            
-            color = style.getFillForegroundXSSFColor();
-            assertEquals(false, color.isThemed());
-            assertEquals(explicitBHexes[idx], color.getARGBHex());
-            color = style.getFillBackgroundColorColor();
-            assertEquals(false, color.isThemed());
-            assertEquals(null, color.getARGBHex());
         }
         
         // Check the CF colours
@@ -242,13 +251,13 @@ public class TestThemesTable {
     
     @Test
     @SuppressWarnings("resource")
-    public void testAddNew() throws Exception {
+    public void testAddNew() {
         XSSFWorkbook wb = new XSSFWorkbook();
         wb.createSheet();
-        assertEquals(null, wb.getTheme());
+        assertNull(wb.getTheme());
         
         StylesTable styles = wb.getStylesSource();
-        assertEquals(null, styles.getTheme());
+        assertNull(styles.getTheme());
         
         styles.ensureThemesTable();
         
index 1c20bb815ef3349a8c6ecfd04f544958a5e44f63..4ffa0819080080b061fe6c82840bae98521e45f5 100644 (file)
@@ -19,14 +19,31 @@ package org.apache.poi.xssf.streaming;
 import org.apache.poi.ss.formula.EvaluationSheet;
 import org.apache.poi.ss.usermodel.BaseTestXEvaluationSheet;
 import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.junit.After;
 
+import java.io.IOException;
 import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 public class TestSXSSFEvaluationSheet extends BaseTestXEvaluationSheet {
+    private List<Workbook> workbooksToClose = new ArrayList<>();
+
+    @After
+    public void closeWorkbooks() throws IOException {
+        for (Workbook workbook : workbooksToClose) {
+            workbook.close();
+        }
+    }
+
     @Override
     protected Map.Entry<Sheet, EvaluationSheet> getInstance() {
-        SXSSFSheet sheet = new SXSSFWorkbook().createSheet();
+        SXSSFWorkbook workbook = new SXSSFWorkbook();
+        workbooksToClose.add(workbook);
+
+        SXSSFSheet sheet = workbook.createSheet();
         return new AbstractMap.SimpleEntry<>(sheet, new SXSSFEvaluationSheet(sheet));
     }
 }
index 2427dd1d821d7f984e100c0cd65183379cf9336f..0de5eb5a460633b6934b5e57a7eed6d64de0e5e2 100644 (file)
@@ -20,6 +20,9 @@ package org.apache.poi.xssf.usermodel;
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.ss.formula.TestMissingWorkbook;
 import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.junit.Before;
+
+import static org.junit.Assert.assertNotNull;
 
 /**
  * XSSF Specific version of the Missing Workbooks test
@@ -28,12 +31,13 @@ public final class TestMissingWorkbookOnXSSF extends TestMissingWorkbook {
     public TestMissingWorkbookOnXSSF() {
         super("52575_main.xlsx", "source_dummy.xlsx", "52575_source.xls");
     }
-    
+
     @Override
-    protected void setUp() throws Exception {
+    @Before
+    public void setUp() {
         mainWorkbook = XSSFTestDataSamples.openSampleWorkbook(MAIN_WORKBOOK_FILENAME);
         sourceWorkbook = HSSFTestDataSamples.openSampleWorkbook(SOURCE_WORKBOOK_FILENAME);
-        
+
         assertNotNull(mainWorkbook);
         assertNotNull(sourceWorkbook);
     }
index e0bf0f415c5afc4587f4343ebec321c8f5ab9f32..da056eb1ead0aa1419165625b47e815a06b76533 100644 (file)
@@ -160,32 +160,31 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug45430() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("45430.xlsx");
-        assertFalse(wb.isMacroEnabled());
-        assertEquals(3, wb.getNumberOfNames());
-
-        assertEquals(0, wb.getName("SheetAA1").getCTName().getLocalSheetId());
-        assertFalse(wb.getName("SheetAA1").getCTName().isSetLocalSheetId());
-        assertEquals("SheetA!$A$1", wb.getName("SheetAA1").getRefersToFormula());
-        assertEquals("SheetA", wb.getName("SheetAA1").getSheetName());
-
-        assertEquals(0, wb.getName("SheetBA1").getCTName().getLocalSheetId());
-        assertFalse(wb.getName("SheetBA1").getCTName().isSetLocalSheetId());
-        assertEquals("SheetB!$A$1", wb.getName("SheetBA1").getRefersToFormula());
-        assertEquals("SheetB", wb.getName("SheetBA1").getSheetName());
-
-        assertEquals(0, wb.getName("SheetCA1").getCTName().getLocalSheetId());
-        assertFalse(wb.getName("SheetCA1").getCTName().isSetLocalSheetId());
-        assertEquals("SheetC!$A$1", wb.getName("SheetCA1").getRefersToFormula());
-        assertEquals("SheetC", wb.getName("SheetCA1").getSheetName());
-
-        // Save and re-load, still there
-        XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        assertEquals(3, nwb.getNumberOfNames());
-        assertEquals("SheetA!$A$1", nwb.getName("SheetAA1").getRefersToFormula());
-
-        nwb.close();
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("45430.xlsx")) {
+            assertFalse(wb.isMacroEnabled());
+            assertEquals(3, wb.getNumberOfNames());
+
+            assertEquals(0, wb.getName("SheetAA1").getCTName().getLocalSheetId());
+            assertFalse(wb.getName("SheetAA1").getCTName().isSetLocalSheetId());
+            assertEquals("SheetA!$A$1", wb.getName("SheetAA1").getRefersToFormula());
+            assertEquals("SheetA", wb.getName("SheetAA1").getSheetName());
+
+            assertEquals(0, wb.getName("SheetBA1").getCTName().getLocalSheetId());
+            assertFalse(wb.getName("SheetBA1").getCTName().isSetLocalSheetId());
+            assertEquals("SheetB!$A$1", wb.getName("SheetBA1").getRefersToFormula());
+            assertEquals("SheetB", wb.getName("SheetBA1").getSheetName());
+
+            assertEquals(0, wb.getName("SheetCA1").getCTName().getLocalSheetId());
+            assertFalse(wb.getName("SheetCA1").getCTName().isSetLocalSheetId());
+            assertEquals("SheetC!$A$1", wb.getName("SheetCA1").getRefersToFormula());
+            assertEquals("SheetC", wb.getName("SheetCA1").getSheetName());
+
+            // Save and re-load, still there
+            try (XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb)) {
+                assertEquals(3, nwb.getNumberOfNames());
+                assertEquals("SheetA!$A$1", nwb.getName("SheetAA1").getRefersToFormula());
+            }
+        }
     }
 
     /**
@@ -276,8 +275,9 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug49020() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("BrNotClosed.xlsx");
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("BrNotClosed.xlsx")) {
+            assertNotNull(wb);
+        }
     }
 
     /**
@@ -285,10 +285,10 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug49325() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("49325.xlsx");
-        CTWorksheet sh = wb.getSheetAt(0).getCTWorksheet();
-        assertNotNull(sh.getPhoneticPr());
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("49325.xlsx")) {
+            CTWorksheet sh = wb.getSheetAt(0).getCTWorksheet();
+            assertNotNull(sh.getPhoneticPr());
+        }
     }
 
     /**
@@ -297,35 +297,34 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug48923() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48923.xlsx");
-        assertEquals(4, wb.getNumberOfNames());
-
-        Name b1 = wb.getName("NameB1");
-        Name b2 = wb.getName("NameB2");
-        Name sheet2 = wb.getName("NameSheet2");
-        Name test = wb.getName("Test");
-
-        assertNotNull(b1);
-        assertEquals("NameB1", b1.getNameName());
-        assertEquals("Sheet1", b1.getSheetName());
-        assertEquals(-1, b1.getSheetIndex());
-
-        assertNotNull(b2);
-        assertEquals("NameB2", b2.getNameName());
-        assertEquals("Sheet1", b2.getSheetName());
-        assertEquals(-1, b2.getSheetIndex());
-
-        assertNotNull(sheet2);
-        assertEquals("NameSheet2", sheet2.getNameName());
-        assertEquals("Sheet2", sheet2.getSheetName());
-        assertEquals(-1, sheet2.getSheetIndex());
-
-        assertNotNull(test);
-        assertEquals("Test", test.getNameName());
-        assertEquals("Sheet1", test.getSheetName());
-        assertEquals(-1, test.getSheetIndex());
-
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48923.xlsx")) {
+            assertEquals(4, wb.getNumberOfNames());
+
+            Name b1 = wb.getName("NameB1");
+            Name b2 = wb.getName("NameB2");
+            Name sheet2 = wb.getName("NameSheet2");
+            Name test = wb.getName("Test");
+
+            assertNotNull(b1);
+            assertEquals("NameB1", b1.getNameName());
+            assertEquals("Sheet1", b1.getSheetName());
+            assertEquals(-1, b1.getSheetIndex());
+
+            assertNotNull(b2);
+            assertEquals("NameB2", b2.getNameName());
+            assertEquals("Sheet1", b2.getSheetName());
+            assertEquals(-1, b2.getSheetIndex());
+
+            assertNotNull(sheet2);
+            assertEquals("NameSheet2", sheet2.getNameName());
+            assertEquals("Sheet2", sheet2.getSheetName());
+            assertEquals(-1, sheet2.getSheetIndex());
+
+            assertNotNull(test);
+            assertEquals("Test", test.getNameName());
+            assertEquals("Sheet1", test.getSheetName());
+            assertEquals(-1, test.getSheetIndex());
+        }
     }
 
     /**
@@ -375,37 +374,36 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug48779() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx");
-        XSSFCell cell = wb.getSheetAt(0).getRow(0).getCell(0);
-        XSSFCellStyle cs = cell.getCellStyle();
-
-        assertNotNull(cs);
-        assertEquals(1, cs.getIndex());
-
-        // Look at the low level xml elements
-        assertEquals(2, cs.getCoreXf().getFillId());
-        assertEquals(0, cs.getCoreXf().getXfId());
-        assertTrue(cs.getCoreXf().getApplyFill());
-
-        XSSFCellFill fg = wb.getStylesSource().getFillAt(2);
-        assertNotNull(fg.getFillForegroundColor());
-        assertEquals(0, fg.getFillForegroundColor().getIndexed());
-        assertEquals(0.0, fg.getFillForegroundColor().getTint(), 0);
-        assertEquals("FFFF0000", fg.getFillForegroundColor().getARGBHex());
-        assertNotNull(fg.getFillBackgroundColor());
-        assertEquals(64, fg.getFillBackgroundColor().getIndexed());
-
-        // Now look higher up
-        assertNotNull(cs.getFillForegroundXSSFColor());
-        assertEquals(0, cs.getFillForegroundColor());
-        assertEquals("FFFF0000", cs.getFillForegroundXSSFColor().getARGBHex());
-        assertEquals("FFFF0000", cs.getFillForegroundColorColor().getARGBHex());
-
-        assertEquals(64, cs.getFillBackgroundColor());
-        assertNull(cs.getFillBackgroundXSSFColor().getARGBHex());
-        assertNull(cs.getFillBackgroundColorColor().getARGBHex());
-
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx")) {
+            XSSFCell cell = wb.getSheetAt(0).getRow(0).getCell(0);
+            XSSFCellStyle cs = cell.getCellStyle();
+
+            assertNotNull(cs);
+            assertEquals(1, cs.getIndex());
+
+            // Look at the low level xml elements
+            assertEquals(2, cs.getCoreXf().getFillId());
+            assertEquals(0, cs.getCoreXf().getXfId());
+            assertTrue(cs.getCoreXf().getApplyFill());
+
+            XSSFCellFill fg = wb.getStylesSource().getFillAt(2);
+            assertNotNull(fg.getFillForegroundColor());
+            assertEquals(0, fg.getFillForegroundColor().getIndexed());
+            assertEquals(0.0, fg.getFillForegroundColor().getTint(), 0);
+            assertEquals("FFFF0000", fg.getFillForegroundColor().getARGBHex());
+            assertNotNull(fg.getFillBackgroundColor());
+            assertEquals(64, fg.getFillBackgroundColor().getIndexed());
+
+            // Now look higher up
+            assertNotNull(cs.getFillForegroundXSSFColor());
+            assertEquals(0, cs.getFillForegroundColor());
+            assertEquals("FFFF0000", cs.getFillForegroundXSSFColor().getARGBHex());
+            assertEquals("FFFF0000", cs.getFillForegroundColorColor().getARGBHex());
+
+            assertEquals(64, cs.getFillBackgroundColor());
+            assertNull(cs.getFillBackgroundXSSFColor().getARGBHex());
+            assertNull(cs.getFillBackgroundColorColor().getARGBHex());
+        }
     }
 
     /**
@@ -414,33 +412,32 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug47490() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("GeneralFormatTests.xlsx");
-        Sheet s = wb.getSheetAt(1);
-        Row r;
-        DataFormatter df = new DataFormatter();
-
-        r = s.getRow(1);
-        assertEquals(1.0, r.getCell(2).getNumericCellValue(), 0);
-        assertEquals("General", r.getCell(2).getCellStyle().getDataFormatString());
-        assertEquals("1", df.formatCellValue(r.getCell(2)));
-        assertEquals("1", df.formatRawCellContents(1.0, -1, "@"));
-        assertEquals("1", df.formatRawCellContents(1.0, -1, "General"));
-
-        r = s.getRow(2);
-        assertEquals(12.0, r.getCell(2).getNumericCellValue(), 0);
-        assertEquals("General", r.getCell(2).getCellStyle().getDataFormatString());
-        assertEquals("12", df.formatCellValue(r.getCell(2)));
-        assertEquals("12", df.formatRawCellContents(12.0, -1, "@"));
-        assertEquals("12", df.formatRawCellContents(12.0, -1, "General"));
-
-        r = s.getRow(3);
-        assertEquals(123.0, r.getCell(2).getNumericCellValue(), 0);
-        assertEquals("General", r.getCell(2).getCellStyle().getDataFormatString());
-        assertEquals("123", df.formatCellValue(r.getCell(2)));
-        assertEquals("123", df.formatRawCellContents(123.0, -1, "@"));
-        assertEquals("123", df.formatRawCellContents(123.0, -1, "General"));
-
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("GeneralFormatTests.xlsx")) {
+            Sheet s = wb.getSheetAt(1);
+            Row r;
+            DataFormatter df = new DataFormatter();
+
+            r = s.getRow(1);
+            assertEquals(1.0, r.getCell(2).getNumericCellValue(), 0);
+            assertEquals("General", r.getCell(2).getCellStyle().getDataFormatString());
+            assertEquals("1", df.formatCellValue(r.getCell(2)));
+            assertEquals("1", df.formatRawCellContents(1.0, -1, "@"));
+            assertEquals("1", df.formatRawCellContents(1.0, -1, "General"));
+
+            r = s.getRow(2);
+            assertEquals(12.0, r.getCell(2).getNumericCellValue(), 0);
+            assertEquals("General", r.getCell(2).getCellStyle().getDataFormatString());
+            assertEquals("12", df.formatCellValue(r.getCell(2)));
+            assertEquals("12", df.formatRawCellContents(12.0, -1, "@"));
+            assertEquals("12", df.formatRawCellContents(12.0, -1, "General"));
+
+            r = s.getRow(3);
+            assertEquals(123.0, r.getCell(2).getNumericCellValue(), 0);
+            assertEquals("General", r.getCell(2).getCellStyle().getDataFormatString());
+            assertEquals("123", df.formatCellValue(r.getCell(2)));
+            assertEquals("123", df.formatRawCellContents(123.0, -1, "@"));
+            assertEquals("123", df.formatRawCellContents(123.0, -1, "General"));
+        }
     }
 
     /**
@@ -453,38 +450,37 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug49609() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("49609.xlsx");
-        assertEquals("FAM", wb.getSheetName(0));
-        assertEquals("Cycle", wb.getSheetAt(0).getRow(0).getCell(1).getStringCellValue());
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("49609.xlsx")) {
+            assertEquals("FAM", wb.getSheetName(0));
+            assertEquals("Cycle", wb.getSheetAt(0).getRow(0).getCell(1).getStringCellValue());
+        }
 
     }
 
     @Test
     public void bug49783() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("49783.xlsx");
-        Sheet sheet = wb.getSheetAt(0);
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        Cell cell;
-
-        cell = sheet.getRow(0).getCell(0);
-        assertEquals("#REF!*#REF!", cell.getCellFormula());
-        assertEquals(CellType.ERROR, evaluator.evaluateInCell(cell).getCellType());
-        assertEquals("#REF!", FormulaError.forInt(cell.getErrorCellValue()).getString());
-
-        Name nm1 = wb.getName("sale_1");
-        assertNotNull("name sale_1 should be present", nm1);
-        assertEquals("Sheet1!#REF!", nm1.getRefersToFormula());
-        Name nm2 = wb.getName("sale_2");
-        assertNotNull("name sale_2 should be present", nm2);
-        assertEquals("Sheet1!#REF!", nm2.getRefersToFormula());
-
-        cell = sheet.getRow(1).getCell(0);
-        assertEquals("sale_1*sale_2", cell.getCellFormula());
-        assertEquals(CellType.ERROR, evaluator.evaluateInCell(cell).getCellType());
-        assertEquals("#REF!", FormulaError.forInt(cell.getErrorCellValue()).getString());
-
-        wb.close();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("49783.xlsx")) {
+            Sheet sheet = wb.getSheetAt(0);
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            Cell cell;
+
+            cell = sheet.getRow(0).getCell(0);
+            assertEquals("#REF!*#REF!", cell.getCellFormula());
+            assertEquals(CellType.ERROR, evaluator.evaluateInCell(cell).getCellType());
+            assertEquals("#REF!", FormulaError.forInt(cell.getErrorCellValue()).getString());
+
+            Name nm1 = wb.getName("sale_1");
+            assertNotNull("name sale_1 should be present", nm1);
+            assertEquals("Sheet1!#REF!", nm1.getRefersToFormula());
+            Name nm2 = wb.getName("sale_2");
+            assertNotNull("name sale_2 should be present", nm2);
+            assertEquals("Sheet1!#REF!", nm2.getRefersToFormula());
+
+            cell = sheet.getRow(1).getCell(0);
+            assertEquals("sale_1*sale_2", cell.getCellFormula());
+            assertEquals(CellType.ERROR, evaluator.evaluateInCell(cell).getCellType());
+            assertEquals("#REF!", FormulaError.forInt(cell.getErrorCellValue()).getString());
+        }
     }
 
     /**
@@ -575,28 +571,27 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug49940() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("styles.xlsx");
-        assertEquals(3, wb.getNumberOfSheets());
-        assertEquals(10, wb.getStylesSource().getNumCellStyles());
-
-        ByteArrayOutputStream b1 = new ByteArrayOutputStream();
-        ByteArrayOutputStream b2 = new ByteArrayOutputStream();
-        ByteArrayOutputStream b3 = new ByteArrayOutputStream();
-        wb.write(b1);
-        wb.write(b2);
-        wb.write(b3);
-
-        for (byte[] data : new byte[][]{
-                b1.toByteArray(), b2.toByteArray(), b3.toByteArray()
-        }) {
-            ByteArrayInputStream bais = new ByteArrayInputStream(data);
-            XSSFWorkbook wb2 = new XSSFWorkbook(bais);
-            assertEquals(3, wb2.getNumberOfSheets());
-            assertEquals(10, wb2.getStylesSource().getNumCellStyles());
-            wb2.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("styles.xlsx")) {
+            assertEquals(3, wb.getNumberOfSheets());
+            assertEquals(10, wb.getStylesSource().getNumCellStyles());
+
+            ByteArrayOutputStream b1 = new ByteArrayOutputStream();
+            ByteArrayOutputStream b2 = new ByteArrayOutputStream();
+            ByteArrayOutputStream b3 = new ByteArrayOutputStream();
+            wb.write(b1);
+            wb.write(b2);
+            wb.write(b3);
+
+            for (byte[] data : new byte[][]{
+                    b1.toByteArray(), b2.toByteArray(), b3.toByteArray()
+            }) {
+                ByteArrayInputStream bais = new ByteArrayInputStream(data);
+                XSSFWorkbook wb2 = new XSSFWorkbook(bais);
+                assertEquals(3, wb2.getNumberOfSheets());
+                assertEquals(10, wb2.getStylesSource().getNumCellStyles());
+                wb2.close();
+            }
         }
-
-        wb.close();
     }
 
     /**
@@ -605,71 +600,71 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug49966() throws IOException {
-        XSSFWorkbook wb1 = XSSFTestDataSamples
-                .openSampleWorkbook("shared_formulas.xlsx");
-        XSSFSheet sheet = wb1.getSheetAt(0);
-
-        XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
-
-        // CalcChain has lots of entries
-        CalculationChain cc = wb1.getCalculationChain();
-        assertEquals("A2", cc.getCTCalcChain().getCArray(0).getR());
-        assertEquals("A3", cc.getCTCalcChain().getCArray(1).getR());
-        assertEquals("A4", cc.getCTCalcChain().getCArray(2).getR());
-        assertEquals("A5", cc.getCTCalcChain().getCArray(3).getR());
-        assertEquals("A6", cc.getCTCalcChain().getCArray(4).getR());
-        assertEquals("A7", cc.getCTCalcChain().getCArray(5).getR());
-        assertEquals("A8", cc.getCTCalcChain().getCArray(6).getR());
-        assertEquals(40, cc.getCTCalcChain().sizeOfCArray());
-
-        XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
-
-        // Try various ways of changing the formulas
-        // If it stays a formula, chain entry should remain
-        // Otherwise should go
-        sheet.getRow(1).getCell(0).setCellFormula("A1"); // stay
-        sheet.getRow(2).getCell(0).setCellFormula(null); // go
-        sheet.getRow(3).getCell(0).setCellFormula("14"); // stay
-        XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
-
-        sheet.getRow(4).getCell(0).setBlank(); // go
-        XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
-
-        validateCells(sheet);
-        sheet.getRow(5).removeCell(sheet.getRow(5).getCell(0)); // go
-        validateCells(sheet);
-        XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
-
-        sheet.getRow(6).getCell(0).setBlank(); // go
-        XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
-
-        sheet.getRow(7).getCell(0).setCellValue((String) null); // go
-
-        XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
-
-        // Save and check
-        XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1);
-        wb1.close();
-        assertEquals(35, cc.getCTCalcChain().sizeOfCArray());
-
-        cc = wb2.getCalculationChain();
-        assertEquals("A2", cc.getCTCalcChain().getCArray(0).getR());
-        assertEquals("A4", cc.getCTCalcChain().getCArray(1).getR());
-        assertEquals("A9", cc.getCTCalcChain().getCArray(2).getR());
-        wb2.close();
+        try (XSSFWorkbook wb1 = XSSFTestDataSamples
+                .openSampleWorkbook("shared_formulas.xlsx")) {
+            XSSFSheet sheet = wb1.getSheetAt(0);
+
+            XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
+
+            // CalcChain has lots of entries
+            CalculationChain cc = wb1.getCalculationChain();
+            assertEquals("A2", cc.getCTCalcChain().getCArray(0).getR());
+            assertEquals("A3", cc.getCTCalcChain().getCArray(1).getR());
+            assertEquals("A4", cc.getCTCalcChain().getCArray(2).getR());
+            assertEquals("A5", cc.getCTCalcChain().getCArray(3).getR());
+            assertEquals("A6", cc.getCTCalcChain().getCArray(4).getR());
+            assertEquals("A7", cc.getCTCalcChain().getCArray(5).getR());
+            assertEquals("A8", cc.getCTCalcChain().getCArray(6).getR());
+            assertEquals(40, cc.getCTCalcChain().sizeOfCArray());
+
+            XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
+
+            // Try various ways of changing the formulas
+            // If it stays a formula, chain entry should remain
+            // Otherwise should go
+            sheet.getRow(1).getCell(0).setCellFormula("A1"); // stay
+            sheet.getRow(2).getCell(0).setCellFormula(null); // go
+            sheet.getRow(3).getCell(0).setCellFormula("14"); // stay
+            XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
+
+            sheet.getRow(4).getCell(0).setBlank(); // go
+            XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
+
+            validateCells(sheet);
+            sheet.getRow(5).removeCell(sheet.getRow(5).getCell(0)); // go
+            validateCells(sheet);
+            XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
+
+            sheet.getRow(6).getCell(0).setBlank(); // go
+            XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
+
+            sheet.getRow(7).getCell(0).setCellValue((String) null); // go
+
+            XSSFTestDataSamples.writeOutAndReadBack(wb1).close();
+
+            // Save and check
+            try (XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1)) {
+                wb1.close();
+                assertEquals(35, cc.getCTCalcChain().sizeOfCArray());
+
+                cc = wb2.getCalculationChain();
+                assertEquals("A2", cc.getCTCalcChain().getCArray(0).getR());
+                assertEquals("A4", cc.getCTCalcChain().getCArray(1).getR());
+                assertEquals("A9", cc.getCTCalcChain().getCArray(2).getR());
+            }
+        }
     }
 
     @Test
     public void bug49966Row() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples
-                .openSampleWorkbook("shared_formulas.xlsx");
-        XSSFSheet sheet = wb.getSheetAt(0);
-
-        validateCells(sheet);
-        sheet.getRow(5).removeCell(sheet.getRow(5).getCell(0)); // go
-        validateCells(sheet);
+        try (XSSFWorkbook wb = XSSFTestDataSamples
+                .openSampleWorkbook("shared_formulas.xlsx")) {
+            XSSFSheet sheet = wb.getSheetAt(0);
 
-        wb.close();
+            validateCells(sheet);
+            sheet.getRow(5).removeCell(sheet.getRow(5).getCell(0)); // go
+            validateCells(sheet);
+        }
     }
 
     private void validateCells(XSSFSheet sheet) {
@@ -681,18 +676,18 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
     @Test
     public void bug49156() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("49156.xlsx");
-        FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("49156.xlsx")) {
+            FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();
 
-        Sheet sheet = wb.getSheetAt(0);
-        for (Row row : sheet) {
-            for (Cell cell : row) {
-                if (cell.getCellType() == CellType.FORMULA) {
-                    formulaEvaluator.evaluateInCell(cell); // caused NPE on some cells
+            Sheet sheet = wb.getSheetAt(0);
+            for (Row row : sheet) {
+                for (Cell cell : row) {
+                    if (cell.getCellType() == CellType.FORMULA) {
+                        formulaEvaluator.evaluateInCell(cell); // caused NPE on some cells
+                    }
                 }
             }
         }
-        wb.close();
     }
 
     /**
@@ -700,26 +695,25 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug50440And51875() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("NewlineInFormulas.xlsx");
-        Sheet s = wb.getSheetAt(0);
-        Cell c = s.getRow(0).getCell(0);
-
-        assertEquals("SUM(\n1,2\n)", c.getCellFormula());
-        assertEquals(3.0, c.getNumericCellValue(), 0);
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("NewlineInFormulas.xlsx")) {
+            Sheet s = wb.getSheetAt(0);
+            Cell c = s.getRow(0).getCell(0);
 
-        FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();
-        formulaEvaluator.evaluateFormulaCell(c);
+            assertEquals("SUM(\n1,2\n)", c.getCellFormula());
+            assertEquals(3.0, c.getNumericCellValue(), 0);
 
-        assertEquals("SUM(\n1,2\n)", c.getCellFormula());
-        assertEquals(3.0, c.getNumericCellValue(), 0);
+            FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();
+            formulaEvaluator.evaluateFormulaCell(c);
 
-        // For 51875
-        Cell b3 = s.getRow(2).getCell(1);
-        formulaEvaluator.evaluateFormulaCell(b3);
-        assertEquals("B1+B2", b3.getCellFormula()); // The newline is lost for shared formulas
-        assertEquals(3.0, b3.getNumericCellValue(), 0);
+            assertEquals("SUM(\n1,2\n)", c.getCellFormula());
+            assertEquals(3.0, c.getNumericCellValue(), 0);
 
-        wb.close();
+            // For 51875
+            Cell b3 = s.getRow(2).getCell(1);
+            formulaEvaluator.evaluateFormulaCell(b3);
+            assertEquals("B1+B2", b3.getCellFormula()); // The newline is lost for shared formulas
+            assertEquals(3.0, b3.getNumericCellValue(), 0);
+        }
     }
 
     /**
@@ -789,31 +783,30 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug50299() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("50299.xlsx");
-
-        // Check all the colours
-        for (int sn = 0; sn < wb.getNumberOfSheets(); sn++) {
-            Sheet s = wb.getSheetAt(sn);
-            for (Row r : s) {
-                for (Cell c : r) {
-                    CellStyle cs = c.getCellStyle();
-                    if (cs != null) {
-                        cs.getFillForegroundColor();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("50299.xlsx")) {
+
+            // Check all the colours
+            for (int sn = 0; sn < wb.getNumberOfSheets(); sn++) {
+                Sheet s = wb.getSheetAt(sn);
+                for (Row r : s) {
+                    for (Cell c : r) {
+                        CellStyle cs = c.getCellStyle();
+                        if (cs != null) {
+                            cs.getFillForegroundColor();
+                        }
                     }
                 }
             }
-        }
-
-        // Check one bit in detail
-        // Check that we get back foreground=0 for the theme colours,
-        //  and background=64 for the auto colouring
-        Sheet s = wb.getSheetAt(0);
-        assertEquals(0, s.getRow(0).getCell(8).getCellStyle().getFillForegroundColor());
-        assertEquals(64, s.getRow(0).getCell(8).getCellStyle().getFillBackgroundColor());
-        assertEquals(0, s.getRow(1).getCell(8).getCellStyle().getFillForegroundColor());
-        assertEquals(64, s.getRow(1).getCell(8).getCellStyle().getFillBackgroundColor());
 
-        wb.close();
+            // Check one bit in detail
+            // Check that we get back foreground=0 for the theme colours,
+            //  and background=64 for the auto colouring
+            Sheet s = wb.getSheetAt(0);
+            assertEquals(0, s.getRow(0).getCell(8).getCellStyle().getFillForegroundColor());
+            assertEquals(64, s.getRow(0).getCell(8).getCellStyle().getFillBackgroundColor());
+            assertEquals(0, s.getRow(1).getCell(8).getCellStyle().getFillForegroundColor());
+            assertEquals(64, s.getRow(1).getCell(8).getCellStyle().getFillBackgroundColor());
+        }
     }
 
     /**
@@ -821,21 +814,21 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug50786() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50786-indexed_colours.xlsx");
-        XSSFSheet s = wb.getSheetAt(0);
-        XSSFRow r = s.getRow(2);
-
-        // Check we have the right cell
-        XSSFCell c = r.getCell(1);
-        assertEquals("test\u00a0", c.getRichStringCellValue().getString());
-
-        // It should be light green
-        XSSFCellStyle cs = c.getCellStyle();
-        assertEquals(42, cs.getFillForegroundColor());
-        assertEquals(42, cs.getFillForegroundColorColor().getIndexed());
-        assertNotNull(cs.getFillForegroundColorColor().getRGB());
-        assertEquals("FFCCFFCC", cs.getFillForegroundColorColor().getARGBHex());
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50786-indexed_colours.xlsx")) {
+            XSSFSheet s = wb.getSheetAt(0);
+            XSSFRow r = s.getRow(2);
+
+            // Check we have the right cell
+            XSSFCell c = r.getCell(1);
+            assertEquals("test\u00a0", c.getRichStringCellValue().getString());
+
+            // It should be light green
+            XSSFCellStyle cs = c.getCellStyle();
+            assertEquals(42, cs.getFillForegroundColor());
+            assertEquals(42, cs.getFillForegroundColorColor().getIndexed());
+            assertNotNull(cs.getFillForegroundColorColor().getRGB());
+            assertEquals("FFCCFFCC", cs.getFillForegroundColorColor().getARGBHex());
+        }
     }
 
     /**
@@ -844,27 +837,27 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug50846() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50846-border_colours.xlsx");
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50846-border_colours.xlsx")) {
 
-        XSSFSheet sheet = wb.getSheetAt(0);
-        XSSFRow row = sheet.getRow(0);
+            XSSFSheet sheet = wb.getSheetAt(0);
+            XSSFRow row = sheet.getRow(0);
 
-        // Border from a theme, brown
-        XSSFCell cellT = row.getCell(0);
-        XSSFCellStyle styleT = cellT.getCellStyle();
-        XSSFColor colorT = styleT.getBottomBorderXSSFColor();
+            // Border from a theme, brown
+            XSSFCell cellT = row.getCell(0);
+            XSSFCellStyle styleT = cellT.getCellStyle();
+            XSSFColor colorT = styleT.getBottomBorderXSSFColor();
 
-        assertEquals(5, colorT.getTheme());
-        assertEquals("FFC0504D", colorT.getARGBHex());
+            assertEquals(5, colorT.getTheme());
+            assertEquals("FFC0504D", colorT.getARGBHex());
 
-        // Border from a style direct, red
-        XSSFCell cellS = row.getCell(1);
-        XSSFCellStyle styleS = cellS.getCellStyle();
-        XSSFColor colorS = styleS.getBottomBorderXSSFColor();
+            // Border from a style direct, red
+            XSSFCell cellS = row.getCell(1);
+            XSSFCellStyle styleS = cellS.getCellStyle();
+            XSSFColor colorS = styleS.getBottomBorderXSSFColor();
 
-        assertEquals(0, colorS.getTheme());
-        assertEquals("FFFF0000", colorS.getARGBHex());
-        wb.close();
+            assertEquals(0, colorS.getTheme());
+            assertEquals("FFFF0000", colorS.getARGBHex());
+        }
     }
 
     /**
@@ -874,29 +867,29 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug50784() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50784-font_theme_colours.xlsx");
-        XSSFSheet s = wb.getSheetAt(0);
-        XSSFRow r = s.getRow(0);
-
-        // Column 1 has a font with regular colours
-        XSSFCell cr = r.getCell(1);
-        XSSFFont fr = wb.getFontAt(cr.getCellStyle().getFontIndexAsInt());
-        XSSFColor colr = fr.getXSSFColor();
-        // No theme, has colours
-        assertEquals(0, colr.getTheme());
-        assertNotNull(colr.getRGB());
-
-        // Column 0 has a font with colours from a theme
-        XSSFCell ct = r.getCell(0);
-        XSSFFont ft = wb.getFontAt(ct.getCellStyle().getFontIndexAsInt());
-        XSSFColor colt = ft.getXSSFColor();
-        // Has a theme, which has the colours on it
-        assertEquals(9, colt.getTheme());
-        XSSFColor themeC = wb.getTheme().getThemeColor(colt.getTheme());
-        assertNotNull(themeC.getRGB());
-        assertNotNull(colt.getRGB());
-        assertEquals(themeC.getARGBHex(), colt.getARGBHex()); // The same colour
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50784-font_theme_colours.xlsx")) {
+            XSSFSheet s = wb.getSheetAt(0);
+            XSSFRow r = s.getRow(0);
+
+            // Column 1 has a font with regular colours
+            XSSFCell cr = r.getCell(1);
+            XSSFFont fr = wb.getFontAt(cr.getCellStyle().getFontIndexAsInt());
+            XSSFColor colr = fr.getXSSFColor();
+            // No theme, has colours
+            assertEquals(0, colr.getTheme());
+            assertNotNull(colr.getRGB());
+
+            // Column 0 has a font with colours from a theme
+            XSSFCell ct = r.getCell(0);
+            XSSFFont ft = wb.getFontAt(ct.getCellStyle().getFontIndexAsInt());
+            XSSFColor colt = ft.getXSSFColor();
+            // Has a theme, which has the colours on it
+            assertEquals(9, colt.getTheme());
+            XSSFColor themeC = wb.getTheme().getThemeColor(colt.getTheme());
+            assertNotNull(themeC.getRGB());
+            assertNotNull(colt.getRGB());
+            assertEquals(themeC.getARGBHex(), colt.getARGBHex()); // The same colour
+        }
     }
 
     /**
@@ -1247,65 +1240,64 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug51222() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("51222.xlsx");
-        XSSFSheet s = wb.getSheetAt(0);
-
-        XSSFCell cA4_EEECE1 = s.getRow(3).getCell(0);
-        XSSFCell cA5_1F497D = s.getRow(4).getCell(0);
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("51222.xlsx")) {
+            XSSFSheet s = wb.getSheetAt(0);
 
-        // Check the text
-        assertEquals("A4", cA4_EEECE1.getRichStringCellValue().getString());
-        assertEquals("A5", cA5_1F497D.getRichStringCellValue().getString());
+            XSSFCell cA4_EEECE1 = s.getRow(3).getCell(0);
+            XSSFCell cA5_1F497D = s.getRow(4).getCell(0);
 
-        // Check the styles assigned to them
-        assertEquals(4, cA4_EEECE1.getCTCell().getS());
-        assertEquals(5, cA5_1F497D.getCTCell().getS());
+            // Check the text
+            assertEquals("A4", cA4_EEECE1.getRichStringCellValue().getString());
+            assertEquals("A5", cA5_1F497D.getRichStringCellValue().getString());
 
-        // Check we look up the correct style
-        assertEquals(4, cA4_EEECE1.getCellStyle().getIndex());
-        assertEquals(5, cA5_1F497D.getCellStyle().getIndex());
+            // Check the styles assigned to them
+            assertEquals(4, cA4_EEECE1.getCTCell().getS());
+            assertEquals(5, cA5_1F497D.getCTCell().getS());
 
-        // Check the fills on them at the low level
-        assertEquals(5, cA4_EEECE1.getCellStyle().getCoreXf().getFillId());
-        assertEquals(6, cA5_1F497D.getCellStyle().getCoreXf().getFillId());
+            // Check we look up the correct style
+            assertEquals(4, cA4_EEECE1.getCellStyle().getIndex());
+            assertEquals(5, cA5_1F497D.getCellStyle().getIndex());
 
-        // These should reference themes 2 and 3
-        assertEquals(2, wb.getStylesSource().getFillAt(5).getCTFill().getPatternFill().getFgColor().getTheme());
-        assertEquals(3, wb.getStylesSource().getFillAt(6).getCTFill().getPatternFill().getFgColor().getTheme());
+            // Check the fills on them at the low level
+            assertEquals(5, cA4_EEECE1.getCellStyle().getCoreXf().getFillId());
+            assertEquals(6, cA5_1F497D.getCellStyle().getCoreXf().getFillId());
 
-        // Ensure we get the right colours for these themes
-        // TODO fix
-        // assertEquals("FFEEECE1", wb.getTheme().getThemeColor(2).getARGBHex());
-        // assertEquals("FF1F497D", wb.getTheme().getThemeColor(3).getARGBHex());
+            // These should reference themes 2 and 3
+            assertEquals(2, wb.getStylesSource().getFillAt(5).getCTFill().getPatternFill().getFgColor().getTheme());
+            assertEquals(3, wb.getStylesSource().getFillAt(6).getCTFill().getPatternFill().getFgColor().getTheme());
 
-        // Finally check the colours on the styles
-        // TODO fix
-        // assertEquals("FFEEECE1", cA4_EEECE1.getCellStyle().getFillForegroundXSSFColor().getARGBHex());
-        // assertEquals("FF1F497D", cA5_1F497D.getCellStyle().getFillForegroundXSSFColor().getARGBHex());
+            // Ensure we get the right colours for these themes
+            // TODO fix
+            // assertEquals("FFEEECE1", wb.getTheme().getThemeColor(2).getARGBHex());
+            // assertEquals("FF1F497D", wb.getTheme().getThemeColor(3).getARGBHex());
 
-        wb.close();
+            // Finally check the colours on the styles
+            // TODO fix
+            // assertEquals("FFEEECE1", cA4_EEECE1.getCellStyle().getFillForegroundXSSFColor().getARGBHex());
+            // assertEquals("FF1F497D", cA5_1F497D.getCellStyle().getFillForegroundXSSFColor().getARGBHex());
+        }
     }
 
     @Test
     public void bug51470() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("51470.xlsx");
-        XSSFSheet sh0 = wb.getSheetAt(0);
-        XSSFSheet sh1 = wb.cloneSheet(0);
-        List<RelationPart> rels0 = sh0.getRelationParts();
-        List<RelationPart> rels1 = sh1.getRelationParts();
-        assertEquals(1, rels0.size());
-        assertEquals(1, rels1.size());
-
-        PackageRelationship pr0 = rels0.get(0).getRelationship();
-        PackageRelationship pr1 = rels1.get(0).getRelationship();
-
-        assertEquals(pr0.getTargetMode(), pr1.getTargetMode());
-        assertEquals(pr0.getTargetURI(), pr1.getTargetURI());
-        POIXMLDocumentPart doc0 = rels0.get(0).getDocumentPart();
-        POIXMLDocumentPart doc1 = rels1.get(0).getDocumentPart();
-
-        assertEquals(doc0, doc1);
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("51470.xlsx")) {
+            XSSFSheet sh0 = wb.getSheetAt(0);
+            XSSFSheet sh1 = wb.cloneSheet(0);
+            List<RelationPart> rels0 = sh0.getRelationParts();
+            List<RelationPart> rels1 = sh1.getRelationParts();
+            assertEquals(1, rels0.size());
+            assertEquals(1, rels1.size());
+
+            PackageRelationship pr0 = rels0.get(0).getRelationship();
+            PackageRelationship pr1 = rels1.get(0).getRelationship();
+
+            assertEquals(pr0.getTargetMode(), pr1.getTargetMode());
+            assertEquals(pr0.getTargetURI(), pr1.getTargetURI());
+            POIXMLDocumentPart doc0 = rels0.get(0).getDocumentPart();
+            POIXMLDocumentPart doc1 = rels1.get(0).getDocumentPart();
+
+            assertEquals(doc0, doc1);
+        }
     }
 
     /**
@@ -1379,19 +1371,19 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug51963() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("51963.xlsx");
-        Sheet sheet = wb.getSheetAt(0);
-        assertEquals("Abc,1", sheet.getSheetName());
-
-        Name name = wb.getName("Intekon.ProdCodes");
-        assertEquals("'Abc,1'!$A$1:$A$2", name.getRefersToFormula());
-
-        AreaReference ref = wb.getCreationHelper().createAreaReference(name.getRefersToFormula());
-        assertEquals(0, ref.getFirstCell().getRow());
-        assertEquals(0, ref.getFirstCell().getCol());
-        assertEquals(1, ref.getLastCell().getRow());
-        assertEquals(0, ref.getLastCell().getCol());
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("51963.xlsx")) {
+            Sheet sheet = wb.getSheetAt(0);
+            assertEquals("Abc,1", sheet.getSheetName());
+
+            Name name = wb.getName("Intekon.ProdCodes");
+            assertEquals("'Abc,1'!$A$1:$A$2", name.getRefersToFormula());
+
+            AreaReference ref = wb.getCreationHelper().createAreaReference(name.getRefersToFormula());
+            assertEquals(0, ref.getFirstCell().getRow());
+            assertEquals(0, ref.getFirstCell().getCol());
+            assertEquals(1, ref.getLastCell().getRow());
+            assertEquals(0, ref.getLastCell().getCol());
+        }
     }
 
     /**
@@ -1400,29 +1392,29 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug48703() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48703.xlsx");
-        XSSFSheet sheet = wb.getSheetAt(0);
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48703.xlsx")) {
+            XSSFSheet sheet = wb.getSheetAt(0);
 
-        // Contains two forms, one with a range and one a list
-        XSSFRow r1 = sheet.getRow(0);
-        XSSFRow r2 = sheet.getRow(1);
-        XSSFCell c1 = r1.getCell(1);
-        XSSFCell c2 = r2.getCell(1);
+            // Contains two forms, one with a range and one a list
+            XSSFRow r1 = sheet.getRow(0);
+            XSSFRow r2 = sheet.getRow(1);
+            XSSFCell c1 = r1.getCell(1);
+            XSSFCell c2 = r2.getCell(1);
 
-        assertEquals(20.0, c1.getNumericCellValue(), 0);
-        assertEquals("SUM(Sheet1!C1,Sheet2!C1,Sheet3!C1,Sheet4!C1)", c1.getCellFormula());
+            assertEquals(20.0, c1.getNumericCellValue(), 0);
+            assertEquals("SUM(Sheet1!C1,Sheet2!C1,Sheet3!C1,Sheet4!C1)", c1.getCellFormula());
 
-        assertEquals(20.0, c2.getNumericCellValue(), 0);
-        assertEquals("SUM(Sheet1:Sheet4!C1)", c2.getCellFormula());
+            assertEquals(20.0, c2.getNumericCellValue(), 0);
+            assertEquals("SUM(Sheet1:Sheet4!C1)", c2.getCellFormula());
 
-        // Try evaluating both
-        XSSFFormulaEvaluator eval = new XSSFFormulaEvaluator(wb);
-        eval.evaluateFormulaCell(c1);
-        eval.evaluateFormulaCell(c2);
+            // Try evaluating both
+            XSSFFormulaEvaluator eval = new XSSFFormulaEvaluator(wb);
+            eval.evaluateFormulaCell(c1);
+            eval.evaluateFormulaCell(c2);
 
-        assertEquals(20.0, c1.getNumericCellValue(), 0);
-        assertEquals(20.0, c2.getNumericCellValue(), 0);
-        wb.close();
+            assertEquals(20.0, c1.getNumericCellValue(), 0);
+            assertEquals(20.0, c2.getNumericCellValue(), 0);
+        }
     }
 
     /**
@@ -1430,31 +1422,31 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug51710() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("51710.xlsx");
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("51710.xlsx")) {
 
-        final String[] columns = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"};
-        final int rowMax = 500; // bug triggers on row index 59
+            final String[] columns = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"};
+            final int rowMax = 500; // bug triggers on row index 59
 
-        Sheet sheet = wb.getSheetAt(0);
+            Sheet sheet = wb.getSheetAt(0);
 
 
-        // go through all formula cells
-        for (int rInd = 2; rInd <= rowMax; rInd++) {
-            Row row = sheet.getRow(rInd);
+            // go through all formula cells
+            for (int rInd = 2; rInd <= rowMax; rInd++) {
+                Row row = sheet.getRow(rInd);
 
-            for (int cInd = 1; cInd <= 12; cInd++) {
-                Cell cell = row.getCell(cInd);
-                String formula = cell.getCellFormula();
-                CellReference ref = new CellReference(cell);
+                for (int cInd = 1; cInd <= 12; cInd++) {
+                    Cell cell = row.getCell(cInd);
+                    String formula = cell.getCellFormula();
+                    CellReference ref = new CellReference(cell);
 
-                //simulate correct answer
-                String correct = "$A" + (rInd + 1) + "*" + columns[cInd] + "$2";
+                    //simulate correct answer
+                    String correct = "$A" + (rInd + 1) + "*" + columns[cInd] + "$2";
 
-                assertEquals("Incorrect formula in " + ref.formatAsString(), correct, formula);
-            }
+                    assertEquals("Incorrect formula in " + ref.formatAsString(), correct, formula);
+                }
 
+            }
         }
-        wb.close();
     }
 
     /**
@@ -1462,35 +1454,35 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug5301() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("53101.xlsx");
-        FormulaEvaluator evaluator =
-                wb.getCreationHelper().createFormulaEvaluator();
-        // A1: SUM(B1: IZ1)
-        double a1Value =
-                evaluator.evaluate(wb.getSheetAt(0).getRow(0).getCell(0)).getNumberValue();
-
-        // Assert
-        assertEquals(259.0, a1Value, 0.0);
-
-        // KY: SUM(B1: IZ1)
-        /*double ky1Value =*/
-        assertEquals(259.0, evaluator.evaluate(wb.getSheetAt(0).getRow(0).getCell(310)).getNumberValue(), 0.0001);
-
-        // Assert
-        assertEquals(259.0, a1Value, 0.0);
-        wb.close();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("53101.xlsx")) {
+            FormulaEvaluator evaluator =
+                    wb.getCreationHelper().createFormulaEvaluator();
+            // A1: SUM(B1: IZ1)
+            double a1Value =
+                    evaluator.evaluate(wb.getSheetAt(0).getRow(0).getCell(0)).getNumberValue();
+
+            // Assert
+            assertEquals(259.0, a1Value, 0.0);
+
+            // KY: SUM(B1: IZ1)
+            /*double ky1Value =*/
+            assertEquals(259.0, evaluator.evaluate(wb.getSheetAt(0).getRow(0).getCell(310)).getNumberValue(), 0.0001);
+
+            // Assert
+            assertEquals(259.0, a1Value, 0.0);
+        }
     }
 
     @Test
     public void bug54436() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("54436.xlsx");
-        if (!WorkbookEvaluator.getSupportedFunctionNames().contains("GETPIVOTDATA")) {
-            Function func = (args, srcRowIndex, srcColumnIndex) -> ErrorEval.NA;
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("54436.xlsx")) {
+            if (!WorkbookEvaluator.getSupportedFunctionNames().contains("GETPIVOTDATA")) {
+                Function func = (args, srcRowIndex, srcColumnIndex) -> ErrorEval.NA;
 
-            WorkbookEvaluator.registerFunction("GETPIVOTDATA", func);
+                WorkbookEvaluator.registerFunction("GETPIVOTDATA", func);
+            }
+            wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
         }
-        wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
-        wb.close();
     }
 
     /**
@@ -1510,33 +1502,33 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
     public void bug55692_stream() throws IOException {
         // Directly on a Stream, will go via POIFS and spot it's
         //  actually a .xlsx file encrypted with the default password, and open
-        Workbook wb = WorkbookFactory.create(
-                POIDataSamples.getPOIFSInstance().openResourceAsStream("protect.xlsx"));
-        assertNotNull(wb);
-        assertEquals(3, wb.getNumberOfSheets());
-        wb.close();
+        try (Workbook wb = WorkbookFactory.create(
+                POIDataSamples.getPOIFSInstance().openResourceAsStream("protect.xlsx"))) {
+            assertNotNull(wb);
+            assertEquals(3, wb.getNumberOfSheets());
+        }
     }
 
     @Test
     public void bug55692_poifs2() throws IOException {
         // Via a POIFSFileSystem, will spot it's actually a .xlsx file
         //  encrypted with the default password, and open
-        POIFSFileSystem fsNP = new POIFSFileSystem(
-                POIDataSamples.getPOIFSInstance().openResourceAsStream("protect.xlsx"));
-        Workbook wb = WorkbookFactory.create(fsNP);
-        assertNotNull(wb);
-        assertEquals(3, wb.getNumberOfSheets());
-        wb.close();
-        fsNP.close();
+        try (POIFSFileSystem fsNP = new POIFSFileSystem(
+                POIDataSamples.getPOIFSInstance().openResourceAsStream("protect.xlsx"))) {
+            Workbook wb = WorkbookFactory.create(fsNP);
+            assertNotNull(wb);
+            assertEquals(3, wb.getNumberOfSheets());
+            wb.close();
+        }
     }
 
     @Test
     public void bug53282() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("53282b.xlsx");
-        Cell c = wb.getSheetAt(0).getRow(1).getCell(0);
-        assertEquals("#@_#", c.getStringCellValue());
-        assertEquals("http://invalid.uri", c.getHyperlink().getAddress());
-        wb.close();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("53282b.xlsx")) {
+            Cell c = wb.getSheetAt(0).getRow(1).getCell(0);
+            assertEquals("#@_#", c.getStringCellValue());
+            assertEquals("http://invalid.uri", c.getHyperlink().getAddress());
+        }
     }
 
     /**
@@ -1546,24 +1538,24 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug56278() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56278.xlsx");
-        assertEquals(0, wb.getSheetIndex("Market Rates"));
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56278.xlsx")) {
+            assertEquals(0, wb.getSheetIndex("Market Rates"));
 
-        // Save and re-check
-        Workbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        assertEquals(0, nwb.getSheetIndex("Market Rates"));
-        nwb.close();
-        wb.close();
+            // Save and re-check
+            Workbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
+            assertEquals(0, nwb.getSheetIndex("Market Rates"));
+            nwb.close();
+        }
     }
 
     @Test
     public void bug56315() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56315.xlsx");
-        Cell c = wb.getSheetAt(0).getRow(1).getCell(0);
-        CellValue cv = wb.getCreationHelper().createFormulaEvaluator().evaluate(c);
-        double rounded = cv.getNumberValue();
-        assertEquals(0.1, rounded, 0.0);
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56315.xlsx")) {
+            Cell c = wb.getSheetAt(0).getRow(1).getCell(0);
+            CellValue cv = wb.getCreationHelper().createFormulaEvaluator().evaluate(c);
+            double rounded = cv.getNumberValue();
+            assertEquals(0.1, rounded, 0.0);
+        }
     }
 
     @Test
@@ -1613,17 +1605,16 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
         TimeZone tz = LocaleUtil.getUserTimeZone();
         LocaleUtil.setUserTimeZone(TimeZone.getTimeZone("CET"));
         try {
-            Workbook wb = XSSFTestDataSamples.openSampleWorkbook("54034.xlsx");
-            Sheet sheet = wb.getSheet("Sheet1");
-            Row row = sheet.getRow(1);
-            Cell cell = row.getCell(2);
-            assertTrue(DateUtil.isCellDateFormatted(cell));
+            try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("54034.xlsx")) {
+                Sheet sheet = wb.getSheet("Sheet1");
+                Row row = sheet.getRow(1);
+                Cell cell = row.getCell(2);
+                assertTrue(DateUtil.isCellDateFormatted(cell));
 
-            DataFormatter fmt = new DataFormatter();
-            assertEquals("yyyy\\-mm\\-dd\\Thh:mm", cell.getCellStyle().getDataFormatString());
-            assertEquals("2012-08-08T22:59", fmt.formatCellValue(cell));
-
-            wb.close();
+                DataFormatter fmt = new DataFormatter();
+                assertEquals("yyyy\\-mm\\-dd\\Thh:mm", cell.getCellStyle().getDataFormatString());
+                assertEquals("2012-08-08T22:59", fmt.formatCellValue(cell));
+            }
         } finally {
             LocaleUtil.setUserTimeZone(tz);
         }
@@ -1632,21 +1623,21 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
     @Test
     public void testBug53798XLSX() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53798_shiftNegative_TMPL.xlsx");
-        File xlsOutput = TempFile.createTempFile("testBug53798", ".xlsx");
-        bug53798Work(wb, xlsOutput);
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53798_shiftNegative_TMPL.xlsx")) {
+            File xlsOutput = TempFile.createTempFile("testBug53798", ".xlsx");
+            bug53798Work(wb, xlsOutput);
+        }
     }
 
     @Ignore("Shifting rows is not yet implemented in SXSSFSheet")
     @Test
     public void testBug53798XLSXStream() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53798_shiftNegative_TMPL.xlsx");
-        File xlsOutput = TempFile.createTempFile("testBug53798", ".xlsx");
-        SXSSFWorkbook wb2 = new SXSSFWorkbook(wb);
-        bug53798Work(wb2, xlsOutput);
-        wb2.close();
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53798_shiftNegative_TMPL.xlsx")) {
+            File xlsOutput = TempFile.createTempFile("testBug53798", ".xlsx");
+            SXSSFWorkbook wb2 = new SXSSFWorkbook(wb);
+            bug53798Work(wb2, xlsOutput);
+            wb2.close();
+        }
     }
 
     @Test
@@ -1662,17 +1653,17 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void testBug56420SumIfNPE() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56420.xlsx");
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56420.xlsx")) {
 
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
 
-        Sheet sheet = wb.getSheetAt(0);
-        Row r = sheet.getRow(2);
-        Cell c = r.getCell(2);
-        assertEquals("SUMIF($A$1:$A$4,A3,$B$1:$B$4)", c.getCellFormula());
-        Cell eval = evaluator.evaluateInCell(c);
-        assertEquals(0.0, eval.getNumericCellValue(), 0.0001);
-        wb.close();
+            Sheet sheet = wb.getSheetAt(0);
+            Row r = sheet.getRow(2);
+            Cell c = r.getCell(2);
+            assertEquals("SUMIF($A$1:$A$4,A3,$B$1:$B$4)", c.getCellFormula());
+            Cell eval = evaluator.evaluateInCell(c);
+            assertEquals(0.0, eval.getNumericCellValue(), 0.0001);
+        }
     }
 
     private void bug53798Work(Workbook wb, File xlsOutput) throws IOException {
@@ -1724,24 +1715,24 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug56702() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56702.xlsx");
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56702.xlsx")) {
 
-        Sheet sheet = wb.getSheetAt(0);
+            Sheet sheet = wb.getSheetAt(0);
 
-        // Get wrong cell by row 8 & column 7
-        Cell cell = sheet.getRow(8).getCell(7);
-        assertEquals(CellType.NUMERIC, cell.getCellType());
+            // Get wrong cell by row 8 & column 7
+            Cell cell = sheet.getRow(8).getCell(7);
+            assertEquals(CellType.NUMERIC, cell.getCellType());
 
-        // Check the value - will be zero as it is <c><v/></c>
-        assertEquals(0.0, cell.getNumericCellValue(), 0.001);
+            // Check the value - will be zero as it is <c><v/></c>
+            assertEquals(0.0, cell.getNumericCellValue(), 0.001);
 
-        // Try to format
-        DataFormatter formatter = new DataFormatter();
-        formatter.formatCellValue(cell);
+            // Try to format
+            DataFormatter formatter = new DataFormatter();
+            formatter.formatCellValue(cell);
 
-        // Check the formatting
-        assertEquals("0", formatter.formatCellValue(cell));
-        wb.close();
+            // Check the formatting
+            assertEquals("0", formatter.formatCellValue(cell));
+        }
     }
 
     /**
@@ -1753,36 +1744,36 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug56737() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56737.xlsx");
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56737.xlsx")) {
 
-        // Check the named range definitions
-        Name nSheetScope = wb.getName("NR_To_A1");
-        Name nWBScope = wb.getName("NR_Global_B2");
+            // Check the named range definitions
+            Name nSheetScope = wb.getName("NR_To_A1");
+            Name nWBScope = wb.getName("NR_Global_B2");
 
-        assertNotNull(nSheetScope);
-        assertNotNull(nWBScope);
+            assertNotNull(nSheetScope);
+            assertNotNull(nWBScope);
 
-        assertEquals("Defines!$A$1", nSheetScope.getRefersToFormula());
-        assertEquals("Defines!$B$2", nWBScope.getRefersToFormula());
+            assertEquals("Defines!$A$1", nSheetScope.getRefersToFormula());
+            assertEquals("Defines!$B$2", nWBScope.getRefersToFormula());
 
-        // Check the different kinds of formulas
-        Sheet s = wb.getSheetAt(0);
-        Cell cRefSName = s.getRow(1).getCell(3);
-        Cell cRefWName = s.getRow(2).getCell(3);
+            // Check the different kinds of formulas
+            Sheet s = wb.getSheetAt(0);
+            Cell cRefSName = s.getRow(1).getCell(3);
+            Cell cRefWName = s.getRow(2).getCell(3);
 
-        assertEquals("Defines!NR_To_A1", cRefSName.getCellFormula());
-        // Note the formula, as stored in the file, has the external name index not filename
-        // TODO Provide a way to get the one with the filename
-        assertEquals("[0]!NR_Global_B2", cRefWName.getCellFormula());
+            assertEquals("Defines!NR_To_A1", cRefSName.getCellFormula());
+            // Note the formula, as stored in the file, has the external name index not filename
+            // TODO Provide a way to get the one with the filename
+            assertEquals("[0]!NR_Global_B2", cRefWName.getCellFormula());
 
-        // Try to evaluate them
-        FormulaEvaluator eval = wb.getCreationHelper().createFormulaEvaluator();
-        assertEquals("Test A1", eval.evaluate(cRefSName).getStringValue());
-        assertEquals(142, (int) eval.evaluate(cRefWName).getNumberValue());
+            // Try to evaluate them
+            FormulaEvaluator eval = wb.getCreationHelper().createFormulaEvaluator();
+            assertEquals("Test A1", eval.evaluate(cRefSName).getStringValue());
+            assertEquals(142, (int) eval.evaluate(cRefWName).getNumberValue());
 
-        // Try to evaluate everything
-        eval.evaluateAll();
-        wb.close();
+            // Try to evaluate everything
+            eval.evaluateAll();
+        }
     }
 
     private void saveAndReloadReport(Workbook wb, File outFile) throws IOException {
@@ -1897,23 +1888,23 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug56502() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56502.xlsx");
-        Sheet sheet = wb.getSheetAt(0);
-
-        Cell cFunc = sheet.getRow(3).getCell(0);
-        assertEquals("[1]!LUCANET(\"Ist\")", cFunc.getCellFormula());
-        Cell cRef = sheet.getRow(3).createCell(1);
-        cRef.setCellFormula("A3");
-
-        // Shift it down one row
-        sheet.shiftRows(1, sheet.getLastRowNum(), 1);
-
-        // Check the new formulas: Function won't change, Reference will
-        cFunc = sheet.getRow(4).getCell(0);
-        assertEquals("[1]!LUCANET(\"Ist\")", cFunc.getCellFormula());
-        cRef = sheet.getRow(4).getCell(1);
-        assertEquals("A4", cRef.getCellFormula());
-        wb.close();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56502.xlsx")) {
+            Sheet sheet = wb.getSheetAt(0);
+
+            Cell cFunc = sheet.getRow(3).getCell(0);
+            assertEquals("[1]!LUCANET(\"Ist\")", cFunc.getCellFormula());
+            Cell cRef = sheet.getRow(3).createCell(1);
+            cRef.setCellFormula("A3");
+
+            // Shift it down one row
+            sheet.shiftRows(1, sheet.getLastRowNum(), 1);
+
+            // Check the new formulas: Function won't change, Reference will
+            cFunc = sheet.getRow(4).getCell(0);
+            assertEquals("[1]!LUCANET(\"Ist\")", cFunc.getCellFormula());
+            cRef = sheet.getRow(4).getCell(1);
+            assertEquals("A4", cRef.getCellFormula());
+        }
     }
 
     @Test
@@ -1945,9 +1936,9 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
         }
 
         // Check we can still parse valid files after all that
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("sample.xlsx");
-        assertEquals(3, wb.getNumberOfSheets());
-        wb.close();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("sample.xlsx")) {
+            assertEquals(3, wb.getNumberOfSheets());
+        }
     }
 
     @Test
@@ -1985,15 +1976,15 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug57176() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("57176.xlsx");
-        CTDefinedNames definedNames = wb.getCTWorkbook().getDefinedNames();
-        List<CTDefinedName> definedNameList = definedNames.getDefinedNameList();
-        for (CTDefinedName defName : definedNameList) {
-            assertNotNull(defName.getName());
-            assertNotNull(defName.getStringValue());
-        }
-        assertEquals("TestDefinedName", definedNameList.get(0).getName());
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("57176.xlsx")) {
+            CTDefinedNames definedNames = wb.getCTWorkbook().getDefinedNames();
+            List<CTDefinedName> definedNameList = definedNames.getDefinedNameList();
+            for (CTDefinedName defName : definedNameList) {
+                assertNotNull(defName.getName());
+                assertNotNull(defName.getStringValue());
+            }
+            assertEquals("TestDefinedName", definedNameList.get(0).getName());
+        }
     }
 
     /**
@@ -2045,15 +2036,15 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
     @Test
     public void testBug57196() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("57196.xlsx");
-        Sheet sheet = wb.getSheet("Feuil1");
-        Row mod = sheet.getRow(1);
-        mod.getCell(1).setCellValue(3);
-        HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("57196.xlsx")) {
+            Sheet sheet = wb.getSheet("Feuil1");
+            Row mod = sheet.getRow(1);
+            mod.getCell(1).setCellValue(3);
+            HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
 //        FileOutputStream fileOutput = new FileOutputStream("/tmp/57196.xlsx");
 //        wb.write(fileOutput);
 //        fileOutput.close();
-        wb.close();
+        }
     }
 
     @Test
@@ -2232,22 +2223,21 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug57535() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("57535.xlsx");
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        evaluator.clearAllCachedResultValues();
-
-        Sheet sheet = wb.getSheet("Sheet1");
-        Cell cell = sheet.getRow(5).getCell(4);
-        assertEquals(CellType.FORMULA, cell.getCellType());
-        assertEquals("E4+E5", cell.getCellFormula());
-
-        CellValue value = evaluator.evaluate(cell);
-        assertEquals(CellType.ERROR, value.getCellType());
-        assertEquals(-60, value.getErrorValue());
-        assertEquals("~CIRCULAR~REF~", FormulaError.forInt(value.getErrorValue()).getString());
-        assertEquals("CIRCULAR_REF", FormulaError.forInt(value.getErrorValue()).toString());
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("57535.xlsx")) {
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            evaluator.clearAllCachedResultValues();
 
-        wb.close();
+            Sheet sheet = wb.getSheet("Sheet1");
+            Cell cell = sheet.getRow(5).getCell(4);
+            assertEquals(CellType.FORMULA, cell.getCellType());
+            assertEquals("E4+E5", cell.getCellFormula());
+
+            CellValue value = evaluator.evaluate(cell);
+            assertEquals(CellType.ERROR, value.getCellType());
+            assertEquals(-60, value.getErrorValue());
+            assertEquals("~CIRCULAR~REF~", FormulaError.forInt(value.getErrorValue()).getString());
+            assertEquals("CIRCULAR_REF", FormulaError.forInt(value.getErrorValue()).toString());
+        }
     }
 
 
@@ -2379,18 +2369,17 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
     @Test
     @Ignore("XMLBeans namespace mis-match on ooxml-strict files")
     public void test57699() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("sample.strict.xlsx");
-        assertEquals(3, wb.getNumberOfSheets());
-        // TODO Check sheet contents
-        // TODO Check formula evaluation
-
-        XSSFWorkbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        assertEquals(3, wbBack.getNumberOfSheets());
-        // TODO Re-check sheet contents
-        // TODO Re-check formula evaluation
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("sample.strict.xlsx")) {
+            assertEquals(3, wb.getNumberOfSheets());
+            // TODO Check sheet contents
+            // TODO Check formula evaluation
 
-        wb.close();
-        wbBack.close();
+            try (XSSFWorkbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb)) {
+                assertEquals(3, wbBack.getNumberOfSheets());
+                // TODO Re-check sheet contents
+                // TODO Re-check formula evaluation
+            }
+        }
     }
 
     @Test
@@ -2548,64 +2537,64 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
     }
 
     private void runTest56574(boolean createRow) throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56574.xlsx");
-
-        Sheet sheet = wb.getSheet("Func");
-        assertNotNull(sheet);
-
-        Map<String, Object[]> data;
-        data = new TreeMap<>();
-        data.put("1", new Object[]{"ID", "NAME", "LASTNAME"});
-        data.put("2", new Object[]{2, "Amit", "Shukla"});
-        data.put("3", new Object[]{1, "Lokesh", "Gupta"});
-        data.put("4", new Object[]{4, "John", "Adwards"});
-        data.put("5", new Object[]{2, "Brian", "Schultz"});
-
-        int rownum = 1;
-        for (Map.Entry<String, Object[]> me : data.entrySet()) {
-            final Row row;
-            if (createRow) {
-                row = sheet.createRow(rownum++);
-            } else {
-                row = sheet.getRow(rownum++);
-            }
-            assertNotNull(row);
-
-            int cellnum = 0;
-            for (Object obj : me.getValue()) {
-                Cell cell = row.getCell(cellnum);
-                if (cell == null) {
-                    cell = row.createCell(cellnum);
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56574.xlsx")) {
+
+            Sheet sheet = wb.getSheet("Func");
+            assertNotNull(sheet);
+
+            Map<String, Object[]> data;
+            data = new TreeMap<>();
+            data.put("1", new Object[]{"ID", "NAME", "LASTNAME"});
+            data.put("2", new Object[]{2, "Amit", "Shukla"});
+            data.put("3", new Object[]{1, "Lokesh", "Gupta"});
+            data.put("4", new Object[]{4, "John", "Adwards"});
+            data.put("5", new Object[]{2, "Brian", "Schultz"});
+
+            int rownum = 1;
+            for (Map.Entry<String, Object[]> me : data.entrySet()) {
+                final Row row;
+                if (createRow) {
+                    row = sheet.createRow(rownum++);
                 } else {
-                    if (cell.getCellType() == CellType.FORMULA) {
-                        cell.setCellFormula(null);
-                        cell.getCellStyle().setDataFormat((short) 0);
-                    }
+                    row = sheet.getRow(rownum++);
                 }
-                if (obj instanceof String) {
-                    cell.setCellValue((String) obj);
-                } else if (obj instanceof Integer) {
-                    cell.setCellValue((Integer) obj);
+                assertNotNull(row);
+
+                int cellnum = 0;
+                for (Object obj : me.getValue()) {
+                    Cell cell = row.getCell(cellnum);
+                    if (cell == null) {
+                        cell = row.createCell(cellnum);
+                    } else {
+                        if (cell.getCellType() == CellType.FORMULA) {
+                            cell.setCellFormula(null);
+                            cell.getCellStyle().setDataFormat((short) 0);
+                        }
+                    }
+                    if (obj instanceof String) {
+                        cell.setCellValue((String) obj);
+                    } else if (obj instanceof Integer) {
+                        cell.setCellValue((Integer) obj);
+                    }
+                    cellnum++;
                 }
-                cellnum++;
             }
-        }
 
-        XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
-        wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
+            XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
+            wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
 
-        CalculationChain chain = wb.getCalculationChain();
-        checkCellsAreGone(chain);
+            CalculationChain chain = wb.getCalculationChain();
+            checkCellsAreGone(chain);
 
-        XSSFWorkbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        Sheet sheetBack = wbBack.getSheet("Func");
-        assertNotNull(sheetBack);
+            XSSFWorkbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
+            Sheet sheetBack = wbBack.getSheet("Func");
+            assertNotNull(sheetBack);
 
-        chain = wbBack.getCalculationChain();
-        checkCellsAreGone(chain);
+            chain = wbBack.getCalculationChain();
+            checkCellsAreGone(chain);
 
-        wbBack.close();
-        wb.close();
+            wbBack.close();
+        }
     }
 
     private void checkCellsAreGone(CalculationChain chain) {
@@ -2624,61 +2613,61 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      */
     @Test
     public void bug57181() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("57181.xlsm");
-        assertEquals(9, wb.getNumberOfSheets());
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("57181.xlsm")) {
+            assertEquals(9, wb.getNumberOfSheets());
+        }
     }
 
     @Test
     public void bug52111() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("Intersection-52111-xssf.xlsx");
-        Sheet s = wb.getSheetAt(0);
-        assertFormula(wb, s.getRow(2).getCell(0), "(C2:D3 D3:E4)", "4.0");
-        assertFormula(wb, s.getRow(6).getCell(0), "Tabelle2!E:E Tabelle2!11:11", "5.0");
-        assertFormula(wb, s.getRow(8).getCell(0), "Tabelle2!E:F Tabelle2!11:12", null);
-        wb.close();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("Intersection-52111-xssf.xlsx")) {
+            Sheet s = wb.getSheetAt(0);
+            assertFormula(wb, s.getRow(2).getCell(0), "(C2:D3 D3:E4)", "4.0");
+            assertFormula(wb, s.getRow(6).getCell(0), "Tabelle2!E:E Tabelle2!11:11", "5.0");
+            assertFormula(wb, s.getRow(8).getCell(0), "Tabelle2!E:F Tabelle2!11:12", null);
+        }
     }
 
     @Test
     public void test48962() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("48962.xlsx");
-        Sheet sh = wb.getSheetAt(0);
-        Row row = sh.getRow(1);
-        Cell cell = row.getCell(0);
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("48962.xlsx")) {
+            Sheet sh = wb.getSheetAt(0);
+            Row row = sh.getRow(1);
+            Cell cell = row.getCell(0);
 
-        CellStyle style = cell.getCellStyle();
-        assertNotNull(style);
+            CellStyle style = cell.getCellStyle();
+            assertNotNull(style);
 
-        // color index
-        assertEquals(64, style.getFillBackgroundColor());
-        XSSFColor color = ((XSSFCellStyle) style).getFillBackgroundXSSFColor();
-        assertNotNull(color);
+            // color index
+            assertEquals(64, style.getFillBackgroundColor());
+            XSSFColor color = ((XSSFCellStyle) style).getFillBackgroundXSSFColor();
+            assertNotNull(color);
 
-        // indexed color
-        assertEquals(64, color.getIndexed());
-        assertEquals(64, color.getIndex());
+            // indexed color
+            assertEquals(64, color.getIndexed());
+            assertEquals(64, color.getIndex());
 
-        // not an RGB color
-        assertFalse(color.isRGB());
-        assertNull(color.getRGB());
-        wb.close();
+            // not an RGB color
+            assertFalse(color.isRGB());
+            assertNull(color.getRGB());
+        }
     }
 
     @Test
     public void test50755_workday_formula_example() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("50755_workday_formula_example.xlsx");
-        Sheet sheet = wb.getSheet("Sheet1");
-        for (Row aRow : sheet) {
-            Cell cell = aRow.getCell(1);
-            if (cell.getCellType() == CellType.FORMULA) {
-                String formula = cell.getCellFormula();
-                assertNotNull(formula);
-                assertTrue(formula.contains("WORKDAY"));
-            } else {
-                assertNotNull(cell.toString());
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("50755_workday_formula_example.xlsx")) {
+            Sheet sheet = wb.getSheet("Sheet1");
+            for (Row aRow : sheet) {
+                Cell cell = aRow.getCell(1);
+                if (cell.getCellType() == CellType.FORMULA) {
+                    String formula = cell.getCellFormula();
+                    assertNotNull(formula);
+                    assertTrue(formula.contains("WORKDAY"));
+                } else {
+                    assertNotNull(cell.toString());
+                }
             }
         }
-        wb.close();
     }
 
     @Test
@@ -2726,68 +2715,65 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
     @Test
     public void test53105() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("53105.xlsx");
-        assertNotNull(wb);
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("53105.xlsx")) {
+            assertNotNull(wb);
 
 
-        // Act
-        // evaluate SUM('Skye Lookup Input'!A4:XFD4), cells in range each contain "1"
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        double numericValue = evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(0)).getNumberValue();
-
-        // Assert
-        assertEquals(16384.0, numericValue, 0.0);
+            // Act
+            // evaluate SUM('Skye Lookup Input'!A4:XFD4), cells in range each contain "1"
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            double numericValue = evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(0)).getNumberValue();
 
-        wb.close();
+            // Assert
+            assertEquals(16384.0, numericValue, 0.0);
+        }
     }
 
 
     @Test
     public void test58315() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("58315.xlsx");
-        Cell cell = wb.getSheetAt(0).getRow(0).getCell(0);
-        assertNotNull(cell);
-        StringBuilder tmpCellContent = new StringBuilder(cell.getStringCellValue());
-        XSSFRichTextString richText = (XSSFRichTextString) cell.getRichStringCellValue();
-
-        for (int i = richText.length() - 1; i >= 0; i--) {
-            Font f = richText.getFontAtIndex(i);
-            if (f != null && f.getStrikeout()) {
-                tmpCellContent.deleteCharAt(i);
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("58315.xlsx")) {
+            Cell cell = wb.getSheetAt(0).getRow(0).getCell(0);
+            assertNotNull(cell);
+            StringBuilder tmpCellContent = new StringBuilder(cell.getStringCellValue());
+            XSSFRichTextString richText = (XSSFRichTextString) cell.getRichStringCellValue();
+
+            for (int i = richText.length() - 1; i >= 0; i--) {
+                Font f = richText.getFontAtIndex(i);
+                if (f != null && f.getStrikeout()) {
+                    tmpCellContent.deleteCharAt(i);
+                }
             }
+            String result = tmpCellContent.toString();
+            assertEquals("320 350", result);
         }
-        String result = tmpCellContent.toString();
-        assertEquals("320 350", result);
-
-        wb.close();
     }
 
     @Test
     public void test55406() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("55406_Conditional_formatting_sample.xlsx");
-        Sheet sheet = wb.getSheetAt(0);
-        Cell cellA1 = sheet.getRow(0).getCell(0);
-        Cell cellA2 = sheet.getRow(1).getCell(0);
-
-        assertEquals(0, cellA1.getCellStyle().getFillForegroundColor());
-        assertEquals("FFFDFDFD", ((XSSFColor) cellA1.getCellStyle().getFillForegroundColorColor()).getARGBHex());
-        assertEquals(0, cellA2.getCellStyle().getFillForegroundColor());
-        assertEquals("FFFDFDFD", ((XSSFColor) cellA2.getCellStyle().getFillForegroundColorColor()).getARGBHex());
-
-        SheetConditionalFormatting cond = sheet.getSheetConditionalFormatting();
-        assertEquals(2, cond.getNumConditionalFormattings());
-
-        assertEquals(1, cond.getConditionalFormattingAt(0).getNumberOfRules());
-        assertEquals(64, cond.getConditionalFormattingAt(0).getRule(0).getPatternFormatting().getFillForegroundColor());
-        assertEquals("ISEVEN(ROW())", cond.getConditionalFormattingAt(0).getRule(0).getFormula1());
-        assertNull(((XSSFColor) cond.getConditionalFormattingAt(0).getRule(0).getPatternFormatting().getFillForegroundColorColor()).getARGBHex());
-
-        assertEquals(1, cond.getConditionalFormattingAt(1).getNumberOfRules());
-        assertEquals(64, cond.getConditionalFormattingAt(1).getRule(0).getPatternFormatting().getFillForegroundColor());
-        assertEquals("ISEVEN(ROW())", cond.getConditionalFormattingAt(1).getRule(0).getFormula1());
-        assertNull(((XSSFColor) cond.getConditionalFormattingAt(1).getRule(0).getPatternFormatting().getFillForegroundColorColor()).getARGBHex());
-
-        wb.close();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("55406_Conditional_formatting_sample.xlsx")) {
+            Sheet sheet = wb.getSheetAt(0);
+            Cell cellA1 = sheet.getRow(0).getCell(0);
+            Cell cellA2 = sheet.getRow(1).getCell(0);
+
+            assertEquals(0, cellA1.getCellStyle().getFillForegroundColor());
+            assertEquals("FFFDFDFD", ((XSSFColor) cellA1.getCellStyle().getFillForegroundColorColor()).getARGBHex());
+            assertEquals(0, cellA2.getCellStyle().getFillForegroundColor());
+            assertEquals("FFFDFDFD", ((XSSFColor) cellA2.getCellStyle().getFillForegroundColorColor()).getARGBHex());
+
+            SheetConditionalFormatting cond = sheet.getSheetConditionalFormatting();
+            assertEquals(2, cond.getNumConditionalFormattings());
+
+            assertEquals(1, cond.getConditionalFormattingAt(0).getNumberOfRules());
+            assertEquals(64, cond.getConditionalFormattingAt(0).getRule(0).getPatternFormatting().getFillForegroundColor());
+            assertEquals("ISEVEN(ROW())", cond.getConditionalFormattingAt(0).getRule(0).getFormula1());
+            assertNull(((XSSFColor) cond.getConditionalFormattingAt(0).getRule(0).getPatternFormatting().getFillForegroundColorColor()).getARGBHex());
+
+            assertEquals(1, cond.getConditionalFormattingAt(1).getNumberOfRules());
+            assertEquals(64, cond.getConditionalFormattingAt(1).getRule(0).getPatternFormatting().getFillForegroundColor());
+            assertEquals("ISEVEN(ROW())", cond.getConditionalFormattingAt(1).getRule(0).getFormula1());
+            assertNull(((XSSFColor) cond.getConditionalFormattingAt(1).getRule(0).getPatternFormatting().getFillForegroundColorColor()).getARGBHex());
+        }
     }
 
     @Test
@@ -2821,39 +2807,38 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
     @Test
     public void test58731() throws IOException {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("58731.xlsx");
-        Sheet sheet = wb.createSheet("Java Books");
-
-        Object[][] bookData = {
-                {"Head First Java", "Kathy Serria", 79},
-                {"Effective Java", "Joshua Bloch", 36},
-                {"Clean Code", "Robert martin", 42},
-                {"Thinking in Java", "Bruce Eckel", 35},
-        };
-
-        int rowCount = 0;
-        for (Object[] aBook : bookData) {
-            Row row = sheet.createRow(rowCount++);
-
-            int columnCount = 0;
-            for (Object field : aBook) {
-                Cell cell = row.createCell(columnCount++);
-                if (field instanceof String) {
-                    cell.setCellValue((String) field);
-                } else if (field instanceof Integer) {
-                    cell.setCellValue((Integer) field);
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("58731.xlsx")) {
+            Sheet sheet = wb.createSheet("Java Books");
+
+            Object[][] bookData = {
+                    {"Head First Java", "Kathy Serria", 79},
+                    {"Effective Java", "Joshua Bloch", 36},
+                    {"Clean Code", "Robert martin", 42},
+                    {"Thinking in Java", "Bruce Eckel", 35},
+            };
+
+            int rowCount = 0;
+            for (Object[] aBook : bookData) {
+                Row row = sheet.createRow(rowCount++);
+
+                int columnCount = 0;
+                for (Object field : aBook) {
+                    Cell cell = row.createCell(columnCount++);
+                    if (field instanceof String) {
+                        cell.setCellValue((String) field);
+                    } else if (field instanceof Integer) {
+                        cell.setCellValue((Integer) field);
+                    }
                 }
             }
-        }
-
-        Workbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb2.getSheet("Java Books");
-        assertNotNull(sheet.getRow(0));
-        assertNotNull(sheet.getRow(0).getCell(0));
-        assertEquals(bookData[0][0], sheet.getRow(0).getCell(0).getStringCellValue());
 
-        wb2.close();
-        wb.close();
+            try (Workbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb)) {
+                sheet = wb2.getSheet("Java Books");
+                assertNotNull(sheet.getRow(0));
+                assertNotNull(sheet.getRow(0).getCell(0));
+                assertEquals(bookData[0][0], sheet.getRow(0).getCell(0).getStringCellValue());
+            }
+        }
     }
 
     /**
@@ -2886,21 +2871,20 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
         DataFormatter formatter = new DataFormatter(true);
 
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("57236.xlsx");
-        for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
-            Sheet sheet = wb.getSheetAt(sheetNum);
-            for (int rowNum = sheet.getFirstRowNum(); rowNum < sheet.getLastRowNum(); rowNum++) {
-                Row row = sheet.getRow(rowNum);
-                for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
-                    Cell cell = row.getCell(cellNum);
-                    String fmtCellValue = formatter.formatCellValue(cell);
-                    assertNotNull(fmtCellValue);
-                    assertNotEquals("0", fmtCellValue);
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("57236.xlsx")) {
+            for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
+                Sheet sheet = wb.getSheetAt(sheetNum);
+                for (int rowNum = sheet.getFirstRowNum(); rowNum < sheet.getLastRowNum(); rowNum++) {
+                    Row row = sheet.getRow(rowNum);
+                    for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
+                        Cell cell = row.getCell(cellNum);
+                        String fmtCellValue = formatter.formatCellValue(cell);
+                        assertNotNull(fmtCellValue);
+                        assertNotEquals("0", fmtCellValue);
+                    }
                 }
             }
         }
-
-        wb.close();
     }
 
     /**
@@ -3032,35 +3016,37 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
     @Ignore("currently fails on POI 3.15 beta 2")
     @Test
-    public void test55273() {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("ExcelTables.xlsx");
-        Sheet sheet = wb.getSheet("ExcelTable");
+    public void test55273() throws IOException {
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("ExcelTables.xlsx")) {
+            Sheet sheet = wb.getSheet("ExcelTable");
 
-        Name name = wb.getName("TableAsRangeName");
-        assertEquals("TableName[#All]", name.getRefersToFormula());
-        // POI 3.15-beta 2 (2016-06-15): getSheetName throws IllegalArgumentException: Invalid CellReference: TableName[#All]
-        assertEquals("TableName", name.getSheetName());
+            Name name = wb.getName("TableAsRangeName");
+            assertEquals("TableName[#All]", name.getRefersToFormula());
+            // POI 3.15-beta 2 (2016-06-15): getSheetName throws IllegalArgumentException: Invalid CellReference: TableName[#All]
+            assertEquals("TableName", name.getSheetName());
 
-        XSSFSheet xsheet = (XSSFSheet) sheet;
-        List<XSSFTable> tables = xsheet.getTables();
-        assertEquals(2, tables.size()); //FIXME: how many tables are there in this spreadsheet?
-        assertEquals("Table1", tables.get(0).getName()); //FIXME: what is the table name?
-        assertEquals("Table2", tables.get(1).getName()); //FIXME: what is the table name?
+            XSSFSheet xsheet = (XSSFSheet) sheet;
+            List<XSSFTable> tables = xsheet.getTables();
+            assertEquals(2, tables.size()); //FIXME: how many tables are there in this spreadsheet?
+            assertEquals("Table1", tables.get(0).getName()); //FIXME: what is the table name?
+            assertEquals("Table2", tables.get(1).getName()); //FIXME: what is the table name?
+        }
     }
 
     @Test
-    public void test57523() {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("57523.xlsx");
-        Sheet sheet = wb.getSheet("Attribute Master");
-        Row row = sheet.getRow(15);
+    public void test57523() throws IOException {
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("57523.xlsx")) {
+            Sheet sheet = wb.getSheet("Attribute Master");
+            Row row = sheet.getRow(15);
 
-        int N = CellReference.convertColStringToIndex("N");
-        Cell N16 = row.getCell(N);
-        assertEquals(500.0, N16.getNumericCellValue(), 0.00001);
+            int N = CellReference.convertColStringToIndex("N");
+            Cell N16 = row.getCell(N);
+            assertEquals(500.0, N16.getNumericCellValue(), 0.00001);
 
-        int P = CellReference.convertColStringToIndex("P");
-        Cell P16 = row.getCell(P);
-        assertEquals(10.0, P16.getNumericCellValue(), 0.00001);
+            int P = CellReference.convertColStringToIndex("P");
+            Cell P16 = row.getCell(P);
+            assertEquals(10.0, P16.getNumericCellValue(), 0.00001);
+        }
     }
 
     /**
@@ -3068,29 +3054,31 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      * to include the row number on the row tags
      */
     @Test
-    public void noRowNumbers59746() {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("59746_NoRowNums.xlsx");
-        Sheet sheet = wb.getSheetAt(0);
-        assertTrue("Last row num: " + sheet.getLastRowNum(), sheet.getLastRowNum() > 20);
-        assertEquals("Checked", sheet.getRow(0).getCell(0).getStringCellValue());
-        assertEquals("Checked", sheet.getRow(9).getCell(2).getStringCellValue());
-        assertFalse(sheet.getRow(70).getCell(8).getBooleanCellValue());
-        assertEquals(71, sheet.getPhysicalNumberOfRows());
-        assertEquals(70, sheet.getLastRowNum());
-        assertEquals(70, sheet.getRow(sheet.getLastRowNum()).getRowNum());
+    public void noRowNumbers59746() throws IOException {
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("59746_NoRowNums.xlsx")) {
+            Sheet sheet = wb.getSheetAt(0);
+            assertTrue("Last row num: " + sheet.getLastRowNum(), sheet.getLastRowNum() > 20);
+            assertEquals("Checked", sheet.getRow(0).getCell(0).getStringCellValue());
+            assertEquals("Checked", sheet.getRow(9).getCell(2).getStringCellValue());
+            assertFalse(sheet.getRow(70).getCell(8).getBooleanCellValue());
+            assertEquals(71, sheet.getPhysicalNumberOfRows());
+            assertEquals(70, sheet.getLastRowNum());
+            assertEquals(70, sheet.getRow(sheet.getLastRowNum()).getRowNum());
+        }
     }
 
     @Test
-    public void testWorkdayFunction() {
-        XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("59106.xlsx");
-        XSSFSheet sheet = workbook.getSheet("Test");
-        Row row = sheet.getRow(1);
-        Cell cell = row.getCell(0);
-        DataFormatter form = new DataFormatter();
-        FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
-        String result = form.formatCellValue(cell, evaluator);
+    public void testWorkdayFunction() throws IOException {
+        try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("59106.xlsx")) {
+            XSSFSheet sheet = workbook.getSheet("Test");
+            Row row = sheet.getRow(1);
+            Cell cell = row.getCell(0);
+            DataFormatter form = new DataFormatter();
+            FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
+            String result = form.formatCellValue(cell, evaluator);
 
-        assertEquals("09 Mar 2016", result);
+            assertEquals("09 Mar 2016", result);
+        }
     }
 
     // This bug is currently open. When this bug is fixed, it should not throw an AssertionError
@@ -3136,41 +3124,42 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      * part with a part number)
      */
     @Test
-    public void drawingNumbersAlreadyTaken_60255() {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("60255_extra_drawingparts.xlsx");
-        assertEquals(4, wb.getNumberOfSheets());
-
-        // Sheet 3 starts with a drawing
-        Sheet sheet = wb.getSheetAt(0);
-        assertNull(sheet.getDrawingPatriarch());
-        sheet = wb.getSheetAt(1);
-        assertNull(sheet.getDrawingPatriarch());
-        sheet = wb.getSheetAt(2);
-        assertNotNull(sheet.getDrawingPatriarch());
-        sheet = wb.getSheetAt(3);
-        assertNull(sheet.getDrawingPatriarch());
-
-        // Add another sheet, and give it a drawing
-        sheet = wb.createSheet();
-        assertNull(sheet.getDrawingPatriarch());
-        sheet.createDrawingPatriarch();
-        assertNotNull(sheet.getDrawingPatriarch());
-
-        // Save and check
-        wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        assertEquals(5, wb.getNumberOfSheets());
-
-        // Sheets 3 and 5 now
-        sheet = wb.getSheetAt(0);
-        assertNull(sheet.getDrawingPatriarch());
-        sheet = wb.getSheetAt(1);
-        assertNull(sheet.getDrawingPatriarch());
-        sheet = wb.getSheetAt(2);
-        assertNotNull(sheet.getDrawingPatriarch());
-        sheet = wb.getSheetAt(3);
-        assertNull(sheet.getDrawingPatriarch());
-        sheet = wb.getSheetAt(4);
-        assertNotNull(sheet.getDrawingPatriarch());
+    public void drawingNumbersAlreadyTaken_60255() throws IOException {
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("60255_extra_drawingparts.xlsx")) {
+            assertEquals(4, wb.getNumberOfSheets());
+
+            // Sheet 3 starts with a drawing
+            Sheet sheet = wb.getSheetAt(0);
+            assertNull(sheet.getDrawingPatriarch());
+            sheet = wb.getSheetAt(1);
+            assertNull(sheet.getDrawingPatriarch());
+            sheet = wb.getSheetAt(2);
+            assertNotNull(sheet.getDrawingPatriarch());
+            sheet = wb.getSheetAt(3);
+            assertNull(sheet.getDrawingPatriarch());
+
+            // Add another sheet, and give it a drawing
+            sheet = wb.createSheet();
+            assertNull(sheet.getDrawingPatriarch());
+            sheet.createDrawingPatriarch();
+            assertNotNull(sheet.getDrawingPatriarch());
+
+            // Save and check
+            Workbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
+            assertEquals(5, wbBack.getNumberOfSheets());
+
+            // Sheets 3 and 5 now
+            sheet = wbBack.getSheetAt(0);
+            assertNull(sheet.getDrawingPatriarch());
+            sheet = wbBack.getSheetAt(1);
+            assertNull(sheet.getDrawingPatriarch());
+            sheet = wbBack.getSheetAt(2);
+            assertNotNull(sheet.getDrawingPatriarch());
+            sheet = wbBack.getSheetAt(3);
+            assertNull(sheet.getDrawingPatriarch());
+            sheet = wbBack.getSheetAt(4);
+            assertNotNull(sheet.getDrawingPatriarch());
+        }
     }
 
     @Test
@@ -3220,24 +3209,23 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
     @Test
     public void bug61063() throws Exception {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("61063.xlsx");
-
-        FormulaEvaluator eval = wb.getCreationHelper().createFormulaEvaluator();
-        Sheet s = wb.getSheetAt(0);
-
-        Row r = s.getRow(3);
-        Cell c = r.getCell(0);
-        assertEquals(CellType.FORMULA, c.getCellType());
-        eval.setDebugEvaluationOutputForNextEval(true);
-        CellValue cv = eval.evaluate(c);
-        assertNotNull(cv);
-        assertEquals("Had: " + cv, 2.0, cv.getNumberValue(), 0.00001);
-
-        wb.close();
+        try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("61063.xlsx")) {
+
+            FormulaEvaluator eval = wb.getCreationHelper().createFormulaEvaluator();
+            Sheet s = wb.getSheetAt(0);
+
+            Row r = s.getRow(3);
+            Cell c = r.getCell(0);
+            assertEquals(CellType.FORMULA, c.getCellType());
+            eval.setDebugEvaluationOutputForNextEval(true);
+            CellValue cv = eval.evaluate(c);
+            assertNotNull(cv);
+            assertEquals("Had: " + cv, 2.0, cv.getNumberValue(), 0.00001);
+        }
     }
 
     @Test
-    public void bug61516(){
+    public void bug61516() throws IOException {
         final String initialFormula = "A1";
         final String expectedFormula = "#REF!"; // from ms excel
 
@@ -3287,6 +3275,8 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
             CellValue cellValue = evaluator.evaluate(c2);
             assertEquals(1, cellValue.getNumberValue(), 0.0001);
         }
+
+        wb.close();
     }
 
     @Test
@@ -3310,23 +3300,21 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
     @Test
     public void test61543() throws IOException {
-        XSSFWorkbook wb = new XSSFWorkbook();
-
-        XSSFSheet sheet = wb.createSheet();
-        XSSFTable table1 = sheet.createTable(null);
-        XSSFTable table2 = sheet.createTable(null);
-        XSSFTable table3 = sheet.createTable(null);
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet sheet = wb.createSheet();
+            XSSFTable table1 = sheet.createTable(null);
+            XSSFTable table2 = sheet.createTable(null);
+            XSSFTable table3 = sheet.createTable(null);
 
-        sheet.removeTable(table1);
+            sheet.removeTable(table1);
 
-        sheet.createTable(null);
+            sheet.createTable(null);
 
-        sheet.removeTable(table2);
-        sheet.removeTable(table3);
+            sheet.removeTable(table2);
+            sheet.removeTable(table3);
 
-        sheet.createTable(null);
-
-        wb.close();
+            sheet.createTable(null);
+        }
     }
 
     /**
@@ -3334,54 +3322,57 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
      *  errors like ArrayIndexOutOfBoundsException: -32765
      */
     @Test
-    public void test62108() {
-        XSSFWorkbook wb = new XSSFWorkbook();
-        XSSFSheet sheet = wb.createSheet();
-        XSSFRow row = sheet.createRow(0);
+    public void test62108() throws IOException {
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet sheet = wb.createSheet();
+            XSSFRow row = sheet.createRow(0);
 
-        // Create lots of fonts
-        XSSFDataFormat formats = wb.createDataFormat();
-        XSSFFont[] fonts = new XSSFFont[50000];
-        for (int i=0; i<fonts.length; i++) {
-            XSSFFont font = wb.createFont();
-            font.setFontHeight(i);
-            fonts[i] = font;
-        }
+            // Create lots of fonts
+            XSSFDataFormat formats = wb.createDataFormat();
+            XSSFFont[] fonts = new XSSFFont[50000];
+            for (int i = 0; i < fonts.length; i++) {
+                XSSFFont font = wb.createFont();
+                font.setFontHeight(i);
+                fonts[i] = font;
+            }
 
-        // Create a moderate number of columns, which use
-        //  fonts from the start and end of the font list
-        final int numCols = 125;
-        for (int i=0; i<numCols; i++) {
-            XSSFCellStyle cs = wb.createCellStyle();
-            cs.setDataFormat(formats.getFormat("'Test "+i+"' #,###"));
+            // Create a moderate number of columns, which use
+            //  fonts from the start and end of the font list
+            final int numCols = 125;
+            for (int i = 0; i < numCols; i++) {
+                XSSFCellStyle cs = wb.createCellStyle();
+                cs.setDataFormat(formats.getFormat("'Test " + i + "' #,###"));
 
-            XSSFFont font = fonts[i];
-            if (i%2==1) { font = fonts[fonts.length-i]; }
-            cs.setFont(font);
+                XSSFFont font = fonts[i];
+                if (i % 2 == 1) {
+                    font = fonts[fonts.length - i];
+                }
+                cs.setFont(font);
 
-            XSSFCell c = row.createCell(i);
-            c.setCellValue(i);
-            c.setCellStyle(cs);
-        }
+                XSSFCell c = row.createCell(i);
+                c.setCellValue(i);
+                c.setCellStyle(cs);
+            }
 
-        // Do the auto-size
-        for (int i=0; i<numCols; i++) {
-            sheet.autoSizeColumn(i);
+            // Do the auto-size
+            for (int i = 0; i < numCols; i++) {
+                sheet.autoSizeColumn(i);
+            }
         }
     }
 
     @Test
     public void test61905xlsx() throws IOException {
-        Workbook wb = new XSSFWorkbook();
-        checkActiveSheet(wb, XSSFITestDataProvider.instance);
-        wb.close();
+        try (Workbook wb = new XSSFWorkbook()) {
+            checkActiveSheet(wb, XSSFITestDataProvider.instance);
+        }
     }
 
     @Test
     public void test61905xls() throws IOException {
-        Workbook wb = new HSSFWorkbook();
-        checkActiveSheet(wb, HSSFITestDataProvider.instance);
-        wb.close();
+        try (Workbook wb = new HSSFWorkbook()) {
+            checkActiveSheet(wb, HSSFITestDataProvider.instance);
+        }
     }
 
     private void checkActiveSheet(Workbook wb, ITestDataProvider instance) throws IOException {
@@ -3398,25 +3389,25 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
     @Test
     public void testBug54084Unicode() throws IOException {
         // sample XLSX with the same text-contents as the text-file above
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("54084 - Greek - beyond BMP.xlsx");
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("54084 - Greek - beyond BMP.xlsx")) {
 
-        verifyBug54084Unicode(wb);
+            verifyBug54084Unicode(wb);
 
-        //XSSFTestDataSamples.writeOut(wb, "bug 54084 for manual review");
+            //XSSFTestDataSamples.writeOut(wb, "bug 54084 for manual review");
 
-        // now write the file and read it back in
-        XSSFWorkbook wbWritten = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        verifyBug54084Unicode(wbWritten);
+            // now write the file and read it back in
+            XSSFWorkbook wbWritten = XSSFTestDataSamples.writeOutAndReadBack(wb);
+            verifyBug54084Unicode(wbWritten);
 
-        // finally also write it out via the streaming interface and verify that we still can read it back in
-        SXSSFWorkbook swb = new SXSSFWorkbook(wb);
-        Workbook wbStreamingWritten = SXSSFITestDataProvider.instance.writeOutAndReadBack(swb);
-        verifyBug54084Unicode(wbStreamingWritten);
+            // finally also write it out via the streaming interface and verify that we still can read it back in
+            SXSSFWorkbook swb = new SXSSFWorkbook(wb);
+            Workbook wbStreamingWritten = SXSSFITestDataProvider.instance.writeOutAndReadBack(swb);
+            verifyBug54084Unicode(wbStreamingWritten);
 
-        wbWritten.close();
-        swb.close();
-        wbStreamingWritten.close();
-        wb.close();
+            wbWritten.close();
+            swb.close();
+            wbStreamingWritten.close();
+        }
     }
 
     private void verifyBug54084Unicode(Workbook wb) {
@@ -3436,21 +3427,21 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
 
 
     @Test
-    public void bug63371() {
-        XSSFWorkbook wb = new XSSFWorkbook();
-        XSSFSheet sheet = wb.createSheet();
+    public void bug63371() throws IOException {
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet sheet = wb.createSheet();
 
-        CellRangeAddress region = new CellRangeAddress(1, 1, 1, 2);
-        assertEquals(0, sheet.addMergedRegion(region));
-        //System.out.println(String.format("%s: index=%d", "testAddMergedRegion", index));
+            CellRangeAddress region = new CellRangeAddress(1, 1, 1, 2);
+            assertEquals(0, sheet.addMergedRegion(region));
+            //System.out.println(String.format("%s: index=%d", "testAddMergedRegion", index));
 
-        final List<CellRangeAddress> ranges = sheet.getMergedRegions();
-        final int numMergedRegions = sheet.getNumMergedRegions();
-        final CTWorksheet ctSheet = sheet.getCTWorksheet();
-        final CTMergeCells ctMergeCells = ctSheet.getMergeCells();
-        final List<CTMergeCell> ctMergeCellList = ctMergeCells.getMergeCellList();
-        final long ctMergeCellCount = ctMergeCells.getCount();
-        final int ctMergeCellListSize = ctMergeCellList.size();
+            final List<CellRangeAddress> ranges = sheet.getMergedRegions();
+            final int numMergedRegions = sheet.getNumMergedRegions();
+            final CTWorksheet ctSheet = sheet.getCTWorksheet();
+            final CTMergeCells ctMergeCells = ctSheet.getMergeCells();
+            final List<CTMergeCell> ctMergeCellList = ctMergeCells.getMergeCellList();
+            final long ctMergeCellCount = ctMergeCells.getCount();
+            final int ctMergeCellListSize = ctMergeCellList.size();
 
         /*System.out.println(String.format("\ntestMergeRegions(%s)", "After adding first region"));
         System.out.println(String.format("ranges.size=%d", ranges.size()));
@@ -3458,35 +3449,35 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
         System.out.println(String.format("ctMergeCellCount=%d", ctMergeCellCount));
         System.out.println(String.format("ctMergeCellListSize=%d", ctMergeCellListSize));*/
 
-        assertEquals(1, ranges.size());
-        assertEquals(1, numMergedRegions);
-        assertEquals(1, ctMergeCellCount);
-        assertEquals(1, ctMergeCellListSize);
+            assertEquals(1, ranges.size());
+            assertEquals(1, numMergedRegions);
+            assertEquals(1, ctMergeCellCount);
+            assertEquals(1, ctMergeCellListSize);
+        }
     }
 
     @Test
     public void testBug63509() throws IOException {
-        XSSFWorkbook workbook = new XSSFWorkbook();
-
-        XSSFSheet sheet = workbook.createSheet("sheet1");
+        try (XSSFWorkbook workbook = new XSSFWorkbook()) {
 
-        Row row = sheet.createRow(0);
+            XSSFSheet sheet = workbook.createSheet("sheet1");
 
-        Cell cell = row.createCell(0);
-        cell.setCellValue("1000");
+            Row row = sheet.createRow(0);
 
-        // This causes the error
-        sheet.addIgnoredErrors(new CellReference(cell), IgnoredErrorType.NUMBER_STORED_AS_TEXT);
+            Cell cell = row.createCell(0);
+            cell.setCellValue("1000");
 
-        // Workaround
-        // sheet.addIgnoredErrors(new CellReference(cell.getRowIndex(), cell.getColumnIndex(), false, false),
-        //        IgnoredErrorType.NUMBER_STORED_AS_TEXT);
+            // This causes the error
+            sheet.addIgnoredErrors(new CellReference(cell), IgnoredErrorType.NUMBER_STORED_AS_TEXT);
 
-        /*File file = new File("/tmp/63509.xlsx");
-        try(FileOutputStream outputStream = new FileOutputStream(file)) {
-            workbook.write(outputStream);
-        }*/
+            // Workaround
+            // sheet.addIgnoredErrors(new CellReference(cell.getRowIndex(), cell.getColumnIndex(), false, false),
+            //        IgnoredErrorType.NUMBER_STORED_AS_TEXT);
 
-        workbook.close();
+            /*File file = new File("/tmp/63509.xlsx");
+            try(FileOutputStream outputStream = new FileOutputStream(file)) {
+                workbook.write(outputStream);
+            }*/
+        }
     }
 }
index bdaacb89939bfae90227512989a8a388cb172bd7..a81472527f6489616065d8787e93dcfcf6fb9ecc 100644 (file)
@@ -21,62 +21,70 @@ import org.apache.poi.xssf.XSSFTestDataSamples;
 
 import junit.framework.TestCase;
 
+import java.io.IOException;
+
 public final class TestXSSFChart extends TestCase {
 
-    public void testGetAccessors() {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx");
-        XSSFSheet s1 = wb.getSheetAt(0);
-        XSSFSheet s2 = wb.getSheetAt(1);
-        XSSFSheet s3 = wb.getSheetAt(2);
+    public void testGetAccessors() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx")) {
+            XSSFSheet s1 = wb.getSheetAt(0);
+            XSSFSheet s2 = wb.getSheetAt(1);
+            XSSFSheet s3 = wb.getSheetAt(2);
 
-        assertEquals(0, s1.getRelations().size());
-        assertEquals(1, s2.getRelations().size());
-        assertEquals(1, s3.getRelations().size());
+            assertEquals(0, s1.getRelations().size());
+            assertEquals(1, s2.getRelations().size());
+            assertEquals(1, s3.getRelations().size());
 
-        assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
+            assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
+        }
     }
 
     public void testGetCharts() throws Exception {
-       XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx");
-
-       XSSFSheet s1 = wb.getSheetAt(0);
-       XSSFSheet s2 = wb.getSheetAt(1);
-       XSSFSheet s3 = wb.getSheetAt(2);
-
-       assertEquals(0, s1.createDrawingPatriarch().getCharts().size());
-       assertEquals(2, s2.createDrawingPatriarch().getCharts().size());
-       assertEquals(1, s3.createDrawingPatriarch().getCharts().size());
-
-       // Check the titles
-       XSSFChart chart = s2.createDrawingPatriarch().getCharts().get(0);
-       assertEquals(null, chart.getTitleText());
-
-       chart = s2.createDrawingPatriarch().getCharts().get(1);
-       assertEquals("Pie Chart Title Thingy", chart.getTitleText().getString());
-
-       chart = s3.createDrawingPatriarch().getCharts().get(0);
-       assertEquals("Sheet 3 Chart with Title", chart.getTitleText().getString());
-
-       assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
+       try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx")) {
+           XSSFSheet s1 = wb.getSheetAt(0);
+           XSSFSheet s2 = wb.getSheetAt(1);
+           XSSFSheet s3 = wb.getSheetAt(2);
+
+           assertEquals(0, s1.createDrawingPatriarch().getCharts().size());
+           assertEquals(2, s2.createDrawingPatriarch().getCharts().size());
+           assertEquals(1, s3.createDrawingPatriarch().getCharts().size());
+
+           // Check the titles
+           XSSFChart chart = s2.createDrawingPatriarch().getCharts().get(0);
+           assertNull(chart.getTitleText());
+
+           chart = s2.createDrawingPatriarch().getCharts().get(1);
+           XSSFRichTextString title = chart.getTitleText();
+           assertNotNull(title);
+           assertEquals("Pie Chart Title Thingy", title.getString());
+
+           chart = s3.createDrawingPatriarch().getCharts().get(0);
+           title = chart.getTitleText();
+           assertNotNull(title);
+           assertEquals("Sheet 3 Chart with Title", title.getString());
+
+           assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
+       }
     }
 
        public void testAddChartsToNewWorkbook() throws Exception {
-               XSSFWorkbook wb = new XSSFWorkbook();
-               XSSFSheet s1 = wb.createSheet();
-               XSSFDrawing d1 = s1.createDrawingPatriarch();
-               XSSFClientAnchor a1 = new XSSFClientAnchor(0, 0, 0, 0, 1, 1, 10, 30);
-               XSSFChart c1 = d1.createChart(a1);
+               try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet s1 = wb.createSheet();
+            XSSFDrawing d1 = s1.createDrawingPatriarch();
+            XSSFClientAnchor a1 = new XSSFClientAnchor(0, 0, 0, 0, 1, 1, 10, 30);
+            XSSFChart c1 = d1.createChart(a1);
 
-               assertEquals(1, d1.getCharts().size());
+            assertEquals(1, d1.getCharts().size());
 
-               assertNotNull(c1.getGraphicFrame());
-               assertNotNull(c1.getOrAddLegend());
+            assertNotNull(c1.getGraphicFrame());
+            assertNotNull(c1.getOrAddLegend());
 
-               XSSFClientAnchor a2 = new XSSFClientAnchor(0, 0, 0, 0, 1, 11, 10, 60);
-               XSSFChart c2 = d1.createChart(a2);
-               assertNotNull(c2);
-               assertEquals(2, d1.getCharts().size());
+            XSSFClientAnchor a2 = new XSSFClientAnchor(0, 0, 0, 0, 1, 11, 10, 60);
+            XSSFChart c2 = d1.createChart(a2);
+            assertNotNull(c2);
+            assertEquals(2, d1.getCharts().size());
 
-        assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
+            assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
+        }
        }
 }
index 90aa40e42cf527ebf9554a5fee1c7617d8cb6dc5..ebb098ee9372f25fa9a785d916f507a12bd0575f 100644 (file)
@@ -22,60 +22,65 @@ import org.apache.poi.xssf.XSSFTestDataSamples;
 import org.junit.Test;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTChartsheet;
 
+import java.io.IOException;
+
 import static org.junit.Assert.*;
 
 public final class TestXSSFChartSheet {
 
     @Test
-    public void testXSSFFactory() {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx");
-        assertEquals(4, wb.getNumberOfSheets());
+    public void testXSSFFactory() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx")) {
+            assertEquals(4, wb.getNumberOfSheets());
 
-        //the third sheet is of type 'chartsheet'
-        assertEquals("Chart1", wb.getSheetName(2));
-        assertTrue(wb.getSheetAt(2) instanceof XSSFChartSheet);
-        assertEquals("Chart1", wb.getSheetAt(2).getSheetName());
+            //the third sheet is of type 'chartsheet'
+            assertEquals("Chart1", wb.getSheetName(2));
+            assertTrue(wb.getSheetAt(2) instanceof XSSFChartSheet);
+            assertEquals("Chart1", wb.getSheetAt(2).getSheetName());
 
-        final CTChartsheet ctChartsheet = ((XSSFChartSheet) wb.getSheetAt(2)).getCTChartsheet();
-        assertNotNull(ctChartsheet);
+            final CTChartsheet ctChartsheet = ((XSSFChartSheet) wb.getSheetAt(2)).getCTChartsheet();
+            assertNotNull(ctChartsheet);
+        }
     }
 
     @Test
-    public void testGetAccessors() {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx");
-        XSSFChartSheet sheet = (XSSFChartSheet)wb.getSheetAt(2);
-
-        assertFalse("Row iterator for charts sheets should return zero rows",
-                sheet.iterator().hasNext());
-
-        //access to a arbitrary row
-        assertNull(sheet.getRow(1));
-
-        //some basic get* accessors
-        assertEquals(0, sheet.getNumberOfComments());
-        assertEquals(0, sheet.getNumHyperlinks());
-        assertEquals(0, sheet.getNumMergedRegions());
-        assertNull(sheet.getActiveCell());
-        assertTrue(sheet.getAutobreaks());
-        assertNull(sheet.getCellComment(new CellAddress(0, 0)));
-        assertEquals(0, sheet.getColumnBreaks().length);
-        assertTrue(sheet.getRowSumsBelow());
-        assertNotNull(sheet.createDrawingPatriarch());
-        assertNotNull(sheet.getDrawingPatriarch());
-        assertNotNull(sheet.getCTChartsheet());
+    public void testGetAccessors() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx")) {
+            XSSFChartSheet sheet = (XSSFChartSheet) wb.getSheetAt(2);
+
+            assertFalse("Row iterator for charts sheets should return zero rows",
+                    sheet.iterator().hasNext());
+
+            //access to a arbitrary row
+            assertNull(sheet.getRow(1));
+
+            //some basic get* accessors
+            assertEquals(0, sheet.getNumberOfComments());
+            assertEquals(0, sheet.getNumHyperlinks());
+            assertEquals(0, sheet.getNumMergedRegions());
+            assertNull(sheet.getActiveCell());
+            assertTrue(sheet.getAutobreaks());
+            assertNull(sheet.getCellComment(new CellAddress(0, 0)));
+            assertEquals(0, sheet.getColumnBreaks().length);
+            assertTrue(sheet.getRowSumsBelow());
+            assertNotNull(sheet.createDrawingPatriarch());
+            assertNotNull(sheet.getDrawingPatriarch());
+            assertNotNull(sheet.getCTChartsheet());
+        }
     }
     
     @Test
     public void testGetCharts() throws Exception {
-       XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx");
-       
-       XSSFSheet ns = wb.getSheetAt(0);
-       XSSFChartSheet cs = (XSSFChartSheet)wb.getSheetAt(2);
-       
-       assertEquals(0, ns.createDrawingPatriarch().getCharts().size());
-       assertEquals(1, cs.createDrawingPatriarch().getCharts().size());
-       
-       XSSFChart chart = cs.createDrawingPatriarch().getCharts().get(0);
-       assertNull(chart.getTitleText());
+       try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx")) {
+
+           XSSFSheet ns = wb.getSheetAt(0);
+           XSSFChartSheet cs = (XSSFChartSheet) wb.getSheetAt(2);
+
+           assertEquals(0, ns.createDrawingPatriarch().getCharts().size());
+           assertEquals(1, cs.createDrawingPatriarch().getCharts().size());
+
+           XSSFChart chart = cs.createDrawingPatriarch().getCharts().get(0);
+           assertNull(chart.getTitleText());
+       }
     }
 }
index b9339ba0199283aff21fde1ebf6f5780aa86d2f8..2a2eece2f5a129ece668571218ddcc294baa134f 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -32,173 +33,169 @@ public final class TestXSSFColor {
     
    @Test
    public void testIndexedColour() throws Exception {
-      XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx");
-
-      // Check the CTColor is as expected
-      XSSFColor indexed = wb.getCellStyleAt(1).getFillBackgroundXSSFColor();
-      assertEquals(true, indexed.getCTColor().isSetIndexed());
-      assertEquals(64, indexed.getCTColor().getIndexed());
-      assertEquals(false, indexed.getCTColor().isSetRgb());
-      assertEquals(null, indexed.getCTColor().getRgb());
-
-      // Now check the XSSFColor
-      // Note - 64 is a special "auto" one with no rgb equiv
-      assertEquals(64, indexed.getIndexed());
-      assertEquals(null, indexed.getRGB());
-      assertEquals(null, indexed.getRGBWithTint());
-      assertEquals(null, indexed.getARGBHex());
-      assertFalse(indexed.hasAlpha());
-      assertFalse(indexed.hasTint());
-
-      // Now move to one with indexed rgb values
-      indexed.setIndexed(59);
-      assertEquals(true, indexed.getCTColor().isSetIndexed());
-      assertEquals(59, indexed.getCTColor().getIndexed());
-      assertEquals(false, indexed.getCTColor().isSetRgb());
-      assertEquals(null, indexed.getCTColor().getRgb());
-
-      assertEquals(59, indexed.getIndexed());
-      assertEquals("FF333300", indexed.getARGBHex());
-
-      assertEquals(3, indexed.getRGB().length);
-      assertEquals(0x33, indexed.getRGB()[0]);
-      assertEquals(0x33, indexed.getRGB()[1]);
-      assertEquals(0x00, indexed.getRGB()[2]);
-
-      assertEquals(4, indexed.getARGB().length);
-      assertEquals(-1, indexed.getARGB()[0]);
-      assertEquals(0x33, indexed.getARGB()[1]);
-      assertEquals(0x33, indexed.getARGB()[2]);
-      assertEquals(0x00, indexed.getARGB()[3]);
-
-      // You don't get tinted indexed colours, sorry...
-      assertEquals(null, indexed.getRGBWithTint());
-      
-      wb.close();
+      try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx")) {
+         // Check the CTColor is as expected
+         XSSFColor indexed = wb.getCellStyleAt(1).getFillBackgroundXSSFColor();
+         assertTrue(indexed.getCTColor().isSetIndexed());
+         assertEquals(64, indexed.getCTColor().getIndexed());
+         assertFalse(indexed.getCTColor().isSetRgb());
+         assertNull(indexed.getCTColor().getRgb());
+
+         // Now check the XSSFColor
+         // Note - 64 is a special "auto" one with no rgb equiv
+         assertEquals(64, indexed.getIndexed());
+         assertNull(indexed.getRGB());
+         assertNull(indexed.getRGBWithTint());
+         assertNull(indexed.getARGBHex());
+         assertFalse(indexed.hasAlpha());
+         assertFalse(indexed.hasTint());
+
+         // Now move to one with indexed rgb values
+         indexed.setIndexed(59);
+         assertTrue(indexed.getCTColor().isSetIndexed());
+         assertEquals(59, indexed.getCTColor().getIndexed());
+         assertFalse(indexed.getCTColor().isSetRgb());
+         assertNull(indexed.getCTColor().getRgb());
+
+         assertEquals(59, indexed.getIndexed());
+         assertEquals("FF333300", indexed.getARGBHex());
+
+         assertEquals(3, indexed.getRGB().length);
+         assertEquals(0x33, indexed.getRGB()[0]);
+         assertEquals(0x33, indexed.getRGB()[1]);
+         assertEquals(0x00, indexed.getRGB()[2]);
+
+         assertEquals(4, indexed.getARGB().length);
+         assertEquals(-1, indexed.getARGB()[0]);
+         assertEquals(0x33, indexed.getARGB()[1]);
+         assertEquals(0x33, indexed.getARGB()[2]);
+         assertEquals(0x00, indexed.getARGB()[3]);
+
+         // You don't get tinted indexed colours, sorry...
+         assertNull(indexed.getRGBWithTint());
+      }
    }
 
    @Test
    public void testRGBColour() throws IOException {
-      XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50299.xlsx");
-
-      // Check the CTColor is as expected
-      XSSFColor rgb3 = wb.getCellStyleAt((short)25).getFillForegroundXSSFColor();
-      assertEquals(false, rgb3.getCTColor().isSetIndexed());
-      assertEquals(0,     rgb3.getCTColor().getIndexed());
-      assertEquals(true,  rgb3.getCTColor().isSetTint());
-      assertEquals(-0.34999, rgb3.getCTColor().getTint(), 0.00001);
-      assertEquals(true,  rgb3.getCTColor().isSetRgb());
-      assertEquals(3,     rgb3.getCTColor().getRgb().length);
-
-      // Now check the XSSFColor
-      assertEquals(0, rgb3.getIndexed());
-      assertEquals(-0.34999, rgb3.getTint(), 0.00001);
-      assertFalse(rgb3.hasAlpha());
-      assertTrue(rgb3.hasTint());
-
-      assertEquals("FFFFFFFF", rgb3.getARGBHex());
-      assertEquals(3, rgb3.getRGB().length);
-      assertEquals(-1, rgb3.getRGB()[0]);
-      assertEquals(-1, rgb3.getRGB()[1]);
-      assertEquals(-1,  rgb3.getRGB()[2]);
-
-      assertEquals(4, rgb3.getARGB().length);
-      assertEquals(-1, rgb3.getARGB()[0]);
-      assertEquals(-1, rgb3.getARGB()[1]);
-      assertEquals(-1,  rgb3.getARGB()[2]);
-      assertEquals(-1,  rgb3.getARGB()[3]);
-
-      // Tint doesn't have the alpha
-      // tint = -0.34999
-      // 255 * (1 + tint) = 165 truncated
-      // or (byte) -91 (which is 165 - 256)
-      assertEquals(3, rgb3.getRGBWithTint().length);
-      assertEquals(-91, rgb3.getRGBWithTint()[0]);
-      assertEquals(-91,  rgb3.getRGBWithTint()[1]);
-      assertEquals(-91,  rgb3.getRGBWithTint()[2]);
-
-      // Set the color to black (no theme).
-      rgb3.setRGB(new byte[] {0, 0, 0});
-      assertEquals("FF000000", rgb3.getARGBHex());
-      assertEquals(0, rgb3.getCTColor().getRgb()[0]);
-      assertEquals(0, rgb3.getCTColor().getRgb()[1]);
-      assertEquals(0, rgb3.getCTColor().getRgb()[2]);
-
-      // Set another, is fine
-      rgb3.setRGB(new byte[] {16,17,18});
-      assertFalse(rgb3.hasAlpha());
-      assertEquals("FF101112", rgb3.getARGBHex());
-      assertEquals(0x10, rgb3.getCTColor().getRgb()[0]);
-      assertEquals(0x11, rgb3.getCTColor().getRgb()[1]);
-      assertEquals(0x12, rgb3.getCTColor().getRgb()[2]);
-      
-      wb.close();
+      try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50299.xlsx")) {
+
+         // Check the CTColor is as expected
+         XSSFColor rgb3 = wb.getCellStyleAt((short) 25).getFillForegroundXSSFColor();
+         assertFalse(rgb3.getCTColor().isSetIndexed());
+         assertEquals(0, rgb3.getCTColor().getIndexed());
+         assertTrue(rgb3.getCTColor().isSetTint());
+         assertEquals(-0.34999, rgb3.getCTColor().getTint(), 0.00001);
+         assertTrue(rgb3.getCTColor().isSetRgb());
+         assertEquals(3, rgb3.getCTColor().getRgb().length);
+
+         // Now check the XSSFColor
+         assertEquals(0, rgb3.getIndexed());
+         assertEquals(-0.34999, rgb3.getTint(), 0.00001);
+         assertFalse(rgb3.hasAlpha());
+         assertTrue(rgb3.hasTint());
+
+         assertEquals("FFFFFFFF", rgb3.getARGBHex());
+         assertEquals(3, rgb3.getRGB().length);
+         assertEquals(-1, rgb3.getRGB()[0]);
+         assertEquals(-1, rgb3.getRGB()[1]);
+         assertEquals(-1, rgb3.getRGB()[2]);
+
+         assertEquals(4, rgb3.getARGB().length);
+         assertEquals(-1, rgb3.getARGB()[0]);
+         assertEquals(-1, rgb3.getARGB()[1]);
+         assertEquals(-1, rgb3.getARGB()[2]);
+         assertEquals(-1, rgb3.getARGB()[3]);
+
+         // Tint doesn't have the alpha
+         // tint = -0.34999
+         // 255 * (1 + tint) = 165 truncated
+         // or (byte) -91 (which is 165 - 256)
+         assertEquals(3, rgb3.getRGBWithTint().length);
+         assertEquals(-91, rgb3.getRGBWithTint()[0]);
+         assertEquals(-91, rgb3.getRGBWithTint()[1]);
+         assertEquals(-91, rgb3.getRGBWithTint()[2]);
+
+         // Set the color to black (no theme).
+         rgb3.setRGB(new byte[]{0, 0, 0});
+         assertEquals("FF000000", rgb3.getARGBHex());
+         assertEquals(0, rgb3.getCTColor().getRgb()[0]);
+         assertEquals(0, rgb3.getCTColor().getRgb()[1]);
+         assertEquals(0, rgb3.getCTColor().getRgb()[2]);
+
+         // Set another, is fine
+         rgb3.setRGB(new byte[]{16, 17, 18});
+         assertFalse(rgb3.hasAlpha());
+         assertEquals("FF101112", rgb3.getARGBHex());
+         assertEquals(0x10, rgb3.getCTColor().getRgb()[0]);
+         assertEquals(0x11, rgb3.getCTColor().getRgb()[1]);
+         assertEquals(0x12, rgb3.getCTColor().getRgb()[2]);
+      }
    }
 
    @Test
    public void testARGBColour() throws IOException {
-      XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx");
-
-      // Check the CTColor is as expected
-      XSSFColor rgb4 = wb.getCellStyleAt((short)1).getFillForegroundXSSFColor();
-      assertEquals(false, rgb4.getCTColor().isSetIndexed());
-      assertEquals(0,     rgb4.getCTColor().getIndexed());
-      assertEquals(true, rgb4.getCTColor().isSetRgb());
-      assertEquals(4, rgb4.getCTColor().getRgb().length);
-
-      // Now check the XSSFColor
-      assertEquals(0, rgb4.getIndexed());
-      assertEquals(0.0, rgb4.getTint(), 0);
-      assertFalse(rgb4.hasTint());
-      assertTrue(rgb4.hasAlpha());
-
-      assertEquals("FFFF0000", rgb4.getARGBHex());
-      assertEquals(3, rgb4.getRGB().length);
-      assertEquals(-1, rgb4.getRGB()[0]);
-      assertEquals(0,  rgb4.getRGB()[1]);
-      assertEquals(0,  rgb4.getRGB()[2]);
-
-      assertEquals(4, rgb4.getARGB().length);
-      assertEquals(-1, rgb4.getARGB()[0]);
-      assertEquals(-1, rgb4.getARGB()[1]);
-      assertEquals(0,  rgb4.getARGB()[2]);
-      assertEquals(0,  rgb4.getARGB()[3]);
-
-      // Tint doesn't have the alpha
-      assertEquals(3, rgb4.getRGBWithTint().length);
-      assertEquals(-1, rgb4.getRGBWithTint()[0]);
-      assertEquals(0,  rgb4.getRGBWithTint()[1]);
-      assertEquals(0,  rgb4.getRGBWithTint()[2]);
-
-
-      // Turn on tinting, and check it behaves
-      // TODO These values are suspected to be wrong...
-      rgb4.setTint(0.4);
-      assertTrue(rgb4.hasTint());
-      assertEquals(0.4, rgb4.getTint(), 0);
-
-      assertEquals(3, rgb4.getRGBWithTint().length);
-      assertEquals(-1, rgb4.getRGBWithTint()[0]);
-      assertEquals(102,  rgb4.getRGBWithTint()[1]);
-      assertEquals(102,  rgb4.getRGBWithTint()[2]);
-      
-      wb.close();
+      try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx")) {
+
+         // Check the CTColor is as expected
+         XSSFColor rgb4 = wb.getCellStyleAt((short) 1).getFillForegroundXSSFColor();
+         assertFalse(rgb4.getCTColor().isSetIndexed());
+         assertEquals(0, rgb4.getCTColor().getIndexed());
+         assertTrue(rgb4.getCTColor().isSetRgb());
+         assertEquals(4, rgb4.getCTColor().getRgb().length);
+
+         // Now check the XSSFColor
+         assertEquals(0, rgb4.getIndexed());
+         assertEquals(0.0, rgb4.getTint(), 0);
+         assertFalse(rgb4.hasTint());
+         assertTrue(rgb4.hasAlpha());
+
+         assertEquals("FFFF0000", rgb4.getARGBHex());
+         assertEquals(3, rgb4.getRGB().length);
+         assertEquals(-1, rgb4.getRGB()[0]);
+         assertEquals(0, rgb4.getRGB()[1]);
+         assertEquals(0, rgb4.getRGB()[2]);
+
+         assertEquals(4, rgb4.getARGB().length);
+         assertEquals(-1, rgb4.getARGB()[0]);
+         assertEquals(-1, rgb4.getARGB()[1]);
+         assertEquals(0, rgb4.getARGB()[2]);
+         assertEquals(0, rgb4.getARGB()[3]);
+
+         // Tint doesn't have the alpha
+         assertEquals(3, rgb4.getRGBWithTint().length);
+         assertEquals(-1, rgb4.getRGBWithTint()[0]);
+         assertEquals(0, rgb4.getRGBWithTint()[1]);
+         assertEquals(0, rgb4.getRGBWithTint()[2]);
+
+
+         // Turn on tinting, and check it behaves
+         // TODO These values are suspected to be wrong...
+         rgb4.setTint(0.4);
+         assertTrue(rgb4.hasTint());
+         assertEquals(0.4, rgb4.getTint(), 0);
+
+         assertEquals(3, rgb4.getRGBWithTint().length);
+         assertEquals(-1, rgb4.getRGBWithTint()[0]);
+         assertEquals(102, rgb4.getRGBWithTint()[1]);
+         assertEquals(102, rgb4.getRGBWithTint()[2]);
+      }
    }
    
    @Test
    public void testCustomIndexedColour() throws Exception {
-       XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("customIndexedColors.xlsx");
-       XSSFCell cell = wb.getSheetAt(1).getRow(0).getCell(0);
-       XSSFColor color = cell.getCellStyle().getFillForegroundColorColor();
-       CTColors ctColors = wb.getStylesSource().getCTStylesheet().getColors();
+       try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("customIndexedColors.xlsx")) {
+          XSSFCell cell = wb.getSheetAt(1).getRow(0).getCell(0);
+          XSSFColor color = cell.getCellStyle().getFillForegroundColorColor();
+          CTColors ctColors = wb.getStylesSource().getCTStylesheet().getColors();
 
-       CTRgbColor ctRgbColor = ctColors.getIndexedColors()
-               .getRgbColorList()
-               .get(color.getIndex());
+          CTRgbColor ctRgbColor = ctColors.getIndexedColors()
+                  .getRgbColorList()
+                  .get(color.getIndex());
 
-       String hexRgb = ctRgbColor.getDomNode().getAttributes().getNamedItem("rgb").getNodeValue();
+          String hexRgb = ctRgbColor.getDomNode().getAttributes().getNamedItem("rgb").getNodeValue();
 
-       assertEquals(hexRgb, color.getARGBHex());
-      
+          assertEquals(hexRgb, color.getARGBHex());
+       }
    }
 }
index 9f4479240c974bb6d3b6ae150aeed2977e79f10a..b5aa83026aafa8d55d4dd1e8753813659170d2f1 100644 (file)
@@ -53,30 +53,29 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator {
 
     @Test
     public void testSharedFormulas_evaluateInCell() throws IOException {
-        XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("49872.xlsx");
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        XSSFSheet sheet = wb.getSheetAt(0);
+        try (XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("49872.xlsx")) {
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            XSSFSheet sheet = wb.getSheetAt(0);
 
-        double result = 3.0;
+            double result = 3.0;
 
-        // B3 is a master shared formula, C3 and D3 don't have the formula written in their f element.
-        // Instead, the attribute si for a particular cell is used to figure what the formula expression
-        // should be based on the cell's relative location to the master formula, e.g.
-        // B3:        <f t="shared" ref="B3:D3" si="0">B1+B2</f>
-        // C3 and D3: <f t="shared" si="0"/>
+            // B3 is a master shared formula, C3 and D3 don't have the formula written in their f element.
+            // Instead, the attribute si for a particular cell is used to figure what the formula expression
+            // should be based on the cell's relative location to the master formula, e.g.
+            // B3:        <f t="shared" ref="B3:D3" si="0">B1+B2</f>
+            // C3 and D3: <f t="shared" si="0"/>
 
-        // get B3 and evaluate it in the cell
-        XSSFCell b3 = sheet.getRow(2).getCell(1);
-        assertEquals(result, evaluator.evaluateInCell(b3).getNumericCellValue(), 0);
+            // get B3 and evaluate it in the cell
+            XSSFCell b3 = sheet.getRow(2).getCell(1);
+            assertEquals(result, evaluator.evaluateInCell(b3).getNumericCellValue(), 0);
 
-        //at this point the master formula is gone, but we are still able to evaluate dependent cells
-        XSSFCell c3 = sheet.getRow(2).getCell(2);
-        assertEquals(result, evaluator.evaluateInCell(c3).getNumericCellValue(), 0);
+            //at this point the master formula is gone, but we are still able to evaluate dependent cells
+            XSSFCell c3 = sheet.getRow(2).getCell(2);
+            assertEquals(result, evaluator.evaluateInCell(c3).getNumericCellValue(), 0);
 
-        XSSFCell d3 = sheet.getRow(2).getCell(3);
-        assertEquals(result, evaluator.evaluateInCell(d3).getNumericCellValue(), 0);
-        
-        wb.close();
+            XSSFCell d3 = sheet.getRow(2).getCell(3);
+            assertEquals(result, evaluator.evaluateInCell(d3).getNumericCellValue(), 0);
+        }
     }
 
     /**
@@ -84,32 +83,31 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator {
      */
     @Test
     public void testEvaluateColumnGreaterThan255() throws IOException {
-        XSSFWorkbook wb = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("50096.xlsx");
-        XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-
-        /*
-         *  The first row simply contains the numbers 1 - 300.
-         *  The second row simply refers to the cell value above in the first row by a simple formula.
-         */
-        for (int i = 245; i < 265; i++) {
-            XSSFCell cell_noformula = wb.getSheetAt(0).getRow(0).getCell(i);
-            XSSFCell cell_formula = wb.getSheetAt(0).getRow(1).getCell(i);
-
-            CellReference ref_noformula = new CellReference(cell_noformula.getRowIndex(), cell_noformula.getColumnIndex());
-            CellReference ref_formula = new CellReference(cell_noformula.getRowIndex(), cell_noformula.getColumnIndex());
-            String fmla = cell_formula.getCellFormula();
-            // assure that the formula refers to the cell above.
-            // the check below is 'deep' and involves conversion of the shared formula:
-            // in the sample file a shared formula in GN1 is spanned in the range GN2:IY2,
-            assertEquals(ref_noformula.formatAsString(), fmla);
-
-            CellValue cv_noformula = evaluator.evaluate(cell_noformula);
-            CellValue cv_formula = evaluator.evaluate(cell_formula);
-            assertEquals("Wrong evaluation result in " + ref_formula.formatAsString(),
-                    cv_noformula.getNumberValue(), cv_formula.getNumberValue(), 0);
+        try (XSSFWorkbook wb = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("50096.xlsx")) {
+            XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+
+            /*
+             *  The first row simply contains the numbers 1 - 300.
+             *  The second row simply refers to the cell value above in the first row by a simple formula.
+             */
+            for (int i = 245; i < 265; i++) {
+                XSSFCell cell_noformula = wb.getSheetAt(0).getRow(0).getCell(i);
+                XSSFCell cell_formula = wb.getSheetAt(0).getRow(1).getCell(i);
+
+                CellReference ref_noformula = new CellReference(cell_noformula.getRowIndex(), cell_noformula.getColumnIndex());
+                CellReference ref_formula = new CellReference(cell_noformula.getRowIndex(), cell_noformula.getColumnIndex());
+                String fmla = cell_formula.getCellFormula();
+                // assure that the formula refers to the cell above.
+                // the check below is 'deep' and involves conversion of the shared formula:
+                // in the sample file a shared formula in GN1 is spanned in the range GN2:IY2,
+                assertEquals(ref_noformula.formatAsString(), fmla);
+
+                CellValue cv_noformula = evaluator.evaluate(cell_noformula);
+                CellValue cv_formula = evaluator.evaluate(cell_formula);
+                assertEquals("Wrong evaluation result in " + ref_formula.formatAsString(),
+                        cv_noformula.getNumberValue(), cv_formula.getNumberValue(), 0);
+            }
         }
-        
-        wb.close();
     }
     
     /**
@@ -119,105 +117,110 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator {
      */
     @Test
     public void testReferencesToOtherWorkbooks() throws Exception {
-        XSSFWorkbook wb = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("ref2-56737.xlsx");
-        XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        XSSFSheet s = wb.getSheetAt(0);
-        
-        // References to a .xlsx file
-        Row rXSLX = s.getRow(2);
-        Cell cXSLX_cell = rXSLX.getCell(4);
-        Cell cXSLX_sNR  = rXSLX.getCell(6);
-        Cell cXSLX_gNR  = rXSLX.getCell(8);
-        assertEquals("[1]Uses!$A$1",        cXSLX_cell.getCellFormula());
-        assertEquals("[1]Defines!NR_To_A1", cXSLX_sNR.getCellFormula());
-        assertEquals("[1]!NR_Global_B2",    cXSLX_gNR.getCellFormula());
-        
-        assertEquals("Hello!", cXSLX_cell.getStringCellValue());
-        assertEquals("Test A1", cXSLX_sNR.getStringCellValue());
-        assertEquals(142.0, cXSLX_gNR.getNumericCellValue(), 0);
-        
-        // References to a .xls file
-        Row rXSL = s.getRow(4);
-        Cell cXSL_cell = rXSL.getCell(4);
-        Cell cXSL_sNR  = rXSL.getCell(6);
-        Cell cXSL_gNR  = rXSL.getCell(8);
-        assertEquals("[2]Uses!$C$1",        cXSL_cell.getCellFormula());
-        assertEquals("[2]Defines!NR_To_A1", cXSL_sNR.getCellFormula());
-        assertEquals("[2]!NR_Global_B2",    cXSL_gNR.getCellFormula());
-        
-        assertEquals("Hello!", cXSL_cell.getStringCellValue());
-        assertEquals("Test A1", cXSL_sNR.getStringCellValue());
-        assertEquals(142.0, cXSL_gNR.getNumericCellValue(), 0);
-        
-        // Try to evaluate without references, won't work
-        // (At least, not unit we fix bug #56752 that is)
-        try {
-            evaluator.evaluate(cXSL_cell);
-            fail("Without a fix for #56752, shouldn't be able to evaluate a " +
-                 "reference to a non-provided linked workbook");
-        } catch(Exception e) {
-            // expected here
-        }
-        
-        // Setup the environment
-        Map<String,FormulaEvaluator> evaluators = new HashMap<>();
-        evaluators.put("ref2-56737.xlsx", evaluator);
-        evaluators.put("56737.xlsx", 
-                _testDataProvider.openSampleWorkbook("56737.xlsx").getCreationHelper().createFormulaEvaluator());
-        evaluators.put("56737.xls", 
-                HSSFTestDataSamples.openSampleWorkbook("56737.xls").getCreationHelper().createFormulaEvaluator());
-        evaluator.setupReferencedWorkbooks(evaluators);
-        
-        // Try evaluating all of them, ensure we don't blow up
-        for(Row r : s) {
-            for (Cell c : r) {
-                evaluator.evaluate(c);
+        try (XSSFWorkbook wb = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("ref2-56737.xlsx")) {
+            XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            XSSFSheet s = wb.getSheetAt(0);
+
+            // References to a .xlsx file
+            Row rXSLX = s.getRow(2);
+            Cell cXSLX_cell = rXSLX.getCell(4);
+            Cell cXSLX_sNR = rXSLX.getCell(6);
+            Cell cXSLX_gNR = rXSLX.getCell(8);
+            assertEquals("[1]Uses!$A$1", cXSLX_cell.getCellFormula());
+            assertEquals("[1]Defines!NR_To_A1", cXSLX_sNR.getCellFormula());
+            assertEquals("[1]!NR_Global_B2", cXSLX_gNR.getCellFormula());
+
+            assertEquals("Hello!", cXSLX_cell.getStringCellValue());
+            assertEquals("Test A1", cXSLX_sNR.getStringCellValue());
+            assertEquals(142.0, cXSLX_gNR.getNumericCellValue(), 0);
+
+            // References to a .xls file
+            Row rXSL = s.getRow(4);
+            Cell cXSL_cell = rXSL.getCell(4);
+            Cell cXSL_sNR = rXSL.getCell(6);
+            Cell cXSL_gNR = rXSL.getCell(8);
+            assertEquals("[2]Uses!$C$1", cXSL_cell.getCellFormula());
+            assertEquals("[2]Defines!NR_To_A1", cXSL_sNR.getCellFormula());
+            assertEquals("[2]!NR_Global_B2", cXSL_gNR.getCellFormula());
+
+            assertEquals("Hello!", cXSL_cell.getStringCellValue());
+            assertEquals("Test A1", cXSL_sNR.getStringCellValue());
+            assertEquals(142.0, cXSL_gNR.getNumericCellValue(), 0);
+
+            // Try to evaluate without references, won't work
+            // (At least, not unit we fix bug #56752 that is)
+            try {
+                evaluator.evaluate(cXSL_cell);
+                fail("Without a fix for #56752, shouldn't be able to evaluate a " +
+                        "reference to a non-provided linked workbook");
+            } catch (Exception e) {
+                // expected here
             }
-        }
-        // And evaluate the other way too
-        evaluator.evaluateAll();
-        
-        // Static evaluator won't work, as no references passed in
-        try {
-            XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
-            fail("Static method lacks references, shouldn't work");
-        } catch(Exception e) {
-            // expected here
-        }
-        
-        
-        // Evaluate specific cells and check results
-        assertEquals("\"Hello!\"",  evaluator.evaluate(cXSLX_cell).formatAsString());
-        assertEquals("\"Test A1\"", evaluator.evaluate(cXSLX_sNR).formatAsString());
-        assertEquals("142.0",   evaluator.evaluate(cXSLX_gNR).formatAsString());
-
-        assertEquals("\"Hello!\"",  evaluator.evaluate(cXSL_cell).formatAsString());
-        assertEquals("\"Test A1\"", evaluator.evaluate(cXSL_sNR).formatAsString());
-        assertEquals("142.0",   evaluator.evaluate(cXSL_gNR).formatAsString());
-        
-        
-        // Add another formula referencing these workbooks
-        Cell cXSL_cell2 = rXSL.createCell(40);
-        cXSL_cell2.setCellFormula("[56737.xls]Uses!$C$1");
-        // TODO Shouldn't it become [2] like the others?
-        assertEquals("[56737.xls]Uses!$C$1", cXSL_cell2.getCellFormula());
-        assertEquals("\"Hello!\"",  evaluator.evaluate(cXSL_cell2).formatAsString());
-        
-        
-        // Now add a formula that refers to yet another (different) workbook
-        // Won't work without the workbook being linked
-        Cell cXSLX_nw_cell = rXSLX.createCell(42);
-        try {
-            cXSLX_nw_cell.setCellFormula("[alt.xlsx]Sheet1!$A$1");
-            fail("New workbook not linked, shouldn't be able to add");
-        } catch (Exception e) {
-            // expected here
-        }
-        
-        // Link and re-try
-        try (Workbook alt = new XSSFWorkbook()) {
-            alt.createSheet().createRow(0).createCell(0).setCellValue("In another workbook");
-            // TODO Implement the rest of this, see bug #57184
+
+            // Setup the environment
+            Map<String, FormulaEvaluator> evaluators = new HashMap<>();
+            evaluators.put("ref2-56737.xlsx", evaluator);
+            Workbook wbEval1 = _testDataProvider.openSampleWorkbook("56737.xlsx");
+            evaluators.put("56737.xlsx",
+                    wbEval1.getCreationHelper().createFormulaEvaluator());
+            Workbook wbEval2 = HSSFTestDataSamples.openSampleWorkbook("56737.xls");
+            evaluators.put("56737.xls",
+                    wbEval2.getCreationHelper().createFormulaEvaluator());
+            evaluator.setupReferencedWorkbooks(evaluators);
+
+            // Try evaluating all of them, ensure we don't blow up
+            for (Row r : s) {
+                for (Cell c : r) {
+                    evaluator.evaluate(c);
+                }
+            }
+            // And evaluate the other way too
+            evaluator.evaluateAll();
+
+            // Static evaluator won't work, as no references passed in
+            try {
+                XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
+                fail("Static method lacks references, shouldn't work");
+            } catch (Exception e) {
+                // expected here
+            }
+
+
+            // Evaluate specific cells and check results
+            assertEquals("\"Hello!\"", evaluator.evaluate(cXSLX_cell).formatAsString());
+            assertEquals("\"Test A1\"", evaluator.evaluate(cXSLX_sNR).formatAsString());
+            assertEquals("142.0", evaluator.evaluate(cXSLX_gNR).formatAsString());
+
+            assertEquals("\"Hello!\"", evaluator.evaluate(cXSL_cell).formatAsString());
+            assertEquals("\"Test A1\"", evaluator.evaluate(cXSL_sNR).formatAsString());
+            assertEquals("142.0", evaluator.evaluate(cXSL_gNR).formatAsString());
+
+
+            // Add another formula referencing these workbooks
+            Cell cXSL_cell2 = rXSL.createCell(40);
+            cXSL_cell2.setCellFormula("[56737.xls]Uses!$C$1");
+            // TODO Shouldn't it become [2] like the others?
+            assertEquals("[56737.xls]Uses!$C$1", cXSL_cell2.getCellFormula());
+            assertEquals("\"Hello!\"", evaluator.evaluate(cXSL_cell2).formatAsString());
+
+
+            // Now add a formula that refers to yet another (different) workbook
+            // Won't work without the workbook being linked
+            Cell cXSLX_nw_cell = rXSLX.createCell(42);
+            try {
+                cXSLX_nw_cell.setCellFormula("[alt.xlsx]Sheet1!$A$1");
+                fail("New workbook not linked, shouldn't be able to add");
+            } catch (Exception e) {
+                // expected here
+            }
+
+            wbEval1.close();
+            wbEval2.close();
+
+            // Link and re-try
+            try (Workbook alt = new XSSFWorkbook()) {
+                alt.createSheet().createRow(0).createCell(0).setCellValue("In another workbook");
+                // TODO Implement the rest of this, see bug #57184
 /*
             wb.linkExternalWorkbook("alt.xlsx", alt);
 
@@ -238,9 +241,8 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator {
             evaluator.evaluate(cXSLX_nw_cell);
             assertEquals("In another workbook", cXSLX_nw_cell.getStringCellValue());
 */
+            }
         }
-        
-        wb.close();
     }
     
     /**
@@ -389,63 +391,66 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator {
 
     // FIXME: use junit4 parametrization
     private static void verifyAllFormulasInWorkbookCanBeEvaluated(String sampleWorkbook) throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(sampleWorkbook);
-        XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
-        wb.close();
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(sampleWorkbook)) {
+            XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
+        }
     }
 
     @Test
-    public void test59736() {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("59736.xlsx");
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        Cell cell = wb.getSheetAt(0).getRow(0).getCell(0);
-        assertEquals(1, cell.getNumericCellValue(), 0.001);
-
-        cell = wb.getSheetAt(0).getRow(1).getCell(0);
-        CellValue value = evaluator.evaluate(cell);
-        assertEquals(1, value.getNumberValue(), 0.001);
-
-        cell = wb.getSheetAt(0).getRow(2).getCell(0);
-        value = evaluator.evaluate(cell);
-        assertEquals(1, value.getNumberValue(), 0.001);
+    public void test59736() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("59736.xlsx")) {
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            Cell cell = wb.getSheetAt(0).getRow(0).getCell(0);
+            assertEquals(1, cell.getNumericCellValue(), 0.001);
+
+            cell = wb.getSheetAt(0).getRow(1).getCell(0);
+            CellValue value = evaluator.evaluate(cell);
+            assertEquals(1, value.getNumberValue(), 0.001);
+
+            cell = wb.getSheetAt(0).getRow(2).getCell(0);
+            value = evaluator.evaluate(cell);
+            assertEquals(1, value.getNumberValue(), 0.001);
+        }
     }
     
     @Test
     public void evaluateInCellReturnsSameDataType() throws IOException {
-        XSSFWorkbook wb = new XSSFWorkbook();
-        wb.createSheet().createRow(0).createCell(0);
-        XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        XSSFCell cell = wb.getSheetAt(0).getRow(0).getCell(0);
-        XSSFCell same = evaluator.evaluateInCell(cell);
-        assertSame(cell, same);
-        wb.close();
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            wb.createSheet().createRow(0).createCell(0);
+            XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            XSSFCell cell = wb.getSheetAt(0).getRow(0).getCell(0);
+            XSSFCell same = evaluator.evaluateInCell(cell);
+            assertSame(cell, same);
+        }
     }
     
     @Test
-    public void testBug61468() {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("simple-monthly-budget.xlsx");
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        Cell cell = wb.getSheetAt(0).getRow(8).getCell(4);
-        assertEquals(3750, cell.getNumericCellValue(), 0.001);
-
-        CellValue value = evaluator.evaluate(cell);
-        assertEquals(3750, value.getNumberValue(), 0.001);
+    public void testBug61468() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("simple-monthly-budget.xlsx")) {
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            Cell cell = wb.getSheetAt(0).getRow(8).getCell(4);
+            assertEquals(3750, cell.getNumericCellValue(), 0.001);
+
+            CellValue value = evaluator.evaluate(cell);
+            assertEquals(3750, value.getNumberValue(), 0.001);
+        }
     }
     
     @Test
     @Ignore // this is from an open bug/discussion over handling localization for number formats
-    public void testBug61495() {
-        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("61495-test.xlsm");
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
-        Cell cell = wb.getSheetAt(0).getRow(0).getCell(1);
+    public void testBug61495() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("61495-test.xlsm")) {
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            Cell cell = wb.getSheetAt(0).getRow(0).getCell(1);
 //        assertEquals("D 67.10", cell.getStringCellValue());
-        
-        CellValue value = evaluator.evaluate(cell);
-        assertEquals("D 67.10",
-                value.getStringValue());
-        
-        assertEquals("D 0,068",
-                evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(1)).getStringValue());
+
+            CellValue value = evaluator.evaluate(cell);
+            assertEquals("D 67.10",
+                    value.getStringValue());
+
+            assertEquals("D 0,068",
+                    evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(1)).getStringValue());
+        }
     }
 
     
index 3cbbfc517cd2c1342f629e8c1e4f79bb3d2ea962..0a7cf4a2f5d7045e47da6234637ee044975408a9 100644 (file)
@@ -39,15 +39,16 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink {
     }
 
     @Test
-    public void testLoadExisting() {
-        XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx");
-        assertEquals(3, workbook.getNumberOfSheets());
+    public void testLoadExisting() throws IOException {
+        try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx")) {
+            assertEquals(3, workbook.getNumberOfSheets());
 
-        XSSFSheet sheet = workbook.getSheetAt(0);
+            XSSFSheet sheet = workbook.getSheetAt(0);
 
-        // Check the hyperlinks
-        assertEquals(4, sheet.getNumHyperlinks());
-        doTestHyperlinkContents(sheet);
+            // Check the hyperlinks
+            assertEquals(4, sheet.getNumHyperlinks());
+            doTestHyperlinkContents(sheet);
+        }
     }
 
     @Test
@@ -117,73 +118,74 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink {
     }
 
     @Test
-    public void testLoadSave() {
-        XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx");
-        CreationHelper createHelper = workbook.getCreationHelper();
-        assertEquals(3, workbook.getNumberOfSheets());
-        XSSFSheet sheet = workbook.getSheetAt(0);
+    public void testLoadSave() throws IOException {
+        try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx")) {
+            CreationHelper createHelper = workbook.getCreationHelper();
+            assertEquals(3, workbook.getNumberOfSheets());
+            XSSFSheet sheet = workbook.getSheetAt(0);
 
-        // Check hyperlinks
-        assertEquals(4, sheet.getNumHyperlinks());
-        doTestHyperlinkContents(sheet);
+            // Check hyperlinks
+            assertEquals(4, sheet.getNumHyperlinks());
+            doTestHyperlinkContents(sheet);
 
 
-        // Write out, and check
+            // Write out, and check
 
-        // Load up again, check all links still there
-        XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(workbook);
-        assertEquals(3, wb2.getNumberOfSheets());
-        assertNotNull(wb2.getSheetAt(0));
-        assertNotNull(wb2.getSheetAt(1));
-        assertNotNull(wb2.getSheetAt(2));
+            // Load up again, check all links still there
+            XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(workbook);
+            assertEquals(3, wb2.getNumberOfSheets());
+            assertNotNull(wb2.getSheetAt(0));
+            assertNotNull(wb2.getSheetAt(1));
+            assertNotNull(wb2.getSheetAt(2));
 
-        sheet = wb2.getSheetAt(0);
+            sheet = wb2.getSheetAt(0);
 
 
-        // Check hyperlinks again
-        assertEquals(4, sheet.getNumHyperlinks());
-        doTestHyperlinkContents(sheet);
+            // Check hyperlinks again
+            assertEquals(4, sheet.getNumHyperlinks());
+            doTestHyperlinkContents(sheet);
 
 
-        // Add one more, and re-check
-        Row r17 = sheet.createRow(17);
-        Cell r17c = r17.createCell(2);
+            // Add one more, and re-check
+            Row r17 = sheet.createRow(17);
+            Cell r17c = r17.createCell(2);
 
-        Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL);
-        hyperlink.setAddress("http://poi.apache.org/spreadsheet/");
-        hyperlink.setLabel("POI SS Link");
-        r17c.setHyperlink(hyperlink);
+            Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL);
+            hyperlink.setAddress("http://poi.apache.org/spreadsheet/");
+            hyperlink.setLabel("POI SS Link");
+            r17c.setHyperlink(hyperlink);
 
-        assertEquals(5, sheet.getNumHyperlinks());
-        doTestHyperlinkContents(sheet);
+            assertEquals(5, sheet.getNumHyperlinks());
+            doTestHyperlinkContents(sheet);
 
-        assertEquals(HyperlinkType.URL,
-                sheet.getRow(17).getCell(2).getHyperlink().getType());
-        assertEquals("POI SS Link",
-                sheet.getRow(17).getCell(2).getHyperlink().getLabel());
-        assertEquals("http://poi.apache.org/spreadsheet/",
-                sheet.getRow(17).getCell(2).getHyperlink().getAddress());
+            assertEquals(HyperlinkType.URL,
+                    sheet.getRow(17).getCell(2).getHyperlink().getType());
+            assertEquals("POI SS Link",
+                    sheet.getRow(17).getCell(2).getHyperlink().getLabel());
+            assertEquals("http://poi.apache.org/spreadsheet/",
+                    sheet.getRow(17).getCell(2).getHyperlink().getAddress());
 
 
-        // Save and re-load once more
+            // Save and re-load once more
 
-        XSSFWorkbook wb3 = XSSFTestDataSamples.writeOutAndReadBack(wb2);
-        assertEquals(3, wb3.getNumberOfSheets());
-        assertNotNull(wb3.getSheetAt(0));
-        assertNotNull(wb3.getSheetAt(1));
-        assertNotNull(wb3.getSheetAt(2));
+            XSSFWorkbook wb3 = XSSFTestDataSamples.writeOutAndReadBack(wb2);
+            assertEquals(3, wb3.getNumberOfSheets());
+            assertNotNull(wb3.getSheetAt(0));
+            assertNotNull(wb3.getSheetAt(1));
+            assertNotNull(wb3.getSheetAt(2));
 
-        sheet = wb3.getSheetAt(0);
+            sheet = wb3.getSheetAt(0);
 
-        assertEquals(5, sheet.getNumHyperlinks());
-        doTestHyperlinkContents(sheet);
+            assertEquals(5, sheet.getNumHyperlinks());
+            doTestHyperlinkContents(sheet);
 
-        assertEquals(HyperlinkType.URL,
-                sheet.getRow(17).getCell(2).getHyperlink().getType());
-        assertEquals("POI SS Link",
-                sheet.getRow(17).getCell(2).getHyperlink().getLabel());
-        assertEquals("http://poi.apache.org/spreadsheet/",
-                sheet.getRow(17).getCell(2).getHyperlink().getAddress());
+            assertEquals(HyperlinkType.URL,
+                    sheet.getRow(17).getCell(2).getHyperlink().getType());
+            assertEquals("POI SS Link",
+                    sheet.getRow(17).getCell(2).getHyperlink().getLabel());
+            assertEquals("http://poi.apache.org/spreadsheet/",
+                    sheet.getRow(17).getCell(2).getHyperlink().getAddress());
+        }
     }
 
     /**
@@ -198,8 +200,7 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink {
         // First is a link to poi
         assertEquals(HyperlinkType.URL,
                 sheet.getRow(3).getCell(2).getHyperlink().getType());
-        assertEquals(null,
-                sheet.getRow(3).getCell(2).getHyperlink().getLabel());
+        assertNull(sheet.getRow(3).getCell(2).getHyperlink().getLabel());
         assertEquals("http://poi.apache.org/",
                 sheet.getRow(3).getCell(2).getHyperlink().getAddress());
 
@@ -214,60 +215,63 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink {
         // Next is a file
         assertEquals(HyperlinkType.FILE,
                 sheet.getRow(15).getCell(2).getHyperlink().getType());
-        assertEquals(null,
-                sheet.getRow(15).getCell(2).getHyperlink().getLabel());
+        assertNull(sheet.getRow(15).getCell(2).getHyperlink().getLabel());
         assertEquals("WithVariousData.xlsx",
                 sheet.getRow(15).getCell(2).getHyperlink().getAddress());
 
         // Last is a mailto
         assertEquals(HyperlinkType.EMAIL,
                 sheet.getRow(16).getCell(2).getHyperlink().getType());
-        assertEquals(null,
-                sheet.getRow(16).getCell(2).getHyperlink().getLabel());
+        assertNull(sheet.getRow(16).getCell(2).getHyperlink().getLabel());
         assertEquals("mailto:dev@poi.apache.org?subject=XSSF%20Hyperlinks",
                 sheet.getRow(16).getCell(2).getHyperlink().getAddress());
     }
 
     @Test
-    public void test52716() {
-        XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("52716.xlsx");
-        XSSFSheet sh1 = wb1.getSheetAt(0);
-
-        XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1);
-        XSSFSheet sh2 = wb2.getSheetAt(0);
-
-        assertEquals(sh1.getNumberOfComments(), sh2.getNumberOfComments());
-        XSSFHyperlink l1 = sh1.getHyperlink(0, 1);
-        assertEquals(HyperlinkType.DOCUMENT, l1.getType());
-        assertEquals("B1", l1.getCellRef());
-        assertEquals("Sort on Titel", l1.getTooltip());
-
-        XSSFHyperlink l2 = sh2.getHyperlink(0, 1);
-        assertEquals(l1.getTooltip(), l2.getTooltip());
-        assertEquals(HyperlinkType.DOCUMENT, l2.getType());
-        assertEquals("B1", l2.getCellRef());
+    public void test52716() throws IOException {
+        try (XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("52716.xlsx")) {
+            XSSFSheet sh1 = wb1.getSheetAt(0);
+
+            XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1);
+            XSSFSheet sh2 = wb2.getSheetAt(0);
+
+            assertEquals(sh1.getNumberOfComments(), sh2.getNumberOfComments());
+            XSSFHyperlink l1 = sh1.getHyperlink(0, 1);
+            assertEquals(HyperlinkType.DOCUMENT, l1.getType());
+            assertEquals("B1", l1.getCellRef());
+            assertEquals("Sort on Titel", l1.getTooltip());
+
+            XSSFHyperlink l2 = sh2.getHyperlink(0, 1);
+            assertEquals(l1.getTooltip(), l2.getTooltip());
+            assertEquals(HyperlinkType.DOCUMENT, l2.getType());
+            assertEquals("B1", l2.getCellRef());
+        }
     }
 
     @Test
-    public void test53734() {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53734.xlsx");
-        XSSFHyperlink link = wb.getSheetAt(0).getRow(0).getCell(0).getHyperlink();
-        assertEquals("javascript:///", link.getAddress());
-
-        wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        link = wb.getSheetAt(0).getRow(0).getCell(0).getHyperlink();
-        assertEquals("javascript:///", link.getAddress());
+    public void test53734() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53734.xlsx")) {
+            Hyperlink link = wb.getSheetAt(0).getRow(0).getCell(0).getHyperlink();
+            assertEquals("javascript:///", link.getAddress());
+
+            try (XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb)) {
+                link = wb2.getSheetAt(0).getRow(0).getCell(0).getHyperlink();
+                assertEquals("javascript:///", link.getAddress());
+            }
+        }
     }
 
     @Test
-    public void test53282() {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53282.xlsx");
-        XSSFHyperlink link = wb.getSheetAt(0).getRow(0).getCell(14).getHyperlink();
-        assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress());
-
-        wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        link = wb.getSheetAt(0).getRow(0).getCell(14).getHyperlink();
-        assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress());
+    public void test53282() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53282.xlsx")) {
+            Hyperlink link = wb.getSheetAt(0).getRow(0).getCell(14).getHyperlink();
+            assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress());
+
+            try (XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb)) {
+                link = wb2.getSheetAt(0).getRow(0).getCell(14).getHyperlink();
+                assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress());
+            }
+        }
     }
     
     @Override
index 1f5599c426782a7f22924dcc9ea23a5513e6a950..3955219e20ebacb218e4e36f8b7b1f5714ddc03d 100644 (file)
@@ -20,7 +20,7 @@ package org.apache.poi.xssf.usermodel;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-import java.util.Iterator;
+import java.io.IOException;
 import java.util.List;
 
 import org.apache.poi.xssf.XSSFTestDataSamples;
@@ -32,13 +32,17 @@ import org.junit.Test;
 public final class TestXSSFShape {
 
     @Test
-    public void test58325_one() {
-        check58325(XSSFTestDataSamples.openSampleWorkbook("58325_lt.xlsx"), 1);
+    public void test58325_one() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("58325_lt.xlsx")) {
+            check58325(wb, 1);
+        }
     }
 
     @Test
-    public void test58325_three() {
-        check58325(XSSFTestDataSamples.openSampleWorkbook("58325_db.xlsx"), 3);
+    public void test58325_three() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("58325_db.xlsx")) {
+            check58325(wb, 3);
+        }
     }
 
     private void check58325(XSSFWorkbook wb, int expectedShapes) {
@@ -46,21 +50,19 @@ public final class TestXSSFShape {
         assertNotNull(sheet);
 
         StringBuilder str = new StringBuilder();
-        str.append("sheet " + sheet.getSheetName() + " - ");
+        str.append("sheet ").append(sheet.getSheetName()).append(" - ");
 
         XSSFDrawing drawing = sheet.getDrawingPatriarch();
         //drawing = ((XSSFSheet)sheet).createDrawingPatriarch();
 
         List<XSSFShape> shapes = drawing.getShapes();
-        str.append("drawing.getShapes().size() = " + shapes.size());
-        Iterator<XSSFShape> it = shapes.iterator();
-        while(it.hasNext()) {           
-            XSSFShape shape = it.next();
-            str.append(", " + shape);
-            str.append(", Col1:"+((XSSFClientAnchor)shape.getAnchor()).getCol1());
-            str.append(", Col2:"+((XSSFClientAnchor)shape.getAnchor()).getCol2());
-            str.append(", Row1:"+((XSSFClientAnchor)shape.getAnchor()).getRow1());
-            str.append(", Row2:"+((XSSFClientAnchor)shape.getAnchor()).getRow2());
+        str.append("drawing.getShapes().size() = ").append(shapes.size());
+        for (XSSFShape shape : shapes) {
+            str.append(", ").append(shape);
+            str.append(", Col1:").append(((XSSFClientAnchor) shape.getAnchor()).getCol1());
+            str.append(", Col2:").append(((XSSFClientAnchor) shape.getAnchor()).getCol2());
+            str.append(", Row1:").append(((XSSFClientAnchor) shape.getAnchor()).getRow1());
+            str.append(", Row2:").append(((XSSFClientAnchor) shape.getAnchor()).getRow2());
         }
         
         assertEquals("Having shapes: " + str, 
index cb8fc60c0e85ce261d72a70953c1a21143d602a9..c2eb54ebe57740d2762306cfd118387a8bfb7156 100644 (file)
@@ -34,7 +34,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
 
     //private int o_groupsNumber = 0;
 
-    public void test55640() throws IOException {
+    public void test55640() {
         //long startTime = System.currentTimeMillis();
         Workbook wb = new XSSFWorkbook();
         fillData(wb);
@@ -78,7 +78,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
         return Math.random() > 0.5d;
     }
 
-    private void writeToFile(Workbook p_wb) throws IOException {
+    private void writeToFile(Workbook p_wb) {
 //        FileOutputStream fileOut = new FileOutputStream("/tmp/55640.xlsx");
 //        try {
 //            p_wb.write(fileOut);
@@ -88,7 +88,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
         assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(p_wb));
     }
 
-    public void test55640reduce1() throws IOException {
+    public void test55640reduce1() {
         Workbook wb = new XSSFWorkbook();
         Sheet sheet = wb.createSheet("sheet123");
         sheet.setRowSumsBelow(false);
@@ -117,7 +117,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
     }
 
 
-    public void test55640_VerifyCases() throws IOException {
+    public void test55640_VerifyCases() {
         // NOTE: This is currently based on current behavior of POI, somehow
         // what POI returns in the calls to collapsed/hidden is not fully matching 
         // the examples in the spec or I did not fully understand how POI stores the data internally...
@@ -210,7 +210,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
     
    
     private void verifyGroupCollapsed(boolean level1, boolean level2, boolean level3, 
-            Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) throws IOException {
+            Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) {
         Workbook wb = new XSSFWorkbook();
         Sheet sheet = wb.createSheet("sheet123");
 
@@ -282,7 +282,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
     }
 
     private void verifyGroupCollapsedSpec(boolean level1, boolean level2, boolean level3, 
-            Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) throws IOException {
+            Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) {
         Workbook wb = new XSSFWorkbook();
         Sheet sheet = wb.createSheet("sheet123");
 
@@ -301,7 +301,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
         checkWorkbookGrouping(wb, collapsed, hidden, outlineLevel);
     }
 
-    private void checkWorkbookGrouping(Workbook wb, Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) throws IOException {
+    private void checkWorkbookGrouping(Workbook wb, Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) {
         printWorkbook(wb);
         Sheet sheet = wb.getSheetAt(0);
         
@@ -327,7 +327,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
     }
 
  
-    public void test55640working() throws IOException {
+    public void test55640working() {
         Workbook wb = new XSSFWorkbook();
         Sheet sheet = wb.createSheet("sheet123");
 
@@ -366,50 +366,51 @@ public final class TestXSSFSheetRowGrouping extends TestCase {
     }
     
     public void testGroupingTest() throws IOException {
-        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("GroupTest.xlsx");       
-        
-        assertEquals(31, wb.getSheetAt(0).getLastRowNum());
-        
-        // NOTE: This is currently based on current behavior of POI, somehow
-        // what POI returns in the calls to collapsed/hidden is not fully matching 
-        // the examples in the spec or I did not fully understand how POI stores the data internally...
-        checkWorkbookGrouping(wb, 
-                new Boolean [] {
-                    // 0-4
-                    false, false, false, false, false, null, null, 
-                    // 7-11
-                    false, false, true, true, true, null, null, 
-                    // 14-18
-                    false, false, true, false, false, null,
-                    // 20-24
-                    false, false, true, true, false, null, null, 
-                    // 27-31
-                    false, false, false, true, false }, 
-                new boolean[] { 
-                    // 0-4
-                    false, false, false, false, false, false, false,  
-                    // 7-11
-                    true,  true, true, true, false, false, false, 
-                    // 14-18
-                    true, true, false, false, false, false,  
-                    // 20-24
-                    true, true, true, false, false, false, false, 
-                    // 27-31
-                    true, true, true, true, false },
-                // outlineLevel
-                new int[] { 
-                    // 0-4
-                    3, 3, 2, 1, 0, 0, 0,
-                    // 7-11
-                    3, 3, 2, 1, 0, 0, 0,
-                    // 14-18
-                    3, 3, 2, 1, 0, 0,
-                    // 20-24
-                    3, 3, 2, 1, 0, 0, 0, 
-                    // 27-31
-                    3, 3, 2, 1, 0,
-                }
-                );
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("GroupTest.xlsx")) {
+
+            assertEquals(31, wb.getSheetAt(0).getLastRowNum());
+
+            // NOTE: This is currently based on current behavior of POI, somehow
+            // what POI returns in the calls to collapsed/hidden is not fully matching
+            // the examples in the spec or I did not fully understand how POI stores the data internally...
+            checkWorkbookGrouping(wb,
+                    new Boolean[]{
+                            // 0-4
+                            false, false, false, false, false, null, null,
+                            // 7-11
+                            false, false, true, true, true, null, null,
+                            // 14-18
+                            false, false, true, false, false, null,
+                            // 20-24
+                            false, false, true, true, false, null, null,
+                            // 27-31
+                            false, false, false, true, false},
+                    new boolean[]{
+                            // 0-4
+                            false, false, false, false, false, false, false,
+                            // 7-11
+                            true, true, true, true, false, false, false,
+                            // 14-18
+                            true, true, false, false, false, false,
+                            // 20-24
+                            true, true, true, false, false, false, false,
+                            // 27-31
+                            true, true, true, true, false},
+                    // outlineLevel
+                    new int[]{
+                            // 0-4
+                            3, 3, 2, 1, 0, 0, 0,
+                            // 7-11
+                            3, 3, 2, 1, 0, 0, 0,
+                            // 14-18
+                            3, 3, 2, 1, 0, 0,
+                            // 20-24
+                            3, 3, 2, 1, 0, 0, 0,
+                            // 27-31
+                            3, 3, 2, 1, 0,
+                    }
+            );
+        }
         /*
 Row: 0: Level: 3 Collapsed: false Hidden: false
 Row: 1: Level: 3 Collapsed: false Hidden: false
index f68dd50a1360f4d3f51633a91819a61a83cac6d5..cb9b102bd9a1a411e92d11e411b4956474f27465 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.poi.xwpf.usermodel;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -28,6 +29,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.ooxml.POIXMLDocumentPart;
@@ -96,7 +98,7 @@ public final class TestXWPFDocument {
             assertEquals(1315, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters());
             assertEquals(10, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getLines());
 
-            assertEquals(null, xml.getProperties().getCoreProperties().getTitle());
+            assertNull(xml.getProperties().getCoreProperties().getTitle());
             assertFalse(xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().isPresent());
         }
     }
@@ -112,7 +114,9 @@ public final class TestXWPFDocument {
         assertEquals(0, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getLines());
 
         assertEquals(" ", xml.getProperties().getCoreProperties().getTitle());
-        assertEquals(" ", xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().get());
+        Optional<String> subjectProperty = xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty();
+        assertTrue(subjectProperty.isPresent());
+        assertEquals(" ", subjectProperty.get());
         xml.close();
     }
 
@@ -153,7 +157,9 @@ public final class TestXWPFDocument {
         byte[] jpeg = XWPFTestDataSamples.getImage("nature1.jpg");
         String relationId = doc.addPictureData(jpeg, Document.PICTURE_TYPE_JPEG);
 
-        byte[] newJpeg = ((XWPFPictureData) doc.getRelationById(relationId)).getData();
+        XWPFPictureData relationById = (XWPFPictureData) doc.getRelationById(relationId);
+        assertNotNull(relationById);
+        byte[] newJpeg = relationById.getData();
         assertEquals(newJpeg.length, jpeg.length);
         for (int i = 0; i < jpeg.length; i++) {
             assertEquals(newJpeg[i], jpeg[i]);
@@ -187,225 +193,225 @@ public final class TestXWPFDocument {
 
     @Test
     public void testAddHyperlink() throws IOException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx");
-        XWPFParagraph p = doc.createParagraph();
-        XWPFHyperlinkRun h = p.createHyperlinkRun("http://poi.apache.org/");
-        h.setText("Apache POI");
-
-        assertEquals("http://poi.apache.org/", h.getHyperlink(doc).getURL());
-        assertEquals(p.getRuns().size(), 1);
-        assertEquals(p.getRuns().get(0), h);
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx")) {
+            XWPFParagraph p = doc.createParagraph();
+            XWPFHyperlinkRun h = p.createHyperlinkRun("http://poi.apache.org/");
+            h.setText("Apache POI");
+
+            assertEquals("http://poi.apache.org/", h.getHyperlink(doc).getURL());
+            assertEquals(p.getRuns().size(), 1);
+            assertEquals(p.getRuns().get(0), h);
+        }
     }
 
     @Test
     public void testRemoveBodyElement() throws IOException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx");
-        assertEquals(3, doc.getParagraphs().size());
-        assertEquals(3, doc.getBodyElements().size());
-
-        XWPFParagraph p1 = doc.getParagraphs().get(0);
-        XWPFParagraph p2 = doc.getParagraphs().get(1);
-        XWPFParagraph p3 = doc.getParagraphs().get(2);
-
-        assertEquals(p1, doc.getBodyElements().get(0));
-        assertEquals(p1, doc.getParagraphs().get(0));
-        assertEquals(p2, doc.getBodyElements().get(1));
-        assertEquals(p2, doc.getParagraphs().get(1));
-        assertEquals(p3, doc.getBodyElements().get(2));
-        assertEquals(p3, doc.getParagraphs().get(2));
-
-        // Add another
-        XWPFParagraph p4 = doc.createParagraph();
-
-        assertEquals(4, doc.getParagraphs().size());
-        assertEquals(4, doc.getBodyElements().size());
-        assertEquals(p1, doc.getBodyElements().get(0));
-        assertEquals(p1, doc.getParagraphs().get(0));
-        assertEquals(p2, doc.getBodyElements().get(1));
-        assertEquals(p2, doc.getParagraphs().get(1));
-        assertEquals(p3, doc.getBodyElements().get(2));
-        assertEquals(p3, doc.getParagraphs().get(2));
-        assertEquals(p4, doc.getBodyElements().get(3));
-        assertEquals(p4, doc.getParagraphs().get(3));
-
-        // Remove the 2nd
-        assertEquals(true, doc.removeBodyElement(1));
-        assertEquals(3, doc.getParagraphs().size());
-        assertEquals(3, doc.getBodyElements().size());
-
-        assertEquals(p1, doc.getBodyElements().get(0));
-        assertEquals(p1, doc.getParagraphs().get(0));
-        assertEquals(p3, doc.getBodyElements().get(1));
-        assertEquals(p3, doc.getParagraphs().get(1));
-        assertEquals(p4, doc.getBodyElements().get(2));
-        assertEquals(p4, doc.getParagraphs().get(2));
-
-        // Remove the 1st
-        assertEquals(true, doc.removeBodyElement(0));
-        assertEquals(2, doc.getParagraphs().size());
-        assertEquals(2, doc.getBodyElements().size());
-
-        assertEquals(p3, doc.getBodyElements().get(0));
-        assertEquals(p3, doc.getParagraphs().get(0));
-        assertEquals(p4, doc.getBodyElements().get(1));
-        assertEquals(p4, doc.getParagraphs().get(1));
-
-        // Remove the last
-        assertEquals(true, doc.removeBodyElement(1));
-        assertEquals(1, doc.getParagraphs().size());
-        assertEquals(1, doc.getBodyElements().size());
-
-        assertEquals(p3, doc.getBodyElements().get(0));
-        assertEquals(p3, doc.getParagraphs().get(0));
-        doc.close();
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx")) {
+            assertEquals(3, doc.getParagraphs().size());
+            assertEquals(3, doc.getBodyElements().size());
+
+            XWPFParagraph p1 = doc.getParagraphs().get(0);
+            XWPFParagraph p2 = doc.getParagraphs().get(1);
+            XWPFParagraph p3 = doc.getParagraphs().get(2);
+
+            assertEquals(p1, doc.getBodyElements().get(0));
+            assertEquals(p1, doc.getParagraphs().get(0));
+            assertEquals(p2, doc.getBodyElements().get(1));
+            assertEquals(p2, doc.getParagraphs().get(1));
+            assertEquals(p3, doc.getBodyElements().get(2));
+            assertEquals(p3, doc.getParagraphs().get(2));
+
+            // Add another
+            XWPFParagraph p4 = doc.createParagraph();
+
+            assertEquals(4, doc.getParagraphs().size());
+            assertEquals(4, doc.getBodyElements().size());
+            assertEquals(p1, doc.getBodyElements().get(0));
+            assertEquals(p1, doc.getParagraphs().get(0));
+            assertEquals(p2, doc.getBodyElements().get(1));
+            assertEquals(p2, doc.getParagraphs().get(1));
+            assertEquals(p3, doc.getBodyElements().get(2));
+            assertEquals(p3, doc.getParagraphs().get(2));
+            assertEquals(p4, doc.getBodyElements().get(3));
+            assertEquals(p4, doc.getParagraphs().get(3));
+
+            // Remove the 2nd
+            assertTrue(doc.removeBodyElement(1));
+            assertEquals(3, doc.getParagraphs().size());
+            assertEquals(3, doc.getBodyElements().size());
+
+            assertEquals(p1, doc.getBodyElements().get(0));
+            assertEquals(p1, doc.getParagraphs().get(0));
+            assertEquals(p3, doc.getBodyElements().get(1));
+            assertEquals(p3, doc.getParagraphs().get(1));
+            assertEquals(p4, doc.getBodyElements().get(2));
+            assertEquals(p4, doc.getParagraphs().get(2));
+
+            // Remove the 1st
+            assertTrue(doc.removeBodyElement(0));
+            assertEquals(2, doc.getParagraphs().size());
+            assertEquals(2, doc.getBodyElements().size());
+
+            assertEquals(p3, doc.getBodyElements().get(0));
+            assertEquals(p3, doc.getParagraphs().get(0));
+            assertEquals(p4, doc.getBodyElements().get(1));
+            assertEquals(p4, doc.getParagraphs().get(1));
+
+            // Remove the last
+            assertTrue(doc.removeBodyElement(1));
+            assertEquals(1, doc.getParagraphs().size());
+            assertEquals(1, doc.getBodyElements().size());
+
+            assertEquals(p3, doc.getBodyElements().get(0));
+            assertEquals(p3, doc.getParagraphs().get(0));
+        }
     }
 
     @Test
     public void testRegisterPackagePictureData() throws IOException, InvalidFormatException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx");
-
-        /* manually assemble a new image package part*/
-        OPCPackage opcPckg = doc.getPackage();
-        XWPFRelation jpgRelation = XWPFRelation.IMAGE_JPEG;
-        PackagePartName partName = PackagingURIHelper.createPartName(jpgRelation.getDefaultFileName().replace('#', '2'));
-        PackagePart newImagePart = opcPckg.createPart(partName, jpgRelation.getContentType());
-        byte[] nature1 = XWPFTestDataSamples.getImage("abstract4.jpg");
-        OutputStream os = newImagePart.getOutputStream();
-        os.write(nature1);
-        os.close();
-        XWPFHeader xwpfHeader = doc.getHeaderArray(0);
-        XWPFPictureData newPicData = new XWPFPictureData(newImagePart);
-        /* new part is now ready to rumble */
-
-        assertFalse(xwpfHeader.getAllPictures().contains(newPicData));
-        assertFalse(doc.getAllPictures().contains(newPicData));
-        assertFalse(doc.getAllPackagePictures().contains(newPicData));
-
-        doc.registerPackagePictureData(newPicData);
-
-        assertFalse(xwpfHeader.getAllPictures().contains(newPicData));
-        assertFalse(doc.getAllPictures().contains(newPicData));
-        assertTrue(doc.getAllPackagePictures().contains(newPicData));
-
-        doc.getPackage().revert();
-        opcPckg.close();
-        doc.close();
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx")) {
+            /* manually assemble a new image package part*/
+            OPCPackage opcPkg = doc.getPackage();
+            XWPFRelation jpgRelation = XWPFRelation.IMAGE_JPEG;
+            PackagePartName partName = PackagingURIHelper.createPartName(jpgRelation.getDefaultFileName().replace('#', '2'));
+            PackagePart newImagePart = opcPkg.createPart(partName, jpgRelation.getContentType());
+            byte[] nature1 = XWPFTestDataSamples.getImage("abstract4.jpg");
+            OutputStream os = newImagePart.getOutputStream();
+            os.write(nature1);
+            os.close();
+            XWPFHeader xwpfHeader = doc.getHeaderArray(0);
+            XWPFPictureData newPicData = new XWPFPictureData(newImagePart);
+            /* new part is now ready to rumble */
+
+            assertFalse(xwpfHeader.getAllPictures().contains(newPicData));
+            assertFalse(doc.getAllPictures().contains(newPicData));
+            assertFalse(doc.getAllPackagePictures().contains(newPicData));
+
+            doc.registerPackagePictureData(newPicData);
+
+            assertFalse(xwpfHeader.getAllPictures().contains(newPicData));
+            assertFalse(doc.getAllPictures().contains(newPicData));
+            assertTrue(doc.getAllPackagePictures().contains(newPicData));
+
+            doc.getPackage().revert();
+            opcPkg.close();
+        }
     }
 
     @Test
     public void testFindPackagePictureData() throws IOException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx");
-        byte[] nature1 = XWPFTestDataSamples.getImage("nature1.gif");
-        XWPFPictureData part = doc.findPackagePictureData(nature1, Document.PICTURE_TYPE_GIF);
-        assertNotNull(part);
-        assertTrue(doc.getAllPictures().contains(part));
-        assertTrue(doc.getAllPackagePictures().contains(part));
-        doc.getPackage().revert();
-        doc.close();
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx")) {
+            byte[] nature1 = XWPFTestDataSamples.getImage("nature1.gif");
+            XWPFPictureData part = doc.findPackagePictureData(nature1, Document.PICTURE_TYPE_GIF);
+            assertNotNull(part);
+            assertTrue(doc.getAllPictures().contains(part));
+            assertTrue(doc.getAllPackagePictures().contains(part));
+            doc.getPackage().revert();
+        }
     }
 
     @Test
     public void testGetAllPictures() throws IOException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx");
-        List<XWPFPictureData> allPictures = doc.getAllPictures();
-        List<XWPFPictureData> allPackagePictures = doc.getAllPackagePictures();
-
-        assertNotNull(allPictures);
-        assertEquals(3, allPictures.size());
-        for (XWPFPictureData xwpfPictureData : allPictures) {
-            assertTrue(allPackagePictures.contains(xwpfPictureData));
-        }
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx")) {
+            List<XWPFPictureData> allPictures = doc.getAllPictures();
+            List<XWPFPictureData> allPackagePictures = doc.getAllPackagePictures();
+
+            assertNotNull(allPictures);
+            assertEquals(3, allPictures.size());
+            for (XWPFPictureData xwpfPictureData : allPictures) {
+                assertTrue(allPackagePictures.contains(xwpfPictureData));
+            }
 
-        try {
-            allPictures.add(allPictures.get(0));
-            fail("This list must be unmodifiable!");
-        } catch (UnsupportedOperationException e) {
-            // all ok
-        }
+            try {
+                allPictures.add(allPictures.get(0));
+                fail("This list must be unmodifiable!");
+            } catch (UnsupportedOperationException e) {
+                // all ok
+            }
 
-        doc.getPackage().revert();
-        doc.close();
+            doc.getPackage().revert();
+        }
     }
 
     @Test
     public void testGetAllPackagePictures() throws IOException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx");
-        List<XWPFPictureData> allPackagePictures = doc.getAllPackagePictures();
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx")) {
+            List<XWPFPictureData> allPackagePictures = doc.getAllPackagePictures();
 
-        assertNotNull(allPackagePictures);
-        assertEquals(5, allPackagePictures.size());
+            assertNotNull(allPackagePictures);
+            assertEquals(5, allPackagePictures.size());
 
-        try {
-            allPackagePictures.add(allPackagePictures.get(0));
-            fail("This list must be unmodifiable!");
-        } catch (UnsupportedOperationException e) {
-            // all ok
-        }
+            try {
+                allPackagePictures.add(allPackagePictures.get(0));
+                fail("This list must be unmodifiable!");
+            } catch (UnsupportedOperationException e) {
+                // all ok
+            }
 
-        doc.getPackage().revert();
-        doc.close();
+            doc.getPackage().revert();
+        }
     }
 
     @Test
     public void testPictureHandlingSimpleFile() throws IOException, InvalidFormatException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx");
-        assertEquals(1, doc.getAllPackagePictures().size());
-        byte[] newPic = XWPFTestDataSamples.getImage("abstract4.jpg");
-        String id1 = doc.addPictureData(newPic, Document.PICTURE_TYPE_JPEG);
-        assertEquals(2, doc.getAllPackagePictures().size());
-        /* copy data, to avoid instance-equality */
-        byte[] newPicCopy = Arrays.copyOf(newPic, newPic.length);
-        String id2 = doc.addPictureData(newPicCopy, Document.PICTURE_TYPE_JPEG);
-        assertEquals(id1, id2);
-        doc.getPackage().revert();
-        doc.close();
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx")) {
+            assertEquals(1, doc.getAllPackagePictures().size());
+            byte[] newPic = XWPFTestDataSamples.getImage("abstract4.jpg");
+            String id1 = doc.addPictureData(newPic, Document.PICTURE_TYPE_JPEG);
+            assertEquals(2, doc.getAllPackagePictures().size());
+            /* copy data, to avoid instance-equality */
+            byte[] newPicCopy = Arrays.copyOf(newPic, newPic.length);
+            String id2 = doc.addPictureData(newPicCopy, Document.PICTURE_TYPE_JPEG);
+            assertEquals(id1, id2);
+            doc.getPackage().revert();
+        }
     }
 
     @Test
     public void testPictureHandlingHeaderDocumentImages() throws IOException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_2.docx");
-        assertEquals(1, doc.getAllPictures().size());
-        assertEquals(1, doc.getAllPackagePictures().size());
-        assertEquals(1, doc.getHeaderArray(0).getAllPictures().size());
-        doc.getPackage().revert();
-        doc.close();
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_2.docx")) {
+            assertEquals(1, doc.getAllPictures().size());
+            assertEquals(1, doc.getAllPackagePictures().size());
+            assertEquals(1, doc.getHeaderArray(0).getAllPictures().size());
+            doc.getPackage().revert();
+        }
     }
 
     @Test
     public void testPictureHandlingComplex() throws IOException, InvalidFormatException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx");
-        XWPFHeader xwpfHeader = doc.getHeaderArray(0);
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx")) {
+            XWPFHeader xwpfHeader = doc.getHeaderArray(0);
 
-        assertEquals(3, doc.getAllPictures().size());
-        assertEquals(3, xwpfHeader.getAllPictures().size());
-        assertEquals(5, doc.getAllPackagePictures().size());
+            assertEquals(3, doc.getAllPictures().size());
+            assertEquals(3, xwpfHeader.getAllPictures().size());
+            assertEquals(5, doc.getAllPackagePictures().size());
 
-        byte[] nature1 = XWPFTestDataSamples.getImage("nature1.jpg");
-        String id = doc.addPictureData(nature1, Document.PICTURE_TYPE_JPEG);
-        POIXMLDocumentPart part1 = xwpfHeader.getRelationById("rId1");
-        XWPFPictureData part2 = (XWPFPictureData) doc.getRelationById(id);
-        assertSame(part1, part2);
+            byte[] nature1 = XWPFTestDataSamples.getImage("nature1.jpg");
+            String id = doc.addPictureData(nature1, Document.PICTURE_TYPE_JPEG);
+            POIXMLDocumentPart part1 = xwpfHeader.getRelationById("rId1");
+            XWPFPictureData part2 = (XWPFPictureData) doc.getRelationById(id);
+            assertSame(part1, part2);
 
-        doc.getPackage().revert();
-        doc.close();
+            doc.getPackage().revert();
+        }
     }
 
     @Test
     public void testZeroLengthLibreOfficeDocumentWithWaterMarkHeader() throws IOException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("zero-length.docx");
-        POIXMLProperties properties = doc.getProperties();
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("zero-length.docx")) {
+            POIXMLProperties properties = doc.getProperties();
 
-        assertNotNull(properties.getCoreProperties());
+            assertNotNull(properties.getCoreProperties());
 
-        XWPFHeader headerArray = doc.getHeaderArray(0);
-        assertEquals(1, headerArray.getAllPictures().size());
-        assertEquals("image1.png", headerArray.pictures.get(0).getFileName());
-        assertEquals("", headerArray.getText());
+            XWPFHeader headerArray = doc.getHeaderArray(0);
+            assertEquals(1, headerArray.getAllPictures().size());
+            assertEquals("image1.png", headerArray.pictures.get(0).getFileName());
+            assertEquals("", headerArray.getText());
 
-        POIXMLProperties.ExtendedProperties extendedProperties = properties.getExtendedProperties();
-        assertNotNull(extendedProperties);
-        assertEquals(0, extendedProperties.getUnderlyingProperties().getCharacters());
-        doc.close();
+            POIXMLProperties.ExtendedProperties extendedProperties = properties.getExtendedProperties();
+            assertNotNull(extendedProperties);
+            assertEquals(0, extendedProperties.getUnderlyingProperties().getCharacters());
+        }
     }
 
     @Test
@@ -414,14 +420,14 @@ public final class TestXWPFDocument {
         assertEquals(100, settings.getZoomPercent());
         settings.setZoomPercent(50);
         assertEquals(50, settings.getZoomPercent());
-        
-        assertEquals(false, settings.getEvenAndOddHeadings());
+
+        assertFalse(settings.getEvenAndOddHeadings());
         settings.setEvenAndOddHeadings(true);
-        assertEquals(true, settings.getEvenAndOddHeadings());
+        assertTrue(settings.getEvenAndOddHeadings());
 
-        assertEquals(false, settings.getMirrorMargins());
+        assertFalse(settings.getMirrorMargins());
         settings.setMirrorMargins(true);
-        assertEquals(true, settings.getMirrorMargins());
+        assertTrue(settings.getMirrorMargins());
 
         XWPFDocument doc = new XWPFDocument();
         assertEquals(100, doc.getZoomPercent());
@@ -432,13 +438,13 @@ public final class TestXWPFDocument {
         doc.setZoomPercent(200);
         assertEquals(200, doc.getZoomPercent());
 
-        assertEquals(false, doc.getEvenAndOddHeadings());
+        assertFalse(doc.getEvenAndOddHeadings());
         doc.setEvenAndOddHeadings(true);
-        assertEquals(true, doc.getEvenAndOddHeadings());
+        assertTrue(doc.getEvenAndOddHeadings());
 
-        assertEquals(false, doc.getMirrorMargins());
+        assertFalse(doc.getMirrorMargins());
         doc.setMirrorMargins(true);
-        assertEquals(true, doc.getMirrorMargins());
+        assertTrue(doc.getMirrorMargins());
 
         XWPFDocument back = XWPFTestDataSamples.writeOutAndReadBack(doc);
         assertEquals(200, back.getZoomPercent());
@@ -453,10 +459,10 @@ public final class TestXWPFDocument {
        
        @Test
        public void testEnforcedWith() throws IOException {
-               XWPFDocument docx = XWPFTestDataSamples.openSampleDocument("EnforcedWith.docx");
-               assertTrue(docx.isEnforcedProtection());
-               docx.close();
-       }
+        try (XWPFDocument docx = XWPFTestDataSamples.openSampleDocument("EnforcedWith.docx")) {
+            assertTrue(docx.isEnforcedProtection());
+        }
+    }
        
        @Test
        @Ignore("XWPF should be able to write to a new Stream when opened Read-Only")
@@ -466,14 +472,15 @@ public final class TestXWPFDocument {
                    PackageAccess.READ
            );
            XWPFDocument doc = new XWPFDocument(opc);
-           XWPFWordExtractor ext = new XWPFWordExtractor(doc);
-           String origText = ext.getText();
-           
-           doc = XWPFTestDataSamples.writeOutAndReadBack(doc);
-           ext.close();
-           ext = new XWPFWordExtractor(doc);
-           
-           assertEquals(origText, ext.getText());
-           ext.close();
-       }
+
+        final String origText;
+        try (XWPFWordExtractor ext = new XWPFWordExtractor(doc)) {
+            origText = ext.getText();
+
+            doc = XWPFTestDataSamples.writeOutAndReadBack(doc);
+        }
+        try (XWPFWordExtractor ext = new XWPFWordExtractor(doc)) {
+            assertEquals(origText, ext.getText());
+        }
+    }
 }
index 27df95095e0c1f35ada7334455a4acb8c41d3e05..e6b864fdbe9c59fe23ae2c143b0a45cbcda937fe 100644 (file)
@@ -790,23 +790,23 @@ public class TestXWPFRun {
 
     @Test
     public void testGetDepthWidth() throws IOException, InvalidFormatException {
-        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestDocument.docx");
-        XWPFHeader hdr = doc.createHeader(HeaderFooterType.DEFAULT);
-        XWPFParagraph p = hdr.createParagraph();
-        XWPFRun r = p.createRun();
+        try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestDocument.docx")) {
+            XWPFHeader hdr = doc.createHeader(HeaderFooterType.DEFAULT);
+            XWPFParagraph p = hdr.createParagraph();
+            XWPFRun r = p.createRun();
 
-        assertEquals(0, hdr.getAllPictures().size());
-        assertEquals(0, r.getEmbeddedPictures().size());
+            assertEquals(0, hdr.getAllPictures().size());
+            assertEquals(0, r.getEmbeddedPictures().size());
 
-        r.addPicture(new ByteArrayInputStream(new byte[0]), Document.PICTURE_TYPE_JPEG, "test.jpg", 21, 32);
+            r.addPicture(new ByteArrayInputStream(new byte[0]), Document.PICTURE_TYPE_JPEG, "test.jpg", 21, 32);
 
-        assertEquals(1, hdr.getAllPictures().size());
-        assertEquals(1, r.getEmbeddedPictures().size());
+            assertEquals(1, hdr.getAllPictures().size());
+            assertEquals(1, r.getEmbeddedPictures().size());
 
-        XWPFPicture pic = r.getEmbeddedPictures().get(0);
+            XWPFPicture pic = r.getEmbeddedPictures().get(0);
 
-        assertEquals(pic.getWidth(), Units.toPoints(21), 0.0);
-        assertEquals(pic.getDepth(), Units.toPoints(32), 0.0);
+            assertEquals(pic.getWidth(), Units.toPoints(21), 0.0);
+            assertEquals(pic.getDepth(), Units.toPoints(32), 0.0);
+        }
     }
-
 }
index d1a5f02101344eebe51b09b1f59f9f175414f609..1093e541a949fb06962a0b35d9d5508e30a20b9a 100644 (file)
 
 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;
@@ -32,8 +26,20 @@ 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;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
-public class TestMissingWorkbook extends TestCase {
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class TestMissingWorkbook {
     protected Workbook mainWorkbook;
     protected Workbook sourceWorkbook;
     
@@ -44,6 +50,7 @@ public class TestMissingWorkbook extends TestCase {
     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; 
@@ -51,8 +58,8 @@ public class TestMissingWorkbook extends TestCase {
         this.SOURCE_WORKBOOK_FILENAME = SOURCE_WORKBOOK_FILENAME;
     }
        
-       @Override
-       protected void setUp() throws Exception {
+       @Before
+       public void setUp() throws Exception {
                mainWorkbook = HSSFTestDataSamples.openSampleWorkbook(MAIN_WORKBOOK_FILENAME);
                sourceWorkbook = HSSFTestDataSamples.openSampleWorkbook(SOURCE_WORKBOOK_FILENAME);
                
@@ -60,7 +67,19 @@ public class TestMissingWorkbook extends TestCase {
                assertNotNull(sourceWorkbook);
        }
 
-       public void testMissingWorkbookMissing() throws IOException {
+       @After
+       public void tearDown() throws Exception {
+               if(mainWorkbook != null) {
+                       mainWorkbook.close();
+               }
+
+               if(sourceWorkbook != null) {
+                       sourceWorkbook.close();
+               }
+       }
+
+       @Test
+       public void testMissingWorkbookMissing() {
                FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator();
                
                Sheet lSheet = mainWorkbook.getSheetAt(0);
@@ -71,12 +90,13 @@ public class TestMissingWorkbook extends TestCase {
                try {
                        evaluator.evaluateFormulaCell(lA1Cell);
                        fail("Missing external workbook reference exception expected!");
-               }catch(RuntimeException re) {
+               } catch(RuntimeException re) {
                        assertTrue("Unexpected exception: " + re, re.getMessage().contains(SOURCE_DUMMY_WORKBOOK_FILENAME));
                }
        }
-       
-       public void testMissingWorkbookMissingOverride() throws IOException {
+
+       @Test
+       public void testMissingWorkbookMissingOverride() {
                Sheet lSheet = mainWorkbook.getSheetAt(0);
                Cell lA1Cell = lSheet.getRow(0).getCell(0);
                Cell lB1Cell = lSheet.getRow(1).getCell(0);
@@ -89,7 +109,7 @@ public class TestMissingWorkbook extends TestCase {
                // Check cached values
         assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d);
         assertEquals("POI rocks!", lB1Cell.getStringCellValue());
-        assertEquals(true, lC1Cell.getBooleanCellValue());
+               assertTrue(lC1Cell.getBooleanCellValue());
                
         // Evaluate
                FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator();
@@ -101,11 +121,11 @@ public class TestMissingWorkbook extends TestCase {
 
                assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d);
                assertEquals("POI rocks!", lB1Cell.getStringCellValue());
-               assertEquals(true, lC1Cell.getBooleanCellValue());
+               assertTrue(lC1Cell.getBooleanCellValue());
        }
-       
 
-       public void testExistingWorkbook() throws IOException {
+       @Test
+       public void testExistingWorkbook() {
                Sheet lSheet = mainWorkbook.getSheetAt(0);
                Cell lA1Cell = lSheet.getRow(0).getCell(0);
                Cell lB1Cell = lSheet.getRow(1).getCell(0);
@@ -128,6 +148,6 @@ public class TestMissingWorkbook extends TestCase {
 
                assertEquals(20.0d, lA1Cell.getNumericCellValue(), 0.00001d);
                assertEquals("Apache rocks!", lB1Cell.getStringCellValue());
-               assertEquals(false, lC1Cell.getBooleanCellValue());
+               assertFalse(lC1Cell.getBooleanCellValue());
        }
 }
index ce16b01a44d02fde5bc220de0b84b71f7ea59b8c..e2c195fa413ecf0887db8d0e512d67b6fe720476 100644 (file)
@@ -30,9 +30,11 @@ import static org.mockito.Mockito.verify;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
+import java.util.List;
 import java.util.Locale;
 import java.util.TimeZone;
 
@@ -42,6 +44,7 @@ import org.apache.poi.ss.ITestDataProvider;
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.util.LocaleUtil;
+import org.junit.After;
 import org.junit.Test;
 
 /**
@@ -1423,7 +1426,17 @@ public abstract class BaseTestCell {
         verify(cell).setBlank();
     }
 
+    private List<Workbook> workbooksToClose = new ArrayList<>();
+
+    @After
+    public void closeWorkbooks() throws IOException {
+        for (Workbook workbook : workbooksToClose) {
+            workbook.close();
+        }
+    }
     private Cell getInstance() {
-        return _testDataProvider.createWorkbook().createSheet().createRow(0).createCell(0);
+        Workbook workbookToClose = _testDataProvider.createWorkbook();
+        workbooksToClose.add(workbookToClose);
+        return workbookToClose.createSheet().createRow(0).createCell(0);
     }
 }