// Package testing provides test helpers that support fiber templates package templatetesting import ( "bytes" "html/template" "io/fs" "strings" "testing" "git.sapphic.engineer/roleypoly/v4/templates" ) var ( funcMap = template.FuncMap{ "embed": func() string { return "%%EMBED%%" }, } Templates *template.Template = template.New("index").Funcs(funcMap) ) func init() { fs.WalkDir(templates.FS, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } if d.IsDir() { return nil } fiberName := strings.Replace(path, ".html", "", 1) f, err := templates.FS.ReadFile(path) if err != nil { return err } if fiberName == "index" { Templates, err = Templates.Parse(string(f)) } else { _, err = Templates.New(fiberName).Parse(string(f)) } return err }, ) } func Template(t *testing.T, name string, data interface{}) string { buf := bytes.Buffer{} err := Templates.ExecuteTemplate(&buf, name, data) if err != nil { debugTemplates(t) t.Fatal("failed to render: ", err) } return buf.String() } func debugTemplates(t *testing.T) { for i, tmpl := range Templates.Templates() { t.Logf("template %d: name=%s", i, tmpl.Name()) } }