Fixes CheckBox.replaceInputElement() to not reverse the order of the input &
label elements. This was causing RadioButtons to have their elements reversed
when setName() was called.
Patch by: jgw
Review by: jlabanca (desk check)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@4820 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/CheckBox.java b/user/src/com/google/gwt/user/client/ui/CheckBox.java
index 40386ff..934d970 100644
--- a/user/src/com/google/gwt/user/client/ui/CheckBox.java
+++ b/user/src/com/google/gwt/user/client/ui/CheckBox.java
@@ -387,8 +387,7 @@
// Clear out the old input element
setEventListener(asOld(inputElem), null);
- getElement().removeChild(inputElem);
- getElement().insertBefore(newInputElem, null);
+ getElement().replaceChild(newInputElem, inputElem);
// Sink events on the new element
Event.sinkEvents(elem, Event.getEventsSunk(inputElem));
diff --git a/user/test/com/google/gwt/user/client/ui/RadioButtonTest.java b/user/test/com/google/gwt/user/client/ui/RadioButtonTest.java
index 9f75759..566c50e 100644
--- a/user/test/com/google/gwt/user/client/ui/RadioButtonTest.java
+++ b/user/test/com/google/gwt/user/client/ui/RadioButtonTest.java
@@ -110,4 +110,22 @@
assertFalse(r2.getValue());
assertTrue(r3.getValue());
}
+
+ /**
+ * Ensures that the element order doesn't get reversed when the radio's
+ * name is changed.
+ */
+ public void testOrderAfterSetName() {
+ RadioButton radio = new RadioButton("oldName");
+ assertEquals("oldName", radio.getName());
+
+ radio.setName("newName");
+ assertEquals("newName", radio.getName());
+
+ Element parent = radio.getElement();
+ Element firstChild = parent.getFirstChildElement().cast();
+ Element secondChild = firstChild.getNextSiblingElement().cast();
+ assertEquals("input", firstChild.getTagName().toLowerCase());
+ assertEquals("label", secondChild.getTagName().toLowerCase());
+ }
}