Title: [177629] trunk
Revision
177629
Author
[email protected]
Date
2014-12-21 18:00:04 -0800 (Sun, 21 Dec 2014)

Log Message

HTMLSelectElement add() should support adding group of options element (HTMLOptGroupElement).
https://bugs.webkit.org/show_bug.cgi?id=139806

Patch by Shivakumar JM <[email protected]> on 2014-12-21
Reviewed by Darin Adler.

Source/WebCore:

HTMLSelectElement add() should support adding group of options (optgroup) element.

Test: fast/dom/HTMLSelectElement/select-add-optgroup.html

* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::add):

LayoutTests:

* fast/dom/HTMLSelectElement/select-add-optgroup-expected.txt: Added.
* fast/dom/HTMLSelectElement/select-add-optgroup.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (177628 => 177629)


--- trunk/LayoutTests/ChangeLog	2014-12-22 01:52:23 UTC (rev 177628)
+++ trunk/LayoutTests/ChangeLog	2014-12-22 02:00:04 UTC (rev 177629)
@@ -1,3 +1,13 @@
+2014-12-21  Shivakumar JM  <[email protected]>
+
+        HTMLSelectElement add() should support adding group of options element (HTMLOptGroupElement).
+        https://bugs.webkit.org/show_bug.cgi?id=139806
+
+        Reviewed by Darin Adler.
+
+        * fast/dom/HTMLSelectElement/select-add-optgroup-expected.txt: Added.
+        * fast/dom/HTMLSelectElement/select-add-optgroup.html: Added.
+
 2014-12-21  Gabor Rapcsanyi  <[email protected]>
 
         AX: Hidden aria table crash

Added: trunk/LayoutTests/fast/dom/HTMLSelectElement/select-add-optgroup-expected.txt (0 => 177629)


--- trunk/LayoutTests/fast/dom/HTMLSelectElement/select-add-optgroup-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/HTMLSelectElement/select-add-optgroup-expected.txt	2014-12-22 02:00:04 UTC (rev 177629)
@@ -0,0 +1,44 @@
+Test select.add() with optgroup
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS deepCopy() is "0,1,2,Y1"
+PASS deepCopy() is "0,1,2,Y2,Y1"
+PASS deepCopy() is "0,1,2,Y3,Y2,Y1"
+PASS deepCopy() is "0,1,2,Y4,Y3,Y2,Y1"
+PASS deepCopy() is "0,1,2,X,Y"
+PASS deepCopy() is "0,1,X,Y,2"
+PASS deepCopy() is "0,1,X,Y,X,Y,2"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS deepCopy() is "0,1,2,Y"
+PASS mySelect.add("foo") is undefined.
+PASS mySelect.add("foo", 0) is undefined.
+PASS mySelect.add(undefined) is undefined.
+PASS mySelect.add(undefined, 0) is undefined.
+PASS mySelect.add(null) is undefined.
+PASS mySelect.add(null, 0) is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/dom/HTMLSelectElement/select-add-optgroup.html (0 => 177629)


