blob: 488d86c5c21485975d708e5099320778ee7bc024 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.databinding.observable.map;
import java.util.Collections;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.map.CompositeMap;
import org.eclipse.core.databinding.observable.map.IObservableMap;
import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
import org.eclipse.core.databinding.observable.set.IObservableSet;
import org.eclipse.core.databinding.observable.set.WritableSet;
import org.eclipse.jface.databinding.conformance.util.MapChangeEventTracker;
import org.eclipse.jface.examples.databinding.model.SimpleCart;
import org.eclipse.jface.examples.databinding.model.SimplePerson;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
/**
* @since 3.2
*
*/
public class CompositeMapTest extends AbstractDefaultRealmTestCase {
private WritableSet persons;
private CompositeMap composedMap;
protected void setUp() throws Exception {
super.setUp();
persons = new WritableSet();
IObservableMap first = BeansObservables.observeMap(persons,
SimplePerson.class, "cart");
composedMap = new CompositeMap(first, new IObservableFactory() {
public IObservable createObservable(Object target) {
return BeansObservables.observeMap((IObservableSet) target,
SimpleCart.class, "numItems");
}
});
}
public void testAddToFirstMap() {
MapChangeEventTracker tracker = new MapChangeEventTracker();
composedMap.addMapChangeListener(tracker);
assertEquals(0, tracker.count);
SimplePerson newPerson = new SimplePerson("p1", "a1", "c1", "s1");
newPerson.getCart().setNumItems(42);
persons.add(newPerson);
assertEquals(1, tracker.count);
assertEquals(0, tracker.event.diff.getRemovedKeys().size());
assertEquals(0, tracker.event.diff.getChangedKeys().size());
assertEquals(Collections.singleton(newPerson), tracker.event.diff
.getAddedKeys());
assertEquals(new Integer(42), tracker.event.diff.getNewValue(newPerson));
assertEquals(new Integer(42), composedMap.get(newPerson));
}
public void testAddSharedToFirstMap() {
SimplePerson person1 = new SimplePerson("p1", "a1", "c1", "s1");
person1.getCart().setNumItems(42);
persons.add(person1);
MapChangeEventTracker tracker = new MapChangeEventTracker();
composedMap.addMapChangeListener(tracker);
assertEquals(0, tracker.count);
SimplePerson person2 = new SimplePerson("p1", "a1", "c1", "s1");
person2.setCart(person1.getCart());
persons.add(person2);
assertEquals(1, tracker.count);
assertEquals(0, tracker.event.diff.getRemovedKeys().size());
assertEquals(0, tracker.event.diff.getChangedKeys().size());
assertEquals(Collections.singleton(person2), tracker.event.diff
.getAddedKeys());
assertEquals(new Integer(42), tracker.event.diff.getNewValue(person2));
assertEquals(new Integer(42), composedMap.get(person2));
assertEquals(new Integer(42), composedMap.get(person1));
}
public void testRemoveFromFirstMap() {
MapChangeEventTracker tracker = new MapChangeEventTracker();
SimplePerson newPerson = new SimplePerson("p1", "a1", "c1", "s1");
newPerson.getCart().setNumItems(42);
persons.add(newPerson);
assertTrue("newPerson should be added", composedMap.containsKey(newPerson));
composedMap.addMapChangeListener(tracker);
assertEquals(0, tracker.count);
persons.remove(newPerson);
assertEquals(1, tracker.count);
assertEquals(0, tracker.event.diff.getAddedKeys().size());
assertEquals(0, tracker.event.diff.getChangedKeys().size());
assertEquals(Collections.singleton(newPerson), tracker.event.diff
.getRemovedKeys());
assertEquals(new Integer(42), tracker.event.diff.getOldValue(newPerson));
assertFalse("newPerson should be removed", composedMap.containsKey(newPerson));
}
public void testRemoveSharedFromFirstMap() {
SimplePerson person1 = new SimplePerson("p1", "a1", "c1", "s1");
person1.getCart().setNumItems(42);
persons.add(person1);
SimplePerson person2 = new SimplePerson("p1", "a1", "c1", "s1");
person2.setCart(person1.getCart());
persons.add(person2);
assertTrue("person2 should be added", composedMap.containsKey(person2));
MapChangeEventTracker tracker = new MapChangeEventTracker();
composedMap.addMapChangeListener(tracker);
assertEquals(0, tracker.count);
persons.remove(person2);
assertEquals(1, tracker.count);
assertEquals(0, tracker.event.diff.getAddedKeys().size());
assertEquals(0, tracker.event.diff.getChangedKeys().size());
assertEquals(Collections.singleton(person2), tracker.event.diff
.getRemovedKeys());
assertEquals(new Integer(42), tracker.event.diff.getOldValue(person2));
assertFalse("person2 should be removed", composedMap.containsKey(person2));
assertEquals(new Integer(42), composedMap.get(person1));
}
public void testChangeInFirstMap() {
SimplePerson person1 = new SimplePerson("p1", "a1", "c1", "s1");
person1.getCart().setNumItems(42);
persons.add(person1);
MapChangeEventTracker tracker = new MapChangeEventTracker();
composedMap.addMapChangeListener(tracker);
assertEquals(0, tracker.count);
person1.setCart(new SimpleCart());
assertEquals(1, tracker.count);
assertEquals(0, tracker.event.diff.getAddedKeys().size());
assertEquals(0, tracker.event.diff.getRemovedKeys().size());
assertEquals(Collections.singleton(person1), tracker.event.diff
.getChangedKeys());
assertEquals(new Integer(42), tracker.event.diff.getOldValue(person1));
assertEquals(new Integer(0), tracker.event.diff.getNewValue(person1));
assertEquals(new Integer(0), composedMap.get(person1));
}
public void testChangeInFirstMapToShared() {
SimplePerson person0 = new SimplePerson("p0", "a0", "c0", "s0");
person0.getCart().setNumItems(13);
persons.add(person0);
SimplePerson person1 = new SimplePerson("p1", "a1", "c1", "s1");
person1.getCart().setNumItems(42);
persons.add(person1);
MapChangeEventTracker tracker = new MapChangeEventTracker();
composedMap.addMapChangeListener(tracker);
assertEquals(0, tracker.count);
person1.setCart(person0.getCart());
assertEquals(1, tracker.count);
assertEquals(0, tracker.event.diff.getAddedKeys().size());
assertEquals(0, tracker.event.diff.getRemovedKeys().size());
assertEquals(Collections.singleton(person1), tracker.event.diff
.getChangedKeys());
assertEquals(new Integer(42), tracker.event.diff.getOldValue(person1));
assertEquals(new Integer(13), tracker.event.diff.getNewValue(person1));
assertEquals(new Integer(13), composedMap.get(person1));
}
public void testChangeInFirstMapFromShared() {
SimplePerson person0 = new SimplePerson("p0", "a0", "c0", "s0");
person0.getCart().setNumItems(13);
persons.add(person0);
SimplePerson person1 = new SimplePerson("p1", "a1", "c1", "s1");
person1.setCart(person0.getCart());
persons.add(person1);
MapChangeEventTracker tracker = new MapChangeEventTracker();
composedMap.addMapChangeListener(tracker);
assertEquals(0, tracker.count);
person1.setCart(new SimpleCart());
assertEquals(1, tracker.count);
assertEquals(0, tracker.event.diff.getAddedKeys().size());
assertEquals(0, tracker.event.diff.getRemovedKeys().size());
assertEquals(Collections.singleton(person1), tracker.event.diff
.getChangedKeys());
assertEquals(new Integer(13), tracker.event.diff.getOldValue(person1));
assertEquals(new Integer(0), tracker.event.diff.getNewValue(person1));
assertEquals(new Integer(0), composedMap.get(person1));
}
public void testChangeInSecondMap() {
SimplePerson person0 = new SimplePerson("p0", "a0", "c0", "s0");
person0.getCart().setNumItems(13);
persons.add(person0);
MapChangeEventTracker tracker = new MapChangeEventTracker();
composedMap.addMapChangeListener(tracker);
assertEquals(0, tracker.count);
person0.getCart().setNumItems(42);
assertEquals(1, tracker.count);
assertEquals(0, tracker.event.diff.getAddedKeys().size());
assertEquals(0, tracker.event.diff.getRemovedKeys().size());
assertEquals(Collections.singleton(person0), tracker.event.diff
.getChangedKeys());
assertEquals(new Integer(13), tracker.event.diff.getOldValue(person0));
assertEquals(new Integer(42), tracker.event.diff.getNewValue(person0));
assertEquals(new Integer(42), composedMap.get(person0));
}
}