58 lines
1.5 KiB
Go
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)
|
|
}
|
|
})
|
|
|
|
})
|
|
}
|