diff options
Diffstat (limited to 'src/test/java')
3 files changed, 139 insertions, 3 deletions
diff --git a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java index 04d8aef..17cd18e 100644 --- a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java +++ b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java @@ -13,7 +13,8 @@ import static com.natpryce.makeiteasy.MakeItEasy.with; import static com.natpryce.makeiteasy.Property.newProperty; import static org.zwobble.mammoth.internal.util.Lists.list; -public class DocumentElementMakers { +public class +DocumentElementMakers { public static final Property<DocumentElement, Optional<Style>> STYLE = newProperty(); public static final Property<Paragraph, Optional<NumberingLevel>> NUMBERING = newProperty(); public static final Property<Run, Boolean> BOLD = newProperty(); @@ -42,6 +43,7 @@ public class DocumentElementMakers { public static final Instantiator<TableCell> TABLE_CELL = propertyLookup -> new TableCell( + 1, propertyLookup.valueOf(COLSPAN, 1), propertyLookup.valueOf(CHILDREN, list())); 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 0752d3a..f67560c 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java @@ -36,6 +36,7 @@ import static org.zwobble.mammoth.tests.ResultMatchers.isInternalResult; import static org.zwobble.mammoth.tests.documents.DocumentElementMakers.*; import static org.zwobble.mammoth.tests.docx.BodyXmlReaderMakers.*; import static org.zwobble.mammoth.tests.docx.BodyXmlReaderMakers.NUMBERING; +import static org.zwobble.mammoth.tests.docx.OfficeXmlBuilders.*; public class BodyXmlTests { @@ -324,7 +325,7 @@ public class BodyXmlTests { readSuccess(a(bodyReader), element), deepEquals(new Table(list( new TableRow(list( - new TableCell(1, list( + new TableCell(1, 1, list( make(a(PARAGRAPH)) )) )) @@ -346,7 +347,7 @@ public class BodyXmlTests { readSuccess(a(bodyReader), element), deepEquals(new Table(list( new TableRow(list( - new TableCell(2, list( + new TableCell(1, 2, list( make(a(PARAGRAPH)) )) )) @@ -355,6 +356,110 @@ public class BodyXmlTests { } @Test + public void vmergeIsReadAsRowspanForTableCell() { + XmlElement element = element("w:tbl", list( + wTr(wTc()), + wTr(wTc(wTcPr(wVmerge("restart")))), + wTr(wTc(wTcPr(wVmerge("continue")))), + wTr(wTc(wTcPr(wVmerge("continue")))), + wTr(wTc()) + )); + + assertThat( + readSuccess(a(bodyReader), element), + deepEquals(new Table(list( + new TableRow(list(new TableCell(1, 1, list()))), + new TableRow(list(new TableCell(3, 1, list()))), + new TableRow(list()), + new TableRow(list()), + new TableRow(list(new TableCell(1, 1, list()))) + ))) + ); + } + + @Test + public void vmergeWithoutValIsTreatedAsContinue() { + XmlElement element = element("w:tbl", list( + wTr(wTc(wTcPr(wVmerge("restart")))), + wTr(wTc(wTcPr(element("w:vMerge")))) + )); + + assertThat( + readSuccess(a(bodyReader), element), + deepEquals(new Table(list( + new TableRow(list(new TableCell(2, 1, list()))), + new TableRow(list()) + ))) + ); + } + + @Test + public void vmergeAccountsForCellsSpanningColumns() { + XmlElement element = element("w:tbl", list( + wTr(wTc(), wTc(), wTc(wTcPr(wVmerge("restart")))), + wTr(wTc(wTcPr(wGridspan("2"))), wTc(wTcPr(wVmerge("continue")))), + wTr(wTc(), wTc(), wTc(wTcPr(wVmerge("continue")))), + wTr(wTc(), wTc(), wTc()) + )); + + assertThat( + readSuccess(a(bodyReader), element), + deepEquals(new Table(list( + new TableRow(list(new TableCell(1, 1, list()), new TableCell(1, 1, list()), new TableCell(3, 1, list()))), + new TableRow(list(new TableCell(1, 2, list()))), + new TableRow(list(new TableCell(1, 1, list()), new TableCell(1, 1, list()))), + new TableRow(list(new TableCell(1, 1, list()), new TableCell(1, 1, list()), new TableCell(1, 1, list()))) + ))) + ); + } + + @Test + public void noVerticalCellMergingIfMergedCellsDoNotLineUp() { + XmlElement element = element("w:tbl", list( + wTr(wTc(wTcPr(wGridspan("2"))), wTc(wTcPr(wVmerge("restart")))), + wTr(wTc(), wTc(wTcPr(wVmerge("continue")))) + )); + + assertThat( + readSuccess(a(bodyReader), element), + deepEquals(new Table(list( + new TableRow(list(new TableCell(1, 2, list()), new TableCell(1, 1, list()))), + new TableRow(list(new TableCell(1, 1, list()), new TableCell(1, 1, list()))) + ))) + ); + } + + @Test + public void warningIfNonRowInTable() { + XmlElement element = element("w:tbl", list( + element("w:p") + )); + + assertThat( + read(a(bodyReader), element), + isInternalResult( + deepEquals(new Table(list(make(a(PARAGRAPH))))), + list("unexpected non-row element in table, cell merging may be incorrect") + ) + ); + } + + @Test + public void warningIfNonCellInTableRow() { + XmlElement element = element("w:tbl", list( + wTr(element("w:p")) + )); + + assertThat( + read(a(bodyReader), element), + isInternalResult( + deepEquals(new Table(list(new TableRow(list(make(a(PARAGRAPH))))))), + list("unexpected non-cell element in table row, cell merging may be incorrect") + ) + ); + } + + @Test public void hyperlinkIsReadIfItHasARelationshipId() { Relationships relationships = new Relationships( map("r42", new Relationship("http://example.com"))); diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/OfficeXmlBuilders.java b/src/test/java/org/zwobble/mammoth/tests/docx/OfficeXmlBuilders.java new file mode 100644 index 0000000..71c2cba --- /dev/null +++ b/src/test/java/org/zwobble/mammoth/tests/docx/OfficeXmlBuilders.java @@ -0,0 +1,29 @@ +package org.zwobble.mammoth.tests.docx; + +import org.zwobble.mammoth.internal.xml.XmlElement; + +import static java.util.Arrays.asList; +import static org.zwobble.mammoth.internal.util.Maps.map; +import static org.zwobble.mammoth.internal.xml.XmlNodes.element; + +public class OfficeXmlBuilders { + public static XmlElement wTr(XmlElement... children) { + return element("w:tr", asList(children)); + } + + public static XmlElement wTc(XmlElement... children) { + return element("w:tc", asList(children)); + } + + public static XmlElement wTcPr(XmlElement... children) { + return element("w:tcPr", asList(children)); + } + + public static XmlElement wGridspan(String val) { + return element("w:gridSpan", map("w:val", val)); + } + + public static XmlElement wVmerge(String val) { + return element("w:vMerge", map("w:val", val)); + } +} |
