Diff
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog 2015-07-07 11:52:49 UTC (rev 186448)
@@ -1,3 +1,36 @@
+2015-07-03 Daniel Bates <[email protected]>
+
+ REGRESSION (r178097): _javascript_ TypeError after clicking on compose button in Yahoo Mail
+ https://bugs.webkit.org/show_bug.cgi?id=146515
+ <rdar://problem/21348421>
+
+ Reviewed by Chris Dumez.
+
+ Add new sub-tests to LayoutTests/fast/dom/HTMLSelectElement/{add, options-collection-add}.html,
+ simplify existing test code, share common code, and update expected results.
+
+ Additionally, update results for tests in LayoutTests/fast/canvas now that we ignore extra
+ arguments passed to a Web IDL overloaded function whose implementation is generated by the
+ bindings generator script.
+
+ * fast/canvas/canvas-overloads-drawImage-expected.txt:
+ * fast/canvas/canvas-overloads-setFillColor-expected.txt:
+ * fast/canvas/canvas-overloads-setShadow-expected.txt:
+ * fast/canvas/canvas-overloads-setStrokeColor-expected.txt:
+ * fast/canvas/script-tests/canvas-overloads-drawImage.js:
+ * fast/canvas/script-tests/canvas-overloads-setFillColor.js:
+ * fast/canvas/script-tests/canvas-overloads-setShadow.js:
+ * fast/canvas/script-tests/canvas-overloads-setStrokeColor.js:
+ * fast/dom/HTMLSelectElement/add-expected.txt:
+ * fast/dom/HTMLSelectElement/add.html:
+ * fast/dom/HTMLSelectElement/options-collection-add-expected.txt:
+ * fast/dom/HTMLSelectElement/options-collection-add.html:
+ * fast/dom/HTMLSelectElement/resources/html-select-and-options-collection-utilities.js: Added.
+ (createSelectElementWithTestData):
+ (deepCopy):
+ (createOption):
+ (createGroup):
+
2015-06-30 Ryosuke Niwa <[email protected]>
REGRESSION (r179168): Characters overlap after resizing the font on the copy-pasted Japanese text
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-drawImage-expected.txt (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-drawImage-expected.txt 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-drawImage-expected.txt 2015-07-07 11:52:49 UTC (rev 186448)
@@ -13,8 +13,8 @@
PASS ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
PASS ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
PASS ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0) is undefined
-PASS ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
-PASS ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
+PASS ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0, 0) is undefined
+PASS ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) is undefined
PASS ctx.drawImage(canvasElement) threw exception TypeError: Not enough arguments.
PASS ctx.drawImage(canvasElement, 0) threw exception TypeError: Not enough arguments.
PASS ctx.drawImage(canvasElement, 0, 0) is undefined
@@ -24,8 +24,8 @@
PASS ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
PASS ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
PASS ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0) threw exception Error: IndexSizeError: DOM Exception 1.
-PASS ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
-PASS ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
+PASS ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0, 0) threw exception Error: IndexSizeError: DOM Exception 1.
+PASS ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) threw exception Error: IndexSizeError: DOM Exception 1.
PASS successfullyParsed is true
TEST COMPLETE
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setFillColor-expected.txt (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setFillColor-expected.txt 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setFillColor-expected.txt 2015-07-07 11:52:49 UTC (rev 186448)
@@ -10,7 +10,7 @@
PASS ctx.setFillColor(0, 0, 0) threw exception TypeError: Type error.
PASS ctx.setFillColor(0, 0, 0, 0) is undefined
PASS ctx.setFillColor(0, 0, 0, 0, 0) is undefined
-PASS ctx.setFillColor(0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
+PASS ctx.setFillColor(0, 0, 0, 0, 0, 0) is undefined
PASS successfullyParsed is true
TEST COMPLETE
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setShadow-expected.txt (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setShadow-expected.txt 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setShadow-expected.txt 2015-07-07 11:52:49 UTC (rev 186448)
@@ -16,7 +16,7 @@
PASS ctx.setShadow(0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
PASS ctx.setShadow(0, 0, 0, 0, 0, 0, 0) is undefined
PASS ctx.setShadow(0, 0, 0, 0, 0, 0, 0, 0) is undefined
-PASS ctx.setShadow(0, 0, 0, 0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
+PASS ctx.setShadow(0, 0, 0, 0, 0, 0, 0, 0, 0) is undefined
PASS successfullyParsed is true
TEST COMPLETE
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setStrokeColor-expected.txt (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setStrokeColor-expected.txt 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/canvas-overloads-setStrokeColor-expected.txt 2015-07-07 11:52:49 UTC (rev 186448)
@@ -10,7 +10,7 @@
PASS ctx.setStrokeColor(0, 0, 0) threw exception TypeError: Type error.
PASS ctx.setStrokeColor(0, 0, 0, 0) is undefined
PASS ctx.setStrokeColor(0, 0, 0, 0, 0) is undefined
-PASS ctx.setStrokeColor(0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
+PASS ctx.setStrokeColor(0, 0, 0, 0, 0, 0) is undefined
PASS successfullyParsed is true
TEST COMPLETE
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-drawImage.js (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-drawImage.js 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-drawImage.js 2015-07-07 11:52:49 UTC (rev 186448)
@@ -16,8 +16,8 @@
shouldThrow("ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0)", "TypeError");
shouldThrow("ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0)", "TypeError");
shouldBe("ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0)", "undefined");
-shouldThrow("ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0, 0)", "TypeError");
-shouldThrow("ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)", "TypeError");
+shouldBe("ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0, 0)", "undefined");
+shouldBe("ctx.drawImage(imageElement, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)", "undefined");
var canvasElement = document.createElement("canvas");
shouldThrow("ctx.drawImage(canvasElement)", "TypeErrorNotEnoughArguments");
@@ -29,5 +29,5 @@
shouldThrow("ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0)", "TypeError");
shouldThrow("ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0)", "TypeError");
shouldThrow("ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0)", "'Error: IndexSizeError: DOM Exception 1'");
-shouldThrow("ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0, 0)", "TypeError");
-shouldThrow("ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)", "TypeError");
+shouldThrow("ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0, 0)", "'Error: IndexSizeError: DOM Exception 1'");
+shouldThrow("ctx.drawImage(canvasElement, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)", "'Error: IndexSizeError: DOM Exception 1'");
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setFillColor.js (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setFillColor.js 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setFillColor.js 2015-07-07 11:52:49 UTC (rev 186448)
@@ -12,4 +12,4 @@
shouldThrow("ctx.setFillColor(0, 0, 0)", "TypeError");
shouldBe("ctx.setFillColor(0, 0, 0, 0)", "undefined");
shouldBe("ctx.setFillColor(0, 0, 0, 0, 0)", "undefined");
-shouldThrow("ctx.setFillColor(0, 0, 0, 0, 0, 0)", "TypeError");
+shouldBe("ctx.setFillColor(0, 0, 0, 0, 0, 0)", "undefined");
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setShadow.js (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setShadow.js 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setShadow.js 2015-07-07 11:52:49 UTC (rev 186448)
@@ -18,4 +18,4 @@
shouldThrow("ctx.setShadow(0, 0, 0, 0, 0, 0)", "TypeError");
shouldBe("ctx.setShadow(0, 0, 0, 0, 0, 0, 0)", "undefined");
shouldBe("ctx.setShadow(0, 0, 0, 0, 0, 0, 0, 0)", "undefined");
-shouldThrow("ctx.setShadow(0, 0, 0, 0, 0, 0, 0, 0, 0)", "TypeError");
+shouldBe("ctx.setShadow(0, 0, 0, 0, 0, 0, 0, 0, 0)", "undefined");
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setStrokeColor.js (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setStrokeColor.js 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/canvas/script-tests/canvas-overloads-setStrokeColor.js 2015-07-07 11:52:49 UTC (rev 186448)
@@ -12,4 +12,4 @@
shouldThrow("ctx.setStrokeColor(0, 0, 0)", "TypeError");
shouldBe("ctx.setStrokeColor(0, 0, 0, 0)", "undefined");
shouldBe("ctx.setStrokeColor(0, 0, 0, 0, 0)", "undefined");
-shouldThrow("ctx.setStrokeColor(0, 0, 0, 0, 0, 0)", "TypeError");
+shouldBe("ctx.setStrokeColor(0, 0, 0, 0, 0, 0)", "undefined");
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/add-expected.txt (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/add-expected.txt 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/add-expected.txt 2015-07-07 11:52:49 UTC (rev 186448)
@@ -1,43 +1,52 @@
-Test select.add() with index parameter
+Test that HTMLSelectElement.add() works when passing an index or an HTML option element as its second argument.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-list elements are = 0,1,2
-PASS testAdd1(createOption("Y1")) is "0,1,2,Y1"
-PASS testAdd3(createOption("Y2"), null) is "0,1,2,Y2"
-PASS testAdd3(createOption("Y3"), 0) is "Y3,0,1,2"
-PASS testAdd3(createOption("Y4"), 1) is "0,Y4,1,2"
-PASS testAdd3(createOption("Y5"), 2) is "0,1,Y5,2"
-PASS testAdd3(createOption("Y6"), 3) is "0,1,2,Y6"
-PASS testAdd3(createOption("Y7"), 100) is "0,1,2,Y7"
-PASS testAdd3(createOption("Y8"), -100) is "0,1,2,Y8"
-PASS testAdd3(createOption("Y9"), "0") is "Y9,0,1,2"
-PASS testAdd3(createOption("Y10"), "1") is "0,Y10,1,2"
-PASS testAdd3(createOption("Y11"), "2") is "0,1,Y11,2"
-PASS testAdd3(createOption("Y12"), true) is "0,Y12,1,2"
-PASS testAdd3(createOption("Y13"), false) is "Y13,0,1,2"
-PASS testAdd3(createOption("Y14"), 2147483647) is "0,1,2,Y14"
-PASS testAdd3(createOption("Y15"), 2147483648) is "0,1,2,Y15"
-PASS testAdd3(createOption("Y16"), -2147483647) is "0,1,2,Y16"
-PASS testAdd3(createOption("Y17"), -2147483648) is "0,1,2,Y17"
-PASS testAdd3(createOption("Y18"), -2147483649) is "0,1,2,Y18"
-PASS testAdd3(createOption("Y19"), Infinity) is "Y19,0,1,2"
-PASS testAdd3(createOption("Y20"), -Infinity) is "Y20,0,1,2"
-PASS testAdd3(createOption("Y21"), "foo") is "Y21,0,1,2"
-PASS testAdd3(createOption("Y22"), NaN) is "Y22,0,1,2"
-PASS testAdd3(createOption("Y23"), undefined) is "Y23,0,1,2"
-PASS testAdd3(createOption("Y24"), -2) is "0,1,2,Y24"
-PASS testAdd4(createOption("Y25"), 0, 1) threw exception TypeError: Type error.
-PASS testAdd4(createOption("Y25"), mySelect.options[0], 1) threw exception TypeError: Type error.
-list elements are = 0,1,2
-PASS mySelect.add("foo") threw exception TypeError: Type error.
-PASS mySelect.add("foo", 0) threw exception TypeError: Type error.
-PASS mySelect.add(undefined) threw exception TypeError: Type error.
-PASS mySelect.add(undefined, 0) threw exception TypeError: Type error.
-PASS mySelect.add(null, 0) threw exception TypeError: Type error.
-PASS mySelect.add(null) threw exception TypeError: Type error.
-PASS mySelect.add() threw exception TypeError: Not enough arguments.
+
+Call HTMLSelectElement.add() with zero arguments:
+PASS testAdd() threw exception TypeError: Not enough arguments.
+
+Call HTMLSelectElement.add() with one argument:
+PASS testAdd(createOption("Y1")) is "0,1,2,Y1"
+PASS testAdd("foo") threw exception TypeError: Type error.
+PASS testAdd(undefined) threw exception TypeError: Type error.
+PASS testAdd(null) threw exception TypeError: Type error.
+
+Call HTMLSelectElement.add() with two arguments:
+PASS testAdd(createOption("Y2"), null) is "0,1,2,Y2"
+PASS testAdd(createOption("Y3"), 0) is "Y3,0,1,2"
+PASS testAdd(createOption("Y4"), 1) is "0,Y4,1,2"
+PASS testAdd(createOption("Y5"), 2) is "0,1,Y5,2"
+PASS testAdd(createOption("Y6"), 3) is "0,1,2,Y6"
+PASS testAdd(createOption("Y7"), 100) is "0,1,2,Y7"
+PASS testAdd(createOption("Y8"), -100) is "0,1,2,Y8"
+PASS testAdd(createOption("Y9"), "0") is "Y9,0,1,2"
+PASS testAdd(createOption("Y10"), "1") is "0,Y10,1,2"
+PASS testAdd(createOption("Y11"), "2") is "0,1,Y11,2"
+PASS testAdd(createOption("Y12"), true) is "0,Y12,1,2"
+PASS testAdd(createOption("Y13"), false) is "Y13,0,1,2"
+PASS testAdd(createOption("Y14"), 2147483647) is "0,1,2,Y14"
+PASS testAdd(createOption("Y15"), 2147483648) is "0,1,2,Y15"
+PASS testAdd(createOption("Y16"), -2147483647) is "0,1,2,Y16"
+PASS testAdd(createOption("Y17"), -2147483648) is "0,1,2,Y17"
+PASS testAdd(createOption("Y18"), -2147483649) is "0,1,2,Y18"
+PASS testAdd(createOption("Y19"), Infinity) is "Y19,0,1,2"
+PASS testAdd(createOption("Y20"), -Infinity) is "Y20,0,1,2"
+PASS testAdd(createOption("Y21"), "foo") is "Y21,0,1,2"
+PASS testAdd(createOption("Y22"), NaN) is "Y22,0,1,2"
+PASS testAdd(createOption("Y23"), undefined) is "Y23,0,1,2"
+PASS testAdd(createOption("Y24"), -2) is "0,1,2,Y24"
+PASS testAdd(createOption("X"), mySelect.options[0]) is "X,0,1,2"
+PASS testAdd(createOption("X"), mySelect.options[1]) is "0,X,1,2"
+PASS testAdd(createOption("X"), mySelect.options[2]) is "0,1,X,2"
+PASS testAdd("foo", 0) threw exception TypeError: Type error.
+PASS testAdd(undefined, 0) threw exception TypeError: Type error.
+PASS testAdd(null, 0) threw exception TypeError: Type error.
+
+Call HTMLSelectElement.add() with three arguments (when it only takes two arguments):
+PASS testAdd(createOption("X"), 0, "unnecessary extra argument - should be ignored") is "X,0,1,2"
+PASS testAdd(createOption("X"), mySelect.options[1], "unnecessary extra argument - should be ignored") is "0,X,1,2"
PASS successfullyParsed is true
TEST COMPLETE
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/add.html (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/add.html 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/add.html 2015-07-07 11:52:49 UTC (rev 186448)
@@ -2,87 +2,65 @@
<html>
<head>
<script src=""
+<script src=""
</head>
<body>
<script>
-description('Test select.add() with index parameter');
-
-var mySelect;
+description("Test that HTMLSelectElement.add() works when passing an index or an HTML option element as its second argument.");
-function resetSelection() {
- mySelect = document.createElement('select');
- mySelect.appendChild(new Option("0", "0", false, false));
- mySelect.appendChild(new Option("1", "1", false, false));
- mySelect.appendChild(new Option("2", "2", false, false));
-}
+var mySelect = createSelectElementWithTestData();
-function deepCopy() {
- var copy = [];
- for(var i = 0; i < mySelect.options.length; ++i)
- copy.push(mySelect.options[i].value);
- return copy.join(",");
+function testAdd()
+{
+ HTMLSelectElement.prototype.add.apply(mySelect, arguments);
+ var result = deepCopy(mySelect);
+ mySelect = createSelectElementWithTestData(); // Reset
+ return result;
}
-
-function createOption(value) {
- return new Option(value + "X", value, false, false);
-}
-function testAdd1(element) {
- resetSelection();
- mySelect.add(element);
- return deepCopy();
-}
+debug("<br>Call HTMLSelectElement.add() with zero arguments:");
+shouldThrow("testAdd()");
-function testAdd3(newelement, index) {
- resetSelection();
- mySelect.add(newelement, index);
- return deepCopy();
-}
+debug("<br>Call HTMLSelectElement.add() with one argument:");
+shouldBeEqualToString('testAdd(createOption("Y1"))', "0,1,2,Y1");
+shouldThrow('testAdd("foo")');
+shouldThrow("testAdd(undefined)");
+shouldThrow("testAdd(null)");
-function testAdd4(newelement, element, index) {
- resetSelection();
- mySelect.add(newelement, element, index);
- return deepCopy();
-}
+debug("<br>Call HTMLSelectElement.add() with two arguments:");
+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)', "Y23,0,1,2");
+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");
+shouldThrow('testAdd("foo", 0)', "'TypeError: Type error'");
+shouldThrow('testAdd(undefined, 0)', "'TypeError: Type error'");
+shouldThrow('testAdd(null, 0)', "'TypeError: Type error'");
-resetSelection();
-debug('list elements are = ' + deepCopy());
-shouldBeEqualToString('testAdd1(createOption("Y1"))', '0,1,2,Y1');
-shouldBeEqualToString('testAdd3(createOption("Y2"), null)', '0,1,2,Y2');
-shouldBeEqualToString('testAdd3(createOption("Y3"), 0)', 'Y3,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y4"), 1)', '0,Y4,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y5"), 2)', '0,1,Y5,2');
-shouldBeEqualToString('testAdd3(createOption("Y6"), 3)', '0,1,2,Y6');
-shouldBeEqualToString('testAdd3(createOption("Y7"), 100)', '0,1,2,Y7');
-shouldBeEqualToString('testAdd3(createOption("Y8"), -100)', '0,1,2,Y8');
-shouldBeEqualToString('testAdd3(createOption("Y9"), "0")', 'Y9,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y10"), "1")', '0,Y10,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y11"), "2")', '0,1,Y11,2');
-shouldBeEqualToString('testAdd3(createOption("Y12"), true)', '0,Y12,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y13"), false)', 'Y13,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y14"), 2147483647)', '0,1,2,Y14');
-shouldBeEqualToString('testAdd3(createOption("Y15"), 2147483648)', '0,1,2,Y15');
-shouldBeEqualToString('testAdd3(createOption("Y16"), -2147483647)', '0,1,2,Y16');
-shouldBeEqualToString('testAdd3(createOption("Y17"), -2147483648)', '0,1,2,Y17');
-shouldBeEqualToString('testAdd3(createOption("Y18"), -2147483649)', '0,1,2,Y18');
-shouldBeEqualToString('testAdd3(createOption("Y19"), Infinity)', 'Y19,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y20"), -Infinity)', 'Y20,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y21"), "foo")', 'Y21,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y22"), NaN)', 'Y22,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y23"), undefined)', 'Y23,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y24"), -2)','0,1,2,Y24');
-shouldThrow('testAdd4(createOption("Y25"), 0, 1)');
-shouldThrow('testAdd4(createOption("Y25"), mySelect.options[0], 1)');
-resetSelection();
-debug('list elements are = ' + deepCopy());
-shouldThrow('mySelect.add("foo")');
-shouldThrow('mySelect.add("foo", 0)');
-shouldThrow('mySelect.add(undefined)');
-shouldThrow('mySelect.add(undefined, 0)');
-shouldThrow('mySelect.add(null, 0)');
-shouldThrow('mySelect.add(null)');
-shouldThrow('mySelect.add()');
-
+debug("<br>Call HTMLSelectElement.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");
</script>
</body>
</html>
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/options-collection-add-expected.txt (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/options-collection-add-expected.txt 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/options-collection-add-expected.txt 2015-07-07 11:52:49 UTC (rev 186448)
@@ -3,55 +3,63 @@
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-list elements are = 0,1,2
-PASS testAdd3(createGroup("Y1", "Y2"), null) is "0,1,2,Y1,Y2"
-PASS testAdd3(createGroup("Y3", "Y4"), 0) is "Y3,Y4,0,1,2"
-PASS testAdd3(createGroup("Y5", "Y6"), 2) is "0,1,Y5,Y6,2"
-PASS testAdd1(createGroup("Y7", "Y8")) is "0,1,2,Y7,Y8"
-PASS testAdd1(createOption("Y9")) is "0,1,2,Y9"
-list elements are = 0,1,2
-PASS testAdd2(createOption("Y10"), mySelect.options[2]) is "0,1,Y10,2"
-PASS testAdd2(createOption("Y11"), mySelect.options[1]) is "0,Y11,1,Y10,2"
-list elements are = 0,1,2
-PASS testAdd2(createGroup("Y12", "Y13"), mySelect.options[1]) is "0,Y12,Y13,1,2"
-PASS testAdd2(createGroup("Y14", "Y15"), mySelect.options[3]) is "0,Y12,Y13,Y14,Y15,1,2"
-list elements are = 0,1,2
-PASS testAdd2(createOption("Y16"), createOption("Y17")) threw exception Error: NotFoundError: DOM Exception 8.
-list elements are = 0,1,2
-PASS testAdd1(createOption("Y1")) is "0,1,2,Y1"
-PASS testAdd3(createOption("Y2"), null) is "0,1,2,Y2"
-PASS testAdd3(createOption("Y3"), 0) is "Y3,0,1,2"
-PASS testAdd3(createOption("Y4"), 1) is "0,Y4,1,2"
-PASS testAdd3(createOption("Y5"), 2) is "0,1,Y5,2"
-PASS testAdd3(createOption("Y6"), 3) is "0,1,2,Y6"
-PASS testAdd3(createOption("Y7"), 100) is "0,1,2,Y7"
-PASS testAdd3(createOption("Y8"), -100) is "0,1,2,Y8"
-PASS testAdd3(createOption("Y9"), "0") is "Y9,0,1,2"
-PASS testAdd3(createOption("Y10"), "1") is "0,Y10,1,2"
-PASS testAdd3(createOption("Y11"), "2") is "0,1,Y11,2"
-PASS testAdd3(createOption("Y12"), true) is "0,Y12,1,2"
-PASS testAdd3(createOption("Y13"), false) is "Y13,0,1,2"
-PASS testAdd3(createOption("Y14"), 2147483647) is "0,1,2,Y14"
-PASS testAdd3(createOption("Y15"), 2147483648) is "0,1,2,Y15"
-PASS testAdd3(createOption("Y16"), -2147483647) is "0,1,2,Y16"
-PASS testAdd3(createOption("Y17"), -2147483648) is "0,1,2,Y17"
-PASS testAdd3(createOption("Y18"), -2147483649) is "0,1,2,Y18"
-PASS testAdd3(createOption("Y19"), Infinity) is "Y19,0,1,2"
-PASS testAdd3(createOption("Y20"), -Infinity) is "Y20,0,1,2"
-PASS testAdd3(createOption("Y21"), "foo") is "Y21,0,1,2"
-PASS testAdd3(createOption("Y22"), NaN) is "Y22,0,1,2"
-PASS testAdd3(createOption("Y23"), undefined) is "Y23,0,1,2"
-PASS testAdd3(createOption("Y24"), -2) is "0,1,2,Y24"
-PASS testAdd4(createOption("Y25"), 0, 1) threw exception TypeError: Type error.
-PASS testAdd4(createOption("Y25"), mySelect.options[0], 1) threw exception TypeError: Type error.
-list elements are = 0,1,2
-PASS mySelect.options.add("foo") threw exception TypeError: Type error.
-PASS mySelect.options.add("foo", 0) threw exception TypeError: Type error.
-PASS mySelect.options.add(undefined) threw exception TypeError: Type error.
-PASS mySelect.options.add(undefined, 0) threw exception TypeError: Type error.
-PASS mySelect.options.add(null, 0) threw exception TypeError: Type error.
-PASS mySelect.options.add(null) threw exception TypeError: Type error.
-PASS mySelect.options.add() threw exception TypeError: Not enough arguments.
+
+Call HTMLOptionsCollection.add() with zero arguments:
+PASS testAdd() threw exception TypeError: Not enough arguments.
+
+Call HTMLOptionsCollection.add() with only one argument:
+PASS testAdd(createOption("Y9")) is "0,1,2,Y9"
+PASS testAdd("foo") threw exception TypeError: Type error.
+PASS testAdd(undefined) threw exception TypeError: Type error.
+PASS testAdd(null) threw exception TypeError: Type error.
+
+Call HTMLOptionsCollection.add() with two arguments:
+PASS testAdd(createGroup("Y1", "Y2"), null) is "0,1,2,Y1,Y2"
+PASS testAdd(createGroup("Y3", "Y4"), 0) is "Y3,Y4,0,1,2"
+PASS testAdd(createGroup("Y5", "Y6"), 2) is "0,1,Y5,Y6,2"
+PASS testAdd(createGroup("Y7", "Y8")) is "0,1,2,Y7,Y8"
+PASS testAddWithoutResettingListOptions(createOption("Y10"), mySelect.options[2]) is "0,1,Y10,2"
+PASS testAdd(createOption("Y11"), mySelect.options[1]) is "0,Y11,1,Y10,2"
+PASS testAddWithoutResettingListOptions(createGroup("Y12", "Y13"), mySelect.options[1]) is "0,Y12,Y13,1,2"
+PASS testAdd(createGroup("Y14", "Y15"), mySelect.options[3]) is "0,Y12,Y13,Y14,Y15,1,2"
+PASS testAdd(createOption("Y16"), createOption("Y17")) threw exception Error: NotFoundError: DOM Exception 8.
+PASS testAdd(createOption("Y1")) is "0,1,2,Y1"
+PASS testAdd(createOption("Y2"), null) is "0,1,2,Y2"
+PASS testAdd(createOption("Y3"), 0) is "Y3,0,1,2"
+PASS testAdd(createOption("Y4"), 1) is "0,Y4,1,2"
+PASS testAdd(createOption("Y5"), 2) is "0,1,Y5,2"
+PASS testAdd(createOption("Y6"), 3) is "0,1,2,Y6"
+PASS testAdd(createOption("Y7"), 100) is "0,1,2,Y7"
+PASS testAdd(createOption("Y8"), -100) is "0,1,2,Y8"
+PASS testAdd(createOption("Y9"), "0") is "Y9,0,1,2"
+PASS testAdd(createOption("Y10"), "1") is "0,Y10,1,2"
+PASS testAdd(createOption("Y11"), "2") is "0,1,Y11,2"
+PASS testAdd(createOption("Y12"), true) is "0,Y12,1,2"
+PASS testAdd(createOption("Y13"), false) is "Y13,0,1,2"
+PASS testAdd(createOption("Y14"), 2147483647) is "0,1,2,Y14"
+PASS testAdd(createOption("Y15"), 2147483648) is "0,1,2,Y15"
+PASS testAdd(createOption("Y16"), -2147483647) is "0,1,2,Y16"
+PASS testAdd(createOption("Y17"), -2147483648) is "0,1,2,Y17"
+PASS testAdd(createOption("Y18"), -2147483649) is "0,1,2,Y18"
+PASS testAdd(createOption("Y19"), Infinity) is "Y19,0,1,2"
+PASS testAdd(createOption("Y20"), -Infinity) is "Y20,0,1,2"
+PASS testAdd(createOption("Y21"), "foo") is "Y21,0,1,2"
+PASS testAdd(createOption("Y22"), NaN) is "Y22,0,1,2"
+PASS testAdd(createOption("Y23"), undefined) is "Y23,0,1,2"
+PASS testAdd(createOption("Y24"), -2) is "0,1,2,Y24"
+PASS testAdd(createOption("X"), mySelect.options[0]) is "X,0,1,2"
+PASS testAdd(createOption("X"), mySelect.options[1]) is "0,X,1,2"
+PASS testAdd(createOption("X"), mySelect.options[2]) is "0,1,X,2"
+PASS testAdd(createOption("Y25"), 0, 1) is "Y25,0,1,2"
+PASS testAdd(createOption("Y25"), mySelect.options[0], 1) is "Y25,0,1,2"
+PASS testAdd("foo", 0) threw exception TypeError: Type error.
+PASS testAdd(undefined, 0) threw exception TypeError: Type error.
+PASS testAdd(null, 0) threw exception TypeError: Type error.
+
+Call HTMLOptionsCollection.add() with three arguments (when it only takes two arguments):
+PASS testAdd(createOption("X"), 0, "unnecessary extra argument - should be ignored") is "X,0,1,2"
+PASS testAdd(createOption("X"), mySelect.options[1], "unnecessary extra argument - should be ignored") is "0,X,1,2"
+PASS testAdd(createGroup("G1", "G2"), 1, "unnecessary extra argument - should be ignored") is "0,G1,G2,1,2"
PASS successfullyParsed is true
TEST COMPLETE
Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/options-collection-add.html (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/options-collection-add.html 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/options-collection-add.html 2015-07-07 11:52:49 UTC (rev 186448)
@@ -2,117 +2,88 @@
<html>
<head>
<script src=""
+<script src=""
</head>
<body>
<script>
description('Test select.options.add() with optgroup and with index parameter');
-
-var mySelect;
-function resetSelection() {
- mySelect = document.createElement('select');
- mySelect.appendChild(new Option("0", "0", false, false));
- mySelect.appendChild(new Option("1", "1", false, false));
- mySelect.appendChild(new Option("2", "2", false, false));
-}
+var mySelect = createSelectElementWithTestData();
-function deepCopy() {
- var copy = [];
- for(var i = 0; i < mySelect.options.length; ++i)
- copy.push(mySelect.options[i].value);
- return copy.join(",");
+function testAdd()
+{
+ HTMLOptionsCollection.prototype.add.apply(mySelect.options, arguments);
+ var result = deepCopy(mySelect);
+ mySelect = createSelectElementWithTestData(); // Reset
+ return result;
}
-
-function createOption(value) {
- return new Option(value + "X", value, false, false);
-}
-function createGroup(value1, value2) {
- var group = document.createElement('optgroup');
- group.appendChild(new Option(value1 + "X", value1, false, false));
- group.appendChild(new Option(value2 + "Y", value2, false, false));
- return group;
+function testAddWithoutResettingListOptions()
+{
+ HTMLOptionsCollection.prototype.add.apply(mySelect.options, arguments);
+ return deepCopy(mySelect);
}
-function testAdd1(element) {
- resetSelection();
- mySelect.options.add(element);
- return deepCopy();
-}
+debug("<br>Call HTMLOptionsCollection.add() with zero arguments:");
+shouldThrow("testAdd()");
-function testAdd2(newelement, element) {
- mySelect.options.add(newelement, element);
- return deepCopy();
-}
+debug("<br>Call HTMLOptionsCollection.add() with only one argument:");
+shouldBeEqualToString('testAdd(createOption("Y9"))', "0,1,2,Y9");
+shouldThrow('testAdd("foo")');
+shouldThrow("testAdd(undefined)");
+shouldThrow("testAdd(null)");
-function testAdd3(newelement, index) {
- resetSelection();
- mySelect.options.add(newelement, index);
- return deepCopy();
-}
+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");
-function testAdd4(newelement, element, index) {
- resetSelection();
- mySelect.options.add(newelement, element, index);
- return deepCopy();
-}
+shouldBeEqualToString('testAddWithoutResettingListOptions(createOption("Y10"), mySelect.options[2])', "0,1,Y10,2");
+shouldBeEqualToString('testAdd(createOption("Y11"), mySelect.options[1])', "0,Y11,1,Y10,2");
-resetSelection();
-debug('list elements are = ' + deepCopy());
-shouldBeEqualToString('testAdd3(createGroup("Y1", "Y2"), null)', '0,1,2,Y1,Y2');
-shouldBeEqualToString('testAdd3(createGroup("Y3", "Y4"), 0)', 'Y3,Y4,0,1,2');
-shouldBeEqualToString('testAdd3(createGroup("Y5", "Y6"), 2)', '0,1,Y5,Y6,2');
-shouldBeEqualToString('testAdd1(createGroup("Y7", "Y8"))', '0,1,2,Y7,Y8');
-shouldBeEqualToString('testAdd1(createOption("Y9"))', '0,1,2,Y9');
-resetSelection();
-debug('list elements are = ' + deepCopy());
-shouldBeEqualToString('testAdd2(createOption("Y10"), mySelect.options[2])', '0,1,Y10,2');
-shouldBeEqualToString('testAdd2(createOption("Y11"), mySelect.options[1])', '0,Y11,1,Y10,2');
-resetSelection();
-debug('list elements are = ' + deepCopy());
-shouldBeEqualToString('testAdd2(createGroup("Y12", "Y13"), mySelect.options[1])', '0,Y12,Y13,1,2');
-shouldBeEqualToString('testAdd2(createGroup("Y14", "Y15"), mySelect.options[3])', '0,Y12,Y13,Y14,Y15,1,2');
-resetSelection();
-debug('list elements are = ' + deepCopy());
-shouldThrow('testAdd2(createOption("Y16"), createOption("Y17"))');
-resetSelection();
-debug('list elements are = ' + deepCopy());
-shouldBeEqualToString('testAdd1(createOption("Y1"))', '0,1,2,Y1');
-shouldBeEqualToString('testAdd3(createOption("Y2"), null)', '0,1,2,Y2');
-shouldBeEqualToString('testAdd3(createOption("Y3"), 0)', 'Y3,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y4"), 1)', '0,Y4,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y5"), 2)', '0,1,Y5,2');
-shouldBeEqualToString('testAdd3(createOption("Y6"), 3)', '0,1,2,Y6');
-shouldBeEqualToString('testAdd3(createOption("Y7"), 100)', '0,1,2,Y7');
-shouldBeEqualToString('testAdd3(createOption("Y8"), -100)', '0,1,2,Y8');
-shouldBeEqualToString('testAdd3(createOption("Y9"), "0")', 'Y9,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y10"), "1")', '0,Y10,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y11"), "2")', '0,1,Y11,2');
-shouldBeEqualToString('testAdd3(createOption("Y12"), true)', '0,Y12,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y13"), false)', 'Y13,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y14"), 2147483647)', '0,1,2,Y14');
-shouldBeEqualToString('testAdd3(createOption("Y15"), 2147483648)', '0,1,2,Y15');
-shouldBeEqualToString('testAdd3(createOption("Y16"), -2147483647)', '0,1,2,Y16');
-shouldBeEqualToString('testAdd3(createOption("Y17"), -2147483648)', '0,1,2,Y17');
-shouldBeEqualToString('testAdd3(createOption("Y18"), -2147483649)', '0,1,2,Y18');
-shouldBeEqualToString('testAdd3(createOption("Y19"), Infinity)', 'Y19,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y20"), -Infinity)', 'Y20,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y21"), "foo")', 'Y21,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y22"), NaN)', 'Y22,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y23"), undefined)', 'Y23,0,1,2');
-shouldBeEqualToString('testAdd3(createOption("Y24"), -2)','0,1,2,Y24');
-shouldThrow('testAdd4(createOption("Y25"), 0, 1)');
-shouldThrow('testAdd4(createOption("Y25"), mySelect.options[0], 1)');
-resetSelection();
-debug('list elements are = ' + deepCopy());
-shouldThrow('mySelect.options.add("foo")');
-shouldThrow('mySelect.options.add("foo", 0)');
-shouldThrow('mySelect.options.add(undefined)');
-shouldThrow('mySelect.options.add(undefined, 0)');
-shouldThrow('mySelect.options.add(null, 0)');
-shouldThrow('mySelect.options.add(null)');
-shouldThrow('mySelect.options.add()');
-
+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)', "Y23,0,1,2");
+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");
+shouldThrow('testAdd("foo", 0)', "'TypeError: Type error'");
+shouldThrow('testAdd(undefined, 0)', "'TypeError: Type error'");
+shouldThrow('testAdd(null, 0)', "'TypeError: Type error'");
+
+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>
</body>
</html>
Added: releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/resources/html-select-and-options-collection-utilities.js (0 => 186448)
--- releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/resources/html-select-and-options-collection-utilities.js (rev 0)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/fast/dom/HTMLSelectElement/resources/html-select-and-options-collection-utilities.js 2015-07-07 11:52:49 UTC (rev 186448)
@@ -0,0 +1,25 @@
+function createSelectElementWithTestData() {
+ var example = document.createElement("select");
+ example.appendChild(new Option("0", "0", false, false));
+ example.appendChild(new Option("1", "1", false, false));
+ example.appendChild(new Option("2", "2", false, false));
+ return example;
+}
+
+function deepCopy(selectElement) {
+ var copy = [];
+ for(var i = 0; i < selectElement.options.length; ++i)
+ copy.push(selectElement.options[i].value);
+ return copy.join(",");
+}
+
+function createOption(value) {
+ return new Option(value + "X", value, false, false);
+}
+
+function createGroup(value1, value2) {
+ var group = document.createElement("optgroup");
+ group.appendChild(new Option(value1 + "X", value1, false, false));
+ group.appendChild(new Option(value2 + "Y", value2, false, false));
+ return group;
+}
Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog 2015-07-07 11:52:49 UTC (rev 186448)
@@ -1,3 +1,46 @@
+2015-07-03 Daniel Bates <[email protected]>
+
+ REGRESSION (r178097): _javascript_ TypeError after clicking on compose button in Yahoo Mail
+ https://bugs.webkit.org/show_bug.cgi?id=146515
+ <rdar://problem/21348421>
+
+ Reviewed by Chris Dumez.
+
+ Fixes an issue where extra arguments passed to a Web IDL overloaded function, whose implementation
+ is generated by the bindings generator script, are not ignored as per the note in section "Interface object [[Call]] method"
+ of the Web IDL spec, <http://www.w3.org/TR/2012/CR-WebIDL-20120419/> (19 April 2012).
+
+ Currently for an overloaded function the _javascript_ bindings generator script emits code to
+ throw a TypeError when it cannot find a candidate function that takes the same number of
+ arguments as passed by a caller. Prior to the change made in bug #139179 (r178097), the
+ bindings code for HTMLSelectElement.add() was written by hand and ignored extra arguments
+ that were passed to it. Following this change, the bindings code for HTMLSelectElement.add()
+ is generated by the bindings generator script. Therefore, we throw a TypeError when Yahoo Mail
+ calls HTMLSelectElement.add() with extra arguments because the code emitted by the bindings
+ generator script does not ignore them.
+
+ * bindings/scripts/CodeGeneratorJS.pm:
+ (LengthOfLongestFunctionParameterList): Added. Computes the length of longest overload parameter list.
+ (GenerateOverloadedFunction): Emit code that ignores more arguments than LengthOfLongestFunctionParameterList().
+ (GenerateOverloadedConstructorDefinition): Ditto.
+ * bindings/scripts/test/JS/JSTestObj.cpp:
+ (WebCore::jsTestObjPrototypeFunctionOverloadedMethod12): Added; expected result for an overloaded
+ function that takes a variadic number of Blob elements.
+ (WebCore::jsTestObjPrototypeFunctionOverloadedMethod): Update expected result. The added
+ if-conditional _expression_ for the IDL declaration overloadedMethod(Blob... blobArgs) is empty
+ because we do not support overloading of functions with variadic arguments.
+ (WebCore::jsTestObjConstructorFunctionOverloadedMethod1):
+ * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
+ (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors5): Added; expected
+ result for an overloaded constructors that takes a variadic number of long arguments.
+ (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors): Update expected
+ result. The added if-conditional _expression_ for the IDL declaration Constructor(long... longArgs) is empty
+ because we do not support overloading of constructors with variadic arguments.
+ * bindings/scripts/test/TestObj.idl: Added declaration overloadedMethod(Blob...). Also fixed
+ typo in license block text.
+ * bindings/scripts/test/TestOverloadedConstructors.idl: Added declaration Constructor(long... longArgs).
+ Also fixed typo in license block text.
+
2015-07-03 Mario Sanchez Prada <[email protected]>
Crash on xLarge memory allocation using bmalloc on 32bit systems
Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2015-07-07 11:52:49 UTC (rev 186448)
@@ -1404,6 +1404,17 @@
return ($numMandatoryParams, join(" || ", @orExpression), @neededArguments);
}
+sub LengthOfLongestFunctionParameterList
+{
+ my ($overloads) = @_;
+ my $result = 0;
+ foreach my $overload (@{$overloads}) {
+ my @parameters = @{$overload->parameters};
+ $result = @parameters if $result < @parameters;
+ }
+ return $result;
+}
+
sub GenerateOverloadedFunction
{
my $function = shift;
@@ -1419,10 +1430,13 @@
my $kind = $function->isStatic ? "Constructor" : "Prototype";
my $functionName = "js${interfaceName}${kind}Function" . $codeGenerator->WK_ucfirst($function->signature->name);
+ # FIXME: Implement support for overloaded functions with variadic arguments.
+ my $lengthOfLongestOverloadedFunctionParameterList = LengthOfLongestFunctionParameterList($function->{overloads});
+
push(@implContent, "EncodedJSValue JSC_HOST_CALL ${functionName}(ExecState* exec)\n");
push(@implContent, <<END);
{
- size_t argsCount = exec->argumentCount();
+ size_t argsCount = std::min<size_t>($lengthOfLongestOverloadedFunctionParameterList, exec->argumentCount());
END
my %fetchedArguments = ();
@@ -4434,10 +4448,14 @@
my $interface = shift;
my $functionName = "${className}Constructor::construct${className}";
+
+ # FIXME: Implement support for overloaded constructors with variadic arguments.
+ my $lengthOfLongestOverloadedConstructorParameterList = LengthOfLongestFunctionParameterList($interface->constructors);
+
push(@$outputArray, <<END);
EncodedJSValue JSC_HOST_CALL ${functionName}(ExecState* exec)
{
- size_t argsCount = exec->argumentCount();
+ size_t argsCount = std::min<size_t>($lengthOfLongestOverloadedConstructorParameterList, exec->argumentCount());
END
my %fetchedArguments = ();
Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp 2015-07-07 11:52:49 UTC (rev 186448)
@@ -3859,9 +3859,27 @@
return JSValue::encode(jsUndefined());
}
+static EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod12(ExecState* exec)
+{
+ JSValue thisValue = exec->thisValue();
+ JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
+ if (UNLIKELY(!castedThis))
+ return throwThisTypeError(*exec, "TestObj", "overloadedMethod");
+ ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
+ auto& impl = castedThis->impl();
+ Vector<Blob*> blobArgs;
+ for (unsigned i = 0, count = exec->argumentCount(); i < count; ++i) {
+ if (!exec->uncheckedArgument(i).inherits(JSBlob::info()))
+ return throwArgumentTypeError(*exec, i, "blobArgs", "TestObj", "overloadedMethod", "Blob");
+ blobArgs.append(JSBlob::toWrapped(exec->uncheckedArgument(i)));
+ }
+ impl.overloadedMethod(blobArgs);
+ return JSValue::encode(jsUndefined());
+}
+
EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod(ExecState* exec)
{
- size_t argsCount = exec->argumentCount();
+ size_t argsCount = std::min<size_t>(2, exec->argumentCount());
JSValue arg0(exec->argument(0));
JSValue arg1(exec->argument(1));
if ((argsCount == 2 && (arg0.isNull() || (arg0.isObject() && asObject(arg0)->inherits(JSTestObj::info()))) && (arg1.isUndefinedOrNull() || arg1.isString() || arg1.isObject())))
@@ -3886,6 +3904,8 @@
return jsTestObjPrototypeFunctionOverloadedMethod10(exec);
if (argsCount == 1)
return jsTestObjPrototypeFunctionOverloadedMethod11(exec);
+ if ()
+ return jsTestObjPrototypeFunctionOverloadedMethod12(exec);
if (argsCount < 1)
return throwVMError(exec, createNotEnoughArgumentsError(exec));
return throwVMTypeError(exec);
@@ -3950,7 +3970,7 @@
EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionOverloadedMethod1(ExecState* exec)
{
- size_t argsCount = exec->argumentCount();
+ size_t argsCount = std::min<size_t>(1, exec->argumentCount());
#if ENABLE(Condition1)
if (argsCount == 1)
return jsTestObjConstructorFunctionOverloadedMethod11(exec);
Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp 2015-07-07 11:52:49 UTC (rev 186448)
@@ -86,6 +86,7 @@
static JSC::EncodedJSValue JSC_HOST_CALL constructJSTestOverloadedConstructors2(JSC::ExecState*);
static JSC::EncodedJSValue JSC_HOST_CALL constructJSTestOverloadedConstructors3(JSC::ExecState*);
static JSC::EncodedJSValue JSC_HOST_CALL constructJSTestOverloadedConstructors4(JSC::ExecState*);
+ static JSC::EncodedJSValue JSC_HOST_CALL constructJSTestOverloadedConstructors5(JSC::ExecState*);
static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&);
};
@@ -137,9 +138,19 @@
return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get())));
}
+EncodedJSValue JSC_HOST_CALL JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors5(ExecState* exec)
+{
+ auto* castedThis = jsCast<JSTestOverloadedConstructorsConstructor*>(exec->callee());
+ Vector<int> longArgs = toNativeArguments<int>(exec, 0);
+ if (UNLIKELY(exec->hadException()))
+ return JSValue::encode(jsUndefined());
+ RefPtr<TestOverloadedConstructors> object = TestOverloadedConstructors::create(longArgs);
+ return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get())));
+}
+
EncodedJSValue JSC_HOST_CALL JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors(ExecState* exec)
{
- size_t argsCount = exec->argumentCount();
+ size_t argsCount = std::min<size_t>(1, exec->argumentCount());
JSValue arg0(exec->argument(0));
if ((argsCount == 1 && (arg0.isObject() && asObject(arg0)->inherits(JSArrayBuffer::info()))))
return JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors1(exec);
@@ -149,6 +160,8 @@
return JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors3(exec);
if (argsCount == 1)
return JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors4(exec);
+ if ()
+ return JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors5(exec);
if (argsCount < 1)
return throwVMError(exec, createNotEnoughArgumentsError(exec));
return throwVMTypeError(exec);
Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/TestObj.idl (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/TestObj.idl 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/TestObj.idl 2015-07-07 11:52:49 UTC (rev 186448)
@@ -16,7 +16,7 @@
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIEstrArg, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
@@ -190,6 +190,9 @@
void overloadedMethod(DOMString[] arrayArg);
void overloadedMethod(sequence<unsigned long> arrayArg);
void overloadedMethod(DOMString strArg);
+
+ // FIXME: Implement support for overloaded functions with variadic arguments.
+ void overloadedMethod(Blob... blobArgs);
#endif
// Class methods within _javascript_ (like what's used for IDBKeyRange).
Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/TestOverloadedConstructors.idl (186447 => 186448)
--- releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/TestOverloadedConstructors.idl 2015-07-07 11:27:15 UTC (rev 186447)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/bindings/scripts/test/TestOverloadedConstructors.idl 2015-07-07 11:52:49 UTC (rev 186448)
@@ -15,7 +15,7 @@
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIEstrArg, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
@@ -30,5 +30,6 @@
Constructor(ArrayBufferView arrayBufferView),
Constructor(Blob blob),
Constructor(DOMString string),
+ Constructor(long... longArgs) // FIXME: Implement support for overloaded constructors with variadic arguments.
] interface TestOverloadedConstructors {
};