Commit 2f49d180 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Fixed #7441 -- Removed some of the shortcuts in the doctest output...

Fixed #7441 -- Removed some of the shortcuts in the doctest output comparators, and added a wrapper to allow comparison of xml fragments. Thanks to Leo Soto for the report and fix.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8003 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 55ebc2b5
Loading
Loading
Loading
Loading
+7 −14
Original line number Diff line number Diff line
@@ -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])
@@ -105,10 +96,12 @@ class OutputChecker(doctest.OutputChecker):
        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 "<foo/><bar/>"
        if not want.startswith('<?xml'):
            wrapper = '<root>%s</root>'
            want = wrapper % want
            got = wrapper % got
            
        # Parse the want and got strings, and compare the parsings.
        try:
+15 −0
Original line number Diff line number Diff line
@@ -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()
'<?xml version="1.0" encoding="UTF-8"?>\n<foo bbb="2.0" aaa="1.0"><bar ccc="3.0">Hello</bar><whiz>Goodbye</whiz></foo>'

>>> produce_xml_fragment()
'<foo aaa="1.0" bbb="2.0">Hello</foo><bar></bar>'

>>> produce_xml_fragment()
'<foo bbb="2.0" aaa="1.0">Hello</foo><bar></bar>'

"""
 No newline at end of file