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,
"""
""",
)