From 7fa2cbcfafd1acf12d288a578ee52dc893d2b874 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 8 Jun 2025 10:02:56 +0100 Subject: Handle SDTs representing checkboxes wrapped in other elements --- .../zwobble/mammoth/tests/docx/BodyXmlTests.java | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) (limited to 'src/test/java/org/zwobble') 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 7ab1ec0..a4b3bdd 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java @@ -765,6 +765,97 @@ public class BodyXmlTests { assertThat(result, isCheckbox(true)); } + @Test + public void whenStructuredDocumentTagCheckboxHasSdtContentThenCheckboxReplacesSingleCharacter() { + XmlElement element = element("w:tbl", list( + wTr( + element("w:sdt", list( + element("w:sdtPr", list( + element("wordml:checkbox", list( + element("wordml:checked", map("wordml:val", "1")) + )) + )), + element("w:sdtContent", list( + element("w:tc", list( + element("w:p", list( + element("w:r", list( + element("w:t", list( + textXml("☐") + )) + )) + )) + )) + )) + )) + ) + )); + + DocumentElement result = readSuccess(bodyReader(), element); + + assertThat(result, deepEquals(table(list( + tableRow(list( + tableCell( + withChildren( + paragraph(withChildren( + run(withChildren( + checkbox(true) + )) + )) + ) + ) + )) + )))); + } + + @Test + public void whenStructuredDocumentTagCheckboxHasSdtContentThenDeletedContentIsIgnored() { + XmlElement element = element("w:tbl", list( + wTr( + element("w:sdt", list( + element("w:sdtPr", list( + element("wordml:checkbox", list( + element("wordml:checked", map("wordml:val", "1")) + )) + )), + element("w:sdtContent", list( + element("w:tc", list( + element("w:p", list( + element("w:r", list( + element("w:t", list( + textXml("☐") + )) + )), + element("w:del", list( + element("w:r", list( + element("w:t", list( + textXml("☐") + )) + )) + )) + )) + )) + )) + )) + ) + )); + + DocumentElement result = readSuccess(bodyReader(), element); + + assertThat(result, deepEquals(table(list( + tableRow(list( + tableCell( + withChildren( + paragraph(withChildren( + run(withChildren( + checkbox(true) + )) + )) + ) + ) + )) + )))); + } + private XmlElement complexFieldCheckboxParagraph(List ffDataChildren) { return element("w:p", list( element("w:r", list( -- cgit v1.2.3