diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-11-20 15:56:45 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-11-20 15:56:45 +0000 |
| commit | 076de3f0567b44e349f7f7af99e5c4ad215646a2 (patch) | |
| tree | 7e83c40fd37aa8d7c8586af9c464135968e1311f /src/test/java | |
| parent | 49105a4ae164dda057b4b883f19533048278138d (diff) | |
Handle hyperlinked wp:anchor and wp:inline elements
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java | 52 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/mammoth/tests/docx/DocumentMatchers.java | 5 |
2 files changed, 53 insertions, 4 deletions
diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java index ea3e3f3..71d8627 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java @@ -1944,6 +1944,42 @@ public class BodyXmlTests { assertThat(result, isInternalSuccess(empty())); } + @Test + public void canReadPicturesWithHyperlinkSpecifiedInDocumentProperties() throws IOException { + XmlElement element = element("w:drawing", list( + element("wp:inline", list( + element("wp:docPr", map(), list( + element("a:hlinkClick", map("r:id", "rId42")) + )), + graphicXml(embeddedBlipXml(IMAGE_RELATIONSHIP_ID)) + )) + )); + Relationships relationships = new Relationships(list( + imageRelationship(IMAGE_RELATIONSHIP_ID, "media/hat.png"), + hyperlinkRelationship("rId42", "http://example.com") + )); + Archive file = InMemoryArchive.fromStrings(map("word/media/hat.png", IMAGE_BYTES)); + + DocumentElement result = readSuccess( + bodyReader(relationships, file), + element + ); + + assertThat(result, isHyperlink( + hasHref("http://example.com"), + hasChildren( + isImage( + hasProperty("contentType", deepEquals(Optional.of("image/png"))) + ) + ) + )); + Image image = (Image) ((Hyperlink) result).getChildren().get(0); + assertThat( + toString(image.open()), + equalTo(IMAGE_BYTES) + ); + } + private XmlElement inlineImageXml(XmlElement blip, String description) { return inlineImageXml(blip, Optional.of(description), Optional.empty()); } @@ -1965,10 +2001,18 @@ public class BodyXmlTests { return list( element("wp:docPr", properties), - element("a:graphic", list( - element("a:graphicData", list( - element("pic:pic", list( - element("pic:blipFill", list(blip))))))))); + graphicXml(blip) + ); + } + + private XmlNode graphicXml(XmlElement blip) { + return element("a:graphic", list( + element("a:graphicData", list( + element("pic:pic", list( + element("pic:blipFill", list(blip)) + )) + )) + )); } private XmlElement embeddedBlipXml(String relationshipId) { diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/DocumentMatchers.java b/src/test/java/org/zwobble/mammoth/tests/docx/DocumentMatchers.java index 67e15f0..47c5d03 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/DocumentMatchers.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/DocumentMatchers.java @@ -122,4 +122,9 @@ public class DocumentMatchers { static Matcher<Hyperlink> hasNoTargetFrame() { return hasProperty("targetFrame", equalTo(Optional.empty())); } + + @SafeVarargs + static Matcher<DocumentElement> isImage(Matcher<? super Image>... matchers) { + return cast(Image.class, allOf(matchers)); + } } |
