aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
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/zwobble/mammoth/tests/docx/BodyXmlTests.java
parentdb126d0087963aad877efca233fb1123e9872051 (diff)
Add support for reading table cells spanning multiple rows
Diffstat (limited to 'src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java')
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java109
1 files changed, 107 insertions, 2 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 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")));