package html_test import ( "bytes" "code.squareroundforest.org/arpio/html" . "code.squareroundforest.org/arpio/html/tags" "testing" "code.squareroundforest.org/arpio/notation" ) 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 = `

Foo

Rank: 3

` 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) { }) }