/******************************************************************************* * Copyright (c) 2010 protos software gmbh (http://www.protos.de). * 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: * Thomas Schuetz and Henrik Rentz-Reichert (initial contribution) * *******************************************************************************/ package org.eclipse.etrice.generator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.HashMap; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.junit.Before; import org.junit.Test; import org.eclipse.etrice.core.room.ActorClass; import org.eclipse.etrice.core.room.Port; import org.eclipse.etrice.core.room.SAPRef; import org.eclipse.etrice.generator.etricegen.ETriceGenPackage; import org.eclipse.etrice.generator.etricegen.ExpandedActorClass; import org.eclipse.etrice.generator.etricegen.InterfaceItemInstance; import org.eclipse.etrice.generator.etricegen.PortInstance; import org.eclipse.etrice.generator.etricegen.PortKind; import org.eclipse.etrice.generator.etricegen.Root; import org.eclipse.etrice.generator.etricegen.SAPInstance; import org.eclipse.etrice.generator.etricegen.ServiceImplInstance; public class TestStructureInheritance extends TestInstanceModelBuilderBase { private Root root; private ExpandedActorClass xpac; private HashMap<EClass, ArrayList<EObject>> instances; @Before public void setUp() { prepare(); root = buildInstanceModel("structure_inheritance.room"); xpac = getTestee(); instances = collectInstances(root); } private ExpandedActorClass getTestee() { for (ExpandedActorClass xpac : root.getXpActorClasses()) { if (xpac.getActorClass().getName().equals("AFunctionA")) return xpac; } return null; } // private void assertEquals(String msg, int exp, int is) { // LogicalSystem.out.println(msg+" exp:"+exp+" is:"+is); // } // // private void assertEquals(String msg, EObject exp, EObject is) { // LogicalSystem.out.println(msg+" exp:"+exp+" is:"+is); // } @Test public void testInstanceNumbers() { ArrayList<EObject> actors = instances.get(ETriceGenPackage.eINSTANCE.getActorInstance()); assertEquals("Number of ActorInstances", 8, actors.size()); ArrayList<EObject> ports = instances.get(ETriceGenPackage.eINSTANCE.getPortInstance()); assertEquals("Number of PortInstances", 30, ports.size()); ArrayList<EObject> saps = instances.get(ETriceGenPackage.eINSTANCE.getSAPInstance()); assertEquals("Number of SAPInstances", 8, saps.size()); ArrayList<EObject> spps = instances.get(ETriceGenPackage.eINSTANCE.getSPPInstance()); assertEquals("Number of SPPInstances", 2, spps.size()); ArrayList<EObject> svcs = instances.get(ETriceGenPackage.eINSTANCE.getServiceImplInstance()); assertEquals("Number of ServiceImplInstances", 2, svcs.size()); } @Test public void testLayerConnections() { ArrayList<EObject> saps = instances.get(ETriceGenPackage.eINSTANCE.getSAPInstance()); for (EObject obj : saps) { assertEquals("SAP has one peer", 1, ((SAPInstance)obj).getPeers().size()); } SAPInstance sap = (SAPInstance) getInstance(saps, "/CMain/application/fcta/sub2/timeout"); assertNotNull("sap expected", sap); InterfaceItemInstance peer = ((SAPInstance)sap).getPeers().get(0); assertTrue("peer is a service", (peer instanceof ServiceImplInstance)); ServiceImplInstance svc = (ServiceImplInstance) peer; assertEquals("number of serviceA peers", 8, svc.getPeers().size()); assertEquals("sap and service have same protocol", sap.getSap().getProtocol(), svc.getSvcImpl().getSpp().getProtocol()); } private Port getPort(ActorClass ac, String name) { for (Port p : ac.getIfPorts()) { if (p.getName().equals(name)) return p; } for (Port p : ac.getIntPorts()) { if (p.getName().equals(name)) return p; } if (ac.getBase()!=null) return getPort(ac.getBase(), name); fail("port "+name+" not found"); return null; } private SAPRef getSAP(ActorClass ac, String name) { for (SAPRef sap : ac.getStrSAPs()) { if (sap.getName().equals(name)) return sap; } if (ac.getBase()!=null) return getSAP(ac.getBase(), name); fail("sap "+name+" not found"); return null; } @Test public void testIfItems() { Port base = getPort(xpac.getActorClass(), "base"); Port subbase = getPort(xpac.getActorClass(), "subbase"); Port ctrl = getPort(xpac.getActorClass(), "ctrl"); Port subctrl = getPort(xpac.getActorClass(), "subctrl"); Port fct1 = getPort(xpac.getActorClass(), "fct1"); Port fct2 = getPort(xpac.getActorClass(), "fct2"); SAPRef ctrltimeout = getSAP(xpac.getActorClass(), "ctrltimeout"); SAPRef timeout = getSAP(xpac.getActorClass(), "timeout"); int lid = 0; assertEquals("port local id", lid++, xpac.getInterfaceItemLocalId(base)); assertEquals("port local id", lid++, xpac.getInterfaceItemLocalId(subbase)); assertEquals("port local id", lid++, xpac.getInterfaceItemLocalId(ctrl)); assertEquals("port local id", lid++, xpac.getInterfaceItemLocalId(subctrl)); assertEquals("sap local id", lid++, xpac.getInterfaceItemLocalId(ctrltimeout)); assertEquals("sap local id", lid++, xpac.getInterfaceItemLocalId(timeout)); assertEquals("relay port local id", -1, xpac.getInterfaceItemLocalId(fct1)); assertEquals("relay port local id", -1, xpac.getInterfaceItemLocalId(fct2)); } @Test public void testPortConnection() { ArrayList<EObject> ports = instances.get(ETriceGenPackage.eINSTANCE.getPortInstance()); PortInstance p = (PortInstance) getInstance(ports, "/CMain/application/fcta/sub2/fct"); assertNotNull("port expected", p); assertEquals("external port expected", PortKind.EXTERNAL.getValue(), p.getKind().getValue()); assertFalse("no conjuagted port expected", p.getPort().isConjugated()); assertEquals("port connected once", 1, p.getPeers().size()); PortInstance peer = (PortInstance) getInstance(p.getPeers(), "/CMain/application/client/pa1"); assertNotNull("peer expected", peer); peer = (PortInstance) getInstance(peer.getPeers(), "/CMain/application/fcta/sub2/fct"); assertNotNull("peer expected", peer); assertEquals("peer of peer is start", p, peer); } }