]> source.dussan.org Git - poi.git/commitdiff
Test that shows we handle word floating and fixed pictures properly
authorNick Burch <nick@apache.org>
Tue, 28 Sep 2010 11:46:22 +0000 (11:46 +0000)
committerNick Burch <nick@apache.org>
Tue, 28 Sep 2010 11:46:22 +0000 (11:46 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1002123 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java
test-data/document/FloatingPictures.doc [new file with mode: 0644]

index 00a19b30d8d440ccecef9341adb603781b2d9c1f..d0a8341ff9d3f77fb0e6e8063679ac30fc5a490b 100644 (file)
@@ -985,7 +985,7 @@ public abstract class CHPAbstractType
 
     /**
      *
-     * @return  the fSpec field value.
+     * @return is the fSpec field value set? (Also known as sprmCFSpec)
      */
     public boolean isFSpec()
     {
index ee34f4b724116dcc8e68b1ea1ce549a33bc8cc19..fbc5bb35760950dea9c7899d2328d609442c5bf6 100644 (file)
@@ -261,4 +261,45 @@ public final class TestPictures extends TestCase {
        assertEquals("10a8", picture.suggestFullFileName());
        assertEquals("image/unknown", picture.getMimeType());
     }
+    
+    /**
+     * In word you can have floating or fixed pictures.
+     * Fixed have a \u0001 in place with an offset to the
+     *  picture data.
+     * Floating have a \u0008 in place, which references a
+     *  \u0001 which has the offset. More than one can
+     *  reference the same \u0001
+     */
+    public void testFloatingPictures() throws Exception {
+       HWPFDocument doc = HWPFTestDataSamples.openSampleFile("FloatingPictures.doc");
+       PicturesTable pictures = doc.getPicturesTable();
+       
+       // There are 19 images in the picture, but some are
+       //  duplicate floating ones
+       assertEquals(17, pictures.getAllPictures().size());
+       
+       int plain8s = 0;
+       int escher8s = 0;
+       int image1s = 0;
+       
+       Range r = doc.getRange();
+       for(int np=0; np < r.numParagraphs(); np++) {
+          Paragraph p = r.getParagraph(np);
+          for(int nc=0; nc < p.numCharacterRuns(); nc++) {
+             CharacterRun cr = p.getCharacterRun(nc);
+             if(pictures.hasPicture(cr)) {
+                image1s++;
+             } else if(pictures.hasEscherPicture(cr)) {
+                escher8s++;
+             } else if(cr.text().startsWith("\u0008")) {
+                plain8s++;
+             }
+          }
+       }
+       // Total is 20, as the 4 escher 8s all reference
+       //  the same regular image
+       assertEquals(16, image1s);
+       assertEquals(4,  escher8s);
+       assertEquals(0, plain8s);
+    }
 }
diff --git a/test-data/document/FloatingPictures.doc b/test-data/document/FloatingPictures.doc
new file mode 100644 (file)
index 0000000..15b06cf
Binary files /dev/null and b/test-data/document/FloatingPictures.doc differ