Skip to content

Commit

Permalink
test(html): Add tests for all elements
Browse files Browse the repository at this point in the history
  • Loading branch information
paveldedik committed Jun 17, 2024
1 parent 424cc72 commit 592f1a6
Showing 1 changed file with 252 additions and 45 deletions.
297 changes: 252 additions & 45 deletions tests/test_elements.py
Original file line number Diff line number Diff line change
@@ -1,44 +1,29 @@
from ludic.html import (
a,
b,
button,
div,
i,
input,
label,
p,
script,
span,
table,
tbody,
td,
th,
thead,
tr,
)
from ludic import html
from ludic.styles import CSSProperties


def test_empty_element() -> None:
dom = div()
dom = html.div()
assert dom.to_html() == "<div></div>"
assert dom.to_string() == "<div />"

dom2 = p()
dom2 = html.p()
assert dom2.to_html() == "<p></p>"
assert dom2.to_string() == "<p />"

dom3 = script()
dom3 = html.script()
assert dom3.to_html() == "<script></script>"
assert dom3.to_string() == "<script />"

dom4 = input()
dom4 = html.input()
assert dom4.to_html() == "<input>"
assert dom4.to_string() == "<input />"


def test_html_paragraph() -> None:
paragraph = p(f"Hello, World! {b("Something bold")} and {i("Something italic")}")
paragraph = html.p(
f"Hello, World! {html.b("Something bold")} and {html.i("Something italic")}"
)
assert paragraph.to_html() == (
"<p>Hello, World! <b>Something bold</b> and <i>Something italic</i></p>"
)
Expand All @@ -53,7 +38,7 @@ def test_html_paragraph() -> None:


