/*******************************************************************************
* 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.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static simulator.test.util.ConfigurationFactory.createIncrementTimeVariableExpression;
import static simulator.test.util.ConfigurationFactory.createVariable;
import org.junit.Test;
import simulator.execution.model.Time;
import simulator.execution.model.actions.EvaluatableExpression;
import simulator.execution.model.state.State;
import simulator.scl.Expression;
import simulator.scl.UnitOfTime;
import simulator.scl.Variable;
public class EvaluatableExpressionTests {
private final State state = mock(State.class);
private final Variable variable = createVariable("time");
@Test
public void incrementTimeVariableByAnHour() throws Exception {
final Time originalValue = Time.now();
when(state.getValueOf(variable)).thenReturn(originalValue);
final Expression expression = createIncrementTimeVariableExpression(variable, UnitOfTime.HOUR);
new EvaluatableExpression(expression).evaluate(state);
verify(state).setValueOf(variable, originalValue.increment(UnitOfTime.HOUR));
}
@Test
public void incrementTimeVariableByAMinute() throws Exception {
final Time originalValue = Time.now();
when(state.getValueOf(variable)).thenReturn(originalValue);
final Expression expression = createIncrementTimeVariableExpression(variable, UnitOfTime.MINUTE);
new EvaluatableExpression(expression).evaluate(state);
verify(state).setValueOf(variable, originalValue.increment(UnitOfTime.MINUTE));
}
}