Search in sources :

Example 6 with StextTestFactory._createReactionEffect

use of org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect in project statecharts by Yakindu.

the class ModelSequencerStateTest method testStateReaction_WithTransitionAction.

/**
 * The transition action must be part of the reaction effect sequence
 */
@Test
public void testStateReaction_WithTransitionAction() {
    SimpleFlatTSC tsc = new SimpleFlatTSC();
    VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, tsc.s_scope);
    ReactionEffect effect = _createReactionEffect(tsc.t1);
    AssignmentExpression assign = _createVariableAssignment(v1, AssignmentOperator.ASSIGN, _createValue(42), effect);
    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();
    assertCall(seq, 0, s1.getExitSequence());
    assertClass(Sequence.class, seq.getSteps().get(1));
    Execution _exec = (Execution) ((Sequence) seq.getSteps().get(1)).getSteps().get(0);
    AssignmentExpression _assign = (AssignmentExpression) _exec.getStatement();
    assertNotSame(_assign, assign);
    assertNotSame(_assign.getVarRef(), assign.getVarRef());
    assertNotSame(_assign.getVarRef(), v1);
    assertCall(seq, 2, s2.getEnterSequences().get(0));
}
Also used : ExecutionState(org.yakindu.sct.model.sexec.ExecutionState) SimpleFlatTSC(org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.SimpleFlatTSC) Execution(org.yakindu.sct.model.sexec.Execution) StextTestFactory._createVariableDefinition(org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition) VariableDefinition(org.yakindu.sct.model.stext.stext.VariableDefinition) AssignmentExpression(org.yakindu.base.expressions.expressions.AssignmentExpression) ExecutionFlow(org.yakindu.sct.model.sexec.ExecutionFlow) ReactionEffect(org.yakindu.sct.model.stext.stext.ReactionEffect) StextTestFactory._createReactionEffect(org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect) Sequence(org.yakindu.sct.model.sexec.Sequence) LocalReaction(org.yakindu.sct.model.stext.stext.LocalReaction) StextTestFactory._createLocalReaction(org.yakindu.sct.model.stext.test.util.StextTestFactory._createLocalReaction) Reaction(org.yakindu.sct.model.sexec.Reaction) Test(org.junit.Test)

Example 7 with StextTestFactory._createReactionEffect

use of org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect in project statecharts by Yakindu.

the class ModelSequencerStateTest method testStateCycle_ExitActionExclusion.

/**
 * Exit action behaviors are not directly part of the states cycle steps
 */
@SuppressWarnings("unused")
@Test
public void testStateCycle_ExitActionExclusion() {
    MinimalTSC tsc = new MinimalTSC();
    VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, tsc.s_scope);
    // add a simple entry action: "entry / x=42;"
    LocalReaction lr = _createExitAction(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());
}
Also used : LocalReaction(org.yakindu.sct.model.stext.stext.LocalReaction) StextTestFactory._createLocalReaction(org.yakindu.sct.model.stext.test.util.StextTestFactory._createLocalReaction) ExecutionState(org.yakindu.sct.model.sexec.ExecutionState) MinimalTSC(org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.MinimalTSC) StextTestFactory._createVariableDefinition(org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition) VariableDefinition(org.yakindu.sct.model.stext.stext.VariableDefinition) AssignmentExpression(org.yakindu.base.expressions.expressions.AssignmentExpression) ExecutionFlow(org.yakindu.sct.model.sexec.ExecutionFlow) ReactionEffect(org.yakindu.sct.model.stext.stext.ReactionEffect) StextTestFactory._createReactionEffect(org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect) Test(org.junit.Test)

Example 8 with StextTestFactory._createReactionEffect

use of org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect in project statecharts by Yakindu.

the class ModelSequencerStateTest method testStateCycle_LocalReactionWithMixedRegularAndEntryTrigger.

/**
 * Local reactions that define regular and entry triggers side by side must
 * also be part of the cycle steps.
 */
