aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-06-04 15:51:41 +0100
committerMichael Williamson <mike@zwobble.org>2016-06-04 15:53:03 +0100
commitc264e80c9d01289398d67b31307bc4d7eca27739 (patch)
tree5835208822a538a78f03dfa3f9dc0aed61fee6d1 /src/test/java/org
parentdb126d0087963aad877efca233fb1123e9872051 (diff)
Add support for reading table cells spanning multiple rows
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java4
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java109
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/OfficeXmlBuilders.java29
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));
+ }
+}