Revision: 10351
Author: [email protected]
Date: Fri Jun 17 12:00:32 2011
Log: Use the provided key in all decisions about whether the
selections have changed.
Review at http://gwt-code-reviews.appspot.com/1465802
Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=10351
Modified:
/trunk/user/src/com/google/gwt/view/client/MultiSelectionModel.java
/trunk/user/test/com/google/gwt/view/client/MultiSelectionModelTest.java
=======================================
--- /trunk/user/src/com/google/gwt/view/client/MultiSelectionModel.java Mon
Nov 8 11:22:54 2010
+++ /trunk/user/src/com/google/gwt/view/client/MultiSelectionModel.java Fri
Jun 17 12:00:32 2011
@@ -111,9 +111,10 @@
Object key = getKey(object);
T oldValue = selectedSet.get(key);
if (selected) {
- if (oldValue == null || !oldValue.equals(object)) {
- selectedSet.put(getKey(object), object);
- changed = true;
+ selectedSet.put(key, object);
+ Object oldKey = getKey(oldValue);
+ if (!changed) {
+ changed = (oldKey == null) ? (key != null) : !oldKey.equals(key);
}
} else {
if (oldValue != null) {
=======================================
---
/trunk/user/test/com/google/gwt/view/client/MultiSelectionModelTest.java
Tue Nov 9 09:07:13 2010
+++
/trunk/user/test/com/google/gwt/view/client/MultiSelectionModelTest.java
Fri Jun 17 12:00:32 2011
@@ -147,6 +147,36 @@
model.setSelected("test", false); // Should not fire change event
model.setSelected("test", false); // Should not fire change event
}
+
+ /**
+ * Tests that reselecting the same key from a different object does not
fire
+ * a change event.
+ */
+ public void testNoDuplicateChangeEventWithKeyProvider() {
+ ProvidesKey<String> keyProvider = new ProvidesKey<String>() {
+ public Object getKey(String item) {
+ return item.toUpperCase();
+ }
+ };
+ MultiSelectionModel<String> model = createSelectionModel(keyProvider);
+ SelectionChangeEvent.Handler handler = new
SelectionChangeEvent.Handler() {
+ public void onSelectionChange(SelectionChangeEvent event) {
+ fail();
+ }
+ };
+
+ model.setSelected("test1", true);
+ assertTrue(model.isSelected("test1"));
+
+ model.addSelectionChangeHandler(handler);
+ // Selecting a different object with the same key should not be seen
as a
+ // selection change
+ String replacement = "TEST1";
+ model.setSelected(replacement, true);
+ assertTrue(model.isSelected(replacement));
+ assertEquals(1, model.getSelectedSet().size());
+ assertSame(replacement, model.getSelectedSet().iterator().next());
+ }
public void testSetSelected() {
MultiSelectionModel<String> model = createSelectionModel(null);
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors