/*******************************************************************************
* 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.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.HashMap;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.etrice.generator.etricegen.ETriceGenPackage;
import org.eclipse.etrice.generator.etricegen.PortInstance;
import org.eclipse.etrice.generator.etricegen.PortKind;
import org.eclipse.etrice.generator.etricegen.Root;
import org.junit.Before;
import org.junit.Test;
public class TestConnectedPorts extends TestInstanceModelBuilderBase {
private Root root;
private HashMap<EClass, ArrayList<EObject>> instances;
@Before
public void setUp() {
prepare();
root = buildInstanceModel("connected_ports.room");
instances = collectInstances(root);
}
@Test
public void testPortNumbers() {
ArrayList<EObject> ports = instances.get(ETriceGenPackage.eINSTANCE.getPortInstance());
assertEquals("Number of PortInstances", 19, ports.size());
}
@Test
public void testRelayPort() {
ArrayList<EObject> ports = instances.get(ETriceGenPackage.eINSTANCE.getPortInstance());
PortInstance p = (PortInstance) getInstance(ports, "/CMain/test_a1/relay");
assertNotNull("port expected", p);
assertEquals("relay port expected", PortKind.RELAY, p.getKind());
assertFalse("no conjuagted port expected", p.getPort().isConjugated());
}
@Test
public void testInternalEndPort() {
ArrayList<EObject> ports = instances.get(ETriceGenPackage.eINSTANCE.getPortInstance());
PortInstance p = (PortInstance) getInstance(ports, "/CMain/test_a2/int_end");
assertNotNull("port expected", p);
assertEquals("internal port expected", PortKind.INTERNAL, p.getKind());
assertTrue("conjuagted port expected", p.getPort().isConjugated());
assertEquals("port connected once", 1, p.getPeers().size());
PortInstance peer = (PortInstance) getInstance(p.getPeers(), "/CMain/test_a2/sub/p2");
assertNotNull("peer expected", peer);
PortInstance start = (PortInstance) getInstance(peer.getPeers(), "/CMain/test_a2/int_end");
assertNotNull("peer expected", start);
assertEquals("peer of peer is start", p, start);
}
@Test
public void testExternalEndPortConnectedToRelayPort() {
ArrayList<EObject> ports = instances.get(ETriceGenPackage.eINSTANCE.getPortInstance());
PortInstance p = (PortInstance) getInstance(ports, "/CMain/test_a2/sub/p1");
assertNotNull("port expected", p);
assertEquals("external port expected", PortKind.EXTERNAL, p.getKind());
assertEquals("port connected once", 1, p.getPeers().size());
PortInstance peer = (PortInstance) getInstance(p.getPeers(), "/CMain/test_b/sub1/p");
assertEquals("port connected twice", 2, peer.getPeers().size());
}
}