package school.base.test.listener; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.HashSet; import java.util.Set; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.viatra.query.runtime.base.api.FeatureListener; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import school.SchoolPackage; /** * {@link FeatureListener} based test of EMF-IncQuery Base. * * @author Tamas Szabo * */ public class FeatureListenerTest extends QueryBaseListenerTest { private Set<EStructuralFeature> features; private FeatureListener featureListener; private Multiset<EStructuralFeature> receivedInsert = HashMultiset.create(); private Multiset<EStructuralFeature> receivedDelete = HashMultiset.create(); public FeatureListenerTest(Notifier notifier) { super(notifier, false); features = new HashSet<EStructuralFeature>(); features.add(SchoolPackage.eINSTANCE.getCourse_Subject()); features.add(SchoolPackage.eINSTANCE.getCourse_Weight()); //the listener asserts the notifications after a new course has been added featureListener = new FeatureListener() { @Override public void featureInserted(EObject host, EStructuralFeature feature, Object value) { receivedInsert.add(feature); assertTrue(host.equals(newCourse)); assertTrue( feature.equals(SchoolPackage.eINSTANCE.getCourse_Subject()) && value.equals(newCourseSubject) || feature.equals(SchoolPackage.eINSTANCE.getCourse_Weight()) && value.equals(preExistingCourseWeight)); } @Override public void featureDeleted(EObject host, EStructuralFeature feature, Object value) { receivedDelete.add(feature); assertTrue(host.equals(newCourse)); assertTrue( feature.equals(SchoolPackage.eINSTANCE.getCourse_Subject()) && value.equals(newCourseSubject) || feature.equals(SchoolPackage.eINSTANCE.getCourse_Weight()) && value.equals(preExistingCourseWeight)); } }; } @Override public void registerListener() { navigationHelper.registerEStructuralFeatures(features); navigationHelper.addFeatureListener(features, featureListener); } @Override public void unregisterListener() { navigationHelper.removeFeatureListener(features, featureListener); navigationHelper.unregisterEStructuralFeatures(features); assertEquals(2, receivedInsert.size()); assertEquals(1, receivedInsert.count(SchoolPackage.eINSTANCE.getCourse_Subject())); assertEquals(1, receivedInsert.count(SchoolPackage.eINSTANCE.getCourse_Weight())); assertEquals(receivedInsert, receivedDelete); } }