diff options
author | Javen O'Neal <onealj@apache.org> | 2016-07-17 13:25:02 +0000 |
---|---|---|
committer | Javen O'Neal <onealj@apache.org> | 2016-07-17 13:25:02 +0000 |
commit | 6e7bba8cac71e6cd9c262d8fd645c7f88796dffa (patch) | |
tree | eadee5c035e0737133e608d102acfcb6b5ffc79c | |
parent | 04de72e8723674a57833f76a20aa36a37579c396 (diff) | |
download | poi-6e7bba8cac71e6cd9c262d8fd645c7f88796dffa.tar.gz poi-6e7bba8cac71e6cd9c262d8fd645c7f88796dffa.zip |
bug 58190: push down XMLSlideShow tests to BaseTestSlideShow, add coverage for HSLFSlideShow
add tests for SlideShow.findPicture and SlideShow.addPicture
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1753073 13f79535-47bb-0310-9956-ffa450edef68
6 files changed, 183 insertions, 89 deletions
diff --git a/src/java/org/apache/poi/sl/usermodel/SlideShow.java b/src/java/org/apache/poi/sl/usermodel/SlideShow.java index 10f442ae68..e46ce243f8 100644 --- a/src/java/org/apache/poi/sl/usermodel/SlideShow.java +++ b/src/java/org/apache/poi/sl/usermodel/SlideShow.java @@ -18,7 +18,11 @@ package org.apache.poi.sl.usermodel; import java.awt.Dimension; -import java.io.*; +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.List; import org.apache.poi.sl.usermodel.PictureData.PictureType; @@ -91,6 +95,14 @@ public interface SlideShow< * @return the picture data reference */ PictureData addPicture(File pict, PictureType format) throws IOException; + + /** + * check if a picture with this picture data already exists in this presentation + * + * @param pictureData The picture data to find in the SlideShow + * @return {@code null} if picture data is not found in this slideshow + */ + PictureData findPictureData(byte[] pictureData); /** * Writes out the slideshow file the is represented by an instance of this diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java index 17a736859d..fe969d36b5 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java @@ -504,8 +504,12 @@ implements SlideShow<XSLFShape,XSLFTextParagraph> { /** * check if a picture with this picture data already exists in this presentation + * + * @param pictureData The picture data to find in the SlideShow + * @return {@code null} if picture data is not found in this slideshow */ - XSLFPictureData findPictureData(byte[] pictureData){ + @Override + public XSLFPictureData findPictureData(byte[] pictureData) { long checksum = IOUtils.calculateChecksum(pictureData); byte cs[] = new byte[LittleEndianConsts.LONG_SIZE]; LittleEndian.putLong(cs,0,checksum); diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java index 06e55aeca1..0e58d410c3 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java @@ -19,32 +19,37 @@ package org.apache.poi.xslf.usermodel; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; -import java.io.File; import java.io.IOException; -import java.io.InputStream; -import org.apache.poi.POIDataSamples; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackagePart; -import org.apache.poi.sl.usermodel.PictureData.PictureType; +import org.apache.poi.sl.usermodel.BaseTestSlideShow; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesMasterIdListEntry; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdListEntry; -public class TestXMLSlideShow { - private static final POIDataSamples slTests = POIDataSamples.getSlideShowInstance(); +public class TestXMLSlideShow extends BaseTestSlideShow { private OPCPackage pack; + + @Override + public XMLSlideShow createSlideShow() { + return new XMLSlideShow(); + } @Before public void setUp() throws Exception { pack = OPCPackage.open(slTests.openResourceAsStream("sample.pptx")); } + + @After + public void tearDown() throws IOException { + pack.revert(); + } @Test public void testContainsMainContentType() throws Exception { @@ -173,45 +178,4 @@ public class TestXMLSlideShow { xmlComments.close(); xml.close(); } - - @Test - public void addPicture_File() throws IOException { - XMLSlideShow xml = new XMLSlideShow(); - File f = slTests.getFile("clock.jpg"); - - assertEquals(0, xml.getPictureData().size()); - XSLFPictureData picture = xml.addPicture(f, PictureType.JPEG); - assertEquals(1, xml.getPictureData().size()); - assertSame(picture, xml.getPictureData().get(0)); - - xml.close(); - } - - @Test - public void addPicture_Stream() throws IOException { - XMLSlideShow xml = new XMLSlideShow(); - InputStream stream = slTests.openResourceAsStream("clock.jpg"); - - assertEquals(0, xml.getPictureData().size()); - XSLFPictureData picture = xml.addPicture(stream, PictureType.JPEG); - assertEquals(1, xml.getPictureData().size()); - assertSame(picture, xml.getPictureData().get(0)); - - xml.close(); - } - - /** also tests {@link XMLSlideShow#addPicture(byte[], PictureType)} */ - @Test - public void findPicture() throws IOException { - XMLSlideShow xml = new XMLSlideShow(); - byte[] data = slTests.readFile("clock.jpg"); - - assertNull(xml.findPictureData(data)); - XSLFPictureData picture = xml.addPicture(data, PictureType.JPEG); - XSLFPictureData found = xml.findPictureData(data); - assertNotNull(found); - assertEquals(picture, found); - - xml.close(); - } } diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java index 10990eaf4c..7903d2a9c7 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java @@ -42,35 +42,8 @@ import org.apache.poi.hslf.exceptions.HSLFException; import org.apache.poi.hslf.model.HeadersFooters; import org.apache.poi.hslf.model.MovieShape; import org.apache.poi.hslf.model.PPFont; -import org.apache.poi.hslf.record.Document; -import org.apache.poi.hslf.record.DocumentAtom; -import org.apache.poi.hslf.record.ExAviMovie; -import org.apache.poi.hslf.record.ExControl; -import org.apache.poi.hslf.record.ExEmbed; -import org.apache.poi.hslf.record.ExEmbedAtom; -import org.apache.poi.hslf.record.ExMCIMovie; -import org.apache.poi.hslf.record.ExObjList; -import org.apache.poi.hslf.record.ExObjListAtom; -import org.apache.poi.hslf.record.ExOleObjAtom; -import org.apache.poi.hslf.record.ExOleObjStg; -import org.apache.poi.hslf.record.ExVideoContainer; -import org.apache.poi.hslf.record.FontCollection; -import org.apache.poi.hslf.record.FontEntityAtom; -import org.apache.poi.hslf.record.HeadersFootersContainer; -import org.apache.poi.hslf.record.MainMaster; -import org.apache.poi.hslf.record.Notes; -import org.apache.poi.hslf.record.PersistPtrHolder; -import org.apache.poi.hslf.record.PositionDependentRecord; -import org.apache.poi.hslf.record.PositionDependentRecordContainer; -import org.apache.poi.hslf.record.Record; -import org.apache.poi.hslf.record.RecordContainer; -import org.apache.poi.hslf.record.RecordTypes; -import org.apache.poi.hslf.record.Slide; -import org.apache.poi.hslf.record.SlideListWithText; +import org.apache.poi.hslf.record.*; import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; -import org.apache.poi.hslf.record.SlidePersistAtom; -import org.apache.poi.hslf.record.TxMasterStyleAtom; -import org.apache.poi.hslf.record.UserEditAtom; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; @@ -768,16 +741,14 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap @Override public HSLFPictureData addPicture(byte[] data, PictureType format) throws IOException { - if (format == null || format.nativeId == -1) { - throw new IllegalArgumentException("Unsupported picture format: " + format); - } - - byte[] uid = HSLFPictureData.getChecksum(data); - - for (HSLFPictureData pd : getPictureData()) { - if (Arrays.equals(pd.getUID(), uid)) { - return pd; - } + if (format == null || format.nativeId == -1) { + throw new IllegalArgumentException("Unsupported picture format: " + format); + } + + HSLFPictureData pd = findPictureData(data); + if (pd != null) { + // identical picture was already added to the SlideShow + return pd; } EscherContainerRecord bstore; @@ -801,6 +772,7 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap bse.setRecordId(EscherBSERecord.RECORD_ID); bse.setOptions((short) (0x0002 | (format.nativeId << 4))); bse.setSize(pict.getRawData().length + 8); + byte[] uid = HSLFPictureData.getChecksum(data); bse.setUid(uid); bse.setBlipTypeMacOS((byte) format.nativeId); @@ -866,6 +838,24 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap } return addPicture(data, format); } + + /** + * check if a picture with this picture data already exists in this presentation + * + * @param pictureData The picture data to find in the SlideShow + * @return {@code null} if picture data is not found in this slideshow + */ + @Override + public HSLFPictureData findPictureData(byte[] pictureData) { + byte[] uid = HSLFPictureData.getChecksum(pictureData); + + for (HSLFPictureData pic : getPictureData()) { + if (Arrays.equals(pic.getUID(), uid)) { + return pic; + } + } + return null; + } /** * Add a font in this presentation diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestHSLFSlideShow.java b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestHSLFSlideShow.java new file mode 100644 index 0000000000..7f5385e352 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestHSLFSlideShow.java @@ -0,0 +1,35 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You 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 static org.junit.Assert.assertNotNull; + +import org.apache.poi.sl.usermodel.BaseTestSlideShow; +import org.junit.Test; + +public class TestHSLFSlideShow extends BaseTestSlideShow { + @Override + public HSLFSlideShow createSlideShow() { + return new HSLFSlideShow(); + } + + // make sure junit4 executes this test class + @Test + public void dummy() { + assertNotNull(createSlideShow()); + } +} diff --git a/src/testcases/org/apache/poi/sl/usermodel/BaseTestSlideShow.java b/src/testcases/org/apache/poi/sl/usermodel/BaseTestSlideShow.java new file mode 100644 index 0000000000..404e0da07e --- /dev/null +++ b/src/testcases/org/apache/poi/sl/usermodel/BaseTestSlideShow.java @@ -0,0 +1,89 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You 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.sl.usermodel; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.POIDataSamples; +import org.apache.poi.sl.usermodel.PictureData.PictureType; +import org.junit.Test; + +public abstract class BaseTestSlideShow { + protected static final POIDataSamples slTests = POIDataSamples.getSlideShowInstance(); + + public abstract SlideShow<?, ?> createSlideShow(); + + @Test + public void addPicture_File() throws IOException { + SlideShow<?,?> show = createSlideShow(); + File f = slTests.getFile("clock.jpg"); + + assertEquals(0, show.getPictureData().size()); + PictureData picture = show.addPicture(f, PictureType.JPEG); + assertEquals(1, show.getPictureData().size()); + assertSame(picture, show.getPictureData().get(0)); + + show.close(); + } + + @Test + public void addPicture_Stream() throws IOException { + SlideShow<?,?> show = createSlideShow(); + InputStream stream = slTests.openResourceAsStream("clock.jpg"); + + assertEquals(0, show.getPictureData().size()); + PictureData picture = show.addPicture(stream, PictureType.JPEG); + assertEquals(1, show.getPictureData().size()); + assertSame(picture, show.getPictureData().get(0)); + + show.close(); + } + + @Test + public void addPicture_ByteArray() throws IOException { + SlideShow<?,?> show = createSlideShow(); + byte[] data = slTests.readFile("clock.jpg"); + + assertEquals(0, show.getPictureData().size()); + PictureData picture = show.addPicture(data, PictureType.JPEG); + assertEquals(1, show.getPictureData().size()); + assertSame(picture, show.getPictureData().get(0)); + + show.close(); + } + + @Test + public void findPicture() throws IOException { + SlideShow<?,?> show = createSlideShow(); + byte[] data = slTests.readFile("clock.jpg"); + + assertNull(show.findPictureData(data)); + PictureData picture = show.addPicture(data, PictureType.JPEG); + PictureData found = show.findPictureData(data); + assertNotNull(found); + assertEquals(picture, found); + + show.close(); + } +} |