Public (by t.broyer@gmail.com):
Description:
http://code.google.com/p/google-web-toolkit/issues/detail?id=4916
Remove old workaround code from DOMImplSafari for something that's been
fixed in Safari for a while makes it hard to work with optgroups in
select elements.
Reviewed by rjrjr@google.com
http://gwt-code-reviews.appspot.com/1313801/show
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9640 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/dom/client/DOMImplSafari.java b/user/src/com/google/gwt/dom/client/DOMImplSafari.java
index e9a4285..71b325e 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplSafari.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplSafari.java
@@ -276,36 +276,6 @@
return false;
}-*/;
- /*
- * The 'options' array cannot be used due to a bug in the version of WebKit
- * that ships with GWT (http://bugs.webkit.org/show_bug.cgi?id=10472). The
- * 'children' array, which is common for all DOM elements in Safari, does not
- * suffer from the same problem. Ideally, the 'children' array should be used
- * in all of the traversal methods in the DOM classes. Unfortunately, due to a
- * bug in Safari 2 (http://bugs.webkit.org/show_bug.cgi?id=3330), this will
- * not work. However, this bug does not cause problems in the case of <SELECT>
- * elements, because their descendent elements are only one level deep.
- */
- @Override
- public void selectClear(SelectElement select) {
- select.setInnerText("");
- }
-
- @Override
- public native int selectGetLength(SelectElement select) /*-{
- return select.children.length;
- }-*/;
-
- @Override
- public native NodeList<OptionElement> selectGetOptions(SelectElement select) /*-{
- return select.children;
- }-*/;
-
- @Override
- public native void selectRemoveOption(SelectElement select, int index) /*-{
- select.removeChild(select.children[index]);
- }-*/;
-
@Override
public void setScrollLeft(Document doc, int left) {
// Safari always applies document scrolling to the body element, even in
diff --git a/user/test/com/google/gwt/dom/client/SelectTests.java b/user/test/com/google/gwt/dom/client/SelectTests.java
index 5223f65..2084dbc 100644
--- a/user/test/com/google/gwt/dom/client/SelectTests.java
+++ b/user/test/com/google/gwt/dom/client/SelectTests.java
@@ -15,6 +15,8 @@
*/
package com.google.gwt.dom.client;
+import com.google.gwt.junit.DoNotRunWith;
+import com.google.gwt.junit.Platform;
import com.google.gwt.junit.client.GWTTestCase;
/**
@@ -127,4 +129,45 @@
assertTrue(opt1.isSelected());
assertTrue(opt2.isSelected());
}
+
+ /**
+ * optgroups
+ *
+ * @see <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4916">Issue 4916</a>
+ */
+ @DoNotRunWith(Platform.HtmlUnitBug)
+ public void testOptGroups() {
+ Document doc = Document.get();
+ SelectElement select = doc.createSelectElement();
+ doc.getBody().appendChild(select);
+
+ OptionElement opt0 = doc.createOptionElement();
+ OptionElement opt1 = doc.createOptionElement();
+ OptionElement opt2 = doc.createOptionElement();
+ OptGroupElement group1 = doc.createOptGroupElement();
+ opt0.setText("foo");
+ opt1.setText("bar");
+ opt2.setText("baz");
+ opt0.setValue("0");
+ opt1.setValue("1");
+ opt2.setValue("2");
+ group1.setLabel("group1");
+
+ select.appendChild(opt0);
+ select.appendChild(group1);
+ group1.appendChild(opt1);
+ select.appendChild(opt2);
+
+ assertEquals("3 options expected", 3, select.getOptions().getLength());
+ assertEquals("[0] == opt0", opt0, select.getOptions().getItem(0));
+ assertEquals("[1] == opt1", opt1, select.getOptions().getItem(1));
+ assertEquals("[2] == opt2", opt2, select.getOptions().getItem(2));
+
+ select.remove(1);
+ assertNull("null parent expected when removed", opt1.getParentElement());
+
+ select.add(opt1, opt0);
+ assertEquals("[0] == opt1", opt1, select.getOptions().getItem(0));
+ assertEquals("[1] == opt0", opt0, select.getOptions().getItem(1));
+ }
}