Author: [EMAIL PROTECTED]
Date: Thu Nov 6 14:22:53 2008
New Revision: 3974
Modified:
branches/1_6_clean_events/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/CheckBox.java
branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/HasValue.java
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/TextAreaTest.java
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/TextBoxBaseTestBase.java
Log:
Fixes ValueChange bugs in CheckBox, adds some ValueChange tests
Modified:
branches/1_6_clean_events/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
==============================================================================
---
branches/1_6_clean_events/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
(original)
+++
branches/1_6_clean_events/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
Thu Nov 6 14:22:53 2008
@@ -54,13 +54,15 @@
/**
* Fires value change event if the old value is not equal to the new
value.
+ * Use this call rather than making the decision to short circuit
yourself for
+ * safe handling of null.
*
* @param <I> the old value type
* @param <S> The event source.
* @param source the source of the handlers. Must have value change
handlers
* and a handler manager.
- * @param oldValue the oldValue
- * @param newValue the newValue
+ * @param oldValue the oldValue, may be null
+ * @param newValue the newValue, may be null
*/
public static <I, S extends HasValueChangeHandlers<I> & HasHandlers>
void fireIfNotEqual(
S source, I oldValue, I newValue) {
Modified:
branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/CheckBox.java
==============================================================================
---
branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/CheckBox.java
(original)
+++
branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/CheckBox.java
Thu Nov 6 14:22:53 2008
@@ -103,6 +103,8 @@
if (!isEventHandled(ValueChangeEvent.getType())) {
this.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
+ // No need to compare old value and new value--click handler
+ // only fires on real click, and value always toggles
ValueChangeEvent.fire(CheckBox.this, isChecked());
}
});
@@ -154,14 +156,14 @@
}
/**
- * Checks or unchecks this check box.
+ * Checks or unchecks this check box. Does not fire [EMAIL PROTECTED]
ValueChangeEvent}.
+ * (If you want the event to fire, use [EMAIL PROTECTED] #setValue(boolean,
boolean)})
*
* @param checked <code>true</code> to check the check box
*/
public void setChecked(boolean checked) {
DOM.setElementPropertyBoolean(inputElem, "checked", checked);
DOM.setElementPropertyBoolean(inputElem, "defaultChecked", checked);
- ValueChangeEvent.fire(this, checked);
}
@Override
@@ -216,11 +218,13 @@
}
public void setValue(Boolean value, boolean fireEvents) {
- if (this.isChecked() == value.booleanValue()) {
+ if (isChecked() == value) {
return;
}
setChecked(value);
- ValueChangeEvent.fire(this, value);
+ if (fireEvents) {
+ ValueChangeEvent.fire(this, value);
+ }
}
// Unlike other widgets the CheckBox sinks on its input element, not its
Modified:
branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/HasValue.java
==============================================================================
---
branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/HasValue.java
(original)
+++
branches/1_6_clean_events/user/src/com/google/gwt/user/client/ui/HasValue.java
Thu Nov 6 14:22:53 2008
@@ -33,18 +33,20 @@
T getValue();
/**
- * Sets this object's value. Should call setValue(T value, false).
+ * Sets this object's value without firing any events. Should call
setValue(T
+ * value, false).
*
* @param value the object's new value
*/
void setValue(T value);
/**
- * Sets this object's value. Fires [EMAIL PROTECTED]
com.google.gwt.event.logical.shared.ValueChangeEvent} when fireEvents is
- * true.
+ * Sets this object's value. Fires
+ * [EMAIL PROTECTED] com.google.gwt.event.logical.shared.ValueChangeEvent}
when
+ * fireEvents is true and the new value does not equal the existing
value.
*
* @param value the object's new value
- * @param fireEvents fire events if true
+ * @param fireEvents fire events if true and value is new
*/
void setValue(T value, boolean fireEvents);
}
Modified:
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
==============================================================================
---
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
(original)
+++
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
Thu Nov 6 14:22:53 2008
@@ -15,6 +15,8 @@
*/
package com.google.gwt.user.client.ui;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
@@ -27,6 +29,18 @@
@Override
public String getModuleName() {
return "com.google.gwt.user.DebugTest";
+ }
+
+ @Override
+ protected void gwtSetUp() throws Exception {
+ super.gwtSetUp();
+ RootPanel.get().clear();
+ }
+
+ @Override
+ protected void gwtTearDown() throws Exception {
+ RootPanel.get().clear();
+ super.gwtTearDown();
}
/**
@@ -70,5 +84,37 @@
UIObjectTest.assertDebugId("myCheck", check.getElement());
UIObjectTest.assertDebugId("myCheck-input", newInput);
UIObjectTest.assertDebugIdContents("myCheck-label", "myLabel");
+ }
+
+ public void testValueChangeEvent() {
+ CheckBox cb = new CheckBox();
+ Handler h = new Handler();
+ cb.addValueChangeHandler(h);
+ cb.setChecked(false);
+ assertNull(h.received);
+ cb.setChecked(true);
+ assertNull(h.received);
+
+ cb.setValue(false);
+ assertNull(h.received);
+ cb.setValue(true);
+ assertNull(h.received);
+
+ cb.setValue(true, true);
+ assertNull(h.received);
+
+ cb.setValue(false, true);
+ assertFalse(h.received);
+
+ cb.setValue(true, true);
+ assertTrue(h.received);
+ }
+
+ private static class Handler implements ValueChangeHandler<Boolean> {
+ Boolean received = null;
+
+ public void onValueChange(ValueChangeEvent<Boolean> event) {
+ received = event.getValue();
+ }
}
}
Modified:
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/TextAreaTest.java
==============================================================================
---
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/TextAreaTest.java
(original)
+++
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/TextAreaTest.java
Thu Nov 6 14:22:53 2008
@@ -16,7 +16,6 @@
package com.google.gwt.user.client.ui;
-
/**
* Tests a [EMAIL PROTECTED] TextArea}.
*/
Modified:
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/TextBoxBaseTestBase.java
==============================================================================
---
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/TextBoxBaseTestBase.java
(original)
+++
branches/1_6_clean_events/user/test/com/google/gwt/user/client/ui/TextBoxBaseTestBase.java
Thu Nov 6 14:22:53 2008
@@ -15,6 +15,8 @@
*/
package com.google.gwt.user.client.ui;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.junit.client.GWTTestCase;
/**
@@ -91,6 +93,36 @@
area2.setVisible(false);
RootPanel.get().add(area2);
area.selectAll();
+ }
+ }
+
+ public void testValueChangeEvent() {
+ TextBoxBase tb = createTextBoxBase();
+ Handler h = new Handler();
+ tb.addValueChangeHandler(h);
+ tb.setText("able");
+ assertNull(h.received);
+
+ tb.setValue("able");
+ assertNull(h.received);
+ tb.setValue("baker");
+ assertNull(h.received);
+
+ tb.setValue("baker", true);
+ assertNull(h.received);
+
+ tb.setValue("able", true);
+ assertEquals("able", h.received);
+
+ tb.setValue("baker", true);
+ assertEquals("baker", h.received);
+ }
+
+ private static class Handler implements ValueChangeHandler<String> {
+ String received = null;
+
+ public void onValueChange(ValueChangeEvent<String> event) {
+ received = event.getValue();
}
}
}
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---