### Eclipse Workspace Patch 1.0 #P org.eclipse.jface.tests.databinding.conformance Index: plugin.properties =================================================================== RCS file: plugin.properties diff -N plugin.properties --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ plugin.properties 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,12 @@ +############################################################################### +# Copyright (c) 2007 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 +############################################################################### +pluginName = JFace Data Binding Conformance Tests +providerName = Eclipse.org Index: src/org/eclipse/jface/databinding/conformance/MutableObservableSetContractTest.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/MutableObservableSetContractTest.java diff -N src/org/eclipse/jface/databinding/conformance/MutableObservableSetContractTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/MutableObservableSetContractTest.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,266 @@ +/******************************************************************************* + * Copyright (c) 2007 Brad Reynolds 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: + * Brad Reynolds - initial API and implementation + ******************************************************************************/ + +package org.eclipse.jface.databinding.conformance; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import org.eclipse.core.databinding.observable.set.IObservableSet; +import org.eclipse.jface.databinding.conformance.delegate.IObservableCollectionContractDelegate; +import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker; +import org.eclipse.jface.databinding.conformance.util.SetChangeEventTracker; + +/** + */ +public class MutableObservableSetContractTest extends + MutableObservableCollectionContractTest { + private IObservableCollectionContractDelegate delegate; + + private IObservableSet set; + + public MutableObservableSetContractTest(String testName, + IObservableCollectionContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + /** + * @param delegate + */ + public MutableObservableSetContractTest( + IObservableCollectionContractDelegate delegate) { + super(delegate); + } + + protected void setUp() throws Exception { + super.setUp(); + set = (IObservableSet) getObservable(); + } + + public void testAdd_SetChangeEvent() throws Exception { + assertSetChangeEventFired(new Runnable() { + public void run() { + set.add(delegate.createElement(set)); + } + }, "Set.add(Object)", set); + } + + public void testAdd_SetDiffEntry() throws Exception { + set.add(delegate.createElement(set)); + final Object element = delegate.createElement(set); + + assertAddDiffEntry(new Runnable() { + public void run() { + set.add(element); + } + }, "Set.add(Object)", set, element); + } + + public void testAddAll_SetChangeEvent() throws Exception { + assertSetChangeEventFired(new Runnable() { + public void run() { + set.addAll(Arrays.asList(new Object[] { delegate + .createElement(set) })); + } + }, "Set.addAll(Collection", set); + } + + public void testAddAll_SetDiffEntry() throws Exception { + final Object element = delegate.createElement(set); + + assertAddDiffEntry(new Runnable() { + public void run() { + set.addAll(Arrays.asList(new Object[] { element })); + } + }, "Set.addAll(Collection)", set, element); + } + + public void testRemove_SetChangeEvent() throws Exception { + final Object element = delegate.createElement(set); + set.add(element); + + assertSetChangeEventFired(new Runnable() { + public void run() { + set.remove(element); + } + }, "Set.remove(Object)", set); + } + + public void testRemove_SetDiffEntry() throws Exception { + set.add(delegate.createElement(set)); + final Object element = delegate.createElement(set); + set.add(element); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + set.remove(element); + } + }, "Set.remove(Object)", set, element); + } + + public void testRemoveAll_SetChangeEvent() throws Exception { + final Object element = delegate.createElement(set); + set.add(element); + + assertSetChangeEventFired(new Runnable() { + public void run() { + set.removeAll(Arrays.asList(new Object[] { element })); + } + }, "Set.removeAll(Collection)", set); + } + + public void testRemoveAll_SetDiffEntry() throws Exception { + final Object element = delegate.createElement(set); + set.add(element); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + set.removeAll(Arrays.asList(new Object[] { element })); + } + }, "Set.removeAll(Collection)", set, element); + } + + public void testRetainAll_SetChangeEvent() throws Exception { + final Object element1 = delegate.createElement(set); + set.add(element1); + set.add(delegate.createElement(set)); + + assertSetChangeEventFired(new Runnable() { + public void run() { + set.retainAll(Arrays.asList(new Object[] { element1 })); + } + }, "Set.retainAll(Collection", set); + } + + public void testRetainAll_SetDiffEntry() throws Exception { + final Object element1 = delegate.createElement(set); + set.add(element1); + Object element2 = delegate.createElement(set); + set.add(delegate.createElement(set)); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + set.retainAll(Arrays.asList(new Object[] { element1 })); + } + }, "Set.retainAll(Collection)", set, element2); + } + + public void testClear_SetChangeEvent() throws Exception { + set.add(delegate.createElement(set)); + + assertSetChangeEventFired(new Runnable() { + public void run() { + set.clear(); + } + }, "Set.clear()", set); + } + + public void testClear_SetDiffEntry() throws Exception { + Object element = delegate.createElement(set); + set.add(element); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + set.clear(); + } + }, "Set.clear()", set, element); + } + + /** + * Asserts standard behaviors of firing set change events. + *
set
.
+ * June 2, 2006
+The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at http://www.eclipse.org/legal/epl-v10.html. +For purposes of the EPL, "Program" will mean the Content.
+ +If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at http://www.eclipse.org.
+ + + Index: src/org/eclipse/jface/databinding/conformance/MutableObservableListContractTest.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/MutableObservableListContractTest.java diff -N src/org/eclipse/jface/databinding/conformance/MutableObservableListContractTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/MutableObservableListContractTest.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,493 @@ +/******************************************************************************* + * Copyright (c) 2007 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.jface.databinding.conformance; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.eclipse.core.databinding.observable.list.IObservableList; +import org.eclipse.core.databinding.observable.list.ListDiffEntry; +import org.eclipse.jface.databinding.conformance.delegate.IObservableCollectionContractDelegate; +import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker; +import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker; + + +/** + * Mutability tests for IObservableList. + * + *+ * This class is experimental and can change at any time. It is recommended to + * not subclass or assume the test names will not change. The only API that is + * guaranteed to not change are the constructors. The tests will remain public + * and not final in order to allow for consumers to turn off a test if needed by + * subclassing. + *
+ * + * @since 3.2 + */ +public class MutableObservableListContractTest extends + MutableObservableCollectionContractTest { + private IObservableCollectionContractDelegate delegate; + + private IObservableList list; + + /** + * @param delegate + */ + public MutableObservableListContractTest( + IObservableCollectionContractDelegate delegate) { + super(delegate); + this.delegate = delegate; + } + + public MutableObservableListContractTest(String testName, + IObservableCollectionContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + protected void setUp() throws Exception { + super.setUp(); + list = (IObservableList) getObservable(); + } + + public void testAdd_ListChangeEvent() throws Exception { + assertListChangeEventFired(new Runnable() { + public void run() { + list.add(delegate.createElement(list)); + } + }, "List.add(Object)", list); + } + + public void testAdd_ListDiffEntry() throws Exception { + list.add(delegate.createElement(list)); + final Object element = delegate.createElement(list); + + assertAddDiffEntry(new Runnable() { + public void run() { + list.add(element); + } + }, "List.add(Object)", list, element, 1); + } + + public void testAddAtIndex_ChangeEvent() throws Exception { + assertChangeEventFired(new Runnable() { + public void run() { + list.add(0, delegate.createElement(list)); + } + }, "List.add(int, Object)", list); + } + + public void testAddAtIndex_ListChangeEvent() throws Exception { + assertListChangeEventFired(new Runnable() { + public void run() { + list.add(0, delegate.createElement(list)); + } + }, "List.add(int, Object)", list); + } + + public void testAddAtIndex_ChangeEventFiredAfterElementIsAdded() + throws Exception { + final Object element = delegate.createElement(list); + + assertContainsDuringChangeEvent(new Runnable() { + public void run() { + list.add(0, element); + } + }, "List.add(int, Collection)", list, element); + } + + public void testAddAtIndex_ListDiffEntry() throws Exception { + list.add(delegate.createElement(list)); + final Object element = delegate.createElement(list); + + assertAddDiffEntry(new Runnable() { + public void run() { + list.add(1, element); + } + }, "List.add(int, Object)", list, element, 1); + } + + public void testAddAll_ListChangeEvent() throws Exception { + assertListChangeEventFired(new Runnable() { + public void run() { + list.addAll(Arrays.asList(new Object[] { delegate + .createElement(list) })); + } + }, "List.addAll(Collection", list); + } + + public void testAddAll_ListDiffEntry() throws Exception { + final Object element = delegate.createElement(list); + + assertAddDiffEntry(new Runnable() { + public void run() { + list.addAll(Arrays.asList(new Object[] { element })); + } + }, "List.addAll(Collection)", list, element, 0); + } + + public void testAddAllAtIndex_ChangeEvent() throws Exception { + assertChangeEventFired(new Runnable() { + public void run() { + list.addAll(0, Arrays.asList(new Object[] { delegate + .createElement(list) })); + } + }, "List.addAll(int, Collection)", list); + } + + public void testAddAllAtIndex_ListChangeEvent() throws Exception { + assertListChangeEventFired(new Runnable() { + public void run() { + list.addAll(0, Arrays.asList(new Object[] { delegate + .createElement(list) })); + } + }, "List.addAll(int, Collection)", list); + } + + public void testAddAllAtIndex_ChangeEventFiredAfterElementIsAdded() + throws Exception { + final Object element = delegate.createElement(list); + + assertContainsDuringChangeEvent(new Runnable() { + public void run() { + list.addAll(0, Arrays.asList(new Object[] { element })); + } + }, "List.addAll(int, Collection)", list, element); + } + + public void testAddAllAtIndex_ListDiffEntry() throws Exception { + list.add(delegate.createElement(list)); + final Object element = delegate.createElement(list); + + assertAddDiffEntry(new Runnable() { + public void run() { + list.addAll(1, Arrays.asList(new Object[] { element })); + } + }, "List.addAll(int, Collection)", list, element, 1); + } + + public void testSet_ChangeEvent() throws Exception { + list.add(delegate.createElement(list)); + + assertChangeEventFired(new Runnable() { + public void run() { + list.set(0, delegate.createElement(list)); + } + }, "List.set(int, Object)", list); + } + + public void testSet_ListChangeEvent() throws Exception { + list.add(delegate.createElement(list)); + + assertListChangeEventFired(new Runnable() { + public void run() { + list.set(0, delegate.createElement(list)); + } + }, "List.set(int, Object)", list); + } + + public void testSet_ChangeEventFiredAfterElementIsSet() throws Exception { + Object element1 = delegate.createElement(list); + list.add(element1); + final Object element2 = delegate.createElement(list); + + assertContainsDuringChangeEvent(new Runnable() { + public void run() { + list.set(0, element2); + } + }, "List.set(int, Object)", list, element2); + } + + public void testSet_ListDiffEntry() throws Exception { + list.add(delegate.createElement(list)); + Object oldElement = delegate.createElement(list); + list.add(oldElement); + + ListChangeEventTracker listener = ListChangeEventTracker.observe(list); + + Object newElement = delegate.createElement(list); + list.set(1, newElement); + + ListDiffEntry[] entries = listener.event.diff.getDifferences(); + assertEquals( + "List.set(int, Object) should result in 2 list diff entries.", + 2, entries.length); + + ListDiffEntry add = null; + ListDiffEntry remove = null; + + if (entries[0].isAddition() && !entries[1].isAddition()) { + add = entries[0]; + remove = entries[1]; + } else if (!entries[0].isAddition() && entries[1].isAddition()) { + add = entries[1]; + remove = entries[0]; + } else { + fail("List.set(int, Object) should result in an add and a remove entry."); + } + + assertEquals( + "List.set(int, Object) removed element should be the old element.", + oldElement, remove.getElement()); + assertEquals( + "List.set(int, Object) removed index should be the index the new element was set at.", + 1, remove.getPosition()); + + assertEquals( + "List.set(int, Object) added element should be the set element.", + newElement, add.getElement()); + assertEquals( + "List.set(int, Object) add index should be the index the new element was set at.", + 1, add.getPosition()); + } + + public void testRemove_ListChangeEvent() throws Exception { + final Object element = delegate.createElement(list); + list.add(element); + + assertListChangeEventFired(new Runnable() { + public void run() { + list.remove(element); + } + }, "List.remove(Object)", list); + } + + public void testRemove_ListDiffEntry() throws Exception { + list.add(delegate.createElement(list)); + final Object element = delegate.createElement(list); + list.add(element); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + list.remove(element); + } + }, "List.remove(Object)", list, element, 1); + } + + public void testRemoveAtIndex_ChangeEvent() throws Exception { + list.add(delegate.createElement(list)); + + assertChangeEventFired(new Runnable() { + public void run() { + list.remove(0); + } + }, "List.remove(int)", list); + } + + public void testRemoveAtIndex_ListChangeEvent() throws Exception { + list.add(delegate.createElement(list)); + + assertListChangeEventFired(new Runnable() { + public void run() { + list.remove(0); + } + }, "List.remove(int)", list); + } + + public void testRemoveAtIndex_ChangeEventFiredAfterElementIsRemoved() + throws Exception { + final Object element = delegate.createElement(list); + list.add(element); + + assertDoesNotContainDuringChangeEvent(new Runnable() { + public void run() { + list.remove(0); + } + }, "List.remove(int)", list, element); + } + + public void testRemoveAtIndex_ListDiffEntry() throws Exception { + list.add(delegate.createElement(list)); + Object element = delegate.createElement(list); + list.add(element); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + list.remove(1); + } + }, "List.remove(int)", list, element, 1); + } + + public void testRemoveAll_ListChangeEvent() throws Exception { + final Object element = delegate.createElement(list); + + assertListChangeEventFired(new Runnable() { + public void run() { + list.removeAll(Arrays.asList(new Object[] { element })); + } + }, "List.removeAll(Collection)", list); + } + + public void testRemoveAll_ListDiffEntry() throws Exception { + final Object element = delegate.createElement(list); + list.add(element); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + list.removeAll(Arrays.asList(new Object[] { element })); + } + }, "List.removeAll(Collection)", list, element, 0); + } + + public void testRetainAll_ListChangeEvent() throws Exception { + final Object element1 = delegate.createElement(list); + list.add(element1); + list.add(delegate.createElement(list)); + + assertListChangeEventFired(new Runnable() { + public void run() { + list.retainAll(Arrays.asList(new Object[] { element1 })); + } + }, "List.retainAll(Collection", list); + } + + public void testRetainAll_ListDiffEntry() throws Exception { + final Object element1 = delegate.createElement(list); + list.add(element1); + Object element2 = delegate.createElement(list); + list.add(delegate.createElement(list)); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + list.retainAll(Arrays.asList(new Object[] { element1 })); + } + }, "List.retainAll(Collection)", list, element2, 1); + } + + public void testClear_ListChangeEvent() throws Exception { + list.add(delegate.createElement(list)); + + assertListChangeEventFired(new Runnable() { + public void run() { + list.clear(); + } + }, "List.clear()", list); + } + + public void testClear_ListDiffEntry() throws Exception { + Object element = delegate.createElement(list); + list.add(element); + + assertRemoveDiffEntry(new Runnable() { + public void run() { + list.clear(); + } + }, "List.clear()", list, element, 0); + } + + /** + * Asserts standard behaviors of firing list change events. + *list
.
+ * + * This class is experimental and can change at any time. It is recommended to + * not subclass or assume the test names will not change. The only API that is + * guaranteed to not change are the constructors. The tests will remain public + * and not final in order to allow for consumers to turn off a test if needed by + * subclassing. + *
+ * + * @since 3.2 + */ +public class SWTMutableObservableValueContractTest extends + MutableObservableValueContractTest { + private IObservableValueContractDelegate delegate; + + public SWTMutableObservableValueContractTest( + IObservableValueContractDelegate delegate) { + this(null, delegate); + } + + /** + * @param testName + * @param delegate + */ + public SWTMutableObservableValueContractTest(String testName, + IObservableValueContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + /** + * Creates a new observable passing the realm for the current display. + * @return observable + */ + protected IObservable doCreateObservable() { + Display display = Display.getCurrent(); + if (display == null) { + display = new Display(); + } + DelegatingRealm delegateRealm = new DelegatingRealm(SWTObservables + .getRealm(display)); + delegateRealm.setCurrent(true); + + return delegate.createObservable(delegateRealm); + } +} Index: META-INF/MANIFEST.MF =================================================================== RCS file: META-INF/MANIFEST.MF diff -N META-INF/MANIFEST.MF --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ META-INF/MANIFEST.MF 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,14 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-SymbolicName: org.eclipse.jface.tests.databinding.conformance +Bundle-Version: 1.0.0 +Require-Bundle: org.junit, + org.eclipse.core.databinding, + org.eclipse.jface.databinding, + org.eclipse.swt, + org.eclipse.core.runtime +Bundle-Vendor: %providerName +Bundle-RequiredExecutionEnvironment: J2SE-1.4 +Export-Package: org.eclipse.jface.databinding.conformance, + org.eclipse.jface.databinding.conformance.util Index: src/org/eclipse/jface/databinding/conformance/util/SetChangeEventTracker.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/util/SetChangeEventTracker.java diff -N src/org/eclipse/jface/databinding/conformance/util/SetChangeEventTracker.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/util/SetChangeEventTracker.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,47 @@ +package org.eclipse.jface.databinding.conformance.util; + +import java.util.List; + +import org.eclipse.core.databinding.observable.set.IObservableSet; +import org.eclipse.core.databinding.observable.set.ISetChangeListener; +import org.eclipse.core.databinding.observable.set.SetChangeEvent; + +public class SetChangeEventTracker implements ISetChangeListener { + public int count; + + public SetChangeEvent event; + + /** + * Queue that the listener will add itself too when it is notified of an + * event. Used to determine order of notifications of listeners. + */ + public final List listenerQueue; + + public SetChangeEventTracker() { + this(null); + } + + public SetChangeEventTracker(List notificationQueue) { + this.listenerQueue = notificationQueue; + } + + public void handleSetChange(SetChangeEvent event) { + count++; + this.event = event; + if (listenerQueue != null) { + listenerQueue.add(this); + } + } + + /** + * Convenience method to register a new listener. + * + * @param observable + * @return tracker + */ + public static SetChangeEventTracker observe(IObservableSet observable) { + SetChangeEventTracker tracker = new SetChangeEventTracker(); + observable.addSetChangeListener(tracker); + return tracker; + } +} Index: src/org/eclipse/jface/databinding/conformance/delegate/IObservableContractDelegate.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/delegate/IObservableContractDelegate.java diff -N src/org/eclipse/jface/databinding/conformance/delegate/IObservableContractDelegate.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/delegate/IObservableContractDelegate.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2007 Brad Reynolds 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: + * Brad Reynolds - initial API and implementation + ******************************************************************************/ + +package org.eclipse.jface.databinding.conformance.delegate; + +import org.eclipse.core.databinding.observable.IObservable; +import org.eclipse.core.databinding.observable.Realm; + +/** + * Delegate interface for observables. + * + *+ * This interface is not intended to be implemented by clients. Clients should + * instead subclass one of the classes that implement this interface. Note that + * direct implementers of this interface outside of the framework will be broken + * in future releases when methods are added to this interface. + *
+ * + * @since 1.1 + */ +public interface IObservableContractDelegate { + /** + * Notifies the delegate of the start of a test. + */ + public void setUp(); + + /** + * Notifies the delegate of the end of a test. + */ + public void tearDown(); + + /** + * Invokes an operation to set the stale state of the provided + *observable
.
+ *
+ * @param observable
+ * @param stale
+ */
+ public void setStale(IObservable observable, boolean stale);
+
+ /**
+ * Creates a new observable.
+ *
+ * @param realm realm of the observable
+ * @return observable
+ */
+ public IObservable createObservable(Realm realm);
+
+ /**
+ * Invokes a change operation on the observable resulting in a change event
+ * being fired from the observable.
+ *
+ * @param observable
+ */
+ public void change(IObservable observable);
+}
Index: src/org/eclipse/jface/databinding/conformance/MutableObservableCollectionContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/MutableObservableCollectionContractTest.java
diff -N src/org/eclipse/jface/databinding/conformance/MutableObservableCollectionContractTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/MutableObservableCollectionContractTest.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,360 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.jface.databinding.conformance;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import org.eclipse.core.databinding.observable.ChangeEvent;
+import org.eclipse.core.databinding.observable.IChangeListener;
+import org.eclipse.core.databinding.observable.IObservableCollection;
+import org.eclipse.jface.databinding.conformance.delegate.IObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
+
+/**
+ * Mutability tests for IObservableCollection.
+ * + * This class is experimental and can change at any time. It is recommended to + * not subclass or assume the test names will not change. The only API that is + * guaranteed to not change are the constructors. The tests will remain public + * and not final in order to allow for consumers to turn off a test if needed by + * subclassing. + *
+ * + * @since 3.2 + */ +public class MutableObservableCollectionContractTest extends ObservableDelegateTest { + private IObservableCollectionContractDelegate delegate; + + private IObservableCollection collection; + + public MutableObservableCollectionContractTest( + IObservableCollectionContractDelegate delegate) { + super(delegate); + this.delegate = delegate; + } + + public MutableObservableCollectionContractTest(String name, + IObservableCollectionContractDelegate delegate) { + super(name, delegate); + this.delegate = delegate; + } + + protected void setUp() throws Exception { + super.setUp(); + + collection = (IObservableCollection) super.getObservable(); + } + + public void testAdd_ChangeEvent() throws Exception { + assertChangeEventFired(new Runnable() { + public void run() { + collection.add(delegate.createElement(collection)); + } + }, "Collection.add(Object)", collection); + } + + public void testAdd_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.add(delegate.createElement(collection)); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testAdd_ChangeEventFiredAfterElementIsAdded() throws Exception { + final Object element = delegate.createElement(collection); + + assertContainsDuringChangeEvent(new Runnable() { + public void run() { + collection.add(element); + } + }, "Collection.add(Object)", collection, element); + } + + public void testAddAll_ChangeEvent() throws Exception { + assertChangeEventFired(new Runnable() { + public void run() { + collection.addAll(Arrays.asList(new Object[] { delegate + .createElement(collection) })); + } + }, "Collection.addAll(Collection)", collection); + } + + public void testAddAll_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.addAll(Arrays.asList(new Object[] { delegate + .createElement(collection) })); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testAddAll_ChangeEventFiredAfterElementsAreAdded() + throws Exception { + final Object element = delegate.createElement(collection); + + assertContainsDuringChangeEvent(new Runnable() { + public void run() { + collection.addAll(Arrays.asList(new Object[] { element })); + } + }, "Collection.addAll(Collection)", collection, element); + } + + public void testRemove_ChangeEvent() throws Exception { + final Object element = delegate.createElement(collection); + collection.add(element); + + assertChangeEventFired(new Runnable() { + public void run() { + collection.remove(element); + } + }, "Collection.remove(Object)", collection); + } + + public void testRemove_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.remove(delegate.createElement(collection)); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testRemove_ChangeEventFiredAfterElementIsRemoved() + throws Exception { + final Object element = delegate.createElement(collection); + collection.add(element); + + assertDoesNotContainDuringChangeEvent(new Runnable() { + public void run() { + collection.remove(element); + } + }, "Collection.remove(Object)", collection, element); + } + + public void testRemoveAll_ChangeEvent() throws Exception { + final Object element = delegate.createElement(collection); + collection.add(element); + + assertChangeEventFired(new Runnable() { + public void run() { + collection.removeAll(Arrays.asList(new Object[] { element })); + } + }, "Collection.removeAll(Collection)", collection); + } + + public void testRemoveAll_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.removeAll(Arrays.asList(new Object[] { delegate.createElement(collection) })); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testRemoveAll_ChangeEventFiredAfterElementsAreRemoved() + throws Exception { + final Object element = delegate.createElement(collection); + collection.add(element); + + assertDoesNotContainDuringChangeEvent(new Runnable() { + public void run() { + collection.removeAll(Arrays.asList(new Object[] { element })); + } + }, "Collection.removeAll(Collection)", collection, element); + } + + public void testRetainAll_ChangeEvent() throws Exception { + final Object element1 = delegate.createElement(collection); + collection.add(element1); + Object element2 = delegate.createElement(collection); + collection.add(element2); + + assertChangeEventFired(new Runnable() { + public void run() { + collection.retainAll(Arrays.asList(new Object[] { element1 })); + } + + }, "Collection.retainAll(Collection)", collection); + } + + public void testRetainAll_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.retainAll(Collections.EMPTY_LIST); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testRetainAll_ChangeEventFiredAfterElementsAreRetained() + throws Exception { + Object element1 = delegate.createElement(collection); + collection.add(element1); + Object element2 = delegate.createElement(collection); + collection.add(element2); + + // precondition + assertTrue(collection.contains(element1)); + assertTrue(collection.contains(element2)); + + ContainsListener listener1 = new ContainsListener(collection, element1) + .init(); + ContainsListener listener2 = new ContainsListener(collection, element2) + .init(); + + // set contains the the opposite of the expected outcome to ensure they + // get set + listener1.contains = false; + listener2.contains = true; + + collection.retainAll(Arrays.asList(new Object[] { element1 })); + assertTrue( + formatFail("When Collection.retainAll(...) fires the change event the element should have been retained in the Collection."), + listener1.contains); + assertFalse( + formatFail("When Collection.retainAll(...) fires the change event the element should have been removed from the Collection."), + listener2.contains); + } + + public void testClear_ChangeEvent() throws Exception { + collection.add(delegate.createElement(collection)); + + assertChangeEventFired(new Runnable() { + public void run() { + collection.clear(); + } + }, "List.clear()", collection); + } + + public void testClear_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.clear(); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testClear_ChangeEventFiredAfterElementIsRemoved() + throws Exception { + Object element = delegate.createElement(collection); + collection.add(element); + + assertDoesNotContainDuringChangeEvent(new Runnable() { + public void run() { + collection.clear(); + } + }, "List.clear()", collection, element); + } + + /** + * Asserts that a ChangeEvent is fired once when the provided + *runnable
is invoked and the source is the provided
+ * collection
.
+ *
+ * @param runnable
+ * @param methodName
+ * @param collection
+ */
+ /* package */void assertChangeEventFired(Runnable runnable,
+ String methodName, IObservableCollection collection) {
+
+ ChangeEventTracker listener = ChangeEventTracker.observe(collection);
+ runnable.run();
+
+ assertEquals(formatFail(methodName + " should fire one ChangeEvent."), 1,
+ listener.count);
+ assertEquals(
+ formatFail(methodName
+ + "'s change event observable should be the created Collection."),
+ collection, listener.event.getObservable());
+ }
+
+ /**
+ * Asserts that when the change event is fired for the action contained in
+ * the runnable
the change will have been applied to the
+ * collection
.
+ *
+ * @param runnable
+ * @param methodName
+ * @param collection
+ * @param elementNotContained
+ */
+ /* package */void assertDoesNotContainDuringChangeEvent(Runnable runnable,
+ String methodName, IObservableCollection collection,
+ Object elementNotContained) {
+
+ // precondition
+ assertTrue(collection.contains(elementNotContained));
+
+ ContainsListener listener = new ContainsListener(collection,
+ elementNotContained).init();
+ listener.contains = true;
+ collection.remove(elementNotContained);
+ assertFalse(
+ formatFail(new StringBuffer("When ")
+ .append(methodName)
+ .append(
+ " fires a change event the element should have been removed from the Collection.")
+ .toString()), listener.contains);
+ }
+
+ /**
+ * Asserts that when the change event is fired for the action contained in
+ * the runnable
the change will have been applied to the
+ * collection
.
+ *
+ * @param runnable
+ * @param methodName
+ * @param collection
+ * @param elementContained
+ */
+ /* package */void assertContainsDuringChangeEvent(Runnable runnable,
+ String methodName, IObservableCollection collection,
+ Object elementContained) {
+ ContainsListener listener = new ContainsListener(collection,
+ elementContained).init();
+
+ // precondition
+ assertFalse(collection.contains(elementContained));
+ runnable.run();
+
+ assertTrue(
+ formatFail(new StringBuffer("When ")
+ .append(methodName)
+ .append(
+ " fires a change event the element should have been added to the Collection.")
+ .toString()), listener.contains);
+ }
+
+ /* package */static class ContainsListener implements IChangeListener {
+ boolean contains;
+
+ final private Object element;
+
+ final private IObservableCollection collection;
+
+ ContainsListener(IObservableCollection collection, Object element) {
+ this.element = element;
+ this.collection = collection;
+ }
+
+ ContainsListener init() {
+ collection.addChangeListener(this);
+ return this;
+ }
+
+ public void handleChange(ChangeEvent event) {
+ contains = collection.contains(element);
+ }
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/ObservableListContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/ObservableListContractTest.java
diff -N src/org/eclipse/jface/databinding/conformance/ObservableListContractTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/ObservableListContractTest.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.jface.databinding.conformance;
+
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.jface.databinding.conformance.delegate.IObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+
+/**
+ * Tests for IObservableList that don't require mutating the collection.
+ * + * This class is experimental and can change at any time. It is recommended to + * not subclass or assume the test names will not change. The only API that is + * guaranteed to not change are the constructors. The tests will remain public + * and not final in order to allow for consumers to turn off a test if needed by + * subclassing. + *
+ * + * @since 3.2 + */ +public class ObservableListContractTest extends + ObservableCollectionContractTest { + private IObservableList list; + + private IObservableCollectionContractDelegate delegate; + + /** + * @param delegate + */ + public ObservableListContractTest( + IObservableCollectionContractDelegate delegate) { + super(delegate); + this.delegate = delegate; + } + + public ObservableListContractTest(String testName, + IObservableCollectionContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + protected void setUp() throws Exception { + super.setUp(); + + list = (IObservableList) getObservable(); + } + + public void testListIterator_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + list.listIterator(); + } + }, "List.listIterator()", list); + } + + public void testGet_GetterCalled() throws Exception { + list = (IObservableList) delegate.createObservableCollection(new CurrentRealm(true), 1); + assertGetterCalled(new Runnable() { + public void run() { + list.get(0); + } + }, "List.get(int)", list); + } + + public void testIndexOf_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + list.indexOf(delegate.createElement(list)); + } + }, "List.indexOf(int)", list); + } + + public void testLastIndexOf_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + list.lastIndexOf(delegate.createElement(list)); + } + }, "List.lastIndexOf(Object)", list); + } + + public void testListIteratorAtIndex_GetterCalled() throws Exception { + // Create a new list instead of adding an item because the list might + // not be mutable + list = (IObservableList) delegate.createObservableCollection(new CurrentRealm(true), 1); + assertGetterCalled(new Runnable() { + public void run() { + list.listIterator(0); + } + }, "List.listIterator(int)", list); + } + + public void testSubList_GetterCalled() throws Exception { + list = (IObservableList) delegate.createObservableCollection(new CurrentRealm(true), 1); + assertGetterCalled(new Runnable() { + public void run() { + list.subList(0, 1); + } + }, "List.subList(int, int)", list); + } +} Index: src/org/eclipse/jface/databinding/conformance/ObservableStaleContractTest.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/ObservableStaleContractTest.java diff -N src/org/eclipse/jface/databinding/conformance/ObservableStaleContractTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/ObservableStaleContractTest.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,149 @@ +/******************************************************************************* + * Copyright (c) 2007 Brad Reynolds 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: + * Brad Reynolds - initial API and implementation + ******************************************************************************/ + +package org.eclipse.jface.databinding.conformance; + +import org.eclipse.core.databinding.observable.IObservable; +import org.eclipse.core.databinding.observable.IStaleListener; +import org.eclipse.core.databinding.observable.StaleEvent; +import org.eclipse.jface.databinding.conformance.delegate.IObservableContractDelegate; + +/** + * @since 3.3 + */ +public class ObservableStaleContractTest extends ObservableDelegateTest { + private IObservableContractDelegate delegate; + private IObservable observable; + + public ObservableStaleContractTest(IObservableContractDelegate delegate) { + this(null, delegate); + } + + public ObservableStaleContractTest(String testName, IObservableContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + protected void setUp() throws Exception { + super.setUp(); + + observable = getObservable(); + } + + public void testIsStale_TrueWhenStale() throws Exception { + delegate.setStale(observable, true); + assertTrue(formatFail("When stale isStale() should return true."), observable.isStale()); + } + + public void testIsStale_FalseWhenNotStale() throws Exception { + delegate.setStale(observable, false); + assertFalse(formatFail("When not stale isStale() should return false."), observable.isStale()); + } + + public void testBecomingStaleFiresStaleEvent() throws Exception { + StaleListener listener = new StaleListener(); + + // precondition + ensureStale(observable, false); + + observable.addStaleListener(listener); + delegate.setStale(observable, true); + + assertEquals(formatFail("When becoming stale listeners should be notified."), 1, listener.count); + } + + public void testStaleEventObservable() throws Exception { + StaleListener listener = new StaleListener(); + + // precondition + ensureStale(observable, false); + + observable.addStaleListener(listener); + delegate.setStale(observable, true); + + StaleEvent event = listener.event; + assertNotNull(formatFail("stale event was null"), event); + assertEquals(formatFail("When notifying listeners of becoming stale the observable should be the source of the event."), observable, + event.getObservable()); + } + + public void testRemoveStaleListener_RemovesListener() throws Exception { + StaleListener listener = new StaleListener(); + + observable.addStaleListener(listener); + ensureStale(observable, false); + delegate.setStale(observable, true); + + // precondition check + assertEquals(formatFail("set stale did not notify listeners"), 1, listener.count); + + observable.removeStaleListener(listener); + ensureStale(observable, false); + delegate.setStale(observable, true); + + assertEquals(formatFail("Once removed stale listeners should not be notified of becoming stale."), 1, + listener.count); + } + + public void testStaleListenersAreNotNotifiedWhenObservableIsNoLongerStale() + throws Exception { + ensureStale(observable, true); + + StaleListener listener = new StaleListener(); + observable.addStaleListener(listener); + delegate.setStale(observable, false); + + assertEquals(formatFail("Stale listeners should not be notified when the stale state changes from true to false."), 0, + listener.count); + } + + public void testObservableRealmIsCurrentOnStale() throws Exception { + ensureStale(observable, false); + + StaleListener listener = new StaleListener(); + observable.addStaleListener(listener); + delegate.setStale(observable, true); + + assertTrue(formatFail("When notifying listeners of becoming stale the observable's realm should be the current realm."), + listener.isCurrentRealm); + } + + /** + * Ensures that stale is set to the provided state. Will throw an + * AssertionFailedError if setting of the state is unsuccessful. + * + * @param observable + * @param stale + */ + private void ensureStale(IObservable observable, boolean stale) { + if (observable.isStale() != stale) { + delegate.setStale(observable, stale); + } + + assertEquals(stale, observable.isStale()); + } + + /* package */static class StaleListener implements IStaleListener { + int count; + + StaleEvent event; + + boolean isCurrentRealm; + + public void handleStale(StaleEvent staleEvent) { + count++; + this.event = staleEvent; + this.isCurrentRealm = staleEvent.getObservable().getRealm() + .isCurrent(); + } + } + +} Index: src/org/eclipse/jface/databinding/conformance/util/ValueChangeEventTracker.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/util/ValueChangeEventTracker.java diff -N src/org/eclipse/jface/databinding/conformance/util/ValueChangeEventTracker.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/util/ValueChangeEventTracker.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,47 @@ +package org.eclipse.jface.databinding.conformance.util; + +import java.util.List; + +import org.eclipse.core.databinding.observable.value.IObservableValue; +import org.eclipse.core.databinding.observable.value.IValueChangeListener; +import org.eclipse.core.databinding.observable.value.ValueChangeEvent; + +/** + * Listener for tracking the firing of ValueChangeEvents. + */ +public class ValueChangeEventTracker implements IValueChangeListener { + public int count; + + public ValueChangeEvent event; + + public final List queue; + + public ValueChangeEventTracker() { + this(null); + } + + public ValueChangeEventTracker(List queue) { + this.queue = queue; + } + + public void handleValueChange(ValueChangeEvent event) { + count++; + this.event = event; + + if (queue != null) { + queue.add(this); + } + } + + /** + * Convenience method to register a new listener. + * + * @param observable + * @return tracker + */ + public static ValueChangeEventTracker observe(IObservableValue observable) { + ValueChangeEventTracker tracker = new ValueChangeEventTracker(); + observable.addValueChangeListener(tracker); + return tracker; + } +} Index: src/org/eclipse/jface/databinding/conformance/util/CurrentRealm.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/util/CurrentRealm.java diff -N src/org/eclipse/jface/databinding/conformance/util/CurrentRealm.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/util/CurrentRealm.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,42 @@ +package org.eclipse.jface.databinding.conformance.util; + +import org.eclipse.core.databinding.observable.Realm; + +/** + * Allows for the toggling of the current status of the realm. The + * asyncExec(...) implementations do nothing. + * + * @since 3.2 + */ +public class CurrentRealm extends Realm { + private boolean current; + + public CurrentRealm() { + this(false); + } + + public CurrentRealm(boolean current) { + this.current = current; + } + + public boolean isCurrent() { + return current; + } + + public void setCurrent(boolean current) { + this.current = current; + } + + protected void syncExec(Runnable runnable) { + super.syncExec(runnable); + } + + public void asyncExec(Runnable runnable) { + throw new UnsupportedOperationException( + "CurrentRealm does not support asyncExec(Runnable)."); //$NON-NLS-1$ + } + + protected static Realm setDefault(Realm realm) { + return Realm.setDefault(realm); + } +} Index: src/org/eclipse/jface/databinding/conformance/ObservableDelegateTest.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/ObservableDelegateTest.java diff -N src/org/eclipse/jface/databinding/conformance/ObservableDelegateTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/ObservableDelegateTest.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,107 @@ +/******************************************************************************* + * Copyright (c) 2007 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.jface.databinding.conformance; + +import junit.framework.TestCase; + +import org.eclipse.core.databinding.observable.IObservable; +import org.eclipse.core.databinding.observable.Realm; +import org.eclipse.jface.databinding.conformance.delegate.IObservableContractDelegate; +import org.eclipse.jface.databinding.conformance.util.CurrentRealm; +import org.eclipse.jface.databinding.conformance.util.RealmTester; + +/** + * TestCase that provides the standard behavior expected for delegating test cases. + * + * @since 3.2 + */ +public class ObservableDelegateTest extends TestCase { + private IObservableContractDelegate delegate; + + private Realm previousRealm; + + private IObservable observable; + private String debugInfo; + + public ObservableDelegateTest(IObservableContractDelegate delegate) { + this(null, delegate); + } + + public ObservableDelegateTest(String testName, IObservableContractDelegate delegate) { + super(testName); + this.delegate = delegate; + } + + protected void setUp() throws Exception { + super.setUp(); + previousRealm = Realm.getDefault(); + + delegate.setUp(); + observable = doCreateObservable(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + + delegate.tearDown(); + observable.dispose(); + observable = null; + + RealmTester.setDefault(previousRealm); + + observable = null; + previousRealm = null; + } + + /** + * Creates a new observable with a default realm. Invoked from + * {@link #setUp()}. Override to customize the creation of observables + * (e.g. specifying a different Realm). + * + * @return observable + */ + protected IObservable doCreateObservable() { + return delegate.createObservable(new CurrentRealm(true)); + } + + /** + * Returns the created observable. The observable is created in + * {@link #setUp()}. If invoked before {@link #setUp()} will be + *null
.
+ *
+ * @return observable
+ */
+ protected IObservable getObservable() {
+ return observable;
+ }
+
+ /**
+ * Returns the delegate in use.
+ *
+ * @return delegate
+ */
+ protected IObservableContractDelegate getObservableContractDelegate() {
+ return delegate;
+ }
+
+ protected String formatFail(String message) {
+ return message + getDebugString();
+ }
+
+ private String getDebugString() {
+ if (debugInfo == null) {
+ debugInfo = "(Test: " + this.getClass().getName() + ", Delegate: " + delegate.getClass().getName() + ")";
+ }
+
+ return debugInfo;
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/ObservableCollectionContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/ObservableCollectionContractTest.java
diff -N src/org/eclipse/jface/databinding/conformance/ObservableCollectionContractTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/ObservableCollectionContractTest.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.jface.databinding.conformance;
+
+import java.util.Arrays;
+
+import org.eclipse.core.databinding.observable.IObservableCollection;
+import org.eclipse.jface.databinding.conformance.delegate.IObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
+
+/**
+ * Tests for IObservableCollection that don't mutate the collection.
+ * + * This class is experimental and can change at any time. It is recommended to + * not subclass or assume the test names will not change. The only API that is + * guaranteed to not change are the constructors. The tests will remain public + * and not final in order to allow for consumers to turn off a test if needed by + * subclassing. + *
+ * + * @since 3.2 + */ +public class ObservableCollectionContractTest extends ObservableContractTest { + private IObservableCollectionContractDelegate delegate; + + private IObservableCollection collection; + + public ObservableCollectionContractTest( + IObservableCollectionContractDelegate delegate) { + super(delegate); + this.delegate = delegate; + } + + public ObservableCollectionContractTest(String testName, + IObservableCollectionContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + protected void setUp() throws Exception { + super.setUp(); + + collection = (IObservableCollection) getObservable(); + } + + public void testIterator_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.iterator(); + } + }, "Collection.iterator()", collection); + } + + public void testIterator_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.iterator(); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testSize_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.size(); + } + }, "Collection.size()", collection); + } + + public void testSize_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.size(); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testIsEmpty_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.isEmpty(); + } + }, "Collection.isEmpty()", collection); + } + + public void testIsEmpty_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.isEmpty(); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testContains_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.contains(delegate.createElement(collection)); + } + }, "Collection.contains(...)", collection); + } + + public void testContains_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.contains(delegate.createElement(collection)); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testContainsAll_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.containsAll(Arrays.asList(new Object[] { delegate + .createElement(collection) })); + } + }, "Collection.containsAll(Collection)", collection); + } + + public void testContainsAll_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.containsAll(Arrays.asList(new Object[] { delegate + .createElement(collection) })); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testToArray_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.toArray(); + } + }, "Collection.toArray()", collection); + } + + public void testToArray_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.toArray(); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testToArrayWithObjectArray_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.toArray(new Object[collection.size()]); + } + }, "Collection.toArray(Object[])", collection); + } + + public void testToArrayWithObjectArray_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.toArray(new Object[collection.size()]); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testEquals_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.equals(collection); + } + }, "Collection.equals(Object)", collection); + } + + public void testEquals_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.equals(collection); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testHashCode_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + collection.hashCode(); + } + }, "Collection.hashCode()", collection); + } + + public void testHashCode_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + collection.hashCode(); + } + }, (CurrentRealm) collection.getRealm()); + } + + public void testGetElementType_ReturnsType() throws Exception { + assertEquals( + "Element type of the collection should be returned from IObservableCollection.getElementType()", + delegate.getElementType(collection), collection + .getElementType()); + } +} Index: src/org/eclipse/jface/databinding/conformance/swt/SWTObservableValueContractTest.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/swt/SWTObservableValueContractTest.java diff -N src/org/eclipse/jface/databinding/conformance/swt/SWTObservableValueContractTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/swt/SWTObservableValueContractTest.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2007 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.jface.databinding.conformance.swt; + +import org.eclipse.core.databinding.observable.IObservable; +import org.eclipse.jface.databinding.conformance.ObservableValueContractTest; +import org.eclipse.jface.databinding.conformance.delegate.IObservableValueContractDelegate; +import org.eclipse.jface.databinding.conformance.util.DelegatingRealm; +import org.eclipse.jface.databinding.swt.SWTObservables; +import org.eclipse.swt.widgets.Display; + +/** + * Tests for IObservableValue that don't mutate the value. + *+ * This class is experimental and can change at any time. It is recommended to + * not subclass or assume the test names will not change. The only API that is + * guaranteed to not change are the constructors. The tests will remain public + * and not final in order to allow for consumers to turn off a test if needed by + * subclassing. + *
+ * + * @since 3.2 + */ +public class SWTObservableValueContractTest extends ObservableValueContractTest { + private IObservableValueContractDelegate delegate; + + /** + * @param delegate + */ + public SWTObservableValueContractTest( + IObservableValueContractDelegate delegate) { + this(null, delegate); + } + + public SWTObservableValueContractTest(String testName, + IObservableValueContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + /** + * Creates a new observable passing the realm for the current display. + * @return observable + */ + protected IObservable doCreateObservable() { + Display display = Display.getCurrent(); + if (display == null) { + display = new Display(); + } + DelegatingRealm delegateRealm = new DelegatingRealm(SWTObservables + .getRealm(display)); + delegateRealm.setCurrent(true); + + return delegate.createObservable(delegateRealm); + } +} Index: src/org/eclipse/jface/databinding/conformance/ObservableValueContractTest.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/ObservableValueContractTest.java diff -N src/org/eclipse/jface/databinding/conformance/ObservableValueContractTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/ObservableValueContractTest.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,170 @@ +/******************************************************************************* + * Copyright (c) 2007 Brad Reynolds 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: + * Brad Reynolds - initial API and implementation + ******************************************************************************/ + +package org.eclipse.jface.databinding.conformance; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.databinding.observable.ChangeEvent; +import org.eclipse.core.databinding.observable.IChangeListener; +import org.eclipse.core.databinding.observable.value.IObservableValue; +import org.eclipse.core.databinding.observable.value.IValueChangeListener; +import org.eclipse.core.databinding.observable.value.ValueChangeEvent; +import org.eclipse.jface.databinding.conformance.delegate.IObservableValueContractDelegate; +import org.eclipse.jface.databinding.conformance.util.CurrentRealm; +import org.eclipse.jface.databinding.conformance.util.RealmTester; +import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker; + +/** + * @since 3.2 + */ +public class ObservableValueContractTest extends ObservableContractTest { + private IObservableValueContractDelegate delegate; + private IObservableValue observable; + + public ObservableValueContractTest(IObservableValueContractDelegate delegate) { + super(delegate); + this.delegate = delegate; + } + + /** + * @param testName + * @param delegate + */ + public ObservableValueContractTest(String testName, + IObservableValueContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.databinding.conformance.ObservableContractTest#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + observable = (IObservableValue) getObservable(); + } + + public void testChange_ValueChangeEvent() throws Exception { + ValueChangeEventTracker listener = ValueChangeEventTracker.observe(observable); + + delegate.change(observable); + assertEquals(formatFail("On change value change listeners should be notified."), 1, + listener.count); + } + + public void testGetValueType_ExpectedType() throws Exception { + assertEquals(formatFail("Type of the value should be returned from getType()."), + delegate.getValueType(observable), observable.getValueType()); + } + + public void testChange_OrderOfNotifications() throws Exception { + final List listeners = new ArrayList(); + IChangeListener changeListener = new IChangeListener() { + public void handleChange(ChangeEvent event) { + listeners.add(this); + } + }; + + IValueChangeListener valueChangeListener = new IValueChangeListener() { + public void handleValueChange(ValueChangeEvent event) { + listeners.add(this); + } + }; + + observable.addChangeListener(changeListener); + observable.addValueChangeListener(valueChangeListener); + + delegate.change(observable); + + assertTrue(formatFail("Change Listeners were not notified on change."), listeners.size() > 0); + + // not asserting the fact that both are notified as this is asserted in + // other tests + assertEquals( + formatFail("Change listeners should be notified before value change listeners."), + changeListener, listeners.get(0)); + assertEquals( + formatFail("Value change listeners should be notified after change listeners."), + valueChangeListener, listeners.get(1)); + } + + public void testChange_ValueChangeEventDiff() throws Exception { + ValueChangeEventTracker listener = ValueChangeEventTracker.observe(observable); + Object oldValue = observable.getValue(); + + delegate.change(observable); + + ValueChangeEvent event = listener.event; + + assertTrue(formatFail("Change Listeners were not notified on change."), listener.count > 0); + + assertEquals( + formatFail("When a value change event is fired the old value should be the previous value of the observable value."), + oldValue, event.diff.getOldValue()); + assertEquals( + formatFail("When a value change event is fired the new value should be the same as the current value of the observable value."), + observable.getValue(), event.diff.getNewValue()); + } + + public void testChange_ValueChangeEventFiredAfterValueIsSet() + throws Exception { + class ValueChangeListener implements IValueChangeListener { + Object value; + + public void handleValueChange(ValueChangeEvent event) { + this.value = event.getObservableValue().getValue(); + } + } + + ValueChangeListener listener = new ValueChangeListener(); + observable.addValueChangeListener(listener); + delegate.change(observable); + assertEquals( + formatFail("When a value change event is fired the new value should be applied before firing the change event."), + listener.value, observable.getValue()); + } + + public void testRemoveValueChangeListener_RemovesListener() throws Exception { + ValueChangeEventTracker listener = ValueChangeEventTracker.observe(observable); + delegate.change(observable); + + // precondition + assertEquals(formatFail("Value change listeners should be notified on change."), 1, + listener.count); + + observable.removeValueChangeListener(listener); + delegate.change(observable); + + assertEquals( + formatFail("Value change listeners should not be notified after they've been removed from the observable."), + 1, listener.count); + } + + public void testGetValue_GetterCalled() throws Exception { + assertGetterCalled(new Runnable() { + public void run() { + observable.getValue(); + } + }, formatFail("IObservableValue.getValue()"), observable); + } + + public void testGetValue_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + observable.getValue(); + } + }, (CurrentRealm) observable.getRealm()); + } +} Index: src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableValueContractDelegate.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableValueContractDelegate.java diff -N src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableValueContractDelegate.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableValueContractDelegate.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2007 Brad Reynolds 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: + * Brad Reynolds - initial API and implementation + ******************************************************************************/ + +package org.eclipse.jface.databinding.conformance.delegate; + +import org.eclipse.core.databinding.observable.IObservable; +import org.eclipse.core.databinding.observable.Realm; +import org.eclipse.core.databinding.observable.value.IObservableValue; + +/** + * Abstract implementation of {@link IObservableValueContractDelegate}. + * + * @since 1.1 + */ +public abstract class AbstractObservableValueContractDelegate extends + AbstractObservableContractDelegate implements + IObservableValueContractDelegate { + + /** + * Invokes {@link #createObservableValue(Realm)}. + * @param realm + * @return observable + */ + public final IObservable createObservable(Realm realm) { + return createObservableValue(realm); + } + + /** + * Default implementation returnsnull
.
+ * @param observable
+ * @return value type
+ */
+ public Object getValueType(IObservableValue observable) {
+ // no op
+ return null;
+ }
+
+ /**
+ * Default implementation returns null
.
+ * @param observable
+ * @return value
+ */
+ public Object createValue(IObservableValue observable) {
+ //no op
+ return null;
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/util/RealmTester.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/util/RealmTester.java
diff -N src/org/eclipse/jface/databinding/conformance/util/RealmTester.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/util/RealmTester.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Brad Reynolds 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:
+ * Brad Reynolds - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.jface.databinding.conformance.util;
+
+import junit.framework.Assert;
+
+import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.runtime.AssertionFailedException;
+
+/**
+ * Aids in the testing of Realms.
+ *
+ * @since 3.2
+ */
+public class RealmTester {
+
+ /**
+ * Sets the default realm without using Realm.runWithDefault() for testing
+ * purposes.
+ *
+ * @param realm
+ */
+ public static void setDefault(Realm realm) {
+ CurrentRealm.setDefault(realm);
+ }
+
+ /**
+ * Runs the provided runnable
when the realm is both current
+ * and not current. It checks for AssertionFailedExceptions and if an
+ * exception occurs or doesn't occur as expected the test fails. The realm
+ * of an observable created before the method was invoked must be of type
+ * {@link CurrentRealm}. The default realm during the runnable invocation
+ * is set to an instance of {@link CurrentRealm} when the runnable is
+ * invoked.
+ *
+ * @param runnable
+ */
+ public static void exerciseCurrent(Runnable runnable) {
+ CurrentRealm previousRealm = (CurrentRealm) Realm.getDefault();
+ CurrentRealm realm = new CurrentRealm();
+ setDefault(realm);
+
+ try {
+ realm.setCurrent(true);
+ if (previousRealm != null) {
+ previousRealm.setCurrent(true);
+ }
+
+ try {
+ runnable.run();
+ } catch (AssertionFailedException e) {
+ Assert
+ .fail("Correct realm, exception should not have been thrown");
+ }
+
+ realm.setCurrent(false);
+ if (previousRealm != null) {
+ previousRealm.setCurrent(false);
+ }
+
+ try {
+ runnable.run();
+ Assert
+ .fail("Incorrect realm, exception should have been thrown");
+ } catch (AssertionFailedException e) {
+ }
+ } finally {
+ setDefault(previousRealm);
+ }
+ }
+
+ /**
+ * Runs the provided runnable
when the realm is both current
+ * and not current. It checks for AssertionFailedExceptions and if an
+ * exception occurs or doesn't occur as expected the test fails.
+ *
+ * @param runnable
+ * @param realm
+ */
+ public static void exerciseCurrent(Runnable runnable, CurrentRealm realm) {
+ realm.setCurrent(true);
+
+ try {
+ runnable.run();
+ } catch (AssertionFailedException e) {
+ Assert.fail("Correct realm, exception should not have been thrown");
+ }
+
+ realm.setCurrent(false);
+
+ try {
+ runnable.run();
+ Assert.fail("Incorrect realm, exception should have been thrown");
+ } catch (AssertionFailedException e) {
+ }
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/util/ListChangeEventTracker.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/util/ListChangeEventTracker.java
diff -N src/org/eclipse/jface/databinding/conformance/util/ListChangeEventTracker.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/util/ListChangeEventTracker.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,50 @@
+package org.eclipse.jface.databinding.conformance.util;
+
+import java.util.List;
+
+import org.eclipse.core.databinding.observable.list.IListChangeListener;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.databinding.observable.list.ListChangeEvent;
+
+/**
+ * Listener for tracking the firing of ListChangeEvents.
+ */
+public class ListChangeEventTracker implements IListChangeListener {
+ public int count;
+
+ public ListChangeEvent event;
+
+ /**
+ * Queue that the listener will add itself too when it is notified of an
+ * event. Used to determine order of notifications of listeners.
+ */
+ public final List listenerQueue;
+
+ public ListChangeEventTracker() {
+ this(null);
+ }
+
+ public ListChangeEventTracker(List listenerQueue) {
+ this.listenerQueue = listenerQueue;
+ }
+
+ public void handleListChange(ListChangeEvent event) {
+ count++;
+ this.event = event;
+ if (listenerQueue != null) {
+ listenerQueue.add(this);
+ }
+ }
+
+ /**
+ * Convenience method to register a new listener.
+ *
+ * @param observable
+ * @return tracker
+ */
+ public static ListChangeEventTracker observe(IObservableList observable) {
+ ListChangeEventTracker tracker = new ListChangeEventTracker();
+ observable.addListChangeListener(tracker);
+ return tracker;
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/delegate/IObservableValueContractDelegate.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/delegate/IObservableValueContractDelegate.java
diff -N src/org/eclipse/jface/databinding/conformance/delegate/IObservableValueContractDelegate.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/delegate/IObservableValueContractDelegate.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Brad Reynolds 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:
+ * Brad Reynolds - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.jface.databinding.conformance.delegate;
+
+import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+
+/**
+ * Delegate interface for an observable value.
+ *
+ * + * This interface is not intended to be implemented by clients. Clients should + * instead subclass one of the classes that implement this interface. Note that + * direct implementers of this interface outside of the framework will be broken + * in future releases when methods are added to this interface. + *
+ * + * @since 1.1 + */ +public interface IObservableValueContractDelegate extends + IObservableContractDelegate { + + /** + * Creates a new observable value. + * + * @param realm + * realm of the observable + * @return observable value + */ + public IObservableValue createObservableValue(Realm realm); + + /** + * Returns the expected type of the observable. + * + * @param observable + * @return type + */ + public Object getValueType(IObservableValue observable); + + /** + * Returns a valid value that is not the current value of the observable. + * + * @param observable + * @return value + */ + public Object createValue(IObservableValue observable); +} Index: src/org/eclipse/jface/databinding/conformance/ObservableContractTest.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/ObservableContractTest.java diff -N src/org/eclipse/jface/databinding/conformance/ObservableContractTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/ObservableContractTest.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,175 @@ +/******************************************************************************* + * Copyright (c) 2007 Brad Reynolds 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: + * Brad Reynolds - initial API and implementation + ******************************************************************************/ + +package org.eclipse.jface.databinding.conformance; + +import org.eclipse.core.databinding.observable.ChangeEvent; +import org.eclipse.core.databinding.observable.IChangeListener; +import org.eclipse.core.databinding.observable.IObservable; +import org.eclipse.core.databinding.observable.ObservableTracker; +import org.eclipse.jface.databinding.conformance.delegate.IObservableContractDelegate; +import org.eclipse.jface.databinding.conformance.util.CurrentRealm; +import org.eclipse.jface.databinding.conformance.util.RealmTester; + +/** + * Tests for IObservable that don't require mutating the observable. + *+ * This class is experimental and can change at any time. It is recommended to + * not subclass or assume the test names will not change. The only API that is + * guaranteed to not change are the constructors. The tests will remain public + * and not final in order to allow for consumers to turn off a test if needed by + * subclassing. + *
+ * + * @since 3.2 + */ +public class ObservableContractTest extends ObservableDelegateTest { + private IObservable observable; + + private IObservableContractDelegate delegate; + + public ObservableContractTest(IObservableContractDelegate delegate) { + this(null, delegate); + } + + public ObservableContractTest(String testName, + IObservableContractDelegate delegate) { + super(testName, delegate); + + this.delegate = delegate; + } + + protected void setUp() throws Exception { + super.setUp(); + observable = getObservable(); + } + + public void testGetRealm_NotNull() throws Exception { + assertNotNull(formatFail("The observable's realm should not be null."), observable + .getRealm()); + } + + public void testChange_ChangeEvent() throws Exception { + ChangeListener listener = new ChangeListener(); + + observable.addChangeListener(listener); + delegate.change(observable); + + assertEquals( + formatFail("A change in the observable should notify change listeners."), + listener.count, 1); + } + + public void testChange_EventObservable() throws Exception { + ChangeListener listener = new ChangeListener(); + + observable.addChangeListener(listener); + delegate.change(observable); + + ChangeEvent event = listener.event; + assertNotNull(formatFail("change event was null"), event); + + assertSame( + formatFail("In the change event the source of the change should be the observable."), + observable, event.getObservable()); + } + + public void testChange_RealmCheck() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + delegate.change(observable); + } + }, (CurrentRealm) observable.getRealm()); + } + + public void testChange_ObservableRealmIsTheCurrentRealm() throws Exception { + ChangeListener listener = new ChangeListener(); + observable.addChangeListener(listener); + + delegate.change(observable); + assertTrue( + formatFail("On change the current realm should be the realm of the observable."), + listener.isCurrentRealm); + } + + public void testRemoveChangeListener_RemovesListener() throws Exception { + ChangeListener listener = new ChangeListener(); + + observable.addChangeListener(listener); + delegate.change(observable); + + // precondition check + assertEquals(formatFail("change did not notify listeners"), 1, listener.count); + + observable.removeChangeListener(listener); + delegate.change(observable); + + assertEquals( + formatFail("When a change listener is removed it should not still receive change events."), + 1, listener.count); + } + + public void testIsStale_NotStale() throws Exception { + delegate.setStale(observable, false); + assertFalse( + formatFail("When an observable is not stale isStale() should return false."), + observable.isStale()); + } + + public void testIsStale_RealmChecks() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + delegate.change(observable); + } + }, (CurrentRealm) observable.getRealm()); + } + + /** + * Asserts that ObservableTracker.getterCalled(...) is invoked when the + * providedrunnable
is invoked.
+ *
+ * @param runnable
+ * @param methodName
+ * method name to display when displaying a message
+ * @param observable
+ * observable that should be collected by ObservableTracker
+ */
+ protected void assertGetterCalled(Runnable runnable,
+ String methodName, IObservable observable) {
+ IObservable[] observables = ObservableTracker.runAndMonitor(runnable,
+ null, null);
+
+ int count = 0;
+ for (int i = 0; i < observables.length; i++) {
+ if (observables[i] == observable) {
+ count++;
+ }
+ }
+
+ assertEquals(formatFail(methodName
+ + " should invoke ObservableTracker.getterCalled() once."), 1,
+ count);
+ }
+
+ /* package */static class ChangeListener implements IChangeListener {
+ int count;
+
+ ChangeEvent event;
+
+ boolean isCurrentRealm;
+
+ public void handleChange(ChangeEvent event) {
+ count++;
+ this.event = event;
+ this.isCurrentRealm = event.getObservable().getRealm().isCurrent();
+ }
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/delegate/IObservableCollectionContractDelegate.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/delegate/IObservableCollectionContractDelegate.java
diff -N src/org/eclipse/jface/databinding/conformance/delegate/IObservableCollectionContractDelegate.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/delegate/IObservableCollectionContractDelegate.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.jface.databinding.conformance.delegate;
+
+import org.eclipse.core.databinding.observable.IObservableCollection;
+import org.eclipse.core.databinding.observable.Realm;
+
+/**
+ * Delegate interface for an IObservableCollection.
+ *
+ * + * This interface is not intended to be implemented by clients. Clients should + * instead subclass one of the classes that implement this interface. Note that + * direct implementers of this interface outside of the framework will be broken + * in future releases when methods are added to this interface. + *
+ * + * @since 1.1 + */ +public interface IObservableCollectionContractDelegate extends + IObservableContractDelegate { + /** + * Creates a new observable collection with the provided + *elementCount
.
+ *
+ * @param realm realm of the collection
+ * @param elementCount
+ * number of elements to initialize the collection with
+ *
+ * @return new observable collection
+ */
+ public IObservableCollection createObservableCollection(Realm realm, int elementCount);
+
+ /**
+ * Creates a new element of the appropriate type for the provided
+ * collection
. This element will be employed to assert the
+ * addition and removal of elements in the collection.
+ *
+ * @param collection
+ * @return valid element for the collection
+ */
+ public Object createElement(IObservableCollection collection);
+
+ /**
+ * Returns the expected type of the elements in the collection.
+ *
+ * @param collection
+ * @return element type
+ */
+ public Object getElementType(IObservableCollection collection);
+}
Index: .settings/org.eclipse.jdt.core.prefs
===================================================================
RCS file: .settings/org.eclipse.jdt.core.prefs
diff -N .settings/org.eclipse.jdt.core.prefs
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ .settings/org.eclipse.jdt.core.prefs 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,66 @@
+#Sat Sep 15 18:25:36 MDT 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
Index: src/org/eclipse/jface/databinding/conformance/util/ChangeEventTracker.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/util/ChangeEventTracker.java
diff -N src/org/eclipse/jface/databinding/conformance/util/ChangeEventTracker.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/util/ChangeEventTracker.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,49 @@
+package org.eclipse.jface.databinding.conformance.util;
+
+import java.util.List;
+
+import org.eclipse.core.databinding.observable.ChangeEvent;
+import org.eclipse.core.databinding.observable.IChangeListener;
+import org.eclipse.core.databinding.observable.IObservable;
+
+/**
+ * Listener for tracking the firing of ChangeEvents.
+ */
+public class ChangeEventTracker implements IChangeListener {
+ public int count;
+ public ChangeEvent event;
+
+ /**
+ * Queue that the listener will add itself too when it is notified of an
+ * event. Used to determine order of notifications of listeners. Can be null.
+ */
+ public final List queue;
+
+ public ChangeEventTracker() {
+ queue = null;
+ }
+
+ public ChangeEventTracker(List notificationQueue) {
+ this.queue = notificationQueue;
+ }
+
+ public void handleChange(ChangeEvent event) {
+ count++;
+ this.event = event;
+ if (queue != null) {
+ queue.add(this);
+ }
+ }
+
+ /**
+ * Convenience method to register a new listener.
+ *
+ * @param observable
+ * @return tracker
+ */
+ public static ChangeEventTracker observe(IObservable observable) {
+ ChangeEventTracker tracker = new ChangeEventTracker();
+ observable.addChangeListener(tracker);
+ return tracker;
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableCollectionContractDelegate.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableCollectionContractDelegate.java
diff -N src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableCollectionContractDelegate.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableCollectionContractDelegate.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.jface.databinding.conformance.delegate;
+
+import org.eclipse.core.databinding.observable.IObservable;
+import org.eclipse.core.databinding.observable.IObservableCollection;
+import org.eclipse.core.databinding.observable.Realm;
+
+/**
+ * Abstract implementation of {@link IObservableCollectionContractDelegate}.
+ *
+ * @since 3.2
+ */
+public abstract class AbstractObservableCollectionContractDelegate extends
+ AbstractObservableContractDelegate implements
+ IObservableCollectionContractDelegate {
+
+ /**
+ * Invokes {@link IObservableCollectionContractDelegate#createObservableCollection(Realm, int)}.
+ * @param realm
+ * @return observable
+ */
+ public final IObservable createObservable(Realm realm) {
+ return createObservableCollection(realm, 0);
+ }
+
+ public Object createElement(IObservableCollection collection) {
+ //no op
+ return null;
+ }
+
+ public Object getElementType(IObservableCollection collection) {
+ //no op
+ return null;
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/util/SuiteBuilder.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/util/SuiteBuilder.java
diff -N src/org/eclipse/jface/databinding/conformance/util/SuiteBuilder.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/util/SuiteBuilder.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Brad Reynolds 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:
+ * Brad Reynolds - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.jface.databinding.conformance.util;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+
+import org.eclipse.jface.databinding.conformance.delegate.IObservableContractDelegate;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Builds a test suite.
+ *
+ * @since 1.1
+ */
+public class SuiteBuilder {
+ private LinkedHashSet content;
+
+ public SuiteBuilder() {
+ content = new LinkedHashSet();
+ }
+
+ /**
+ * Adds all test methods from the provided testCase
to the
+ * suite.
+ *
+ * @param testCase
+ * @return builder
+ */
+ public SuiteBuilder addTests(Class testCase) {
+ content.add(testCase);
+ return this;
+ }
+
+ /**
+ * Adds all test methods from the provided testCase
with the
+ * provided parameters
. A constructor must exist in the
+ * testCase that accepts a String as the first parameter followed by
+ * parameters matching the provided parameters. If an appropriate
+ * constructor is not found an exception will be thrown.
+ *
+ * @param testCase
+ * @param parameters
+ * @return builder
+ */
+ public SuiteBuilder addParameterizedTests(Class testCase,
+ Object[] parameters) {
+
+ Constructor constructor = findConstructor(testCase, parameters);
+ if (constructor == null) {
+ throw new IllegalArgumentException(
+ "The parameters provided don't match a constructor found in ["
+ + testCase.getName() + "]");
+ }
+
+ content.add(new ParameterizedTest(testCase, constructor, parameters));
+
+ return this;
+ }
+
+ /**
+ * Convenience method for invoking
+ * {@link #addParameterizedTests(Class, Object[])} with a delegate.
+ *
+ * @param testCase
+ * @param delegate
+ * @return builder
+ */
+ public SuiteBuilder addObservableContractTest(Class testCase,
+ IObservableContractDelegate delegate) {
+
+ addParameterizedTests(testCase, new Object[] {delegate});
+ return this;
+ }
+
+ /**
+ * Builds a new TestSuite out of the tests.
+ *
+ * @return suite
+ */
+ public TestSuite build() {
+ TestSuite suite = new TestSuite();
+
+ for (Iterator it = content.iterator(); it.hasNext();) {
+ Object o = it.next();
+ if (o instanceof Class) {
+ suite.addTestSuite((Class) o);
+ } else if (o instanceof ParameterizedTest) {
+ ParameterizedTest test = (ParameterizedTest) o;
+
+ Method[] methods = test.testClass.getMethods();
+ for (int i = 0; i < methods.length; i++) {
+ String name = methods[i].getName();
+ if (name.startsWith("test")) {
+ try {
+ suite.addTest((Test) test.constructor
+ .newInstance(toParamArray(name,
+ test.parameters)));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ }
+ }
+
+ return suite;
+ }
+
+ private Object[] toParamArray(String testName, Object[] parameters) {
+ Object[] result = new Object[parameters.length + 1];
+ result[0] = testName;
+ System.arraycopy(parameters, 0, result, 1, parameters.length);
+ return result;
+ }
+
+ /**
+ * Returns the constructor that has a String as the first parameters and
+ * then matches the type of the parameters.
+ * @param clazz
+ * @param parameters
+ * @return constructor
+ */
+ private static Constructor findConstructor(Class clazz, Object[] parameters) {
+ Constructor[] constructors = clazz.getConstructors();
+ int expectedParametersLength = parameters.length + 1;
+
+ for (int i = 0; i < constructors.length; i++) {
+ Constructor constructor = constructors[i];
+ Class[] types = constructor.getParameterTypes();
+
+ if (types.length != expectedParametersLength
+ || !String.class.equals(types[0])) {
+ continue;
+ }
+
+ boolean skip = false;
+ for (int j = 1; j < types.length; j++) {
+ Class type = types[j];
+ if (!type.isInstance(parameters[j - 1])) {
+ skip = true;
+ break;
+ }
+ }
+
+ if (!skip) {
+ return constructor;
+ }
+ }
+
+ return null;
+ }
+
+ /* package */static class ParameterizedTest {
+ final Constructor constructor;
+
+ final Object[] parameters;
+
+ private Class testClass;
+
+ ParameterizedTest(Class testClass, Constructor constructor,
+ Object[] parameterss) {
+ this.testClass = testClass;
+ this.constructor = constructor;
+ this.parameters = parameterss;
+ }
+ }
+}
Index: src/org/eclipse/jface/databinding/conformance/MutableObservableValueContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/databinding/conformance/MutableObservableValueContractTest.java
diff -N src/org/eclipse/jface/databinding/conformance/MutableObservableValueContractTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/jface/databinding/conformance/MutableObservableValueContractTest.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.jface.databinding.conformance;
+
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.jface.databinding.conformance.delegate.IObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
+
+/**
+ * Mutability tests for IObservableValue.
+ *
+ * + * This class is experimental and can change at any time. It is recommended to + * not subclass or assume the test names will not change. The only API that is + * guaranteed to not change are the constructors. The tests will remain public + * and not final in order to allow for consumers to turn off a test if needed by + * subclassing. + *
+ * + * @since 3.2 + */ +public class MutableObservableValueContractTest extends + ObservableDelegateTest { + private IObservableValueContractDelegate delegate; + + private IObservableValue observable; + + /** + * @param delegate + */ + public MutableObservableValueContractTest( + IObservableValueContractDelegate delegate) { + this(null, delegate); + } + + public MutableObservableValueContractTest(String testName, + IObservableValueContractDelegate delegate) { + super(testName, delegate); + this.delegate = delegate; + } + + protected void setUp() throws Exception { + super.setUp(); + + this.observable = (IObservableValue) getObservable(); + } + + public void testSetValue_SetsValue() throws Exception { + Object value = delegate.createValue(observable); + + observable.setValue(value); + assertEquals(formatFail("IObservableValue.setValue(Object) should set the value of the observable."), value, observable.getValue()); + } + + public void testSetValue_ChangeEvent() throws Exception { + ChangeEventTracker listener = ChangeEventTracker.observe(observable); + + observable.setValue(delegate.createValue(observable)); + + assertEquals(formatFail("Change event listeners were not notified"), 1, listener.count); + assertEquals(formatFail("IObservableValue.setValue(Object) should fire one ChangeEvent."), 1, + listener.count); + assertEquals( + formatFail("IObservableValue.setValue(Object)'s change event observable should be the created observable."), + observable, listener.event.getObservable()); + } + + public void testSetValue_SameValue() throws Exception { + // invoke change to ensure observable has a value + delegate.change(observable); + + ValueChangeEventTracker valueChangeListener = ValueChangeEventTracker.observe(observable); + ChangeEventTracker changeListener = ChangeEventTracker.observe(observable); + Object value = observable.getValue(); + observable.setValue(value); + + assertEquals( + formatFail("IObservableValue.setValue() should not fire a value change event when the value has not change."), + 0, valueChangeListener.count); + assertEquals( + formatFail("IObservableValue.setValue() should not fire a change event when the value has not change."), + 0, changeListener.count); + } + + public void testSetValue_RealmChecks() throws Exception { + RealmTester.exerciseCurrent(new Runnable() { + public void run() { + observable.setValue(delegate.createValue(observable)); + } + }, (CurrentRealm) observable.getRealm()); + } +} Index: src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableContractDelegate.java =================================================================== RCS file: src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableContractDelegate.java diff -N src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableContractDelegate.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/databinding/conformance/delegate/AbstractObservableContractDelegate.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2007 Brad Reynolds 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: + * Brad Reynolds - initial API and implementation + ******************************************************************************/ + +package org.eclipse.jface.databinding.conformance.delegate; + +import org.eclipse.core.databinding.observable.IObservable; + +/** + * Abstract implementation of {@link IObservableContractDelegate}. + * + * @since 1.1 + */ +public abstract class AbstractObservableContractDelegate implements + IObservableContractDelegate { + + public void setUp() { + // no op + } + + public void tearDown() { + // no op + } + + public void change(IObservable observable) { + // no op + } + + public void setStale(IObservable observable, boolean stale) { + // no op + } +} Index: build.properties =================================================================== RCS file: build.properties diff -N build.properties --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ build.properties 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,17 @@ +############################################################################### +# Copyright (c) 2007 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 +############################################################################### +bin.includes = .,\ + META-INF/,\ + plugin.properties,\ + about.html +output.databinding.jar = bin/ +src.includes = about.html +source.. = src/ Index: .classpath =================================================================== RCS file: .classpath diff -N .classpath --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .classpath 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,7 @@ + +null
.
- */
- public Object getValueType(IObservableValue observable) {
- // no op
- return null;
- }
-
- /**
- * Default implementation returns null
.
- */
- public Object createValue(IObservableValue observable) {
- //no op
- return null;
- }
-}
Index: src/org/eclipse/jface/conformance/databinding/ObservableListContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/conformance/databinding/ObservableListContractTest.java
diff -N src/org/eclipse/jface/conformance/databinding/ObservableListContractTest.java
--- src/org/eclipse/jface/conformance/databinding/ObservableListContractTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,108 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.jface.conformance.databinding;
-
-import org.eclipse.core.databinding.observable.list.IObservableList;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
-
-/**
- * Tests for IObservableList that don't require mutating the collection.
- * - * This class is experimental and can change at any time. It is recommended to - * not subclass or assume the test names will not change. The only API that is - * guaranteed to not change are the constructors. The tests will remain public - * and not final in order to allow for consumers to turn off a test if needed by - * subclassing. - *
- * - * @since 3.2 - */ -public class ObservableListContractTest extends - ObservableCollectionContractTest { - private IObservableList list; - - private IObservableCollectionContractDelegate delegate; - - /** - * @param delegate - */ - public ObservableListContractTest( - IObservableCollectionContractDelegate delegate) { - super(delegate); - this.delegate = delegate; - } - - public ObservableListContractTest(String testName, - IObservableCollectionContractDelegate delegate) { - super(testName, delegate); - this.delegate = delegate; - } - - protected void setUp() throws Exception { - super.setUp(); - - list = (IObservableList) getObservable(); - } - - public void testListIterator_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - list.listIterator(); - } - }, "List.listIterator()", list); - } - - public void testGet_GetterCalled() throws Exception { - list = (IObservableList) delegate.createObservableCollection(new CurrentRealm(true), 1); - assertGetterCalled(new Runnable() { - public void run() { - list.get(0); - } - }, "List.get(int)", list); - } - - public void testIndexOf_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - list.indexOf(delegate.createElement(list)); - } - }, "List.indexOf(int)", list); - } - - public void testLastIndexOf_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - list.lastIndexOf(delegate.createElement(list)); - } - }, "List.lastIndexOf(Object)", list); - } - - public void testListIteratorAtIndex_GetterCalled() throws Exception { - // Create a new list instead of adding an item because the list might - // not be mutable - list = (IObservableList) delegate.createObservableCollection(new CurrentRealm(true), 1); - assertGetterCalled(new Runnable() { - public void run() { - list.listIterator(0); - } - }, "List.listIterator(int)", list); - } - - public void testSubList_GetterCalled() throws Exception { - list = (IObservableList) delegate.createObservableCollection(new CurrentRealm(true), 1); - assertGetterCalled(new Runnable() { - public void run() { - list.subList(0, 1); - } - }, "List.subList(int, int)", list); - } -} Index: src/org/eclipse/jface/conformance/databinding/MutableObservableValueContractTest.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/MutableObservableValueContractTest.java diff -N src/org/eclipse/jface/conformance/databinding/MutableObservableValueContractTest.java --- src/org/eclipse/jface/conformance/databinding/MutableObservableValueContractTest.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 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.jface.conformance.databinding; - -import org.eclipse.core.databinding.observable.value.IObservableValue; -import org.eclipse.jface.tests.databinding.RealmTester; -import org.eclipse.jface.tests.databinding.EventTrackers.ChangeEventTracker; -import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker; -import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm; - -/** - * Mutability tests for IObservableValue. - * - *- * This class is experimental and can change at any time. It is recommended to - * not subclass or assume the test names will not change. The only API that is - * guaranteed to not change are the constructors. The tests will remain public - * and not final in order to allow for consumers to turn off a test if needed by - * subclassing. - *
- * - * @since 3.2 - */ -public class MutableObservableValueContractTest extends - ObservableDelegateTest { - private IObservableValueContractDelegate delegate; - - private IObservableValue observable; - - /** - * @param delegate - */ - public MutableObservableValueContractTest( - IObservableValueContractDelegate delegate) { - this(null, delegate); - } - - public MutableObservableValueContractTest(String testName, - IObservableValueContractDelegate delegate) { - super(testName, delegate); - this.delegate = delegate; - } - - protected void setUp() throws Exception { - super.setUp(); - - this.observable = (IObservableValue) getObservable(); - } - - public void testSetValue_SetsValue() throws Exception { - Object value = delegate.createValue(observable); - - observable.setValue(value); - assertEquals(formatFail("IObservableValue.setValue(Object) should set the value of the observable."), value, observable.getValue()); - } - - public void testSetValue_ChangeEvent() throws Exception { - ChangeEventTracker listener = new ChangeEventTracker().register(observable); - - observable.setValue(delegate.createValue(observable)); - - assertEquals(formatFail("Change event listeners were not notified"), 1, listener.count); - assertEquals(formatFail("IObservableValue.setValue(Object) should fire one ChangeEvent."), 1, - listener.count); - assertEquals( - formatFail("IObservableValue.setValue(Object)'s change event observable should be the created observable."), - observable, listener.event.getObservable()); - } - - public void testSetValue_SameValue() throws Exception { - // invoke change to ensure observable has a value - delegate.change(observable); - - ValueChangeEventTracker valueChangeListener = new ValueChangeEventTracker() - .register(observable); - ChangeEventTracker changeListener = new ChangeEventTracker().register(observable); - Object value = observable.getValue(); - observable.setValue(value); - - assertEquals( - formatFail("IObservableValue.setValue() should not fire a value change event when the value has not change."), - 0, valueChangeListener.count); - assertEquals( - formatFail("IObservableValue.setValue() should not fire a change event when the value has not change."), - 0, changeListener.count); - } - - public void testSetValue_RealmChecks() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - observable.setValue(delegate.createValue(observable)); - } - }, (CurrentRealm) observable.getRealm()); - } -} Index: src/org/eclipse/jface/conformance/databinding/MutableObservableListContractTest.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/MutableObservableListContractTest.java diff -N src/org/eclipse/jface/conformance/databinding/MutableObservableListContractTest.java --- src/org/eclipse/jface/conformance/databinding/MutableObservableListContractTest.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,492 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 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.jface.conformance.databinding; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.databinding.observable.list.IObservableList; -import org.eclipse.core.databinding.observable.list.ListDiffEntry; -import org.eclipse.jface.tests.databinding.EventTrackers.ChangeEventTracker; -import org.eclipse.jface.tests.databinding.EventTrackers.ListChangeEventTracker; - -/** - * Mutability tests for IObservableList. - * - *- * This class is experimental and can change at any time. It is recommended to - * not subclass or assume the test names will not change. The only API that is - * guaranteed to not change are the constructors. The tests will remain public - * and not final in order to allow for consumers to turn off a test if needed by - * subclassing. - *
- * - * @since 3.2 - */ -public class MutableObservableListContractTest extends - MutableObservableCollectionContractTest { - private IObservableCollectionContractDelegate delegate; - - private IObservableList list; - - /** - * @param delegate - */ - public MutableObservableListContractTest( - IObservableCollectionContractDelegate delegate) { - super(delegate); - this.delegate = delegate; - } - - public MutableObservableListContractTest(String testName, - IObservableCollectionContractDelegate delegate) { - super(testName, delegate); - this.delegate = delegate; - } - - protected void setUp() throws Exception { - super.setUp(); - list = (IObservableList) getObservable(); - } - - public void testAdd_ListChangeEvent() throws Exception { - assertListChangeEventFired(new Runnable() { - public void run() { - list.add(delegate.createElement(list)); - } - }, "List.add(Object)", list); - } - - public void testAdd_ListDiffEntry() throws Exception { - list.add(delegate.createElement(list)); - final Object element = delegate.createElement(list); - - assertAddDiffEntry(new Runnable() { - public void run() { - list.add(element); - } - }, "List.add(Object)", list, element, 1); - } - - public void testAddAtIndex_ChangeEvent() throws Exception { - assertChangeEventFired(new Runnable() { - public void run() { - list.add(0, delegate.createElement(list)); - } - }, "List.add(int, Object)", list); - } - - public void testAddAtIndex_ListChangeEvent() throws Exception { - assertListChangeEventFired(new Runnable() { - public void run() { - list.add(0, delegate.createElement(list)); - } - }, "List.add(int, Object)", list); - } - - public void testAddAtIndex_ChangeEventFiredAfterElementIsAdded() - throws Exception { - final Object element = delegate.createElement(list); - - assertContainsDuringChangeEvent(new Runnable() { - public void run() { - list.add(0, element); - } - }, "List.add(int, Collection)", list, element); - } - - public void testAddAtIndex_ListDiffEntry() throws Exception { - list.add(delegate.createElement(list)); - final Object element = delegate.createElement(list); - - assertAddDiffEntry(new Runnable() { - public void run() { - list.add(1, element); - } - }, "List.add(int, Object)", list, element, 1); - } - - public void testAddAll_ListChangeEvent() throws Exception { - assertListChangeEventFired(new Runnable() { - public void run() { - list.addAll(Arrays.asList(new Object[] { delegate - .createElement(list) })); - } - }, "List.addAll(Collection", list); - } - - public void testAddAll_ListDiffEntry() throws Exception { - final Object element = delegate.createElement(list); - - assertAddDiffEntry(new Runnable() { - public void run() { - list.addAll(Arrays.asList(new Object[] { element })); - } - }, "List.addAll(Collection)", list, element, 0); - } - - public void testAddAllAtIndex_ChangeEvent() throws Exception { - assertChangeEventFired(new Runnable() { - public void run() { - list.addAll(0, Arrays.asList(new Object[] { delegate - .createElement(list) })); - } - }, "List.addAll(int, Collection)", list); - } - - public void testAddAllAtIndex_ListChangeEvent() throws Exception { - assertListChangeEventFired(new Runnable() { - public void run() { - list.addAll(0, Arrays.asList(new Object[] { delegate - .createElement(list) })); - } - }, "List.addAll(int, Collection)", list); - } - - public void testAddAllAtIndex_ChangeEventFiredAfterElementIsAdded() - throws Exception { - final Object element = delegate.createElement(list); - - assertContainsDuringChangeEvent(new Runnable() { - public void run() { - list.addAll(0, Arrays.asList(new Object[] { element })); - } - }, "List.addAll(int, Collection)", list, element); - } - - public void testAddAllAtIndex_ListDiffEntry() throws Exception { - list.add(delegate.createElement(list)); - final Object element = delegate.createElement(list); - - assertAddDiffEntry(new Runnable() { - public void run() { - list.addAll(1, Arrays.asList(new Object[] { element })); - } - }, "List.addAll(int, Collection)", list, element, 1); - } - - public void testSet_ChangeEvent() throws Exception { - list.add(delegate.createElement(list)); - - assertChangeEventFired(new Runnable() { - public void run() { - list.set(0, delegate.createElement(list)); - } - }, "List.set(int, Object)", list); - } - - public void testSet_ListChangeEvent() throws Exception { - list.add(delegate.createElement(list)); - - assertListChangeEventFired(new Runnable() { - public void run() { - list.set(0, delegate.createElement(list)); - } - }, "List.set(int, Object)", list); - } - - public void testSet_ChangeEventFiredAfterElementIsSet() throws Exception { - Object element1 = delegate.createElement(list); - list.add(element1); - final Object element2 = delegate.createElement(list); - - assertContainsDuringChangeEvent(new Runnable() { - public void run() { - list.set(0, element2); - } - }, "List.set(int, Object)", list, element2); - } - - public void testSet_ListDiffEntry() throws Exception { - list.add(delegate.createElement(list)); - Object oldElement = delegate.createElement(list); - list.add(oldElement); - - ListChangeEventTracker listener = new ListChangeEventTracker(); - list.addListChangeListener(listener); - - Object newElement = delegate.createElement(list); - list.set(1, newElement); - - ListDiffEntry[] entries = listener.event.diff.getDifferences(); - assertEquals( - "List.set(int, Object) should result in 2 list diff entries.", - 2, entries.length); - - ListDiffEntry add = null; - ListDiffEntry remove = null; - - if (entries[0].isAddition() && !entries[1].isAddition()) { - add = entries[0]; - remove = entries[1]; - } else if (!entries[0].isAddition() && entries[1].isAddition()) { - add = entries[1]; - remove = entries[0]; - } else { - fail("List.set(int, Object) should result in an add and a remove entry."); - } - - assertEquals( - "List.set(int, Object) removed element should be the old element.", - oldElement, remove.getElement()); - assertEquals( - "List.set(int, Object) removed index should be the index the new element was set at.", - 1, remove.getPosition()); - - assertEquals( - "List.set(int, Object) added element should be the set element.", - newElement, add.getElement()); - assertEquals( - "List.set(int, Object) add index should be the index the new element was set at.", - 1, add.getPosition()); - } - - public void testRemove_ListChangeEvent() throws Exception { - final Object element = delegate.createElement(list); - list.add(element); - - assertListChangeEventFired(new Runnable() { - public void run() { - list.remove(element); - } - }, "List.remove(Object)", list); - } - - public void testRemove_ListDiffEntry() throws Exception { - list.add(delegate.createElement(list)); - final Object element = delegate.createElement(list); - list.add(element); - - assertRemoveDiffEntry(new Runnable() { - public void run() { - list.remove(element); - } - }, "List.remove(Object)", list, element, 1); - } - - public void testRemoveAtIndex_ChangeEvent() throws Exception { - list.add(delegate.createElement(list)); - - assertChangeEventFired(new Runnable() { - public void run() { - list.remove(0); - } - }, "List.remove(int)", list); - } - - public void testRemoveAtIndex_ListChangeEvent() throws Exception { - list.add(delegate.createElement(list)); - - assertListChangeEventFired(new Runnable() { - public void run() { - list.remove(0); - } - }, "List.remove(int)", list); - } - - public void testRemoveAtIndex_ChangeEventFiredAfterElementIsRemoved() - throws Exception { - final Object element = delegate.createElement(list); - list.add(element); - - assertDoesNotContainDuringChangeEvent(new Runnable() { - public void run() { - list.remove(0); - } - }, "List.remove(int)", list, element); - } - - public void testRemoveAtIndex_ListDiffEntry() throws Exception { - list.add(delegate.createElement(list)); - Object element = delegate.createElement(list); - list.add(element); - - assertRemoveDiffEntry(new Runnable() { - public void run() { - list.remove(1); - } - }, "List.remove(int)", list, element, 1); - } - - public void testRemoveAll_ListChangeEvent() throws Exception { - final Object element = delegate.createElement(list); - - assertListChangeEventFired(new Runnable() { - public void run() { - list.removeAll(Arrays.asList(new Object[] { element })); - } - }, "List.removeAll(Collection)", list); - } - - public void testRemoveAll_ListDiffEntry() throws Exception { - final Object element = delegate.createElement(list); - list.add(element); - - assertRemoveDiffEntry(new Runnable() { - public void run() { - list.removeAll(Arrays.asList(new Object[] { element })); - } - }, "List.removeAll(Collection)", list, element, 0); - } - - public void testRetainAll_ListChangeEvent() throws Exception { - final Object element1 = delegate.createElement(list); - list.add(element1); - list.add(delegate.createElement(list)); - - assertListChangeEventFired(new Runnable() { - public void run() { - list.retainAll(Arrays.asList(new Object[] { element1 })); - } - }, "List.retainAll(Collection", list); - } - - public void testRetainAll_ListDiffEntry() throws Exception { - final Object element1 = delegate.createElement(list); - list.add(element1); - Object element2 = delegate.createElement(list); - list.add(delegate.createElement(list)); - - assertRemoveDiffEntry(new Runnable() { - public void run() { - list.retainAll(Arrays.asList(new Object[] { element1 })); - } - }, "List.retainAll(Collection)", list, element2, 1); - } - - public void testClear_ListChangeEvent() throws Exception { - list.add(delegate.createElement(list)); - - assertListChangeEventFired(new Runnable() { - public void run() { - list.clear(); - } - }, "List.clear()", list); - } - - public void testClear_ListDiffEntry() throws Exception { - Object element = delegate.createElement(list); - list.add(element); - - assertRemoveDiffEntry(new Runnable() { - public void run() { - list.clear(); - } - }, "List.clear()", list, element, 0); - } - - /** - * Asserts standard behaviors of firing list change events. - *list
.
- * - * This interface is not intended to be implemented by clients. Clients should - * instead subclass one of the classes that implement this interface. Note that - * direct implementers of this interface outside of the framework will be broken - * in future releases when methods are added to this interface. - *
- * - * @since 1.1 - */ -public interface IObservableValueContractDelegate extends - IObservableContractDelegate { - - /** - * Creates a new observable value. - * - * @param realm - * realm of the observable - * @return observable value - */ - public IObservableValue createObservableValue(Realm realm); - - /** - * Returns the expected type of the observable. - * - * @param observable - * @return type - */ - public Object getValueType(IObservableValue observable); - - /** - * Returns a valid value that is not the current value of the observable. - * - * @param observable - * @return value - */ - public Object createValue(IObservableValue observable); -} Index: src/org/eclipse/jface/conformance/databinding/ObservableDelegateTest.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/ObservableDelegateTest.java diff -N src/org/eclipse/jface/conformance/databinding/ObservableDelegateTest.java --- src/org/eclipse/jface/conformance/databinding/ObservableDelegateTest.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,106 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 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.jface.conformance.databinding; - -import junit.framework.TestCase; - -import org.eclipse.core.databinding.observable.IObservable; -import org.eclipse.core.databinding.observable.Realm; -import org.eclipse.jface.tests.databinding.RealmTester; -import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm; - -/** - * TestCase that provides the standard behavior expected for delegating test cases. - * - * @since 3.2 - */ -public class ObservableDelegateTest extends TestCase { - private IObservableContractDelegate delegate; - - private Realm previousRealm; - - private IObservable observable; - private String debugInfo; - - public ObservableDelegateTest(IObservableContractDelegate delegate) { - this(null, delegate); - } - - public ObservableDelegateTest(String testName, IObservableContractDelegate delegate) { - super(testName); - this.delegate = delegate; - } - - protected void setUp() throws Exception { - super.setUp(); - previousRealm = Realm.getDefault(); - - delegate.setUp(); - observable = doCreateObservable(); - } - - protected void tearDown() throws Exception { - super.tearDown(); - - delegate.tearDown(); - observable.dispose(); - observable = null; - - RealmTester.setDefault(previousRealm); - - observable = null; - previousRealm = null; - } - - /** - * Creates a new observable with a default realm. Invoked from - * {@link #setUp()}. Override to customize the creation of observables - * (e.g. specifying a different Realm). - * - * @return observable - */ - protected IObservable doCreateObservable() { - return delegate.createObservable(new CurrentRealm(true)); - } - - /** - * Returns the created observable. The observable is created in - * {@link #setUp()}. If invoked before {@link #setUp()} will be - *null
.
- *
- * @return observable
- */
- protected IObservable getObservable() {
- return observable;
- }
-
- /**
- * Returns the delegate in use.
- *
- * @return delegate
- */
- protected IObservableContractDelegate getObservableContractDelegate() {
- return delegate;
- }
-
- protected String formatFail(String message) {
- return message + getDebugString();
- }
-
- private String getDebugString() {
- if (debugInfo == null) {
- debugInfo = "(Test: " + this.getClass().getName() + ", Delegate: " + delegate.getClass().getName() + ")";
- }
-
- return debugInfo;
- }
-}
Index: src/org/eclipse/jface/conformance/databinding/ObservableValueContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/conformance/databinding/ObservableValueContractTest.java
diff -N src/org/eclipse/jface/conformance/databinding/ObservableValueContractTest.java
--- src/org/eclipse/jface/conformance/databinding/ObservableValueContractTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Brad Reynolds 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:
- * Brad Reynolds - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.jface.conformance.databinding;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.databinding.observable.ChangeEvent;
-import org.eclipse.core.databinding.observable.IChangeListener;
-import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.core.databinding.observable.value.IValueChangeListener;
-import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
-
-/**
- * @since 3.2
- */
-public class ObservableValueContractTest extends ObservableContractTest {
- private IObservableValueContractDelegate delegate;
- private IObservableValue observable;
-
- public ObservableValueContractTest(IObservableValueContractDelegate delegate) {
- super(delegate);
- this.delegate = delegate;
- }
-
- /**
- * @param testName
- * @param delegate
- */
- public ObservableValueContractTest(String testName,
- IObservableValueContractDelegate delegate) {
- super(testName, delegate);
- this.delegate = delegate;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.conformance.databinding.ObservableContractTest#setUp()
- */
- protected void setUp() throws Exception {
- super.setUp();
- observable = (IObservableValue) getObservable();
- }
-
- public void testChange_ValueChangeEvent() throws Exception {
- ValueChangeEventTracker listener = new ValueChangeEventTracker().register(observable);
-
- delegate.change(observable);
- assertEquals(formatFail("On change value change listeners should be notified."), 1,
- listener.count);
- }
-
- public void testGetValueType_ExpectedType() throws Exception {
- assertEquals(formatFail("Type of the value should be returned from getType()."),
- delegate.getValueType(observable), observable.getValueType());
- }
-
- public void testChange_OrderOfNotifications() throws Exception {
- final List listeners = new ArrayList();
- IChangeListener changeListener = new IChangeListener() {
- public void handleChange(ChangeEvent event) {
- listeners.add(this);
- }
- };
-
- IValueChangeListener valueChangeListener = new IValueChangeListener() {
- public void handleValueChange(ValueChangeEvent event) {
- listeners.add(this);
- }
- };
-
- observable.addChangeListener(changeListener);
- observable.addValueChangeListener(valueChangeListener);
-
- delegate.change(observable);
-
- assertTrue(formatFail("Change Listeners were not notified on change."), listeners.size() > 0);
-
- // not asserting the fact that both are notified as this is asserted in
- // other tests
- assertEquals(
- formatFail("Change listeners should be notified before value change listeners."),
- changeListener, listeners.get(0));
- assertEquals(
- formatFail("Value change listeners should be notified after change listeners."),
- valueChangeListener, listeners.get(1));
- }
-
- public void testChange_ValueChangeEventDiff() throws Exception {
- ValueChangeEventTracker listener = new ValueChangeEventTracker().register(observable);
- Object oldValue = observable.getValue();
-
- delegate.change(observable);
-
- ValueChangeEvent event = listener.event;
-
- assertTrue(formatFail("Change Listeners were not notified on change."), listener.count > 0);
-
- assertEquals(
- formatFail("When a value change event is fired the old value should be the previous value of the observable value."),
- oldValue, event.diff.getOldValue());
- assertEquals(
- formatFail("When a value change event is fired the new value should be the same as the current value of the observable value."),
- observable.getValue(), event.diff.getNewValue());
- }
-
- public void testChange_ValueChangeEventFiredAfterValueIsSet()
- throws Exception {
- class ValueChangeListener extends ValueChangeEventTracker {
- Object value;
-
- public void handleValueChange(ValueChangeEvent event) {
- super.handleValueChange(event);
-
- this.value = event.getObservableValue().getValue();
- }
- }
-
- ValueChangeListener listener = (ValueChangeListener) new ValueChangeListener()
- .register(observable);
- delegate.change(observable);
- assertEquals(
- formatFail("When a value change event is fired the new value should be applied before firing the change event."),
- listener.value, observable.getValue());
- }
-
- public void testRemoveValueChangeListener_RemovesListener() throws Exception {
- ValueChangeEventTracker listener = new ValueChangeEventTracker().register(observable);
- delegate.change(observable);
-
- // precondition
- assertEquals(formatFail("Value change listeners should be notified on change."), 1,
- listener.count);
-
- observable.removeValueChangeListener(listener);
- delegate.change(observable);
-
- assertEquals(
- formatFail("Value change listeners should not be notified after they've been removed from the observable."),
- 1, listener.count);
- }
-
- public void testGetValue_GetterCalled() throws Exception {
- assertGetterCalled(new Runnable() {
- public void run() {
- observable.getValue();
- }
- }, formatFail("IObservableValue.getValue()"), observable);
- }
-
- public void testGetValue_RealmCheck() throws Exception {
- RealmTester.exerciseCurrent(new Runnable() {
- public void run() {
- observable.getValue();
- }
- }, (CurrentRealm) observable.getRealm());
- }
-}
Index: src/org/eclipse/jface/conformance/databinding/MutableObservableSetContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/conformance/databinding/MutableObservableSetContractTest.java
diff -N src/org/eclipse/jface/conformance/databinding/MutableObservableSetContractTest.java
--- src/org/eclipse/jface/conformance/databinding/MutableObservableSetContractTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,265 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Brad Reynolds 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:
- * Brad Reynolds - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.jface.conformance.databinding;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.databinding.observable.set.IObservableSet;
-import org.eclipse.jface.tests.databinding.EventTrackers.ChangeEventTracker;
-import org.eclipse.jface.tests.databinding.EventTrackers.SetChangeEventTracker;
-
-/**
- */
-public class MutableObservableSetContractTest extends
- MutableObservableCollectionContractTest {
- private IObservableCollectionContractDelegate delegate;
-
- private IObservableSet set;
-
- public MutableObservableSetContractTest(String testName,
- IObservableCollectionContractDelegate delegate) {
- super(testName, delegate);
- this.delegate = delegate;
- }
-
- /**
- * @param delegate
- */
- public MutableObservableSetContractTest(
- IObservableCollectionContractDelegate delegate) {
- super(delegate);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- set = (IObservableSet) getObservable();
- }
-
- public void testAdd_SetChangeEvent() throws Exception {
- assertSetChangeEventFired(new Runnable() {
- public void run() {
- set.add(delegate.createElement(set));
- }
- }, "Set.add(Object)", set);
- }
-
- public void testAdd_SetDiffEntry() throws Exception {
- set.add(delegate.createElement(set));
- final Object element = delegate.createElement(set);
-
- assertAddDiffEntry(new Runnable() {
- public void run() {
- set.add(element);
- }
- }, "Set.add(Object)", set, element);
- }
-
- public void testAddAll_SetChangeEvent() throws Exception {
- assertSetChangeEventFired(new Runnable() {
- public void run() {
- set.addAll(Arrays.asList(new Object[] { delegate
- .createElement(set) }));
- }
- }, "Set.addAll(Collection", set);
- }
-
- public void testAddAll_SetDiffEntry() throws Exception {
- final Object element = delegate.createElement(set);
-
- assertAddDiffEntry(new Runnable() {
- public void run() {
- set.addAll(Arrays.asList(new Object[] { element }));
- }
- }, "Set.addAll(Collection)", set, element);
- }
-
- public void testRemove_SetChangeEvent() throws Exception {
- final Object element = delegate.createElement(set);
- set.add(element);
-
- assertSetChangeEventFired(new Runnable() {
- public void run() {
- set.remove(element);
- }
- }, "Set.remove(Object)", set);
- }
-
- public void testRemove_SetDiffEntry() throws Exception {
- set.add(delegate.createElement(set));
- final Object element = delegate.createElement(set);
- set.add(element);
-
- assertRemoveDiffEntry(new Runnable() {
- public void run() {
- set.remove(element);
- }
- }, "Set.remove(Object)", set, element);
- }
-
- public void testRemoveAll_SetChangeEvent() throws Exception {
- final Object element = delegate.createElement(set);
- set.add(element);
-
- assertSetChangeEventFired(new Runnable() {
- public void run() {
- set.removeAll(Arrays.asList(new Object[] { element }));
- }
- }, "Set.removeAll(Collection)", set);
- }
-
- public void testRemoveAll_SetDiffEntry() throws Exception {
- final Object element = delegate.createElement(set);
- set.add(element);
-
- assertRemoveDiffEntry(new Runnable() {
- public void run() {
- set.removeAll(Arrays.asList(new Object[] { element }));
- }
- }, "Set.removeAll(Collection)", set, element);
- }
-
- public void testRetainAll_SetChangeEvent() throws Exception {
- final Object element1 = delegate.createElement(set);
- set.add(element1);
- set.add(delegate.createElement(set));
-
- assertSetChangeEventFired(new Runnable() {
- public void run() {
- set.retainAll(Arrays.asList(new Object[] { element1 }));
- }
- }, "Set.retainAll(Collection", set);
- }
-
- public void testRetainAll_SetDiffEntry() throws Exception {
- final Object element1 = delegate.createElement(set);
- set.add(element1);
- Object element2 = delegate.createElement(set);
- set.add(delegate.createElement(set));
-
- assertRemoveDiffEntry(new Runnable() {
- public void run() {
- set.retainAll(Arrays.asList(new Object[] { element1 }));
- }
- }, "Set.retainAll(Collection)", set, element2);
- }
-
- public void testClear_SetChangeEvent() throws Exception {
- set.add(delegate.createElement(set));
-
- assertSetChangeEventFired(new Runnable() {
- public void run() {
- set.clear();
- }
- }, "Set.clear()", set);
- }
-
- public void testClear_SetDiffEntry() throws Exception {
- Object element = delegate.createElement(set);
- set.add(element);
-
- assertRemoveDiffEntry(new Runnable() {
- public void run() {
- set.clear();
- }
- }, "Set.clear()", set, element);
- }
-
- /**
- * Asserts standard behaviors of firing set change events.
- * set
.
- * - * This class is experimental and can change at any time. It is recommended to - * not subclass or assume the test names will not change. The only API that is - * guaranteed to not change are the constructors. The tests will remain public - * and not final in order to allow for consumers to turn off a test if needed by - * subclassing. - *
- * - * @since 3.2 - */ -public class SWTMutableObservableValueContractTest extends - MutableObservableValueContractTest { - private IObservableValueContractDelegate delegate; - - public SWTMutableObservableValueContractTest( - IObservableValueContractDelegate delegate) { - this(null, delegate); - } - - /** - * @param testName - * @param delegate - */ - public SWTMutableObservableValueContractTest(String testName, - IObservableValueContractDelegate delegate) { - super(testName, delegate); - this.delegate = delegate; - } - - /** - * Creates a new observable passing the realm for the current display. - */ - protected IObservable doCreateObservable() { - Display display = Display.getCurrent(); - if (display == null) { - display = new Display(); - } - DelegatingRealm delegateRealm = new DelegatingRealm(SWTObservables - .getRealm(display)); - delegateRealm.setCurrent(true); - - return delegate.createObservable(delegateRealm); - } -} Index: src/org/eclipse/jface/conformance/databinding/ObservableCollectionContractTest.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/ObservableCollectionContractTest.java diff -N src/org/eclipse/jface/conformance/databinding/ObservableCollectionContractTest.java --- src/org/eclipse/jface/conformance/databinding/ObservableCollectionContractTest.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,207 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 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.jface.conformance.databinding; - -import java.util.Arrays; - -import org.eclipse.core.databinding.observable.IObservableCollection; -import org.eclipse.jface.tests.databinding.RealmTester; -import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm; - -/** - * Tests for IObservableCollection that don't mutate the collection. - *- * This class is experimental and can change at any time. It is recommended to - * not subclass or assume the test names will not change. The only API that is - * guaranteed to not change are the constructors. The tests will remain public - * and not final in order to allow for consumers to turn off a test if needed by - * subclassing. - *
- * - * @since 3.2 - */ -public class ObservableCollectionContractTest extends ObservableContractTest { - private IObservableCollectionContractDelegate delegate; - - private IObservableCollection collection; - - public ObservableCollectionContractTest( - IObservableCollectionContractDelegate delegate) { - super(delegate); - this.delegate = delegate; - } - - public ObservableCollectionContractTest(String testName, - IObservableCollectionContractDelegate delegate) { - super(testName, delegate); - this.delegate = delegate; - } - - protected void setUp() throws Exception { - super.setUp(); - - collection = (IObservableCollection) getObservable(); - } - - public void testIterator_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.iterator(); - } - }, "Collection.iterator()", collection); - } - - public void testIterator_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.iterator(); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testSize_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.size(); - } - }, "Collection.size()", collection); - } - - public void testSize_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.size(); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testIsEmpty_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.isEmpty(); - } - }, "Collection.isEmpty()", collection); - } - - public void testIsEmpty_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.isEmpty(); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testContains_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.contains(delegate.createElement(collection)); - } - }, "Collection.contains(...)", collection); - } - - public void testContains_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.contains(delegate.createElement(collection)); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testContainsAll_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.containsAll(Arrays.asList(new Object[] { delegate - .createElement(collection) })); - } - }, "Collection.containsAll(Collection)", collection); - } - - public void testContainsAll_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.containsAll(Arrays.asList(new Object[] { delegate - .createElement(collection) })); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testToArray_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.toArray(); - } - }, "Collection.toArray()", collection); - } - - public void testToArray_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.toArray(); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testToArrayWithObjectArray_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.toArray(new Object[collection.size()]); - } - }, "Collection.toArray(Object[])", collection); - } - - public void testToArrayWithObjectArray_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.toArray(new Object[collection.size()]); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testEquals_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.equals(collection); - } - }, "Collection.equals(Object)", collection); - } - - public void testEquals_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.equals(collection); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testHashCode_GetterCalled() throws Exception { - assertGetterCalled(new Runnable() { - public void run() { - collection.hashCode(); - } - }, "Collection.hashCode()", collection); - } - - public void testHashCode_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.hashCode(); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testGetElementType_ReturnsType() throws Exception { - assertEquals( - "Element type of the collection should be returned from IObservableCollection.getElementType()", - delegate.getElementType(collection), collection - .getElementType()); - } -} Index: src/org/eclipse/jface/conformance/databinding/AbstractObservableCollectionContractDelegate.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/AbstractObservableCollectionContractDelegate.java diff -N src/org/eclipse/jface/conformance/databinding/AbstractObservableCollectionContractDelegate.java --- src/org/eclipse/jface/conformance/databinding/AbstractObservableCollectionContractDelegate.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 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.jface.conformance.databinding; - -import org.eclipse.core.databinding.observable.IObservable; -import org.eclipse.core.databinding.observable.IObservableCollection; -import org.eclipse.core.databinding.observable.Realm; - -/** - * Abstract implementation of {@link IObservableCollectionContractDelegate}. - * - * @since 3.2 - */ -public abstract class AbstractObservableCollectionContractDelegate extends - AbstractObservableContractDelegate implements - IObservableCollectionContractDelegate { - - /** - * Invokes {@link #createObservableCollection(Realm, elementCount)}. - */ - public final IObservable createObservable(Realm realm) { - return createObservableCollection(realm, 0); - } - - public Object createElement(IObservableCollection collection) { - //no op - return null; - } - - public Object getElementType(IObservableCollection collection) { - //no op - return null; - } -} Index: src/org/eclipse/jface/conformance/databinding/ObservableContractTest.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/ObservableContractTest.java diff -N src/org/eclipse/jface/conformance/databinding/ObservableContractTest.java --- src/org/eclipse/jface/conformance/databinding/ObservableContractTest.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,174 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Brad Reynolds 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: - * Brad Reynolds - initial API and implementation - ******************************************************************************/ - -package org.eclipse.jface.conformance.databinding; - -import org.eclipse.core.databinding.observable.ChangeEvent; -import org.eclipse.core.databinding.observable.IChangeListener; -import org.eclipse.core.databinding.observable.IObservable; -import org.eclipse.core.databinding.observable.ObservableTracker; -import org.eclipse.jface.tests.databinding.RealmTester; -import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm; - -/** - * Tests for IObservable that don't require mutating the observable. - *- * This class is experimental and can change at any time. It is recommended to - * not subclass or assume the test names will not change. The only API that is - * guaranteed to not change are the constructors. The tests will remain public - * and not final in order to allow for consumers to turn off a test if needed by - * subclassing. - *
- * - * @since 3.2 - */ -public class ObservableContractTest extends ObservableDelegateTest { - private IObservable observable; - - private IObservableContractDelegate delegate; - - public ObservableContractTest(IObservableContractDelegate delegate) { - this(null, delegate); - } - - public ObservableContractTest(String testName, - IObservableContractDelegate delegate) { - super(testName, delegate); - - this.delegate = delegate; - } - - protected void setUp() throws Exception { - super.setUp(); - observable = getObservable(); - } - - public void testGetRealm_NotNull() throws Exception { - assertNotNull(formatFail("The observable's realm should not be null."), observable - .getRealm()); - } - - public void testChange_ChangeEvent() throws Exception { - ChangeListener listener = new ChangeListener(); - - observable.addChangeListener(listener); - delegate.change(observable); - - assertEquals( - formatFail("A change in the observable should notify change listeners."), - listener.count, 1); - } - - public void testChange_EventObservable() throws Exception { - ChangeListener listener = new ChangeListener(); - - observable.addChangeListener(listener); - delegate.change(observable); - - ChangeEvent event = listener.event; - assertNotNull(formatFail("change event was null"), event); - - assertSame( - formatFail("In the change event the source of the change should be the observable."), - observable, event.getObservable()); - } - - public void testChange_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - delegate.change(observable); - } - }, (CurrentRealm) observable.getRealm()); - } - - public void testChange_ObservableRealmIsTheCurrentRealm() throws Exception { - ChangeListener listener = new ChangeListener(); - observable.addChangeListener(listener); - - delegate.change(observable); - assertTrue( - formatFail("On change the current realm should be the realm of the observable."), - listener.isCurrentRealm); - } - - public void testRemoveChangeListener_RemovesListener() throws Exception { - ChangeListener listener = new ChangeListener(); - - observable.addChangeListener(listener); - delegate.change(observable); - - // precondition check - assertEquals(formatFail("change did not notify listeners"), 1, listener.count); - - observable.removeChangeListener(listener); - delegate.change(observable); - - assertEquals( - formatFail("When a change listener is removed it should not still receive change events."), - 1, listener.count); - } - - public void testIsStale_NotStale() throws Exception { - delegate.setStale(observable, false); - assertFalse( - formatFail("When an observable is not stale isStale() should return false."), - observable.isStale()); - } - - public void testIsStale_RealmChecks() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - delegate.change(observable); - } - }, (CurrentRealm) observable.getRealm()); - } - - /** - * Asserts that ObservableTracker.getterCalled(...) is invoked when the - * providedrunnable
is invoked.
- *
- * @param runnable
- * @param methodName
- * method name to display when displaying a message
- * @param observable
- * observable that should be collected by ObservableTracker
- */
- protected void assertGetterCalled(Runnable runnable,
- String methodName, IObservable observable) {
- IObservable[] observables = ObservableTracker.runAndMonitor(runnable,
- null, null);
-
- int count = 0;
- for (int i = 0; i < observables.length; i++) {
- if (observables[i] == observable) {
- count++;
- }
- }
-
- assertEquals(formatFail(methodName
- + " should invoke ObservableTracker.getterCalled() once."), 1,
- count);
- }
-
- /* package */static class ChangeListener implements IChangeListener {
- int count;
-
- ChangeEvent event;
-
- boolean isCurrentRealm;
-
- public void handleChange(ChangeEvent event) {
- count++;
- this.event = event;
- this.isCurrentRealm = event.getObservable().getRealm().isCurrent();
- }
- }
-}
Index: src/org/eclipse/jface/conformance/databinding/MutableObservableCollectionContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/conformance/databinding/MutableObservableCollectionContractTest.java
diff -N src/org/eclipse/jface/conformance/databinding/MutableObservableCollectionContractTest.java
--- src/org/eclipse/jface/conformance/databinding/MutableObservableCollectionContractTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,359 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.jface.conformance.databinding;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.eclipse.core.databinding.observable.ChangeEvent;
-import org.eclipse.core.databinding.observable.IChangeListener;
-import org.eclipse.core.databinding.observable.IObservableCollection;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.EventTrackers.ChangeEventTracker;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
-
-/**
- * Mutability tests for IObservableCollection.
- * - * This class is experimental and can change at any time. It is recommended to - * not subclass or assume the test names will not change. The only API that is - * guaranteed to not change are the constructors. The tests will remain public - * and not final in order to allow for consumers to turn off a test if needed by - * subclassing. - *
- * - * @since 3.2 - */ -public class MutableObservableCollectionContractTest extends ObservableDelegateTest { - private IObservableCollectionContractDelegate delegate; - - private IObservableCollection collection; - - public MutableObservableCollectionContractTest( - IObservableCollectionContractDelegate delegate) { - super(delegate); - this.delegate = delegate; - } - - public MutableObservableCollectionContractTest(String name, - IObservableCollectionContractDelegate delegate) { - super(name, delegate); - this.delegate = delegate; - } - - protected void setUp() throws Exception { - super.setUp(); - - collection = (IObservableCollection) super.getObservable(); - } - - public void testAdd_ChangeEvent() throws Exception { - assertChangeEventFired(new Runnable() { - public void run() { - collection.add(delegate.createElement(collection)); - } - }, "Collection.add(Object)", collection); - } - - public void testAdd_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.add(delegate.createElement(collection)); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testAdd_ChangeEventFiredAfterElementIsAdded() throws Exception { - final Object element = delegate.createElement(collection); - - assertContainsDuringChangeEvent(new Runnable() { - public void run() { - collection.add(element); - } - }, "Collection.add(Object)", collection, element); - } - - public void testAddAll_ChangeEvent() throws Exception { - assertChangeEventFired(new Runnable() { - public void run() { - collection.addAll(Arrays.asList(new Object[] { delegate - .createElement(collection) })); - } - }, "Collection.addAll(Collection)", collection); - } - - public void testAddAll_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.addAll(Arrays.asList(new Object[] { delegate - .createElement(collection) })); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testAddAll_ChangeEventFiredAfterElementsAreAdded() - throws Exception { - final Object element = delegate.createElement(collection); - - assertContainsDuringChangeEvent(new Runnable() { - public void run() { - collection.addAll(Arrays.asList(new Object[] { element })); - } - }, "Collection.addAll(Collection)", collection, element); - } - - public void testRemove_ChangeEvent() throws Exception { - final Object element = delegate.createElement(collection); - collection.add(element); - - assertChangeEventFired(new Runnable() { - public void run() { - collection.remove(element); - } - }, "Collection.remove(Object)", collection); - } - - public void testRemove_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.remove(delegate.createElement(collection)); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testRemove_ChangeEventFiredAfterElementIsRemoved() - throws Exception { - final Object element = delegate.createElement(collection); - collection.add(element); - - assertDoesNotContainDuringChangeEvent(new Runnable() { - public void run() { - collection.remove(element); - } - }, "Collection.remove(Object)", collection, element); - } - - public void testRemoveAll_ChangeEvent() throws Exception { - final Object element = delegate.createElement(collection); - collection.add(element); - - assertChangeEventFired(new Runnable() { - public void run() { - collection.removeAll(Arrays.asList(new Object[] { element })); - } - }, "Collection.removeAll(Collection)", collection); - } - - public void testRemoveAll_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.removeAll(Arrays.asList(new Object[] { delegate.createElement(collection) })); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testRemoveAll_ChangeEventFiredAfterElementsAreRemoved() - throws Exception { - final Object element = delegate.createElement(collection); - collection.add(element); - - assertDoesNotContainDuringChangeEvent(new Runnable() { - public void run() { - collection.removeAll(Arrays.asList(new Object[] { element })); - } - }, "Collection.removeAll(Collection)", collection, element); - } - - public void testRetainAll_ChangeEvent() throws Exception { - final Object element1 = delegate.createElement(collection); - collection.add(element1); - Object element2 = delegate.createElement(collection); - collection.add(element2); - - assertChangeEventFired(new Runnable() { - public void run() { - collection.retainAll(Arrays.asList(new Object[] { element1 })); - } - - }, "Collection.retainAll(Collection)", collection); - } - - public void testRetainAll_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.retainAll(Collections.EMPTY_LIST); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testRetainAll_ChangeEventFiredAfterElementsAreRetained() - throws Exception { - Object element1 = delegate.createElement(collection); - collection.add(element1); - Object element2 = delegate.createElement(collection); - collection.add(element2); - - // precondition - assertTrue(collection.contains(element1)); - assertTrue(collection.contains(element2)); - - ContainsListener listener1 = new ContainsListener(collection, element1) - .init(); - ContainsListener listener2 = new ContainsListener(collection, element2) - .init(); - - // set contains the the opposite of the expected outcome to ensure they - // get set - listener1.contains = false; - listener2.contains = true; - - collection.retainAll(Arrays.asList(new Object[] { element1 })); - assertTrue( - formatFail("When Collection.retainAll(...) fires the change event the element should have been retained in the Collection."), - listener1.contains); - assertFalse( - formatFail("When Collection.retainAll(...) fires the change event the element should have been removed from the Collection."), - listener2.contains); - } - - public void testClear_ChangeEvent() throws Exception { - collection.add(delegate.createElement(collection)); - - assertChangeEventFired(new Runnable() { - public void run() { - collection.clear(); - } - }, "List.clear()", collection); - } - - public void testClear_RealmCheck() throws Exception { - RealmTester.exerciseCurrent(new Runnable() { - public void run() { - collection.clear(); - } - }, (CurrentRealm) collection.getRealm()); - } - - public void testClear_ChangeEventFiredAfterElementIsRemoved() - throws Exception { - Object element = delegate.createElement(collection); - collection.add(element); - - assertDoesNotContainDuringChangeEvent(new Runnable() { - public void run() { - collection.clear(); - } - }, "List.clear()", collection, element); - } - - /** - * Asserts that a ChangeEvent is fired once when the provided - *runnable
is invoked and the source is the provided
- * collection
.
- *
- * @param runnable
- * @param methodName
- * @param collection
- */
- /* package */void assertChangeEventFired(Runnable runnable,
- String methodName, IObservableCollection collection) {
- ChangeEventTracker listener = new ChangeEventTracker();
- collection.addChangeListener(listener);
- runnable.run();
-
- assertEquals(formatFail(methodName + " should fire one ChangeEvent."), 1,
- listener.count);
- assertEquals(
- formatFail(methodName
- + "'s change event observable should be the created Collection."),
- collection, listener.event.getObservable());
- }
-
- /**
- * Asserts that when the change event is fired for the action contained in
- * the runnable
the change will have been applied to the
- * collection
.
- *
- * @param runnable
- * @param methodName
- * @param collection
- * @param elementContained
- */
- /* package */void assertDoesNotContainDuringChangeEvent(Runnable runnable,
- String methodName, IObservableCollection collection,
- Object elementNotContained) {
-
- // precondition
- assertTrue(collection.contains(elementNotContained));
-
- ContainsListener listener = new ContainsListener(collection,
- elementNotContained).init();
- listener.contains = true;
- collection.remove(elementNotContained);
- assertFalse(
- formatFail(new StringBuffer("When ")
- .append(methodName)
- .append(
- " fires a change event the element should have been removed from the Collection.")
- .toString()), listener.contains);
- }
-
- /**
- * Asserts that when the change event is fired for the action contained in
- * the runnable
the change will have been applied to the
- * collection
.
- *
- * @param runnable
- * @param methodName
- * @param collection
- * @param elementContained
- */
- /* package */void assertContainsDuringChangeEvent(Runnable runnable,
- String methodName, IObservableCollection collection,
- Object elementContained) {
- ContainsListener listener = new ContainsListener(collection,
- elementContained).init();
-
- // precondition
- assertFalse(collection.contains(elementContained));
- runnable.run();
-
- assertTrue(
- formatFail(new StringBuffer("When ")
- .append(methodName)
- .append(
- " fires a change event the element should have been added to the Collection.")
- .toString()), listener.contains);
- }
-
- /* package */static class ContainsListener implements IChangeListener {
- boolean contains;
-
- final private Object element;
-
- final private IObservableCollection collection;
-
- ContainsListener(IObservableCollection collection, Object element) {
- this.element = element;
- this.collection = collection;
- }
-
- ContainsListener init() {
- collection.addChangeListener(this);
- return this;
- }
-
- public void handleChange(ChangeEvent event) {
- contains = collection.contains(element);
- }
- }
-}
Index: src/org/eclipse/jface/conformance/databinding/IObservableCollectionContractDelegate.java
===================================================================
RCS file: src/org/eclipse/jface/conformance/databinding/IObservableCollectionContractDelegate.java
diff -N src/org/eclipse/jface/conformance/databinding/IObservableCollectionContractDelegate.java
--- src/org/eclipse/jface/conformance/databinding/IObservableCollectionContractDelegate.java 9 Sep 2007 03:46:50 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.jface.conformance.databinding;
-
-import org.eclipse.core.databinding.observable.IObservableCollection;
-import org.eclipse.core.databinding.observable.Realm;
-
-/**
- * Delegate interface for an IObservableCollection.
- *
- * - * This interface is not intended to be implemented by clients. Clients should - * instead subclass one of the classes that implement this interface. Note that - * direct implementers of this interface outside of the framework will be broken - * in future releases when methods are added to this interface. - *
- * - * @since 1.1 - */ -public interface IObservableCollectionContractDelegate extends - IObservableContractDelegate { - /** - * Creates a new observable collection with the provided - *elementCount
.
- *
- * @param realm realm of the collection
- * @param elementCount
- * number of elements to initialize the collection with
- *
- * @return new observable collection
- */
- public IObservableCollection createObservableCollection(Realm realm, int elementCount);
-
- /**
- * Creates a new element of the appropriate type for the provided
- * collection
. This element will be employed to assert the
- * addition and removal of elements in the collection.
- *
- * @param collection
- * @return valid element for the collection
- */
- public Object createElement(IObservableCollection collection);
-
- /**
- * Returns the expected type of the elements in the collection.
- *
- * @param collection
- * @return element type
- */
- public Object getElementType(IObservableCollection collection);
-}
Index: src/org/eclipse/jface/conformance/databinding/IObservableContractDelegate.java
===================================================================
RCS file: src/org/eclipse/jface/conformance/databinding/IObservableContractDelegate.java
diff -N src/org/eclipse/jface/conformance/databinding/IObservableContractDelegate.java
--- src/org/eclipse/jface/conformance/databinding/IObservableContractDelegate.java 9 Sep 2007 03:46:51 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Brad Reynolds 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:
- * Brad Reynolds - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.jface.conformance.databinding;
-
-import org.eclipse.core.databinding.observable.IObservable;
-import org.eclipse.core.databinding.observable.Realm;
-
-/**
- * Delegate interface for observables.
- *
- * - * This interface is not intended to be implemented by clients. Clients should - * instead subclass one of the classes that implement this interface. Note that - * direct implementers of this interface outside of the framework will be broken - * in future releases when methods are added to this interface. - *
- * - * @since 1.1 - */ -public interface IObservableContractDelegate { - /** - * Notifies the delegate of the start of a test. - */ - public void setUp(); - - /** - * Notifies the delegate of the end of a test. - */ - public void tearDown(); - - /** - * Invokes an operation to set the stale state of the provided - *observable
.
- *
- * @param observable
- * @param stale
- */
- public void setStale(IObservable observable, boolean stale);
-
- /**
- * Creates a new observable.
- *
- * @param realm realm of the observable
- * @return observable
- */
- public IObservable createObservable(Realm realm);
-
- /**
- * Invokes a change operation on the observable resulting in a change event
- * being fired from the observable.
- *
- * @param observable
- */
- public void change(IObservable observable);
-}
Index: src/org/eclipse/jface/conformance/databinding/SWTObservableValueContractTest.java
===================================================================
RCS file: src/org/eclipse/jface/conformance/databinding/SWTObservableValueContractTest.java
diff -N src/org/eclipse/jface/conformance/databinding/SWTObservableValueContractTest.java
--- src/org/eclipse/jface/conformance/databinding/SWTObservableValueContractTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.jface.conformance.databinding;
-
-import org.eclipse.core.databinding.observable.IObservable;
-import org.eclipse.jface.databinding.swt.SWTObservables;
-import org.eclipse.jface.tests.databinding.RealmTester.DelegatingRealm;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * Tests for IObservableValue that don't mutate the value.
- * - * This class is experimental and can change at any time. It is recommended to - * not subclass or assume the test names will not change. The only API that is - * guaranteed to not change are the constructors. The tests will remain public - * and not final in order to allow for consumers to turn off a test if needed by - * subclassing. - *
- * - * @since 3.2 - */ -public class SWTObservableValueContractTest extends ObservableValueContractTest { - private IObservableValueContractDelegate delegate; - - /** - * @param delegate - */ - public SWTObservableValueContractTest( - IObservableValueContractDelegate delegate) { - this(null, delegate); - } - - public SWTObservableValueContractTest(String testName, - IObservableValueContractDelegate delegate) { - super(testName, delegate); - this.delegate = delegate; - } - - /** - * Creates a new observable passing the realm for the current display. - */ - protected IObservable doCreateObservable() { - Display display = Display.getCurrent(); - if (display == null) { - display = new Display(); - } - DelegatingRealm delegateRealm = new DelegatingRealm(SWTObservables - .getRealm(display)); - delegateRealm.setCurrent(true); - - return delegate.createObservable(delegateRealm); - } -} Index: src/org/eclipse/jface/conformance/databinding/AbstractObservableContractDelegate.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/AbstractObservableContractDelegate.java diff -N src/org/eclipse/jface/conformance/databinding/AbstractObservableContractDelegate.java --- src/org/eclipse/jface/conformance/databinding/AbstractObservableContractDelegate.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Brad Reynolds 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: - * Brad Reynolds - initial API and implementation - ******************************************************************************/ - -package org.eclipse.jface.conformance.databinding; - -import org.eclipse.core.databinding.observable.IObservable; - -/** - * Abstract implementation of {@link IObservableContractDelegate}. - * - * @since 1.1 - */ -public abstract class AbstractObservableContractDelegate implements - IObservableContractDelegate { - - public void setUp() { - // no op - } - - public void tearDown() { - // no op - } - - public void change(IObservable observable) { - // no op - } - - public void setStale(IObservable observable, boolean stale) { - // no op - } -} Index: src/org/eclipse/jface/conformance/databinding/ObservableStaleContractTest.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/ObservableStaleContractTest.java diff -N src/org/eclipse/jface/conformance/databinding/ObservableStaleContractTest.java --- src/org/eclipse/jface/conformance/databinding/ObservableStaleContractTest.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,148 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Brad Reynolds 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: - * Brad Reynolds - initial API and implementation - ******************************************************************************/ - -package org.eclipse.jface.conformance.databinding; - -import org.eclipse.core.databinding.observable.IObservable; -import org.eclipse.core.databinding.observable.IStaleListener; -import org.eclipse.core.databinding.observable.StaleEvent; - -/** - * @since 3.3 - */ -public class ObservableStaleContractTest extends ObservableDelegateTest { - private IObservableContractDelegate delegate; - private IObservable observable; - - public ObservableStaleContractTest(IObservableContractDelegate delegate) { - this(null, delegate); - } - - public ObservableStaleContractTest(String testName, IObservableContractDelegate delegate) { - super(testName, delegate); - this.delegate = delegate; - } - - protected void setUp() throws Exception { - super.setUp(); - - observable = getObservable(); - } - - public void testIsStale_TrueWhenStale() throws Exception { - delegate.setStale(observable, true); - assertTrue(formatFail("When stale isStale() should return true."), observable.isStale()); - } - - public void testIsStale_FalseWhenNotStale() throws Exception { - delegate.setStale(observable, false); - assertFalse(formatFail("When not stale isStale() should return false."), observable.isStale()); - } - - public void testBecomingStaleFiresStaleEvent() throws Exception { - StaleListener listener = new StaleListener(); - - // precondition - ensureStale(observable, false); - - observable.addStaleListener(listener); - delegate.setStale(observable, true); - - assertEquals(formatFail("When becoming stale listeners should be notified."), 1, listener.count); - } - - public void testStaleEventObservable() throws Exception { - StaleListener listener = new StaleListener(); - - // precondition - ensureStale(observable, false); - - observable.addStaleListener(listener); - delegate.setStale(observable, true); - - StaleEvent event = listener.event; - assertNotNull(formatFail("stale event was null"), event); - assertEquals(formatFail("When notifying listeners of becoming stale the observable should be the source of the event."), observable, - event.getObservable()); - } - - public void testRemoveStaleListener_RemovesListener() throws Exception { - StaleListener listener = new StaleListener(); - - observable.addStaleListener(listener); - ensureStale(observable, false); - delegate.setStale(observable, true); - - // precondition check - assertEquals(formatFail("set stale did not notify listeners"), 1, listener.count); - - observable.removeStaleListener(listener); - ensureStale(observable, false); - delegate.setStale(observable, true); - - assertEquals(formatFail("Once removed stale listeners should not be notified of becoming stale."), 1, - listener.count); - } - - public void testStaleListenersAreNotNotifiedWhenObservableIsNoLongerStale() - throws Exception { - ensureStale(observable, true); - - StaleListener listener = new StaleListener(); - observable.addStaleListener(listener); - delegate.setStale(observable, false); - - assertEquals(formatFail("Stale listeners should not be notified when the stale state changes from true to false."), 0, - listener.count); - } - - public void testObservableRealmIsCurrentOnStale() throws Exception { - ensureStale(observable, false); - - StaleListener listener = new StaleListener(); - observable.addStaleListener(listener); - delegate.setStale(observable, true); - - assertTrue(formatFail("When notifying listeners of becoming stale the observable's realm should be the current realm."), - listener.isCurrentRealm); - } - - /** - * Ensures that stale is set to the provided state. Will throw an - * AssertionFailedError if setting of the state is unsuccessful. - * - * @param observable - * @param stale - */ - private void ensureStale(IObservable observable, boolean stale) { - if (observable.isStale() != stale) { - delegate.setStale(observable, stale); - } - - assertEquals(stale, observable.isStale()); - } - - /* package */static class StaleListener implements IStaleListener { - int count; - - StaleEvent event; - - boolean isCurrentRealm; - - public void handleStale(StaleEvent staleEvent) { - count++; - this.event = staleEvent; - this.isCurrentRealm = staleEvent.getObservable().getRealm() - .isCurrent(); - } - } - -} Index: src/org/eclipse/jface/conformance/databinding/SuiteBuilder.java =================================================================== RCS file: src/org/eclipse/jface/conformance/databinding/SuiteBuilder.java diff -N src/org/eclipse/jface/conformance/databinding/SuiteBuilder.java --- src/org/eclipse/jface/conformance/databinding/SuiteBuilder.java 9 Sep 2007 03:46:51 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,179 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Brad Reynolds 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: - * Brad Reynolds - initial API and implementation - ******************************************************************************/ - -package org.eclipse.jface.conformance.databinding; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.util.Iterator; -import java.util.LinkedHashSet; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * Builds a test suite. - * - * @since 1.1 - */ -public class SuiteBuilder { - private LinkedHashSet content; - - public SuiteBuilder() { - content = new LinkedHashSet(); - } - - /** - * Adds all test methods from the providedtestCase
to the
- * suite.
- *
- * @param testCase
- * @return builder
- */
- public SuiteBuilder addTests(Class testCase) {
- content.add(testCase);
- return this;
- }
-
- /**
- * Adds all test methods from the provided testCase
with the
- * provided parameters
. A constructor must exist in the
- * testCase that accepts a String as the first parameter followed by
- * parameters matching the provided parameters. If an appropriate
- * constructor is not found an exception will be thrown.
- *
- * @param testCase
- * @param parameters
- * @return builder
- */
- public SuiteBuilder addParameterizedTests(Class testCase,
- Object[] parameters) {
-
- Constructor constructor = findConstructor(testCase, parameters);
- if (constructor == null) {
- throw new IllegalArgumentException(
- "The parameters provided don't match a constructor found in ["
- + testCase.getName() + "]");
- }
-
- content.add(new ParameterizedTest(testCase, constructor, parameters));
-
- return this;
- }
-
- /**
- * Convenience method for invoking
- * {@link #addParameterizedTests(Class, Object[])} with a delegate.
- *
- * @param testCase
- * @param delegate
- * @return
- */
- public SuiteBuilder addObservableContractTest(Class testCase,
- IObservableContractDelegate delegate) {
-
- addParameterizedTests(testCase, new Object[] {delegate});
- return this;
- }
-
- /**
- * Builds a new TestSuite out of the tests.
- *
- * @return suite
- */
- public TestSuite build() {
- TestSuite suite = new TestSuite();
-
- for (Iterator it = content.iterator(); it.hasNext();) {
- Object o = it.next();
- if (o instanceof Class) {
- suite.addTestSuite((Class) o);
- } else if (o instanceof ParameterizedTest) {
- ParameterizedTest test = (ParameterizedTest) o;
-
- Method[] methods = test.testClass.getMethods();
- for (int i = 0; i < methods.length; i++) {
- String name = methods[i].getName();
- if (name.startsWith("test")) {
- try {
- suite.addTest((Test) test.constructor
- .newInstance(toParamArray(name,
- test.parameters)));
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- }
- }
- }
-
- return suite;
- }
-
- private Object[] toParamArray(String testName, Object[] parameters) {
- Object[] result = new Object[parameters.length + 1];
- result[0] = testName;
- System.arraycopy(parameters, 0, result, 1, parameters.length);
- return result;
- }
-
- /**
- * Returns the constructor that has a String as the first parameters and
- * then matches the type of the parameters.
- *
- * @param parameters
- * @return
- */
- private static Constructor findConstructor(Class clazz, Object[] parameters) {
- Constructor[] constructors = clazz.getConstructors();
- int expectedParametersLength = parameters.length + 1;
-
- for (int i = 0; i < constructors.length; i++) {
- Constructor constructor = constructors[i];
- Class[] types = constructor.getParameterTypes();
-
- if (types.length != expectedParametersLength
- || !String.class.equals(types[0])) {
- continue;
- }
-
- boolean skip = false;
- for (int j = 1; j < types.length; j++) {
- Class type = types[j];
- if (!type.isInstance(parameters[j - 1])) {
- skip = true;
- break;
- }
- }
-
- if (!skip) {
- return constructor;
- }
- }
-
- return null;
- }
-
- /* package */static class ParameterizedTest {
- final Constructor constructor;
-
- final Object[] parameters;
-
- private Class testClass;
-
- ParameterizedTest(Class testClass, Constructor constructor,
- Object[] parameterss) {
- this.testClass = testClass;
- this.constructor = constructor;
- this.parameters = parameterss;
- }
- }
-}
Index: src/org/eclipse/core/tests/databinding/observable/list/AbstractObservableListTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/AbstractObservableListTest.java,v
retrieving revision 1.2
diff -u -r1.2 AbstractObservableListTest.java
--- src/org/eclipse/core/tests/databinding/observable/list/AbstractObservableListTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/list/AbstractObservableListTest.java 16 Sep 2007 00:32:58 -0000
@@ -25,11 +25,11 @@
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.AbstractObservableList;
import org.eclipse.core.databinding.observable.list.ListDiff;
-import org.eclipse.jface.conformance.databinding.AbstractObservableCollectionContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableListContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.ObservableListContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
/**
* @since 3.2
Index: src/org/eclipse/core/tests/databinding/observable/list/ObservableListTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ObservableListTest.java,v
retrieving revision 1.2
diff -u -r1.2 ObservableListTest.java
--- src/org/eclipse/core/tests/databinding/observable/list/ObservableListTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/list/ObservableListTest.java 16 Sep 2007 00:32:58 -0000
@@ -24,11 +24,11 @@
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.ListDiff;
import org.eclipse.core.databinding.observable.list.ObservableList;
-import org.eclipse.jface.conformance.databinding.AbstractObservableCollectionContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableListContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.ObservableListContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
/**
* @since 3.2
Index: src/org/eclipse/core/tests/databinding/observable/list/WritableListTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/WritableListTest.java,v
retrieving revision 1.2
diff -u -r1.2 WritableListTest.java
--- src/org/eclipse/core/tests/databinding/observable/list/WritableListTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/list/WritableListTest.java 16 Sep 2007 00:32:58 -0000
@@ -22,13 +22,13 @@
import org.eclipse.core.databinding.observable.IObservableCollection;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.WritableList;
-import org.eclipse.jface.conformance.databinding.AbstractObservableCollectionContractDelegate;
-import org.eclipse.jface.conformance.databinding.MutableObservableListContractTest;
-import org.eclipse.jface.conformance.databinding.ObservableListContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.MutableObservableListContractTest;
+import org.eclipse.jface.databinding.conformance.ObservableListContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
import org.eclipse.swt.widgets.Display;
/**
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueMaxTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueMaxTest.java,v
retrieving revision 1.2
diff -u -r1.2 ScaleObservableValueMaxTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueMaxTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueMaxTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.internal.databinding.internal.swt.ScaleObservableValue;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueMaxTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueMaxTest.java,v
retrieving revision 1.2
diff -u -r1.2 SpinnerObservableValueMaxTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueMaxTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueMaxTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.internal.databinding.internal.swt.SpinnerObservableValue;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueTextTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueTextTest.java,v
retrieving revision 1.2
diff -u -r1.2 ComboObservableValueTextTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueTextTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueTextTest.java 16 Sep 2007 00:32:58 -0000
@@ -17,15 +17,15 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.databinding.swt.ISWTObservable;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.ComboObservableValue;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Display;
@@ -58,8 +58,8 @@
IObservableValue observable = delegate
.createObservableValue(SWTObservables.getRealm(Display
.getDefault()));
- ValueChangeEventTracker listener = new ValueChangeEventTracker()
- .register(observable);
+ ValueChangeEventTracker listener = ValueChangeEventTracker
+ .observe(observable);
combo.setText((String) delegate.createValue(observable));
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueSelectionTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueSelectionTest.java,v
retrieving revision 1.2
diff -u -r1.2 ComboObservableValueSelectionTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueSelectionTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueSelectionTest.java 16 Sep 2007 00:32:58 -0000
@@ -17,15 +17,15 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.databinding.swt.ISWTObservable;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.ComboObservableValue;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Display;
@@ -58,8 +58,8 @@
IObservableValue observable = (IObservableValue) delegate
.createObservable(SWTObservables.getRealm(Display.getDefault()));
- ValueChangeEventTracker listener = new ValueChangeEventTracker()
- .register(observable);
+ ValueChangeEventTracker listener = ValueChangeEventTracker
+ .observe(observable);
combo.select(0);
combo.notifyListeners(SWT.Selection, null);
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueTest.java,v
retrieving revision 1.3
diff -u -r1.3 ComboObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.3
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/ComboObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -12,10 +12,10 @@
package org.eclipse.jface.tests.internal.databinding.internal.swt;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.internal.databinding.internal.swt.ComboObservableValue;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Combo;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueSelectionTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueSelectionTest.java,v
retrieving revision 1.2
diff -u -r1.2 ScaleObservableValueSelectionTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueSelectionTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueSelectionTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.internal.databinding.internal.swt.ScaleObservableValue;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/LabelObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/LabelObservableValueTest.java,v
retrieving revision 1.2
diff -u -r1.2 LabelObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/LabelObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/LabelObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.LabelObservableValue;
import org.eclipse.swt.SWT;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueSelectionTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueSelectionTest.java,v
retrieving revision 1.2
diff -u -r1.2 CComboObservableValueSelectionTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueSelectionTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueSelectionTest.java 16 Sep 2007 00:32:58 -0000
@@ -17,15 +17,15 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.databinding.swt.ISWTObservable;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.CComboObservableValue;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.widgets.Display;
@@ -57,8 +57,7 @@
IObservableValue observable = (IObservableValue) delegate
.createObservable(SWTObservables.getRealm(Display.getDefault()));
- ValueChangeEventTracker listener = new ValueChangeEventTracker()
- .register(observable);
+ ValueChangeEventTracker listener = ValueChangeEventTracker.observe(observable);
combo.select(0);
assertEquals("Observable was not notified.", 1, listener.count);
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/TableSingleSelectionObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/TableSingleSelectionObservableValueTest.java,v
retrieving revision 1.2
diff -u -r1.2 TableSingleSelectionObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/TableSingleSelectionObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/TableSingleSelectionObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.TableSingleSelectionObservableValue;
import org.eclipse.jface.util.Assert;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/TextEditableObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/TextEditableObservableValueTest.java,v
retrieving revision 1.2
diff -u -r1.2 TextEditableObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/TextEditableObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/TextEditableObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.internal.databinding.internal.swt.TextEditableObservableValue;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueMinTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueMinTest.java,v
retrieving revision 1.2
diff -u -r1.2 ScaleObservableValueMinTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueMinTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/ScaleObservableValueMinTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.internal.databinding.internal.swt.ScaleObservableValue;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueTest.java,v
retrieving revision 1.4
diff -u -r1.4 SpinnerObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.4
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -12,10 +12,10 @@
package org.eclipse.jface.tests.internal.databinding.internal.swt;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.internal.databinding.internal.swt.SpinnerObservableValue;
import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Spinner;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/ButtonObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/ButtonObservableValueTest.java,v
retrieving revision 1.3
diff -u -r1.3 ButtonObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/ButtonObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.3
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/ButtonObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -17,13 +17,13 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.internal.databinding.internal.swt.ButtonObservableValue;
import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Shell;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/TextObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/TextObservableValueTest.java,v
retrieving revision 1.4
diff -u -r1.4 TextObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/TextObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.4
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/TextObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -14,9 +14,9 @@
package org.eclipse.jface.tests.internal.databinding.internal.swt;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.internal.databinding.internal.swt.TextObservableValue;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueTextTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueTextTest.java,v
retrieving revision 1.2
diff -u -r1.2 CComboObservableValueTextTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueTextTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueTextTest.java 16 Sep 2007 00:32:58 -0000
@@ -17,15 +17,15 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.databinding.swt.ISWTObservable;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.CComboObservableValue;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.widgets.Display;
@@ -57,8 +57,8 @@
IObservableValue observable = delegate
.createObservableValue(SWTObservables.getRealm(Display
.getDefault()));
- ValueChangeEventTracker listener = new ValueChangeEventTracker()
- .register(observable);
+ ValueChangeEventTracker listener = ValueChangeEventTracker
+ .observe(observable);
combo.setText((String) delegate.createValue(observable));
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/CLabelObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CLabelObservableValueTest.java,v
retrieving revision 1.2
diff -u -r1.2 CLabelObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/CLabelObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/CLabelObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -17,10 +17,10 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.CLabelObservableValue;
import org.eclipse.swt.SWT;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueMinTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueMinTest.java,v
retrieving revision 1.2
diff -u -r1.2 SpinnerObservableValueMinTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueMinTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueMinTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.internal.databinding.internal.swt.SpinnerObservableValue;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboSingleSelectionObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboSingleSelectionObservableValueTest.java,v
retrieving revision 1.3
diff -u -r1.3 CComboSingleSelectionObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboSingleSelectionObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.3
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboSingleSelectionObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -17,10 +17,10 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.ISWTObservable;
import org.eclipse.jface.internal.databinding.internal.swt.CComboSingleSelectionObservableValue;
import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueTest.java,v
retrieving revision 1.3
diff -u -r1.3 CComboObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.3
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/CComboObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -12,10 +12,10 @@
package org.eclipse.jface.tests.internal.databinding.internal.swt;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.internal.databinding.internal.swt.CComboObservableValue;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueSelectionTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueSelectionTest.java,v
retrieving revision 1.2
diff -u -r1.2 SpinnerObservableValueSelectionTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueSelectionTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/jface/tests/internal/databinding/internal/swt/SpinnerObservableValueSelectionTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,11 +16,11 @@
import org.eclipse.core.databinding.observable.IObservable;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableDelegateTest;
-import org.eclipse.jface.conformance.databinding.SWTMutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SWTObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableDelegateTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.swt.SWTMutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.swt.SWTObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.SWTProperties;
import org.eclipse.jface.internal.databinding.internal.swt.SpinnerObservableValue;
Index: src/org/eclipse/core/tests/databinding/observable/map/WritableMapTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/WritableMapTest.java,v
retrieving revision 1.4
diff -u -r1.4 WritableMapTest.java
--- src/org/eclipse/core/tests/databinding/observable/map/WritableMapTest.java 1 May 2007 01:57:22 -0000 1.4
+++ src/org/eclipse/core/tests/databinding/observable/map/WritableMapTest.java 16 Sep 2007 00:32:58 -0000
@@ -19,9 +19,9 @@
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.map.MapChangeEvent;
import org.eclipse.core.databinding.observable.map.WritableMap;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.EventTrackers.MapChangeEventTracker;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.MapChangeEventTracker;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
/**
* @since 3.2
Index: src/org/eclipse/core/tests/databinding/observable/map/ObservableMapTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ObservableMapTest.java,v
retrieving revision 1.6
diff -u -r1.6 ObservableMapTest.java
--- src/org/eclipse/core/tests/databinding/observable/map/ObservableMapTest.java 14 Apr 2007 20:46:40 -0000 1.6
+++ src/org/eclipse/core/tests/databinding/observable/map/ObservableMapTest.java 16 Sep 2007 00:32:58 -0000
@@ -20,8 +20,8 @@
import org.eclipse.core.databinding.observable.map.MapChangeEvent;
import org.eclipse.core.databinding.observable.map.MapDiff;
import org.eclipse.core.databinding.observable.map.ObservableMap;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
/**
* @since 3.2
Index: src/org/eclipse/core/tests/databinding/observable/map/AbstractObservableMapTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/AbstractObservableMapTest.java,v
retrieving revision 1.3
diff -u -r1.3 AbstractObservableMapTest.java
--- src/org/eclipse/core/tests/databinding/observable/map/AbstractObservableMapTest.java 14 Apr 2007 20:46:40 -0000 1.3
+++ src/org/eclipse/core/tests/databinding/observable/map/AbstractObservableMapTest.java 16 Sep 2007 00:32:58 -0000
@@ -17,8 +17,8 @@
import org.eclipse.core.databinding.observable.map.AbstractObservableMap;
import org.eclipse.core.databinding.observable.map.MapDiff;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
/**
* @since 3.2
Index: src/org/eclipse/jface/tests/databinding/swt/SWTObservablesTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/SWTObservablesTest.java,v
retrieving revision 1.7
diff -u -r1.7 SWTObservablesTest.java
--- src/org/eclipse/jface/tests/databinding/swt/SWTObservablesTest.java 15 May 2007 19:52:36 -0000 1.7
+++ src/org/eclipse/jface/tests/databinding/swt/SWTObservablesTest.java 16 Sep 2007 00:32:58 -0000
@@ -12,6 +12,7 @@
package org.eclipse.jface.tests.databinding.swt;
import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.swt.ButtonObservableValue;
@@ -30,7 +31,6 @@
import org.eclipse.jface.internal.databinding.internal.swt.TextEditableObservableValue;
import org.eclipse.jface.internal.databinding.internal.swt.TextObservableValue;
import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
-import org.eclipse.jface.tests.databinding.RealmTester;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.CLabel;
Index: src/org/eclipse/core/tests/databinding/observable/set/UnionSetTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/UnionSetTest.java,v
retrieving revision 1.2
diff -u -r1.2 UnionSetTest.java
--- src/org/eclipse/core/tests/databinding/observable/set/UnionSetTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/set/UnionSetTest.java 16 Sep 2007 00:32:58 -0000
@@ -20,9 +20,9 @@
import org.eclipse.core.databinding.observable.set.IObservableSet;
import org.eclipse.core.databinding.observable.set.UnionSet;
import org.eclipse.core.databinding.observable.set.WritableSet;
-import org.eclipse.jface.conformance.databinding.AbstractObservableCollectionContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableCollectionContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableCollectionContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
/**
*/
Index: src/org/eclipse/core/tests/databinding/observable/set/AbstractObservableSetTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/AbstractObservableSetTest.java,v
retrieving revision 1.2
diff -u -r1.2 AbstractObservableSetTest.java
--- src/org/eclipse/core/tests/databinding/observable/set/AbstractObservableSetTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/set/AbstractObservableSetTest.java 16 Sep 2007 00:32:58 -0000
@@ -23,9 +23,9 @@
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.set.AbstractObservableSet;
import org.eclipse.core.databinding.observable.set.SetDiff;
-import org.eclipse.jface.conformance.databinding.AbstractObservableCollectionContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableCollectionContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableCollectionContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
/**
*/
Index: src/org/eclipse/core/tests/databinding/observable/set/ObservableSetTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ObservableSetTest.java,v
retrieving revision 1.2
diff -u -r1.2 ObservableSetTest.java
--- src/org/eclipse/core/tests/databinding/observable/set/ObservableSetTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/set/ObservableSetTest.java 16 Sep 2007 00:32:58 -0000
@@ -24,9 +24,9 @@
import org.eclipse.core.databinding.observable.set.IObservableSet;
import org.eclipse.core.databinding.observable.set.ObservableSet;
import org.eclipse.core.databinding.observable.set.SetDiff;
-import org.eclipse.jface.conformance.databinding.AbstractObservableCollectionContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableCollectionContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableCollectionContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
/**
* @since 1.1
Index: src/org/eclipse/core/tests/databinding/observable/set/WritableSetTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/WritableSetTest.java,v
retrieving revision 1.2
diff -u -r1.2 WritableSetTest.java
--- src/org/eclipse/core/tests/databinding/observable/set/WritableSetTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/set/WritableSetTest.java 16 Sep 2007 00:32:58 -0000
@@ -19,10 +19,10 @@
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.set.IObservableSet;
import org.eclipse.core.databinding.observable.set.WritableSet;
-import org.eclipse.jface.conformance.databinding.AbstractObservableCollectionContractDelegate;
-import org.eclipse.jface.conformance.databinding.MutableObservableSetContractTest;
-import org.eclipse.jface.conformance.databinding.ObservableCollectionContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.MutableObservableSetContractTest;
+import org.eclipse.jface.databinding.conformance.ObservableCollectionContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
/**
Index: src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderSingleSelectionObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderSingleSelectionObservableValueTest.java,v
retrieving revision 1.9
diff -u -r1.9 SelectionProviderSingleSelectionObservableValueTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderSingleSelectionObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.9
+++ src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderSingleSelectionObservableValueTest.java 16 Sep 2007 00:32:59 -0000
@@ -14,9 +14,9 @@
import junit.framework.TestCase;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.viewers.SelectionProviderSingleSelectionObservableValue;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.StructuredSelection;
Index: src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderMultiSelectionObservableListTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderMultiSelectionObservableListTest.java,v
retrieving revision 1.1
diff -u -r1.1 SelectionProviderMultiSelectionObservableListTest.java
--- src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderMultiSelectionObservableListTest.java 17 Aug 2007 20:30:10 -0000 1.1
+++ src/org/eclipse/jface/tests/internal/databinding/internal/viewers/SelectionProviderMultiSelectionObservableListTest.java 16 Sep 2007 00:32:59 -0000
@@ -14,9 +14,9 @@
import junit.framework.TestCase;
import org.eclipse.core.databinding.observable.list.ListDiffEntry;
+import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.internal.databinding.internal.viewers.SelectionProviderMultipleSelectionObservableList;
-import org.eclipse.jface.tests.databinding.EventTrackers.ListChangeEventTracker;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
Index: src/org/eclipse/core/tests/databinding/observable/AbstractObservableTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/AbstractObservableTest.java,v
retrieving revision 1.2
diff -u -r1.2 AbstractObservableTest.java
--- src/org/eclipse/core/tests/databinding/observable/AbstractObservableTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/AbstractObservableTest.java 16 Sep 2007 00:32:58 -0000
@@ -19,14 +19,14 @@
import org.eclipse.core.databinding.observable.IStaleListener;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.StaleEvent;
-import org.eclipse.jface.conformance.databinding.AbstractObservableContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableContractTest;
-import org.eclipse.jface.conformance.databinding.ObservableStaleContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableContractTest;
+import org.eclipse.jface.databinding.conformance.ObservableStaleContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.EventTrackers.ChangeEventTracker;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
/**
* Tests for AbstractObservable.
Index: src/org/eclipse/core/tests/databinding/observable/RealmTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/RealmTest.java,v
retrieving revision 1.4
diff -u -r1.4 RealmTest.java
--- src/org/eclipse/core/tests/databinding/observable/RealmTest.java 14 Apr 2007 20:46:40 -0000 1.4
+++ src/org/eclipse/core/tests/databinding/observable/RealmTest.java 16 Sep 2007 00:32:58 -0000
@@ -14,8 +14,8 @@
import junit.framework.TestCase;
import org.eclipse.core.databinding.observable.Realm;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
/**
* @since 3.2
Index: src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java,v
retrieving revision 1.3
diff -u -r1.3 AbstractDefaultRealmTestCase.java
--- src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java 14 Apr 2007 20:46:39 -0000 1.3
+++ src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java 16 Sep 2007 00:32:58 -0000
@@ -14,6 +14,7 @@
import junit.framework.TestCase;
import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.widgets.Display;
Index: src/org/eclipse/jface/tests/databinding/RealmTester.java
===================================================================
RCS file: src/org/eclipse/jface/tests/databinding/RealmTester.java
diff -N src/org/eclipse/jface/tests/databinding/RealmTester.java
--- src/org/eclipse/jface/tests/databinding/RealmTester.java 9 Sep 2007 03:46:51 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,168 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Brad Reynolds 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:
- * Brad Reynolds - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.jface.tests.databinding;
-
-import junit.framework.Assert;
-
-import org.eclipse.core.databinding.observable.Realm;
-import org.eclipse.core.runtime.AssertionFailedException;
-
-/**
- * Aids in the testing of Realms.
- *
- * @since 3.2
- */
-public class RealmTester {
-
- /**
- * Sets the default realm without using Realm.runWithDefault() for testing
- * purposes.
- *
- * @param realm
- */
- public static void setDefault(Realm realm) {
- CurrentRealm.setDefault(realm);
- }
-
- /**
- * Runs the provided runnable
when the realm is both current
- * and not current. It checks for AssertionFailedExceptions and if an
- * exception occurs or doesn't occur as expected the test fails. The realm
- * of an observable created before the method was invoked must be of type
- * {@link CurrentRealm}. The default realm during the runnable invocation
- * is set to an instance of {@link CurrentRealm} when the runnable is
- * invoked.
- *
- * @param runnable
- */
- public static void exerciseCurrent(Runnable runnable) {
- CurrentRealm previousRealm = (CurrentRealm) Realm.getDefault();
- CurrentRealm realm = new CurrentRealm();
- setDefault(realm);
-
- try {
- realm.setCurrent(true);
- if (previousRealm != null) {
- previousRealm.setCurrent(true);
- }
-
- try {
- runnable.run();
- } catch (AssertionFailedException e) {
- Assert
- .fail("Correct realm, exception should not have been thrown");
- }
-
- realm.setCurrent(false);
- if (previousRealm != null) {
- previousRealm.setCurrent(false);
- }
-
- try {
- runnable.run();
- Assert
- .fail("Incorrect realm, exception should have been thrown");
- } catch (AssertionFailedException e) {
- }
- } finally {
- setDefault(previousRealm);
- }
- }
-
- /**
- * Runs the provided runnable
when the realm is both current
- * and not current. It checks for AssertionFailedExceptions and if an
- * exception occurs or doesn't occur as expected the test fails.
- *
- * @param runnable
- * @param realm
- */
- public static void exerciseCurrent(Runnable runnable, CurrentRealm realm) {
- realm.setCurrent(true);
-
- try {
- runnable.run();
- } catch (AssertionFailedException e) {
- Assert.fail("Correct realm, exception should not have been thrown");
- }
-
- realm.setCurrent(false);
-
- try {
- runnable.run();
- Assert.fail("Incorrect realm, exception should have been thrown");
- } catch (AssertionFailedException e) {
- }
- }
-
- /**
- * Realm that will delegate to another for all operations except calls to
- * {@link #isCurrent()}. The current status can be set by the consumer to
- * enable testing of realm checks.
- *
- * @since 3.2
- */
- public static class DelegatingRealm extends CurrentRealm {
- private Realm realm;
-
- public DelegatingRealm(Realm realm) {
- this.realm = realm;
- }
-
- protected void syncExec(Runnable runnable) {
- realm.exec(runnable);
- }
-
- public void asyncExec(Runnable runnable) {
- realm.asyncExec(runnable);
- }
- }
-
- /**
- * Allows for the toggling of the current status of the realm. The
- * asyncExec(...) implementations do nothing.
- *
- * @since 3.2
- */
- public static class CurrentRealm extends Realm {
- private boolean current;
-
- public CurrentRealm() {
- this(false);
- }
-
- public CurrentRealm(boolean current) {
- this.current = current;
- }
-
- public boolean isCurrent() {
- return current;
- }
-
- public void setCurrent(boolean current) {
- this.current = current;
- }
-
- protected void syncExec(Runnable runnable) {
- super.syncExec(runnable);
- }
-
- public void asyncExec(Runnable runnable) {
- throw new UnsupportedOperationException(
- "CurrentRealm does not support asyncExec(Runnable).");
- }
-
- protected static Realm setDefault(Realm realm) {
- return Realm.setDefault(realm);
- }
- }
-}
Index: src/org/eclipse/jface/tests/databinding/EventTrackers.java
===================================================================
RCS file: src/org/eclipse/jface/tests/databinding/EventTrackers.java
diff -N src/org/eclipse/jface/tests/databinding/EventTrackers.java
--- src/org/eclipse/jface/tests/databinding/EventTrackers.java 9 Sep 2007 03:46:51 -0000 1.4
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,175 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.jface.tests.databinding;
-
-import java.util.List;
-
-import org.eclipse.core.databinding.observable.ChangeEvent;
-import org.eclipse.core.databinding.observable.IChangeListener;
-import org.eclipse.core.databinding.observable.IObservable;
-import org.eclipse.core.databinding.observable.list.IListChangeListener;
-import org.eclipse.core.databinding.observable.list.ListChangeEvent;
-import org.eclipse.core.databinding.observable.map.IMapChangeListener;
-import org.eclipse.core.databinding.observable.map.MapChangeEvent;
-import org.eclipse.core.databinding.observable.set.ISetChangeListener;
-import org.eclipse.core.databinding.observable.set.SetChangeEvent;
-import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.core.databinding.observable.value.IValueChangeListener;
-import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
-
-/**
- * Implementations of change listeners that keep track of the number of times an
- * event fires.
- *
- * @since 1.1
- */
-public class EventTrackers {
- public static class ChangeEventTracker implements IChangeListener {
- public int count;
-
- public ChangeEvent event;
-
- /**
- * Queue that the listener will add itself too when it is notified of an
- * event. Used to determine order of notifications of listeners.
- */
- public final List notificationQueue;
-
- public ChangeEventTracker() {
- notificationQueue = null;
- }
-
- public ChangeEventTracker(List notificationQueue) {
- this.notificationQueue = notificationQueue;
- }
-
- public void handleChange(ChangeEvent event) {
- count++;
- this.event = event;
- if (notificationQueue != null) {
- notificationQueue.add(this);
- }
- }
-
- /**
- * Convenience method to register the listener on an observable allowing for one line setup.
- *
- * ChangeEventTracker listener = new ChangeEventTracker().register(observable);
- *
- *
- * @param observable
- * @return
- */
- public ChangeEventTracker register(IObservable observable) {
- observable.addChangeListener(this);
- return this;
- }
- }
-
- public static class ValueChangeEventTracker implements IValueChangeListener {
- public int count;
-
- public ValueChangeEvent event;
-
- public ValueChangeEventTracker() {
- }
-
- public void handleValueChange(ValueChangeEvent event) {
- count++;
- this.event = event;
- }
-
- /**
- * Convenience method to register the listener on an observable allowing for one line setup.
- *
- * ValueChangeEventTracker listener = new ValueChangeEventTracker().register(observable);
- *
- *
- * @param observable
- * @return
- */
- public ValueChangeEventTracker register(IObservableValue observable) {
- observable.addValueChangeListener(this);
- return this;
- }
- }
-
- public static class MapChangeEventTracker implements IMapChangeListener {
- public int count;
-
- public MapChangeEvent event;
-
- public MapChangeEventTracker() {
- }
-
- public void handleMapChange(MapChangeEvent event) {
- count++;
- this.event = event;
- }
- }
-
- public static class ListChangeEventTracker implements IListChangeListener {
- public int count;
-
- public ListChangeEvent event;
-
- /**
- * Queue that the listener will add itself too when it is notified of an
- * event. Used to determine order of notifications of listeners.
- */
- public final List notificationQueue;
-
- public ListChangeEventTracker() {
- notificationQueue = null;
- }
-
- public ListChangeEventTracker(List notificationQueue) {
- this.notificationQueue = notificationQueue;
- }
-
- public void handleListChange(ListChangeEvent event) {
- count++;
- this.event = event;
- if (notificationQueue != null) {
- notificationQueue.add(this);
- }
- }
- }
-
- public static class SetChangeEventTracker implements ISetChangeListener {
- public int count;
-
- public SetChangeEvent event;
-
- /**
- * Queue that the listener will add itself too when it is notified of an
- * event. Used to determine order of notifications of listeners.
- */
- public final List notificationQueue;
-
- public SetChangeEventTracker() {
- notificationQueue = null;
- }
-
- public SetChangeEventTracker(List notificationQueue) {
- this.notificationQueue = notificationQueue;
- }
-
- public void handleSetChange(SetChangeEvent event) {
- count++;
- this.event = event;
- if (notificationQueue != null) {
- notificationQueue.add(this);
- }
- }
- }
-}
Index: src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableValueTest.java,v
retrieving revision 1.5
diff -u -r1.5 JavaBeanObservableValueTest.java
--- src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableValueTest.java 9 Sep 2007 03:46:51 -0000 1.5
+++ src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -26,9 +26,9 @@
import org.eclipse.core.databinding.observable.value.ComputedValue;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.internal.databinding.internal.beans.JavaBeanObservableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.ObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.ObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.examples.databinding.model.SimplePerson;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
Index: src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableArrayBasedListTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableArrayBasedListTest.java,v
retrieving revision 1.1
diff -u -r1.1 JavaBeanObservableArrayBasedListTest.java
--- src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableArrayBasedListTest.java 16 May 2007 03:08:42 -0000 1.1
+++ src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableArrayBasedListTest.java 16 Sep 2007 00:32:58 -0000
@@ -22,9 +22,9 @@
import org.eclipse.core.databinding.observable.list.ListChangeEvent;
import org.eclipse.core.databinding.observable.list.ListDiffEntry;
import org.eclipse.core.internal.databinding.internal.beans.JavaBeanObservableList;
+import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
-import org.eclipse.jface.tests.databinding.EventTrackers.ListChangeEventTracker;
import org.eclipse.swt.widgets.Display;
/**
Index: src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableListTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableListTest.java,v
retrieving revision 1.2
diff -u -r1.2 JavaBeanObservableListTest.java
--- src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableListTest.java 16 May 2007 03:08:42 -0000 1.2
+++ src/org/eclipse/core/tests/internal/databinding/internal/beans/JavaBeanObservableListTest.java 16 Sep 2007 00:32:58 -0000
@@ -22,9 +22,9 @@
import org.eclipse.core.databinding.observable.list.ListChangeEvent;
import org.eclipse.core.databinding.observable.list.ListDiffEntry;
import org.eclipse.core.internal.databinding.internal.beans.JavaBeanObservableList;
+import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
-import org.eclipse.jface.tests.databinding.EventTrackers.ListChangeEventTracker;
import org.eclipse.swt.widgets.Display;
/**
Index: src/org/eclipse/core/tests/databinding/DatabindingContextTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/DatabindingContextTest.java,v
retrieving revision 1.1
diff -u -r1.1 DatabindingContextTest.java
--- src/org/eclipse/core/tests/databinding/DatabindingContextTest.java 14 Apr 2007 20:46:41 -0000 1.1
+++ src/org/eclipse/core/tests/databinding/DatabindingContextTest.java 16 Sep 2007 00:32:58 -0000
@@ -29,9 +29,9 @@
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
+import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
-import org.eclipse.jface.tests.databinding.EventTrackers.ChangeEventTracker;
-import org.eclipse.jface.tests.databinding.EventTrackers.ValueChangeEventTracker;
public class DatabindingContextTest extends AbstractDefaultRealmTestCase {
private DataBindingContext dbc;
Index: src/org/eclipse/core/tests/databinding/observable/value/AbstractObservableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractObservableValueTest.java,v
retrieving revision 1.1
diff -u -r1.1 AbstractObservableValueTest.java
--- src/org/eclipse/core/tests/databinding/observable/value/AbstractObservableValueTest.java 14 Apr 2007 20:46:39 -0000 1.1
+++ src/org/eclipse/core/tests/databinding/observable/value/AbstractObservableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,8 +16,8 @@
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
import org.eclipse.core.databinding.observable.value.ValueDiff;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
/**
* @since 3.2
Index: src/org/eclipse/core/tests/databinding/observable/value/WritableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/WritableValueTest.java,v
retrieving revision 1.2
diff -u -r1.2 WritableValueTest.java
--- src/org/eclipse/core/tests/databinding/observable/value/WritableValueTest.java 9 Sep 2007 03:46:51 -0000 1.2
+++ src/org/eclipse/core/tests/databinding/observable/value/WritableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -18,10 +18,10 @@
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.jface.conformance.databinding.AbstractObservableValueContractDelegate;
-import org.eclipse.jface.conformance.databinding.MutableObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.ObservableValueContractTest;
-import org.eclipse.jface.conformance.databinding.SuiteBuilder;
+import org.eclipse.jface.databinding.conformance.MutableObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.ObservableValueContractTest;
+import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
+import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
import org.eclipse.swt.widgets.Display;
Index: src/org/eclipse/core/tests/databinding/observable/value/AbstractVetoableValueTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractVetoableValueTest.java,v
retrieving revision 1.1
diff -u -r1.1 AbstractVetoableValueTest.java
--- src/org/eclipse/core/tests/databinding/observable/value/AbstractVetoableValueTest.java 14 Apr 2007 20:46:39 -0000 1.1
+++ src/org/eclipse/core/tests/databinding/observable/value/AbstractVetoableValueTest.java 16 Sep 2007 00:32:58 -0000
@@ -16,8 +16,8 @@
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.AbstractVetoableValue;
import org.eclipse.core.databinding.observable.value.ValueDiff;
-import org.eclipse.jface.tests.databinding.RealmTester;
-import org.eclipse.jface.tests.databinding.RealmTester.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
/**
* @since 3.2
Index: META-INF/MANIFEST.MF
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/META-INF/MANIFEST.MF,v
retrieving revision 1.14
diff -u -r1.14 MANIFEST.MF
--- META-INF/MANIFEST.MF 16 Mar 2007 21:19:34 -0000 1.14
+++ META-INF/MANIFEST.MF 16 Sep 2007 00:32:58 -0000
@@ -14,6 +14,7 @@
org.eclipse.core.runtime,
org.eclipse.jface.examples.databinding,
org.eclipse.core.databinding.beans,
- org.eclipse.jface.databinding
+ org.eclipse.jface.databinding,
+ org.eclipse.jface.tests.databinding.conformance
Import-Package: com.ibm.icu.text
Index: src/org/eclipse/jface/tests/databinding/scenarios/ScenariosTestCase.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ScenariosTestCase.java,v
retrieving revision 1.15
diff -u -r1.15 ScenariosTestCase.java
--- src/org/eclipse/jface/tests/databinding/scenarios/ScenariosTestCase.java 14 Apr 2007 20:46:40 -0000 1.15
+++ src/org/eclipse/jface/tests/databinding/scenarios/ScenariosTestCase.java 16 Sep 2007 00:32:58 -0000
@@ -17,9 +17,9 @@
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.jface.databinding.conformance.util.RealmTester;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.examples.databinding.model.SampleData;
-import org.eclipse.jface.tests.databinding.RealmTester;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;