/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.joiner.execution; import java.io.IOException; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import de.rcenvironment.components.joiner.common.JoinerComponentConstants; import de.rcenvironment.core.component.api.ComponentException; import de.rcenvironment.core.component.execution.api.Component; import de.rcenvironment.core.component.testutils.ComponentContextMock; import de.rcenvironment.core.component.testutils.ComponentTestWrapper; import de.rcenvironment.core.datamodel.api.DataType; import de.rcenvironment.core.datamodel.api.TypedDatumFactory; import de.rcenvironment.core.datamodel.api.TypedDatumService; import de.rcenvironment.core.datamodel.types.api.FloatTD; /** * * Test for {@link JoinerComponent}. * * @author Tobias Rodehutskors */ public class JoinerComponentTest { private static final String INPUT_X = "x"; private static final String INPUT_Y = "y"; /** * Expected fails. */ @Rule public ExpectedException expectedException = ExpectedException.none(); private ComponentTestWrapper component; private ComponentContextMock context; private TypedDatumFactory typedDatumFactory; /** * Common setup. * * @throws IOException e */ @Before public void setUp() throws IOException { context = new ComponentContextMock(); component = new ComponentTestWrapper(new JoinerComponent(), context); typedDatumFactory = context.getService(TypedDatumService.class).getFactory(); } /** * Common cleanup. */ @After public void tearDown() { component.tearDown(Component.FinalComponentState.FINISHED); component.dispose(); } /** * * Tests behavior if a single input value is available. * * @throws ComponentException on unexpected component failures. */ @Test public void testSingleInput() throws ComponentException { context.addSimulatedOutput(JoinerComponentConstants.OUTPUT_NAME, JoinerComponentConstants.OUTPUT_NAME, DataType.Float, false, null); FloatTD inputValue = typedDatumFactory.createFloat(3.0); context.setInputValue(INPUT_X, inputValue); component.start(); component.processInputs(); Assert.assertEquals(1, context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).size()); Assert.assertEquals(inputValue, context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).get(0)); } /** * * Tests behavior if two input values are available to two different inputs. * * @throws ComponentException on unexpected component failures. */ @Test public void testParallelInput() throws ComponentException { context.addSimulatedOutput(JoinerComponentConstants.OUTPUT_NAME, JoinerComponentConstants.OUTPUT_NAME, DataType.Float, false, null); FloatTD inputValue1 = typedDatumFactory.createFloat(3.0); FloatTD inputValue2 = typedDatumFactory.createFloat(4.0); context.setInputValue(INPUT_X, inputValue1); context.setInputValue(INPUT_Y, inputValue2); component.start(); component.processInputs(); Assert.assertEquals(2, context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).size()); Assert.assertTrue(context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).contains(inputValue1)); Assert.assertTrue(context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).contains(inputValue2)); } /** * * Tests behavior if single input values are available in different processing steps to the same input. * * @throws ComponentException on unexpected component failures. */ @Test public void testSerialInput() throws ComponentException { context.addSimulatedOutput(JoinerComponentConstants.OUTPUT_NAME, JoinerComponentConstants.OUTPUT_NAME, DataType.Float, false, null); FloatTD inputValue1 = typedDatumFactory.createFloat(3.0); context.setInputValue(INPUT_X, inputValue1); component.start(); component.processInputs(); Assert.assertEquals(1, context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).size()); Assert.assertTrue(context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).contains(inputValue1)); FloatTD inputValue2 = typedDatumFactory.createFloat(4.0); context.setInputValue(INPUT_X, inputValue2); component.processInputs(); Assert.assertEquals(1, context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).size()); Assert.assertTrue(context.getCapturedOutput(JoinerComponentConstants.OUTPUT_NAME).contains(inputValue2)); } }