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()); + } }