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 [EMAIL PROTECTED] SavedByTable} and [EMAIL PROTECTED] 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 [EMAIL PROTECTED] SavedByTable} and [EMAIL PROTECTED] 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: [EMAIL PROTECTED] Mailing List: http://jakarta.apache.org/site/mail2.html#poi The Apache Jakarta POI Project: http://jakarta.apache.org/poi/