You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by ba...@apache.org on 2006/12/22 21:56:06 UTC

svn commit: r489760 [7/8] - in /jakarta/poi/trunk/src: java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/record/formula/ java/org/apache/poi/hssf/util/ scratchpad/src/org/apache/poi/hslf/blip/ scratchpad/src/org/apache/poi/hslf/extractor/ scrat...

Modified: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java?view=diff&rev=489760&r1=489759&r2=489760
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java (original)
+++ jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestPictures.java Fri Dec 22 12:56:04 2006
@@ -1,394 +1,394 @@
-/* ====================================================================
-   Copyright 2002-2004   Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-
-package org.apache.poi.hslf.usermodel;
-
-import org.apache.poi.hslf.*;
-import org.apache.poi.hslf.blip.*;
-import org.apache.poi.hslf.model.*;
-import junit.framework.TestCase;
-
-import java.io.*;
-import java.util.Arrays;
-
-/**
- * Test adding/reading pictures
- *
- * @author Yegor Kozlov
- */
-public class TestPictures extends TestCase{
-
-    protected File cwd;
-
-    public void setUp() throws Exception {
-        cwd = new File(System.getProperty("HSLF.testdata.path"));
-    }
-
-    /**
-     * Test read/write Macintosh PICT
-     */
-    public void testPICT() throws Exception {
-        SlideShow ppt = new SlideShow();
-
-        Slide slide = ppt.createSlide();
-        File img = new File(cwd, "cow.pict");
-        int idx = ppt.addPicture(img, Picture.PICT);
-        Picture pict = new Picture(idx);
-        assertEquals(idx, pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        Shape[] sh = ppt.getSlides()[0].getShapes();
-        assertEquals(1, sh.length);
-        pict = (Picture)sh[0];
-        assertEquals(idx, pict.getPictureIndex());
-
-        //check picture data
-        PictureData[] pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures[0]);
-
-        assertEquals(1, pictures.length);
-        assertEquals(Picture.PICT, pictures[0].getType());
-        assertTrue(pictures[0] instanceof PICT);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] src_bytes = read(img);
-        byte[] ppt_bytes = pictures[0].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 = new byte[src_bytes.length-512];
-        System.arraycopy(src_bytes, 512, b1, 0, b1.length);
-        byte[] b2 = new byte[ppt_bytes.length-512];
-        System.arraycopy(ppt_bytes, 512, b2, 0, b2.length);
-        assertTrue(Arrays.equals(b1, b2));
-    }
-
-    /**
-     * Test read/write WMF
-     */
-    public void testWMF() throws Exception {
-        SlideShow ppt = new SlideShow();
-
-        Slide slide = ppt.createSlide();
-        File img = new File(cwd, "santa.wmf");
-        int idx = ppt.addPicture(img, Picture.WMF);
-        Picture pict = new Picture(idx);
-        assertEquals(idx, pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        Shape[] sh = ppt.getSlides()[0].getShapes();
-        assertEquals(1, sh.length);
-        pict = (Picture)sh[0];
-        assertEquals(idx, pict.getPictureIndex());
-
-        //check picture data
-        PictureData[] pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures[0]);
-
-        assertEquals(1, pictures.length);
-        assertEquals(Picture.WMF, pictures[0].getType());
-        assertTrue(pictures[0] instanceof WMF);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] src_bytes = read(img);
-        byte[] ppt_bytes = pictures[0].getData();
-        assertEquals(src_bytes.length, ppt_bytes.length);
-        //in WMF the first 22 bytes - is a metafile header
-        byte[] b1 = new byte[src_bytes.length-22];
-        System.arraycopy(src_bytes, 22, b1, 0, b1.length);
-        byte[] b2 = new byte[ppt_bytes.length-22];
-        System.arraycopy(ppt_bytes, 22, b2, 0, b2.length);
-        assertTrue(Arrays.equals(b1, b2));
-    }
-
-    /**
-     * Test read/write EMF
-     */
-    public void testEMF() throws Exception {
-        SlideShow ppt = new SlideShow();
-
-        Slide slide = ppt.createSlide();
-        File img = new File(cwd, "wrench.emf");
-        int idx = ppt.addPicture(img, Picture.EMF);
-        Picture pict = new Picture(idx);
-        assertEquals(idx, pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can get this picture shape and it refers to the correct picture data
-        Shape[] sh = ppt.getSlides()[0].getShapes();
-        assertEquals(1, sh.length);
-        pict = (Picture)sh[0];
-        assertEquals(idx, pict.getPictureIndex());
-
-        //check picture data
-        PictureData[] pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures[0]);
-
-        assertEquals(1, pictures.length);
-        assertEquals(Picture.EMF, pictures[0].getType());
-        assertTrue(pictures[0] instanceof EMF);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] src_bytes = read(img);
-        byte[] ppt_bytes = pictures[0].getData();
-        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
-    }
-
-    /**
-     * Test read/write PNG
-     */
-    public void testPNG() throws Exception {
-        SlideShow ppt = new SlideShow();
-
-        Slide slide = ppt.createSlide();
-        File img = new File(cwd, "tomcat.png");
-        int idx = ppt.addPicture(img, Picture.PNG);
-        Picture pict = new Picture(idx);
-        assertEquals(idx, pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        Shape[] sh = ppt.getSlides()[0].getShapes();
-        assertEquals(1, sh.length);
-        pict = (Picture)sh[0];
-        assertEquals(idx, pict.getPictureIndex());
-
-        //check picture data
-        PictureData[] pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures[0]);
-
-        assertEquals(1, pictures.length);
-        assertEquals(Picture.PNG, pictures[0].getType());
-        assertTrue(pictures[0] instanceof PNG);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] src_bytes = read(img);
-        byte[] ppt_bytes = pictures[0].getData();
-        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
-    }
-
-    /**
-     * Test read/write JPEG
-     */
-    public void testJPEG() throws Exception {
-        SlideShow ppt = new SlideShow();
-
-        Slide slide = ppt.createSlide();
-        File img = new File(cwd, "clock.jpg");
-        int idx = ppt.addPicture(img, Picture.JPEG);
-        Picture pict = new Picture(idx);
-        assertEquals(idx, pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        Shape[] sh = ppt.getSlides()[0].getShapes();
-        assertEquals(1, sh.length);
-        pict = (Picture)sh[0];
-        assertEquals(idx, pict.getPictureIndex());
-
-        //check picture data
-        PictureData[] pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures[0]);
-
-        assertEquals(1, pictures.length);
-        assertEquals(Picture.JPEG, pictures[0].getType());
-        assertTrue(pictures[0] instanceof JPEG);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] src_bytes = read(img);
-        byte[] ppt_bytes = pictures[0].getData();
-        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
-    }
-
-    /**
-     * Test read/write DIB
-     */
-    public void testDIB() throws Exception {
-        SlideShow ppt = new SlideShow();
-
-        Slide slide = ppt.createSlide();
-        File img = new File(cwd, "sci_cec.dib");
-        
-        // Check we can read the test DIB image
-        assertTrue(img.exists());
-        
-        // Add the image
-        int idx = ppt.addPicture(img, Picture.DIB);
-        Picture pict = new Picture(idx);
-        assertEquals(idx, pict.getPictureIndex());
-        slide.addShape(pict);
-
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ppt.write(out);
-        out.close();
-
-        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
-
-        //make sure we can read this picture shape and it refers to the correct picture data
-        Shape[] sh = ppt.getSlides()[0].getShapes();
-        assertEquals(1, sh.length);
-        pict = (Picture)sh[0];
-        assertEquals(idx, pict.getPictureIndex());
-
-        //check picture data
-        PictureData[] pictures = ppt.getPictureData();
-        //the Picture shape refers to the PictureData object in the Presentation
-        assertEquals(pict.getPictureData(), pictures[0]);
-
-        assertEquals(1, pictures.length);
-        assertEquals(Picture.DIB, pictures[0].getType());
-        assertTrue(pictures[0] instanceof DIB);
-        //compare the content of the initial file with what is stored in the PictureData
-        byte[] src_bytes = read(img);
-        byte[] ppt_bytes = pictures[0].getData();
-        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
-    }
-
-    /**
-     * Read file into a byte array
-     */
-    protected byte[] read(File f) throws IOException {
-        byte[] bytes = new byte[(int)f.length()];
-        FileInputStream is = new FileInputStream(f);
-        is.read(bytes);
-        is.close();
-        return bytes;
-    }
-
-    /**
-     * Read pictures in different formats from a reference slide show
-     */
-    public void testReadPictures() throws Exception {
-
-        byte[] src_bytes, ppt_bytes, b1, b2;
-        Picture pict;
-        PictureData pdata;
-
-        SlideShow ppt = new SlideShow(new HSLFSlideShow(new File(cwd, "pictures.ppt").getPath()));
-        Slide[] slides = ppt.getSlides();
-        PictureData[] pictures = ppt.getPictureData();
-        assertEquals(5, pictures.length);
-
-        pict = (Picture)slides[0].getShapes()[0]; //the first slide contains JPEG
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof JPEG);
-        assertEquals(Picture.JPEG, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = read(new File(cwd, "clock.jpg"));
-        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
-
-        pict = (Picture)slides[1].getShapes()[0]; //the second slide contains PNG
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof PNG);
-        assertEquals(Picture.PNG, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = read(new File(cwd, "tomcat.png"));
-        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
-
-        pict = (Picture)slides[2].getShapes()[0]; //the third slide contains WMF
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof WMF);
-        assertEquals(Picture.WMF, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = read(new File(cwd, "santa.wmf"));
-        assertEquals(src_bytes.length, ppt_bytes.length);
-        //ignore the first 22 bytes - it is a WMF metafile header
-        b1 = new byte[src_bytes.length-22];
-        System.arraycopy(src_bytes, 22, b1, 0, b1.length);
-        b2 = new byte[ppt_bytes.length-22];
-        System.arraycopy(ppt_bytes, 22, b2, 0, b2.length);
-        assertTrue(Arrays.equals(b1, b2));
-
-        pict = (Picture)slides[3].getShapes()[0]; //the forth slide contains PICT
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof PICT);
-        assertEquals(Picture.PICT, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = read(new File(cwd, "cow.pict"));
-        assertEquals(src_bytes.length, ppt_bytes.length);
-        //ignore the first 512 bytes - it is a MAC specific crap
-        b1 = new byte[src_bytes.length-512];
-        System.arraycopy(src_bytes, 512, b1, 0, b1.length);
-        b2 = new byte[ppt_bytes.length-512];
-        System.arraycopy(ppt_bytes, 512, b2, 0, b2.length);
-        assertTrue(Arrays.equals(b1, b2));
-
-        pict = (Picture)slides[4].getShapes()[0]; //the fifth slide contains EMF
-        pdata = pict.getPictureData();
-        assertTrue(pdata instanceof EMF);
-        assertEquals(Picture.EMF, pdata.getType());
-        src_bytes = pdata.getData();
-        ppt_bytes = read(new File(cwd, "wrench.emf"));
-        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
-
-    }
-
-	/**
-	 * Test that on a party corrupt powerpoint document, which has 
-	 *  crazy pictures of type 0, we do our best.
-	 */
-	public void testZeroPictureType() throws Exception {
-		HSLFSlideShow hslf = new HSLFSlideShow(new File(cwd, "PictureTypeZero.ppt").getPath());
-
-		// Should still have 2 real pictures
-		assertEquals(2, hslf.getPictures().length);
-		// Both are real pictures, both WMF
-		assertEquals(Picture.WMF, hslf.getPictures()[0].getType());
-		assertEquals(Picture.WMF, hslf.getPictures()[1].getType());
-
-		// TODO: DISABLED: Pending bug #41176
-
-		// Now test what happens when we use the SlideShow interface
-		//SlideShow ppt = new SlideShow(hslf);
-	}
-}
+/* ====================================================================
+   Copyright 2002-2004   Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hslf.usermodel;
+
+import org.apache.poi.hslf.*;
+import org.apache.poi.hslf.blip.*;
+import org.apache.poi.hslf.model.*;
+import junit.framework.TestCase;
+
+import java.io.*;
+import java.util.Arrays;
+
+/**
+ * Test adding/reading pictures
+ *
+ * @author Yegor Kozlov
+ */
+public class TestPictures extends TestCase{
+
+    protected File cwd;
+
+    public void setUp() throws Exception {
+        cwd = new File(System.getProperty("HSLF.testdata.path"));
+    }
+
+    /**
+     * Test read/write Macintosh PICT
+     */
+    public void testPICT() throws Exception {
+        SlideShow ppt = new SlideShow();
+
+        Slide slide = ppt.createSlide();
+        File img = new File(cwd, "cow.pict");
+        int idx = ppt.addPicture(img, Picture.PICT);
+        Picture pict = new Picture(idx);
+        assertEquals(idx, pict.getPictureIndex());
+        slide.addShape(pict);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ppt.write(out);
+        out.close();
+
+        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
+
+        //make sure we can read this picture shape and it refers to the correct picture data
+        Shape[] sh = ppt.getSlides()[0].getShapes();
+        assertEquals(1, sh.length);
+        pict = (Picture)sh[0];
+        assertEquals(idx, pict.getPictureIndex());
+
+        //check picture data
+        PictureData[] pictures = ppt.getPictureData();
+        //the Picture shape refers to the PictureData object in the Presentation
+        assertEquals(pict.getPictureData(), pictures[0]);
+
+        assertEquals(1, pictures.length);
+        assertEquals(Picture.PICT, pictures[0].getType());
+        assertTrue(pictures[0] instanceof PICT);
+        //compare the content of the initial file with what is stored in the PictureData
+        byte[] src_bytes = read(img);
+        byte[] ppt_bytes = pictures[0].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 = new byte[src_bytes.length-512];
+        System.arraycopy(src_bytes, 512, b1, 0, b1.length);
+        byte[] b2 = new byte[ppt_bytes.length-512];
+        System.arraycopy(ppt_bytes, 512, b2, 0, b2.length);
+        assertTrue(Arrays.equals(b1, b2));
+    }
+
+    /**
+     * Test read/write WMF
+     */
+    public void testWMF() throws Exception {
+        SlideShow ppt = new SlideShow();
+
+        Slide slide = ppt.createSlide();
+        File img = new File(cwd, "santa.wmf");
+        int idx = ppt.addPicture(img, Picture.WMF);
+        Picture pict = new Picture(idx);
+        assertEquals(idx, pict.getPictureIndex());
+        slide.addShape(pict);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ppt.write(out);
+        out.close();
+
+        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
+
+        //make sure we can read this picture shape and it refers to the correct picture data
+        Shape[] sh = ppt.getSlides()[0].getShapes();
+        assertEquals(1, sh.length);
+        pict = (Picture)sh[0];
+        assertEquals(idx, pict.getPictureIndex());
+
+        //check picture data
+        PictureData[] pictures = ppt.getPictureData();
+        //the Picture shape refers to the PictureData object in the Presentation
+        assertEquals(pict.getPictureData(), pictures[0]);
+
+        assertEquals(1, pictures.length);
+        assertEquals(Picture.WMF, pictures[0].getType());
+        assertTrue(pictures[0] instanceof WMF);
+        //compare the content of the initial file with what is stored in the PictureData
+        byte[] src_bytes = read(img);
+        byte[] ppt_bytes = pictures[0].getData();
+        assertEquals(src_bytes.length, ppt_bytes.length);
+        //in WMF the first 22 bytes - is a metafile header
+        byte[] b1 = new byte[src_bytes.length-22];
+        System.arraycopy(src_bytes, 22, b1, 0, b1.length);
+        byte[] b2 = new byte[ppt_bytes.length-22];
+        System.arraycopy(ppt_bytes, 22, b2, 0, b2.length);
+        assertTrue(Arrays.equals(b1, b2));
+    }
+
+    /**
+     * Test read/write EMF
+     */
+    public void testEMF() throws Exception {
+        SlideShow ppt = new SlideShow();
+
+        Slide slide = ppt.createSlide();
+        File img = new File(cwd, "wrench.emf");
+        int idx = ppt.addPicture(img, Picture.EMF);
+        Picture pict = new Picture(idx);
+        assertEquals(idx, pict.getPictureIndex());
+        slide.addShape(pict);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ppt.write(out);
+        out.close();
+
+        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
+
+        //make sure we can get this picture shape and it refers to the correct picture data
+        Shape[] sh = ppt.getSlides()[0].getShapes();
+        assertEquals(1, sh.length);
+        pict = (Picture)sh[0];
+        assertEquals(idx, pict.getPictureIndex());
+
+        //check picture data
+        PictureData[] pictures = ppt.getPictureData();
+        //the Picture shape refers to the PictureData object in the Presentation
+        assertEquals(pict.getPictureData(), pictures[0]);
+
+        assertEquals(1, pictures.length);
+        assertEquals(Picture.EMF, pictures[0].getType());
+        assertTrue(pictures[0] instanceof EMF);
+        //compare the content of the initial file with what is stored in the PictureData
+        byte[] src_bytes = read(img);
+        byte[] ppt_bytes = pictures[0].getData();
+        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
+    }
+
+    /**
+     * Test read/write PNG
+     */
+    public void testPNG() throws Exception {
+        SlideShow ppt = new SlideShow();
+
+        Slide slide = ppt.createSlide();
+        File img = new File(cwd, "tomcat.png");
+        int idx = ppt.addPicture(img, Picture.PNG);
+        Picture pict = new Picture(idx);
+        assertEquals(idx, pict.getPictureIndex());
+        slide.addShape(pict);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ppt.write(out);
+        out.close();
+
+        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
+
+        //make sure we can read this picture shape and it refers to the correct picture data
+        Shape[] sh = ppt.getSlides()[0].getShapes();
+        assertEquals(1, sh.length);
+        pict = (Picture)sh[0];
+        assertEquals(idx, pict.getPictureIndex());
+
+        //check picture data
+        PictureData[] pictures = ppt.getPictureData();
+        //the Picture shape refers to the PictureData object in the Presentation
+        assertEquals(pict.getPictureData(), pictures[0]);
+
+        assertEquals(1, pictures.length);
+        assertEquals(Picture.PNG, pictures[0].getType());
+        assertTrue(pictures[0] instanceof PNG);
+        //compare the content of the initial file with what is stored in the PictureData
+        byte[] src_bytes = read(img);
+        byte[] ppt_bytes = pictures[0].getData();
+        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
+    }
+
+    /**
+     * Test read/write JPEG
+     */
+    public void testJPEG() throws Exception {
+        SlideShow ppt = new SlideShow();
+
+        Slide slide = ppt.createSlide();
+        File img = new File(cwd, "clock.jpg");
+        int idx = ppt.addPicture(img, Picture.JPEG);
+        Picture pict = new Picture(idx);
+        assertEquals(idx, pict.getPictureIndex());
+        slide.addShape(pict);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ppt.write(out);
+        out.close();
+
+        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
+
+        //make sure we can read this picture shape and it refers to the correct picture data
+        Shape[] sh = ppt.getSlides()[0].getShapes();
+        assertEquals(1, sh.length);
+        pict = (Picture)sh[0];
+        assertEquals(idx, pict.getPictureIndex());
+
+        //check picture data
+        PictureData[] pictures = ppt.getPictureData();
+        //the Picture shape refers to the PictureData object in the Presentation
+        assertEquals(pict.getPictureData(), pictures[0]);
+
+        assertEquals(1, pictures.length);
+        assertEquals(Picture.JPEG, pictures[0].getType());
+        assertTrue(pictures[0] instanceof JPEG);
+        //compare the content of the initial file with what is stored in the PictureData
+        byte[] src_bytes = read(img);
+        byte[] ppt_bytes = pictures[0].getData();
+        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
+    }
+
+    /**
+     * Test read/write DIB
+     */
+    public void testDIB() throws Exception {
+        SlideShow ppt = new SlideShow();
+
+        Slide slide = ppt.createSlide();
+        File img = new File(cwd, "sci_cec.dib");
+        
+        // Check we can read the test DIB image
+        assertTrue(img.exists());
+        
+        // Add the image
+        int idx = ppt.addPicture(img, Picture.DIB);
+        Picture pict = new Picture(idx);
+        assertEquals(idx, pict.getPictureIndex());
+        slide.addShape(pict);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ppt.write(out);
+        out.close();
+
+        ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray())));
+
+        //make sure we can read this picture shape and it refers to the correct picture data
+        Shape[] sh = ppt.getSlides()[0].getShapes();
+        assertEquals(1, sh.length);
+        pict = (Picture)sh[0];
+        assertEquals(idx, pict.getPictureIndex());
+
+        //check picture data
+        PictureData[] pictures = ppt.getPictureData();
+        //the Picture shape refers to the PictureData object in the Presentation
+        assertEquals(pict.getPictureData(), pictures[0]);
+
+        assertEquals(1, pictures.length);
+        assertEquals(Picture.DIB, pictures[0].getType());
+        assertTrue(pictures[0] instanceof DIB);
+        //compare the content of the initial file with what is stored in the PictureData
+        byte[] src_bytes = read(img);
+        byte[] ppt_bytes = pictures[0].getData();
+        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
+    }
+
+    /**
+     * Read file into a byte array
+     */
+    protected byte[] read(File f) throws IOException {
+        byte[] bytes = new byte[(int)f.length()];
+        FileInputStream is = new FileInputStream(f);
+        is.read(bytes);
+        is.close();
+        return bytes;
+    }
+
+    /**
+     * Read pictures in different formats from a reference slide show
+     */
+    public void testReadPictures() throws Exception {
+
+        byte[] src_bytes, ppt_bytes, b1, b2;
+        Picture pict;
+        PictureData pdata;
+
+        SlideShow ppt = new SlideShow(new HSLFSlideShow(new File(cwd, "pictures.ppt").getPath()));
+        Slide[] slides = ppt.getSlides();
+        PictureData[] pictures = ppt.getPictureData();
+        assertEquals(5, pictures.length);
+
+        pict = (Picture)slides[0].getShapes()[0]; //the first slide contains JPEG
+        pdata = pict.getPictureData();
+        assertTrue(pdata instanceof JPEG);
+        assertEquals(Picture.JPEG, pdata.getType());
+        src_bytes = pdata.getData();
+        ppt_bytes = read(new File(cwd, "clock.jpg"));
+        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
+
+        pict = (Picture)slides[1].getShapes()[0]; //the second slide contains PNG
+        pdata = pict.getPictureData();
+        assertTrue(pdata instanceof PNG);
+        assertEquals(Picture.PNG, pdata.getType());
+        src_bytes = pdata.getData();
+        ppt_bytes = read(new File(cwd, "tomcat.png"));
+        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
+
+        pict = (Picture)slides[2].getShapes()[0]; //the third slide contains WMF
+        pdata = pict.getPictureData();
+        assertTrue(pdata instanceof WMF);
+        assertEquals(Picture.WMF, pdata.getType());
+        src_bytes = pdata.getData();
+        ppt_bytes = read(new File(cwd, "santa.wmf"));
+        assertEquals(src_bytes.length, ppt_bytes.length);
+        //ignore the first 22 bytes - it is a WMF metafile header
+        b1 = new byte[src_bytes.length-22];
+        System.arraycopy(src_bytes, 22, b1, 0, b1.length);
+        b2 = new byte[ppt_bytes.length-22];
+        System.arraycopy(ppt_bytes, 22, b2, 0, b2.length);
+        assertTrue(Arrays.equals(b1, b2));
+
+        pict = (Picture)slides[3].getShapes()[0]; //the forth slide contains PICT
+        pdata = pict.getPictureData();
+        assertTrue(pdata instanceof PICT);
+        assertEquals(Picture.PICT, pdata.getType());
+        src_bytes = pdata.getData();
+        ppt_bytes = read(new File(cwd, "cow.pict"));
+        assertEquals(src_bytes.length, ppt_bytes.length);
+        //ignore the first 512 bytes - it is a MAC specific crap
+        b1 = new byte[src_bytes.length-512];
+        System.arraycopy(src_bytes, 512, b1, 0, b1.length);
+        b2 = new byte[ppt_bytes.length-512];
+        System.arraycopy(ppt_bytes, 512, b2, 0, b2.length);
+        assertTrue(Arrays.equals(b1, b2));
+
+        pict = (Picture)slides[4].getShapes()[0]; //the fifth slide contains EMF
+        pdata = pict.getPictureData();
+        assertTrue(pdata instanceof EMF);
+        assertEquals(Picture.EMF, pdata.getType());
+        src_bytes = pdata.getData();
+        ppt_bytes = read(new File(cwd, "wrench.emf"));
+        assertTrue(Arrays.equals(src_bytes, ppt_bytes));
+
+    }
+
+	/**
+	 * Test that on a party corrupt powerpoint document, which has 
+	 *  crazy pictures of type 0, we do our best.
+	 */
+	public void testZeroPictureType() throws Exception {
+		HSLFSlideShow hslf = new HSLFSlideShow(new File(cwd, "PictureTypeZero.ppt").getPath());
+
+		// Should still have 2 real pictures
+		assertEquals(2, hslf.getPictures().length);
+		// Both are real pictures, both WMF
+		assertEquals(Picture.WMF, hslf.getPictures()[0].getType());
+		assertEquals(Picture.WMF, hslf.getPictures()[1].getType());
+
+		// TODO: DISABLED: Pending bug #41176
+
+		// Now test what happens when we use the SlideShow interface
+		//SlideShow ppt = new SlideShow(hslf);
+	}
+}

