diff --git a/django/test/testcases.py b/django/test/testcases.py
index 3c851f4bd4..dcab078553 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -58,19 +58,10 @@ class OutputChecker(doctest.OutputChecker):
Based on http://codespeak.net/svn/lxml/trunk/src/lxml/doctestcompare.py
"""
-
- # We use this to distinguish the output of repr() from an XML element:
- _repr_re = re.compile(r'^<[^>]+ (at|object) ')
-
_norm_whitespace_re = re.compile(r'[ \t\n][ \t\n]+')
def norm_whitespace(v):
return _norm_whitespace_re.sub(' ', v)
- def looks_like_xml(s):
- s = s.strip()
- return (s.startswith('<')
- and not _repr_re.search(s))
-
def child_text(element):
return ''.join([c.data for c in element.childNodes
if c.nodeType == Node.TEXT_NODE])
@@ -104,12 +95,14 @@ class OutputChecker(doctest.OutputChecker):
want, got = self._strip_quotes(want, got)
want = want.replace('\\n','\n')
got = got.replace('\\n','\n')
-
- # If what we want doesn't look like markup, don't bother trying
- # to parse it.
- if not looks_like_xml(want):
- return False
+ # If the string is not a complete xml document, we may need to add a
+ # root element. This allow us to compare fragments, like ""
+ if not want.startswith('%s'
+ want = wrapper % want
+ got = wrapper % got
+
# Parse the want and got strings, and compare the parsings.
try:
want_root = parseString(want).firstChild
diff --git a/tests/regressiontests/test_utils/tests.py b/tests/regressiontests/test_utils/tests.py
index 9deb60b2ca..2f950bef10 100644
--- a/tests/regressiontests/test_utils/tests.py
+++ b/tests/regressiontests/test_utils/tests.py
@@ -29,6 +29,16 @@ r"""
... xml.endDocument()
... return stream.getvalue()
+>>> def produce_xml_fragment():
+... stream = StringIO()
+... xml = SimplerXMLGenerator(stream, encoding='utf-8')
+... xml.startElement("foo", {"aaa" : "1.0", "bbb": "2.0"})
+... xml.characters("Hello")
+... xml.endElement("foo")
+... xml.startElement("bar", {})
+... xml.endElement("bar")
+... return stream.getvalue()
+
# Long values are normalized and are comparable to normal integers ...
>>> produce_long()
42
@@ -53,5 +63,10 @@ r"""
>>> produce_xml()
'\nHelloGoodbye'
+>>> produce_xml_fragment()
+'Hello'
+
+>>> produce_xml_fragment()
+'Hello'
"""
\ No newline at end of file