1 /*******************************************************************************
2  * Copyright (c) 2008 Matthew Hall and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     Matthew Hall - initial API and implementation (bug 215531)
13  *     Matthew Hall - bug 213145
14  ******************************************************************************/
15 
16 package org.eclipse.jface.tests.internal.databinding.viewers;
17 
18 import org.eclipse.core.databinding.observable.IObservable;
19 import org.eclipse.core.databinding.observable.IObservableCollection;
20 import org.eclipse.core.databinding.observable.Realm;
21 import org.eclipse.core.databinding.observable.set.IObservableSet;
22 import org.eclipse.jface.databinding.conformance.MutableObservableSetContractTest;
23 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
24 import org.eclipse.jface.internal.databinding.viewers.ObservableViewerElementSet;
25 import org.eclipse.jface.viewers.IElementComparer;
26 
27 import junit.framework.TestSuite;
28 
29 public class ObservableViewerElementSetTest {
addConformanceTest(TestSuite suite)30 	public static void addConformanceTest(TestSuite suite) {
31 		suite.addTest(MutableObservableSetContractTest.suite(new Delegate()));
32 	}
33 
34 	private static class Delegate extends
35 			AbstractObservableCollectionContractDelegate<Object> {
36 
37 		@Override
createObservableCollection(Realm realm, int elementCount)38 		public IObservableCollection<Object> createObservableCollection(Realm realm,
39 				int elementCount) {
40 			ObservableViewerElementSet<Object> set = new ObservableViewerElementSet<>(realm,
41 					Object.class, new IdentityElementComparer());
42 			for (int i = 0; i < elementCount; i++)
43 				set.add(createElement(set));
44 			return set;
45 		}
46 
47 		@Override
createElement(IObservableCollection<Object> collection)48 		public Object createElement(IObservableCollection<Object> collection) {
49 			return new Object();
50 		}
51 
52 		@Override
change(IObservable observable)53 		public void change(IObservable observable) {
54 			@SuppressWarnings("unchecked")
55 			IObservableSet<Object> set = (IObservableSet<Object>) observable;
56 			set.add(createElement(set));
57 		}
58 
59 		@Override
getElementType(IObservableCollection<Object> collection)60 		public Object getElementType(IObservableCollection<Object> collection) {
61 			return Object.class;
62 		}
63 	}
64 
65 	private static class IdentityElementComparer implements IElementComparer {
66 		@Override
equals(Object a, Object b)67 		public boolean equals(Object a, Object b) {
68 			return a == b;
69 		}
70 
71 		@Override
hashCode(Object element)72 		public int hashCode(Object element) {
73 			return System.identityHashCode(element);
74 		}
75 	}
76 }
77