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

1from string.templatelib import Interpolation 

2 

3import pytest 

4 

5from .template_utils import TemplateRef, combine_template_refs, template_from_parts 

6 

7 

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 

14 

15 

16def test_template_ref_is_literal() -> None: 

17 literal_ref = TemplateRef.literal("Hello") 

18 assert literal_ref.is_literal 

19 

20 non_literal_ref = TemplateRef(("", ""), (0,)) 

21 assert not non_literal_ref.is_literal 

22 

23 

24def test_template_ref_is_empty() -> None: 

25 empty_ref = TemplateRef.empty() 

26 assert empty_ref.is_empty 

27 

28 non_empty_ref = TemplateRef.literal("Hello") 

29 assert not non_empty_ref.is_empty 

30 

31 

32def test_template_ref_is_singleton() -> None: 

33 singleton_ref = TemplateRef.singleton(0) 

34 assert singleton_ref.is_singleton 

35 

36 non_singleton_ref = TemplateRef.literal("Hello") 

37 assert not non_singleton_ref.is_singleton 

38 

39 

40def test_template_ref_post_init_validation() -> None: 

41 with pytest.raises(ValueError): 

42 _ = TemplateRef(("Hello",), (0, 1)) 

43 

44 

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 ) 

58 

59 

60def test_template_ref_iter_singleton(): 

61 assert list(TemplateRef.from_naive_template(t"{1}")) == [1] 

62 

63 

64def test_template_ref_iter_empty(): 

65 assert list(TemplateRef.from_naive_template(t"")) == [] 

66 

67 

68def test_template_ref_iter_empty_prefix(): 

69 assert list(TemplateRef.from_naive_template(t"{1}def")) == [1, "def"] 

70 

71 

72def test_template_ref_iter_empty_suffix(): 

73 assert list(TemplateRef.from_naive_template(t"abc{1}")) == ["abc", 1] 

74 

75 

76def test_template_ref_iter_literal(): 

77 assert list(TemplateRef.from_naive_template(t"abc")) == ["abc"] 

78 

79 

80def test_template_ref_iter_only_interpolations(): 

81 assert list(TemplateRef.from_naive_template(t"{1}{3}{5}")) == [1, 3, 5] 

82 

83 

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 ] 

94 

95 

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