| /******************************************************************************* |
| * Copyright (c) 2009, 2011 SAP AG 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: |
| * SAP AG - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ocl.examples.eventmanager.tests.framework; |
| |
| |
| import junit.framework.TestCase; |
| |
| import org.eclipse.emf.common.notify.Adapter; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.common.notify.impl.AdapterImpl; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EReference; |
| import org.eclipse.emf.ecore.EcoreFactory; |
| import org.eclipse.emf.ecore.InternalEObject; |
| import org.eclipse.emf.ecore.impl.DynamicEObjectImpl; |
| import org.eclipse.emf.ecore.impl.ENotificationImpl; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.emf.ecore.resource.impl.ResourceImpl; |
| import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; |
| import org.eclipse.ocl.examples.eventmanager.EventFilter; |
| import org.eclipse.ocl.examples.eventmanager.EventManager; |
| import org.eclipse.ocl.examples.eventmanager.EventManagerFactory; |
| |
| |
| public class IncludeSubclassesTest extends TestCase { |
| private ResourceSet set; |
| |
| class App extends AdapterImpl{ |
| public boolean noti = false; |
| |
| @Override |
| public void notifyChanged(Notification msg) { |
| this.noti =true; |
| |
| } |
| } |
| @Override |
| public void setUp() { |
| try { |
| super.setUp(); |
| } catch (Exception e) { |
| /*...*/ |
| } |
| set = new ResourceSetImpl(); |
| Resource r = new ResourceImpl(); |
| set.getResources().add(r); |
| |
| } |
| |
| @Override |
| public void tearDown() { |
| set = null; |
| try { |
| super.tearDown(); |
| } catch (Exception e) { |
| /*...*/ |
| } |
| |
| } |
| |
| public void testIncludingSubclassesFilterElementInsertionClassGetClass(){ |
| EventManager m = EventManagerFactory.eINSTANCE.createEventManagerFor(set); |
| EClass cls = EcoreFactory.eINSTANCE.createEClass(); |
| EventFilter filter = EventManagerFactory.eINSTANCE.createFilterForElementInsertion(cls); |
| EReference ref = EcoreFactory.eINSTANCE.createEReference(); |
| ref.setContainment(true); |
| Notification noti = new ENotificationImpl(null, Notification.SET, ref, null, new DynamicEObjectImpl(cls)); |
| App app = new App(); |
| m.subscribe(filter, app); |
| m.handleEMFEvent(noti); |
| assertTrue("Application not notified",app.noti); |
| app.noti= false; |
| |
| EList<Adapter> eAdapters = set.getResources().get(0).eAdapters(); |
| for(int i = 0; i< eAdapters.size(); i++){ |
| eAdapters.get(i).notifyChanged(noti); |
| } |
| assertTrue("Application not notified",app.noti); |
| } |
| |
| public void testIncludingSubclassesFilterElementInsertionClassGetSubclass(){ |
| EventManager m = EventManagerFactory.eINSTANCE.createEventManagerFor(set); |
| EClass cls = EcoreFactory.eINSTANCE.createEClass(); |
| EClass subcls = EcoreFactory.eINSTANCE.createEClass(); |
| subcls.getESuperTypes().add(cls); |
| EventFilter filter = EventManagerFactory.eINSTANCE.createFilterForElementInsertion(cls); |
| EReference ref = EcoreFactory.eINSTANCE.createEReference(); |
| ref.setContainment(true); |
| Notification noti = new ENotificationImpl(null, Notification.SET, ref, null, new DynamicEObjectImpl(subcls)); |
| App app = new App(); |
| m.subscribe(filter, app); |
| m.handleEMFEvent(noti); |
| assertTrue("Application not notified",app.noti); |
| app.noti= false; |
| |
| EList<Adapter> eAdapters = set.getResources().get(0).eAdapters(); |
| for(int i = 0; i< eAdapters.size(); i++){ |
| eAdapters.get(i).notifyChanged(noti); |
| } |
| assertTrue("Application not notified",app.noti); |
| } |
| |
| public void testDoubleSubscriptionExpectSubclassButNoSuperClass(){ |
| EventManager m = EventManagerFactory.eINSTANCE.createEventManagerFor(set); |
| |
| EClass classA = EcoreFactory.eINSTANCE.createEClass(); |
| EClass classB = EcoreFactory.eINSTANCE.createEClass(); |
| classB.getESuperTypes().add(classA); |
| EventFilter filter = EventManagerFactory.eINSTANCE.createAndFilterFor( |
| EventManagerFactory.eINSTANCE.createNotFilter( |
| EventManagerFactory.eINSTANCE.createClassFilterIncludingSubclasses(classA) |
| ), |
| EventManagerFactory.eINSTANCE.createClassFilterIncludingSubclasses(classB)); |
| |
| App app = new App(); |
| m.subscribe(filter, app); |
| EObject object = new DynamicEObjectImpl(classB); |
| Notification noti = new ENotificationImpl((InternalEObject)object, 0, null, null, null); |
| m.handleEMFEvent(noti); |
| m.unsubscribe(app); |
| |
| EObject object2 = new DynamicEObjectImpl(classA); |
| Notification noti2 = new ENotificationImpl((InternalEObject)object2, 0, null, null, null); |
| App app2 = new App(); |
| m.subscribe(filter, app2); |
| m.handleEMFEvent(noti2); |
| assertFalse("Application wrongly notified",app2.noti); |
| m.unsubscribe(app2); |
| |
| Notification noti3 = new ENotificationImpl(null, 0, null, null, null); |
| App app3 = new App(); |
| m.subscribe(filter, app3); |
| m.handleEMFEvent(noti3); |
| assertFalse("Application wrongly notified",app3.noti); |
| m.unsubscribe(app3); |
| } |
| |
| public void testDoubleSubscriptionExpectSuperclassButNoSubClass(){ |
| EventManager m = EventManagerFactory.eINSTANCE.createEventManagerFor(set); |
| |
| EClass classA = EcoreFactory.eINSTANCE.createEClass(); |
| EClass classB = EcoreFactory.eINSTANCE.createEClass(); |
| classB.getESuperTypes().add(classA); |
| EventFilter filter = EventManagerFactory.eINSTANCE.createAndFilterFor( |
| EventManagerFactory.eINSTANCE.createNotFilter( |
| EventManagerFactory.eINSTANCE.createClassFilterIncludingSubclasses(classB) |
| ), |
| EventManagerFactory.eINSTANCE.createClassFilterIncludingSubclasses(classA)); |
| |
| App app = new App(); |
| m.subscribe(filter, app); |
| EObject object = new DynamicEObjectImpl(classB); |
| Notification noti = new ENotificationImpl((InternalEObject)object, 0, null, null, null); |
| m.handleEMFEvent(noti); |
| m.unsubscribe(app); |
| |
| EObject object2 = new DynamicEObjectImpl(classA); |
| Notification noti2 = new ENotificationImpl((InternalEObject)object2, 0, null, null, null); |
| App app2 = new App(); |
| m.subscribe(filter, app2); |
| m.handleEMFEvent(noti2); |
| assertTrue("Application not notified",app2.noti); |
| m.unsubscribe(app2); |
| |
| Notification noti3 = new ENotificationImpl(null, 0, null, null, null); |
| App app3 = new App(); |
| m.subscribe(filter, app3); |
| m.handleEMFEvent(noti3); |
| assertFalse("Application wrongly notified",app3.noti); |
| m.unsubscribe(app3); |
| } |
| |
| public void testNegatedSubscriptionClassANotificationSubclassB(){ |
| EventManager m = EventManagerFactory.eINSTANCE.createEventManagerFor(set); |
| |
| EClass classA = EcoreFactory.eINSTANCE.createEClass(); |
| EClass classB = EcoreFactory.eINSTANCE.createEClass(); |
| classB.getESuperTypes().add(classA); |
| EventFilter filter =EventManagerFactory.eINSTANCE.createNotFilter( |
| EventManagerFactory.eINSTANCE.createClassFilterIncludingSubclasses(classA)); |
| |
| App app = new App(); |
| m.subscribe(filter, app); |
| EObject object = new DynamicEObjectImpl(classB); |
| Notification noti = new ENotificationImpl((InternalEObject)object, 0, null, null, null); |
| m.handleEMFEvent(noti); |
| m.unsubscribe(app); |
| |
| assertFalse("Get wrongly notified", app.noti); |
| } |
| } |