From ee8125f348fca043a66d2994949d25bf864bc786 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 29 Mar 2007 17:36:37 +0000 Subject: [PATCH] Apply Trejkax's fix from bug #41653, and do a whole load of tests for the HWPF picture stuff. Includes a stub test for the problem identified in bug #41898 git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@523777 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hwpf/usermodel/Picture.java | 14 +- .../apache/poi/hwpf/data/emf_2003_image.doc | Bin 0 -> 24064 bytes .../poi/hwpf/usermodel/TestPictures.java | 154 ++++++++++++++++++ 3 files changed, 163 insertions(+), 5 deletions(-) create mode 100644 src/scratchpad/testcases/org/apache/poi/hwpf/data/emf_2003_image.doc create mode 100644 src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java index 535b834cbd..e9ee228c12 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java @@ -223,11 +223,15 @@ public class Picture } else if (matchSignature(_dataStream, TIFF, pictureBytesStartOffset) || matchSignature(_dataStream, TIFF1, pictureBytesStartOffset)) { return "tiff"; - } else if (matchSignature(content, WMF1, 0) || - matchSignature(content, WMF2, 0)) { - return "wmf"; - } else if (matchSignature(content, EMF, 0)) { - return "emf"; + } else { + // Need to load the image content before we can try the following tests + fillImageContent(); + + if (matchSignature(content, WMF1, 0) || matchSignature(content, WMF2, 0)) { + return "wmf"; + } else if (matchSignature(content, EMF, 0)) { + return "emf"; + } } // TODO: DIB, PICT return ""; diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/data/emf_2003_image.doc b/src/scratchpad/testcases/org/apache/poi/hwpf/data/emf_2003_image.doc new file mode 100644 index 0000000000000000000000000000000000000000..a475813c87c1a2eaeaa8d39d2ad23dc386013a9a GIT binary patch literal 24064 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 Ot?cW%-x_{v5cm)CzXQ|& literal 0 HcmV?d00001 diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java new file mode 100644 index 0000000000..686e558c84 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java @@ -0,0 +1,154 @@ +/* +* 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.hwpf.usermodel; + +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.util.Iterator; +import java.util.List; + +import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.model.TextPiece; +import org.apache.poi.hwpf.usermodel.Paragraph; +import org.apache.poi.hwpf.usermodel.Range; +import org.apache.poi.util.LittleEndian; + +import junit.framework.TestCase; + +/** + * Test the picture handling + * + * @author Nick Burch (nick at torchbox dot com) + */ +public class TestPictures extends TestCase { + private String dirname = System.getProperty("HWPF.testdata.path"); + + protected void setUp() throws Exception { + } + + /** + * two jpegs + */ + public void testTwoImages() throws Exception { + HWPFDocument doc = new HWPFDocument(new FileInputStream(dirname + "/two_images.doc")); + List pics = doc.getPicturesTable().getAllPictures(); + + assertNotNull(pics); + assertEquals(pics.size(), 2); + for(int i=0; i 128); + + // Check right contents + byte[] emf = loadImage("vector_image.emf"); + byte[] pemf = pic.getContent(); + assertEquals(emf.length, pemf.length); + for(int i=0; i -1 ) { + b.write(buf, 0, read); + } + return b.toByteArray(); + } +} -- 2.39.5