package inheritanceoverriding; 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.junit.Before; import org.junit.Test; import static org.junit.Assert.*; /** * Loads each model conforming to A/B/C/D/X/Y/Z * as typed by their exact type AMT/BMT/CMT/DMT/XMY/YMT/ZMT * and checks overriding priorities between woven aspects */ public class OverridingTest { @Before public void setUp() { StandaloneSetup.doSetup(); } @Test public void testA() { inheritanceoverriding.amt.fsm.FSM root = loadModelA(); assertEquals(0, root.getI1()); assertEquals("A1::f1", root.f1()); } @Test public void testB() { inheritanceoverriding.bmt.fsm.FSM root = loadModelB(); inheritanceoverriding.bmt.fsm.State s = root.getOwnedState().get(0); inheritanceoverriding.bmt.fsm.Transition t = s.getOutgoingTransition().get(0); assertEquals(0, root.getI1()); assertEquals("OverrideA1::f1", root.f1()); assertEquals(0, s.getI5()); assertEquals("B2::f5", s.f5()); assertEquals(0, t.getI3()); assertEquals("C1::f3", t.f3()); } @Test public void testC() { inheritanceoverriding.cmt.fsm.FSM root = loadModelC(); inheritanceoverriding.cmt.fsm.State s = root.getOwnedState().get(0); inheritanceoverriding.cmt.fsm.Transition t = s.getOutgoingTransition().get(0); assertEquals(0, root.getI1()); assertEquals("OverrideA1::f1", root.f1()); assertEquals(0, s.getI2()); assertEquals(0, s.getI5()); assertEquals("B1::f2", s.f2()); assertEquals("B2::f5", s.f5()); assertEquals(0, t.getI3()); assertEquals("OverrideC1::f3", t.f3()); } @Test public void testD() { inheritanceoverriding.dmt.fsm.FSM root = loadModelD(); inheritanceoverriding.dmt.fsm.State s = root.getOwnedState().get(0); inheritanceoverriding.dmt.fsm.Transition t = s.getOutgoingTransition().get(0); assertEquals(0, root.getI1()); assertEquals("OverrideA1::f1", root.f1()); assertEquals(0, s.getI2()); assertEquals(0, s.getI5()); assertEquals("B1::f2", s.f2()); assertEquals("OverrideB2::f5", s.f5()); assertEquals(0, t.getI3()); assertEquals(0, t.getI6()); assertEquals("OverrideC1::f3", t.f3()); assertEquals("C2::f6", t.f6()); } @Test public void testX() { inheritanceoverriding.xmt.fsm.FSM root = loadModelX(); inheritanceoverriding.xmt.fsm.State s = root.getOwnedState().get(0); inheritanceoverriding.xmt.fsm.Transition t = s.getOutgoingTransition().get(0); assertEquals(0, root.getI1()); assertEquals("A1::f1", root.f1()); assertEquals(0, s.getI2()); assertEquals("B1::f2", s.f2()); assertEquals(0, t.getI3()); assertEquals("C1::f3", t.f3()); } @Test public void testY() { inheritanceoverriding.ymt.fsm.FSM root = loadModelY(); inheritanceoverriding.ymt.fsm.State s = root.getOwnedState().get(0); inheritanceoverriding.ymt.fsm.Transition t = s.getOutgoingTransition().get(0); assertEquals(0, root.getI1()); assertEquals("A1::f1", root.f1()); assertEquals(0, s.getI2()); assertEquals(0, s.getI5()); assertEquals("B1::f2", s.f2()); assertEquals("B2::f5", s.f5()); assertEquals(0, t.getI3()); assertEquals("C1::f3", t.f3()); } @Test public void testZ() { inheritanceoverriding.zmt.fsm.FSM root = loadModelZ(); assertEquals(0, root.getI1()); assertEquals("A1::f1", root.f1()); } private inheritanceoverriding.amt.fsm.FSM loadModelA() { return (inheritanceoverriding.amt.fsm.FSM) loadModel( "A.xmi", "inheritanceoverriding.AMT"); } private inheritanceoverriding.bmt.fsm.FSM loadModelB() { return (inheritanceoverriding.bmt.fsm.FSM) loadModel( "B.xmi", "inheritanceoverriding.BMT"); } private inheritanceoverriding.cmt.fsm.FSM loadModelC() { return (inheritanceoverriding.cmt.fsm.FSM) loadModel( "C.xmi", "inheritanceoverriding.CMT"); } private inheritanceoverriding.dmt.fsm.FSM loadModelD() { return (inheritanceoverriding.dmt.fsm.FSM) loadModel( "D.xmi", "inheritanceoverriding.DMT"); } private inheritanceoverriding.xmt.fsm.FSM loadModelX() { return (inheritanceoverriding.xmt.fsm.FSM) loadModel( "X.xmi", "inheritanceoverriding.XMT"); } private inheritanceoverriding.ymt.fsm.FSM loadModelY() { return (inheritanceoverriding.ymt.fsm.FSM) loadModel( "Y.xmi", "inheritanceoverriding.YMT"); } private inheritanceoverriding.zmt.fsm.FSM loadModelZ() { return (inheritanceoverriding.zmt.fsm.FSM) loadModel( "Z.xmi", "inheritanceoverriding.ZMT"); } private EObject loadModel(String uri, String mt) { ResourceSet rs = new ResourceSetImpl(); Resource res = rs.getResource(URI.createURI( "melange:/file/input/" + uri + "?mt=" + mt), true); return res.getContents().get(0); } }