diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-12-01 11:51:38 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-12-01 11:51:38 +0000 |
| commit | d5acaf1071564a9997a330315ea99cdc1017bae7 (patch) | |
| tree | ffaee2557ff0fd4a2c69c19855293faa29b1277f /tests/docx/document_xml_tests.py | |
| parent | f8d72dbba832db282a3ec04a5108fbd090f49a4f (diff) | |
Move document.xml parsing to separate module
Diffstat (limited to 'tests/docx/document_xml_tests.py')
| -rw-r--r-- | tests/docx/document_xml_tests.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/docx/document_xml_tests.py b/tests/docx/document_xml_tests.py new file mode 100644 index 0000000..2771e2c --- /dev/null +++ b/tests/docx/document_xml_tests.py @@ -0,0 +1,82 @@ +from nose.tools import istest, assert_equal + +from mammoth import docx, documents +from mammoth.docx.xmlparser import element as xml_element, text as xml_text +from mammoth.docx.document_xml import read_document_xml_element + + +@istest +class ReadXmlElementTests(object): + @istest + def text_from_text_element_is_read(self): + element = _text_element("Hello!") + assert_equal(documents.Text("Hello!"), read_document_xml_element(element)) + + @istest + def can_read_text_within_run(self): + element = _run_element_with_text("Hello!") + assert_equal( + documents.Run([documents.Text("Hello!")]), + read_document_xml_element(element) + ) + + @istest + def can_read_text_within_paragraph(self): + element = _paragraph_element_with_text("Hello!") + assert_equal( + documents.paragraph([documents.Run([documents.Text("Hello!")])]), + read_document_xml_element(element) + ) + + @istest + def can_read_text_within_document(self): + element = _document_element_with_text("Hello!") + assert_equal( + documents.Document([documents.paragraph([documents.Run([documents.Text("Hello!")])])]), + read_document_xml_element(element) + ) + + @istest + def paragraph_has_no_style_if_it_has_no_properties(self): + element = xml_element("w:p") + assert_equal(None, read_document_xml_element(element).style_name) + + @istest + def paragraph_has_style_name_read_from_paragraph_properties_if_present(self): + style_xml = xml_element("w:pStyle", {"w:val": "Heading1"}) + properties_xml = xml_element("w:pPr", {}, [style_xml]) + paragraph_xml = xml_element("w:p", {}, [properties_xml]) + paragraph = read_document_xml_element(paragraph_xml) + assert_equal("Heading1", paragraph.style_name) + + @istest + def unrecognised_elements_are_ignored(self): + element = xml_element("w:huh", {}, []) + assert_equal(None, read_document_xml_element(element)) + + @istest + def unrecognised_children_are_ignored(self): + element = xml_element("w:r", {}, [_text_element("Hello!"), xml_element("w:huh", {}, [])]) + assert_equal( + documents.Run([documents.Text("Hello!")]), + read_document_xml_element(element) + ) + + +def _document_element_with_text(text): + return xml_element("w:document", {}, [ + xml_element("w:body", {}, [_paragraph_element_with_text(text)]) + ]) + + +def _paragraph_element_with_text(text): + return xml_element("w:p", {}, [_run_element_with_text(text)]) + + +def _run_element_with_text(text): + return xml_element("w:r", {}, [_text_element(text)]) + + +def _text_element(value): + return xml_element("w:t", {}, [xml_text(value)]) + |
