Added tests for Layout and Treeview

This commit is contained in:
2025-12-05 17:46:15 +01:00
parent 7c701a9116
commit 8f2528787a
21 changed files with 1161 additions and 229 deletions

View File

@@ -3,9 +3,10 @@ from fastcore.basics import NotStr
from fasthtml.components import *
from myfasthtml.controls.helpers import mk
from myfasthtml.core.commands import Command
from myfasthtml.icons.fluent_p3 import add20_regular
from myfasthtml.test.matcher import matches, StartsWith, Contains, DoesNotContain, Empty, ErrorOutput, \
ErrorComparisonOutput, AttributeForbidden, AnyValue, NoChildren, TestObject, TestIcon, DoNotCheck
ErrorComparisonOutput, AttributeForbidden, AnyValue, NoChildren, TestObject, Skip, DoNotCheck, TestIcon, HasHtmx
from myfasthtml.test.testclient import MyFT
@@ -55,6 +56,9 @@ class TestMatches:
(mk.icon(add20_regular), TestIcon("Add20Regular")),
(mk.icon(add20_regular), TestIcon("add20_regular")),
(mk.icon(add20_regular), TestIcon()),
(Div(None, None, None, Div(id="to_find")), Div(Skip(None), Div(id="to_find"))),
(Div(Div(id="to_skip"), Div(id="to_skip"), Div(id="to_find")), Div(Skip(Div(id="to_skip")), Div(id="to_find"))),
(Div(hx_post="/url"), Div(HasHtmx(hx_post="/url"))),
])
def test_i_can_match(self, actual, expected):
assert matches(actual, expected)
@@ -100,7 +104,8 @@ class TestMatches:
(Div(123, "value"), TestObject("Dummy", attr1=123, attr2="value2"), "The types are different"),
(Dummy(123, "value"), TestObject("Dummy", attr1=123, attr2=Contains("value2")),
"The condition 'Contains(value2)' is not satisfied"),
(Div(Div(id="to_skip")), Div(Skip(Div(id="to_skip"))), "Nothing more to skip"),
(Div(hx_post="/url"), Div(HasHtmx(hx_post="/url2")), "The condition 'HasHtmx()' is not satisfied"),
])
def test_i_can_detect_errors(self, actual, expected, error_message):
with pytest.raises(AssertionError) as exc_info:
@@ -446,3 +451,20 @@ Error : The condition 'Contains(value2)' is not satisfied.
assert "\n" + res == '''
(div "attr1"="123" "attr2"="value2") | (Dummy "attr1"="123" "attr2"="value2")
^^^ |'''
class TestPredicates:
def test_i_can_validate_contains_with_words_only(self):
assert Contains("value", _word=True).validate("value value2 value3")
assert Contains("value", "value2", _word=True).validate("value value2 value3")
assert not Contains("value", _word=True).validate("valuevalue2value3")
assert not Contains("value value2", _word=True).validate("value value2 value3")
def test_i_can_validate_has_htmx(self):
div = Div(hx_post="/url")
assert HasHtmx(hx_post="/url").validate(div)
c = Command("c", "testing has_htmx", None)
c.bind_ft(div)
assert HasHtmx(command=c).validate(div)