mirror of
https://github.com/a-h/templ.git
synced 2025-02-06 09:27:56 +00:00
3c65b4309b
Co-authored-by: Adrian Hesketh <adrianhesketh@hushmail.com>
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package templ_test
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"errors"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/a-h/templ"
|
|
"github.com/google/go-cmp/cmp"
|
|
)
|
|
|
|
func TestJoin(t *testing.T) {
|
|
compErr := errors.New("component error")
|
|
|
|
hello := templ.ComponentFunc(func(ctx context.Context, w io.Writer) error {
|
|
if _, err := io.WriteString(w, "Hello"); err != nil {
|
|
t.Fatalf("failed to write string: %v", err)
|
|
}
|
|
return nil
|
|
})
|
|
world := templ.ComponentFunc(func(ctx context.Context, w io.Writer) error {
|
|
if _, err := io.WriteString(w, "World"); err != nil {
|
|
t.Fatalf("failed to write string: %v", err)
|
|
}
|
|
return nil
|
|
})
|
|
err := templ.ComponentFunc(func(ctx context.Context, w io.Writer) error {
|
|
return compErr
|
|
})
|
|
|
|
tests := []struct {
|
|
name string
|
|
input []templ.Component
|
|
expectedOutput string
|
|
expectedErr error
|
|
}{
|
|
{
|
|
name: "a nil slice of components produces no output",
|
|
input: nil,
|
|
expectedOutput: "",
|
|
},
|
|
{
|
|
name: "an empty list of components produces no output",
|
|
input: []templ.Component{},
|
|
expectedOutput: "",
|
|
},
|
|
{
|
|
name: "components are rendered in order",
|
|
input: []templ.Component{hello, world},
|
|
expectedOutput: "HelloWorld",
|
|
},
|
|
{
|
|
name: "components are rendered in order, and errors returned",
|
|
input: []templ.Component{hello, err},
|
|
expectedOutput: "Hello",
|
|
expectedErr: compErr,
|
|
},
|
|
{
|
|
name: "no further components are rendered after an error",
|
|
input: []templ.Component{err, hello},
|
|
expectedOutput: "",
|
|
expectedErr: compErr,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := templ.Join(tt.input...)
|
|
b := new(bytes.Buffer)
|
|
err := got.Render(context.Background(), b)
|
|
if err != tt.expectedErr {
|
|
t.Fatalf("failed to render component: %v", err)
|
|
}
|
|
if diff := cmp.Diff(tt.expectedOutput, b.String()); diff != "" {
|
|
t.Error(diff)
|
|
}
|
|
})
|
|
}
|
|
}
|