Fixed assertXMLEqual when first node was a comment

This commit is contained in:
Claude Paroz 2012-10-15 22:18:47 +02:00
parent 1636b03382
commit 6b0a836c9c
2 changed files with 16 additions and 5 deletions

View File

@ -227,9 +227,10 @@ class override_settings(object):
def compare_xml(want, got): def compare_xml(want, got):
"""Tries to do a 'xml-comparision' of want and got. Plain string """Tries to do a 'xml-comparison' of want and got. Plain string
comparision doesn't always work because, for example, attribute comparison doesn't always work because, for example, attribute
ordering should not be important. ordering should not be important. Comment nodes are not considered in the
comparison.
Based on http://codespeak.net/svn/lxml/trunk/src/lxml/doctestcompare.py Based on http://codespeak.net/svn/lxml/trunk/src/lxml/doctestcompare.py
""" """
@ -267,6 +268,11 @@ def compare_xml(want, got):
return False return False
return True return True
def first_node(document):
for node in document.childNodes:
if node.nodeType != Node.COMMENT_NODE:
return node
want, got = strip_quotes(want, got) want, got = strip_quotes(want, got)
want = want.replace('\\n','\n') want = want.replace('\\n','\n')
got = got.replace('\\n','\n') got = got.replace('\\n','\n')
@ -279,8 +285,8 @@ def compare_xml(want, got):
got = wrapper % got got = wrapper % got
# Parse the want and got strings, and compare the parsings. # Parse the want and got strings, and compare the parsings.
want_root = parseString(want).firstChild want_root = first_node(parseString(want))
got_root = parseString(got).firstChild got_root = first_node(parseString(got))
return check_element(want_root, got_root) return check_element(want_root, got_root)

View File

@ -484,6 +484,11 @@ class XMLEqualTests(TestCase):
with self.assertRaises(AssertionError): with self.assertRaises(AssertionError):
self.assertXMLNotEqual(xml_unvalid, xml2) self.assertXMLNotEqual(xml_unvalid, xml2)
def test_comment_root(self):
xml1 = "<?xml version='1.0'?><!-- comment1 --><elem attr1='a' attr2='b' />"
xml2 = "<?xml version='1.0'?><!-- comment2 --><elem attr2='b' attr1='a' />"
self.assertXMLEqual(xml1, xml2)
class SkippingExtraTests(TestCase): class SkippingExtraTests(TestCase):
fixtures = ['should_not_be_loaded.json'] fixtures = ['should_not_be_loaded.json']