Search in sources :

Example 6 with ExecutionNode

use of org.yakindu.sct.model.sexec.ExecutionNode in project statecharts by Yakindu.

the class HistoryTest method testDeepHistory.

@Test
public void testDeepHistory() {
    Statechart sc = _createStatechart("sc");
    {
        InterfaceScope s_scope = _createInterfaceScope("Interface", sc);
        VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, s_scope);
        Region r = _createRegion("r", sc);
        {
            Entry r_entry = _createEntry(EntryKind.INITIAL, null, r);
            State s1 = _createState("s1", r);
            State s2 = _createState("s2", r);
            {
                _createEntryAssignment(v1, s2, 3);
                Region r2 = _createRegion("r2", s2);
                {
                    Entry e = _createEntry(EntryKind.INITIAL, null, r2);
                    Entry history = _createEntry(EntryKind.DEEP_HISTORY, "history", r2);
                    State s3 = _createState("s3", r2);
                    {
                        _createEntryAssignment(v1, s3, 4);
                    }
                    State s4 = _createState("s4", r2);
                    {
                        _createEntryAssignment(v1, s4, 6);
                        Region r4 = _createRegion("r4", s4);
                        {
                            Entry e4 = _createEntry(EntryKind.INITIAL, null, r2);
                            State s5 = _createState("s5", r4);
                            _createTransition(e4, s5);
                        }
                    }
                    _createTransition(e, s3);
                    _createTransition(history, s3);
                    _createTransition(s3, s4);
                    _createTransition(s1, history);
                }
            }
            _createTransition(r_entry, s1);
            _createTransition(s1, s2);
        }
    }
    ExecutionFlow flow = sequencer.transform(sc);
    ExecutionState _s3 = flow.getStates().get(2);
    assertEquals("sc.r.s2.r2.s3", _s3.getName());
    ExecutionState _s4 = flow.getStates().get(3);
    assertEquals("sc.r.s2.r2.s4", _s4.getName());
    ExecutionState _s5 = flow.getStates().get(4);
    assertEquals("sc.r.s2.r2.s4.r4.s5", _s5.getName());
    ExecutionNode e = flow.getNodes().get(2);
    assertTrue(e.eClass().getName(), e instanceof ExecutionEntry);
    Sequence reactSequence = e.getReactSequence();
    assertEquals("Default react sequence for deep history entry history", reactSequence.getComment());
    Step historyEntry = reactSequence.getSteps().get(0);
    assertTrue(historyEntry.eClass().getName(), historyEntry instanceof HistoryEntry);
    assertedOrder(reactSequence, Sets.newHashSet(_s3), // 
    Lists.newArrayList(// 
    new StepHistory(historyEntry, false), // 
    new StepLeaf(_s3.getEnterSequences().get(0))));
    assertedOrder(reactSequence, Sets.newHashSet(_s3), // 
    Lists.newArrayList(// 
    new StepHistory(historyEntry, true), // 
    new StepLeaf(_s3.getEnterSequences().get(0))));
    assertedOrder(reactSequence, Sets.newHashSet(_s5), // 
    Lists.newArrayList(// 
    new StepHistory(historyEntry, true), // 
    new StepLeaf(_s4.getEntryAction()), // 
    new StepLeaf(_s5.getEnterSequences().get(0))));
// assertCall(assertedSequence(tr0.getEffect()), 0,
// _s2.getEnterSequence());
}
Also used : ExecutionState(org.yakindu.sct.model.sexec.ExecutionState) VariableDefinition(org.yakindu.sct.model.stext.stext.VariableDefinition) StextTestFactory._createVariableDefinition(org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition) ExecutionFlow(org.yakindu.sct.model.sexec.ExecutionFlow) ExecutionNode(org.yakindu.sct.model.sexec.ExecutionNode) InterfaceScope(org.yakindu.sct.model.stext.stext.InterfaceScope) StextTestFactory._createInterfaceScope(org.yakindu.sct.model.stext.test.util.StextTestFactory._createInterfaceScope) ExecutionEntry(org.yakindu.sct.model.sexec.ExecutionEntry) Sequence(org.yakindu.sct.model.sexec.Sequence) Step(org.yakindu.sct.model.sexec.Step) Entry(org.yakindu.sct.model.sgraph.Entry) ExecutionEntry(org.yakindu.sct.model.sexec.ExecutionEntry) HistoryEntry(org.yakindu.sct.model.sexec.HistoryEntry) SGraphTestFactory._createEntry(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createEntry) SGraphTestFactory._createState(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createState) ExecutionState(org.yakindu.sct.model.sexec.ExecutionState) State(org.yakindu.sct.model.sgraph.State) 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) HistoryEntry(org.yakindu.sct.model.sexec.HistoryEntry) Test(org.junit.Test)

Example 7 with ExecutionNode

use of org.yakindu.sct.model.sexec.ExecutionNode in project statecharts by Yakindu.

the class HistoryTest method testShallowHistory.

