Browse Source

Fixed #30497 -- Ignored document type in assertXMLEqual()/assertXMLNotEqual().

Caio Ariede 5 years ago
parent
commit
753b67c58d
3 changed files with 10 additions and 4 deletions
  1. 3 2
      django/test/utils.py
  2. 2 2
      docs/topics/testing/tools.txt
  3. 5 0
      tests/test_utils/tests.py

+ 3 - 2
django/test/utils.py

@@ -537,7 +537,8 @@ def compare_xml(want, got):
     """
     Try to do a 'xml-comparison' of want and got. Plain string comparison
     doesn't always work because, for example, attribute ordering should not be
-    important. Ignore comment nodes and leading and trailing whitespace.
+    important. Ignore comment nodes, document type node, and leading and
+    trailing whitespaces.
 
     Based on https://github.com/lxml/lxml/blob/master/src/lxml/doctestcompare.py
     """
@@ -575,7 +576,7 @@ def compare_xml(want, got):
 
     def first_node(document):
         for node in document.childNodes:
-            if node.nodeType != Node.COMMENT_NODE:
+            if node.nodeType not in (Node.COMMENT_NODE, Node.DOCUMENT_TYPE_NODE):
                 return node
 
     want = want.strip().replace('\\n', '\n')

+ 2 - 2
docs/topics/testing/tools.txt

@@ -1645,8 +1645,8 @@ your test suite.
     syntax differences. When invalid XML is passed in any parameter, an
     ``AssertionError`` is always raised, even if both string are identical.
 
-    XML declaration and comments are ignored. Only the root element and its
-    children are compared.
+    XML declaration, document type, and comments are ignored. Only the root
+    element and its children are compared.
 
     Output in case of error can be customized with the ``msg`` argument.
 

+ 5 - 0
tests/test_utils/tests.py

@@ -920,6 +920,11 @@ class XMLEqualTests(SimpleTestCase):
         xml2 = "<elem>foo</elem> <elem>bar</elem>"
         self.assertXMLNotEqual(xml1, xml2)
 
+    def test_doctype_root(self):
+        xml1 = '<?xml version="1.0"?><!DOCTYPE root SYSTEM "example1.dtd"><root />'
+        xml2 = '<?xml version="1.0"?><!DOCTYPE root SYSTEM "example2.dtd"><root />'
+        self.assertXMLEqual(xml1, xml2)
+
 
 class SkippingExtraTests(TestCase):
     fixtures = ['should_not_be_loaded.json']