package com.sap.emf.ocl.trigger.tests; import java.util.Collection; import java.util.Collections; import junit.framework.TestCase; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; import org.eclipse.ocl.ParserException; import org.eclipse.ocl.ecore.OCL.Helper; import org.eclipse.ocl.ecore.OCLExpression; import org.eclipse.ocl.ecore.opposites.OppositeEndFinder; import org.junit.Before; import org.junit.Test; import com.sap.emf.ocl.trigger.AbstractTriggerable; import com.sap.emf.ocl.trigger.TriggerManager; import com.sap.emf.ocl.trigger.TriggerManagerFactory; import com.sap.emf.ocl.trigger.Triggerable; import company.CompanyFactory; import company.CompanyPackage; import company.Department; public class SimpleTest extends TestCase { private ResourceSet resourceSet; private Resource resource; private TriggerManager triggerManager; @Before public void setUp() { resourceSet = new ResourceSetImpl(); resourceSet.eAdapters().add(new ECrossReferenceAdapter()); resource = resourceSet.createResource(URI.createURI("http://com.sap.emf.ocl.trigger.tests/Resource.xmi")); triggerManager = TriggerManagerFactory.INSTANCE.createTriggerManager(); triggerManager.addToObservedResourceSets(resourceSet); } @Test public void testTrivialTrigger() throws ParserException { final Department d = CompanyFactory.eINSTANCE.createDepartment(); resource.getContents().add(d); Helper helper = org.eclipse.ocl.examples.impactanalyzer.util.OCL.newInstance().createOCLHelper(); helper.setContext(CompanyPackage.eINSTANCE.getDepartment()); final OCLExpression trivialExpression = helper.createQuery("self.name"); final boolean[] result = new boolean[1]; Triggerable t = new AbstractTriggerable(/* with context */ null, Collections.singleton(trivialExpression)) { @Override public void notify(OCLExpression expression, Collection<EObject> affectedContextObjects, OppositeEndFinder oppositeEndFinder, Notification change) { result[0] = expression == trivialExpression && affectedContextObjects.size() == 1 && affectedContextObjects.contains(d); } }; triggerManager.register(t); d.setName("Humba"); assertTrue(result[0]); } @Test public void testTrivialTriggerWithTwoObjects() throws ParserException { final Department d1 = CompanyFactory.eINSTANCE.createDepartment(); resource.getContents().add(d1); final Department d2 = CompanyFactory.eINSTANCE.createDepartment(); resource.getContents().add(d2); Helper helper = org.eclipse.ocl.examples.impactanalyzer.util.OCL.newInstance().createOCLHelper(); helper.setContext(CompanyPackage.eINSTANCE.getDepartment()); final OCLExpression trivialExpression = helper.createQuery("self.name"); final boolean[] result = new boolean[1]; Triggerable t = new AbstractTriggerable(/* with context */ null, Collections.singleton(trivialExpression)) { @Override public void notify(OCLExpression expression, Collection<EObject> affectedContextObjects, OppositeEndFinder oppositeEndFinder, Notification change) { result[0] = expression == trivialExpression && affectedContextObjects.size() == 1 && affectedContextObjects.contains(d1); } }; triggerManager.register(t); d1.setName("Humba"); assertTrue(result[0]); } }