summaryrefslogtreecommitdiff
path: root/tests/docx/xmlparser_tests.py
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-12-01 11:47:48 +0000
committerMichael Williamson <mike@zwobble.org>2013-12-01 11:47:48 +0000
commitf8d72dbba832db282a3ec04a5108fbd090f49a4f (patch)
treee86971aec308963c55afde6263091f6591bb08d8 /tests/docx/xmlparser_tests.py
parent833c867189d757efb5b13e1e783869a4039860de (diff)
Move docx reading into separate package
Diffstat (limited to 'tests/docx/xmlparser_tests.py')
-rw-r--r--tests/docx/xmlparser_tests.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/docx/xmlparser_tests.py b/tests/docx/xmlparser_tests.py
new file mode 100644
index 0000000..5e33778
--- /dev/null
+++ b/tests/docx/xmlparser_tests.py
@@ -0,0 +1,69 @@
+import io
+
+from nose.tools import istest, assert_equal
+
+from mammoth.docx.xmlparser import parse_xml, element as xml_element, text as xml_text
+
+
+@istest
+def can_parse_self_closing_element():
+ xml = _parse_xml_string(b"<body/>")
+ assert_equal(xml_element("body", {}, []), xml)
+
+
+@istest
+def can_parse_empty_element_with_separate_closing_tag():
+ xml = _parse_xml_string(b"<body></body>")
+ assert_equal(xml_element("body", {}, []), xml)
+
+
+@istest
+def can_parse_attributes_of_tag():
+ xml = _parse_xml_string(b"<body name='bob'></body>")
+ assert_equal(xml_element("body", {"name": "bob"}, []), xml)
+
+
+@istest
+def can_parse_text_element():
+ xml = _parse_xml_string(b"<body>Hello!</body>")
+ assert_equal(xml_element("body", {}, [xml_text("Hello!")]), xml)
+
+
+@istest
+def can_parse_text_element_before_new_tag():
+ xml = _parse_xml_string(b"<body>Hello!<br/></body>")
+ assert_equal(xml_element("body", {}, [xml_text("Hello!"), xml_element("br", {}, [])]), xml)
+
+
+@istest
+def can_parse_element_with_children():
+ xml = _parse_xml_string(b"<body><a/><b/></body>")
+ assert_equal([xml_element("a", {}, []), xml_element("b", {}, [])], xml.children)
+
+
+@istest
+def unmapped_namespaces_uris_are_included_in_braces_as_prefix():
+ xml = _parse_xml_string(b'<w:body xmlns:w="word"/>')
+ assert_equal("{word}body", xml.name)
+
+
+@istest
+def mapped_namespaces_uris_are_translated_using_namespace_map():
+ xml = _parse_xml_string(b'<w:body xmlns:w="word"/>', [("x", "word")])
+ assert_equal("x:body", xml.name)
+
+
+@istest
+def namespace_of_attributes_is_mapped_to_prefix():
+ xml = _parse_xml_string(b'<w:body xmlns:w="word" w:val="Hello!"/>', [("x", "word")])
+ assert_equal("Hello!", xml.attributes["x:val"])
+
+
+@istest
+def whitespace_between_xml_declaration_and_root_tag_is_ignored():
+ xml = _parse_xml_string(b'<?xml version="1.0" ?>\n<body/>')
+ assert_equal("body", xml.name)
+
+
+def _parse_xml_string(string, namespace_mapping=None):
+ return parse_xml(io.BytesIO(string), namespace_mapping)