2025-09-11 20:50:00 +02:00
|
|
|
package html_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"code.squareroundforest.org/arpio/html"
|
|
|
|
|
. "code.squareroundforest.org/arpio/html/tags"
|
|
|
|
|
"testing"
|
2025-09-12 01:58:50 +02:00
|
|
|
"bytes"
|
2025-09-11 20:50:00 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
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(
|
2025-09-12 01:58:50 +02:00
|
|
|
func(m member) html.Tag {
|
2025-09-11 20:50:00 +02:00
|
|
|
return Li(
|
|
|
|
|
Div("Name: ", m.name),
|
|
|
|
|
Div("Level: ", m.level),
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
teamHTML := html.FromTemplate(
|
2025-09-12 01:58:50 +02:00
|
|
|
func(t team) html.Tag {
|
2025-09-11 20:50:00 +02:00
|
|
|
return Div(
|
|
|
|
|
H3(t.name),
|
|
|
|
|
P("Rank: ", t.rank),
|
2025-09-12 01:58:50 +02:00
|
|
|
Ul(html.MapChildren(t.members, memberHTML)...),
|
2025-09-11 20:50:00 +02:00
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
myTeam := team{
|
|
|
|
|
name: "Foo",
|
|
|
|
|
rank: 3,
|
|
|
|
|
members: []member{{
|
|
|
|
|
name: "Bar",
|
|
|
|
|
level: 4,
|
|
|
|
|
}, {
|
|
|
|
|
name: "Baz",
|
|
|
|
|
level: 1,
|
|
|
|
|
}, {
|
|
|
|
|
name: "Qux",
|
|
|
|
|
level: 4,
|
|
|
|
|
}},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var b bytes.Buffer
|
2025-09-12 01:58:50 +02:00
|
|
|
if err := html.RenderIndent(&b, "\t", 0, teamHTML(myTeam)); err != nil {
|
2025-09-11 20:50:00 +02:00
|
|
|
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())
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|