1
0
html/lib_test.go
2025-09-12 01:58:50 +02:00

103 lines
1.3 KiB
Go

package html_test
import (
"code.squareroundforest.org/arpio/html"
. "code.squareroundforest.org/arpio/html/tags"
"testing"
"bytes"
)
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, "\t", 0, teamHTML(myTeam)); err != nil {
t.Fatal(err)
}
if b.String() != `<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>
` {
t.Fatal(b.String())
}
})
}