Skip to content

Commit 7cae24f

Browse files
kfuledead-claudia
authored andcommitted
fix test for #1916
1 parent 8c91b89 commit 7cae24f

File tree

1 file changed

+58
-12
lines changed

1 file changed

+58
-12
lines changed

render/tests/test-attributes.js

Lines changed: 58 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -527,19 +527,65 @@ o.spec("attributes", function() {
527527
m("option", {value: ""})
528528
)
529529
}
530-
/* FIXME
531-
This incomplete test is meant for testing #1916.
532-
However it cannot be completed until #1978 is addressed
533-
which is a lack a working select.selected / option.selected
534-
attribute. Ask @dead-claudia.
535-
536-
o("render select options", function() {
537-
var select = m("select", {selectedIndex: 0},
538-
m("option", {value: "1", selected: ""})
539-
)
540-
render(root, select)
530+
o("render select options with `selected` (#1916)", function() {
531+
var select1 = m("select", [m("option"), m("option")])
532+
var select2 = m("select", [m("option", {selected: false}), m("option", {selected: true})])
533+
var select3 = m("select", [m("option", {selected: false}), m("option", {selected: true})])
534+
var select4 = m("select", [m("option", {selected: false}), m("option", {selected: true})])
535+
var select5 = m("select", [m("option", {selected: true}), m("option", {selected: false})])
536+
var select6 = m("select", [m("option", {selected: true}), m("option", {selected: false})])
537+
var select7 = m("select", [m("option", {selected: true}), m("option", {selected: false})])
538+
539+
// selected: [undefined,undefined]
540+
// DomMock can't set/read `option.selected` when the option doesn't have a `select` parent,
541+
// so call render() without `option.selected` first.
542+
render(root, select1)
543+
var el = root.firstChild
544+
o(el.selectedIndex).equals(0)
545+
o(el.childNodes[0].selected).equals(true)
546+
o(el.childNodes[1].selected).equals(false)
547+
548+
// selected: [undefined,undefined] -> [false,true] (changed -> update by render)
549+
render(root, select2)
550+
o(el.selectedIndex).equals(1)
551+
o(el.childNodes[0].selected).equals(false)
552+
o(el.childNodes[1].selected).equals(true)
553+
554+
// selected: [false,true] -> [false,true] (unchanged, not focused -> not update by render)
555+
el.selectedIndex = 0 // set 0 without render
556+
render(root, select3)
557+
o(el.selectedIndex).equals(0) // unchanged
558+
o(el.childNodes[0].selected).equals(true)
559+
o(el.childNodes[1].selected).equals(false)
560+
561+
// selected: [false,true] -> [false,true] (unchanged, focused -> update by render)
562+
el.focus()
563+
render(root, select4)
564+
o(el.selectedIndex).equals(1)
565+
o(el.childNodes[0].selected).equals(false)
566+
o(el.childNodes[1].selected).equals(true)
567+
568+
// selected: [false,true] -> [true,false] (changed -> update by render)
569+
render(root, select5)
570+
o(el.selectedIndex).equals(0)
571+
o(el.childNodes[0].selected).equals(true)
572+
o(el.childNodes[1].selected).equals(false)
573+
574+
// selected: [true,false] -> [true,false] (unchanged, not focused -> not update by render)
575+
el.selectedIndex = 1 // set 1 without render
576+
root.focus()
577+
render(root, select6)
578+
o(el.selectedIndex).equals(1) // unchanged
579+
o(el.childNodes[0].selected).equals(false)
580+
o(el.childNodes[1].selected).equals(true)
581+
582+
// selected: [true,false] -> [true,false] (unchanged, focused -> update by render)
583+
el.focus()
584+
render(root, select7)
585+
o(el.selectedIndex).equals(0)
586+
o(el.childNodes[0].selected).equals(true)
587+
o(el.childNodes[1].selected).equals(false)
541588
})
542-
*/
543589
o("can be set as text", function() {
544590
var a = makeSelect()
545591
var b = makeSelect("2")

0 commit comments

Comments
 (0)