Simple HTML Generation https://minihtml.trendels.name/
1from textwrap import dedent
2
3from minihtml import fragment, make_prototype
4
5
6def test_nested_block_elements_are_rendered_with_indentation():
7 div = make_prototype("div")
8
9 assert str(div(div())) == dedent(
10 """\
11 <div>
12 <div></div>
13 </div>"""
14 )
15 assert str(div(div(), div())) == dedent(
16 """\
17 <div>
18 <div></div>
19 <div></div>
20 </div>"""
21 )
22
23
24def test_nested_inline_elements_are_rendered_without_indentation():
25 span = make_prototype("span", inline=True)
26 em = make_prototype("em", inline=True)
27
28 assert str(span(em())) == "<span><em></em></span>"
29 assert str(span(em(), em())) == "<span><em></em><em></em></span>"
30
31
32def test_consecutive_inline_children_of_block_elements_are_rendered_without_indentation():
33 div = make_prototype("div")
34 span = make_prototype("span", inline=True)
35
36 assert str(div(span(), span())) == dedent("<div><span></span><span></span></div>")
37
38
39def test_a_single_inline_child_of_a_block_element_is_rendered_without_indentation():
40 div = make_prototype("div")
41 span = make_prototype("span", inline=True)
42
43 assert str(div(span())) == "<div><span></span></div>"
44
45
46def test_nested_block_elements_are_always_rendered_with_indentation():
47 div = make_prototype("div")
48 p = make_prototype("p")
49 span = make_prototype("span", inline=True)
50
51 assert str(div(span(), p())) == dedent(
52 """\
53 <div>
54 <span></span>
55 <p></p>
56 </div>"""
57 )
58 assert str(div(span(), span(), p())) == dedent(
59 """\
60 <div>
61 <span></span><span></span>
62 <p></p>
63 </div>"""
64 )
65 assert str(span(span(), p())) == dedent(
66 """\
67 <span><span></span>
68 <p></p>
69 </span>"""
70 )
71 assert str(span(p(), span())) == dedent(
72 """\
73 <span>
74 <p></p>
75 <span></span></span>"""
76 )
77
78
79def test_empty_elements_with_and_without_end_tag():
80 div = make_prototype("div")
81 img = make_prototype("img", inline=True, empty=True, omit_end_tag=True)
82 iframe = make_prototype("iframe", empty=True, omit_end_tag=False)
83
84 assert str(img()) == "<img>"
85 assert str(iframe()) == "<iframe></iframe>"
86 assert str(div(img(), img())) == "<div><img><img></div>"
87 assert str(div(iframe(), iframe())) == dedent(
88 """\
89 <div>
90 <iframe></iframe>
91 <iframe></iframe>
92 </div>"""
93 )
94
95
96def test_text_content_is_rendered_inline():
97 div = make_prototype("div")
98 span = make_prototype("span", inline=True)
99
100 assert str(div("hello")) == "<div>hello</div>"
101 assert str(span("hello")) == "<span>hello</span>"
102 assert str(div(span(), "hello")) == "<div><span></span>hello</div>"
103
104
105def test_rendering_fragments():
106 div = make_prototype("div")
107 span = make_prototype("span", inline=True)
108
109 frag1 = fragment(div(), span(), "test", div())
110
111 assert str(div(frag1)) == dedent(
112 """\
113 <div>
114 <div></div>
115 <span></span>test
116 <div></div>
117 </div>"""
118 )
119
120 assert str(frag1) == dedent(
121 """\
122 <div></div>
123 <span></span>test
124 <div></div>"""
125 )