<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
<script src="resources/html-select-and-options-collection-utilities.js"></script>
</head>
<body>
<script>
description('Test select.options.add() with optgroup and with index parameter');

var mySelect = createSelectElementWithTestData();

function testAdd()
{
    HTMLOptionsCollection.prototype.add.apply(mySelect.options, arguments);
    var result = deepCopy(mySelect);
    mySelect = createSelectElementWithTestData(); // Reset
    return result;
}

function testAddWithoutResettingListOptions()
{
    HTMLOptionsCollection.prototype.add.apply(mySelect.options, arguments);
    return deepCopy(mySelect);
}

debug("<br>Call HTMLOptionsCollection.add() with zero arguments:");
shouldThrow("testAdd()");

debug("<br>Call HTMLOptionsCollection.add() with only one argument:");
shouldBeEqualToString('testAdd(createOption("Y9"))', "0,1,2,Y9");
shouldThrowErrorName('testAdd("foo")', "TypeError");
shouldThrowErrorName("testAdd(undefined)", "TypeError");
shouldThrowErrorName("testAdd(null)", "TypeError");

debug("<br>Call HTMLOptionsCollection.add() with two arguments:");
shouldBeEqualToString('testAdd(createGroup("Y1", "Y2"), null)', "0,1,2,Y1,Y2");
shouldBeEqualToString('testAdd(createGroup("Y3", "Y4"), 0)', "Y3,Y4,0,1,2");
shouldBeEqualToString('testAdd(createGroup("Y5", "Y6"), 2)', "0,1,Y5,Y6,2");
shouldBeEqualToString('testAdd(createGroup("Y7", "Y8"))', "0,1,2,Y7,Y8");

shouldBeEqualToString('testAddWithoutResettingListOptions(createOption("Y10"), mySelect.options[2])', "0,1,Y10,2");
shouldBeEqualToString('testAdd(createOption("Y11"), mySelect.options[1])', "0,Y11,1,Y10,2");

shouldBeEqualToString('testAddWithoutResettingListOptions(createGroup("Y12", "Y13"), mySelect.options[1])', "0,Y12,Y13,1,2");
shouldBeEqualToString('testAdd(createGroup("Y14", "Y15"), mySelect.options[3])', "0,Y12,Y13,Y14,Y15,1,2");

shouldThrow('testAdd(createOption("Y16"), createOption("Y17"))');

shouldBeEqualToString('testAdd(createOption("Y1"))', "0,1,2,Y1");
shouldBeEqualToString('testAdd(createOption("Y2"), null)', "0,1,2,Y2");
shouldBeEqualToString('testAdd(createOption("Y3"), 0)', "Y3,0,1,2");
shouldBeEqualToString('testAdd(createOption("Y4"), 1)', "0,Y4,1,2");
shouldBeEqualToString('testAdd(createOption("Y5"), 2)', "0,1,Y5,2");
shouldBeEqualToString('testAdd(createOption("Y6"), 3)', "0,1,2,Y6");
shouldBeEqualToString('testAdd(createOption("Y7"), 100)', "0,1,2,Y7");
shouldBeEqualToString('testAdd(createOption("Y8"), -100)', "0,1,2,Y8");
shouldBeEqualToString('testAdd(createOption("Y9"), "0")', "Y9,0,1,2");
shouldBeEqualToString('testAdd(createOption("Y10"), "1")', "0,Y10,1,2");
shouldBeEqualToString('testAdd(createOption("Y11"), "2")', "0,1,Y11,2");
shouldBeEqualToString('testAdd(createOption("Y12"), true)', "0,Y12,1,2");
shouldBeEqualToString('testAdd(createOption("Y13"), false)', "Y13,0,1,2");
shouldBeEqualToString('testAdd(createOption("Y14"), 2147483647)', "0,1,2,Y14");
shouldBeEqualToString('testAdd(createOption("Y15"), 2147483648)', "0,1,2,Y15");
shouldBeEqualToString('testAdd(createOption("Y16"), -2147483647)', "0,1,2,Y16");
shouldBeEqualToString('testAdd(createOption("Y17"), -2147483648)', "0,1,2,Y17");
shouldBeEqualToString('testAdd(createOption("Y18"), -2147483649)', "0,1,2,Y18");
shouldBeEqualToString('testAdd(createOption("Y19"), Infinity)', "Y19,0,1,2");
shouldBeEqualToString('testAdd(createOption("Y20"), -Infinity)', "Y20,0,1,2");
shouldBeEqualToString('testAdd(createOption("Y21"), "foo")', "Y21,0,1,2");
shouldBeEqualToString('testAdd(createOption("Y22"), NaN)', "Y22,0,1,2");
shouldBeEqualToString('testAdd(createOption("Y23"), undefined)', "0,1,2,Y23");
shouldBeEqualToString('testAdd(createOption("Y24"), -2)', "0,1,2,Y24");
shouldBeEqualToString('testAdd(createOption("X"), mySelect.options[0])', "X,0,1,2");
shouldBeEqualToString('testAdd(createOption("X"), mySelect.options[1])', "0,X,1,2");
shouldBeEqualToString('testAdd(createOption("X"), mySelect.options[2])', "0,1,X,2");
shouldBeEqualToString('testAdd(createOption("Y25"), 0, 1)', "Y25,0,1,2");
shouldBeEqualToString('testAdd(createOption("Y25"), mySelect.options[0], 1)', "Y25,0,1,2");
shouldThrowErrorName('testAdd("foo", 0)', "TypeError");
shouldThrowErrorName('testAdd(undefined, 0)', "TypeError");
shouldThrowErrorName('testAdd(null, 0)', "TypeError");

debug("<br>Call HTMLOptionsCollection.add() with three arguments (when it only takes two arguments):");
shouldBeEqualToString('testAdd(createOption("X"), 0, "unnecessary extra argument - should be ignored")', "X,0,1,2");
shouldBeEqualToString('testAdd(createOption("X"), mySelect.options[1], "unnecessary extra argument - should be ignored")', "0,X,1,2");
shouldBeEqualToString('testAdd(createGroup("G1", "G2"), 1, "unnecessary extra argument - should be ignored")', "0,G1,G2,1,2");
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
