from typing import List, cast from django.test import TestCase from selectolax.lexbor import LexborHTMLParser, LexborNode from django_components.util.html import ( is_html_parser_fragment, parse_document_or_nodes, parse_multiroot_html, parse_node, ) from .django_test_setup import setup_test_config setup_test_config({"autodiscover": False}) class HtmlTests(TestCase): def test_parse_node(self): node = parse_node( """
""" ) node.attrs["id"] = "my-id" # type: ignore[index] node.css("li")[0].attrs["class"] = "item" # type: ignore[index] self.assertHTMLEqual( node.html, """
""", ) def test_parse_multiroot_html(self): html = """
42
Hello """ nodes = parse_multiroot_html(html) self.assertHTMLEqual( nodes[0].html, """
""", ) self.assertHTMLEqual( nodes[1].html, """
42
""", ) self.assertHTMLEqual( nodes[2].html, """ Hello """, ) def test_is_html_parser_fragment(self): fragment_html = """
42
Hello """ fragment_tree = LexborHTMLParser(fragment_html) fragment_result = is_html_parser_fragment(fragment_html, fragment_tree) self.assertEqual(fragment_result, True) doc_html = """
""" doc_tree = LexborHTMLParser(doc_html) doc_result = is_html_parser_fragment(doc_html, doc_tree) self.assertEqual(doc_result, False) def test_parse_document_or_nodes__fragment(self): fragment_html = """
42
Hello """ fragment_result = cast(List[LexborNode], parse_document_or_nodes(fragment_html)) self.assertHTMLEqual( fragment_result[0].html, """
""", ) self.assertHTMLEqual( fragment_result[1].html, """
42
""", ) self.assertHTMLEqual( fragment_result[2].html, """ Hello """, ) def test_parse_document_or_nodes__mixed(self): fragment_html = """
42
Hello """ fragment_result = cast(List[LexborNode], parse_document_or_nodes(fragment_html)) self.assertHTMLEqual( fragment_result[0].html, """ """, ) self.assertHTMLEqual( fragment_result[1].html, """
""", ) self.assertHTMLEqual( fragment_result[2].html, """
42
""", ) self.assertHTMLEqual( fragment_result[3].html, """ Hello """, ) def test_parse_document_or_nodes__doc(self): doc_html = """
""" fragment_result = cast(LexborHTMLParser, parse_document_or_nodes(doc_html)) self.assertHTMLEqual( fragment_result.html, """
""", )