Coverage for tdom / template_utils_test.py: 100%
50 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-03 21:23 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-03 21:23 +0000
1from string.templatelib import Interpolation
3import pytest
5from .template_utils import TemplateRef, combine_template_refs, template_from_parts
8def test_template_from_parts() -> None:
9 strings = ("Hello, ", "! Today is ", ".")
10 interpolations = (Interpolation("Alice"), Interpolation("Monday"))
11 template = template_from_parts(strings, interpolations)
12 assert template.strings == strings
13 assert template.interpolations == interpolations
16def test_template_ref_is_literal() -> None:
17 literal_ref = TemplateRef.literal("Hello")
18 assert literal_ref.is_literal
20 non_literal_ref = TemplateRef(("", ""), (0,))
21 assert not non_literal_ref.is_literal
24def test_template_ref_is_empty() -> None:
25 empty_ref = TemplateRef.empty()
26 assert empty_ref.is_empty
28 non_empty_ref = TemplateRef.literal("Hello")
29 assert not non_empty_ref.is_empty
32def test_template_ref_is_singleton() -> None:
33 singleton_ref = TemplateRef.singleton(0)
34 assert singleton_ref.is_singleton
36 non_singleton_ref = TemplateRef.literal("Hello")
37 assert not non_singleton_ref.is_singleton
40def test_template_ref_post_init_validation() -> None:
41 with pytest.raises(ValueError):
42 _ = TemplateRef(("Hello",), (0, 1))
45def test_combine_template_refs():
46 template_refs = map(
47 TemplateRef.from_naive_template,
48 [
49 t"ab",
50 t"c{0}d",
51 t"ef{1}",
52 t"{2}ghi",
53 ],
54 )
55 assert combine_template_refs(*template_refs) == TemplateRef.from_naive_template(
56 t"abc{0}def{1}{2}ghi"
57 )
60def test_template_ref_iter_singleton():
61 assert list(TemplateRef.from_naive_template(t"{1}")) == [1]
64def test_template_ref_iter_empty():
65 assert list(TemplateRef.from_naive_template(t"")) == []
68def test_template_ref_iter_empty_prefix():
69 assert list(TemplateRef.from_naive_template(t"{1}def")) == [1, "def"]
72def test_template_ref_iter_empty_suffix():
73 assert list(TemplateRef.from_naive_template(t"abc{1}")) == ["abc", 1]
76def test_template_ref_iter_literal():
77 assert list(TemplateRef.from_naive_template(t"abc")) == ["abc"]
80def test_template_ref_iter_only_interpolations():
81 assert list(TemplateRef.from_naive_template(t"{1}{3}{5}")) == [1, 3, 5]
84def test_template_ref_iter_complete():
85 assert list(TemplateRef.from_naive_template(t"abc{1}def{3}ghi{5}jkl")) == [
86 "abc",
87 1,
88 "def",
89 3,
90 "ghi",
91 5,
92 "jkl",
93 ]
96def test_template_ref_resolve():
97 src_t = t"{'a'}b{'c'}d{'e'}f"
98 src_ref = TemplateRef(
99 strings=src_t.strings, i_indexes=tuple(range(len(src_t.interpolations)))
100 )
101 resolved_t = src_ref.resolve(src_t.interpolations)
102 assert resolved_t.values == ("a", "c", "e")
103 assert resolved_t.strings == ("", "b", "d", "f")