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

Reply via email to