]> source.dussan.org Git - poi.git/commitdiff
avoid exception when breaking text with a trailing newline
authorYegor Kozlov <yegor@apache.org>
Sat, 19 Nov 2011 12:25:38 +0000 (12:25 +0000)
committerYegor Kozlov <yegor@apache.org>
Sat, 19 Nov 2011 12:25:38 +0000 (12:25 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1203968 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFPictureShape.java
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java

index 61692dba40bc34eed137f7c24849f675d71a0ea0..7d42efa38d6da1302466d3fd96ecc4cc1b7c12ba 100644 (file)
@@ -19,8 +19,11 @@ package org.apache.poi.xslf.usermodel;
 import junit.framework.TestCase;\r
 import org.apache.poi.xslf.XSLFTestDataSamples;\r
 \r
+import java.io.IOException;\r
 import java.util.Arrays;\r
+import java.util.HashMap;\r
 import java.util.List;\r
+import java.util.Map;\r
 \r
 /**\r
  * @author Yegor Kozlov\r
@@ -49,13 +52,65 @@ public class TestXSLFPictureShape extends TestCase {
         assertTrue(Arrays.equals(data2, shape2.getPictureData().getData()));\r
 \r
         ppt = XSLFTestDataSamples.writeOutAndReadBack(ppt);\r
-        List<XSLFPictureData> pics =  ppt.getAllPictures();\r
+        List<XSLFPictureData> pics = ppt.getAllPictures();\r
         assertEquals(2, pics.size());\r
         assertTrue(Arrays.equals(data1, pics.get(0).getData()));\r
         assertTrue(Arrays.equals(data2, pics.get(1).getData()));\r
 \r
         XSLFShape[] shapes = ppt.getSlides()[0].getShapes();\r
-        assertTrue(Arrays.equals(data1, ((XSLFPictureShape)shapes[0]).getPictureData().getData()));\r
-        assertTrue(Arrays.equals(data2, ((XSLFPictureShape)shapes[1]).getPictureData().getData()));\r
+        assertTrue(Arrays.equals(data1, ((XSLFPictureShape) shapes[0]).getPictureData().getData()));\r
+        assertTrue(Arrays.equals(data2, ((XSLFPictureShape) shapes[1]).getPictureData().getData()));\r
+    }\r
+\r
+    public void testCreateMultiplePictures() {\r
+        XMLSlideShow ppt = new XMLSlideShow();\r
+        XSLFSlide slide1 = ppt.createSlide();\r
+        XSLFGroupShape group1 = slide1.createGroup();\r
+\r
+\r
+        int pictureIndex = 0;\r
+        // first add 20 images to the slide\r
+        for (int i = 0; i < 20; i++, pictureIndex++) {\r
+            byte[] data = new byte[]{(byte)pictureIndex};\r
+            int elementIndex = ppt.addPicture(data,\r
+                    XSLFPictureData.PICTURE_TYPE_PNG);\r
+            assertEquals(pictureIndex, elementIndex);   // added images have indexes 0,1,2....19\r
+            XSLFPictureShape picture = slide1.createPicture(elementIndex);\r
+            // POI saves images as image1.png, image2.png, etc.\r
+            String fileName = "image" + (elementIndex + 1) + ".png";\r
+            assertEquals(fileName, picture.getPictureData().getFileName());\r
+            assertTrue(Arrays.equals(data, picture.getPictureData().getData()));\r
+        }\r
+\r
+        // and then add next 20 images to a group\r
+        for (int i = 0; i < 20; i++, pictureIndex++) {\r
+            byte[] data = new byte[]{(byte)pictureIndex};\r
+            int elementIndex = ppt.addPicture(data,\r
+                    XSLFPictureData.PICTURE_TYPE_PNG);\r
+            XSLFPictureShape picture = group1.createPicture(elementIndex);\r
+            // POI saves images as image1.png, image2.png, etc.\r
+            assertEquals(pictureIndex, elementIndex);   // added images have indexes 0,1,2....19\r
+            String fileName = "image" + (pictureIndex + 1) + ".png";\r
+            assertEquals(fileName, picture.getPictureData().getFileName());\r
+            assertTrue(Arrays.equals(data, picture.getPictureData().getData()));\r
+        }\r
+\r
+        // serialize, read back and check that all images are there\r
+\r
+        ppt = XSLFTestDataSamples.writeOutAndReadBack(ppt);\r
+        // pictures keyed by file name\r
+        Map<String, XSLFPictureData> pics = new HashMap<String, XSLFPictureData>();\r
+        for(XSLFPictureData p : ppt.getAllPictures()){\r
+            pics.put(p.getFileName(), p);\r
+        }\r
+        assertEquals(40, pics.size());\r
+        for (int i = 0; i < 40; i++) {\r
+            byte[] data1 = new byte[]{(byte)i};\r
+            String fileName = "image" + (i + 1) + ".png";\r
+            XSLFPictureData data = pics.get(fileName);\r
+            assertNotNull(data);\r
+            assertEquals(fileName, data.getFileName());\r
+            assertTrue(Arrays.equals(data1, data.getData()));\r
+        }\r
     }\r
 }
\ No newline at end of file
index b87363b1d696a8749ca7be86d56eeb0c5cf9ee24..e5bad535edc983516a432ed8520cf58a3a7058f9 100755 (executable)
@@ -150,6 +150,13 @@ public class TestXSLFTextParagraph extends TestCase {
         assertEquals("Apache", lines.get(0).getString());\r
         assertEquals("POI", lines.get(1).getString());\r
 \r
+        // trailing newlines are ignored\r
+        r.setText("Apache\nPOI\n");\r
+        lines = p.breakText(graphics);\r
+        assertEquals(2, lines.size());\r
+        assertEquals("Apache", lines.get(0).getString());\r
+        assertEquals("POI", lines.get(1).getString());\r
+\r
         XSLFAutoShape sh2 = slide.createAutoShape();\r
         sh2.setAnchor(new Rectangle(50, 50, 300, 200));\r
         XSLFTextParagraph p2 = sh2.addNewTextParagraph();\r