/*******************************************************************************
* Copyright (c) 2011 The University of York.
* 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:
* Louis Rose - initial API and implementation
******************************************************************************/
package simulator.execution.model.action;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static simulator.test.util.ConfigurationFactory.createChangeDisplayAction;
import static simulator.test.util.ConfigurationFactory.createStringConstant;
import static simulator.test.util.ConfigurationFactory.createDisplayMatchesCondition;
import org.junit.Test;
import simulator.execution.model.actions.RunnableAction;
import simulator.execution.model.actions.RunnableActionGroup;
import simulator.execution.model.state.State;
import simulator.scl.ChangeDisplay;
public class RunnableActionGroupTests {
@Test
public void actionWhoseGuardIsSatifisfiedShouldRun() {
final State state = mock(State.class);
final RunnableAction action = mock(RunnableAction.class);
final RunnableActionGroup group = new RunnableActionGroup(action);
when(action.isSatisified(state)).thenReturn(true);
group.run(state);
verify(action).run(state);
}
@Test
public void actionWhoseGuardIsNotSatifisfiedShouldNotBeRun() {
final State state = mock(State.class);
final RunnableAction action = mock(RunnableAction.class);
final RunnableActionGroup group = new RunnableActionGroup(action);
when(action.isSatisified(state)).thenReturn(false);
group.run(state);
verify(action, never()).run(state);
}
@Test
public void guardsAreDeterminedByStateBeforeAnyActionHasBeenRun() {
final State state = new State();
final RunnableAction foo2bar = createConditionalChangeDisplayAction("foo", "bar");
final RunnableAction bar2foo = createConditionalChangeDisplayAction("bar", "foo");
final RunnableActionGroup group = new RunnableActionGroup(foo2bar, bar2foo);
state.setDisplayText("foo");
group.run(state);
assertEquals("bar", state.getDisplayText());
}
private RunnableAction createConditionalChangeDisplayAction(String requiredText, String newText) {
final ChangeDisplay action = createChangeDisplayAction(createStringConstant(newText));
action.setGuard(createDisplayMatchesCondition(createStringConstant(requiredText)));
return new RunnableAction(action);
}
}