fix multiselect combobox
This commit is contained in:
46
go/vdom/vnode_test.go
Normal file
46
go/vdom/vnode_test.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package vdom
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// A boolean DOM property is a trap in HTML: the attribute's PRESENCE is what means
|
||||
// true. checked="false" is a ticked checkbox — the value is not even read. So a false
|
||||
// boolean prop must be omitted entirely, and a true one written bare.
|
||||
func TestBoolPropSSR(t *testing.T) {
|
||||
ticked := RenderHTML(Input(Attr("type", "checkbox"), BoolProp("checked", true)))
|
||||
if !strings.Contains(ticked, " checked") {
|
||||
t.Errorf("a checked box did not render the attribute: %s", ticked)
|
||||
}
|
||||
if strings.Contains(ticked, `checked="`) {
|
||||
t.Errorf("a boolean attribute must be bare, not valued: %s", ticked)
|
||||
}
|
||||
|
||||
unticked := RenderHTML(Input(Attr("type", "checkbox"), BoolProp("checked", false)))
|
||||
if strings.Contains(unticked, "checked") {
|
||||
t.Errorf(`an unchecked box must omit the attribute entirely — checked="false" renders as TICKED: %s`, unticked)
|
||||
}
|
||||
}
|
||||
|
||||
// Non-boolean props keep their values: an input's value is a string, and dropping it
|
||||
// when empty would be just as wrong as writing checked="false".
|
||||
func TestValuePropSSRKeepsItsValue(t *testing.T) {
|
||||
got := RenderHTML(Input(Prop("value", "false")))
|
||||
if !strings.Contains(got, `value="false"`) {
|
||||
t.Errorf(`value="false" is a string, not a boolean, and must survive: %s`, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsBoolProp(t *testing.T) {
|
||||
for _, k := range []string{"checked", "disabled", "selected", "open"} {
|
||||
if !IsBoolProp(k) {
|
||||
t.Errorf("%q should be known as a boolean property — the reconciler writes it as a string otherwise", k)
|
||||
}
|
||||
}
|
||||
for _, k := range []string{"value", "className", "id"} {
|
||||
if IsBoolProp(k) {
|
||||
t.Errorf("%q is not a boolean property", k)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user