{ describe, it, ... }: let html = import ../nixite/html.nix; in with html; describe "tag" [ (it "keeps info in the tag" (let p = tag "p"; in { actual = p.tag; expected = "p"; })) (it "keeps attr info in the tag" (let p = tag "p" {class = "";}; in { actual = p.attrs; expected = {class = "";}; })) (it "keeps tag after setting attrs" (let p = tag "p" {class = "";}; in { actual = p.tag; expected = "p"; })) (it "makes a p tag" { actual = tag "p" {} "Hello"; expected = { tag = "p"; attrs = {}; child = "Hello"; }; removeDunders = true; }) (it "makes element" (let para = tag "p" {}; in { expected = "p"; actual = para.tag; })) (it "keeps attrs on element" (let attrs = {style = {foo = "bar";};}; para = tag "p" attrs; in { expected = attrs; actual = para.attrs; })) (it "makes renderable element" (let attrs = {style = {foo = "bar";};}; para = tag "p" attrs; in { expected = "

"; actual = toString (para ""); })) (it "keeps tag" (let attrs = {style = {foo = "bar";};}; para = tag "p" attrs; in { expected = "p"; actual = (para "").tag; })) (it "keeps style" (let attrs = {style = {foo = "bar";};}; para = tag "p" attrs; in { expected = {foo = "bar";}; actual = (para "").attrs.style; })) (it "needs no args to make string" (let p = tag "p"; in { actual = toString p; expected = "

"; })) (it "needs no content to make string" (let p = tag "p"; in { actual = toString (p {class = "foobar";}); expected = ''

''; })) (it "can take many sets of props" (let p = tag "p"; in { actual = toString (p {class = "foobar";} {style = "a style";}); expected = ''

''; })) (it "works recursively" (let attrs = {style = {foo = "bar";};}; para = tag "p" attrs; a = tag "a" {}; in { expected = "

hello

"; actual = toString (para (a "hello")); })) (it "throws with function child" { actual = toString (tag "p" (i: "")); throws = true; }) (it "throws with a number" { actual = toString (tag "p" 5); throws = true; }) (it "throws with a bool" { actual = toString (tag "p" true); throws = true; }) (it "throws with a null" { actual = toString (tag "p" null); throws = true; }) (it "concatinates classes" { actual = toString (tag "p" {class = ["class1" "class2"];} "Hello"); expected = ''

Hello

''; }) (it "renders on / off attrs" { actual = toString (tag "p" { on = true; off = false; }); expected = "

"; }) ] ++ describe "addToHead" [ (it "applies style" (let page = tag "html" {} [(tag "head" {} ["foo"])]; in { actual = addToHead page ["bar"]; expected = { tag = "html"; attrs = {}; child = [(tag "head" {} ["foo" "bar"])]; }; removeDunders = true; })) ]