Modified: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/model/TestSavedByTable.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/model/TestSavedByTable.java?view=diff&rev=489760&r1=489759&r2=489760
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/model/TestSavedByTable.java (original)
+++ jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/model/TestSavedByTable.java Fri Dec 22 12:56:04 2006
@@ -1,91 +1,91 @@
-
-/* ====================================================================
-   Copyright 2002-2004   Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-
-
-package org.apache.poi.hwpf.model;
-
-import java.io.*;
-import java.util.*;
-import junit.framework.*;
-
-import org.apache.poi.hwpf.*;
-import org.apache.poi.hwpf.model.*;
-import org.apache.poi.util.*;
-
-/**
- * Unit test for {@link SavedByTable} and {@link SavedByEntry}.
- *
- * @author Daniel Noll
- */
-public class TestSavedByTable
-  extends TestCase
-{
-  /** Data dir */
-  private File testFile = new File(new File(System.getProperty("HWPF.testdata.path")), "saved-by-table.doc");
-
-  /** The expected entries in the test document. */
-  private List expected = Arrays.asList(new Object[] {
-    new SavedByEntry("cic22", "C:\\DOCUME~1\\phamill\\LOCALS~1\\Temp\\AutoRecovery save of Iraq - security.asd"),
-    new SavedByEntry("cic22", "C:\\DOCUME~1\\phamill\\LOCALS~1\\Temp\\AutoRecovery save of Iraq - security.asd"),
-    new SavedByEntry("cic22", "C:\\DOCUME~1\\phamill\\LOCALS~1\\Temp\\AutoRecovery save of Iraq - security.asd"),
-    new SavedByEntry("JPratt", "C:\\TEMP\\Iraq - security.doc"),
-    new SavedByEntry("JPratt", "A:\\Iraq - security.doc"),
-    new SavedByEntry("ablackshaw", "C:\\ABlackshaw\\Iraq - security.doc"),
-    new SavedByEntry("ablackshaw", "C:\\ABlackshaw\\A;Iraq - security.doc"),
-    new SavedByEntry("ablackshaw", "A:\\Iraq - security.doc"),
-    new SavedByEntry("MKhan", "C:\\TEMP\\Iraq - security.doc"),
-    new SavedByEntry("MKhan", "C:\\WINNT\\Profiles\\mkhan\\Desktop\\Iraq.doc")
-  });
-
-  /**
-   * Tests reading in the entries, comparing them against the expected entries.
-   * Then tests writing the document out and reading the entries yet again.
-   *
-   * @throws Exception if an unexpected error occurs.
-   */
-  public void testReadWrite()
-    throws Exception
-  {
-    // This document is widely available on the internet as "blair.doc".
-    // I tried stripping the content and saving the document but my version
-    // of Word (from Office XP) strips this table out.
-    InputStream stream = new BufferedInputStream(new FileInputStream(testFile));
-    HWPFDocument doc;
-    try
-    {
-      doc = new HWPFDocument(stream);
-    }
-    finally
-    {
-      stream.close();
-    }
-
-    // Check what we just read.
-    assertEquals("List of saved-by entries was not as expected",
-                 expected, doc.getSavedByTable().getEntries());
-
-    // Now write the entire document out, and read it back in...
-    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
-    doc.write(byteStream);
-    InputStream copyStream = new ByteArrayInputStream(byteStream.toByteArray());
-    HWPFDocument copy = new HWPFDocument(copyStream);
-
-    // And check again.
-    assertEquals("List of saved-by entries was incorrect after writing",
-                 expected, copy.getSavedByTable().getEntries());
-  }
-}
+
+/* ====================================================================
+   Copyright 2002-2004   Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+
+package org.apache.poi.hwpf.model;
+
+import java.io.*;
+import java.util.*;
+import junit.framework.*;
+
+import org.apache.poi.hwpf.*;
+import org.apache.poi.hwpf.model.*;
+import org.apache.poi.util.*;
+
+/**
+ * Unit test for {@link SavedByTable} and {@link SavedByEntry}.
+ *
+ * @author Daniel Noll
+ */
+public class TestSavedByTable
+  extends TestCase
+{
+  /** Data dir */
+  private File testFile = new File(new File(System.getProperty("HWPF.testdata.path")), "saved-by-table.doc");
+
+  /** The expected entries in the test document. */
+  private List expected = Arrays.asList(new Object[] {
+    new SavedByEntry("cic22", "C:\\DOCUME~1\\phamill\\LOCALS~1\\Temp\\AutoRecovery save of Iraq - security.asd"),
+    new SavedByEntry("cic22", "C:\\DOCUME~1\\phamill\\LOCALS~1\\Temp\\AutoRecovery save of Iraq - security.asd"),
+    new SavedByEntry("cic22", "C:\\DOCUME~1\\phamill\\LOCALS~1\\Temp\\AutoRecovery save of Iraq - security.asd"),
+    new SavedByEntry("JPratt", "C:\\TEMP\\Iraq - security.doc"),
+    new SavedByEntry("JPratt", "A:\\Iraq - security.doc"),
+    new SavedByEntry("ablackshaw", "C:\\ABlackshaw\\Iraq - security.doc"),
+    new SavedByEntry("ablackshaw", "C:\\ABlackshaw\\A;Iraq - security.doc"),
+    new SavedByEntry("ablackshaw", "A:\\Iraq - security.doc"),
+    new SavedByEntry("MKhan", "C:\\TEMP\\Iraq - security.doc"),
+    new SavedByEntry("MKhan", "C:\\WINNT\\Profiles\\mkhan\\Desktop\\Iraq.doc")
+  });
+
+  /**
+   * Tests reading in the entries, comparing them against the expected entries.
+   * Then tests writing the document out and reading the entries yet again.
+   *
+   * @throws Exception if an unexpected error occurs.
+   */
+  public void testReadWrite()
+    throws Exception
+  {
+    // This document is widely available on the internet as "blair.doc".
+    // I tried stripping the content and saving the document but my version
+    // of Word (from Office XP) strips this table out.
+    InputStream stream = new BufferedInputStream(new FileInputStream(testFile));
+    HWPFDocument doc;
+    try
+    {
+      doc = new HWPFDocument(stream);
+    }
+    finally
+    {
+      stream.close();
+    }
+
+    // Check what we just read.
+    assertEquals("List of saved-by entries was not as expected",
+                 expected, doc.getSavedByTable().getEntries());
+
+    // Now write the entire document out, and read it back in...
+    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+    doc.write(byteStream);
+    InputStream copyStream = new ByteArrayInputStream(byteStream.toByteArray());
+    HWPFDocument copy = new HWPFDocument(copyStream);
+
+    // And check again.
+    assertEquals("List of saved-by entries was incorrect after writing",
+                 expected, copy.getSavedByTable().getEntries());
+  }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/