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
-~----------~----~----~----~------~----~------~--~---

Reply via email to