66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
|
package testspreadattributes
|
||
|
|
||
|
import (
|
||
|
_ "embed"
|
||
|
"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) {
|
||
|
component := BasicTemplate(templ.Attributes{
|
||
|
// Should render as `bool` as the value is true, and the conditional render is also true.
|
||
|
"bool": templ.KV(true, true),
|
||
|
// Should not render, as the conditional render value is false.
|
||
|
"bool-disabled": templ.KV(true, false),
|
||
|
// Should render non-nil string values.
|
||
|
"data-attr": ptr("value"),
|
||
|
// Should render non-nil boolean values that evaluate to true.
|
||
|
"data-attr-bool": ptr(true),
|
||
|
// Should render as `dateId="my-custom-id"`.
|
||
|
"dateId": "my-custom-id",
|
||
|
// Should render as `hx-get="/page"`.
|
||
|
"hx-get": "/page",
|
||
|
// Should render as `id="test"`.
|
||
|
"id": "test",
|
||
|
// Should not render a nil string pointer.
|
||
|
"key": nilPtr[string](),
|
||
|
// Should not render a nil boolean value.
|
||
|
"boolkey": nilPtr[bool](),
|
||
|
// Should not render, as the attribute value, and the conditional render value is false.
|
||
|
"no-bool": templ.KV(false, false),
|
||
|
// Should not render, as the conditional render value is false.
|
||
|
"no-text": templ.KV("empty", false),
|
||
|
// Should render as `nonshare`, as the value is true.
|
||
|
"nonshade": true,
|
||
|
// Should not render, as the value is false.
|
||
|
"shade": false,
|
||
|
// Should render text="lorem" as the value is true.
|
||
|
"text": templ.KV("lorem", true),
|
||
|
// Optional attribute based on result of func() bool.
|
||
|
"optional-from-func-false": func() bool { return false },
|
||
|
// Optional attribute based on result of func() bool.
|
||
|
"optional-from-func-true": func() bool { return true },
|
||
|
})
|
||
|
|
||
|
diff, err := htmldiff.Diff(component, expected)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if diff != "" {
|
||
|
t.Error(diff)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func nilPtr[T any]() *T {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func ptr[T any](x T) *T {
|
||
|
return &x
|
||
|
}
|