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 [11/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-scratchpad/src/test/java/org/apache/poi/hslf/record/TestInteractiveInfo.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestInteractiveInfo.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestInteractiveInfo.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestInteractiveInfo.java Fri May 14 00:37:50 2021
@@ -24,8 +24,7 @@ package org.apache.poi.hslf.record;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -57,7 +56,7 @@ public class TestInteractiveInfo {
 	@Test
 	void testWrite() throws Exception {
 		InteractiveInfo ii = new InteractiveInfo(data_a, 0, data_a.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		ii.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}
@@ -75,7 +74,7 @@ public class TestInteractiveInfo {
 		ia.setHyperlinkType((byte)8);
 
 		// Check it's now the same as a
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		ii.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
    }

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestInteractiveInfoAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestInteractiveInfoAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestInteractiveInfoAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestInteractiveInfoAtom.java Fri May 14 00:37:50 2021
@@ -21,8 +21,7 @@ package org.apache.poi.hslf.record;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -74,7 +73,7 @@ public class TestInteractiveInfoAtom {
 	@Test
 	void testWrite() throws Exception {
 		InteractiveInfoAtom ia = new InteractiveInfoAtom(data_a, 0, data_a.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		ia.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}
@@ -91,7 +90,7 @@ public class TestInteractiveInfoAtom {
 		ia.setHyperlinkType((byte)8);
 
 		// Check it's now the same as a
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		ia.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}
@@ -105,7 +104,7 @@ public class TestInteractiveInfoAtom {
 		ia.setHyperlinkID(4);
 
 		// Check bytes are now the same
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		ia.writeOut(baos);
 		assertArrayEquals(data_b, baos.toByteArray());
 	}

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestNotesAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestNotesAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestNotesAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestNotesAtom.java Fri May 14 00:37:50 2021
@@ -22,8 +22,7 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -52,7 +51,7 @@ public final class TestNotesAtom {
 	@Test
 	void testWrite() throws Exception {
 		NotesAtom na = new NotesAtom(data_a, 0, data_a.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		na.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestSlideAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestSlideAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestSlideAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestSlideAtom.java Fri May 14 00:37:50 2021
@@ -22,9 +22,9 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.hslf.HSLFTestDataSamples;
 import org.apache.poi.hslf.record.SlideAtomLayout.SlideLayoutType;
 import org.apache.poi.hslf.usermodel.HSLFSlide;
@@ -43,7 +43,7 @@ public final class TestSlideAtom {
 	@Test
 	void testRecordType() {
 		SlideAtom sa = new SlideAtom(data_a, 0, data_a.length);
-		assertEquals(1007l, sa.getRecordType());
+		assertEquals(1007L, sa.getRecordType());
 	}
 
     @Test
@@ -75,23 +75,23 @@ public final class TestSlideAtom {
     @Test
 	void testWrite() throws IOException {
 		SlideAtom sa = new SlideAtom(data_a, 0, data_a.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		sa.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}
 
     @Test
 	void testSSSlideInfoAtom() throws IOException {
-		HSLFSlideShow ss1 = new HSLFSlideShow();
-		HSLFSlide slide1 = ss1.createSlide(), slide2 = ss1.createSlide();
-		slide2.setHidden(true);
-
-		HSLFSlideShow ss2 = HSLFTestDataSamples.writeOutAndReadBack(ss1);
-		slide1 = ss2.getSlides().get(0);
-		slide2 = ss2.getSlides().get(1);
-		assertFalse(slide1.isHidden());
-		assertTrue(slide2.isHidden());
-		ss2.close();
-		ss1.close();
+		try (HSLFSlideShow ppt1 = new HSLFSlideShow()) {
+			HSLFSlide slide1 = ppt1.createSlide(), slide2 = ppt1.createSlide();
+			slide2.setHidden(true);
+
+			try (HSLFSlideShow ppt2 = HSLFTestDataSamples.writeOutAndReadBack(ppt1)) {
+				slide1 = ppt2.getSlides().get(0);
+				slide2 = ppt2.getSlides().get(1);
+				assertFalse(slide1.isHidden());
+				assertTrue(slide2.isHidden());
+			}
+		}
 	}
 }

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestSlidePersistAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestSlidePersistAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestSlidePersistAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestSlidePersistAtom.java Fri May 14 00:37:50 2021
@@ -22,8 +22,7 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -53,7 +52,7 @@ public final class TestSlidePersistAtom
 	@Test
 	void testWrite() throws Exception {
 		SlidePersistAtom spa = new SlidePersistAtom(data_a, 0, data_a.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		spa.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestStyleTextPropAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestStyleTextPropAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestStyleTextPropAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestStyleTextPropAtom.java Fri May 14 00:37:50 2021
@@ -26,15 +26,14 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.hslf.exceptions.HSLFException;
 import org.apache.poi.hslf.model.textproperties.CharFlagsTextProp;
 import org.apache.poi.hslf.model.textproperties.TextProp;
 import org.apache.poi.hslf.model.textproperties.TextPropCollection;
-import org.apache.poi.util.HexDump;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -467,14 +466,9 @@ public final class TestStyleTextPropAtom
         tpc.setValue(0xFE0033FF);
 
         // Should now be the same as data_a
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
         stpa.writeOut(baos);
-        byte[] b = baos.toByteArray();
-
-        assertEquals(data_a.length, b.length);
-        for(int i=0; i<data_a.length; i++) {
-            assertEquals(data_a[i],b[i]);
-        }
+        assertArrayEquals(data_a, baos.toByteArray());
     }
 
     /**
@@ -621,34 +615,20 @@ public final class TestStyleTextPropAtom
                     assertEquals(tpa.getValue(), tpb.getValue());
                 }
 
-                ByteArrayOutputStream ba = new ByteArrayOutputStream();
-                ByteArrayOutputStream bb = new ByteArrayOutputStream();
+                UnsynchronizedByteArrayOutputStream ba = new UnsynchronizedByteArrayOutputStream();
+                UnsynchronizedByteArrayOutputStream bb = new UnsynchronizedByteArrayOutputStream();
 
                 ca.writeOut(ba);
                 cb.writeOut(bb);
-                byte[] cab = ba.toByteArray();
-                byte[] cbb = bb.toByteArray();
 
-                assertEquals(cbb.length, cab.length);
-                for(int j=0; j<cab.length; j++) {
-                    //System.out.println("On tp " + z + " " + i + " " + j + "\t" + cab[j] + "\t" + cbb[j]);
-                    assertEquals(cbb[j], cab[j]);
-                }
+                assertArrayEquals(bb.toByteArray(), ba.toByteArray());
             }
         }
 
-
-
         // Check byte level with b
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
         stpa.writeOut(baos);
-        byte[] b = baos.toByteArray();
-
-        assertEquals(data_b.length, b.length);
-        for(int i=0; i<data_b.length; i++) {
-            //System.out.println(i + "\t" + b[i] + "\t" + data_b[i] + "\t" + Integer.toHexString(b[i]) );
-            assertEquals(data_b[i],b[i]);
-        }
+        assertArrayEquals(data_b, baos.toByteArray());
     }
 
     @Test
@@ -694,13 +674,9 @@ public final class TestStyleTextPropAtom
         StyleTextPropAtom stpb = new StyleTextPropAtom(data, 0,data.length);
         if(textlen != -1) stpb.setParentTextSize(textlen);
 
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream();
         stpb.writeOut(out);
-        byte[] bytes = out.toByteArray();
-
-        assertEquals(expected.length, bytes.length);
-        assertArrayEquals(expected, bytes,
-            "Had: " + HexDump.toHex(expected) + "\nand: " + HexDump.toHex(bytes));
+        assertArrayEquals(expected, out.toByteArray());
     }
 
     @Test
@@ -759,12 +735,14 @@ public final class TestStyleTextPropAtom
      *
      * From the test file attached to the bug:
      *
+     * {@code
      * <StyleTextPropAtom info="0" type="4001" size="94" offset="114782" header="00 00 A1 0F 5E 00 00 00 ">
      *   14 00 00 00 00 00 41 00 0A 00 06 00 50 00 07 00 01 00 00 00 00 00 00 00 02
      *   00 00 00 01 04 00 00 01 04 01 00 00 00 01 08 00 00 01 08 0C 00 00 00 01 0C
      *   00 00 01 0C 01 00 00 00 01 10 00 00 01 10 01 00 00 00 01 14 00 00 01 14 01
      *   00 00 00 01 18 00 00 01 18 01 00 00 00 01 1C 00 00 01 1C
      * </StyleTextPropAtom>
+     * }
      */
      @Test
     void test45815() throws IOException {

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextBytesAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextBytesAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextBytesAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextBytesAtom.java Fri May 14 00:37:50 2021
@@ -21,9 +21,9 @@ package org.apache.poi.hslf.record;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.io.ByteArrayOutputStream;
 import java.nio.charset.StandardCharsets;
 
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -64,7 +64,7 @@ public final class TestTextBytesAtom {
 		TextBytesAtom tba = new TextBytesAtom(data,0,data.length);
 		tba.setText(alt_text.getBytes(StandardCharsets.ISO_8859_1));
 
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		tba.writeOut(baos);
 		assertArrayEquals(alt_data, baos.toByteArray());
 	}
@@ -72,7 +72,7 @@ public final class TestTextBytesAtom {
 	@Test
 	void testWrite() throws Exception {
 		TextBytesAtom tba = new TextBytesAtom(data,0,data.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		tba.writeOut(baos);
 		assertArrayEquals(data, baos.toByteArray());
 	}

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextCharsAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextCharsAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextCharsAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextCharsAtom.java Fri May 14 00:37:50 2021
@@ -21,8 +21,7 @@ package org.apache.poi.hslf.record;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -60,7 +59,7 @@ public final class TestTextCharsAtom {
 		TextCharsAtom tca = new TextCharsAtom(data,0,data.length);
 		tca.setText(alt_text);
 
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		tca.writeOut(baos);
 		assertArrayEquals(alt_data, baos.toByteArray());
 	}
@@ -68,7 +67,7 @@ public final class TestTextCharsAtom {
 	@Test
 	void testWrite() throws Exception {
 		TextCharsAtom tca = new TextCharsAtom(data,0,data.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		tca.writeOut(baos);
 		assertArrayEquals(data, baos.toByteArray());
 	}
@@ -82,7 +81,7 @@ public final class TestTextCharsAtom {
 		assertEquals(data_text, tca.getText());
 
 		// Check it's now like data
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		tca.writeOut(baos);
 		assertArrayEquals(data, baos.toByteArray());
 	}

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextHeaderAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextHeaderAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextHeaderAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextHeaderAtom.java Fri May 14 00:37:50 2021
@@ -21,8 +21,7 @@ package org.apache.poi.hslf.record;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.sl.usermodel.TextShape.TextPlaceholder;
 import org.junit.jupiter.api.Test;
 
@@ -54,7 +53,7 @@ public final class TestTextHeaderAtom {
 	@Test
 	void testWrite() throws Exception {
 		TextHeaderAtom tha = new TextHeaderAtom(notes_data,0,12);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		tha.writeOut(baos);
 		assertArrayEquals(notes_data, baos.toByteArray());
 	}

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextRulerAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextRulerAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextRulerAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextRulerAtom.java Fri May 14 00:37:50 2021
@@ -21,9 +21,9 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import java.io.ByteArrayOutputStream;
 import java.util.List;
 
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.hslf.model.textproperties.HSLFTabStop;
 import org.junit.jupiter.api.Test;
 
@@ -61,7 +61,7 @@ public final class TestTextRulerAtom {
     @Test
 	void testWriteRuler() throws Exception {
 		TextRulerAtom ruler = new TextRulerAtom(data_1, 0, data_1.length);
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream();
 		ruler.writeOut(out);
 
 		byte[] result = out.toByteArray();
@@ -72,7 +72,7 @@ public final class TestTextRulerAtom {
 	void testRead2() throws Exception {
 		TextRulerAtom ruler = TextRulerAtom.getParagraphInstance();
 		ruler.setParagraphIndent((short)249, (short)321);
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream();
 		ruler.writeOut(out);
 
 		byte[] result = out.toByteArray();

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextSpecInfoAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextSpecInfoAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextSpecInfoAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTextSpecInfoAtom.java Fri May 14 00:37:50 2021
@@ -20,8 +20,7 @@ package org.apache.poi.hslf.record;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -54,7 +53,7 @@ public final class TestTextSpecInfoAtom
     @Test
     void testWrite() throws Exception {
         TextSpecInfoAtom spec = new TextSpecInfoAtom(data_1, 0, data_1.length);
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream();
         spec.writeOut(out);
         assertArrayEquals(data_1, out.toByteArray());
 	}
@@ -70,7 +69,7 @@ public final class TestTextSpecInfoAtom
         assertEquals(32, run[0].getLength());
 
         //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream();
         spec.writeOut(out);
 
         byte[] result = out.toByteArray();

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTxInteractiveInfoAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTxInteractiveInfoAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTxInteractiveInfoAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestTxInteractiveInfoAtom.java Fri May 14 00:37:50 2021
@@ -21,8 +21,7 @@ package org.apache.poi.hslf.record;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -58,7 +57,7 @@ public final class TestTxInteractiveInfo
 	@Test
 	void testWrite() throws Exception {
 		TxInteractiveInfoAtom atom = new TxInteractiveInfoAtom(data_a, 0, data_a.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		atom.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}
@@ -73,7 +72,7 @@ public final class TestTxInteractiveInfo
 		ia.setEndIndex(56);
 
 		// Check it's now the same as a
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		ia.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}
@@ -88,7 +87,7 @@ public final class TestTxInteractiveInfo
 		ia.setEndIndex(78);
 
 		// Check bytes are now the same
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		ia.writeOut(baos);
 		assertArrayEquals(data_b, baos.toByteArray());
 	}

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestUserEditAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestUserEditAtom.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestUserEditAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/record/TestUserEditAtom.java Fri May 14 00:37:50 2021
@@ -21,8 +21,7 @@ package org.apache.poi.hslf.record;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.io.ByteArrayOutputStream;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -57,7 +56,7 @@ public final class TestUserEditAtom {
 	@Test
 	void testWrite() throws Exception {
 		UserEditAtom uea = new UserEditAtom(data_a, 0, data_a.length);
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		uea.writeOut(baos);
 		assertArrayEquals(data_a, baos.toByteArray());
 	}

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestHSLFSlideShow.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestHSLFSlideShow.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestHSLFSlideShow.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestHSLFSlideShow.java Fri May 14 00:37:50 2021
@@ -18,10 +18,10 @@ package org.apache.poi.hslf.usermodel;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.sl.usermodel.BaseTestSlideShow;
 import org.apache.poi.sl.usermodel.SlideShow;
 import org.junit.jupiter.api.Test;
@@ -38,15 +38,13 @@ public class TestHSLFSlideShow extends B
         assertNotNull(createSlideShow());
     }
 
+    @Override
     public HSLFSlideShow reopen(SlideShow<HSLFShape, HSLFTextParagraph> show) throws IOException {
-        BufAccessBAOS bos = new BufAccessBAOS();
-        show.write(bos);
-        return new HSLFSlideShow(new ByteArrayInputStream(bos.getBuf()));
-    }
-
-    private static class BufAccessBAOS extends ByteArrayOutputStream {
-        byte[] getBuf() {
-            return buf;
+        try (UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream()) {
+            show.write(bos);
+            try (InputStream is = bos.toInputStream()) {
+                return new HSLFSlideShow(is);
+            }
         }
     }
 }

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestPictures.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestPictures.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestPictures.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestPictures.java Fri May 14 00:37:50 2021
@@ -17,13 +17,18 @@
 
 package org.apache.poi.hslf.usermodel;
 
+import static org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM;
+import static org.apache.poi.hslf.HSLFTestDataSamples.getSlideShow;
+import static org.apache.poi.hslf.HSLFTestDataSamples.writeOutAndReadBack;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.awt.Dimension;
+import java.awt.geom.Dimension2D;
+import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.URL;
 import java.util.Arrays;
@@ -31,12 +36,13 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Random;
 
+import javax.imageio.ImageIO;
+
+import org.apache.commons.io.output.CountingOutputStream;
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.ddf.EscherBSERecord;
 import org.apache.poi.ddf.EscherContainerRecord;
 import org.apache.poi.ddf.EscherRecord;
-import org.apache.poi.hslf.HSLFTestDataSamples;
-import org.apache.poi.hslf.blip.DIB;
 import org.apache.poi.hslf.blip.EMF;
 import org.apache.poi.hslf.blip.JPEG;
 import org.apache.poi.hslf.blip.PICT;
@@ -50,6 +56,8 @@ import org.apache.poi.sl.usermodel.Pictu
 import org.apache.poi.util.Units;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test adding/reading pictures
@@ -58,302 +66,101 @@ public final class TestPictures {
     private static final POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
 
     /**
-     * Test read/write Macintosh PICT
-     */
-    @Test
-    void testPICT() throws IOException {
-        HSLFSlideShow ppt = new HSLFSlideShow();
-
-        HSLFSlide slide = ppt.createSlide();
-        byte[] src_bytes = slTests.readFile("cow.pict");
-        HSLFPictureData data = ppt.addPicture(src_bytes, PictureType.PICT);
-        ImageHeaderPICT nHeader = new ImageHeaderPICT(src_bytes, 512);
-        final int expWidth = 197, expHeight = 137;
-        Dimension nDim = nHeader.getSize();
-        assertEquals(expWidth, nDim.getWidth(), 0);
-        assertEquals(expHeight, nDim.getHeight(), 0);
-
-        Dimension dim = data.getImageDimensionInPixels();
-        assertEquals(Units.pointsToPixel(expWidth), dim.getWidth(), 0);
-        assertEquals(Units.pointsToPixel(expHeight), dim.getHeight(), 0);
-
-        HSLFPictureShape pict = new HSLFPictureShape(data);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new HSLFSlideShow(new HSLFSlideShowImpl(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        List<HSLFShape> sh = ppt.getSlides().get(0).getShapes();
-        assertEquals(1, sh.size());
-        pict = (HSLFPictureShape)sh.get(0);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-
-        //check picture data
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        assertEquals(1, pictures.size());
-
-        HSLFPictureData pd = pictures.get(0);
-        dim = pd.getImageDimension();
-        assertEquals(expWidth, dim.width);
-        assertEquals(expHeight, dim.height);
-
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pd);
-
-        assertEquals(1, pictures.size());
-        assertEquals(PictureType.PICT, pd.getType());
-        assertTrue(pd instanceof PICT);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] ppt_bytes = pd.getData();
-        assertEquals(src_bytes.length, ppt_bytes.length);
-        //in PICT the first 512 bytes are MAC specific and may not be preserved, ignore them
-        byte[] b1 = Arrays.copyOfRange(src_bytes, 512, src_bytes.length);
-        byte[] b2 = Arrays.copyOfRange(ppt_bytes, 512, ppt_bytes.length);
-        assertArrayEquals(b1, b2);
-    }
-
-    /**
-     * Test read/write WMF
-     */
-    @Test
-    void testWMF() throws IOException {
-        HSLFSlideShow ppt = new HSLFSlideShow();
-
-        HSLFSlide slide = ppt.createSlide();
-        byte[] src_bytes = slTests.readFile("santa.wmf");
-        HSLFPictureData data = ppt.addPicture(src_bytes, PictureType.WMF);
-        ImageHeaderWMF nHeader = new ImageHeaderWMF(src_bytes, 0);
-        final int expWidth = 136, expHeight = 146;
-        Dimension nDim = nHeader.getSize();
-        assertEquals(expWidth, nDim.getWidth(), 0);
-        assertEquals(expHeight, nDim.getHeight(), 0);
-
-        Dimension dim = data.getImageDimensionInPixels();
-        assertEquals(Units.pointsToPixel(expWidth), dim.getWidth(), 0);
-        assertEquals(Units.pointsToPixel(expHeight), dim.getHeight(), 0);
-
-        HSLFPictureShape pict = new HSLFPictureShape(data);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new HSLFSlideShow(new HSLFSlideShowImpl(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        List<HSLFShape> sh = ppt.getSlides().get(0).getShapes();
-        assertEquals(1, sh.size());
-        pict = (HSLFPictureShape)sh.get(0);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-
-        //check picture data
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        assertEquals(1, pictures.size());
-
-        HSLFPictureData pd = pictures.get(0);
-        dim = pd.getImageDimension();
-        assertEquals(expWidth, dim.width);
-        assertEquals(expHeight, dim.height);
-
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pd);
-
-        assertEquals(PictureType.WMF, pd.getType());
-        assertTrue(pd instanceof WMF);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] ppt_bytes = pd.getData();
-        assertEquals(src_bytes.length, ppt_bytes.length);
-        //in WMF the first 22 bytes - is a metafile header
-        byte[] b1 = Arrays.copyOfRange(src_bytes, 22, src_bytes.length);
-        byte[] b2 = Arrays.copyOfRange(ppt_bytes, 22, ppt_bytes.length);
-        assertArrayEquals(b1, b2);
-    }
-
-    /**
-     * Test read/write EMF
-     */
-    @Test
-    void testEMF() throws IOException {
-        HSLFSlideShow ppt = new HSLFSlideShow();
-
-        HSLFSlide slide = ppt.createSlide();
-        byte[] src_bytes = slTests.readFile("wrench.emf");
-        HSLFPictureData data = ppt.addPicture(src_bytes, PictureType.EMF);
-        ImageHeaderEMF nHeader = new ImageHeaderEMF(src_bytes, 0);
-        final int expWidth = 190, expHeight = 115;
-        Dimension nDim = nHeader.getSize();
-        assertEquals(expWidth, nDim.getWidth(), 0);
-        assertEquals(expHeight, nDim.getHeight(), 0);
-
-        Dimension dim = data.getImageDimensionInPixels();
-        assertEquals(Units.pointsToPixel(expWidth), dim.getWidth(), 0);
-        assertEquals(Units.pointsToPixel(expHeight), dim.getHeight(), 0);
-
-        HSLFPictureShape pict = new HSLFPictureShape(data);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new HSLFSlideShow(new HSLFSlideShowImpl(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can get this picture shape and it refers to the correct picture data
-        List<HSLFShape> sh = ppt.getSlides().get(0).getShapes();
-        assertEquals(1, sh.size());
-        pict = (HSLFPictureShape)sh.get(0);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-
-        //check picture data
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        assertEquals(1, pictures.size());
-
-        HSLFPictureData pd = pictures.get(0);
-        dim = pd.getImageDimension();
-        assertEquals(expWidth, dim.width);
-        assertEquals(expHeight, dim.height);
-
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pd);
-
-        assertEquals(1, pictures.size());
-        assertEquals(PictureType.EMF, pd.getType());
-        assertTrue(pd instanceof EMF);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] ppt_bytes = pd.getData();
-        assertArrayEquals(src_bytes, ppt_bytes);
-    }
-
-    /**
-     * Test read/write PNG
+     * Test add/read/write images
      */
-    @Test
-    void testPNG() throws IOException {
-        HSLFSlideShow ppt = new HSLFSlideShow();
-
-        HSLFSlide slide = ppt.createSlide();
-        byte[] src_bytes = slTests.readFile("tomcat.png");
-        HSLFPictureData data = ppt.addPicture(src_bytes, PictureType.PNG);
-        HSLFPictureShape pict = new HSLFPictureShape(data);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new HSLFSlideShow(new HSLFSlideShowImpl(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        List<HSLFShape> sh = ppt.getSlides().get(0).getShapes();
-        assertEquals(1, sh.size());
-        pict = (HSLFPictureShape)sh.get(0);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-
-        //check picture data
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures.get(0));
-
-        assertEquals(1, pictures.size());
-        assertEquals(PictureType.PNG, pictures.get(0).getType());
-        assertTrue(pictures.get(0) instanceof PNG);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] ppt_bytes = pictures.get(0).getData();
-        assertArrayEquals(src_bytes, ppt_bytes);
-    }
-
-    /**
-     * Test read/write JPEG
-     */
-    @Test
-    void testJPEG() throws IOException {
-        HSLFSlideShow ppt = new HSLFSlideShow();
-
-        HSLFSlide slide = ppt.createSlide();
-        byte[] src_bytes = slTests.readFile("clock.jpg");
-        HSLFPictureData data = ppt.addPicture(src_bytes, PictureType.JPEG);
-
-        HSLFPictureShape pict = new HSLFPictureShape(data);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new HSLFSlideShow(new HSLFSlideShowImpl(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        List<HSLFShape> sh = ppt.getSlides().get(0).getShapes();
-        assertEquals(1, sh.size());
-        pict = (HSLFPictureShape)sh.get(0);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-
-        //check picture data
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures.get(0));
-
-        assertEquals(1, pictures.size());
-        assertEquals(PictureType.JPEG, pictures.get(0).getType());
-        assertTrue(pictures.get(0) instanceof JPEG);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] ppt_bytes = pictures.get(0).getData();
-        assertArrayEquals(src_bytes, ppt_bytes);
-    }
-
-    /**
-     * Test read/write DIB
-     */
-    @Test
-    void testDIB() throws IOException {
-        HSLFSlideShow ppt = new HSLFSlideShow();
+    @ParameterizedTest()
+    @CsvSource(value = {
+        // in PICT the first 512 bytes are MAC specific and may not be preserved, ignore them
+        "PICT, cow.pict, 197, 137, 512, org.apache.poi.hslf.blip.PICT",
+        // in WMF the first 22 bytes - is a metafile header
+        "WMF, santa.wmf, 136, 146, 22, org.apache.poi.hslf.blip.WMF",
+        "EMF, wrench.emf, 190, 115, 0, org.apache.poi.hslf.blip.EMF",
+        "PNG, tomcat.png, 129, 92, 0, org.apache.poi.hslf.blip.PNG",
+        "JPEG, clock.jpg, 192, 176, 0, org.apache.poi.hslf.blip.JPEG",
+        "DIB, clock.dib, 192, 176, 0, org.apache.poi.hslf.blip.DIB"
+    })
+    void testAddPictures(PictureType pictureType, String imgFile, int expWidth, int expHeight, int headerOffset, Class<?> imgClazz) throws IOException {
+        byte[] src_bytes = slTests.readFile(imgFile);
+
+        int dataIndex;
+        try (HSLFSlideShow ppt1 = new HSLFSlideShow()) {
+
+            HSLFSlide slide1 = ppt1.createSlide();
+            HSLFPictureData data1 = ppt1.addPicture(src_bytes, pictureType);
+            dataIndex = data1.getIndex();
+
+            // TODO: Fix the differences in the frame sizes
+            Dimension2D dimN, dimFrame1, dimFrame2;
+            switch (pictureType) {
+                case PICT:
+                    dimN = new ImageHeaderPICT(src_bytes, headerOffset).getSize();
+                    dimFrame1 = Units.pointsToPixel(dimN);
+                    dimFrame2 = dimN;
+                    break;
+                case WMF:
+                    dimN = new ImageHeaderWMF(src_bytes, 0).getSize();
+                    dimFrame1 = Units.pointsToPixel(dimN);
+                    dimFrame2 = dimN;
+                    break;
+                case EMF:
+                    dimN = new ImageHeaderEMF(src_bytes, 0).getSize();
+                    dimFrame1 = Units.pointsToPixel(dimN);
+                    dimFrame2 = dimN;
+                    break;
+                case JPEG:
+                case DIB:
+                case PNG: {
+                    BufferedImage png = ImageIO.read(new ByteArrayInputStream(src_bytes));
+                    dimN = new Dimension(png.getWidth(), png.getHeight());
+                    dimFrame1 = dimN;
+                    dimFrame2 = Units.pixelToPoints(dimN);
+                    break;
+                }
+                default:
+                    fail();
+                    return;
+            }
+            assertEquals(expWidth, dimN.getWidth(), 1);
+            assertEquals(expHeight, dimN.getHeight(), 1);
 
-        HSLFSlide slide = ppt.createSlide();
-        byte[] src_bytes = slTests.readFile("clock.dib");
-        HSLFPictureData data = ppt.addPicture(src_bytes, PictureType.DIB);
-        HSLFPictureShape pict = new HSLFPictureShape(data);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new HSLFSlideShow(new HSLFSlideShowImpl(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        List<HSLFShape> sh = ppt.getSlides().get(0).getShapes();
-        assertEquals(1, sh.size());
-        pict = (HSLFPictureShape)sh.get(0);
-        assertEquals(data.getIndex(), pict.getPictureIndex());
-
-        //check picture data
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures.get(0));
-
-        assertEquals(1, pictures.size());
-        assertEquals(PictureType.DIB, pictures.get(0).getType());
-        assertTrue(pictures.get(0) instanceof DIB);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] ppt_bytes = pictures.get(0).getData();
-        assertArrayEquals(src_bytes, ppt_bytes);
+            Dimension dim1 = data1.getImageDimensionInPixels();
+            assertEquals(dimFrame1.getWidth(), dim1.getWidth(), 1);
+            assertEquals(dimFrame1.getHeight(), dim1.getHeight(), 1);
+
+            HSLFPictureShape pict1 = new HSLFPictureShape(data1);
+            assertEquals(data1.getIndex(), pict1.getPictureIndex());
+            slide1.addShape(pict1);
+
+            try (HSLFSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                //make sure we can read this picture shape and it refers to the correct picture data
+                List<HSLFShape> sh2 = ppt2.getSlides().get(0).getShapes();
+                assertEquals(1, sh2.size());
+                HSLFPictureShape pict2 = (HSLFPictureShape) sh2.get(0);
+                assertEquals(dataIndex, pict2.getPictureIndex());
+
+                //check picture data
+                List<HSLFPictureData> pictures2 = ppt2.getPictureData();
+                assertEquals(1, pictures2.size());
+
+                HSLFPictureData pd2 = pictures2.get(0);
+                Dimension dim2 = pd2.getImageDimension();
+                assertEquals(dimFrame2.getWidth(), dim2.width, 1);
+                assertEquals(dimFrame2.getHeight(), dim2.height, 1);
+
+                //the Picture shape refers to the PictureData object in the Presentation
+                assertEquals(pict2.getPictureData(), pd2);
+
+                assertEquals(1, pictures2.size());
+                assertEquals(pictureType, pd2.getType());
+                assertTrue(imgClazz.isInstance(pd2));
+                //compare the content of the initial file with what is stored in the PictureData
+                byte[] ppt_bytes = pd2.getData();
+                assertEquals(src_bytes.length, ppt_bytes.length);
+                byte[] b1 = Arrays.copyOfRange(src_bytes, headerOffset, src_bytes.length);
+                byte[] b2 = Arrays.copyOfRange(ppt_bytes, headerOffset, ppt_bytes.length);
+                assertArrayEquals(b1, b2);
+            }
+        }
     }
 
     /**
@@ -366,60 +173,59 @@ public final class TestPictures {
         HSLFPictureShape pict;
         HSLFPictureData pdata;
 
-        HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("pictures.ppt");
-        List<HSLFSlide> slides = ppt.getSlides();
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        assertEquals(5, pictures.size());
-
-        pict = (HSLFPictureShape)slides.get(0).getShapes().get(0); //the first slide contains JPEG
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof JPEG);
-        assertEquals(PictureType.JPEG, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = slTests.readFile("clock.jpg");
-        assertArrayEquals(src_bytes, ppt_bytes);
-
-        pict = (HSLFPictureShape)slides.get(1).getShapes().get(0); //the second slide contains PNG
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof PNG);
-        assertEquals(PictureType.PNG, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = slTests.readFile("tomcat.png");
-        assertArrayEquals(src_bytes, ppt_bytes);
-
-        pict = (HSLFPictureShape)slides.get(2).getShapes().get(0); //the third slide contains WMF
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof WMF);
-        assertEquals(PictureType.WMF, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = slTests.readFile("santa.wmf");
-        assertEquals(src_bytes.length, ppt_bytes.length);
-        //ignore the first 22 bytes - it is a WMF metafile header
-        b1 = Arrays.copyOfRange(src_bytes, 22, src_bytes.length);
-        b2 = Arrays.copyOfRange(ppt_bytes, 22, ppt_bytes.length);
-        assertArrayEquals(b1, b2);
-
-        pict = (HSLFPictureShape)slides.get(3).getShapes().get(0); //the forth slide contains PICT
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof PICT);
-        assertEquals(PictureType.PICT, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = slTests.readFile("cow.pict");
-        assertEquals(src_bytes.length, ppt_bytes.length);
-        //ignore the first 512 bytes - it is a MAC specific crap
-        b1 = Arrays.copyOfRange(src_bytes, 512, src_bytes.length);
-        b2 = Arrays.copyOfRange(ppt_bytes, 512, ppt_bytes.length);
-        assertArrayEquals(b1, b2);
-
-        pict = (HSLFPictureShape)slides.get(4).getShapes().get(0); //the fifth slide contains EMF
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof EMF);
-        assertEquals(PictureType.EMF, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = slTests.readFile("wrench.emf");
-        assertArrayEquals(src_bytes, ppt_bytes);
-
-        ppt.close();
+        try (HSLFSlideShow ppt = getSlideShow("pictures.ppt")) {
+            List<HSLFSlide> slides = ppt.getSlides();
+            List<HSLFPictureData> pictures = ppt.getPictureData();
+            assertEquals(5, pictures.size());
+
+            pict = (HSLFPictureShape) slides.get(0).getShapes().get(0); //the first slide contains JPEG
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof JPEG);
+            assertEquals(PictureType.JPEG, pdata.getType());
+            src_bytes = pdata.getData();
+            ppt_bytes = slTests.readFile("clock.jpg");
+            assertArrayEquals(src_bytes, ppt_bytes);
+
+            pict = (HSLFPictureShape) slides.get(1).getShapes().get(0); //the second slide contains PNG
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof PNG);
+            assertEquals(PictureType.PNG, pdata.getType());
+            src_bytes = pdata.getData();
+            ppt_bytes = slTests.readFile("tomcat.png");
+            assertArrayEquals(src_bytes, ppt_bytes);
+
+            pict = (HSLFPictureShape) slides.get(2).getShapes().get(0); //the third slide contains WMF
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof WMF);
+            assertEquals(PictureType.WMF, pdata.getType());
+            src_bytes = pdata.getData();
+            ppt_bytes = slTests.readFile("santa.wmf");
+            assertEquals(src_bytes.length, ppt_bytes.length);
+            //ignore the first 22 bytes - it is a WMF metafile header
+            b1 = Arrays.copyOfRange(src_bytes, 22, src_bytes.length);
+            b2 = Arrays.copyOfRange(ppt_bytes, 22, ppt_bytes.length);
+            assertArrayEquals(b1, b2);
+
+            pict = (HSLFPictureShape) slides.get(3).getShapes().get(0); //the forth slide contains PICT
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof PICT);
+            assertEquals(PictureType.PICT, pdata.getType());
+            src_bytes = pdata.getData();
+            ppt_bytes = slTests.readFile("cow.pict");
+            assertEquals(src_bytes.length, ppt_bytes.length);
+            //ignore the first 512 bytes - it is a MAC specific crap
+            b1 = Arrays.copyOfRange(src_bytes, 512, src_bytes.length);
+            b2 = Arrays.copyOfRange(ppt_bytes, 512, ppt_bytes.length);
+            assertArrayEquals(b1, b2);
+
+            pict = (HSLFPictureShape) slides.get(4).getShapes().get(0); //the fifth slide contains EMF
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof EMF);
+            assertEquals(PictureType.EMF, pdata.getType());
+            src_bytes = pdata.getData();
+            ppt_bytes = slTests.readFile("wrench.emf");
+            assertArrayEquals(src_bytes, ppt_bytes);
+        }
     }
 
 	/**
@@ -428,35 +234,34 @@ public final class TestPictures {
 	 */
     @Test
 	void testZeroPictureType() throws IOException {
-		HSLFSlideShowImpl hslf = new HSLFSlideShowImpl(slTests.openResourceAsStream("PictureTypeZero.ppt"));
+		try (HSLFSlideShowImpl hslf = new HSLFSlideShowImpl(slTests.openResourceAsStream("PictureTypeZero.ppt"))) {
 
-		// Should still have 2 real pictures
-		assertEquals(2, hslf.getPictureData().size());
-		// Both are real pictures, both WMF
-		assertEquals(PictureType.WMF, hslf.getPictureData().get(0).getType());
-		assertEquals(PictureType.WMF, hslf.getPictureData().get(1).getType());
-
-		// Now test what happens when we use the SlideShow interface
-		HSLFSlideShow ppt = new HSLFSlideShow(hslf);
-        List<HSLFSlide> slides = ppt.getSlides();
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        assertEquals(12, slides.size());
-        assertEquals(2, pictures.size());
-
-		HSLFPictureShape pict;
-		HSLFPictureData pdata;
-
-        pict = (HSLFPictureShape)slides.get(0).getShapes().get(1); // 2nd object on 1st slide
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof WMF);
-        assertEquals(PictureType.WMF, pdata.getType());
-
-        pict = (HSLFPictureShape)slides.get(0).getShapes().get(2); // 3rd object on 1st slide
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof WMF);
-        assertEquals(PictureType.WMF, pdata.getType());
-
-        ppt.close();
+            // Should still have 2 real pictures
+            assertEquals(2, hslf.getPictureData().size());
+            // Both are real pictures, both WMF
+            assertEquals(PictureType.WMF, hslf.getPictureData().get(0).getType());
+            assertEquals(PictureType.WMF, hslf.getPictureData().get(1).getType());
+
+            // Now test what happens when we use the SlideShow interface
+            HSLFSlideShow ppt = new HSLFSlideShow(hslf);
+            List<HSLFSlide> slides = ppt.getSlides();
+            List<HSLFPictureData> pictures = ppt.getPictureData();
+            assertEquals(12, slides.size());
+            assertEquals(2, pictures.size());
+
+            HSLFPictureShape pict;
+            HSLFPictureData pdata;
+
+            pict = (HSLFPictureShape) slides.get(0).getShapes().get(1); // 2nd object on 1st slide
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof WMF);
+            assertEquals(PictureType.WMF, pdata.getType());
+
+            pict = (HSLFPictureShape) slides.get(0).getShapes().get(2); // 3rd object on 1st slide
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof WMF);
+            assertEquals(PictureType.WMF, pdata.getType());
+        }
 	}
 
     /**
@@ -490,75 +295,70 @@ public final class TestPictures {
 		assertEquals(PictureType.WMF, hslf.getPictureData().get(1).getType());
 
 		// Now test what happens when we use the SlideShow interface
-		HSLFSlideShow ppt = new HSLFSlideShow(hslf);
-        List<HSLFSlide> slides = ppt.getSlides();
-        List<HSLFPictureData> pictures = ppt.getPictureData();
-        assertEquals(27, slides.size());
-        assertEquals(2, pictures.size());
-
-		HSLFPictureShape pict;
-		HSLFPictureData pdata;
-
-        pict = (HSLFPictureShape)slides.get(6).getShapes().get(13);
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof WMF);
-        assertEquals(PictureType.WMF, pdata.getType());
-
-        pict = (HSLFPictureShape)slides.get(7).getShapes().get(13);
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof WMF);
-        assertEquals(PictureType.WMF, pdata.getType());
-
-        //add a new picture, it should be correctly appended to the Pictures stream
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        for(HSLFPictureData p : pictures) p.write(out);
-        out.close();
-
-        int streamSize = out.size();
-
-        HSLFPictureData data = ppt.addPicture(new byte[100], PictureType.JPEG);
-        int offset = data.getOffset();
-        assertEquals(streamSize, offset);
-        assertEquals(3, ppt.getPictureData().size());
-
-        ppt.close();
+		try (HSLFSlideShow ppt = new HSLFSlideShow(hslf)) {
+            List<HSLFSlide> slides = ppt.getSlides();
+            List<HSLFPictureData> pictures = ppt.getPictureData();
+            assertEquals(27, slides.size());
+            assertEquals(2, pictures.size());
+
+            HSLFPictureShape pict;
+            HSLFPictureData pdata;
+
+            pict = (HSLFPictureShape) slides.get(6).getShapes().get(13);
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof WMF);
+            assertEquals(PictureType.WMF, pdata.getType());
+
+            pict = (HSLFPictureShape) slides.get(7).getShapes().get(13);
+            pdata = pict.getPictureData();
+            assertTrue(pdata instanceof WMF);
+            assertEquals(PictureType.WMF, pdata.getType());
+
+            //add a new picture, it should be correctly appended to the Pictures stream
+            CountingOutputStream out = new CountingOutputStream(NULL_OUTPUT_STREAM);
+            for (HSLFPictureData p : pictures) p.write(out);
+
+            int streamSize = out.getCount();
+
+            HSLFPictureData data = ppt.addPicture(new byte[100], PictureType.JPEG);
+            int offset = data.getOffset();
+            assertEquals(streamSize, offset);
+            assertEquals(3, ppt.getPictureData().size());
+        }
     }
 
     @Test
     void testGetPictureName() throws IOException {
-        HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("ppt_with_png.ppt");
-        HSLFSlide slide = ppt.getSlides().get(0);
+        try (HSLFSlideShow ppt = getSlideShow("ppt_with_png.ppt")) {
+            HSLFSlide slide = ppt.getSlides().get(0);
 
-        HSLFPictureShape p = (HSLFPictureShape)slide.getShapes().get(0); //the first slide contains JPEG
-        assertEquals("test", p.getPictureName());
-        ppt.close();
+            HSLFPictureShape p = (HSLFPictureShape) slide.getShapes().get(0); //the first slide contains JPEG
+            assertEquals("test", p.getPictureName());
+        }
     }
 
     @Test
     void testSetPictureName() throws IOException {
-        HSLFSlideShow ppt = new HSLFSlideShow();
-
-        HSLFSlide slide = ppt.createSlide();
-        byte[] img = slTests.readFile("tomcat.png");
-        HSLFPictureData data = ppt.addPicture(img, PictureType.PNG);
-        HSLFPictureShape pict = new HSLFPictureShape(data);
-        pict.setPictureName("tomcat.png");
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()));
+        try (HSLFSlideShow ppt1 = new HSLFSlideShow()) {
 
-        HSLFPictureShape p = (HSLFPictureShape)ppt.getSlides().get(0).getShapes().get(0);
-        assertEquals("tomcat.png", p.getPictureName());
+            HSLFSlide slide = ppt1.createSlide();
+            byte[] img = slTests.readFile("tomcat.png");
+            HSLFPictureData data = ppt1.addPicture(img, PictureType.PNG);
+            HSLFPictureShape pict = new HSLFPictureShape(data);
+            pict.setPictureName("tomcat.png");
+            slide.addShape(pict);
+
+            //serialize and read again
+            try (HSLFSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                HSLFPictureShape p = (HSLFPictureShape) ppt2.getSlides().get(0).getShapes().get(0);
+                assertEquals("tomcat.png", p.getPictureName());
+            }
+        }
     }
 
     @Test
     void testPictureIndexIsOneBased() throws IOException {
-        try (HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("ppt_with_png.ppt")) {
+        try (HSLFSlideShow ppt = getSlideShow("ppt_with_png.ppt")) {
             HSLFPictureData picture = ppt.getPictureData().get(0);
             assertEquals(1, picture.getIndex());
         }
@@ -571,20 +371,18 @@ public final class TestPictures {
     @Test
     void testEditPictureData() throws IOException {
         byte[] newImage = slTests.readFile("tomcat.png");
-        ByteArrayOutputStream modifiedSlideShow = new ByteArrayOutputStream();
 
         // Load an existing slideshow and modify the image
-        try (HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("ppt_with_png.ppt")) {
-            HSLFPictureData picture = ppt.getPictureData().get(0);
-            picture.setData(newImage);
-            ppt.write(modifiedSlideShow);
-        }
+        try (HSLFSlideShow ppt1 = getSlideShow("ppt_with_png.ppt")) {
+            HSLFPictureData picture1 = ppt1.getPictureData().get(0);
+            picture1.setData(newImage);
 
-        // Load the modified slideshow and verify the image content
-        try (HSLFSlideShow ppt = new HSLFSlideShow(new ByteArrayInputStream(modifiedSlideShow.toByteArray()))) {
-            HSLFPictureData picture = ppt.getPictureData().get(0);
-            byte[] modifiedImageData = picture.getData();
-            assertArrayEquals(newImage, modifiedImageData);
+            // Load the modified slideshow and verify the image content
+            try (HSLFSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                HSLFPictureData picture2 = ppt2.getPictureData().get(0);
+                byte[] modifiedImageData = picture2.getData();
+                assertArrayEquals(newImage, modifiedImageData);
+            }
         }
     }
 
@@ -595,22 +393,20 @@ public final class TestPictures {
     @Test
     void testEditPictureDataEncrypted() throws IOException {
         byte[] newImage = slTests.readFile("tomcat.png");
-        ByteArrayOutputStream modifiedSlideShow = new ByteArrayOutputStream();
 
         Biff8EncryptionKey.setCurrentUserPassword("password");
         try {
             // Load an existing slideshow and modify the image
-            try (HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("ppt_with_png_encrypted.ppt")) {
-                HSLFPictureData picture = ppt.getPictureData().get(0);
-                picture.setData(newImage);
-                ppt.write(modifiedSlideShow);
-            }
-
-            // Load the modified slideshow and verify the image content
-            try (HSLFSlideShow ppt = new HSLFSlideShow(new ByteArrayInputStream(modifiedSlideShow.toByteArray()))) {
-                HSLFPictureData picture = ppt.getPictureData().get(0);
-                byte[] modifiedImageData = picture.getData();
-                assertArrayEquals(newImage, modifiedImageData);
+            try (HSLFSlideShow ppt1 = getSlideShow("ppt_with_png_encrypted.ppt")) {
+                HSLFPictureData picture1 = ppt1.getPictureData().get(0);
+                picture1.setData(newImage);
+
+                // Load the modified slideshow and verify the image content
+                try (HSLFSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                    HSLFPictureData picture2 = ppt2.getPictureData().get(0);
+                    byte[] modifiedImageData = picture2.getData();
+                    assertArrayEquals(newImage, modifiedImageData);
+                }
             }
         } finally {
             Biff8EncryptionKey.setCurrentUserPassword(null);
@@ -626,27 +422,23 @@ public final class TestPictures {
         int[] originalOffsets = {0, 12013, 15081, 34162, 59563};
         int[] modifiedOffsets = {0, 35, 3103, 22184, 47585};
 
-        ByteArrayOutputStream inMemory = new ByteArrayOutputStream();
-        try (HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("pictures.ppt")) {
-            int[] offsets = ppt.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
-            assertArrayEquals(originalOffsets, offsets);
+        try (HSLFSlideShow ppt1 = getSlideShow("pictures.ppt")) {
+            int[] offsets1 = ppt1.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
+            assertArrayEquals(originalOffsets, offsets1);
 
-            HSLFPictureData imageBeingChanged = ppt.getPictureData().get(0);
+            HSLFPictureData imageBeingChanged = ppt1.getPictureData().get(0);
             // It doesn't matter that this isn't a valid image. We are just testing offsets here.
             imageBeingChanged.setData(new byte[10]);
 
             // Verify that the in-memory representations have all been updated
-            offsets = ppt.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
-            assertArrayEquals(modifiedOffsets, offsets);
-
-            ppt.write(inMemory);
-        }
-
-        try (HSLFSlideShow ppt = new HSLFSlideShow(new ByteArrayInputStream(inMemory.toByteArray()))) {
+            offsets1 = ppt1.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
+            assertArrayEquals(modifiedOffsets, offsets1);
 
-            // Verify that the persisted representations have all been updated
-            int[] offsets = ppt.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
-            assertArrayEquals(modifiedOffsets, offsets);
+            try (HSLFSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                // Verify that the persisted representations have all been updated
+                int[] offsets2 = ppt2.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
+                assertArrayEquals(modifiedOffsets, offsets2);
+            }
         }
     }
 
@@ -662,11 +454,9 @@ public final class TestPictures {
     void testEditPictureDataOutOfOrderRecords() throws IOException {
         int[] modifiedOffsets = {0, 35, 3103, 22184, 47585};
 
-        ByteArrayOutputStream inMemory = new ByteArrayOutputStream();
-        try (HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("pictures.ppt")) {
-
+        try (HSLFSlideShow ppt1 = getSlideShow("pictures.ppt")) {
             // For this test we're going to intentionally manipulate the records into a shuffled order.
-            EscherContainerRecord container = ppt.getPictureData().get(0).bStore;
+            EscherContainerRecord container = ppt1.getPictureData().get(0).bStore;
             List<EscherRecord> children = container.getChildRecords();
             for (EscherRecord child : children) {
                 container.removeChildRecord(child);
@@ -676,25 +466,21 @@ public final class TestPictures {
                 container.addChildRecord(child);
             }
 
-            HSLFPictureData imageBeingChanged = ppt.getPictureData().get(0);
+            HSLFPictureData imageBeingChanged = ppt1.getPictureData().get(0);
             // It doesn't matter that this isn't a valid image. We are just testing offsets here.
             imageBeingChanged.setData(new byte[10]);
 
             // Verify that the in-memory representations have all been updated
-            int[] offsets = ppt.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
-            Arrays.sort(offsets);
-            assertArrayEquals(modifiedOffsets, offsets);
+            int[] offsets1 = ppt1.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).sorted().toArray();
+            assertArrayEquals(modifiedOffsets, offsets1);
 
-            ppt.write(inMemory);
+            try (HSLFSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                // Verify that the persisted representations have all been updated
+                int[] offsets2 = ppt2.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).sorted().toArray();
+                assertArrayEquals(modifiedOffsets, offsets2);
+            }
         }
 
-        try (HSLFSlideShow ppt = new HSLFSlideShow(new ByteArrayInputStream(inMemory.toByteArray()))) {
-
-            // Verify that the persisted representations have all been updated
-            int[] offsets = ppt.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
-            Arrays.sort(offsets);
-            assertArrayEquals(modifiedOffsets, offsets);
-        }
     }
 
     /**
@@ -707,28 +493,25 @@ public final class TestPictures {
         int originalNumberOfRecords;
 
         // Create a presentation that has records with unmatched offsets, but with matched UIDs.
-        ByteArrayOutputStream inMemory = new ByteArrayOutputStream();
-        try (HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("pictures.ppt")) {
-            originalOffsets = ppt.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
-            originalNumberOfRecords = ppt.getPictureData().get(0).bStore.getChildCount();
+        try (HSLFSlideShow ppt1 = getSlideShow("pictures.ppt")) {
+            originalOffsets = ppt1.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
+            originalNumberOfRecords = ppt1.getPictureData().get(0).bStore.getChildCount();
 
             Random random = new Random();
-            for (HSLFPictureData picture : ppt.getPictureData()) {
+            for (HSLFPictureData picture : ppt1.getPictureData()) {
                 // Bound is arbitrary and irrelevant to the test.
                 picture.bse.setOffset(random.nextInt(500_000));
             }
-            ppt.write(inMemory);
-        }
-
-        try (HSLFSlideShow ppt = new HSLFSlideShow(new ByteArrayInputStream(inMemory.toByteArray()))) {
 
-            // Verify that the offsets all got fixed.
-            int[] offsets = ppt.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
-            assertArrayEquals(originalOffsets, offsets);
-
-            // Verify that there are the same number of records as in the original slideshow.
-            int numberOfRecords = ppt.getPictureData().get(0).bStore.getChildCount();
-            assertEquals(originalNumberOfRecords, numberOfRecords);
+            try (HSLFSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                // Verify that the offsets all got fixed.
+                int[] offsets = ppt2.getPictureData().stream().mapToInt(HSLFPictureData::getOffset).toArray();
+                assertArrayEquals(originalOffsets, offsets);
+
+                // Verify that there are the same number of records as in the original slideshow.
+                int numberOfRecords = ppt2.getPictureData().get(0).bStore.getChildCount();
+                assertEquals(originalNumberOfRecords, numberOfRecords);
+            }
         }
     }
 }

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestRichTextRun.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestRichTextRun.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestRichTextRun.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestRichTextRun.java Fri May 14 00:37:50 2021
@@ -24,12 +24,11 @@ import static org.junit.jupiter.api.Asse
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.hslf.HSLFTestDataSamples;
 import org.apache.poi.hslf.record.Record;
 import org.apache.poi.hslf.record.SlideListWithText;
@@ -230,30 +229,30 @@ public final class TestRichTextRun {
 			assertEquals("Courier", rtr.getFontFamily());
 
 			// Write out and back in
-			HSLFSlideShow readS = HSLFTestDataSamples.writeOutAndReadBack(h);
+			try (HSLFSlideShow readS = HSLFTestDataSamples.writeOutAndReadBack(h)) {
 
-			// Tweak existing one again, to ensure really worked
-			rtr.setBold(false);
-			rtr.setFontSize(17d);
-			rtr.setFontFamily("CourierZZ");
-
-			// Check it took those changes
-			assertFalse(rtr.isBold());
-			assertEquals(17., rtr.getFontSize(), 0);
-			assertEquals("CourierZZ", rtr.getFontFamily());
-
-
-			// Now, look at the one we changed, wrote out, and read back in
-			// Ensure it does contain our original modifications
-			HSLFSlide slideOneRR = readS.getSlides().get(0);
-			List<List<HSLFTextParagraph>> textParassRR = slideOneRR.getTextParagraphs();
-			HSLFTextRun rtrRRa = textParassRR.get(0).get(0).getTextRuns().get(0);
-
-			assertTrue(rtrRRa.isBold());
-			assertNotNull(rtrRRa.getFontSize());
-			assertEquals(18., rtrRRa.getFontSize(), 0);
-			assertEquals("Courier", rtrRRa.getFontFamily());
-			readS.close();
+				// Tweak existing one again, to ensure really worked
+				rtr.setBold(false);
+				rtr.setFontSize(17d);
+				rtr.setFontFamily("CourierZZ");
+
+				// Check it took those changes
+				assertFalse(rtr.isBold());
+				assertEquals(17., rtr.getFontSize(), 0);
+				assertEquals("CourierZZ", rtr.getFontFamily());
+
+
+				// Now, look at the one we changed, wrote out, and read back in
+				// Ensure it does contain our original modifications
+				HSLFSlide slideOneRR = readS.getSlides().get(0);
+				List<List<HSLFTextParagraph>> textParassRR = slideOneRR.getTextParagraphs();
+				HSLFTextRun rtrRRa = textParassRR.get(0).get(0).getTextRuns().get(0);
+
+				assertTrue(rtrRRa.isBold());
+				assertNotNull(rtrRRa.getFontSize());
+				assertEquals(18., rtrRRa.getFontSize(), 0);
+				assertEquals("Courier", rtrRRa.getFontFamily());
+			}
 		}
 	}
 
@@ -370,29 +369,30 @@ public final class TestRichTextRun {
 	 */
 	private void assertMatchesSLTWC(HSLFSlideShow s) throws IOException {
 		// Grab a new copy of slideshow C
-		HSLFSlideShow refC = HSLFTestDataSamples.getSlideShow(filenameC);
+		try (HSLFSlideShow refC = HSLFTestDataSamples.getSlideShow(filenameC)) {
 
-		// Write out the 2nd SLWT in the active document
-		SlideListWithText refSLWT = refC.getDocumentRecord().getSlideListWithTexts()[1];
-		byte[] raw_slwt = writeRecord(refSLWT);
-
-		// Write out the same for the supplied slideshow
-		SlideListWithText s_SLWT = s.getDocumentRecord().getSlideListWithTexts()[1];
-		byte[] s_slwt = writeRecord(s_SLWT);
-
-		// Check the records are the same
-		assertEquals(refSLWT.getChildRecords().length, s_SLWT.getChildRecords().length);
-		for(int i=0; i<refSLWT.getChildRecords().length; i++) {
-			Record ref_r = refSLWT.getChildRecords()[i];
-			Record s_r = s_SLWT.getChildRecords()[i];
-
-			byte[] r_rb = writeRecord(ref_r);
-			byte[] s_rb = writeRecord(s_r);
-			assertArrayEquals(r_rb, s_rb);
-		}
+			// Write out the 2nd SLWT in the active document
+			SlideListWithText refSLWT = refC.getDocumentRecord().getSlideListWithTexts()[1];
+			byte[] raw_slwt = writeRecord(refSLWT);
+
+			// Write out the same for the supplied slideshow
+			SlideListWithText s_SLWT = s.getDocumentRecord().getSlideListWithTexts()[1];
+			byte[] s_slwt = writeRecord(s_SLWT);
+
+			// Check the records are the same
+			assertEquals(refSLWT.getChildRecords().length, s_SLWT.getChildRecords().length);
+			for (int i = 0; i < refSLWT.getChildRecords().length; i++) {
+				Record ref_r = refSLWT.getChildRecords()[i];
+				Record s_r = s_SLWT.getChildRecords()[i];
+
+				byte[] r_rb = writeRecord(ref_r);
+				byte[] s_rb = writeRecord(s_r);
+				assertArrayEquals(r_rb, s_rb);
+			}
 
-		// Check the bytes are the same
-		assertArrayEquals(raw_slwt, s_slwt);
+			// Check the bytes are the same
+			assertArrayEquals(raw_slwt, s_slwt);
+		}
 	}
 
 	/**
@@ -401,20 +401,20 @@ public final class TestRichTextRun {
 	 */
 	private static void assertMatchesFileC(HSLFSlideShow s) throws IOException {
 		// Grab the bytes of the file
-	    POIFSFileSystem fs = new POIFSFileSystem(HSLFTestDataSamples.openSampleFileStream(filenameC));
-	    InputStream is = fs.createDocumentInputStream(HSLFSlideShow.POWERPOINT_DOCUMENT);
-	    byte[] raw_file = IOUtils.toByteArray(is);
-	    is.close();
-	    fs.close();
+		byte[] raw_file;
+	    try (POIFSFileSystem fs = new POIFSFileSystem(HSLFTestDataSamples.openSampleFileStream(filenameC));
+	    	InputStream is = fs.createDocumentInputStream(HSLFSlideShow.POWERPOINT_DOCUMENT)) {
+			raw_file = IOUtils.toByteArray(is);
+		}
 
 		// Now write out the slideshow
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		byte[] raw_ss;
+        UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		s.write(baos);
-		fs = new POIFSFileSystem(new ByteArrayInputStream(baos.toByteArray()));
-		is = fs.createDocumentInputStream(HSLFSlideShow.POWERPOINT_DOCUMENT);
-		byte[] raw_ss = IOUtils.toByteArray(is);
-        is.close();
-        fs.close();
+		try (POIFSFileSystem fs = new POIFSFileSystem(baos.toInputStream());
+			InputStream is = fs.createDocumentInputStream(HSLFSlideShow.POWERPOINT_DOCUMENT)) {
+			raw_ss = IOUtils.toByteArray(is);
+		}
 
 		// different paragraph mask, because of sanitizing
 		raw_ss[169030] = 0x0a;
@@ -424,24 +424,24 @@ public final class TestRichTextRun {
 	}
 
 	private byte[] writeRecord( org.apache.poi.hslf.record.Record r) throws IOException {
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
 		r.writeOut(baos);
 		return baos.toByteArray();
 	}
 
     @Test
 	void testIndentationLevel() throws Exception {
-		HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("ParagraphStylesShorterThanCharStyles.ppt");
-		for (HSLFSlide sl : ppt.getSlides()) {
-			for (List<HSLFTextParagraph> txt : sl.getTextParagraphs()) {
-				for (HSLFTextParagraph p : txt) {
-					int indent = p.getIndentLevel();
-					assertTrue(indent >= 0 && indent <= 4 );
-				}
+		try (HSLFSlideShow ppt = HSLFTestDataSamples.getSlideShow("ParagraphStylesShorterThanCharStyles.ppt")) {
+			for (HSLFSlide sl : ppt.getSlides()) {
+				for (List<HSLFTextParagraph> txt : sl.getTextParagraphs()) {
+					for (HSLFTextParagraph p : txt) {
+						int indent = p.getIndentLevel();
+						assertTrue(indent >= 0 && indent <= 4);
+					}
 
+				}
 			}
 		}
-		ppt.close();
 	}
 
     @Test
@@ -502,54 +502,54 @@ public final class TestRichTextRun {
 
     @Test
 	void testSetParagraphStyles() throws IOException {
-		HSLFSlideShow ppt1 = new HSLFSlideShow();
+		try (HSLFSlideShow ppt1 = new HSLFSlideShow()) {
 
-		HSLFSlide slide = ppt1.createSlide();
+			HSLFSlide slide = ppt1.createSlide();
 
-		HSLFTextBox shape = new HSLFTextBox();
-		shape.setText(
+			HSLFTextBox shape = new HSLFTextBox();
+			shape.setText(
 				"Hello, World!\r" +
-				"This should be\r" +
-				"Multiline text");
-        HSLFTextParagraph rt = shape.getTextParagraphs().get(0);
-        HSLFTextRun tr = rt.getTextRuns().get(0);
-		tr.setFontSize(42d);
-		rt.setBullet(true);
-		rt.setLeftMargin(50d);
-		rt.setIndent(0d);
-		rt.setBulletChar('\u263A');
-		slide.addShape(shape);
-
-		assertNotNull(tr.getFontSize());
-		assertEquals(42.0, tr.getFontSize(), 0);
-		assertTrue(rt.isBullet());
-		assertNotNull(rt.getLeftMargin());
-		assertEquals(50.0, rt.getLeftMargin(), 0);
-		assertNotNull(rt.getIndent());
-		assertEquals(0, rt.getIndent(), 0);
-		assertNotNull(rt.getBulletChar());
-		assertEquals('\u263A', (char)rt.getBulletChar());
-
-		shape.setAnchor(new java.awt.Rectangle(50, 50, 500, 300));
-		slide.addShape(shape);
-
-		//serialize and read again
-		HSLFSlideShow ppt2 = HSLFTestDataSamples.writeOutAndReadBack(ppt1);
-		slide = ppt2.getSlides().get(0);
-		shape = (HSLFTextBox)slide.getShapes().get(0);
-		rt = shape.getTextParagraphs().get(0);
-		tr = rt.getTextRuns().get(0);
-		assertNotNull(tr.getFontSize());
-		assertEquals(42.0, tr.getFontSize(), 0);
-		assertTrue(rt.isBullet());
-		assertNotNull(rt.getLeftMargin());
-		assertEquals(50.0, rt.getLeftMargin(), 0);
-		assertNotNull(rt.getIndent());
-		assertEquals(0, rt.getIndent(), 0);
-		assertNotNull(rt.getBulletChar());
-		assertEquals('\u263A', (char)rt.getBulletChar());
-		ppt2.close();
-		ppt1.close();
+					"This should be\r" +
+					"Multiline text");
+			HSLFTextParagraph rt = shape.getTextParagraphs().get(0);
+			HSLFTextRun tr = rt.getTextRuns().get(0);
+			tr.setFontSize(42d);
+			rt.setBullet(true);
+			rt.setLeftMargin(50d);
+			rt.setIndent(0d);
+			rt.setBulletChar('\u263A');
+			slide.addShape(shape);
+
+			assertNotNull(tr.getFontSize());
+			assertEquals(42.0, tr.getFontSize(), 0);
+			assertTrue(rt.isBullet());
+			assertNotNull(rt.getLeftMargin());
+			assertEquals(50.0, rt.getLeftMargin(), 0);
+			assertNotNull(rt.getIndent());
+			assertEquals(0, rt.getIndent(), 0);
+			assertNotNull(rt.getBulletChar());
+			assertEquals('\u263A', (char) rt.getBulletChar());
+
+			shape.setAnchor(new java.awt.Rectangle(50, 50, 500, 300));
+			slide.addShape(shape);
+
+			//serialize and read again
+			try (HSLFSlideShow ppt2 = HSLFTestDataSamples.writeOutAndReadBack(ppt1)) {
+				slide = ppt2.getSlides().get(0);
+				shape = (HSLFTextBox) slide.getShapes().get(0);
+				rt = shape.getTextParagraphs().get(0);
+				tr = rt.getTextRuns().get(0);
+				assertNotNull(tr.getFontSize());
+				assertEquals(42.0, tr.getFontSize(), 0);
+				assertTrue(rt.isBullet());
+				assertNotNull(rt.getLeftMargin());
+				assertEquals(50.0, rt.getLeftMargin(), 0);
+				assertNotNull(rt.getIndent());
+				assertEquals(0, rt.getIndent(), 0);
+				assertNotNull(rt.getBulletChar());
+				assertEquals('\u263A', (char) rt.getBulletChar());
+			}
+		}
 	}
 
     @Test

Modified: poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestTable.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestTable.java (original)
+++ poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestTable.java Fri May 14 00:37:50 2021
@@ -19,6 +19,7 @@
 
 package org.apache.poi.hslf.usermodel;
 
+import static org.apache.poi.hslf.HSLFTestDataSamples.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;
@@ -26,8 +27,6 @@ import static org.junit.jupiter.api.Asse
 
 import java.awt.Color;
 import java.awt.geom.Rectangle2D;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.List;
 
@@ -108,58 +107,49 @@ public class TestTable {
 
     @Test
     void testAddText() throws IOException {
-        HSLFSlideShow ppt1 = new HSLFSlideShow();
-        HSLFSlide slide = ppt1.createSlide();
-        HSLFTable tab = slide.createTable(4, 5);
-
-        int rows = tab.getNumberOfRows();
-        int cols = tab.getNumberOfColumns();
-        for (int row=0; row<rows; row++) {
-            for (int col=0; col<cols; col++) {
-                HSLFTableCell c = tab.getCell(row, col);
-                assertNotNull(c);
-                c.setText("r"+(row+1)+"c"+(col+1));
+        try (HSLFSlideShow ppt1 = new HSLFSlideShow()) {
+            HSLFSlide slide = ppt1.createSlide();
+            HSLFTable tab = slide.createTable(4, 5);
+
+            int rows = tab.getNumberOfRows();
+            int cols = tab.getNumberOfColumns();
+            for (int row = 0; row < rows; row++) {
+                for (int col = 0; col < cols; col++) {
+                    HSLFTableCell c = tab.getCell(row, col);
+                    assertNotNull(c);
+                    c.setText("r" + (row + 1) + "c" + (col + 1));
+                }
             }
-        }
 
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        ppt1.write(bos);
-        ppt1.close();
-
-        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
-        HSLFSlideShow ppt2 = new HSLFSlideShow(bis);
-        slide = ppt2.getSlides().get(0);
-        tab = (HSLFTable)slide.getShapes().get(0);
-
-        rows = tab.getNumberOfRows();
-        cols = tab.getNumberOfColumns();
-        for (int row=0; row<rows; row++) {
-            for (int col=0; col<cols; col++) {
-                HSLFTableCell c = tab.getCell(row, col);
-                assertNotNull(c);
-                c.setText(c.getText()+"...");
+            try (HSLFSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                slide = ppt2.getSlides().get(0);
+                tab = (HSLFTable) slide.getShapes().get(0);
+
+                rows = tab.getNumberOfRows();
+                cols = tab.getNumberOfColumns();
+                for (int row = 0; row < rows; row++) {
+                    for (int col = 0; col < cols; col++) {
+                        HSLFTableCell c = tab.getCell(row, col);
+                        assertNotNull(c);
+                        c.setText(c.getText() + "...");
+                    }
+                }
+
+                try (HSLFSlideShow ppt3 = writeOutAndReadBack(ppt2)) {
+                    slide = ppt3.getSlides().get(0);
+                    tab = (HSLFTable) slide.getShapes().get(0);
+
+                    rows = tab.getNumberOfRows();
+                    cols = tab.getNumberOfColumns();
+                    for (int row = 0; row < rows; row++) {
+                        for (int col = 0; col < cols; col++) {
+                            HSLFTableCell c = tab.getCell(row, col);
+                            assertNotNull(c);
+                            assertEquals("r" + (row + 1) + "c" + (col + 1) + "...", c.getText());
+                        }
+                    }
+                }
             }
         }
-
-        bos.reset();
-        ppt2.write(bos);
-        ppt2.close();
-
-        bis = new ByteArrayInputStream(bos.toByteArray());
-        HSLFSlideShow ppt3 = new HSLFSlideShow(bis);
-        slide = ppt3.getSlides().get(0);
-        tab = (HSLFTable)slide.getShapes().get(0);
-
-        rows = tab.getNumberOfRows();
-        cols = tab.getNumberOfColumns();
-        for (int row=0; row<rows; row++) {
-            for (int col=0; col<cols; col++) {
-                HSLFTableCell c = tab.getCell(row, col);
-                assertNotNull(c);
-                assertEquals("r"+(row+1)+"c"+(col+1)+"...", c.getText());
-            }
-        }
-
-        ppt3.close();
     }
 }



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