diff --git a/django/test/html.py b/django/test/html.py index 87e213d651e..6da79d6fb24 100644 --- a/django/test/html.py +++ b/django/test/html.py @@ -2,6 +2,7 @@ import html from html.parser import HTMLParser +from django.utils.html import VOID_ELEMENTS from django.utils.regex_helper import _lazy_re_compile # ASCII whitespace is U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, or U+0020 @@ -200,27 +201,6 @@ class HTMLParseError(Exception): class Parser(HTMLParser): - # https://html.spec.whatwg.org/#void-elements - SELF_CLOSING_TAGS = { - "area", - "base", - "br", - "col", - "embed", - "hr", - "img", - "input", - "link", - "meta", - "param", - "source", - "track", - "wbr", - # Deprecated tags - "frame", - "spacer", - } - def __init__(self): super().__init__() self.root = RootElement() @@ -248,14 +228,14 @@ class Parser(HTMLParser): def handle_startendtag(self, tag, attrs): self.handle_starttag(tag, attrs) - if tag not in self.SELF_CLOSING_TAGS: + if tag not in VOID_ELEMENTS: self.handle_endtag(tag) def handle_starttag(self, tag, attrs): attrs = normalize_attributes(attrs) element = Element(tag, attrs) self.current.append(element) - if tag not in self.SELF_CLOSING_TAGS: + if tag not in VOID_ELEMENTS: self.open_tags.append(element) self.element_positions[element] = self.getpos() diff --git a/django/utils/html.py b/django/utils/html.py index 56d65a8d210..06e8824f563 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -15,6 +15,27 @@ from django.utils.regex_helper import _lazy_re_compile from django.utils.safestring import SafeData, SafeString, mark_safe from django.utils.text import normalize_newlines +# https://html.spec.whatwg.org/#void-elements +VOID_ELEMENTS = { + "area", + "base", + "br", + "col", + "embed", + "hr", + "img", + "input", + "link", + "meta", + "param", + "source", + "track", + "wbr", + # Deprecated tags. + "frame", + "spacer", +} + @keep_lazy(SafeString) def escape(text): diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py index 25218299b24..cdb0453e444 100644 --- a/tests/test_utils/tests.py +++ b/tests/test_utils/tests.py @@ -46,6 +46,7 @@ from django.test.utils import ( ) from django.urls import NoReverseMatch, path, reverse, reverse_lazy from django.utils.deprecation import RemovedInDjango51Warning +from django.utils.html import VOID_ELEMENTS from django.utils.version import PY311 from .models import Car, Person, PossessedCar @@ -657,27 +658,8 @@ class HTMLEqualTests(SimpleTestCase): self.assertEqual(len(dom.children), 1) self.assertEqual(dom.children[0], "
foo
'' bar") - def test_self_closing_tags(self): - self_closing_tags = [ - "area", - "base", - "br", - "col", - "embed", - "hr", - "img", - "input", - "link", - "meta", - "param", - "source", - "track", - "wbr", - # Deprecated tags - "frame", - "spacer", - ] - for tag in self_closing_tags: + def test_void_elements(self): + for tag in VOID_ELEMENTS: with self.subTest(tag): dom = parse_html("Hello <%s> world
" % tag) self.assertEqual(len(dom.children), 3)