Simple HTML Generation https://minihtml.trendels.name/
at main 125 lines 3.2 kB view raw
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 )