@Test
public void testShallowHistory() {
    Statechart sc = _createStatechart("sc");
    {
        InterfaceScope s_scope = _createInterfaceScope("Interface", sc);
        VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, s_scope);
        Region r = _createRegion("r", sc);
        {
            Entry r_entry = _createEntry(EntryKind.INITIAL, null, r);
            State s1 = _createState("s1", r);
            State s2 = _createState("s2", r);
            {
                _createEntryAssignment(v1, s2, 3);
                Region r2 = _createRegion("r2", s2);
                {
                    Entry e = _createEntry(EntryKind.INITIAL, null, r2);
                    Entry history = _createEntry(EntryKind.SHALLOW_HISTORY, "history", r2);
                    State s3 = _createState("s3", r2);
                    {
                        _createEntryAssignment(v1, s3, 4);
                    }
                    State s4 = _createState("s4", r2);
                    {
                        Region r4 = _createRegion("r4", s4);
                        {
                            Entry e4 = _createEntry(EntryKind.INITIAL, null, r2);
                            State s5 = _createState("s5", r4);
                            _createTransition(e4, s5);
                            _createTransition(s5, s1);
                        }
                    }
                    _createTransition(e, s3);
                    _createTransition(history, s3);
                    _createTransition(s3, s4);
                    _createTransition(s1, history);
                }
            }
            _createTransition(r_entry, s1);
            _createTransition(s1, s2);
        }
    }
    ExecutionFlow flow = sequencer.transform(sc);
    ExecutionState _s3 = flow.getStates().get(2);
    assertEquals("sc.r.s2.r2.s3", _s3.getName());
    ExecutionState _s4 = flow.getStates().get(3);
    assertEquals("sc.r.s2.r2.s4", _s4.getName());
    ExecutionState _s5 = flow.getStates().get(4);
    assertEquals("sc.r.s2.r2.s4.r4.s5", _s5.getName());
    ExecutionNode e = flow.getNodes().get(2);
    assertTrue(e.eClass().getName(), e instanceof ExecutionEntry);
    Sequence reactSequence = e.getReactSequence();
    assertEquals("Default react sequence for shallow history entry history", reactSequence.getComment());
    Step historyEntry = reactSequence.getSteps().get(0);
    assertTrue(historyEntry.eClass().getName(), historyEntry instanceof HistoryEntry);
    assertedOrder(reactSequence, Sets.newHashSet(_s3), // 
    Lists.newArrayList(// 
    new StepHistory(historyEntry, false), // 
    new StepLeaf(_s3.getEnterSequences().get(0))));
    assertedOrder(reactSequence, Sets.newHashSet(_s3), // 
    Lists.newArrayList(// 
    new StepHistory(historyEntry, true), // 
    new StepLeaf(_s3.getEnterSequences().get(0))));
    assertedOrder(reactSequence, Sets.newHashSet(_s5), // 
    Lists.newArrayList(// 
    new StepHistory(historyEntry, true), // 
    new StepLeaf(_s4.getEnterSequences().get(0))));
}
Also used : ExecutionState(org.yakindu.sct.model.sexec.ExecutionState) VariableDefinition(org.yakindu.sct.model.stext.stext.VariableDefinition) StextTestFactory._createVariableDefinition(org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition) ExecutionFlow(org.yakindu.sct.model.sexec.ExecutionFlow) ExecutionNode(org.yakindu.sct.model.sexec.ExecutionNode) InterfaceScope(org.yakindu.sct.model.stext.stext.InterfaceScope) StextTestFactory._createInterfaceScope(org.yakindu.sct.model.stext.test.util.StextTestFactory._createInterfaceScope) ExecutionEntry(org.yakindu.sct.model.sexec.ExecutionEntry) Sequence(org.yakindu.sct.model.sexec.Sequence) Step(org.yakindu.sct.model.sexec.Step) Entry(org.yakindu.sct.model.sgraph.Entry) ExecutionEntry(org.yakindu.sct.model.sexec.ExecutionEntry) HistoryEntry(org.yakindu.sct.model.sexec.HistoryEntry) SGraphTestFactory._createEntry(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createEntry) SGraphTestFactory._createState(org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createState) ExecutionState(org.yakindu.sct.model.sexec.ExecutionState) State(org.yakindu.sct.model.sgraph.State) 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) HistoryEntry(org.yakindu.sct.model.sexec.HistoryEntry) Test(org.junit.Test)

Aggregations

ExecutionNode (org.yakindu.sct.model.sexec.ExecutionNode)7 Test (org.junit.Test)6 ExecutionFlow (org.yakindu.sct.model.sexec.ExecutionFlow)6 ExecutionState (org.yakindu.sct.model.sexec.ExecutionState)6 Entry (org.yakindu.sct.model.sgraph.Entry)6 Region (org.yakindu.sct.model.sgraph.Region)6 State (org.yakindu.sct.model.sgraph.State)6 Statechart (org.yakindu.sct.model.sgraph.Statechart)6 SGraphTestFactory._createEntry (org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createEntry)6 SGraphTestFactory._createRegion (org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createRegion)6 SGraphTestFactory._createState (org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createState)6 SGraphTestFactory._createStatechart (org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createStatechart)6 InterfaceScope (org.yakindu.sct.model.stext.stext.InterfaceScope)6 VariableDefinition (org.yakindu.sct.model.stext.stext.VariableDefinition)6 StextTestFactory._createInterfaceScope (org.yakindu.sct.model.stext.test.util.StextTestFactory._createInterfaceScope)6 StextTestFactory._createVariableDefinition (org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition)6 ExecutionRegion (org.yakindu.sct.model.sexec.ExecutionRegion)5 HistoryEntry (org.yakindu.sct.model.sexec.HistoryEntry)5 Sequence (org.yakindu.sct.model.sexec.Sequence)5 ExecutionEntry (org.yakindu.sct.model.sexec.ExecutionEntry)4