You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2021/05/14 00:37:53 UTC

svn commit: r1889871 [4/17] - in /poi: site/src/documentation/content/xdocs/ site/src/documentation/content/xdocs/components/ trunk/ trunk/maven/ trunk/osgi/ trunk/osgi/src/test/java/org/apache/poi/osgi/ trunk/poi-examples/src/main/java/org/apache/poi/...

Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFBugs.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFBugs.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFBugs.java Fri May 14 00:37:50 2021
@@ -20,6 +20,7 @@ import static org.apache.poi.POITestCase
 import static org.apache.poi.sl.draw.DrawTextParagraph.HYPERLINK_HREF;
 import static org.apache.poi.sl.draw.DrawTextParagraph.HYPERLINK_LABEL;
 import static org.apache.poi.xslf.XSLFTestDataSamples.openSampleDocument;
+import static org.apache.poi.xslf.XSLFTestDataSamples.writeOutAndReadBack;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -32,7 +33,6 @@ import static org.junit.jupiter.api.Assu
 import java.awt.Color;
 import java.awt.geom.Rectangle2D;
 import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
@@ -76,13 +76,15 @@ import org.apache.poi.sl.usermodel.TextR
 import org.apache.poi.sl.usermodel.TextShape;
 import org.apache.poi.sl.usermodel.VerticalAlignment;
 import org.apache.poi.util.IOUtils;
-import org.apache.poi.util.NullPrintStream;
+import org.apache.commons.io.output.NullPrintStream;
 import org.apache.poi.xslf.usermodel.*;
 import org.apache.poi.xslf.util.DummyGraphics2d;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.function.ThrowingSupplier;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTOuterShadowEffect;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
 
