package school.base.test.listener; 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.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.viatra.query.runtime.base.api.InstanceListener; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import school.SchoolPackage; /** * {@link InstanceListener} based test of EMF-IncQuery Base. * * @author Tamas Szabo * */ public class InstanceListenerTest extends QueryBaseListenerTest { private Set<EClass> classes; private InstanceListener instanceListener; private Multiset<EClass> receivedInsert = HashMultiset.create(); private Multiset<EClass> receivedDelete = HashMultiset.create(); public InstanceListenerTest(Notifier notifier) { super(notifier, false); classes = new HashSet<EClass>(); classes.add(SchoolPackage.eINSTANCE.getCourse()); //the listener asserts the notifications after a new course has been added instanceListener = new InstanceListener() { @Override public void instanceInserted(EClass clazz, EObject instance) { receivedInsert.add(clazz); assertTrue(clazz.equals(SchoolPackage.eINSTANCE.getCourse()) && instance.equals(newCourse)); } @Override public void instanceDeleted(EClass clazz, EObject instance) { receivedDelete.add(clazz); assertTrue(clazz.equals(SchoolPackage.eINSTANCE.getCourse()) && instance.equals(newCourse)); } }; } @Override public void registerListener() { navigationHelper.registerEClasses(classes); navigationHelper.addInstanceListener(classes, instanceListener); } @Override public void unregisterListener() { navigationHelper.removeInstanceListener(classes, instanceListener); navigationHelper.unregisterEClasses(classes); assertTrue(1 == receivedInsert.size()); assertTrue(1 == receivedInsert.count(SchoolPackage.eINSTANCE.getCourse())); assertTrue(receivedInsert.equals(receivedDelete)); } }