Reviewers: cramsdale, jgw,
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.
Assigning arbitrarily to Chris (who changed the issue status to
NeedsInfo) and Joel (who last changed the tests)
I've manually tested the fix (and the new test-case) in dev mode in IE8,
Firefox 3.6 and Chrome 10-dev, and in production mode, in the following
(old) browsers:
Please navigate 5 browsers to this URL:
http://192.168.1.185:1387/com.google.gwt.dom.DOMTest.JUnit/junit.html
1 - 192.168.1.185 / Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
AppleWebKit/525.28 (KHTML, like Gecko) Version/3.2.2 Safari/525.28.1
2 - 192.168.1.185 / Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10
3 - 192.168.1.185 / Mozilla/5.0 (Windows; U; Windows NT 5.1; fr;
rv:1.9.0.18) Gecko/2010020220 Firefox/3.0.18 (.NET CLR 3.5.30729)
4 - 192.168.1.185 / Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;
SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET
CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR
3.5.30729)
5 - 192.168.1.185 / Opera/9.64 (Windows NT 5.1; U; fr) Presto/2.1.1
Please review this at http://gwt-code-reviews.appspot.com/1313801/show
Affected files:
user/src/com/google/gwt/dom/client/DOMImplSafari.java
user/test/com/google/gwt/dom/client/SelectTests.java
Index: user/src/com/google/gwt/dom/client/DOMImplSafari.java
===================================================================
--- user/src/com/google/gwt/dom/client/DOMImplSafari.java (revision 9583)
+++ user/src/com/google/gwt/dom/client/DOMImplSafari.java (working copy)
@@ -276,37 +276,7 @@
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
// strict mode.
Index: user/test/com/google/gwt/dom/client/SelectTests.java
===================================================================
--- user/test/com/google/gwt/dom/client/SelectTests.java (revision 9583)
+++ user/test/com/google/gwt/dom/client/SelectTests.java (working copy)
@@ -127,4 +127,44 @@
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>
+ */
+ 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));
+ }
}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors