use of org.yakindu.sct.model.sexec.ExecutionFlow in project statecharts by Yakindu.
the class ModelSequencerStateTest method testStateCycle_EntryActionExclusion.
/**
* Entry action behaviors are not directly part of the states cycle steps
*/
@SuppressWarnings("unused")
@Test
public void testStateCycle_EntryActionExclusion() {
MinimalTSC tsc = new MinimalTSC();
VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, tsc.s_scope);
// add a simple entry action: "entry / x=42;"
LocalReaction lr = _createEntryAction(tsc.s1);
ReactionEffect lr_eff = _createReactionEffect(lr);
AssignmentExpression assign1 = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), lr_eff);
// TRANSFORM
ExecutionFlow flow = sequencer.transform(tsc.sc);
// test state with one outgoing transition
ExecutionState s1 = flow.getStates().get(0);
assertEquals(0, s1.getReactions().size());
assertNotNull(s1.getReactSequence());
assertEquals(1, s1.getReactSequence().getSteps().size());
}
use of org.yakindu.sct.model.sexec.ExecutionFlow in project statecharts by Yakindu.
the class ModelSequencerStateTest method testStateExitAction.
/**
* if a state defines a exit action then the execution state must have a
* exitAction.
*/
@Test
public void testStateExitAction() {
Statechart sc = _createStatechart("test");
Scope scope = _createInterfaceScope("interface", sc);
VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, scope);
Region r = _createRegion("main", sc);
Entry e = _createEntry(EntryKind.INITIAL, null, r);
State s1 = _createState("s1", r);
State s2 = _createState("s2", r);
_createTransition(e, s1);
_createTransition(s1, s2);
LocalReaction exitAction = _createExitAction(s1);
_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(21), (ReactionEffect) exitAction.getEffect());
ExecutionFlow flow = sequencer.transform(sc);
ExecutionState _s1 = flow.getStates().get(0);
ExecutionState _s2 = flow.getStates().get(1);
assertEquals(s1.getName(), _s1.getSimpleName());
assertEquals(s2.getName(), _s2.getSimpleName());
assertNotNull(_s1.getExitAction());
assertNull(_s2.getExitAction());
}
use of org.yakindu.sct.model.sexec.ExecutionFlow in project statecharts by Yakindu.
the class ModelSequencerStateTest method testStateReaction_WithEntryAction.
/**
* The exit action must be part of the reaction effect sequence
*/
@SuppressWarnings("unused")
@Test
public void testStateReaction_WithEntryAction() {
SimpleFlatTSC tsc = new SimpleFlatTSC();
VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, tsc.s_scope);
LocalReaction entryAction = _createEntryAction(tsc.s2);
AssignmentExpression assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(21), (ReactionEffect) entryAction.getEffect());
ExecutionFlow flow = sequencer.transform(tsc.sc);
// test state with one outgoing transition
ExecutionState _s1 = flow.getStates().get(0);
ExecutionState _s2 = flow.getStates().get(1);
assertEquals(tsc.s1.getName(), _s1.getSimpleName());
assertEquals(tsc.s2.getName(), _s2.getSimpleName());
assertEquals(1, _s1.getReactions().size());
Reaction reaction = _s1.getReactions().get(0);
assertNotNull(reaction.getCheck());
assertNotNull(reaction.getEffect());
Sequence seq = (Sequence) reaction.getEffect();
assertEquals(2, seq.getSteps().size());
assertCall(seq, 0, _s1.getExitSequence());
assertCall(seq, 1, _s2.getEnterSequences().get(0));
assertCall(_s2.getEnterSequences().get(0), 0, _s2.getEntryAction());
}
use of org.yakindu.sct.model.sexec.ExecutionFlow in project statecharts by Yakindu.
the class TreeNamingServiceTest method statechartNamingRegressionTest.
/*
* This test will fail if any details of the naming algorithm are changed.
* It is safe to change these names to the new ones if the changes were
* expected.
*/
@Test
public void statechartNamingRegressionTest() {
Statechart toTest = getNamingServiceStatechart();
List<String> names = new ArrayList<>();
// these names are shorter than 15 characters because there are more
// elements containing these names, e.g. state actions
List<String> expectedNames = new ArrayList<>(Arrays.asList("mgn_SA", "mgn_StteB", "s_SA", "t_SA", "t_SA_AR_SA", "t_SA_AR_StB", "s_SA_AR_SA", "s_SA_AR_StB"));
ExecutionFlow flow = optimizer.transform(sequencer.transform(toTest));
executionflowNamingService.setMaxLength(15);
executionflowNamingService.setSeparator('_');
executionflowNamingService.initializeNamingService(flow);
for (ExecutionState state : flow.getStates()) {
String name = executionflowNamingService.getShortName(state);
assertEquals(names.contains(name), false);
names.add(name);
}
stringListsEqual(expectedNames, names);
}
use of org.yakindu.sct.model.sexec.ExecutionFlow in project statecharts by Yakindu.
the class InterpreterOperationsTest method setup.
@Before
public void setup() throws Exception {
ExecutionFlow flow = models.loadExecutionFlowFromResource("Operations.sct");
initInterpreter(flow);
}
Aggregations