Test that shows we handle word floating and fixed pictures properly

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1002123 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2010-09-28 11:46:22 +00:00
parent 7d9e12864a
commit 7033853c36
3 changed files with 42 additions and 1 deletions

View 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()
{

View 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);
}
}

Binary file not shown.