--- trunk/LayoutTests/fast/dom/HTMLSelectElement/select-add-optgroup.html	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/HTMLSelectElement/select-add-optgroup.html	2014-12-22 02:00:04 UTC (rev 177629)
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script>
+description('Test select.add() with optgroup');
+	
+var mySelect;
+var selectedOptions;
+	
+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));
+}
+
+function deepCopy() {
+    var copy=[];
+    for(var i=0;i<mySelect.options.length; ++i)
+        copy.push(mySelect.options[i].value);
+    return copy.join(",");
+}
+
+resetSelection();
+var option1 = document.createElement("option");
+option1.text = "X1";
+option1.value = "Y1";
+mySelect.add(option1);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y1');
+
+var option2 = document.createElement("option");
+option2.text = "X2";
+option2.value = "Y2";
+mySelect.add(option2, option1);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y2,Y1');
+
+var option3 = document.createElement("option");
+option3.text = "X3";
+option3.value = "Y3";
+mySelect.add(option3, option2);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y3,Y2,Y1');
+
+var option4 = document.createElement("option");
+option4.text = "X4";
+option4.value = "Y4";
+mySelect.add(option4, mySelect.options[3]);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y4,Y3,Y2,Y1');
+
+resetSelection();	
+var group1 = document.createElement('optgroup');
+group1.appendChild(new Option('X', 'X', false, false));
+group1.appendChild(new Option('Y', 'Y', false, false));
+mySelect.add(group1);
+shouldBeEqualToString('deepCopy()', '0,1,2,X,Y');
+
+resetSelection();	
+var group2 = document.createElement('optgroup');
+group2.appendChild(new Option('X', 'X', false, false));
+group2.appendChild(new Option('Y', 'Y', false, false));
+mySelect.add(group2,mySelect.options[2]);
+shouldBeEqualToString('deepCopy()', '0,1,X,Y,2');
+
+var group3 = document.createElement('optgroup');
+group3.appendChild(new Option('X', 'X', false, false));
+group3.appendChild(new Option('Y', 'Y', false, false));
+mySelect.add(group3,group2);
+shouldBeEqualToString('deepCopy()', '0,1,X,Y,X,Y,2');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), null);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false));
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), 0);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), 1);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), 2);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), 100);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), -100);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), "2");
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), "1");
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), "0");
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), 2147483647);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), 2147483648);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), -2147483647);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), -2147483648);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), -2147483649);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), true);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), false);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), undefined);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), Infinity);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), -Infinity);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), "foo");
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+mySelect.add(new Option("X", "Y", false, false), NaN);
+shouldBeEqualToString('deepCopy()', '0,1,2,Y');
+
+resetSelection();
+shouldBeUndefined('mySelect.add("foo")');
+shouldBeUndefined('mySelect.add("foo", 0)');
+shouldBeUndefined('mySelect.add(undefined)');
+shouldBeUndefined('mySelect.add(undefined, 0)');
+shouldBeUndefined('mySelect.add(null)');
+shouldBeUndefined('mySelect.add(null, 0)');
+	
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (177628 => 177629)


--- trunk/Source/WebCore/ChangeLog	2014-12-22 01:52:23 UTC (rev 177628)
+++ trunk/Source/WebCore/ChangeLog	2014-12-22 02:00:04 UTC (rev 177629)
@@ -1,3 +1,17 @@
+2014-12-21  Shivakumar JM  <[email protected]>
+
+        HTMLSelectElement add() should support adding group of options element (HTMLOptGroupElement).
+        https://bugs.webkit.org/show_bug.cgi?id=139806
+
+        Reviewed by Darin Adler.
+
+        HTMLSelectElement add() should support adding group of options (optgroup) element.
+
+        Test: fast/dom/HTMLSelectElement/select-add-optgroup.html
+
+        * html/HTMLSelectElement.cpp:
+        (WebCore::HTMLSelectElement::add):
+
 2014-12-21  Chris Dumez  <[email protected]>
 
         Fix missing assertion in r177623.

Modified: trunk/Source/WebCore/html/HTMLSelectElement.cpp (177628 => 177629)


--- trunk/Source/WebCore/html/HTMLSelectElement.cpp	2014-12-22 01:52:23 UTC (rev 177628)
+++ trunk/Source/WebCore/html/HTMLSelectElement.cpp	2014-12-22 02:00:04 UTC (rev 177629)
@@ -220,7 +220,7 @@
 
 void HTMLSelectElement::add(HTMLElement* element, HTMLElement* before, ExceptionCode& ec)
 {
-    if (!element || !(is<HTMLOptionElement>(*element) || element->hasTagName(hrTag)))
+    if (!element || !(is<HTMLOptionElement>(*element) || element->hasTagName(hrTag) || is<HTMLOptGroupElement>(*element)))
         return;
 
     // Make sure the element is ref'd and deref'd so we don't leak it.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to