| <link rel="stylesheet" href="../js/resources/js-test-style.css"> |
| <select id="test" size="3"> |
| </select> |
| <div id="console"></div> |
| <script src="../js/resources/js-test-pre.js"></script> |
| <script> |
| function reset(mySelect) { |
| mySelect.length = 0; |
| mySelect.options[mySelect.length] = new Option("one", "value", true, true); |
| mySelect.options[mySelect.length] = new Option("two", "value", true, true); |
| } |
| |
| var mySelect = document.getElementById("test"); |
| reset(mySelect); |
| var i = 0; |
| |
| debug((++i) + ") setting length to a negative length"); |
| shouldThrow("mySelect.options.length = -1;"); |
| shouldBe("mySelect.options.length", "2"); |
| shouldBe("mySelect.selectedIndex", "1"); |
| |
| debug((++i) + ") setting length to a larger length"); |
| mySelect.options.length = 5; |
| shouldBe("mySelect.options.length", "5"); |
| shouldBe("mySelect.selectedIndex", "1"); |
| |
| debug((++i) + ") setting length to a smaller length"); |
| mySelect.options.length = 2; |
| shouldBe("mySelect.options.length", "2"); |
| shouldBe("mySelect.selectedIndex", "1"); |
| |
| mySelect.options.length = 1; |
| shouldBe("mySelect.options.length", "1"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to the same length"); |
| mySelect.options.length = 2; |
| shouldBe("mySelect.options.length", "2"); |
| shouldBe("mySelect.selectedIndex", "1"); |
| |
| debug((++i) + ") setting length to non-integer value: null"); |
| mySelect.options.length = null; |
| shouldBe("mySelect.options.length", "0"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: undefined"); |
| mySelect.options.length = undefined; |
| shouldBe("mySelect.options.length", "0"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: true"); |
| mySelect.options.length = true; |
| shouldBe("mySelect.options.length", "1"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: false"); |
| mySelect.options.length = false; |
| shouldBe("mySelect.options.length", "0"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: non-numeric string"); |
| mySelect.options.length = "apple"; |
| shouldBe("mySelect.options.length", "0"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: object"); |
| mySelect.options.length = new Object(); |
| shouldBe("mySelect.options.length", "0"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: negative infinity"); |
| mySelect.options.length = -1/0; |
| shouldBe("mySelect.options.length", "0"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: NaN"); |
| mySelect.options.length = 0/0; |
| shouldBe("mySelect.options.length", "0"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: positive infinity"); |
| mySelect.options.length = 1/0; |
| shouldBe("mySelect.options.length", "0"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| reset(mySelect); |
| |
| debug((++i) + ") setting length to non-integer value: floating point number"); |
| mySelect.options.length = 2.1; |
| shouldBe("mySelect.options.length", "2"); |
| shouldBe("mySelect.selectedIndex", "1"); |
| |
| debug((++i) + ") setting an element by index past the end of the current list"); |
| mySelect.options[10] = new Option("ten", "value", true, true); |
| shouldBe("mySelect.options.length", "11"); |
| shouldBe("mySelect.selectedIndex", "10"); |
| |
| debug((++i) + ") setting an existing element by index"); |
| mySelect.options[10] = mySelect.options[10]; |
| shouldBe("mySelect.options.length", "11"); |
| shouldBe("mySelect.selectedIndex", "10"); |
| |
| debug((++i) + ") trying to set an element that's not an option: null"); |
| mySelect.options[10] = null; |
| shouldBe("mySelect.options.length", "10"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| |
| debug((++i) + ") trying to set an element that's not an option: undefined"); |
| mySelect.options[10] = undefined; |
| shouldBe("mySelect.options.length", "10"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| |
| debug((++i) + ") trying to set an element that's not an option: select element"); |
| shouldThrow("mySelect.options[10] = mySelect;"); |
| shouldBe("mySelect.options.length", "10"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| |
| debug((++i) + ") trying to set a option element using an invalid index: negative infinity"); |
| mySelect.options[-1/0] = document.createElement("option"); |
| shouldBe("mySelect.options.length", "10"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| |
| debug((++i) + ") trying to set a option element using an invalid index: NaN"); |
| mySelect.options[0/0] = document.createElement("option"); |
| shouldBe("mySelect.options.length", "10"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| |
| debug((++i) + ") trying to set a option element using an invalid index: positive infinity"); |
| mySelect.options[1/0] = document.createElement("option"); |
| shouldBe("mySelect.options.length", "10"); |
| shouldBe("mySelect.selectedIndex", "-1"); |
| |
| debug(""); |
| var successfullyParsed = true; |
| </script> |
| <script src="../js/resources/js-test-post.js"></script> |