You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.3 KiB
40 lines
1.3 KiB
import os
|
|
from pathlib import Path
|
|
|
|
from django.test.html import Element, parse_html
|
|
|
|
from crispy_forms.utils import render_crispy_form
|
|
|
|
TEST_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
def contains_partial(haystack, needle, ignore_needle_children=False):
|
|
"""Search for a html element with at least the corresponding elements
|
|
(other elements may be present in the matched element from the haystack)
|
|
"""
|
|
if not isinstance(haystack, Element):
|
|
haystack = parse_html(haystack)
|
|
if not isinstance(needle, Element):
|
|
needle = parse_html(needle)
|
|
|
|
if len(needle.children) > 0 and not ignore_needle_children:
|
|
raise NotImplementedError("contains_partial does not check needle's children:%s" % str(needle.children))
|
|
|
|
if needle.name == haystack.name and set(needle.attributes).issubset(haystack.attributes):
|
|
return True
|
|
return any(
|
|
contains_partial(child, needle, ignore_needle_children=ignore_needle_children)
|
|
for child in haystack.children
|
|
if isinstance(child, Element)
|
|
)
|
|
|
|
|
|
def parse_expected(expected_file):
|
|
test_file = Path(TEST_DIR) / "results" / expected_file
|
|
with test_file.open() as f:
|
|
return parse_html(f.read())
|
|
|
|
|
|
def parse_form(form):
|
|
html = render_crispy_form(form)
|
|
return parse_html(html)
|
|
|