aboutsummaryrefslogtreecommitdiff
path: root/tests/docx/body_xml_tests.py
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-05-12 22:31:20 +0100
committerMichael Williamson <mike@zwobble.org>2016-05-12 22:31:20 +0100
commitbd222b2b8cc8d2e95edfbe83a3ef41a2d44be747 (patch)
treebaa50c0e875ef560d62ecf6a9432efab31f05fd4 /tests/docx/body_xml_tests.py
parent009d8ecdba61cc6d459d3ef87baa1d2cd3095035 (diff)
Add reading of rowspan
Diffstat (limited to 'tests/docx/body_xml_tests.py')
-rw-r--r--tests/docx/body_xml_tests.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/docx/body_xml_tests.py b/tests/docx/body_xml_tests.py
index 8fb35cf..2773398 100644
--- a/tests/docx/body_xml_tests.py
+++ b/tests/docx/body_xml_tests.py
@@ -247,6 +247,88 @@ class ReadXmlElementTests(object):
@istest
+ def vmerge_is_read_as_rowspan_for_table_cell(self):
+ element = xml_element("w:tbl", {}, [
+ w_tr(w_tc()),
+ w_tr(w_tc(properties=[w_vmerge("restart")])),
+ w_tr(w_tc(properties=[w_vmerge("continue")])),
+ w_tr(w_tc(properties=[w_vmerge("continue")])),
+ w_tr(w_tc())
+ ])
+ result = _read_and_get_document_xml_element(element)
+ expected_result = documents.table([
+ documents.table_row([documents.table_cell([])]),
+ documents.table_row([documents.table_cell([], rowspan=3)]),
+ documents.table_row([]),
+ documents.table_row([]),
+ documents.table_row([documents.table_cell([])]),
+ ])
+ assert_equal(expected_result, result)
+
+
+ @istest
+ def vmerge_without_val_is_treated_as_continue(self):
+ element = xml_element("w:tbl", {}, [
+ w_tr(w_tc(properties=[w_vmerge("restart")])),
+ w_tr(w_tc(properties=[w_vmerge(None)])),
+ ])
+ result = _read_and_get_document_xml_element(element)
+ expected_result = documents.table([
+ documents.table_row([documents.table_cell([], rowspan=2)]),
+ documents.table_row([]),
+ ])
+ assert_equal(expected_result, result)
+
+
+ @istest
+ def vmerge_accounts_for_cells_spanning_columns(self):
+ element = xml_element("w:tbl", {}, [
+ w_tr(w_tc(), w_tc(), w_tc(properties=[w_vmerge("restart")])),
+ w_tr(w_tc(properties=[w_gridspan("2")]), w_tc(properties=[w_vmerge("continue")])),
+ w_tr(w_tc(), w_tc(), w_tc(properties=[w_vmerge("continue")])),
+ w_tr(w_tc(), w_tc(), w_tc()),
+ ])
+ result = _read_and_get_document_xml_element(element)
+ expected_result = documents.table([
+ documents.table_row([documents.table_cell([]), documents.table_cell([]), documents.table_cell([], rowspan=3)]),
+ documents.table_row([documents.table_cell([], colspan=2)]),
+ documents.table_row([documents.table_cell([]), documents.table_cell([])]),
+ documents.table_row([documents.table_cell([]), documents.table_cell([]), documents.table_cell([])]),
+ ])
+ assert_equal(expected_result, result)
+
+
+ @istest
+ def no_vertical_cell_merging_if_merged_cells_do_not_line_up(self):
+ element = xml_element("w:tbl", {}, [
+ w_tr(w_tc(properties=[w_gridspan("2")]), w_tc(properties=[w_vmerge("restart")])),
+ w_tr(w_tc(), w_tc(properties=[w_vmerge("continue")])),
+ ])
+ result = _read_and_get_document_xml_element(element)
+ expected_result = documents.table([
+ documents.table_row([documents.table_cell([], colspan=2), documents.table_cell([])]),
+ documents.table_row([documents.table_cell([]), documents.table_cell([])]),
+ ])
+ assert_equal(expected_result, result)
+
+
+ @istest
+ def warning_if_non_row_in_table(self):
+ element = xml_element("w:tbl", {}, [xml_element("w:p")])
+ result = _read_document_xml_element(element)
+ expected_warning = results.warning("unexpected non-row element in table, cell merging may be incorrect")
+ assert_equal([expected_warning], result.messages)
+
+
+ @istest
+ def warning_if_non_cell_in_table_row(self):
+ element = xml_element("w:tbl", {}, [w_tr(xml_element("w:p"))])
+ result = _read_document_xml_element(element)
+ expected_warning = results.warning("unexpected non-cell element in table row, cell merging may be incorrect")
+ assert_equal([expected_warning], result.messages)
+
+
+ @istest
def children_of_w_ins_are_converted_normally(self):
element = xml_element("w:p", {}, [
xml_element("w:ins", {}, [
@@ -662,3 +744,16 @@ def _linked_blip(relationship_id):
def _blip(attributes):
return xml_element("a:blip", attributes)
+
+
+def w_tr(*children):
+ return xml_element("w:tr", {}, children)
+
+def w_tc(properties=None, *children):
+ return xml_element("w:tc", {}, [xml_element("w:tcPr", {}, properties)] + list(children))
+
+def w_gridspan(val):
+ return xml_element("w:gridSpan", {"w:val": val})
+
+def w_vmerge(val):
+ return xml_element("w:vMerge", {"w:val": val})