learnlytics-go/templ/generator/test-attribute-errors/render_test.go
2025-03-20 12:35:13 +01:00

58 lines
1.5 KiB
Go

package testattrerrs
import (
"bytes"
"context"
_ "embed"
"errors"
"testing"
"github.com/a-h/templ"
"github.com/a-h/templ/generator/htmldiff"
)
//go:embed expected.html
var expected string
func Test(t *testing.T) {
t.Run("can render without error", func(t *testing.T) {
component := TestComponent(nil)
_, err := htmldiff.Diff(component, expected)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
})
t.Run("attribute expressions can return errors", func(t *testing.T) {
errSomethingBad := errors.New("bad error")
err := TestComponent(errSomethingBad).Render(context.Background(), &bytes.Buffer{})
if err == nil {
t.Fatalf("expected error, but got nil")
}
t.Run("the errors are templ errors", func(t *testing.T) {
var templateErr templ.Error
if !errors.As(err, &templateErr) {
t.Fatalf("expected error to be templ.Error, but got %T", err)
}
if templateErr.FileName != `generator/test-attribute-errors/template.templ` {
t.Errorf("expected error in `generator/test-attribute-errors/template.templ`, but got %v", templateErr.FileName)
}
if templateErr.Line != 18 {
t.Errorf("expected error on line 18, but got %v", templateErr.Line)
}
if templateErr.Col != 36 {
t.Errorf("expected error on column 26, but got %v", templateErr.Col)
}
})
t.Run("the underlying error can be unwrapped", func(t *testing.T) {
if !errors.Is(err, errSomethingBad) {
t.Errorf("expected error: %v, but got %v", errSomethingBad, err)
}
})
})
}