use of org.yakindu.sct.model.stext.stext.LocalReaction in project statecharts by Yakindu.
the class FoldIncomingActionsRefactoring method createEntryBlock.
private EList<Expression> createEntryBlock(List<Expression> actionsToAdd) {
EList<Expression> actionsOriginal;
LocalReaction newLocalReaction = StextFactory.eINSTANCE.createLocalReaction();
ReactionTrigger newReactionTrigger = StextFactory.eINSTANCE.createReactionTrigger();
EntryEvent entryEvent = StextFactory.eINSTANCE.createEntryEvent();
ReactionEffect newReactionEffect = StextFactory.eINSTANCE.createReactionEffect();
newLocalReaction.setTrigger(newReactionTrigger);
newReactionTrigger.getTriggers().add(entryEvent);
newReactionEffect.getActions().addAll(actionsToAdd);
newLocalReaction.setEffect(newReactionEffect);
Scope scope = getContextObject().getScopes().get(0);
scope.getReactions().add(newLocalReaction);
actionsOriginal = newReactionEffect.getActions();
return actionsOriginal;
}
use of org.yakindu.sct.model.stext.stext.LocalReaction in project statecharts by Yakindu.
the class SCTResourceTest method testStateSerializing.
@Test
public void testStateSerializing() throws Exception {
res.setSerializerEnabled(true);
State state = createState("entry / 3 * 3");
res.getContents().add(state);
LocalReaction reaction = (LocalReaction) state.getLocalReactions().get(0);
ReactionTrigger trigger = (ReactionTrigger) reaction.getTrigger();
ExitEvent exitEvent = stextFac.createExitEvent();
trigger.getTriggers().add(exitEvent);
assertEquals("entry , exit / 3 * 3", state.getSpecification());
assertEquals("" + res.getErrors(), 0, res.getErrors().size());
}
use of org.yakindu.sct.model.stext.stext.LocalReaction in project statecharts by Yakindu.
the class ModelSequencerStateReactionTest method testAlwaysLocalReaction.
/**
* Local reactions must be created for behavior with 'always' trigger
*/
@SuppressWarnings("unused")
@Test
public void testAlwaysLocalReaction() {
Statechart sc = _createStatechart("test");
Scope scope = _createInterfaceScope("interface", sc);
VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, scope);
Region r = _createRegion("main", sc);
State s = _createState("s", r);
LocalReaction timeTriggeredReaction = _createLocalReaction(s, StextFactory.eINSTANCE.createAlwaysEvent());
AssignmentExpression assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) timeTriggeredReaction.getEffect());
ExecutionFlow flow = sequencer.transform(sc);
ExecutionState _s = flow.getStates().get(0);
// assert that a local reaction is created
Reaction reaction = _s.getReactions().get(0);
PrimitiveValueExpression pve = (PrimitiveValueExpression) reaction.getCheck().getCondition();
assertBoolLiteral(true, pve.getValue());
}
use of org.yakindu.sct.model.stext.stext.LocalReaction in project statecharts by Yakindu.
the class ModelSequencerStateReactionTest method testEntryActionWithGuard.
/**
* If a entry trigger is combined with a guard condition then the entry
* action is executed conditionally with this trigger.
*/
@Test
public void testEntryActionWithGuard() {
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 entryAction = _createEntryAction(s2);
_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) entryAction.getEffect());
((ReactionTrigger) entryAction.getTrigger()).setGuard(createGuardExpression(_createValue(true)));
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());
Sequence _entrySeq = (Sequence) _s2.getEntryAction();
assertClass(If.class, _entrySeq.getSteps().get(0));
assertClass(PrimitiveValueExpression.class, ((If) _entrySeq.getSteps().get(0)).getCheck().getCondition());
assertAssignment(((Sequence) ((If) _entrySeq.getSteps().get(0)).getThenStep()).getSteps().get(0), "v1", AssignmentOperator.ASSIGN, "42");
}
use of org.yakindu.sct.model.stext.stext.LocalReaction in project statecharts by Yakindu.
the class ModelSequencerStateReactionTest method testEntryActionWithoutGuard.
/**
* If a entry trigger is combined with a guard condition then the entry
* action is executed conditionally with this trigger.
*/
@Test
public void testEntryActionWithoutGuard() {
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 entryAction = _createEntryAction(s2);
_createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) entryAction.getEffect());
// ((ReactionTrigger)entryAction.getTrigger()).setGuardExpression(_createValue(true));
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());
Sequence _entrySeq = (Sequence) _s2.getEntryAction();
assertClass(Sequence.class, _entrySeq.getSteps().get(0));
assertAssignment(((Sequence) _entrySeq.getSteps().get(0)).getSteps().get(0), "v1", AssignmentOperator.ASSIGN, "42");
}
Aggregations