Search in sources :

Example 36 with Entry

use of org.yakindu.sct.model.sgraph.Entry 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)

Example 37 with Entry

use of org.yakindu.sct.model.sgraph.Entry in project statecharts by Yakindu.

the class FactoryUtils method createStatechartModel.

/**
 * Creates a Statechart with an initial Region and an initial State
 *
 * @return instanceof {@link Statechart}
 */
public static void createStatechartModel(Resource resource, PreferencesHint preferencesHint) {
    // Create a statechart
    Statechart statechart = SGraphFactory.eINSTANCE.createStatechart();
    String lastSegment = resource.getURI().lastSegment();
    String statechartName = lastSegment.substring(0, lastSegment.indexOf('.'));
    statechart.setName(statechartName);
    statechart.setSpecification(INITIAL_SPECIFICATION);
    Diagram diagram = ViewService.createDiagram(statechart, StatechartDiagramEditor.ID, preferencesHint);
    diagram.setElement(statechart);
    // Add to resource
    resource.getContents().add(statechart);
    resource.getContents().add(diagram);
    // Create an initial region
    Region region = SGraphFactory.eINSTANCE.createRegion();
    region.setName(INITIAL_REGION_NAME);
    statechart.getRegions().add(region);
    Node regionView = ViewService.createNode(diagram, region, SemanticHints.REGION, preferencesHint);
    setRegionViewLayoutConstraint(regionView);
    // // Create an initial state
    Entry initialState = SGraphFactory.eINSTANCE.createEntry();
    initialState.setKind(EntryKind.INITIAL);
    region.getVertices().add(initialState);
    Node initialStateView = ViewService.createNode(getRegionCompartmentView(regionView), initialState, SemanticHints.ENTRY, preferencesHint);
    setInitialStateViewLayoutConstraint(initialStateView);
    // Create the first state
    State state = SGraphFactory.eINSTANCE.createState();
    state.setName("StateA");
    region.getVertices().add(state);
    Node stateNode = ViewService.createNode(getRegionCompartmentView(regionView), state, SemanticHints.STATE, preferencesHint);
    setStateViewLayoutConstraint(stateNode);
    // Create the transition from Initial State to State
    Transition transition = SGraphFactory.eINSTANCE.createTransition();
    transition.setSource(initialState);
    transition.setTarget(state);
    initialState.getOutgoingTransitions().add(transition);
    ViewService.createEdge(initialStateView, stateNode, transition, SemanticHints.TRANSITION, preferencesHint);
    // Create the textcompartment for events / variables
    Node textCompartment = ViewService.createNode(diagram, statechart, SemanticHints.STATECHART_TEXT, preferencesHint);
    setTextCompartmentLayoutConstraint(textCompartment);
}
Also used : Entry(org.yakindu.sct.model.sgraph.Entry) State(org.yakindu.sct.model.sgraph.State) Node(org.eclipse.gmf.runtime.notation.Node) DecorationNode(org.eclipse.gmf.runtime.notation.DecorationNode) Transition(org.yakindu.sct.model.sgraph.Transition) Statechart(org.yakindu.sct.model.sgraph.Statechart) Region(org.yakindu.sct.model.sgraph.Region) Diagram(org.eclipse.gmf.runtime.notation.Diagram)

Example 38 with Entry

use of org.yakindu.sct.model.sgraph.Entry in project statecharts by Yakindu.

the class SGraphJavaValidationTest method initialEntryWithMultipleOutgoingTransition.

/**
 * An entry should not have more than one outgoing transition
 */
