1
0
html/lib_test.go

106 lines
1.6 KiB
Go

package html_test
import (
"bytes"
"code.squareroundforest.org/arpio/html"
. "code.squareroundforest.org/arpio/html/tags"
"code.squareroundforest.org/arpio/notation"
"testing"
)
func TestLib(t *testing.T) {
t.Run("templated tag", func(t *testing.T) {
type (
member struct {
name string
level int
}
team struct {
name string
rank int
members []member
}
)
memberHTML := html.FromTemplate(
func(m member) html.Tag {
return Li(
Div("Name: ", m.name),
Div("Level: ", m.level),
)
},
)
teamHTML := html.FromTemplate(
func(t team) html.Tag {
return Div(
H3(t.name),
P("Rank: ", t.rank),
Ul(html.MapChildren(t.members, memberHTML)...),
)
},
)
myTeam := team{
name: "Foo",
rank: 3,
members: []member{{
name: "Bar",
level: 4,
}, {
name: "Baz",
level: 1,
}, {
name: "Qux",
level: 4,
}},
}
var b bytes.Buffer
if err := html.RenderIndent(&b, html.Indentation{Indent: "\t"}, teamHTML(myTeam)); err != nil {
t.Fatal(err)
}
const expect = `<div>
<h3>Foo</h3>
<p>Rank: 3</p>
<ul>
<li>
<div>
Name: Bar
</div>
<div>
Level: 4
</div>
</li>
<li>
<div>
Name: Baz
</div>
<div>
Level: 1
</div>
</li>
<li>
<div>
Name: Qux
</div>
<div>
Level: 4
</div>
</li>
</ul>
</div>`
if b.String() != expect {
notation.Println([]byte(expect)[48:96])
notation.Println(b.Bytes()[48:96])
t.Fatal(b.String())
}
})
t.Run("ampty attributes", func(t *testing.T) {
})
}