aboutsummaryrefslogtreecommitdiff
path: root/tests/docx/body_xml_tests.py
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-06-08 00:22:01 +0100
committerMichael Williamson <mike@zwobble.org>2025-06-08 00:22:01 +0100
commit80e9fd089494996def1e2529d1fa127d3ee796dd (patch)
treeb54aa0b0959e5c83c43a78958669070e95e3fae8 /tests/docx/body_xml_tests.py
parentcc1ad1d283264284e10beeff33b140abc16156d3 (diff)
Handle SDTs representing checkboxes wrapped in other elements
Diffstat (limited to 'tests/docx/body_xml_tests.py')
-rw-r--r--tests/docx/body_xml_tests.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/docx/body_xml_tests.py b/tests/docx/body_xml_tests.py
index 424c2f5..994583e 100644
--- a/tests/docx/body_xml_tests.py
+++ b/tests/docx/body_xml_tests.py
@@ -788,6 +788,89 @@ class CheckboxTests:
assert_that(result, is_checkbox(checked=True))
+ def test_when_structured_document_tag_checkbox_has_sdt_content_then_checkbox_replaces_single_character(self):
+ element = xml_element("w:tbl", {}, [
+ w_tr(
+ xml_element("w:sdt", {}, [
+ xml_element("w:sdtPr", {}, [
+ xml_element("wordml:checkbox", {}, [
+ xml_element("wordml:checked", {"wordml:val": "1"}),
+ ]),
+ ]),
+ xml_element("w:sdtContent", {}, [
+ xml_element("w:tc", {}, [
+ xml_element("w:p", {}, [
+ xml_element("w:r", {}, [
+ xml_element("w:t", {}, [
+ xml_text("☐"),
+ ]),
+ ]),
+ ]),
+ ]),
+ ]),
+ ]),
+ ),
+ ])
+
+ result = _read_and_get_document_xml_element(element)
+
+ assert_equal(result, documents.table([
+ documents.table_row([
+ documents.table_cell([
+ documents.paragraph([
+ documents.run([
+ documents.checkbox(checked=True),
+ ]),
+ ]),
+ ]),
+ ]),
+ ]))
+
+ def test_when_structured_document_tag_checkbox_has_sdt_content_then_deleted_content_is_ignored(self):
+ element = xml_element("w:tbl", {}, [
+ w_tr(
+ xml_element("w:sdt", {}, [
+ xml_element("w:sdtPr", {}, [
+ xml_element("wordml:checkbox", {}, [
+ xml_element("wordml:checked", {"wordml:val": "1"}),
+ ]),
+ ]),
+ xml_element("w:sdtContent", {}, [
+ xml_element("w:tc", {}, [
+ xml_element("w:p", {}, [
+ xml_element("w:r", {}, [
+ xml_element("w:t", {}, [
+ xml_text("☐"),
+ ]),
+ ]),
+ xml_element("w:del", {}, [
+ xml_element("w:r", {}, [
+ xml_element("w:t", {}, [
+ xml_text("☐")
+ ])
+ ])
+ ]),
+ ]),
+ ]),
+ ]),
+ ]),
+ ),
+ ])
+
+ result = _read_and_get_document_xml_element(element)
+
+ assert_equal(result, documents.table([
+ documents.table_row([
+ documents.table_cell([
+ documents.paragraph([
+ documents.run([
+ documents.checkbox(checked=True),
+ ]),
+ ]),
+ ]),
+ ]),
+ ]))
+
def _complex_field_checkbox_paragraph(self, ff_data_children):
return xml_element("w:p", {}, [
xml_element("w:r", {}, [