diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2008-07-20 05:46:41 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2008-07-20 05:46:41 +0000 |
| commit | 2f49d180711ffaac7080d473b2ef86d911015e53 (patch) | |
| tree | 4b3c5dd065d257ef578dc9a3f65e1e57a21d88bb | |
| parent | 55ebc2b594243063afd315311b590bef04d7b61b (diff) | |
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
| -rw-r--r-- | django/test/testcases.py | 21 | ||||
| -rw-r--r-- | tests/regressiontests/test_utils/tests.py | 15 |
2 files changed, 22 insertions, 14 deletions
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 "<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: 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() '<?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 |
