Files
MyFastHtml/tests/tests_matches.py

42 lines
2.0 KiB
Python

import pytest
from fasthtml.components import *
from myfasthtml.core.matcher import matches, StartsWith, Contains, DoesNotContain
@pytest.mark.parametrize('actual, expected', [
(Div(), Div()),
(None, None),
([Div(), Span()], [Div(), Span()]),
(Div(attr1="value"), Div(attr1="value")),
(Div(attr1="value", attr2="value"), Div(attr1="value")),
(Div(attr1="valueXXX", attr2="value"), Div(attr1=StartsWith("value"))),
(Div(attr1="before value after", attr2="value"), Div(attr1=Contains("value"))),
(Div(attr1="before after", attr2="value"), Div(attr1=DoesNotContain("value"))),
])
def test_i_can_match(actual, expected):
assert matches(actual, expected)
@pytest.mark.parametrize('actual, expected, error_message', [
(None, Div(), "Actual is None"),
(Div(), None, "Actual is not None"),
(123, Div(), "The types are different:"),
([Div(), Span()], [], "Actual is bigger than expected:"),
([], [Div(), Span()], "Actual is smaller than expected:"),
("not a list", [Div(), Span()], "The types are different:"),
([Div(), Span()], [Div(), 123], "The types are different:"),
(Div(), Span(), "The elements are different:"),
([Div(), Span()], [Div(), Div()], "The elements are different:"),
(Div(), Div(attr1="value"), "'attr1' is not found in Actual:"),
(Div(attr1="value1"), Div(attr1="value2"), "The values are different for 'attr1':"),
(Div(attr1="value1"), Div(attr1=StartsWith("value2")), "The condition 'StartsWith(value2)' is not satisfied:"),
(Div(attr1="value1"), Div(attr1=Contains("value2")), "The condition 'Contains(value2)' is not satisfied:"),
(Div(attr1="value1 value2"), Div(attr1=DoesNotContain("value2")), "The condition 'DoesNotContain(value2)' is not satisfied:"),
])
def test_i_can_detect_errors(actual, expected, error_message):
with pytest.raises(AssertionError) as exc_info:
matches(actual, expected)
assert error_message in str(exc_info.value)