You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
1.7 KiB
Go
89 lines
1.7 KiB
Go
package templtest
|
|
|
|
import (
|
|
_ "embed"
|
|
"errors"
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.buddy.wtf/lib/tmpl"
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
//go:embed expect/index-simple.html
|
|
var expectdIndexHTML string
|
|
|
|
func TestHTML(t *testing.T) {
|
|
type testcase struct {
|
|
Name string
|
|
tmpl.Templates
|
|
Expected string
|
|
Template string
|
|
Data interface{}
|
|
Err bool
|
|
}
|
|
|
|
tt := []testcase{
|
|
{
|
|
Name: "get template by name",
|
|
Expected: expectdIndexHTML,
|
|
Template: "index",
|
|
Data: "test",
|
|
Templates: tmpl.Templates{
|
|
FS: data,
|
|
Root: "data",
|
|
Suffix: "html.tmpl",
|
|
Funcs: map[string]interface{}{
|
|
"upper": strings.ToUpper,
|
|
},
|
|
},
|
|
},
|
|
|
|
{
|
|
Name: "error on invalid template",
|
|
Err: true,
|
|
Template: "borked",
|
|
Templates: tmpl.Templates{FS: data, Suffix: "invalid"},
|
|
},
|
|
|
|
{
|
|
Name: "error calling invalid template",
|
|
Template: "borked",
|
|
Templates: tmpl.Templates{
|
|
FS: data,
|
|
Suffix: "template",
|
|
Funcs: map[string]interface{}{
|
|
"return_error": func() (string, error) {
|
|
return "invalid", errors.New("error running template")
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tt {
|
|
tc := tc
|
|
t.Run(tc.Name, func(t *testing.T) {
|
|
t.Parallel()
|
|
a := assert.New(t)
|
|
template, err := tc.Templates.HTML(tc.Template)
|
|
if tc.Err {
|
|
a.Error(err)
|
|
return
|
|
} else {
|
|
a.NoError(err)
|
|
}
|
|
actual := tmpl.String(template, tc.Data)
|
|
a.Empty(cmp.Diff(singlespace(actual), singlespace(tc.Expected)))
|
|
})
|
|
}
|
|
}
|
|
|
|
var spacesRegex = regexp.MustCompile(`\s+`)
|
|
|
|
func singlespace(in string) string {
|
|
return strings.Join(spacesRegex.Split(in, -1), " ")
|
|
}
|