@SuppressWarnings("unused")
@Test
public void testStateCycle_LocalReactionWithMixedRegularAndEntryTrigger() {
    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);
    _createRegularEventSpec(tsc.e1, (ReactionTrigger) lr.getTrigger());
    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(1, s1.getReactions().size());
    assertNotNull(s1.getReactSequence());
    assertEquals(1, s1.getReactSequence().getSteps().size());
    Sequence _seq = (Sequence) s1.getReactSequence().getSteps().get(0);
    If _lr1 = (If) assertedSequence(assertedSequence(assertedSequence(assertedSequence(_seq.getSteps().get(0)).getSteps().get(0)).getSteps().get(0)).getSteps().get(0)).getSteps().get(0);
    assertClass(ElementReferenceExpression.class, _lr1.getCheck().getCondition());
    assertSame(s1.getReactions().get(0).getCheck().getCondition(), _lr1.getCheck().getCondition());
    Call _lr1_eff_call = (Call) _lr1.getThenStep();
    assertSame(s1.getReactions().get(0).getEffect(), _lr1_eff_call.getStep());
}
Also used : LocalReaction(org.yakindu.sct.model.stext.stext.LocalReaction) StextTestFactory._createLocalReaction(org.yakindu.sct.model.stext.test.util.StextTestFactory._createLocalReaction) ExecutionState(org.yakindu.sct.model.sexec.ExecutionState) Call(org.yakindu.sct.model.sexec.Call) MinimalTSC(org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.MinimalTSC) StextTestFactory._createVariableDefinition(org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition) VariableDefinition(org.yakindu.sct.model.stext.stext.VariableDefinition) AssignmentExpression(org.yakindu.base.expressions.expressions.AssignmentExpression) ExecutionFlow(org.yakindu.sct.model.sexec.ExecutionFlow) ReactionEffect(org.yakindu.sct.model.stext.stext.ReactionEffect) StextTestFactory._createReactionEffect(org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect) Sequence(org.yakindu.sct.model.sexec.Sequence) If(org.yakindu.sct.model.sexec.If) Test(org.junit.Test)

Example 9 with StextTestFactory._createReactionEffect

use of org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect in project statecharts by Yakindu.

the class ModelSequencertDeclarationsTest method testOperationMapping.

/**
 * The OperationCalls must map to Operations in Scopes inside the Flow..
 */
@Test
public void testOperationMapping() {
    Statechart sc = _createStatechart("test");
    InterfaceScope s_scope = _createInterfaceScope("Interface", sc);
    OperationDefinition _operation = _createOperation("value", s_scope);
    Region r = _createRegion("main", sc);
    State s1 = _createState("S1", r);
    State s2 = _createState("S2", r);
    Transition t = _createTransition(s1, s2);
    ReactionTrigger tr = _createReactionTrigger(t);
    tr.setGuard(createGuardExpression(_createValue(true)));
    ReactionEffect tr1 = _createReactionEffect(t);
    FeatureCall _operationCall = _createOperationCall(_operation);
    tr1.getActions().add(_operationCall);
    ExecutionFlow flow = sequencer.transform(sc);
    OperationDefinition _o1 = (OperationDefinition) flow.getScopes().get(0).getDeclarations().get(0);
    assertNotSame(_operation, _o1);
    assertEquals(_operation.getName(), _o1.getName());
    Step step = flow.getStates().get(0).getReactSequence().getSteps().get(0);
    If _if = (If) assertedSequence(assertedSequence(assertedSequence(step).getSteps().get(0)).getSteps().get(0)).getSteps().get(0);
    Step thenSequence = assertedSequence(((Call) _if.getThenStep()).getStep()).getSteps().get(1);
    Execution call = (Execution) assertedSequence(thenSequence).getSteps().get(0);
    assertNotSame(_operationCall, call.getStatement());
    assertSame(_o1, ((FeatureCall) call.getStatement()).getFeature());
}
Also used : ExecutionFlow(org.yakindu.sct.model.sexec.ExecutionFlow) InterfaceScope(org.yakindu.sct.model.stext.stext.InterfaceScope) StextTestFactory._createInterfaceScope(org.yakindu.sct.model.stext.test.util.StextTestFactory._createInterfaceScope) ReactionEffect(org.yakindu.sct.model.stext.stext.ReactionEffect) StextTestFactory._createReactionEffect(org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect) Step(org.yakindu.sct.model.sexec.Step) Execution(org.yakindu.sct.model.sexec.Execution) StextTestFactory._createReactionTrigger(org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionTrigger) ReactionTrigger(org.yakindu.sct.model.stext.stext.ReactionTrigger) SGraphTestFactory._createState(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createState) State(org.yakindu.sct.model.sgraph.State) Transition(org.yakindu.sct.model.sgraph.Transition) SGraphTestFactory._createTransition(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createTransition) Statechart(org.yakindu.sct.model.sgraph.Statechart) SGraphTestFactory._createStatechart(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createStatechart) Region(org.yakindu.sct.model.sgraph.Region) SGraphTestFactory._createRegion(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createRegion) OperationDefinition(org.yakindu.sct.model.stext.stext.OperationDefinition) FeatureCall(org.yakindu.base.expressions.expressions.FeatureCall) If(org.yakindu.sct.model.sexec.If) Test(org.junit.Test)