def test_html_link() -> None:
link = a("A link!", href="https://example.com")
link = html.a("A link!", href="https://example.com")
assert link.to_html() == '<a href="https://example.com">A link!</a>'
assert link.to_string() == (
'<a href="https://example.com">\n'
Expand All @@ -63,19 +48,19 @@ def test_html_link() -> None:


def test_html_table() -> None:
dom = table(
thead(
tr(
th("Header 1"),
th("Header 2"),
th("Header 3"),
dom = html.table(
html.thead(
html.tr(
html.th("Header 1"),
html.th("Header 2"),
html.th("Header 3"),
)
),
tbody(
tr(
td("Cell 1", style=CSSProperties(color="red", height="100px")),
td("Cell 2"),
td("Cell 3"),
html.tbody(
html.tr(
html.td("Cell 1", style=CSSProperties(color="red", height="100px")),
html.td("Cell 2"),
html.td("Cell 3"),
),
),
)
Expand All @@ -101,11 +86,11 @@ def test_html_table() -> None:


def test_button_get() -> None:
dom = div(
div(label("First Name"), ": Joe"),
div(label("Last Name"), ": Blow"),
div(label("Email"), ": [email protected]"),
button(
dom = html.div(
html.div(html.label("First Name"), ": Joe"),
html.div(html.label("Last Name"), ": Blow"),
html.div(html.label("Email"), ": [email protected]"),
html.button(
"Click To Edit",
classes=["btn", "btn-primary"],
hx_get="/contact/1/edit",
Expand All @@ -114,7 +99,7 @@ def test_button_get() -> None:
hx_swap="outerHTML",
)

assert isinstance(dom.children[3], button)
assert isinstance(dom.children[3], html.button)
assert dom.children[3].attrs.get("hx_get") == "/contact/1/edit"
assert dom.children[3].children[0] == "Click To Edit"
assert dom.attrs.get("hx_target") == "this"
Expand Down Expand Up @@ -150,15 +135,15 @@ def test_button_get() -> None:


def test_expand_nested() -> None:
div_dom = div(p(1), p(2), p(3))
span_dom = span(*div_dom)
div_dom = html.div(html.p(1), html.p(2), html.p(3))
span_dom = html.span(*div_dom)

assert div_dom.text == span_dom.text == "123"
assert span_dom.to_html() == "<span><p>1</p><p>2</p><p>3</p></span>"


def test_repr_and_str() -> None:
dom = div(p(1), p(2), p(3), id="test")
dom = html.div(html.p(1), html.p(2), html.p(3), id="test")
assert repr(dom) == '<div id="test"><p>1</p><p>2</p><p>3</p></div>'
assert str(dom) == (
'<div id="test">\n'
Expand All @@ -170,7 +155,229 @@ def test_repr_and_str() -> None:


def test_data_attributes() -> None:
dom = div("content", data_foo="1", data_bar="test") # type: ignore
dom = html.div("content", data_foo="1", data_bar="test") # type: ignore

assert dom.attrs == {"data_foo": "1", "data_bar": "test"}
assert dom.to_html() == '<div data-foo="1" data-bar="test">content</div>'


def test_all_elements() -> None:
assert html.div("test", id="div").to_html() == '<div id="div">test</div>'
assert html.span("test", id="span").to_html() == '<span id="span">test</span>'
assert html.main("test", id="main").to_html() == '<main id="main">test</main>'
assert html.p("test", id="p").to_html() == '<p id="p">test</p>'
assert html.a("test", id="a").to_html() == '<a id="a">test</a>'
assert html.br().to_html() == "<br>"
assert (
html.button("test", id="button").to_html()
== '<button id="button">test</button>'
)
assert html.label("test", id="label").to_html() == '<label id="label">test</label>'
assert html.td("test", id="td").to_html() == '<td id="td">test</td>'
assert html.th("test", id="th").to_html() == '<th id="th">test</th>'
assert html.tr(id="tr").to_html() == '<tr id="tr"></tr>'
assert html.thead(id="thead").to_html() == '<thead id="thead"></thead>'
assert html.tbody(id="tbody").to_html() == '<tbody id="tbody"></tbody>'
assert html.tfoot(id="tfoot").to_html() == '<tfoot id="tfoot"></tfoot>'
assert html.table(id="table").to_html() == '<table id="table"></table>'
assert html.li("test", id="li").to_html() == '<li id="li">test</li>'
assert html.ul(id="ul").to_html() == '<ul id="ul"></ul>'
assert html.ol(id="ol").to_html() == '<ol id="ol"></ol>'
assert html.dt("test", id="dt").to_html() == '<dt id="dt">test</dt>'
assert html.dd("test", id="dd").to_html() == '<dd id="dd">test</dd>'
assert html.dl(id="dl").to_html() == '<dl id="dl"></dl>'
assert (
html.section("test", id="section").to_html()
== '<section id="section">test</section>'
)
assert html.input(id="input").to_html() == '<input id="input">'
assert html.output(id="output").to_html() == '<output id="output"></output>'
assert (
html.legend("test", id="legend").to_html()
== '<legend id="legend">test</legend>'
)
assert (
html.option("test", id="option").to_html()
== '<option id="option">test</option>'
)
assert (
html.optgroup("test", id="optgroup").to_html()
== '<optgroup id="optgroup">test</optgroup>'
)
assert (
html.select(html.option(), id="select").to_html()
== '<select id="select"><option></option></select>'
)
assert (
html.textarea("test", id="textarea").to_html()
== '<textarea id="textarea">test</textarea>'
)
assert (
html.fieldset("test", id="fieldset").to_html()
== '<fieldset id="fieldset">test</fieldset>'
)
assert html.form("test", id="form").to_html() == '<form id="form">test</form>'
assert html.img(id="img").to_html() == '<img id="img">'
assert html.svg("test", id="svg").to_html() == '<svg id="svg">test</svg>'
assert (
html.circle("test", id="circle").to_html()
== '<circle id="circle">test</circle>'
)
assert html.line("test", id="line").to_html() == '<line id="line">test</line>'
assert html.path("test", id="path").to_html() == '<path id="path">test</path>'
assert (
html.polyline("test", id="polyline").to_html()
== '<polyline id="polyline">test</polyline>'
)
assert html.b("test", id="b").to_html() == '<b id="b">test</b>'
assert html.i("test", id="i").to_html() == '<i id="i">test</i>'
assert html.s("test", id="s").to_html() == '<s id="s">test</s>'
assert html.u("test", id="u").to_html() == '<u id="u">test</u>'
assert (
html.strong("test", id="strong").to_html()
== '<strong id="strong">test</strong>'
)
assert html.em("test", id="em").to_html() == '<em id="em">test</em>'
assert html.mark("test", id="mark").to_html() == '<mark id="mark">test</mark>'
assert html.del_("test", id="del_").to_html() == '<del id="del_">test</del>'
assert html.ins("test", id="ins").to_html() == '<ins id="ins">test</ins>'
assert (
html.header("test", id="header").to_html()
== '<header id="header">test</header>'
)
assert html.big("test", id="big").to_html() == '<big id="big">test</big>'
assert html.small("test", id="small").to_html() == '<small id="small">test</small>'
assert html.code("test", id="code").to_html() == '<code id="code">test</code>'
assert html.pre("test", id="pre").to_html() == '<pre id="pre">test</pre>'
assert html.cite("test", id="cite").to_html() == '<cite id="cite">test</cite>'
assert (
html.blockquote("test", id="blockquote").to_html()
== '<blockquote id="blockquote">test</blockquote>'
)
assert html.abbr("test", id="abbr").to_html() == '<abbr id="abbr">test</abbr>'
assert html.h1("test", id="h1").to_html() == '<h1 id="h1">test</h1>'
assert html.h2("test", id="h2").to_html() == '<h2 id="h2">test</h2>'
assert html.h3("test", id="h3").to_html() == '<h3 id="h3">test</h3>'
assert html.h4("test", id="h4").to_html() == '<h4 id="h4">test</h4>'
assert html.h5("test", id="h5").to_html() == '<h5 id="h5">test</h5>'
assert html.h6("test", id="h6").to_html() == '<h6 id="h6">test</h6>'
assert html.title("test").to_html() == "<title>test</title>"
assert html.link(type="link").to_html() == '<link type="link">'
assert (
html.script("test", id="script").to_html()
== '<script id="script">test</script>'
)
assert (
html.noscript("test", id="noscript").to_html()
== '<noscript id="noscript">test</noscript>'
)
assert html.meta(id="meta").to_html() == '<meta id="meta">'
assert html.head(html.meta()).to_html() == "<head><meta></head>"
assert html.body("test", id="body").to_html() == '<body id="body">test</body>'
assert (
html.footer("test", id="footer").to_html()
== '<footer id="footer">test</footer>'
)
assert (
html.html(html.head(), html.body()).to_html()
== "<!doctype html>\n<html><head></head><body></body></html>"
)
assert html.iframe(id="iframe").to_html() == '<iframe id="iframe"></iframe>'
assert (
html.article("test", id="article").to_html()
== '<article id="article">test</article>'
)
assert (
html.address("test", id="address").to_html()
== '<address id="address">test</address>'
)
assert (
html.caption("test", id="caption").to_html()
== '<caption id="caption">test</caption>'
)
assert html.col(id="col").to_html() == '<col id="col">'
assert (
html.colgroup("test", id="colgroup").to_html()
== '<colgroup id="colgroup">test</colgroup>'
)
assert html.area(id="area").to_html() == '<area id="area">'
assert html.aside("test", id="aside").to_html() == '<aside id="aside">test</aside>'
assert html.source(id="source").to_html() == '<source id="source">'
assert html.audio("test", id="audio").to_html() == '<audio id="audio">test</audio>'
assert html.base(id="base").to_html() == '<base id="base">'
assert html.bdi("test", id="bdi").to_html() == '<bdi id="bdi">test</bdi>'
assert html.bdo("test", id="bdo").to_html() == '<bdo id="bdo">test</bdo>'
assert (
html.canvas("test", id="canvas").to_html()
== '<canvas id="canvas">test</canvas>'
)
assert html.data("test", id="data").to_html() == '<data id="data">test</data>'
assert (
html.datalist("test", id="datalist").to_html()
== '<datalist id="datalist">test</datalist>'
)
assert (
html.details("test", id="details").to_html()
== '<details id="details">test</details>'
)
assert html.dfn("test", id="dfn").to_html() == '<dfn id="dfn">test</dfn>'
assert (
html.dialog("test", id="dialog").to_html()
== '<dialog id="dialog">test</dialog>'
)
assert html.embed(id="embed").to_html() == '<embed id="embed">'
assert (
html.figcaption("test", id="figcaption").to_html()
== '<figcaption id="figcaption">test</figcaption>'
)
assert (
html.figure("test", id="figure").to_html()
== '<figure id="figure">test</figure>'
)
assert (
html.hrgroup("test", id="hrgroup").to_html()
== '<hrgroup id="hrgroup">test</hrgroup>'
)
assert html.hr(id="hr").to_html() == '<hr id="hr">'
assert html.kbd("test", id="kbd").to_html() == '<kbd id="kbd">test</kbd>'
assert html.map("test", id="map").to_html() == '<map id="map">test</map>'
assert html.menu("test", id="menu").to_html() == '<menu id="menu">test</menu>'
assert html.meter("test", id="meter").to_html() == '<meter id="meter">test</meter>'
assert html.nav("test", id="nav").to_html() == '<nav id="nav">test</nav>'
assert (
html.object("test", id="object").to_html()
== '<object id="object">test</object>'
)
assert html.param(id="param").to_html() == '<param id="param">'
assert (
html.picture("test", id="picture").to_html()
== '<picture id="picture">test</picture>'
)
assert (
html.progress("test", id="progress").to_html()
== '<progress id="progress">test</progress>'
)
assert html.q("test", id="q").to_html() == '<q id="q">test</q>'
assert html.rp("test", id="rp").to_html() == '<rp id="rp">test</rp>'
assert html.rt("test", id="rt").to_html() == '<rt id="rt">test</rt>'
assert html.ruby("test", id="ruby").to_html() == '<ruby id="ruby">test</ruby>'
assert html.samp("test", id="samp").to_html() == '<samp id="samp">test</samp>'
assert (
html.search("test", id="search").to_html()
== '<search id="search">test</search>'
)
assert html.sub("test", id="sub").to_html() == '<sub id="sub">test</sub>'
assert (
html.summary("test", id="summary").to_html()
== '<summary id="summary">test</summary>'
)
assert html.sup("test", id="sup").to_html() == '<sup id="sup">test</sup>'
assert (
html.template("test", id="template").to_html()
== '<template id="template">test</template>'
)
assert html.time("test", id="time").to_html() == '<time id="time">test</time>'
assert html.track(id="track").to_html() == '<track id="track">'
assert html.var("test", id="var").to_html() == '<var id="var">test</var>'
assert html.video("test", id="video").to_html() == '<video id="video">test</video>'
assert html.wbr(id="wbr").to_html() == '<wbr id="wbr">'

0 comments on commit 592f1a6

Please sign in to comment.