@@ -121,89 +123,87 @@ class TestXSLFBugs {
 
     @Test
     void bug62736() throws Exception {
-        XMLSlideShow ss1 = openSampleDocument("bug62736.pptx");
-
-        assertEquals(1, ss1.getSlides().size());
+        try (XMLSlideShow ss1 = openSampleDocument("bug62736.pptx")) {
+            assertEquals(1, ss1.getSlides().size());
 
-        XSLFSlide slide0 = ss1.getSlides().get(0);
+            XSLFSlide slide0 = ss1.getSlides().get(0);
 
-        assertEquals(slide0.getShapes().size(), 4);
+            assertEquals(slide0.getShapes().size(), 4);
 
-        assertRelation(slide0, "/ppt/slides/slide1.xml", null);
-        assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
-        assertRelation(slide0, "/ppt/media/image1.png", "rId2");
-        assertEquals(slide0.getRelations().size(), 2);
+            assertRelation(slide0, "/ppt/slides/slide1.xml", null);
+            assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
+            assertRelation(slide0, "/ppt/media/image1.png", "rId2");
+            assertEquals(slide0.getRelations().size(), 2);
 
-        List<XSLFPictureShape> pictures = new ArrayList<>();
-        for (XSLFShape shape : slide0.getShapes()) {
-            if (shape instanceof XSLFPictureShape) {
-                pictures.add((XSLFPictureShape) shape);
+            List<XSLFPictureShape> pictures = new ArrayList<>();
+            for (XSLFShape shape : slide0.getShapes()) {
+                if (shape instanceof XSLFPictureShape) {
+                    pictures.add((XSLFPictureShape) shape);
+                }
             }
-        }
 
-        assertEquals(pictures.size(), 2);
-        assertEquals(pictures.get(0).getPictureData().getFileName(), "image1.png");
-        assertEquals(pictures.get(1).getPictureData().getFileName(), "image1.png");
-        // blipId is rId2 of both pictures
+            assertEquals(pictures.size(), 2);
+            assertEquals(pictures.get(0).getPictureData().getFileName(), "image1.png");
+            assertEquals(pictures.get(1).getPictureData().getFileName(), "image1.png");
+            // blipId is rId2 of both pictures
+
+            // remove just the first picture
+            slide0.removeShape(pictures.get(0));
+
+            assertEquals(slide0.getShapes().size(), 3);
+
+            assertRelation(slide0, "/ppt/slides/slide1.xml", null);
+            assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
+            // the bug is that the following relation is gone
+            assertRelation(slide0, "/ppt/media/image1.png", "rId2");
+            assertEquals(slide0.getRelations().size(), 2);
+
+            // Save and re-load
+            try (XMLSlideShow ss2 = writeOutAndReadBack(ss1)) {
+                assertEquals(1, ss2.getSlides().size());
+
+                slide0 = ss2.getSlides().get(0);
+
+                assertRelation(slide0, "/ppt/slides/slide1.xml", null);
+                assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
+                assertRelation(slide0, "/ppt/media/image1.png", "rId2");
+                assertEquals(slide0.getRelations().size(), 2);
+
+                pictures.clear();
+                for (XSLFShape shape : slide0.getShapes()) {
+                    if (shape instanceof XSLFPictureShape) {
+                        pictures.add((XSLFPictureShape) shape);
+                    }
+                }
 
-        // remove just the first picture
-        slide0.removeShape(pictures.get(0));
+                assertEquals(pictures.size(), 1);
+                assertEquals(pictures.get(0).getPictureData().getFileName(), "image1.png");
 
-        assertEquals(slide0.getShapes().size(), 3);
+                slide0.removeShape(pictures.get(0));
 
-        assertRelation(slide0, "/ppt/slides/slide1.xml", null);
-        assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
-        // the bug is that the following relation is gone
-        assertRelation(slide0, "/ppt/media/image1.png", "rId2");
-        assertEquals(slide0.getRelations().size(), 2);
+                assertEquals(slide0.getShapes().size(), 2);
 
-        // Save and re-load
-        XMLSlideShow ss2 = XSLFTestDataSamples.writeOutAndReadBack(ss1);
-        ss1.close();
-        assertEquals(1, ss2.getSlides().size());
+                assertRelation(slide0, "/ppt/slides/slide1.xml", null);
+                assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
+                assertNull(slide0.getRelationById("rId2"));
+                assertEquals(slide0.getRelations().size(), 1);
 
-        slide0 = ss2.getSlides().get(0);
+                // Save and re-load
+                try (XMLSlideShow ss3 = writeOutAndReadBack(ss2)) {
+                    assertEquals(1, ss3.getSlides().size());
 
-        assertRelation(slide0, "/ppt/slides/slide1.xml", null);
-        assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
-        assertRelation(slide0, "/ppt/media/image1.png", "rId2");
-        assertEquals(slide0.getRelations().size(), 2);
+                    slide0 = ss3.getSlides().get(0);
 
-        pictures.clear();
-        for (XSLFShape shape : slide0.getShapes()) {
-            if (shape instanceof XSLFPictureShape) {
-                pictures.add((XSLFPictureShape) shape);
+                    assertRelation(slide0, "/ppt/slides/slide1.xml", null);
+                    assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
+                    assertEquals(slide0.getShapes().size(), 2);
+                }
             }
         }
-
-        assertEquals(pictures.size(), 1);
-        assertEquals(pictures.get(0).getPictureData().getFileName(), "image1.png");
-
-        slide0.removeShape(pictures.get(0));
-
-        assertEquals(slide0.getShapes().size(), 2);
-
-        assertRelation(slide0, "/ppt/slides/slide1.xml", null);
-        assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
-        assertNull(slide0.getRelationById("rId2"));
-        assertEquals(slide0.getRelations().size(), 1);
-
-        // Save and re-load
-        XMLSlideShow ss3 = XSLFTestDataSamples.writeOutAndReadBack(ss2);
-        ss2.close();
-        assertEquals(1, ss3.getSlides().size());
-
-        slide0 = ss3.getSlides().get(0);
-
-        assertRelation(slide0, "/ppt/slides/slide1.xml", null);
-        assertRelation(slide0, "/ppt/slideLayouts/slideLayout1.xml", "rId1");
-        assertEquals(slide0.getShapes().size(), 2);
-        ss3.close();
     }
 
     @Test
     void bug61589() throws IOException {
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
         try (XMLSlideShow src = new XMLSlideShow();
              XMLSlideShow dest = new XMLSlideShow()) {
             XSLFSlide slide = src.createSlide();
@@ -229,71 +229,65 @@ class TestXSLFBugs {
             dest.createSlide().importContent(slide);
             dest.createSlide().importContent(slide2);
 
-            dest.write(bos);
+            try (XMLSlideShow ppt3 = writeOutAndReadBack(dest)) {
+                XSLFSlide slide3 = ppt3.getSlides().get(0);
+                XSLFTextBox shape3 = (XSLFTextBox) slide3.getShapes().get(0);
+                XSLFTextParagraph p3 = shape3.getTextParagraphs().get(1);
+                XSLFHyperlink h1 = p3.getTextRuns().get(0).getHyperlink();
+                assertNotNull(h1);
+                assertEquals("https://poi.apache.org", h1.getAddress());
+                XSLFHyperlink h2 = p3.getTextRuns().get(2).getHyperlink();
+                assertNotNull(h2);
+                // relative url will be resolved to an absolute url, therefore this doesn't equals to "slide2.xml"
+                assertEquals("/ppt/slides/slide2.xml", h2.getAddress());
+                RelationPart sldRef = slide3.getRelationPartById(h2.getXmlObject().getId());
+                assertTrue(sldRef.getDocumentPart() instanceof XSLFSlide);
+            }
         }
 
-        try (XMLSlideShow ppt = new XMLSlideShow(new ByteArrayInputStream(bos.toByteArray()))) {
-            XSLFSlide slide = ppt.getSlides().get(0);
-            XSLFTextBox shape = (XSLFTextBox) slide.getShapes().get(0);
-            XSLFTextParagraph p = shape.getTextParagraphs().get(1);
-            XSLFHyperlink h1 = p.getTextRuns().get(0).getHyperlink();
-            assertNotNull(h1);
-            assertEquals("https://poi.apache.org", h1.getAddress());
-            XSLFHyperlink h2 = p.getTextRuns().get(2).getHyperlink();
-            assertNotNull(h2);
-            // relative url will be resolved to an absolute url, therefore this doesn't equals to "slide2.xml"
-            assertEquals("/ppt/slides/slide2.xml", h2.getAddress());
-            RelationPart sldRef = slide.getRelationPartById(h2.getXmlObject().getId());
-            assertTrue(sldRef.getDocumentPart() instanceof XSLFSlide);
-        }
     }
 
     @Test
     void bug62587() throws IOException {
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        try (XMLSlideShow ppt = new XMLSlideShow()) {
-            Slide<?, ?> slide = ppt.createSlide();
-            XSLFPictureData pd = ppt.addPicture(slTests.getFile("wrench.emf"), PictureType.EMF);
-            PictureShape<?, ?> ps = slide.createPicture(pd);
-            ps.setAnchor(new Rectangle2D.Double(100, 100, 100, 100));
-            ppt.write(bos);
-        }
-
         Object[][] pics = {
             {"santa.wmf", PictureType.WMF, XSLFRelation.IMAGE_WMF},
             {"tomcat.png", PictureType.PNG, XSLFRelation.IMAGE_PNG},
             {"clock.jpg", PictureType.JPEG, XSLFRelation.IMAGE_JPEG}
         };
 
-        try (XMLSlideShow ppt = new XMLSlideShow(new ByteArrayInputStream(bos.toByteArray()))) {
-            XSLFSlide s1 = ppt.getSlides().get(0);
+        try (XMLSlideShow ppt1 = new XMLSlideShow()) {
+            Slide<?, ?> slide = ppt1.createSlide();
+            XSLFPictureData pd1 = ppt1.addPicture(slTests.getFile("wrench.emf"), PictureType.EMF);
+            PictureShape<?, ?> ps1 = slide.createPicture(pd1);
+            ps1.setAnchor(new Rectangle2D.Double(100, 100, 100, 100));
+
+            try (XMLSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                XSLFSlide s1 = ppt2.getSlides().get(0);
+
+                for (Object[] p : pics) {
+                    XSLFSlide s2 = ppt2.createSlide();
+                    s2.importContent(s1);
+
+                    XSLFPictureData pd2 = ppt2.addPicture(slTests.getFile((String) p[0]), (PictureType) p[1]);
+                    XSLFPictureShape ps2 = (XSLFPictureShape) s2.getShapes().get(0);
+                    Rectangle2D anchor2 = ps2.getAnchor();
+                    s2.removeShape(ps2);
+                    ps2 = s2.createPicture(pd2);
+                    ps2.setAnchor(anchor2);
+                }
 
-            for (Object[] p : pics) {
-                XSLFSlide s2 = ppt.createSlide();
-                s2.importContent(s1);
-
-                XSLFPictureData pd = ppt.addPicture(slTests.getFile((String) p[0]), (PictureType) p[1]);
-                XSLFPictureShape ps = (XSLFPictureShape) s2.getShapes().get(0);
-                Rectangle2D anchor = ps.getAnchor();
-                s2.removeShape(ps);
-                ps = s2.createPicture(pd);
-                ps.setAnchor(anchor);
-            }
-
-            bos.reset();
-            ppt.write(bos);
-        }
-
-        try (XMLSlideShow ppt = new XMLSlideShow(new ByteArrayInputStream(bos.toByteArray()))) {
-            for (XSLFSlide sl : ppt.getSlides()) {
-                List<RelationPart> rels = sl.getRelationParts();
-                assertEquals(2, rels.size());
-                RelationPart rel0 = rels.get(0);
-                assertEquals("rId1", rel0.getRelationship().getId());
-                assertEquals(XSLFRelation.SLIDE_LAYOUT.getRelation(), rel0.getRelationship().getRelationshipType());
-                RelationPart rel1 = rels.get(1);
-                assertEquals("rId2", rel1.getRelationship().getId());
-                assertEquals(XSLFRelation.IMAGES.getRelation(), rel1.getRelationship().getRelationshipType());
+                try (XMLSlideShow ppt3 = writeOutAndReadBack(ppt2)) {
+                    for (XSLFSlide sl : ppt3.getSlides()) {
+                        List<RelationPart> rels = sl.getRelationParts();
+                        assertEquals(2, rels.size());
+                        RelationPart rel0 = rels.get(0);
+                        assertEquals("rId1", rel0.getRelationship().getId());
+                        assertEquals(XSLFRelation.SLIDE_LAYOUT.getRelation(), rel0.getRelationship().getRelationshipType());
+                        RelationPart rel1 = rels.get(1);
+                        assertEquals("rId2", rel1.getRelationship().getId());
+                        assertEquals(XSLFRelation.IMAGES.getRelation(), rel1.getRelationship().getRelationshipType());
+                    }
+                }
             }
         }
     }
@@ -301,78 +295,73 @@ class TestXSLFBugs {
 
     @Test
     void bug60499() throws IOException, InvalidFormatException {
-        InputStream is = slTests.openResourceAsStream("bug60499.pptx");
-        byte[] buf = IOUtils.toByteArray(is);
-        is.close();
-
         PackagePartName ppn = PackagingURIHelper.createPartName("/ppt/media/image1.png");
 
-        XMLSlideShow ppt1 = new XMLSlideShow(new ByteArrayInputStream(buf));
-        XSLFSlide slide1 = ppt1.getSlides().get(0);
+        try (XMLSlideShow ppt1 = openSampleDocument("bug60499.pptx")) {
+            XSLFSlide slide1 = ppt1.getSlides().get(0);
 
-        Optional<XSLFShape> shapeToDelete1 =
-            slide1.getShapes().stream().filter(s -> s instanceof XSLFPictureShape).findFirst();
+            Optional<XSLFShape> shapeToDelete1 =
+                slide1.getShapes().stream().filter(s -> s instanceof XSLFPictureShape).findFirst();
 
-        assertTrue(shapeToDelete1.isPresent());
-        slide1.removeShape(shapeToDelete1.get());
-        assertTrue(slide1.getRelationParts().stream()
-            .allMatch(rp -> "rId1,rId3".contains(rp.getRelationship().getId())));
-
-        assertNotNull(ppt1.getPackage().getPart(ppn));
-        ppt1.close();
-
-        XMLSlideShow ppt2 = new XMLSlideShow(new ByteArrayInputStream(buf));
-        XSLFSlide slide2 = ppt2.getSlides().get(0);
-
-        Optional<XSLFShape> shapeToDelete2 =
-            slide2.getShapes().stream().filter(s -> s instanceof XSLFPictureShape).skip(1).findFirst();
-        assertTrue(shapeToDelete2.isPresent());
-        slide2.removeShape(shapeToDelete2.get());
-        assertTrue(slide2.getRelationParts().stream()
-            .allMatch(rp -> "rId1,rId2".contains(rp.getRelationship().getId())));
-        assertNotNull(ppt2.getPackage().getPart(ppn));
-        ppt2.close();
-
-        XMLSlideShow ppt3 = new XMLSlideShow(new ByteArrayInputStream(buf));
-        XSLFSlide slide3 = ppt3.getSlides().get(0);
-        slide3.getShapes().stream()
-            .filter(s -> s instanceof XSLFPictureShape)
-            .collect(Collectors.toList())
-            .forEach(slide3::removeShape);
-        assertNull(ppt3.getPackage().getPart(ppn));
-        ppt3.close();
+            assertTrue(shapeToDelete1.isPresent());
+            slide1.removeShape(shapeToDelete1.get());
+            assertTrue(slide1.getRelationParts().stream()
+                .allMatch(rp -> "rId1,rId3".contains(rp.getRelationship().getId())));
+
+            assertNotNull(ppt1.getPackage().getPart(ppn));
+        }
+
+        try (XMLSlideShow ppt2 = openSampleDocument("bug60499.pptx")) {
+            XSLFSlide slide2 = ppt2.getSlides().get(0);
+            Optional<XSLFShape> shapeToDelete2 =
+                slide2.getShapes().stream().filter(s -> s instanceof XSLFPictureShape).skip(1).findFirst();
+            assertTrue(shapeToDelete2.isPresent());
+            slide2.removeShape(shapeToDelete2.get());
+            assertTrue(slide2.getRelationParts().stream()
+                .allMatch(rp -> "rId1,rId2".contains(rp.getRelationship().getId())));
+            assertNotNull(ppt2.getPackage().getPart(ppn));
+        }
+
+        try (XMLSlideShow ppt3 = openSampleDocument("bug60499.pptx")) {
+            XSLFSlide slide3 = ppt3.getSlides().get(0);
+            slide3.getShapes().stream()
+                .filter(s -> s instanceof XSLFPictureShape)
+                .collect(Collectors.toList())
+                .forEach(slide3::removeShape);
+            assertNull(ppt3.getPackage().getPart(ppn));
+        }
     }
 
     @Test
     void bug51187() throws Exception {
-        XMLSlideShow ss1 = openSampleDocument("51187.pptx");
+        try (XMLSlideShow ss1 = openSampleDocument("51187.pptx")) {
 
-        assertEquals(1, ss1.getSlides().size());
+            assertEquals(1, ss1.getSlides().size());
 
-        // Check the relations on it
-        // Note - rId3 is a self reference
-        XSLFSlide slide0 = ss1.getSlides().get(0);
-
-        assertRelation(slide0, "/ppt/slides/slide1.xml", null);
-        assertRelation(slide0, "/ppt/slideLayouts/slideLayout12.xml", "rId1");
-        assertRelation(slide0, "/ppt/notesSlides/notesSlide1.xml", "rId2");
-        assertRelation(slide0, "/ppt/slides/slide1.xml", "rId3");
-        assertRelation(slide0, "/ppt/media/image1.png", "rId4");
-
-        // Save and re-load
-        XMLSlideShow ss2 = XSLFTestDataSamples.writeOutAndReadBack(ss1);
-        ss1.close();
-        assertEquals(1, ss2.getSlides().size());
-
-        slide0 = ss2.getSlides().get(0);
-        assertRelation(slide0, "/ppt/slides/slide1.xml", null);
-        assertRelation(slide0, "/ppt/slideLayouts/slideLayout12.xml", "rId1");
-        assertRelation(slide0, "/ppt/notesSlides/notesSlide1.xml", "rId2");
-        // TODO Fix this
-        assertRelation(slide0, "/ppt/slides/slide1.xml", "rId3");
-        assertRelation(slide0, "/ppt/media/image1.png", "rId4");
+            // Check the relations on it
+            // Note - rId3 is a self reference
+            XSLFSlide slide0 = ss1.getSlides().get(0);
+
+            assertRelation(slide0, "/ppt/slides/slide1.xml", null);
+            assertRelation(slide0, "/ppt/slideLayouts/slideLayout12.xml", "rId1");
+            assertRelation(slide0, "/ppt/notesSlides/notesSlide1.xml", "rId2");
+            assertRelation(slide0, "/ppt/slides/slide1.xml", "rId3");
+            assertRelation(slide0, "/ppt/media/image1.png", "rId4");
+
+            // Save and re-load
+            try (XMLSlideShow ss2 = writeOutAndReadBack(ss1)) {
+                assertEquals(1, ss2.getSlides().size());
+
+                slide0 = ss2.getSlides().get(0);
+                assertRelation(slide0, "/ppt/slides/slide1.xml", null);
+                assertRelation(slide0, "/ppt/slideLayouts/slideLayout12.xml", "rId1");
+                assertRelation(slide0, "/ppt/notesSlides/notesSlide1.xml", "rId2");
+                // TODO Fix this
+                assertRelation(slide0, "/ppt/slides/slide1.xml", "rId3");
+                assertRelation(slide0, "/ppt/media/image1.png", "rId4");
 
-        ss2.close();
+            }
+        }
     }
 
     private static void assertRelation(XSLFSlide slide, String exp, String rId) {
@@ -386,41 +375,40 @@ class TestXSLFBugs {
      */
     @Test
     void tika705() throws Exception {
-        XMLSlideShow ss = openSampleDocument("with_japanese.pptx");
+        try (XMLSlideShow ss = openSampleDocument("with_japanese.pptx")) {
+            // Should have one slide
+            assertEquals(1, ss.getSlides().size());
+            XSLFSlide slide = ss.getSlides().get(0);
+
+            // Check the relations from this
+            Collection<RelationPart> rels = slide.getRelationParts();
+
+            // Should have 6 relations:
+            //   1 external hyperlink (skipped from list)
+            //   4 internal hyperlinks
+            //   1 slide layout
+            assertEquals(5, rels.size());
+            int layouts = 0;
+            int hyperlinks = 0;
+            for (RelationPart p : rels) {
+                if (p.getRelationship().getRelationshipType().equals(XSLFRelation.HYPERLINK.getRelation())) {
+                    hyperlinks++;
+                } else if (p.getDocumentPart() instanceof XSLFSlideLayout) {
+                    layouts++;
+                }
+            }
+            assertEquals(1, layouts);
+            assertEquals(4, hyperlinks);
 
-        // Should have one slide
-        assertEquals(1, ss.getSlides().size());
-        XSLFSlide slide = ss.getSlides().get(0);
-
-        // Check the relations from this
-        Collection<RelationPart> rels = slide.getRelationParts();
-
-        // Should have 6 relations:
-        //   1 external hyperlink (skipped from list)
-        //   4 internal hyperlinks
-        //   1 slide layout
-        assertEquals(5, rels.size());
-        int layouts = 0;
-        int hyperlinks = 0;
-        for (RelationPart p : rels) {
-            if (p.getRelationship().getRelationshipType().equals(XSLFRelation.HYPERLINK.getRelation())) {
-                hyperlinks++;
-            } else if (p.getDocumentPart() instanceof XSLFSlideLayout) {
-                layouts++;
-            }
-        }
-        assertEquals(1, layouts);
-        assertEquals(4, hyperlinks);
-
-        // Hyperlinks should all be to #_ftn1 or #ftnref1
-        for (RelationPart p : rels) {
-            if (p.getRelationship().getRelationshipType().equals(XSLFRelation.HYPERLINK.getRelation())) {
-                URI target = p.getRelationship().getTargetURI();
-                String frag = target.getFragment();
-                assertTrue(frag.equals("_ftn1") || frag.equals("_ftnref1"), "Invalid target " + frag + " on " + target);
+            // Hyperlinks should all be to #_ftn1 or #ftnref1
+            for (RelationPart p : rels) {
+                if (p.getRelationship().getRelationshipType().equals(XSLFRelation.HYPERLINK.getRelation())) {
+                    URI target = p.getRelationship().getTargetURI();
+                    String frag = target.getFragment();
+                    assertTrue(frag.equals("_ftn1") || frag.equals("_ftnref1"), "Invalid target " + frag + " on " + target);
+                }
             }
         }
-        ss.close();
     }
 
     /**
@@ -459,34 +447,34 @@ class TestXSLFBugs {
      */
     @Test
     void bug56812() throws Exception {
-        XMLSlideShow ppt = openSampleDocument("56812.pptx");
+        try (XMLSlideShow ppt = openSampleDocument("56812.pptx")) {
 
-        int internalPictures = 0;
-        int externalPictures = 0;
-        for (XSLFSlide slide : ppt.getSlides()) {
-            for (XSLFShape shape : slide.getShapes()) {
-                assertNotNull(shape);
-
-                if (shape instanceof XSLFPictureShape) {
-                    XSLFPictureShape picture = (XSLFPictureShape) shape;
-                    if (picture.isExternalLinkedPicture()) {
-                        externalPictures++;
-
-                        assertNotNull(picture.getPictureLink());
-                    } else {
-                        internalPictures++;
-
-                        XSLFPictureData data = picture.getPictureData();
-                        assertNotNull(data);
-                        assertNotNull(data.getFileName());
+            int internalPictures = 0;
+            int externalPictures = 0;
+            for (XSLFSlide slide : ppt.getSlides()) {
+                for (XSLFShape shape : slide.getShapes()) {
+                    assertNotNull(shape);
+
+                    if (shape instanceof XSLFPictureShape) {
+                        XSLFPictureShape picture = (XSLFPictureShape) shape;
+                        if (picture.isExternalLinkedPicture()) {
+                            externalPictures++;
+
+                            assertNotNull(picture.getPictureLink());
+                        } else {
+                            internalPictures++;
+
+                            XSLFPictureData data = picture.getPictureData();
+                            assertNotNull(data);
+                            assertNotNull(data.getFileName());
+                        }
                     }
                 }
             }
-        }
 
-        assertEquals(2, internalPictures);
-        assertEquals(1, externalPictures);
-        ppt.close();
+            assertEquals(2, internalPictures);
+            assertEquals(1, externalPictures);
+        }
     }
 
     private String getSlideText(XMLSlideShow ppt, XSLFSlide slide) throws IOException {
@@ -502,29 +490,29 @@ class TestXSLFBugs {
 
     @Test
     void bug57250() throws Exception {
-        XMLSlideShow ss = new XMLSlideShow();
-        for (String s : new String[]{"Slide1", "Slide2"}) {
-            ss.createSlide().createTextBox().setText(s);
-        }
-        validateSlides(ss, false, "Slide1", "Slide2");
-
-        XSLFSlide slide = ss.createSlide();
-        slide.createTextBox().setText("New slide");
-        validateSlides(ss, true, "Slide1", "Slide2", "New slide");
-
-        // Move backward
-        ss.setSlideOrder(slide, 0);
-        validateSlides(ss, true, "New slide", "Slide1", "Slide2");
-
-        // Move forward
-        ss.setSlideOrder(slide, 1);
-        validateSlides(ss, true, "Slide1", "New slide", "Slide2");
-
-        // Move to end
-        ss.setSlideOrder(slide, 0);
-        ss.setSlideOrder(slide, 2);
-        validateSlides(ss, true, "Slide1", "Slide2", "New slide");
-        ss.close();
+        try (XMLSlideShow ss = new XMLSlideShow()) {
+            for (String s : new String[]{"Slide1", "Slide2"}) {
+                ss.createSlide().createTextBox().setText(s);
+            }
+            validateSlides(ss, false, "Slide1", "Slide2");
+
+            XSLFSlide slide = ss.createSlide();
+            slide.createTextBox().setText("New slide");
+            validateSlides(ss, true, "Slide1", "Slide2", "New slide");
+
+            // Move backward
+            ss.setSlideOrder(slide, 0);
+            validateSlides(ss, true, "New slide", "Slide1", "Slide2");
+
+            // Move forward
+            ss.setSlideOrder(slide, 1);
+            validateSlides(ss, true, "Slide1", "New slide", "Slide2");
+
+            // Move to end
+            ss.setSlideOrder(slide, 0);
+            ss.setSlideOrder(slide, 2);
+            validateSlides(ss, true, "Slide1", "Slide2", "New slide");
+        }
     }
 
     /**
@@ -533,89 +521,88 @@ class TestXSLFBugs {
      */
     @Test
     void test57552() throws Exception {
-        XMLSlideShow ss = new XMLSlideShow();
-        for (String s : new String[]{"Slide1", "Slide2"}) {
-            ss.createSlide().createTextBox().setText(s);
-        }
+        try (XMLSlideShow ss = new XMLSlideShow()) {
+            for (String s : new String[]{"Slide1", "Slide2"}) {
+                ss.createSlide().createTextBox().setText(s);
+            }
 
-        // Slide starts with just layout relation
-        XSLFSlide slide = ss.getSlides().get(0);
-        assertEquals(0, ss.getPictureData().size());
-        assertEquals(1, slide.getShapes().size());
+            // Slide starts with just layout relation
+            XSLFSlide slide = ss.getSlides().get(0);
+            assertEquals(0, ss.getPictureData().size());
+            assertEquals(1, slide.getShapes().size());
+
+            assertEquals(1, slide.getRelations().size());
+
+            final XSLFRelation expected = XSLFRelation.SLIDE_LAYOUT;
+            final POIXMLDocumentPart relation = slide.getRelations().get(0);
+
+            assertEquals(expected.getContentType(), relation.getPackagePart().getContentType());
+            assertEquals(expected.getFileName(expected.getFileNameIndex(relation)), relation.getPackagePart().getPartName().getName());
+
+            // Some dummy pictures
+            byte[][] pics = new byte[15][3];
+            for (int i = 0; i < pics.length; i++) {
+                Arrays.fill(pics[i], (byte) i);
+            }
 
-        assertEquals(1, slide.getRelations().size());
+            // Add a few pictures
+            addPictures(ss, slide, pics, 0, 10);
 
-        final XSLFRelation expected = XSLFRelation.SLIDE_LAYOUT;
-        final POIXMLDocumentPart relation = slide.getRelations().get(0);
+            // Re-fetch the pictures and check
+            for (int i = 0; i < 10; i++) {
+                XSLFPictureShape shape = (XSLFPictureShape) slide.getShapes().get(i + 1);
+                assertNotNull(shape.getPictureData());
+                assertArrayEquals(pics[i], shape.getPictureData().getData());
+            }
 
-        assertEquals(expected.getContentType(), relation.getPackagePart().getContentType());
-        assertEquals(expected.getFileName(expected.getFileNameIndex(relation)), relation.getPackagePart().getPartName().getName());
+            // Add past 10
+            addPictures(ss, slide, pics, 10, 15);
 
-        // Some dummy pictures
-        byte[][] pics = new byte[15][3];
-        for (int i = 0; i < pics.length; i++) {
-            Arrays.fill(pics[i], (byte) i);
-        }
+            // Check all pictures
+            for (int i = 0; i < 15; i++) {
+                XSLFPictureShape shape = (XSLFPictureShape) slide.getShapes().get(i + 1);
+                assertNotNull(shape.getPictureData());
+                assertArrayEquals(pics[i], shape.getPictureData().getData());
+            }
 
-        // Add a few pictures
-        addPictures(ss, slide, pics, 0, 10);
+            // Add a duplicate, check the right one is picked
+            XSLFPictureData data = ss.addPicture(pics[3], PictureType.JPEG);
+            assertEquals(3, data.getIndex());
+            assertEquals(15, ss.getPictureData().size());
 
-        // Re-fetch the pictures and check
-        for (int i = 0; i < 10; i++) {
-            XSLFPictureShape shape = (XSLFPictureShape) slide.getShapes().get(i + 1);
+            XSLFPictureShape shape = slide.createPicture(data);
             assertNotNull(shape.getPictureData());
-            assertArrayEquals(pics[i], shape.getPictureData().getData());
-        }
+            assertArrayEquals(pics[3], shape.getPictureData().getData());
+            assertEquals(17, slide.getShapes().size());
 
-        // Add past 10
-        addPictures(ss, slide, pics, 10, 15);
 
-        // Check all pictures
-        for (int i = 0; i < 15; i++) {
-            XSLFPictureShape shape = (XSLFPictureShape) slide.getShapes().get(i + 1);
-            assertNotNull(shape.getPictureData());
-            assertArrayEquals(pics[i], shape.getPictureData().getData());
-        }
+            // Save and re-load
+            try (XMLSlideShow ss2 = writeOutAndReadBack(ss)) {
+                slide = ss2.getSlides().get(0);
+
+                // Check the 15 individual ones added
+                for (int i = 0; i < 15; i++) {
+                    shape = (XSLFPictureShape) slide.getShapes().get(i + 1);
+                    assertNotNull(shape.getPictureData());
+                    assertArrayEquals(pics[i], shape.getPictureData().getData());
+                }
 
-        // Add a duplicate, check the right one is picked
-        XSLFPictureData data = ss.addPicture(pics[3], PictureType.JPEG);
-        assertEquals(3, data.getIndex());
-        assertEquals(15, ss.getPictureData().size());
-
-        XSLFPictureShape shape = slide.createPicture(data);
-        assertNotNull(shape.getPictureData());
-        assertArrayEquals(pics[3], shape.getPictureData().getData());
-        assertEquals(17, slide.getShapes().size());
-
-
-        // Save and re-load
-        XMLSlideShow ss2 = XSLFTestDataSamples.writeOutAndReadBack(ss);
-        slide = ss2.getSlides().get(0);
-
-        // Check the 15 individual ones added
-        for (int i = 0; i < 15; i++) {
-            shape = (XSLFPictureShape) slide.getShapes().get(i + 1);
-            assertNotNull(shape.getPictureData());
-            assertArrayEquals(pics[i], shape.getPictureData().getData());
+                // Check the duplicate
+                shape = (XSLFPictureShape) slide.getShapes().get(16);
+                assertNotNull(shape.getPictureData());
+                assertArrayEquals(pics[3], shape.getPictureData().getData());
+
+                // Add another duplicate
+                data = ss2.addPicture(pics[5], PictureType.JPEG);
+                assertEquals(5, data.getIndex());
+                assertEquals(15, ss2.getPictureData().size());
+
+                shape = slide.createPicture(data);
+                assertNotNull(shape.getPictureData());
+                assertArrayEquals(pics[5], shape.getPictureData().getData());
+                assertEquals(18, slide.getShapes().size());
+            }
         }
-
-        // Check the duplicate
-        shape = (XSLFPictureShape) slide.getShapes().get(16);
-        assertNotNull(shape.getPictureData());
-        assertArrayEquals(pics[3], shape.getPictureData().getData());
-
-        // Add another duplicate
-        data = ss2.addPicture(pics[5], PictureType.JPEG);
-        assertEquals(5, data.getIndex());
-        assertEquals(15, ss2.getPictureData().size());
-
-        shape = slide.createPicture(data);
-        assertNotNull(shape.getPictureData());
-        assertArrayEquals(pics[5], shape.getPictureData().getData());
-        assertEquals(18, slide.getShapes().size());
-
-        ss2.close();
-        ss.close();
     }
 
     private void addPictures(XMLSlideShow ss, XSLFSlide slide, byte[][] pics, int start, int end) {
@@ -633,9 +620,9 @@ class TestXSLFBugs {
 
     private void validateSlides(XMLSlideShow ss, boolean saveAndReload, String... slideTexts) throws IOException {
         if (saveAndReload) {
-            XMLSlideShow ss2 = XSLFTestDataSamples.writeOutAndReadBack(ss);
-            validateSlides(ss, slideTexts);
-            ss2.close();
+            try (XMLSlideShow ss2 = writeOutAndReadBack(ss)) {
+                validateSlides(ss2, slideTexts);
+            }
         } else {
             validateSlides(ss, slideTexts);
         }
@@ -652,69 +639,57 @@ class TestXSLFBugs {
 
     @Test
     void bug58205() throws IOException {
-        XMLSlideShow ss = openSampleDocument("themes.pptx");
-
-        int i = 1;
-        for (XSLFSlideMaster sm : ss.getSlideMasters()) {
-            assertEquals("rId" + (i++), ss.getRelationId(sm));
+        try (XMLSlideShow ss = openSampleDocument("themes.pptx")) {
+            int i = 1;
+            for (XSLFSlideMaster sm : ss.getSlideMasters()) {
+                assertEquals("rId" + (i++), ss.getRelationId(sm));
+            }
         }
-
-        ss.close();
     }
 
-    @Test
-    void bug55791a() throws IOException {
-        XMLSlideShow ppt = openSampleDocument("45541_Footer.pptx");
-        removeAndCreateSlide(ppt);
-        ppt.close();
-    }
-
-    @Test
-    void bug55791b() throws IOException {
-        XMLSlideShow ppt = openSampleDocument("SampleShow.pptx");
-        removeAndCreateSlide(ppt);
-        ppt.close();
-    }
-
-    private void removeAndCreateSlide(XMLSlideShow ppt) {
-        assertTrue(ppt.getSlides().size() > 1);
-        ppt.removeSlide(1);
-        assertNotNull(ppt.createSlide());
+    @ParameterizedTest
+    @ValueSource(strings = {"45541_Footer.pptx", "SampleShow.pptx"})
+    void bug55791(String fileName) throws IOException {
+        try (XMLSlideShow ppt = openSampleDocument(fileName)) {
+            assertTrue(ppt.getSlides().size() > 1);
+            ppt.removeSlide(1);
+            assertNotNull(ppt.createSlide());
+        }
     }
 
     @Test
     void blibFillAlternateContent() throws IOException {
-        XMLSlideShow ppt = openSampleDocument("2411-Performance_Up.pptx");
-        XSLFPictureShape ps = (XSLFPictureShape) ppt.getSlides().get(4).getShapes().get(0);
-        assertNotNull(ps.getPictureData());
-        ppt.close();
+        try (XMLSlideShow ppt = openSampleDocument("2411-Performance_Up.pptx")) {
+            XSLFPictureShape ps = (XSLFPictureShape) ppt.getSlides().get(4).getShapes().get(0);
+            assertNotNull(ps.getPictureData());
+        }
     }
 
     @Test
     void bug59434() throws IOException {
         String url1 = "https://poi.apache.org/changes.html";
         String url2 = "https://poi.apache.org/faq.html";
-        XMLSlideShow ppt1 = new XMLSlideShow();
-        PictureData pd1 = ppt1.addPicture(slTests.readFile("tomcat.png"), PictureType.PNG);
-        PictureData pd2 = ppt1.addPicture(slTests.readFile("santa.wmf"), PictureType.WMF);
-        XSLFSlide slide = ppt1.createSlide();
-        XSLFPictureShape ps1 = slide.createPicture(pd1);
-        ps1.setAnchor(new Rectangle2D.Double(20, 20, 100, 100));
-        XSLFHyperlink hl1 = ps1.createHyperlink();
-        hl1.linkToUrl(url1);
-        XSLFPictureShape ps2 = slide.createPicture(pd2);
-        ps2.setAnchor(new Rectangle2D.Double(120, 120, 100, 100));
-        XSLFHyperlink hl2 = ps2.createHyperlink();
-        hl2.linkToUrl(url2);
-        XMLSlideShow ppt2 = XSLFTestDataSamples.writeOutAndReadBack(ppt1);
-        ppt1.close();
-        slide = ppt2.getSlides().get(0);
-        ps1 = (XSLFPictureShape) slide.getShapes().get(0);
-        ps2 = (XSLFPictureShape) slide.getShapes().get(1);
-        assertEquals(url1, ps1.getHyperlink().getAddress());
-        assertEquals(url2, ps2.getHyperlink().getAddress());
-
-        ppt2.close();
+        try (XMLSlideShow ppt1 = new XMLSlideShow()) {
+            PictureData pd1 = ppt1.addPicture(slTests.readFile("tomcat.png"), PictureType.PNG);
+            PictureData pd2 = ppt1.addPicture(slTests.readFile("santa.wmf"), PictureType.WMF);
+            XSLFSlide slide = ppt1.createSlide();
+            XSLFPictureShape ps1 = slide.createPicture(pd1);
+            ps1.setAnchor(new Rectangle2D.Double(20, 20, 100, 100));
+            XSLFHyperlink hl1 = ps1.createHyperlink();
+            hl1.linkToUrl(url1);
+            XSLFPictureShape ps2 = slide.createPicture(pd2);
+            ps2.setAnchor(new Rectangle2D.Double(120, 120, 100, 100));
+            XSLFHyperlink hl2 = ps2.createHyperlink();
+            hl2.linkToUrl(url2);
+
+            try (XMLSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                slide = ppt2.getSlides().get(0);
+                ps1 = (XSLFPictureShape) slide.getShapes().get(0);
+                ps2 = (XSLFPictureShape) slide.getShapes().get(1);
+                assertEquals(url1, ps1.getHyperlink().getAddress());
+                assertEquals(url2, ps2.getHyperlink().getAddress());
+            }
+        }
     }
 
     @Test
@@ -723,27 +698,27 @@ class TestXSLFBugs {
         Color lineColor = new Color(25.3f / 255f, 1f, 0f, 0.4f);
         Color textColor = new Color(1f, 1f, 0f, 0.6f);
 
-        XMLSlideShow ppt1 = new XMLSlideShow();
-        XSLFSlide sl = ppt1.createSlide();
-        XSLFAutoShape as = sl.createAutoShape();
-        as.setShapeType(ShapeType.STAR_10);
-        as.setAnchor(new Rectangle2D.Double(100, 100, 300, 300));
-        as.setFillColor(fillColor);
-        as.setLineColor(lineColor);
-        as.setText("Alpha");
-        as.setVerticalAlignment(VerticalAlignment.MIDDLE);
-        as.setHorizontalCentered(true);
-        XSLFTextRun tr = as.getTextParagraphs().get(0).getTextRuns().get(0);
-        tr.setFontSize(32d);
-        tr.setFontColor(textColor);
-        XMLSlideShow ppt2 = XSLFTestDataSamples.writeOutAndReadBack(ppt1);
-        ppt1.close();
-        sl = ppt2.getSlides().get(0);
-        as = (XSLFAutoShape) sl.getShapes().get(0);
-        checkColor(fillColor, as.getFillStyle().getPaint());
-        checkColor(lineColor, as.getStrokeStyle().getPaint());
-        checkColor(textColor, as.getTextParagraphs().get(0).getTextRuns().get(0).getFontColor());
-        ppt2.close();
+        try (XMLSlideShow ppt1 = new XMLSlideShow()) {
+            XSLFSlide sl = ppt1.createSlide();
+            XSLFAutoShape as = sl.createAutoShape();
+            as.setShapeType(ShapeType.STAR_10);
+            as.setAnchor(new Rectangle2D.Double(100, 100, 300, 300));
+            as.setFillColor(fillColor);
+            as.setLineColor(lineColor);
+            as.setText("Alpha");
+            as.setVerticalAlignment(VerticalAlignment.MIDDLE);
+            as.setHorizontalCentered(true);
+            XSLFTextRun tr = as.getTextParagraphs().get(0).getTextRuns().get(0);
+            tr.setFontSize(32d);
+            tr.setFontColor(textColor);
+            try (XMLSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                sl = ppt2.getSlides().get(0);
+                as = (XSLFAutoShape) sl.getShapes().get(0);
+                checkColor(fillColor, as.getFillStyle().getPaint());
+                checkColor(lineColor, as.getStrokeStyle().getPaint());
+                checkColor(textColor, as.getTextParagraphs().get(0).getTextRuns().get(0).getFontColor());
+            }
+        }
     }
 
     private static void checkColor(Color expected, PaintStyle actualStyle) {
@@ -757,64 +732,60 @@ class TestXSLFBugs {
 
     @Test
     void bug55714() throws IOException {
-        XMLSlideShow srcPptx = openSampleDocument("pptx2svg.pptx");
-        XMLSlideShow newPptx = new XMLSlideShow();
-        XSLFSlide srcSlide = srcPptx.getSlides().get(0);
-        XSLFSlide newSlide = newPptx.createSlide();
-
-        XSLFSlideLayout srcSlideLayout = srcSlide.getSlideLayout();
-        XSLFSlideLayout newSlideLayout = newSlide.getSlideLayout();
-        newSlideLayout.importContent(srcSlideLayout);
-
-        XSLFSlideMaster srcSlideMaster = srcSlide.getSlideMaster();
-        XSLFSlideMaster newSlideMaster = newSlide.getSlideMaster();
-        newSlideMaster.importContent(srcSlideMaster);
-
-        newSlide.importContent(srcSlide);
-        XMLSlideShow rwPptx = XSLFTestDataSamples.writeOutAndReadBack(newPptx);
-
-        PaintStyle ps = rwPptx.getSlides().get(0).getBackground().getFillStyle().getPaint();
-        assertTrue(ps instanceof TexturePaint);
-
-        rwPptx.close();
-        newPptx.close();
-        srcPptx.close();
+        try (XMLSlideShow srcPptx = openSampleDocument("pptx2svg.pptx");
+             XMLSlideShow newPptx = new XMLSlideShow()) {
+            XSLFSlide srcSlide = srcPptx.getSlides().get(0);
+            XSLFSlide newSlide = newPptx.createSlide();
+
+            XSLFSlideLayout srcSlideLayout = srcSlide.getSlideLayout();
+            XSLFSlideLayout newSlideLayout = newSlide.getSlideLayout();
+            newSlideLayout.importContent(srcSlideLayout);
+
+            XSLFSlideMaster srcSlideMaster = srcSlide.getSlideMaster();
+            XSLFSlideMaster newSlideMaster = newSlide.getSlideMaster();
+            newSlideMaster.importContent(srcSlideMaster);
+
+            newSlide.importContent(srcSlide);
+            try (XMLSlideShow rwPptx = writeOutAndReadBack(newPptx)) {
+                PaintStyle ps = rwPptx.getSlides().get(0).getBackground().getFillStyle().getPaint();
+                assertTrue(ps instanceof TexturePaint);
+            }
+        }
     }
 
     @Test
     void bug59273() throws IOException {
-        XMLSlideShow ppt = openSampleDocument("bug59273.potx");
-        ppt.getPackage().replaceContentType(
-            XSLFRelation.PRESENTATIONML_TEMPLATE.getContentType(),
-            XSLFRelation.MAIN.getContentType()
-        );
-
-        XMLSlideShow rwPptx = XSLFTestDataSamples.writeOutAndReadBack(ppt);
-        OPCPackage pkg = rwPptx.getPackage();
-        int size = pkg.getPartsByContentType(XSLFRelation.MAIN.getContentType()).size();
-        assertEquals(1, size);
-        size = pkg.getPartsByContentType(XSLFRelation.PRESENTATIONML_TEMPLATE.getContentType()).size();
-        assertEquals(0, size);
-
-        rwPptx.close();
-        ppt.close();
+        try (XMLSlideShow ppt = openSampleDocument("bug59273.potx")) {
+            ppt.getPackage().replaceContentType(
+                XSLFRelation.PRESENTATIONML_TEMPLATE.getContentType(),
+                XSLFRelation.MAIN.getContentType()
+            );
+
+            try (XMLSlideShow rwPptx = writeOutAndReadBack(ppt)) {
+                OPCPackage pkg = rwPptx.getPackage();
+                int size = pkg.getPartsByContentType(XSLFRelation.MAIN.getContentType()).size();
+                assertEquals(1, size);
+                size = pkg.getPartsByContentType(XSLFRelation.PRESENTATIONML_TEMPLATE.getContentType()).size();
+                assertEquals(0, size);
+            }
+        }
     }
 
 
     @Test
     void bug60373() throws IOException {
-        XMLSlideShow ppt = new XMLSlideShow();
-        XSLFSlide sl = ppt.createSlide();
-        XSLFTable t = sl.createTable();
-        XSLFTableRow r = t.addRow();
-        bug60373_addCell(r);
-        bug60373_addCell(r);
-        r = t.addRow();
-        XSLFTableCell c = bug60373_addCell(r);
-        // call getTextHeight, when table is not fully populated
-        double th = c.getTextHeight();
-        assertTrue(th > 10);
-        ppt.close();
+        try (XMLSlideShow ppt = new XMLSlideShow()) {
+            XSLFSlide sl = ppt.createSlide();
+            XSLFTable t = sl.createTable();
+            XSLFTableRow r = t.addRow();
+            bug60373_addCell(r);
+            bug60373_addCell(r);
+            r = t.addRow();
+            XSLFTableCell c = bug60373_addCell(r);
+            // call getTextHeight, when table is not fully populated
+            double th = c.getTextHeight();
+            assertTrue(th > 10);
+        }
     }
 
     private static XSLFTableCell bug60373_addCell(XSLFTableRow r) {
@@ -834,42 +805,39 @@ class TestXSLFBugs {
 
     @Test
     void bug60662() throws IOException {
-        XMLSlideShow src = new XMLSlideShow();
-        XSLFSlide sl = src.createSlide();
-        XSLFGroupShape gs = sl.createGroup();
-        gs.setAnchor(new Rectangle2D.Double(100, 100, 100, 100));
-        gs.setInteriorAnchor(new Rectangle2D.Double(0, 0, 100, 100));
-        XSLFAutoShape as = gs.createAutoShape();
-        as.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
-        as.setShapeType(ShapeType.STAR_24);
-        as.setFillColor(Color.YELLOW);
-        CTShape csh = (CTShape) as.getXmlObject();
-        CTOuterShadowEffect shadow = csh.getSpPr().addNewEffectLst().addNewOuterShdw();
-        shadow.setDir(270000);
-        shadow.setDist(100000);
-        shadow.addNewSrgbClr().setVal(new byte[]{0x00, (byte) 0xFF, 0x00});
-
-        XMLSlideShow dst = new XMLSlideShow();
-        XSLFSlide sl2 = dst.createSlide();
-        sl2.importContent(sl);
-        XSLFGroupShape gs2 = (XSLFGroupShape) sl2.getShapes().get(0);
-        XSLFAutoShape as2 = (XSLFAutoShape) gs2.getShapes().get(0);
-        CTShape csh2 = (CTShape) as2.getXmlObject();
-        assertTrue(csh2.getSpPr().isSetEffectLst());
-
-        dst.close();
-        src.close();
+        try (XMLSlideShow src = new XMLSlideShow();
+             XMLSlideShow dst = new XMLSlideShow()) {
+            XSLFSlide sl = src.createSlide();
+            XSLFGroupShape gs = sl.createGroup();
+            gs.setAnchor(new Rectangle2D.Double(100, 100, 100, 100));
+            gs.setInteriorAnchor(new Rectangle2D.Double(0, 0, 100, 100));
+            XSLFAutoShape as = gs.createAutoShape();
+            as.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
+            as.setShapeType(ShapeType.STAR_24);
+            as.setFillColor(Color.YELLOW);
+            CTShape csh = (CTShape) as.getXmlObject();
+            CTOuterShadowEffect shadow = csh.getSpPr().addNewEffectLst().addNewOuterShdw();
+            shadow.setDir(270000);
+            shadow.setDist(100000);
+            shadow.addNewSrgbClr().setVal(new byte[]{0x00, (byte) 0xFF, 0x00});
+
+            XSLFSlide sl2 = dst.createSlide();
+            sl2.importContent(sl);
+            XSLFGroupShape gs2 = (XSLFGroupShape) sl2.getShapes().get(0);
+            XSLFAutoShape as2 = (XSLFAutoShape) gs2.getShapes().get(0);
+            CTShape csh2 = (CTShape) as2.getXmlObject();
+            assertTrue(csh2.getSpPr().isSetEffectLst());
+        }
     }
 
     @Test
     void test60810() throws IOException {
-        XMLSlideShow ppt = openSampleDocument("60810.pptx");
-        for (XSLFSlide slide : ppt.getSlides()) {
-            XSLFNotes notesSlide = ppt.getNotesSlide(slide);
-            assertNotNull(notesSlide);
+        try (XMLSlideShow ppt = openSampleDocument("60810.pptx")) {
+            for (XSLFSlide slide : ppt.getSlides()) {
+                XSLFNotes notesSlide = ppt.getNotesSlide(slide);
+                assertNotNull(notesSlide);
+            }
         }
-
-        ppt.close();
     }
 
     @Test
@@ -886,7 +854,7 @@ class TestXSLFBugs {
         try (XMLSlideShow ppt = openSampleDocument("61515.pptx")) {
             ppt.removeSlide(0);
             assertEquals(1, ppt.createSlide().getRelations().size());
-            try (XMLSlideShow saved = XSLFTestDataSamples.writeOutAndReadBack(ppt)) {
+            try (XMLSlideShow saved = writeOutAndReadBack(ppt)) {
                 assertEquals(1, saved.getSlides().size());
                 XSLFSlide slide = saved.getSlides().get(0);
                 assertEquals(1, slide.getRelations().size());
@@ -897,7 +865,7 @@ class TestXSLFBugs {
     @Test
     void testAptia() throws IOException {
         try (XMLSlideShow ppt = openSampleDocument("aptia.pptx");
-             XMLSlideShow saved = XSLFTestDataSamples.writeOutAndReadBack(ppt)) {
+             XMLSlideShow saved = writeOutAndReadBack(ppt)) {
             assertEquals(ppt.getSlides().size(), saved.getSlides().size());
         }
     }
@@ -906,7 +874,7 @@ class TestXSLFBugs {
     @Test
     void testDivinoRevelado() throws IOException {
         try (XMLSlideShow ppt = openSampleDocument("Divino_Revelado.pptx");
-             XMLSlideShow saved = XSLFTestDataSamples.writeOutAndReadBack(ppt)) {
+             XMLSlideShow saved = writeOutAndReadBack(ppt)) {
             assertEquals(ppt.getSlides().size(), saved.getSlides().size());
         }
     }

Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/XSLFTestDataSamples.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/XSLFTestDataSamples.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/XSLFTestDataSamples.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/XSLFTestDataSamples.java Fri May 14 00:37:50 2021
@@ -16,54 +16,32 @@
 ==================================================================== */
 package org.apache.poi.xslf;
 
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.xslf.usermodel.XMLSlideShow;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
 public class XSLFTestDataSamples {
 
     public static XMLSlideShow openSampleDocument(String sampleName) {
-        InputStream is = POIDataSamples.getSlideShowInstance().openResourceAsStream(sampleName);
-        try {
+        try (InputStream is = POIDataSamples.getSlideShowInstance().openResourceAsStream(sampleName)) {
             return new XMLSlideShow(OPCPackage.open(is));
         } catch (Exception e) {
             throw new RuntimeException(e);
-        } finally {
-            try {
-                is.close();
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
         }
     }
 
     public static XMLSlideShow writeOutAndReadBack(XMLSlideShow doc) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
-        try {
+        try (UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream(4096)) {
             doc.write(baos);
+            try (InputStream bais = baos.toInputStream()) {
+                return new XMLSlideShow(bais);
+            }
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-
-        InputStream bais;
-        bais = new ByteArrayInputStream(baos.toByteArray());
-        try {
-            return new XMLSlideShow(OPCPackage.open(bais));
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        } finally {
-            try {
-                baos.close();
-                bais.close();
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
     }
 }

Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java Fri May 14 00:37:50 2021
@@ -16,14 +16,14 @@
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
+import static org.apache.poi.xslf.XSLFTestDataSamples.openSampleDocument;
+import static org.apache.poi.xslf.XSLFTestDataSamples.writeOutAndReadBack;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
 import org.apache.poi.openxml4j.opc.OPCPackage;
@@ -69,133 +69,119 @@ class TestXMLSlideShow extends BaseTestS
     @Test
     void testOpen() throws Exception {
         // With the finalised uri, should be fine
-        XMLSlideShow xml = new XMLSlideShow(pack);
-        // Check the core
-        assertNotNull(xml.getCTPresentation());
-
-        // Check it has some slides
-        assertFalse(xml.getSlides().isEmpty());
-        assertFalse(xml.getSlideMasters().isEmpty());
-
-        xml.close();
+        try (XMLSlideShow xml = new XMLSlideShow(pack)) {
+            // Check the core
+            assertNotNull(xml.getCTPresentation());
+
+            // Check it has some slides
+            assertFalse(xml.getSlides().isEmpty());
+            assertFalse(xml.getSlideMasters().isEmpty());
+        }
     }
 
-    @SuppressWarnings("deprecation")
     @Test
     void testSlideBasics() throws IOException {
-        XMLSlideShow xml = new XMLSlideShow(pack);
-
-        // Should have 1 master
-        assertEquals(1, xml.getSlideMasters().size());
+        try (XMLSlideShow xml = new XMLSlideShow(pack)) {
 
-        // Should have two sheets
-        assertEquals(2, xml.getSlides().size());
+            // Should have 1 master
+            assertEquals(1, xml.getSlideMasters().size());
 
-        // Check they're as expected
-        CTSlideIdListEntry[] slides = xml.getCTPresentation().getSldIdLst().getSldIdArray();
+            // Should have two sheets
+            assertEquals(2, xml.getSlides().size());
 
-        assertEquals(256, slides[0].getId());
-        assertEquals(257, slides[1].getId());
-        assertEquals("rId2", slides[0].getId2());
-        assertEquals("rId3", slides[1].getId2());
+            // Check they're as expected
+            CTSlideIdListEntry[] slides = xml.getCTPresentation().getSldIdLst().getSldIdArray();
 
-        // Now get those objects
-        assertNotNull(xml.getSlides().get(0));
-        assertNotNull(xml.getSlides().get(1));
+            assertEquals(256, slides[0].getId());
+            assertEquals(257, slides[1].getId());
+            assertEquals("rId2", slides[0].getId2());
+            assertEquals("rId3", slides[1].getId2());
 
-        // And check they have notes as expected
-        assertNotNull(xml.getSlides().get(0).getNotes());
-        assertNotNull(xml.getSlides().get(1).getNotes());
+            // Now get those objects
+            assertNotNull(xml.getSlides().get(0));
+            assertNotNull(xml.getSlides().get(1));
 
-        // Next up look for the slide master
-        CTSlideMasterIdListEntry[] masters = xml.getCTPresentation().getSldMasterIdLst().getSldMasterIdArray();
+            // And check they have notes as expected
+            assertNotNull(xml.getSlides().get(0).getNotes());
+            assertNotNull(xml.getSlides().get(1).getNotes());
 
-        // see SlideAtom.USES_MASTER_SLIDE_ID
-        assertEquals(0x80000000L, masters[0].getId());
-        assertEquals("rId1", masters[0].getId2());
-        assertNotNull(xml.getSlideMasters().get(0));
+            // Next up look for the slide master
+            CTSlideMasterIdListEntry[] masters = xml.getCTPresentation().getSldMasterIdLst().getSldMasterIdArray();
 
-        // Finally look for the notes master
-        CTNotesMasterIdListEntry notesMaster =
-            xml.getCTPresentation().getNotesMasterIdLst().getNotesMasterId();
-        assertNotNull(notesMaster);
+            // see SlideAtom.USES_MASTER_SLIDE_ID
+            assertEquals(0x80000000L, masters[0].getId());
+            assertEquals("rId1", masters[0].getId2());
+            assertNotNull(xml.getSlideMasters().get(0));
 
-        assertNotNull(xml.getNotesMaster());
+            // Finally look for the notes master
+            CTNotesMasterIdListEntry notesMaster =
+                xml.getCTPresentation().getNotesMasterIdLst().getNotesMasterId();
+            assertNotNull(notesMaster);
 
-        xml.close();
+            assertNotNull(xml.getNotesMaster());
+        }
     }
 
     @Test
     void testMetadataBasics() throws IOException {
-        XMLSlideShow xml = new XMLSlideShow(pack);
-
-        assertNotNull(xml.getProperties().getCoreProperties());
-        assertNotNull(xml.getProperties().getExtendedProperties());
+        try (XMLSlideShow xml = new XMLSlideShow(pack)) {
 
-        assertEquals("Microsoft Office PowerPoint", xml.getProperties().getExtendedProperties().getUnderlyingProperties().getApplication());
-        assertEquals(0, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters());
-        assertEquals(0, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getLines());
+            assertNotNull(xml.getProperties().getCoreProperties());
+            assertNotNull(xml.getProperties().getExtendedProperties());
 
-        assertNull(xml.getProperties().getCoreProperties().getTitle());
-        assertFalse(xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().isPresent());
+            assertEquals("Microsoft Office PowerPoint", xml.getProperties().getExtendedProperties().getUnderlyingProperties().getApplication());
+            assertEquals(0, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters());
+            assertEquals(0, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getLines());
 
-        xml.close();
+            assertNull(xml.getProperties().getCoreProperties().getTitle());
+            assertFalse(xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().isPresent());
+        }
     }
 
     @Test
     void testComments() throws Exception {
         // Default sample file has none
-        XMLSlideShow xml = new XMLSlideShow(pack);
-
-        assertNull(xml.getCommentAuthors());
+        try (XMLSlideShow xml = new XMLSlideShow(pack)) {
+            assertNull(xml.getCommentAuthors());
 
-        for (XSLFSlide slide : xml.getSlides()) {
-            assertTrue(slide.getComments().isEmpty());
+            for (XSLFSlide slide : xml.getSlides()) {
+                assertTrue(slide.getComments().isEmpty());
+            }
         }
 
         // Try another with comments
-        XMLSlideShow xmlComments = new XMLSlideShow(slTests.openResourceAsStream("45545_Comment.pptx"));
+        try (XMLSlideShow xmlComments = openSampleDocument("45545_Comment.pptx")) {
 
-        // Has one author
-        assertNotNull(xmlComments.getCommentAuthors());
-        assertEquals(1, xmlComments.getCommentAuthors().getCTCommentAuthorsList().sizeOfCmAuthorArray());
-        assertEquals("XPVMWARE01", xmlComments.getCommentAuthors().getAuthorById(0).getName());
-
-        // First two slides have comments
-        int i = -1;
-        for (XSLFSlide slide : xmlComments.getSlides()) {
-            i++;
-
-            if (i == 0) {
-                assertNotNull(slide.getCommentsPart());
-                assertEquals(1, slide.getCommentsPart().getNumberOfComments());
-                assertEquals("testdoc", slide.getCommentsPart().getCommentAt(0).getText());
-                assertEquals(0, slide.getCommentsPart().getCommentAt(0).getAuthorId());
-            } else if (i == 1) {
-                assertNotNull(slide.getComments());
-                assertEquals(1, slide.getCommentsPart().getNumberOfComments());
-                assertEquals("test phrase", slide.getCommentsPart().getCommentAt(0).getText());
-                assertEquals(0, slide.getCommentsPart().getCommentAt(0).getAuthorId());
-            } else {
-                assertNull(slide.getCommentsPart());
-                assertTrue(slide.getComments().isEmpty());
+            // Has one author
+            assertNotNull(xmlComments.getCommentAuthors());
+            assertEquals(1, xmlComments.getCommentAuthors().getCTCommentAuthorsList().sizeOfCmAuthorArray());
+            assertEquals("XPVMWARE01", xmlComments.getCommentAuthors().getAuthorById(0).getName());
+
+            // First two slides have comments
+            int i = -1;
+            for (XSLFSlide slide : xmlComments.getSlides()) {
+                i++;
+
+                if (i == 0) {
+                    assertNotNull(slide.getCommentsPart());
+                    assertEquals(1, slide.getCommentsPart().getNumberOfComments());
+                    assertEquals("testdoc", slide.getCommentsPart().getCommentAt(0).getText());
+                    assertEquals(0, slide.getCommentsPart().getCommentAt(0).getAuthorId());
+                } else if (i == 1) {
+                    assertNotNull(slide.getComments());
+                    assertEquals(1, slide.getCommentsPart().getNumberOfComments());
+                    assertEquals("test phrase", slide.getCommentsPart().getCommentAt(0).getText());
+                    assertEquals(0, slide.getCommentsPart().getCommentAt(0).getAuthorId());
+                } else {
+                    assertNull(slide.getCommentsPart());
+                    assertTrue(slide.getComments().isEmpty());
+                }
             }
         }
-
-        xmlComments.close();
-        xml.close();
     }
 
     @Override
     public XMLSlideShow reopen(SlideShow<XSLFShape, XSLFTextParagraph> show) throws IOException {
-        BufAccessBAOS bos = new BufAccessBAOS();
-        show.write(bos);
-        return new XMLSlideShow(new ByteArrayInputStream(bos.getBuf()));
-    }
-
-    private static class BufAccessBAOS extends ByteArrayOutputStream {
-        byte[] getBuf() {
-            return buf;
-        }
+        return writeOutAndReadBack((XMLSlideShow) show);
     }
 }

Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFExamples.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFExamples.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFExamples.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFExamples.java Fri May 14 00:37:50 2021
@@ -21,12 +21,10 @@ import static org.apache.poi.openxml4j.o
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.awt.Rectangle;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.List;
 
 import javax.xml.namespace.QName;
 

Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFPictureShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFPictureShape.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFPictureShape.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFPictureShape.java Fri May 14 00:37:50 2021
@@ -16,6 +16,8 @@
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
+import static org.apache.poi.xslf.XSLFTestDataSamples.openSampleDocument;
+import static org.apache.poi.xslf.XSLFTestDataSamples.writeOutAndReadBack;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -25,8 +27,6 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assumptions.assumeFalse;
 
 import java.awt.geom.Rectangle2D;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -41,7 +41,6 @@ import org.apache.poi.POIDataSamples;
 import org.apache.poi.sl.usermodel.PictureData.PictureType;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.TempFile;
-import org.apache.poi.xslf.XSLFTestDataSamples;
 import org.apache.poi.xslf.util.PPTX2PNG;
 import org.junit.jupiter.api.Test;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTPicture;
@@ -51,245 +50,240 @@ class TestXSLFPictureShape {
 
     @Test
     void testCreate() throws Exception {
-        XMLSlideShow ppt1 = new XMLSlideShow();
-        assertEquals(0, ppt1.getPictureData().size());
-        byte[] data1 = new byte[100];
-        for(int i = 0;i < 100;i++) { data1[i] = (byte)i; }
-        XSLFPictureData pdata1 = ppt1.addPicture(data1, PictureType.JPEG);
-        assertEquals(0, pdata1.getIndex());
-        assertEquals(1, ppt1.getPictureData().size());
-
-        XSLFSlide slide = ppt1.createSlide();
-        XSLFPictureShape shape1 = slide.createPicture(pdata1);
-        assertNotNull(shape1.getPictureData());
-        assertArrayEquals(data1, shape1.getPictureData().getData());
-
-        byte[] data2 = new byte[200];
-        for(int i = 0;i < 200;i++) { data2[i] = (byte)i; }
-        XSLFPictureData pdata2 = ppt1.addPicture(data2, PictureType.PNG);
-        XSLFPictureShape shape2 = slide.createPicture(pdata2);
-        assertNotNull(shape2.getPictureData());
-        assertEquals(1, pdata2.getIndex());
-        assertEquals(2, ppt1.getPictureData().size());
-        assertArrayEquals(data2, shape2.getPictureData().getData());
-
-        XMLSlideShow ppt2 = XSLFTestDataSamples.writeOutAndReadBack(ppt1);
-        ppt1.close();
-        List<XSLFPictureData> pics = ppt2.getPictureData();
-        assertEquals(2, pics.size());
-        assertArrayEquals(data1, pics.get(0).getData());
-        assertArrayEquals(data2, pics.get(1).getData());
-
-        List<XSLFShape> shapes = ppt2.getSlides().get(0).getShapes();
-        assertArrayEquals(data1, ((XSLFPictureShape) shapes.get(0)).getPictureData().getData());
-        assertArrayEquals(data2, ((XSLFPictureShape) shapes.get(1)).getPictureData().getData());
-        ppt2.close();
+        try (XMLSlideShow ppt1 = new XMLSlideShow()) {
+            assertEquals(0, ppt1.getPictureData().size());
+            byte[] data1 = new byte[100];
+            for (int i = 0; i < 100; i++) {
+                data1[i] = (byte) i;
+            }
+            XSLFPictureData pdata1 = ppt1.addPicture(data1, PictureType.JPEG);
+            assertEquals(0, pdata1.getIndex());
+            assertEquals(1, ppt1.getPictureData().size());
+
+            XSLFSlide slide = ppt1.createSlide();
+            XSLFPictureShape shape1 = slide.createPicture(pdata1);
+            assertNotNull(shape1.getPictureData());
+            assertArrayEquals(data1, shape1.getPictureData().getData());
+
+            byte[] data2 = new byte[200];
+            for (int i = 0; i < 200; i++) {
+                data2[i] = (byte) i;
+            }
+            XSLFPictureData pdata2 = ppt1.addPicture(data2, PictureType.PNG);
+            XSLFPictureShape shape2 = slide.createPicture(pdata2);
+            assertNotNull(shape2.getPictureData());
+            assertEquals(1, pdata2.getIndex());
+            assertEquals(2, ppt1.getPictureData().size());
+            assertArrayEquals(data2, shape2.getPictureData().getData());
+
+            try (XMLSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                List<XSLFPictureData> pics = ppt2.getPictureData();
+                assertEquals(2, pics.size());
+                assertArrayEquals(data1, pics.get(0).getData());
+                assertArrayEquals(data2, pics.get(1).getData());
+
+                List<XSLFShape> shapes = ppt2.getSlides().get(0).getShapes();
+                assertArrayEquals(data1, ((XSLFPictureShape) shapes.get(0)).getPictureData().getData());
+                assertArrayEquals(data2, ((XSLFPictureShape) shapes.get(1)).getPictureData().getData());
+            }
+        }
     }
 
     @Test
     void testCreateMultiplePictures() throws Exception {
-        XMLSlideShow ppt1 = new XMLSlideShow();
-        XSLFSlide slide1 = ppt1.createSlide();
-        XSLFGroupShape group1 = slide1.createGroup();
-
-
-        int pictureIndex = 0;
-        // first add 20 images to the slide
-        for (int i = 0; i < 20; i++, pictureIndex++) {
-            byte[] data = new byte[]{(byte)pictureIndex};
-            XSLFPictureData elementData = ppt1.addPicture(data, PictureType.PNG);
-            assertEquals(pictureIndex, elementData.getIndex());   // added images have indexes 0,1,2....19
-            XSLFPictureShape picture = slide1.createPicture(elementData);
-            // POI saves images as image1.png, image2.png, etc.
-            String fileName = "image" + (elementData.getIndex()+1) + ".png";
-            assertEquals(fileName, picture.getPictureData().getFileName());
-            assertArrayEquals(data, picture.getPictureData().getData());
-        }
+        try (XMLSlideShow ppt1 = new XMLSlideShow()) {
+            XSLFSlide slide1 = ppt1.createSlide();
+            XSLFGroupShape group1 = slide1.createGroup();
+
+
+            int pictureIndex = 0;
+            // first add 20 images to the slide
+            for (int i = 0; i < 20; i++, pictureIndex++) {
+                byte[] data = new byte[]{(byte) pictureIndex};
+                XSLFPictureData elementData = ppt1.addPicture(data, PictureType.PNG);
+                assertEquals(pictureIndex, elementData.getIndex());   // added images have indexes 0,1,2....19
+                XSLFPictureShape picture = slide1.createPicture(elementData);
+                // POI saves images as image1.png, image2.png, etc.
+                String fileName = "image" + (elementData.getIndex() + 1) + ".png";
+                assertEquals(fileName, picture.getPictureData().getFileName());
+                assertArrayEquals(data, picture.getPictureData().getData());
+            }
 
-        // and then add next 20 images to a group
-        for (int i = 0; i < 20; i++, pictureIndex++) {
-            byte[] data = new byte[]{(byte)pictureIndex};
-            XSLFPictureData elementData = ppt1.addPicture(data, PictureType.PNG);
-            XSLFPictureShape picture = group1.createPicture(elementData);
-            // POI saves images as image1.png, image2.png, etc.
-            assertEquals(pictureIndex, elementData.getIndex());   // added images have indexes 0,1,2....19
-            String fileName = "image" + (pictureIndex + 1) + ".png";
-            assertEquals(fileName, picture.getPictureData().getFileName());
-            assertArrayEquals(data, picture.getPictureData().getData());
-        }
+            // and then add next 20 images to a group
+            for (int i = 0; i < 20; i++, pictureIndex++) {
+                byte[] data = new byte[]{(byte) pictureIndex};
+                XSLFPictureData elementData = ppt1.addPicture(data, PictureType.PNG);
+                XSLFPictureShape picture = group1.createPicture(elementData);
+                // POI saves images as image1.png, image2.png, etc.
+                assertEquals(pictureIndex, elementData.getIndex());   // added images have indexes 0,1,2....19
+                String fileName = "image" + (pictureIndex + 1) + ".png";
+                assertEquals(fileName, picture.getPictureData().getFileName());
+                assertArrayEquals(data, picture.getPictureData().getData());
+            }
 
-        // serialize, read back and check that all images are there
+            // serialize, read back and check that all images are there
 
-        XMLSlideShow ppt2 = XSLFTestDataSamples.writeOutAndReadBack(ppt1);
-        ppt1.close();
-        // pictures keyed by file name
-        Map<String, XSLFPictureData> pics = new HashMap<>();
-        for(XSLFPictureData p : ppt2.getPictureData()){
-            pics.put(p.getFileName(), p);
-        }
-        assertEquals(40, pics.size());
-        for (int i = 0; i < 40; i++) {
-            byte[] data1 = new byte[]{(byte)i};
-            String fileName = "image" + (i + 1) + ".png";
-            XSLFPictureData data = pics.get(fileName);
-            assertNotNull(data);
-            assertEquals(fileName, data.getFileName());
-            assertArrayEquals(data1, data.getData());
+            try (XMLSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                // pictures keyed by file name
+                Map<String, XSLFPictureData> pics = new HashMap<>();
+                for (XSLFPictureData p : ppt2.getPictureData()) {
+                    pics.put(p.getFileName(), p);
+                }
+                assertEquals(40, pics.size());
+                for (int i = 0; i < 40; i++) {
+                    byte[] data1 = new byte[]{(byte) i};
+                    String fileName = "image" + (i + 1) + ".png";
+                    XSLFPictureData data = pics.get(fileName);
+                    assertNotNull(data);
+                    assertEquals(fileName, data.getFileName());
+                    assertArrayEquals(data1, data.getData());
+                }
+            }
         }
-        ppt2.close();
     }
 
     @Test
     void testImageCaching() throws Exception {
-        XMLSlideShow ppt = new XMLSlideShow();
-        byte[] img1 = new byte[]{1,2,3};
-        byte[] img2 = new byte[]{3,4,5};
-        XSLFPictureData pdata1 = ppt.addPicture(img1, PictureType.PNG);
-        assertEquals(0, pdata1.getIndex());
-        assertEquals(0, ppt.addPicture(img1, PictureType.PNG).getIndex());
-
-        XSLFPictureData idx2 = ppt.addPicture(img2, PictureType.PNG);
-        assertEquals(1, idx2.getIndex());
-        assertEquals(1, ppt.addPicture(img2, PictureType.PNG).getIndex());
-
-        XSLFSlide slide1 = ppt.createSlide();
-        assertNotNull(slide1);
-        XSLFSlide slide2 = ppt.createSlide();
-        assertNotNull(slide2);
-
-        ppt.close();
+        try (XMLSlideShow ppt = new XMLSlideShow()) {
+            byte[] img1 = new byte[]{1, 2, 3};
+            byte[] img2 = new byte[]{3, 4, 5};
+            XSLFPictureData pdata1 = ppt.addPicture(img1, PictureType.PNG);
+            assertEquals(0, pdata1.getIndex());
+            assertEquals(0, ppt.addPicture(img1, PictureType.PNG).getIndex());
+
+            XSLFPictureData idx2 = ppt.addPicture(img2, PictureType.PNG);
+            assertEquals(1, idx2.getIndex());
+            assertEquals(1, ppt.addPicture(img2, PictureType.PNG).getIndex());
+
+            XSLFSlide slide1 = ppt.createSlide();
+            assertNotNull(slide1);
+            XSLFSlide slide2 = ppt.createSlide();
+            assertNotNull(slide2);
+        }
     }
 
     @Test
     void testMerge() throws Exception {
-        XMLSlideShow ppt1 = new XMLSlideShow();
-        byte[] data1 = new byte[100];
-        XSLFPictureData pdata1 = ppt1.addPicture(data1, PictureType.JPEG);
+        try (XMLSlideShow ppt1 = new XMLSlideShow()) {
+            byte[] data1 = new byte[100];
+            XSLFPictureData pdata1 = ppt1.addPicture(data1, PictureType.JPEG);
 
-        XSLFSlide slide1 = ppt1.createSlide();
-        XSLFPictureShape shape1 = slide1.createPicture(pdata1);
-        CTPicture ctPic1 = (CTPicture)shape1.getXmlObject();
-        ctPic1.getNvPicPr().getNvPr().addNewCustDataLst().addNewTags().setId("rId99");
+            XSLFSlide slide1 = ppt1.createSlide();
+            XSLFPictureShape shape1 = slide1.createPicture(pdata1);
+            CTPicture ctPic1 = (CTPicture) shape1.getXmlObject();
+            ctPic1.getNvPicPr().getNvPr().addNewCustDataLst().addNewTags().setId("rId99");
 
-        XSLFPictureShape shape2 = slide1.createPicture(pdata1);
-        CTPicture ctPic2 = (CTPicture)shape2.getXmlObject();
-        ctPic2.getNvPicPr().getNvPr().addNewCustDataLst().addNewTags().setId("rId99");
+            XSLFPictureShape shape2 = slide1.createPicture(pdata1);
+            CTPicture ctPic2 = (CTPicture) shape2.getXmlObject();
+            ctPic2.getNvPicPr().getNvPr().addNewCustDataLst().addNewTags().setId("rId99");
 
-        differentShapeName(shape1, shape2);
+            differentShapeName(shape1, shape2);
 
-        XSLFGroupShape group = slide1.createGroup();
-        XSLFTextBox tb1 = group.createTextBox();
-        XSLFTextBox tb2 = group.createTextBox();
+            XSLFGroupShape group = slide1.createGroup();
+            XSLFTextBox tb1 = group.createTextBox();
+            XSLFTextBox tb2 = group.createTextBox();
 
-        assertNotEquals("We should have different names now, but had: " + tb1.getShapeName() + " for both", tb1.getShapeName(), tb2.getShapeName());
+            differentShapeName(tb1, tb2);
 
-        XMLSlideShow pptCopy = new XMLSlideShow();
+            try (XMLSlideShow pptCopy = new XMLSlideShow()) {
+                XSLFSlide slideCopy = pptCopy.createSlide().importContent(slide1);
+                XSLFPictureShape shapeCopy1 = (XSLFPictureShape) slideCopy.getShapes().get(0);
 
-        XSLFSlide slideCopy = pptCopy.createSlide().importContent(slide1);
-        XSLFPictureShape shapeCopy1 = (XSLFPictureShape)slideCopy.getShapes().get(0);
+                assertArrayEquals(data1, shapeCopy1.getPictureData().getData());
+                assertEquals(shape1.getShapeName(), shapeCopy1.getShapeName());
 
-        assertArrayEquals(data1, shapeCopy1.getPictureData().getData());
-        assertEquals(shape1.getShapeName(), shapeCopy1.getShapeName());
+                CTPicture ctPicCopy1 = (CTPicture) shapeCopy1.getXmlObject();
+                assertFalse(ctPicCopy1.getNvPicPr().getNvPr().isSetCustDataLst());
 
-        CTPicture ctPicCopy1 = (CTPicture)shapeCopy1.getXmlObject();
-        assertFalse(ctPicCopy1.getNvPicPr().getNvPr().isSetCustDataLst());
+                XSLFPictureShape shapeCopy2 = (XSLFPictureShape) slideCopy.getShapes().get(1);
 
-        XSLFPictureShape shapeCopy2 = (XSLFPictureShape)slideCopy.getShapes().get(1);
+                assertArrayEquals(data1, shapeCopy2.getPictureData().getData());
+                assertEquals(shape2.getShapeName(), shapeCopy2.getShapeName());
 
-        assertArrayEquals(data1, shapeCopy2.getPictureData().getData());
-        assertEquals(shape2.getShapeName(), shapeCopy2.getShapeName());
+                CTPicture ctPicCopy2 = (CTPicture) shapeCopy2.getXmlObject();
+                assertFalse(ctPicCopy2.getNvPicPr().getNvPr().isSetCustDataLst());
 
-        CTPicture ctPicCopy2 = (CTPicture)shapeCopy2.getXmlObject();
-        assertFalse(ctPicCopy2.getNvPicPr().getNvPr().isSetCustDataLst());
+                differentShapeName(shapeCopy1, shapeCopy2);
 
-        differentShapeName(shapeCopy1, shapeCopy2);
+                XSLFGroupShape groupCopy = (XSLFGroupShape) slideCopy.getShapes().get(2);
+                XSLFTextBox tbCopy1 = (XSLFTextBox) groupCopy.getShapes().get(0);
+                XSLFTextBox tbCopy2 = (XSLFTextBox) groupCopy.getShapes().get(1);
 
-        XSLFGroupShape groupCopy = (XSLFGroupShape) slideCopy.getShapes().get(2);
-        XSLFTextBox tbCopy1 = (XSLFTextBox) groupCopy.getShapes().get(0);
-        XSLFTextBox tbCopy2 = (XSLFTextBox) groupCopy.getShapes().get(1);
+                assertEquals(group.getShapeName(), groupCopy.getShapeName());
+                assertEquals(tb1.getShapeName(), tbCopy1.getShapeName());
+                assertEquals(tb2.getShapeName(), tbCopy2.getShapeName());
 
-        assertEquals(group.getShapeName(), groupCopy.getShapeName());
-        assertEquals(tb1.getShapeName(), tbCopy1.getShapeName());
-        assertEquals(tb2.getShapeName(), tbCopy2.getShapeName());
-
-        differentShapeName(tb1, tb2);
-
-        ppt1.close();
-        pptCopy.close();
+                differentShapeName(tb1, tb2);
+            }
+        }
     }
 
     private void differentShapeName(XSLFShape shape1, XSLFShape shape2) {
-        assertNotEquals("We should have different names now, but had: " + shape1.getShapeName() + " for both", shape1.getShapeName(), shape2.getShapeName());
+        assertNotEquals(shape1.getShapeName(), shape2.getShapeName(),
+            "We should have different names now, but had: " + shape1.getShapeName() + " for both");
     }
 
     @Test
     void bug58663() throws IOException {
-        InputStream is = _slTests.openResourceAsStream("shapes.pptx");
-        XMLSlideShow ppt = new XMLSlideShow(is);
-        is.close();
-
-        XSLFSlide slide = ppt.getSlides().get(0);
-        XSLFPictureShape ps = (XSLFPictureShape)slide.getShapes().get(3);
-        slide.removeShape(ps);
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        ppt.write(bos);
-        ppt.close();
-
-        XMLSlideShow ppt2 = new XMLSlideShow(new ByteArrayInputStream(bos.toByteArray()));
-        assertTrue(ppt2.getPictureData().isEmpty());
-        ppt2.close();
+        try (XMLSlideShow ppt = openSampleDocument("shapes.pptx")) {
+            XSLFSlide slide = ppt.getSlides().get(0);
+            XSLFPictureShape ps = (XSLFPictureShape) slide.getShapes().get(3);
+            slide.removeShape(ps);
+
+            try (XMLSlideShow ppt2 = writeOutAndReadBack(ppt)) {
+                assertTrue(ppt2.getPictureData().isEmpty());
+            }
+        }
     }
 
     @Test
     void testTiffImageBug59742() throws Exception {
-        XMLSlideShow slideShow = new XMLSlideShow();
-        final InputStream tiffStream = _slTests.openResourceAsStream("testtiff.tif");
-        final byte[] pictureData = IOUtils.toByteArray(tiffStream);
-        IOUtils.closeQuietly(tiffStream);
-
-        XSLFPictureData pic = slideShow.addPicture(pictureData, PictureType.TIFF);
-        assertEquals("image/tiff", pic.getContentType());
-        assertEquals("image1.tiff", pic.getFileName());
-
-        slideShow.close();
+        try (XMLSlideShow slideShow = new XMLSlideShow();
+            InputStream tiffStream = _slTests.openResourceAsStream("testtiff.tif")) {
+            final byte[] pictureData = IOUtils.toByteArray(tiffStream);
+
+            XSLFPictureData pic = slideShow.addPicture(pictureData, PictureType.TIFF);
+            assertEquals("image/tiff", pic.getContentType());
+            assertEquals("image1.tiff", pic.getFileName());
+        }
     }
 
 
     @Test
     void renderSvgImage() throws Exception {
-        XMLSlideShow ppt = new XMLSlideShow();
-        XSLFSlide slide = ppt.createSlide();
+        try (XMLSlideShow ppt = new XMLSlideShow()) {
+            XSLFSlide slide = ppt.createSlide();
 
-        try {
-            XSLFPictureData svgPic = ppt.addPicture(POIDataSamples.getDocumentInstance().getFile("../project-header.svg"), PictureType.SVG);
-            XSLFPictureShape shape = XSLFPictureShape.addSvgImage(slide, svgPic, PictureType.JPEG, null);
-
-            Rectangle2D anchor = shape.getAnchor();
-            anchor.setRect(100, 100, anchor.getWidth(), anchor.getHeight());
-            shape.setAnchor(anchor);
-
-            assertNotNull(shape.getSvgImage());
-
-            final File tmpFile = TempFile.createTempFile("svgtest", ".pptx");
-            System.out.println(tmpFile);
-            try (FileOutputStream fos = new FileOutputStream(tmpFile)) {
-                ppt.write(fos);
-            }
+            try {
+                XSLFPictureData svgPic = ppt.addPicture(POIDataSamples.getDocumentInstance().getFile("../project-header.svg"), PictureType.SVG);
+                XSLFPictureShape shape = XSLFPictureShape.addSvgImage(slide, svgPic, PictureType.JPEG, null);
+
+                Rectangle2D anchor = shape.getAnchor();
+                anchor.setRect(100, 100, anchor.getWidth(), anchor.getHeight());
+                shape.setAnchor(anchor);
+
+                assertNotNull(shape.getSvgImage());
+
+                final File tmpFile = TempFile.createTempFile("svgtest", ".pptx");
+                System.out.println(tmpFile);
+                try (FileOutputStream fos = new FileOutputStream(tmpFile)) {
+                    ppt.write(fos);
+                }
 
-            String[] args = {
+                String[] args = {
                     "-format", "png", // png,gif,jpg or null for test
                     "-slide", "-1", // -1 for all
                     "-outdir", tmpFile.getParentFile().getCanonicalPath(),
                     "-quiet",
                     tmpFile.getAbsolutePath()
-            };
-            PPTX2PNG.main(args);
-        } catch (IIOException ignore) {
-            // Ignore all ImageIO related exceptions like "Can't create output stream!"
-            // which fail often in maven builds because of missing/wrong temp directory
-        } catch (NoClassDefFoundError ignore) {
-            assumeFalse(true, "Batik doesn't work on th module-path");
+                };
+                PPTX2PNG.main(args);
+            } catch (IIOException ignored) {
+                // Ignore all ImageIO related exceptions like "Can't create output stream!"
+                // which fail often in maven builds because of missing/wrong temp directory
+            } catch (NoClassDefFoundError ignored) {
+                assumeFalse(true, "Batik doesn't work on th module-path");
+            }
         }
     }
 }
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org