328 lines
11 KiB
JavaScript
328 lines
11 KiB
JavaScript
description(
|
|
"This test checks the behavior of the add() method on the select.options object.<br>" +
|
|
"It covers both the the one-argument (1.x) and two-argument (2.x) signatures of the add() method."
|
|
);
|
|
|
|
div = document.createElement("div");
|
|
sel = document.createElement("select");
|
|
sel.setAttribute("id", "select1");
|
|
div.appendChild(sel);
|
|
sel = document.createElement("select");
|
|
sel.setAttribute("id", "select2");
|
|
div.appendChild(sel);
|
|
document.body.insertBefore(div, document.getElementById("console").nextSibling);
|
|
|
|
debug("1.1 Add Option to empty Options");
|
|
var select1 = document.getElementById("select1");
|
|
var option1 = document.createElement("OPTION");
|
|
select1.options.add(option1);
|
|
option1.value = "1";
|
|
option1.textContent = "A";
|
|
shouldBe("select1.options.length", "1");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
shouldBe("select1.options[0].value", "'1'");
|
|
shouldBe("select1.options[0].textContent", "'A'");
|
|
debug("");
|
|
|
|
debug("1.2 Add Option to non-empty Options");
|
|
option1 = document.createElement("OPTION");
|
|
select1.options.add(option1);
|
|
option1.value = "2";
|
|
option1.textContent = "B";
|
|
shouldBe("select1.options.length", "2");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
shouldBe("select1.options[0].value", "'1'");
|
|
shouldBe("select1.options[0].textContent", "'A'");
|
|
shouldBe("select1.options[1].value", "'2'");
|
|
shouldBe("select1.options[1].textContent", "'B'");
|
|
debug("");
|
|
|
|
debug("1.3 Add Option after setting parameters");
|
|
option1 = document.createElement("OPTION");
|
|
option1.value = "3";
|
|
option1.textContent = "C";
|
|
select1.options.add(option1);
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
shouldBe("select1.options[0].value", "'1'");
|
|
shouldBe("select1.options[0].textContent", "'A'");
|
|
shouldBe("select1.options[1].value", "'2'");
|
|
shouldBe("select1.options[1].textContent", "'B'");
|
|
shouldBe("select1.options[2].value", "'3'");
|
|
shouldBe("select1.options[2].textContent", "'C'");
|
|
debug("");
|
|
|
|
debug("1.4 Add a non-Option element");
|
|
div = document.createElement("DIV");
|
|
shouldThrowErrorName("select1.options.add(div)", "TypeError");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("1.5 Add a non-element (string)");
|
|
option1 = "o";
|
|
shouldThrow("select1.options.add(option1)");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("1.6 Add a non-element (number)");
|
|
option1 = 3.14;
|
|
shouldThrow("select1.options.add(option1)");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("1.7 Add a non-element (boolean)");
|
|
option1 = true;
|
|
shouldThrow("select1.options.add(option1)");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("1.8 Add undefined");
|
|
option1 = undefined;
|
|
shouldThrow("select1.options.add(option1)");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("1.9 Add null");
|
|
option1 = null;
|
|
shouldThrow("select1.options.add(option1)");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("1.10 Add negative infinity");
|
|
option1 = -1/0;
|
|
shouldThrow("select1.options.add(option1)");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("1.11 Add NaN");
|
|
option1 = 0/0;
|
|
shouldThrow("select1.options.add(option1)");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("1.12 Add positive infinity");
|
|
option1 = 1/0;
|
|
shouldThrow("select1.options.add(option1)");
|
|
shouldBe("select1.options.length", "3");
|
|
shouldBe("select1.selectedIndex", "0");
|
|
debug("");
|
|
|
|
debug("2.1 Add Option to empty Options");
|
|
var select2 = document.getElementById("select2");
|
|
var option2 = document.createElement("OPTION");
|
|
select2.options.add(option2, 0);
|
|
option2.value = "1";
|
|
option2.textContent = "A";
|
|
shouldBe("select2.options.length", "1");
|
|
shouldBe("select2.selectedIndex", "0");
|
|
shouldBe("select2.options[0].value", "'1'");
|
|
shouldBe("select2.options[0].textContent", "'A'");
|
|
debug("");
|
|
|
|
debug("2.2 Add Option after setting parameters");
|
|
option2 = document.createElement("OPTION");
|
|
option2.value = "2";
|
|
option2.textContent = "B";
|
|
select2.options.add(option2, 1);
|
|
shouldBe("select2.options.length", "2");
|
|
shouldBe("select2.selectedIndex", "0");
|
|
shouldBe("select2.options[0].value", "'1'");
|
|
shouldBe("select2.options[0].textContent", "'A'");
|
|
shouldBe("select2.options[1].value", "'2'");
|
|
shouldBe("select2.options[1].textContent", "'B'");
|
|
debug("");
|
|
|
|
debug("2.3 Insert Option at beginning of Options");
|
|
option2 = document.createElement("OPTION");
|
|
select2.options.add(option2, 0);
|
|
option2.value = "0";
|
|
option2.textContent = "Z";
|
|
shouldBe("select2.options.length", "3");
|
|
shouldBe("select2.selectedIndex", "1");
|
|
shouldBe("select2.options[0].value", "'0'");
|
|
shouldBe("select2.options[0].textContent", "'Z'");
|
|
shouldBe("select2.options[1].value", "'1'");
|
|
shouldBe("select2.options[1].textContent", "'A'");
|
|
shouldBe("select2.options[2].value", "'2'");
|
|
shouldBe("select2.options[2].textContent", "'B'");
|
|
debug("");
|
|
|
|
debug("2.4 Insert Option in middle of Options");
|
|
option2 = document.createElement("OPTION");
|
|
select2.options.add(option2, 2);
|
|
option2.value = "1.5";
|
|
option2.textContent = "A.5";
|
|
shouldBe("select2.options.length", "4");
|
|
shouldBe("select2.selectedIndex", "1");
|
|
shouldBe("select2.options[0].value", "'0'");
|
|
shouldBe("select2.options[0].textContent", "'Z'");
|
|
shouldBe("select2.options[1].value", "'1'");
|
|
shouldBe("select2.options[1].textContent", "'A'");
|
|
shouldBe("select2.options[2].value", "'1.5'");
|
|
shouldBe("select2.options[2].textContent", "'A.5'");
|
|
shouldBe("select2.options[3].value", "'2'");
|
|
shouldBe("select2.options[3].textContent", "'B'");
|
|
debug("");
|
|
|
|
debug("2.5 Insert Option at end of Options");
|
|
option2 = document.createElement("OPTION");
|
|
select2.options.add(option2, 4);
|
|
option2.value = "3";
|
|
option2.textContent = "C";
|
|
shouldBe("select2.options.length", "5");
|
|
shouldBe("select2.selectedIndex", "1");
|
|
shouldBe("select2.options[0].value", "'0'");
|
|
shouldBe("select2.options[0].textContent", "'Z'");
|
|
shouldBe("select2.options[1].value", "'1'");
|
|
shouldBe("select2.options[1].textContent", "'A'");
|
|
shouldBe("select2.options[2].value", "'1.5'");
|
|
shouldBe("select2.options[2].textContent", "'A.5'");
|
|
shouldBe("select2.options[3].value", "'2'");
|
|
shouldBe("select2.options[3].textContent", "'B'");
|
|
shouldBe("select2.options[4].value", "'3'");
|
|
shouldBe("select2.options[4].textContent", "'C'");
|
|
debug("");
|
|
|
|
debug("2.6 Insert Option beyond the end of Options");
|
|
option2 = document.createElement("OPTION");
|
|
select2.options.add(option2, 6);
|
|
option2.value = "4";
|
|
option2.textContent = "D";
|
|
shouldBe("select2.options.length", "6");
|
|
shouldBe("select2.selectedIndex", "1");
|
|
shouldBe("select2.options[0].value", "'0'");
|
|
shouldBe("select2.options[0].textContent", "'Z'");
|
|
shouldBe("select2.options[1].value", "'1'");
|
|
shouldBe("select2.options[1].textContent", "'A'");
|
|
shouldBe("select2.options[2].value", "'1.5'");
|
|
shouldBe("select2.options[2].textContent", "'A.5'");
|
|
shouldBe("select2.options[3].value", "'2'");
|
|
shouldBe("select2.options[3].textContent", "'B'");
|
|
shouldBe("select2.options[4].value", "'3'");
|
|
shouldBe("select2.options[4].textContent", "'C'");
|
|
shouldBe("select2.options[5].value", "'4'");
|
|
shouldBe("select2.options[5].textContent", "'D'");
|
|
debug("");
|
|
|
|
debug("2.7 Add an Option at index -1");
|
|
option2 = document.createElement("OPTION");
|
|
select2.options.add(option2, -1);
|
|
option2.value = "5";
|
|
option2.textContent = "E";
|
|
shouldBe("select2.options.length", "7");
|
|
shouldBe("select2.selectedIndex", "1");
|
|
shouldBe("select2.options[0].value", "'0'");
|
|
shouldBe("select2.options[0].textContent", "'Z'");
|
|
shouldBe("select2.options[1].value", "'1'");
|
|
shouldBe("select2.options[1].textContent", "'A'");
|
|
shouldBe("select2.options[2].value", "'1.5'");
|
|
shouldBe("select2.options[2].textContent", "'A.5'");
|
|
shouldBe("select2.options[3].value", "'2'");
|
|
shouldBe("select2.options[3].textContent", "'B'");
|
|
shouldBe("select2.options[4].value", "'3'");
|
|
shouldBe("select2.options[4].textContent", "'C'");
|
|
shouldBe("select2.options[5].value", "'4'");
|
|
shouldBe("select2.options[5].textContent", "'D'");
|
|
shouldBe("select2.options[6].value", "'5'");
|
|
shouldBe("select2.options[6].textContent", "'E'");
|
|
debug("");
|
|
|
|
debug("2.8 Add an Option at index -2");
|
|
option2 = document.createElement("OPTION");
|
|
shouldNotThrow("select2.options.add(option2, -2)");
|
|
shouldBe("select2.options.length", "8");
|
|
shouldBe("select2.selectedIndex", "1");
|
|
debug("");
|
|
|
|
debug("2.9 Add an Option at index -Infinity");
|
|
option2 = document.createElement("OPTION");
|
|
shouldNotThrow("select2.options.add(option2, -1/0)");
|
|
shouldBe("select2.options.length", "9");
|
|
shouldBe("select2.selectedIndex", "2");
|
|
debug("");
|
|
|
|
debug("2.10 Add an Option at index NaN");
|
|
option2 = document.createElement("OPTION");
|
|
shouldNotThrow("select2.options.add(option2, 0/0)");
|
|
shouldBe("select2.options.length", "10");
|
|
shouldBe("select2.selectedIndex", "3");
|
|
debug("");
|
|
|
|
debug("2.11 Add an Option at index Infinity");
|
|
option2 = document.createElement("OPTION");
|
|
shouldNotThrow("select2.options.add(option2, 1/0)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.12 Add a non-Option element");
|
|
div = document.createElement("DIV");
|
|
shouldThrowErrorName("select2.options.add(div, 1)", "TypeError");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.13 Add a non-element (string)");
|
|
option2 = "o";
|
|
shouldThrow("select2.options.add(option2, 1)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.14 Add a non-element (number)");
|
|
option2 = 3.14;
|
|
shouldThrow("select2.options.add(option2, 1)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.15 Add a non-element (boolean)");
|
|
option2 = true;
|
|
shouldThrow("select2.options.add(option2, 1)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.16 Add undefined");
|
|
option2 = undefined;
|
|
shouldThrow("select2.options.add(option2, 1)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.17 Add null");
|
|
option2 = null;
|
|
shouldThrow("select2.options.add(option2, 1)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.18 Add negative infinity");
|
|
option2 = -1/0;
|
|
shouldThrow("select2.options.add(option2, 1)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.19 Add NaN");
|
|
option2 = 0/0;
|
|
shouldThrow("select2.options.add(option2, 1)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|
|
|
|
debug("2.20 Add positive infinity");
|
|
option2 = 1/0;
|
|
shouldThrow("select2.options.add(option2, 1)");
|
|
shouldBe("select2.options.length", "11");
|
|
shouldBe("select2.selectedIndex", "4");
|
|
debug("");
|