@Test
public void initialEntryWithMultipleOutgoingTransition() {
    prepareStateTest();
    Entry entry = factory.createEntry();
    region.getVertices().add(entry);
    createTransition(entry, state);
    createTransition(entry, state);
    assertEquals(EntryKind.INITIAL, entry.getKind());
    assertFalse(validator.validate(entry, diagnostics, new HashMap<Object, Object>()));
    assertError(diagnostics, ISSUE_ENTRY_WITH_MULTIPLE_OUT_TRANS);
    entry.setKind(EntryKind.SHALLOW_HISTORY);
    diagnostics = new BasicDiagnostic();
    assertFalse(validator.validate(entry, diagnostics, new HashMap<Object, Object>()));
    assertError(diagnostics, ISSUE_ENTRY_WITH_MULTIPLE_OUT_TRANS);
    entry.setKind(EntryKind.DEEP_HISTORY);
    diagnostics = new BasicDiagnostic();
    assertFalse(validator.validate(entry, diagnostics, new HashMap<Object, Object>()));
    assertError(diagnostics, ISSUE_ENTRY_WITH_MULTIPLE_OUT_TRANS);
}
Also used : Entry(org.yakindu.sct.model.sgraph.Entry) HashMap(java.util.HashMap) BasicDiagnostic(org.eclipse.emf.common.util.BasicDiagnostic) Test(org.junit.Test)

Example 39 with Entry

use of org.yakindu.sct.model.sgraph.Entry in project statecharts by Yakindu.

the class SGraphJavaValidationTest method validState.

/**
 * A valid regular state must produce no issues.
 */
@Test
public void validState() {
    prepareStateTest();
    Entry entry = factory.createEntry();
    region.getVertices().add(entry);
    createTransition(entry, state);
    validate(state);
    // assertTrue(validator.validate(state, diagnostics,
    // new HashMap<Object, Object>()));
    assertIssueCount(diagnostics, 0);
}
Also used : Entry(org.yakindu.sct.model.sgraph.Entry) Test(org.junit.Test)

Example 40 with Entry

use of org.yakindu.sct.model.sgraph.Entry in project statecharts by Yakindu.

the class SGraphJavaValidationTest method initialEntryWithoutIncomingTransitions.

/**
 * An initial entry should have no incoming transition
 */
@Test
public void initialEntryWithoutIncomingTransitions() {
    prepareStateTest();
    Entry entry = factory.createEntry();
    region.getVertices().add(entry);
    createTransition(state, entry);
    assertEquals(EntryKind.INITIAL, entry.getKind());
    validator.validate(entry, diagnostics, new HashMap<Object, Object>());
    assertWarning(diagnostics, ISSUE_INITIAL_ENTRY_WITH_IN_TRANS);
}
Also used : Entry(org.yakindu.sct.model.sgraph.Entry) EObject(org.eclipse.emf.ecore.EObject) Test(org.junit.Test)

Aggregations

Entry (org.yakindu.sct.model.sgraph.Entry)47 Test (org.junit.Test)38 Region (org.yakindu.sct.model.sgraph.Region)38 State (org.yakindu.sct.model.sgraph.State)30 Statechart (org.yakindu.sct.model.sgraph.Statechart)30 ExecutionFlow (org.yakindu.sct.model.sexec.ExecutionFlow)29 SGraphTestFactory._createEntry (org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createEntry)29 SGraphTestFactory._createRegion (org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createRegion)29 SGraphTestFactory._createStatechart (org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createStatechart)29 SGraphTestFactory._createState (org.yakindu.sct.model.sgraph.test.util.SGraphTestFactory._createState)28 VariableDefinition (org.yakindu.sct.model.stext.stext.VariableDefinition)27 StextTestFactory._createVariableDefinition (org.yakindu.sct.model.stext.test.util.StextTestFactory._createVariableDefinition)27 StextTestFactory._createInterfaceScope (org.yakindu.sct.model.stext.test.util.StextTestFactory._createInterfaceScope)26 ExecutionState (org.yakindu.sct.model.sexec.ExecutionState)25 Sequence (org.yakindu.sct.model.sexec.Sequence)22 InterfaceScope (org.yakindu.sct.model.stext.stext.InterfaceScope)22 EnterState (org.yakindu.sct.model.sexec.EnterState)13 SCTTestUtil.findState (org.yakindu.sct.model.sexec.transformation.test.SCTTestUtil.findState)13 Reaction (org.yakindu.sct.model.sexec.Reaction)10 Transition (org.yakindu.sct.model.sgraph.Transition)10