Skip to content

Commit 8ae8ba5

Browse files
author
Steve Canny
committed
oxml: add unit tests for serialize_for_reading()
1 parent d892000 commit 8ae8ba5

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

docx/compat.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ def is_string(obj):
2424
"""
2525
return isinstance(obj, str)
2626

27+
Unicode = str
28+
2729
# ===========================================================================
2830
# Python 2 versions
2931
# ===========================================================================
@@ -37,3 +39,5 @@ def is_string(obj):
3739
Return True if *obj* is a string, False otherwise.
3840
"""
3941
return isinstance(obj, basestring)
42+
43+
Unicode = unicode

docx/oxml/xmlchemy.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
import re
1313

14+
from ..compat import Unicode
15+
1416

1517
def serialize_for_reading(element):
1618
"""
@@ -21,7 +23,7 @@ def serialize_for_reading(element):
2123
return XmlString(xml)
2224

2325

24-
class XmlString(str):
26+
class XmlString(Unicode):
2527
"""
2628
Provides string comparison override suitable for serialized XML that is
2729
useful for tests.

tests/oxml/test_xmlchemy.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,43 @@
88

99
import pytest
1010

11-
from docx.oxml.xmlchemy import XmlString
11+
from docx.compat import Unicode
12+
from docx.oxml import parse_xml
13+
from docx.oxml.xmlchemy import serialize_for_reading, XmlString
14+
15+
16+
class DescribeSerializeForReading(object):
17+
18+
def it_pretty_prints_an_lxml_element(self, pretty_fixture):
19+
element, expected_xml_text = pretty_fixture
20+
xml_text = serialize_for_reading(element)
21+
assert xml_text == expected_xml_text
22+
23+
def it_returns_unicode_text(self, type_fixture):
24+
element = type_fixture
25+
xml_text = serialize_for_reading(element)
26+
assert isinstance(xml_text, Unicode)
27+
28+
# fixtures ---------------------------------------------
29+
30+
@pytest.fixture
31+
def pretty_fixture(self, element):
32+
expected_xml_text = (
33+
'<foø>\n'
34+
' <bår>text</bår>\n'
35+
'</foø>\n'
36+
)
37+
return element, expected_xml_text
38+
39+
@pytest.fixture
40+
def type_fixture(self, element):
41+
return element
42+
43+
# fixture components -----------------------------------
44+
45+
@pytest.fixture
46+
def element(self):
47+
return parse_xml('<foø><bår>text</bår></foø>')
1248

1349

1450
class DescribeXmlString(object):

0 commit comments

Comments
 (0)