#30497: assertXMLEqual chokes on document type declaration ---------------------------------------------+------------------------ Reporter: Yuri Kanivetsky | Owner: nobody Type: Bug | Status: new Component: Testing framework | Version: 2.2 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | ---------------------------------------------+------------------------ Prepare Django project:
{{{ $ python -m venv env $ . ./env/bin/activate $ pip install django $ django-admin startproject p1 $ cd p1 }}} Create `p1/tests.py`: {{{ #!python from django.test import TestCase class MyTestCase(TestCase): def test_assert_xml_equal(self): xml1 = ''' <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example SYSTEM "example.dtd"> <root /> ''' xml2 = ''' <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example SYSTEM "example.dtd"> <root /> ''' self.assertXMLEqual(xml1, xml2) }}} Run the tests: {{{ $ ./manage.py test Creating test database for alias 'default'... F ====================================================================== FAIL: test_assert_xml_equal (p1.tests.MyTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/yuri/_/1/env/lib/python3.7/site- packages/django/test/testcases.py", line 843, in assertXMLEqual result = compare_xml(xml1, xml2) File "/home/yuri/_/1/env/lib/python3.7/site- packages/django/test/utils.py", line 598, in compare_xml return check_element(want_root, got_root) AttributeError: 'DocumentType' object has no attribute 'tagName' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/yuri/_/1/p1/p1/tests.py", line 15, in test_assert_xml_equal self.assertXMLEqual(xml1, xml2) File "/home/yuri/_/1/env/lib/python3.7/site- packages/django/test/testcases.py", line 846, in assertXMLEqual self.fail(self._formatMessage(msg, standardMsg)) AssertionError: First or second argument is not valid XML 'DocumentType' object has no attribute 'tagName' ---------------------------------------------------------------------- Ran 1 test in 0.002s FAILED (failures=1) Destroying test database for alias 'default'... System check identified no issues (0 silenced). }}} That happens because `django.utils` expects first [https://github.com/django/django/blob/2.2.1/django/test/utils.py#L595-L596 non-comment] element to be the [https://github.com/django/django/blob/2.2.1/django/test/utils.py#L579-L582 root] element. Which is generally not the case. -- Ticket URL: <https://code.djangoproject.com/ticket/30497> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/049.280de48e238bfd15a31e7b817ab7f2e7%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.