diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-06-08 00:22:01 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-06-08 00:22:01 +0100 |
| commit | 80e9fd089494996def1e2529d1fa127d3ee796dd (patch) | |
| tree | b54aa0b0959e5c83c43a78958669070e95e3fae8 /tests/docx | |
| parent | cc1ad1d283264284e10beeff33b140abc16156d3 (diff) | |
Handle SDTs representing checkboxes wrapped in other elements
Diffstat (limited to 'tests/docx')
| -rw-r--r-- | tests/docx/body_xml_tests.py | 83 |
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", {}, [ |