Example 10 with StextTestFactory._createReactionEffect

use of org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect in project statecharts by Yakindu.

the class StatechartEnterExistActionTest method testSCLocalReaction.

/**
 * The transition sequence must contain all exit actions for parent states
 * that will be left by a transition.
 */
@SuppressWarnings("unused")
@Test
public void testSCLocalReaction() {
    Statechart sc = _createStatechart("sc");
    {
        VariableDefinition v = _createVariableDefinition("v", TYPE_INTEGER, getOrCreateInternalScope(sc));
        LocalReaction entryAction = _createEntryAction(sc);
        ReactionEffect effect = _createReactionEffect(entryAction);
        _createVariableAssignment(v, AssignmentOperator.ADD_ASSIGN, _createValue(1), effect);
        LocalReaction exitAction = _createExitAction(sc);
        effect = _createReactionEffect(exitAction);
        _createVariableAssignment(v, AssignmentOperator.ADD_ASSIGN, _createValue(1), effect);
        Region r = _createRegion("r", sc);
        {
            Entry e = _createEntry(EntryKind.INITIAL, null, r);
            State s1 = _createState("s1", r);
            Transition t = _createTransition(e, s1);
        }
    }
    ExecutionFlow flow = sequencer.transform(sc);
    ExecutionRegion region = flow.getRegions().get(0);
    assertEquals(0, flow.getReactions().size());
    assertedOrder(flow.getEnterSequences().get(0), null, Lists.newArrayList(new StepLeaf(flow.getEntryAction()), new StepLeaf(region.getEnterSequences().get(0))));
    assertedOrder(flow.getExitSequence(), null, Lists.newArrayList(new StepLeaf(region.getExitSequence()), new StepLeaf(flow.getExitAction())));
}
Also used : LocalReaction(org.yakindu.sct.model.stext.stext.LocalReaction) Entry(org.yakindu.sct.model.sgraph.Entry) SGraphTestFactory._createEntry(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createEntry) VariableDefinition(org.yakindu.sct.model.stext.stext.VariableDefinition) StextTestFactory._createVariableDefinition(org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition) SGraphTestFactory._createState(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createState) State(org.yakindu.sct.model.sgraph.State) ExecutionRegion(org.yakindu.sct.model.sexec.ExecutionRegion) Transition(org.yakindu.sct.model.sgraph.Transition) SGraphTestFactory._createTransition(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createTransition) ExecutionFlow(org.yakindu.sct.model.sexec.ExecutionFlow) Statechart(org.yakindu.sct.model.sgraph.Statechart) SGraphTestFactory._createStatechart(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createStatechart) Region(org.yakindu.sct.model.sgraph.Region) SGraphTestFactory._createRegion(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createRegion) ExecutionRegion(org.yakindu.sct.model.sexec.ExecutionRegion) ReactionEffect(org.yakindu.sct.model.stext.stext.ReactionEffect) StextTestFactory._createReactionEffect(org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)10 ExecutionFlow (org.yakindu.sct.model.sexec.ExecutionFlow)10 ReactionEffect (org.yakindu.sct.model.stext.stext.ReactionEffect)10 StextTestFactory._createReactionEffect (org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionEffect)10 LocalReaction (org.yakindu.sct.model.stext.stext.LocalReaction)9 VariableDefinition (org.yakindu.sct.model.stext.stext.VariableDefinition)9 StextTestFactory._createVariableDefinition (org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition)9 AssignmentExpression (org.yakindu.base.expressions.expressions.AssignmentExpression)8 ExecutionState (org.yakindu.sct.model.sexec.ExecutionState)8 StextTestFactory._createLocalReaction (org.yakindu.sct.model.stext.test.util.StextTestFactory._createLocalReaction)8 If (org.yakindu.sct.model.sexec.If)6 Sequence (org.yakindu.sct.model.sexec.Sequence)6 Step (org.yakindu.sct.model.sexec.Step)5 ReactionTrigger (org.yakindu.sct.model.stext.stext.ReactionTrigger)5 StextTestFactory._createReactionTrigger (org.yakindu.sct.model.stext.test.util.StextTestFactory._createReactionTrigger)5 MinimalTSC (org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.MinimalTSC)4 Region (org.yakindu.sct.model.sgraph.Region)4 State (org.yakindu.sct.model.sgraph.State)4 Statechart (org.yakindu.sct.model.sgraph.Statechart)4 Transition (org.yakindu.sct.model.sgraph.Transition)4