|
Lines 8-14
Link Here
|
| 8 |
* Contributors: |
8 |
* Contributors: |
| 9 |
* Matthew Hall - initial API and implementation (bug 221351) |
9 |
* Matthew Hall - initial API and implementation (bug 221351) |
| 10 |
* Brad Reynolds - through JavaBeanObservableArrayBasedListTest.java |
10 |
* Brad Reynolds - through JavaBeanObservableArrayBasedListTest.java |
| 11 |
* Matthew Hall - bug 213145, 244098 |
11 |
* Matthew Hall - bug 213145, 244098, 246103 |
| 12 |
******************************************************************************/ |
12 |
******************************************************************************/ |
| 13 |
|
13 |
|
| 14 |
package org.eclipse.core.tests.internal.databinding.beans; |
14 |
package org.eclipse.core.tests.internal.databinding.beans; |
|
Lines 25-30
Link Here
|
| 25 |
import junit.framework.Test; |
25 |
import junit.framework.Test; |
| 26 |
import junit.framework.TestSuite; |
26 |
import junit.framework.TestSuite; |
| 27 |
|
27 |
|
|
|
28 |
import org.eclipse.core.databinding.beans.BeansObservables; |
| 28 |
import org.eclipse.core.databinding.observable.IObservable; |
29 |
import org.eclipse.core.databinding.observable.IObservable; |
| 29 |
import org.eclipse.core.databinding.observable.IObservableCollection; |
30 |
import org.eclipse.core.databinding.observable.IObservableCollection; |
| 30 |
import org.eclipse.core.databinding.observable.Realm; |
31 |
import org.eclipse.core.databinding.observable.Realm; |
|
Lines 33-38
Link Here
|
| 33 |
import org.eclipse.core.internal.databinding.beans.JavaBeanObservableSet; |
34 |
import org.eclipse.core.internal.databinding.beans.JavaBeanObservableSet; |
| 34 |
import org.eclipse.jface.databinding.conformance.MutableObservableSetContractTest; |
35 |
import org.eclipse.jface.databinding.conformance.MutableObservableSetContractTest; |
| 35 |
import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate; |
36 |
import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate; |
|
|
37 |
import org.eclipse.jface.databinding.conformance.util.CurrentRealm; |
| 36 |
import org.eclipse.jface.databinding.conformance.util.SetChangeEventTracker; |
38 |
import org.eclipse.jface.databinding.conformance.util.SetChangeEventTracker; |
| 37 |
import org.eclipse.jface.databinding.swt.SWTObservables; |
39 |
import org.eclipse.jface.databinding.swt.SWTObservables; |
| 38 |
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase; |
40 |
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase; |
|
Lines 129-135
Link Here
|
| 129 |
assertEquals(0, bean.getArray().length); |
131 |
assertEquals(0, bean.getArray().length); |
| 130 |
} |
132 |
} |
| 131 |
|
133 |
|
| 132 |
public void testRemoveListChangeEvent() throws Exception { |
134 |
public void testRemove_SetChangeEvent() throws Exception { |
| 133 |
String element = "1"; |
135 |
String element = "1"; |
| 134 |
set.add(element); |
136 |
set.add(element); |
| 135 |
assertEquals(1, set.size()); |
137 |
assertEquals(1, set.size()); |
|
Lines 165-171
Link Here
|
| 165 |
assertEquals(2, bean.getArray().length); |
167 |
assertEquals(2, bean.getArray().length); |
| 166 |
} |
168 |
} |
| 167 |
|
169 |
|
| 168 |
public void testAddAllListChangEvent() throws Exception { |
170 |
public void testAddAll_SetChangeEvent() throws Exception { |
| 169 |
Collection elements = Arrays.asList(new String[] { "1", "2" }); |
171 |
Collection elements = Arrays.asList(new String[] { "1", "2" }); |
| 170 |
assertEquals(0, set.size()); |
172 |
assertEquals(0, set.size()); |
| 171 |
|
173 |
|
|
Lines 200-206
Link Here
|
| 200 |
assertEquals(0, bean.getArray().length); |
202 |
assertEquals(0, bean.getArray().length); |
| 201 |
} |
203 |
} |
| 202 |
|
204 |
|
| 203 |
public void testRemoveAllListChangeEvent() throws Exception { |
205 |
public void testRemoveAll_SetChangeEvent() throws Exception { |
| 204 |
Collection elements = Arrays.asList(new String[] { "1", "2" }); |
206 |
Collection elements = Arrays.asList(new String[] { "1", "2" }); |
| 205 |
set.addAll(elements); |
207 |
set.addAll(elements); |
| 206 |
|
208 |
|
|
Lines 235-241
Link Here
|
| 235 |
assertTrue(set.containsAll(Arrays.asList(new String[] { "1", "0" }))); |
237 |
assertTrue(set.containsAll(Arrays.asList(new String[] { "1", "0" }))); |
| 236 |
} |
238 |
} |
| 237 |
|
239 |
|
| 238 |
public void testRetainAllListChangeEvent() throws Exception { |
240 |
public void testRetainAll_SetChangeEvent() throws Exception { |
| 239 |
set.addAll(Arrays.asList(new String[] { "0", "1", "2", "3" })); |
241 |
set.addAll(Arrays.asList(new String[] { "0", "1", "2", "3" })); |
| 240 |
|
242 |
|
| 241 |
SetChangeEventTracker listener = SetChangeEventTracker.observe(set); |
243 |
SetChangeEventTracker listener = SetChangeEventTracker.observe(set); |
|
Lines 261-267
Link Here
|
| 261 |
}); |
263 |
}); |
| 262 |
} |
264 |
} |
| 263 |
|
265 |
|
| 264 |
public void testListChangeEventFiresWhenNewListIsSet() throws Exception { |
266 |
public void testSetChangeEventFiresWhenNewSetIsSet() throws Exception { |
| 265 |
Bean[] elements = new Bean[] { new Bean(), new Bean() }; |
267 |
Bean[] elements = new Bean[] { new Bean(), new Bean() }; |
| 266 |
|
268 |
|
| 267 |
SetChangeEventTracker listener = SetChangeEventTracker.observe(set); |
269 |
SetChangeEventTracker listener = SetChangeEventTracker.observe(set); |
|
Lines 271-276
Link Here
|
| 271 |
assertEquals(1, listener.count); |
273 |
assertEquals(1, listener.count); |
| 272 |
} |
274 |
} |
| 273 |
|
275 |
|
|
|
276 |
public void testSetBeanProperty_CorrectForNullOldAndNewValues() { |
| 277 |
// The java bean spec allows the old and new values in a |
| 278 |
// PropertyChangeEvent to be null, which indicates that an unknown |
| 279 |
// change occured. |
| 280 |
|
| 281 |
// This test ensures that JavaBeanObservableValue fires the correct |
| 282 |
// value diff even if the bean implementor is lazy :-P |
| 283 |
|
| 284 |
Bean bean = new AnnoyingBean(); |
| 285 |
bean.setArray(new Object[] { "old" }); |
| 286 |
IObservableSet observable = BeansObservables.observeSet( |
| 287 |
new CurrentRealm(true), bean, "array"); |
| 288 |
SetChangeEventTracker tracker = SetChangeEventTracker |
| 289 |
.observe(observable); |
| 290 |
bean.setArray(new Object[] { "new" }); |
| 291 |
assertEquals(1, tracker.count); |
| 292 |
assertEquals(Collections.singleton("old"), tracker.event.diff |
| 293 |
.getRemovals()); |
| 294 |
assertEquals(Collections.singleton("new"), tracker.event.diff |
| 295 |
.getAdditions()); |
| 296 |
} |
| 297 |
|
| 274 |
private static void assertPropertyChangeEvent(Bean bean, Runnable runnable) { |
298 |
private static void assertPropertyChangeEvent(Bean bean, Runnable runnable) { |
| 275 |
PropertyChangeTracker listener = new PropertyChangeTracker(); |
299 |
PropertyChangeTracker listener = new PropertyChangeTracker(); |
| 276 |
bean.addPropertyChangeListener(listener); |
300 |
bean.addPropertyChangeListener(listener); |
|
Lines 286-292
Link Here
|
| 286 |
assertTrue("old value", Arrays.equals(old, (Object[]) event |
310 |
assertTrue("old value", Arrays.equals(old, (Object[]) event |
| 287 |
.getOldValue())); |
311 |
.getOldValue())); |
| 288 |
assertTrue("new value", Arrays.equals(bean.getArray(), (Object[]) event.getNewValue())); |
312 |
assertTrue("new value", Arrays.equals(bean.getArray(), (Object[]) event.getNewValue())); |
| 289 |
assertFalse("lists are equal", Arrays.equals(bean.getArray(), old)); |
313 |
assertFalse("sets are equal", Arrays.equals(bean.getArray(), old)); |
| 290 |
} |
314 |
} |
| 291 |
|
315 |
|
| 292 |
private static class PropertyChangeTracker implements |
316 |
private static class PropertyChangeTracker implements |
|
Lines 326-336
Link Here
|
| 326 |
} |
350 |
} |
| 327 |
Object bean = new Bean(new Object[0]); |
351 |
Object bean = new Bean(new Object[0]); |
| 328 |
|
352 |
|
| 329 |
IObservableSet list = new JavaBeanObservableSet(realm, bean, |
353 |
IObservableSet set = new JavaBeanObservableSet(realm, bean, |
| 330 |
propertyDescriptor, String.class); |
354 |
propertyDescriptor, String.class); |
| 331 |
for (int i = 0; i < elementCount; i++) |
355 |
for (int i = 0; i < elementCount; i++) |
| 332 |
list.add(createElement(list)); |
356 |
set.add(createElement(set)); |
| 333 |
return list; |
357 |
return set; |
| 334 |
} |
358 |
} |
| 335 |
|
359 |
|
| 336 |
public Object createElement(IObservableCollection collection) { |
360 |
public Object createElement(IObservableCollection collection) { |
|
Lines 342-349
Link Here
|
| 342 |
} |
366 |
} |
| 343 |
|
367 |
|
| 344 |
public void change(IObservable observable) { |
368 |
public void change(IObservable observable) { |
| 345 |
IObservableSet list = (IObservableSet) observable; |
369 |
IObservableSet set = (IObservableSet) observable; |
| 346 |
list.add(createElement(list)); |
370 |
set.add(createElement(set)); |
| 347 |
} |
371 |
} |
| 348 |
} |
372 |
} |
| 349 |
} |
373 |
} |