/******************************************************************************* * Copyright (c) 2010-2013, Embraer S.A., Budapest University of Technology and Economics * 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: * Marton Bur, Abel Hegedus, Akos Horvath - initial API and implementation *******************************************************************************/ package hu.bme.mit.massif.simulink.api.tests.bus; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import hu.bme.mit.massif.models.simulink.util.BusMappingInSelectorMatcher; import hu.bme.mit.massif.models.simulink.util.BusSelectorMatcher; import hu.bme.mit.massif.models.simulink.util.util.BusMappingInSelectorProcessor; import hu.bme.mit.massif.models.simulink.util.util.BusSelectorProcessor; import hu.bme.mit.massif.simulink.BusSelector; import hu.bme.mit.massif.simulink.BusSignalMapping; import hu.bme.mit.massif.simulink.OutPort; import hu.bme.mit.massif.simulink.SimulinkElement; import hu.bme.mit.massif.simulink.SimulinkModel; import hu.bme.mit.massif.simulink.api.Exporter; import hu.bme.mit.massif.simulink.api.util.bus.BusSignalMapper; import hu.bme.mit.massif.simulink.api.util.bus.BusSignalMappingCreator; import hu.bme.mit.massif.simulink.api.util.bus.BusSignalMappingPathFinder; import java.util.Map; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.viatra.query.runtime.exception.ViatraQueryException; import com.google.common.collect.Maps; public class BusSignalMappingBaseTest { protected String modelUri; public BusSignalMapper prepareBusSignalMapper() throws Exception { Exporter exporter = new Exporter(); SimulinkModel loadedModel = exporter.loadSimulinkModel(modelUri); ResourceSet resourceSet = loadedModel.eResource().getResourceSet(); BusSignalMapper mapper = new BusSignalMapper(resourceSet); mapper.logDebug("> Testing on model: " + modelUri); mapper.logDebug(">> Simulink model: " + mapper.getFQNOrEmpty(loadedModel)); return mapper; } protected void checkPathFinder(final BusSignalMapper mapper) throws ViatraQueryException { BusMappingInSelectorMatcher selectorMatcher = BusMappingInSelectorMatcher.on(mapper.getEngine()); selectorMatcher.forEachMatch(new BusMappingInSelectorProcessor() { @Override public void process(BusSelector pSelector, BusSignalMapping pMapping, OutPort pMappingFrom,OutPort pMappingTo) { mapper.logDebug("=========="); mapper.logDebug("Testing path finder on: " + mapper.getFQNOrEmpty((SimulinkElement) pMappingFrom) + " to " + mapper.getFQNOrEmpty((SimulinkElement) pMappingTo)); String path = new BusSignalMappingPathFinder(mapper).findMappingPath((BusSignalMapping) pMapping); mapper.logDebug(">>> Found mapping: " + path); assertEquals(((BusSignalMapping) pMapping).getMappingPath(), path); mapper.logDebug("=========="); } }); } protected void executeMappingCreator(final BusSignalMapper mapper, final boolean includesIncomplete) throws ViatraQueryException { BusSelectorMatcher selectorMatcher = BusSelectorMatcher.on(mapper.getEngine()); final Map<BusSignalMapping, OutPort> mappings = Maps.newHashMap(); selectorMatcher.forEachMatch(new BusSelectorProcessor() { @Override public void process(BusSelector pSelector) { mapper.logDebug("Removing mappings from " + mapper.getFQNOrEmpty((SimulinkElement) pSelector)); (pSelector).setBusCreator(null); for (BusSignalMapping mapping : (pSelector).getMappings()) { if(mapping.getMappingFrom() != null){ mappings.put(mapping, mapping.getMappingFrom()); } mapping.setMappingFrom(null); } } }); selectorMatcher.forEachMatch(new BusSelectorProcessor() { @Override public void process(BusSelector pSelector) { mapper.logDebug("=========="); mapper.logDebug("Testing mapping creator on: " + mapper.getFQNOrEmpty((SimulinkElement) pSelector)); ((BusSelector) pSelector).setBusCreator(null); for (BusSignalMapping mapping : ((BusSelector) pSelector).getMappings()) { mapping.setMappingFrom(null); } new BusSignalMappingCreator(mapper).createBusMapping((BusSelector) pSelector); boolean hasComplete = false; if(!includesIncomplete){ for (BusSignalMapping mapping : ((BusSelector) pSelector).getMappings()) { assertEquals(mappings.get(mapping), mapping.getMappingFrom()); hasComplete = true; } } else { for (BusSignalMapping mapping : ((BusSelector) pSelector).getMappings()) { assertTrue(mapping.getMappingFrom() != null); OutPort outPort = mappings.get(mapping); if(outPort != null){ assertTrue(mapping.getMappingFrom().equals(outPort)); } hasComplete = hasComplete || !mapping.isIncomplete(); } } if(hasComplete){ assertTrue(((BusSelector) pSelector).getBusCreator() != null); } mapper.logDebug("=========="); } }); } }