Ver código fonte

add sctuinit test for StateWithEmptyRegions

Flow.Antony@gmail.com 12 anos atrás
pai
commit
26c2b6cbbb

+ 12 - 0
test-plugins/org.yakindu.sct.generator.java.test/model/model.sgen

@@ -168,6 +168,18 @@ GeneratorModel for yakindu::java {
 			RuntimeService = true
 		}
 	}
+	statechart StateWithEmptyRegion {
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.java.test"
+			targetFolder = "src-gen"
+		}
+
+		feature GeneralFeatures {
+			TimerService = true
+			RuntimeService = true
+		}
+	}
+	
 	statechart StatechartLocalReactions {
 		feature Outlet {
 			targetProject = "org.yakindu.sct.generator.java.test"

+ 6 - 0
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/statewithemptyregion/IStateWithEmptyRegionStatemachine.java

@@ -0,0 +1,6 @@
+package org.yakindu.scr.statewithemptyregion;
+import org.yakindu.scr.IStatemachine;
+
+public interface IStateWithEmptyRegionStatemachine extends IStatemachine {
+
+}

+ 116 - 0
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/statewithemptyregion/StateWithEmptyRegionStatemachine.java

@@ -0,0 +1,116 @@
+package org.yakindu.scr.statewithemptyregion;
+
+public class StateWithEmptyRegionStatemachine
+		implements
+			IStateWithEmptyRegionStatemachine {
+
+	public enum State {
+		main_region_A, main_region_B, $NullState$
+	};
+
+	private final State[] stateVector = new State[1];
+
+	private int nextStateIndex;
+
+	public StateWithEmptyRegionStatemachine() {
+
+	}
+
+	public void init() {
+		for (int i = 0; i < 1; i++) {
+			stateVector[i] = State.$NullState$;
+		}
+
+		clearEvents();
+		clearOutEvents();
+
+	}
+
+	public void enter() {
+		entryAction();
+
+		nextStateIndex = 0;
+		stateVector[0] = State.main_region_A;
+	}
+
+	public void exit() {
+		switch (stateVector[0]) {
+			case main_region_A :
+				nextStateIndex = 0;
+				stateVector[0] = State.$NullState$;
+				break;
+
+			case main_region_B :
+				nextStateIndex = 0;
+				stateVector[0] = State.$NullState$;
+				break;
+
+			default :
+				break;
+		}
+
+		exitAction();
+	}
+
+	protected void clearEvents() {
+
+	}
+
+	protected void clearOutEvents() {
+	}
+
+	public boolean isStateActive(State state) {
+		switch (state) {
+			case main_region_A :
+				return stateVector[0] == State.main_region_A;
+			case main_region_B :
+				return stateVector[0] == State.main_region_B;
+			default :
+				return false;
+		}
+	}
+
+	/* Entry action for statechart 'StateWithEmptyRegion'. */
+	private void entryAction() {
+	}
+
+	/* Exit action for state 'StateWithEmptyRegion'. */
+	private void exitAction() {
+	}
+
+	/* The reactions of state A. */
+	private void reactMain_region_A() {
+		if (true) {
+			nextStateIndex = 0;
+			stateVector[0] = State.$NullState$;
+
+			nextStateIndex = 0;
+			stateVector[0] = State.main_region_B;
+		}
+	}
+
+	/* The reactions of state B. */
+	private void reactMain_region_B() {
+	}
+
+	public void runCycle() {
+
+		clearOutEvents();
+
+		for (nextStateIndex = 0; nextStateIndex < stateVector.length; nextStateIndex++) {
+
+			switch (stateVector[nextStateIndex]) {
+				case main_region_A :
+					reactMain_region_A();
+					break;
+				case main_region_B :
+					reactMain_region_B();
+					break;
+				default :
+					// $NullState$
+			}
+		}
+
+		clearEvents();
+	}
+}

+ 7 - 0
test-plugins/org.yakindu.sct.generator.java.test/src/org/yakindu/sct/generator/java/JavaSCTGeneratorTest.java

@@ -31,6 +31,7 @@ import static util.TestModels.SIMPLE_EVENT;
 import static util.TestModels.SIMPLE_HIERACHY;
 import static util.TestModels.STATECHART_LOCAL_REACTIONS;
 import static util.TestModels.STATE_ACTIVE;
+import static util.TestModels.STATE_WITH_EMPTY_REGION;
 import static util.TestModels.STRING_EXPRESSIONS;
 import static util.TestModels.SYNC_FORK;
 import static util.TestModels.SYNC_JOIN;
@@ -212,6 +213,12 @@ public class JavaSCTGeneratorTest extends AbstractJavaGeneratorTest {
 		Statechart statechart = models.loadStatechartFromResource(STATE_ACTIVE);
 		failOnError(generateAndCompile(statechart));
 
+	}
+	@Test
+	public void testStateWithEmptyRegionModel() throws Exception {
+		Statechart statechart = models.loadStatechartFromResource(STATE_WITH_EMPTY_REGION);
+		failOnError(generateAndCompile(statechart));
+		
 	}
 
 	@Test

BIN
test-plugins/org.yakindu.sct.test.models/images/StateWithEmptyRegion.png


+ 12 - 1
test-plugins/org.yakindu.sct.test.models/src/util/TestModels.java

@@ -53,6 +53,7 @@ public class TestModels {
 	public static final String SIMPLE_EVENT = "SimpleEvent.sct";
 	public static final String SIMPLE_HIERACHY = "SimpleHierachy.sct";
 	public static final String STATE_ACTIVE = "StateIsActive.sct";
+	public static final String STATE_WITH_EMPTY_REGION = "StateWithEmptyRegion.sct";	
 	public static final String STATECHART_LOCAL_REACTIONS = "StatechartLocalReactions.sct";
 	public static final String STRING_EXPRESSIONS = "StringExpressions.sct";
 	public static final String SYNC_FORK = "SyncFork.sct";
@@ -262,7 +263,7 @@ public class TestModels {
 	 * 
 	 * @return the {@link ExecutionFlow}
 	 * @throws IOException
-	 */
+	 */ 
 	public ExecutionFlow createStatechartLocalReactionsModel()
 			throws IOException {
 		return loadExecutionFlowFromResource(STATECHART_LOCAL_REACTIONS);
@@ -277,6 +278,16 @@ public class TestModels {
 	public ExecutionFlow createStateIsActiveModel() throws IOException {
 		return loadExecutionFlowFromResource(STATE_ACTIVE);
 	}
+ 
+	/**
+	 * <img src="../../images/StateWithEmptyRegion.png" /> <br />
+	 * 
+	 * @return the {@link ExecutionFlow}
+	 * @throws IOException
+	 */
+	public ExecutionFlow createStateWithEmptyRegionModel() throws IOException {
+		return loadExecutionFlowFromResource(STATE_WITH_EMPTY_REGION);
+	}
 
 	/**
 	 * <img src="../../images/StringExpressions.png" /> <br />

+ 128 - 0
test-plugins/org.yakindu.sct.test.models/testmodels/StateWithEmptyRegion.sct

@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sgraph="http://www.yakindu.org/sct/sgraph/2.0.0">
+  <sgraph:Statechart xmi:id="_1yS4sGVgEeKWYor_23ii8A" name="StateWithEmptyRegion">
+    <regions xmi:id="_1yS4s2VgEeKWYor_23ii8A" name="main region">
+      <vertices xsi:type="sgraph:Entry" xmi:id="_1ylzpmVgEeKWYor_23ii8A">
+        <outgoingTransitions xmi:id="_1yvkpmVgEeKWYor_23ii8A" target="_1ylzsWVgEeKWYor_23ii8A"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_1ylzsWVgEeKWYor_23ii8A" name="A" incomingTransitions="_1yvkpmVgEeKWYor_23ii8A">
+        <outgoingTransitions xmi:id="_42iFwGVgEeKWYor_23ii8A" specification="" target="_4EryEGVgEeKWYor_23ii8A"/>
+        <regions xmi:id="_8fzSgGVgEeKWYor_23ii8A"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_4EryEGVgEeKWYor_23ii8A" name="B" incomingTransitions="_42iFwGVgEeKWYor_23ii8A">
+        <regions xmi:id="_9C6moGVgEeKWYor_23ii8A"/>
+      </vertices>
+    </regions>
+  </sgraph:Statechart>
+  <notation:Diagram xmi:id="_1yS4sWVgEeKWYor_23ii8A" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_1yS4sGVgEeKWYor_23ii8A" measurementUnit="Pixel">
+    <children xmi:id="_1yS4tGVgEeKWYor_23ii8A" type="Region" element="_1yS4s2VgEeKWYor_23ii8A">
+      <children xsi:type="notation:DecorationNode" xmi:id="_1ylzoGVgEeKWYor_23ii8A" type="RegionName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_1ylzoWVgEeKWYor_23ii8A"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_1ylzomVgEeKWYor_23ii8A"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_1ylzo2VgEeKWYor_23ii8A" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+        <children xmi:id="_1ylzp2VgEeKWYor_23ii8A" type="Entry" element="_1ylzpmVgEeKWYor_23ii8A">
+          <children xmi:id="_1ylzqmVgEeKWYor_23ii8A" type="BorderItemLabelContainer">
+            <children xsi:type="notation:DecorationNode" xmi:id="_1ylzrWVgEeKWYor_23ii8A" type="BorderItemLabel">
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_1ylzrmVgEeKWYor_23ii8A"/>
+              <layoutConstraint xsi:type="notation:Location" xmi:id="_1ylzr2VgEeKWYor_23ii8A"/>
+            </children>
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_1ylzq2VgEeKWYor_23ii8A" fontName="Verdana" lineColor="4210752"/>
+            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1ylzrGVgEeKWYor_23ii8A"/>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_1ylzqGVgEeKWYor_23ii8A" fontName="Verdana" lineColor="4210752"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1ylzsGVgEeKWYor_23ii8A" x="70" y="20"/>
+        </children>
+        <children xmi:id="_1ylzs2VgEeKWYor_23ii8A" type="State" element="_1ylzsWVgEeKWYor_23ii8A">
+          <children xsi:type="notation:DecorationNode" xmi:id="_1ylzt2VgEeKWYor_23ii8A" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_1ylzuGVgEeKWYor_23ii8A"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_1ylzuWVgEeKWYor_23ii8A"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_1yvkoGVgEeKWYor_23ii8A" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_1yvkoWVgEeKWYor_23ii8A" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1yvkomVgEeKWYor_23ii8A"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_1yvko2VgEeKWYor_23ii8A" type="StateFigureCompartment">
+            <children xmi:id="_8fzSgWVgEeKWYor_23ii8A" type="Region" element="_8fzSgGVgEeKWYor_23ii8A">
+              <children xsi:type="notation:DecorationNode" xmi:id="_8f9DgGVgEeKWYor_23ii8A" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_8f9DgWVgEeKWYor_23ii8A"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_8f9DgmVgEeKWYor_23ii8A"/>
+              </children>
+              <children xsi:type="notation:Shape" xmi:id="_8f9Dg2VgEeKWYor_23ii8A" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_8f9DhGVgEeKWYor_23ii8A"/>
+              </children>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_8fzSgmVgEeKWYor_23ii8A" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_8fzSg2VgEeKWYor_23ii8A"/>
+            </children>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_1ylztGVgEeKWYor_23ii8A" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_1ylztWVgEeKWYor_23ii8A"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_1yvkpGVgEeKWYor_23ii8A" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1yvkpWVgEeKWYor_23ii8A" x="9" y="79" width="175" height="180"/>
+        </children>
+        <children xmi:id="_4EryEmVgEeKWYor_23ii8A" type="State" element="_4EryEGVgEeKWYor_23ii8A">
+          <children xsi:type="notation:DecorationNode" xmi:id="_4EryFmVgEeKWYor_23ii8A" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_4EryF2VgEeKWYor_23ii8A"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_4EryGGVgEeKWYor_23ii8A"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_4EryGWVgEeKWYor_23ii8A" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_4EryGmVgEeKWYor_23ii8A" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_4EryG2VgEeKWYor_23ii8A"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_4EryHGVgEeKWYor_23ii8A" type="StateFigureCompartment">
+            <children xmi:id="_9C6moWVgEeKWYor_23ii8A" type="Region" element="_9C6moGVgEeKWYor_23ii8A">
+              <children xsi:type="notation:DecorationNode" xmi:id="_9C6mpGVgEeKWYor_23ii8A" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_9C6mpWVgEeKWYor_23ii8A"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_9C6mpmVgEeKWYor_23ii8A"/>
+              </children>
+              <children xsi:type="notation:Shape" xmi:id="_9C6mp2VgEeKWYor_23ii8A" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_9C6mqGVgEeKWYor_23ii8A"/>
+              </children>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_9C6momVgEeKWYor_23ii8A" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_9C6mo2VgEeKWYor_23ii8A"/>
+            </children>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_4EryE2VgEeKWYor_23ii8A" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_4EryFGVgEeKWYor_23ii8A"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_4EryHWVgEeKWYor_23ii8A" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_4EryFWVgEeKWYor_23ii8A" x="264" y="124"/>
+        </children>
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1ylzpGVgEeKWYor_23ii8A"/>
+      </children>
+      <styles xsi:type="notation:ShapeStyle" xmi:id="_1yS4tWVgEeKWYor_23ii8A" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1ylzpWVgEeKWYor_23ii8A" x="220" y="10" width="400" height="400"/>
+    </children>
+    <children xsi:type="notation:Shape" xmi:id="_1yvkrmVgEeKWYor_23ii8A" type="StatechartText" fontName="Verdana" lineColor="4210752">
+      <children xsi:type="notation:DecorationNode" xmi:id="_1yvksGVgEeKWYor_23ii8A" type="StatechartName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_1yvksWVgEeKWYor_23ii8A"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_1yvksmVgEeKWYor_23ii8A"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_1yvks2VgEeKWYor_23ii8A" type="StatechartTextExpression" fontName="Verdana" lineColor="4210752">
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1yvktGVgEeKWYor_23ii8A"/>
+      </children>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_1yvktWVgEeKWYor_23ii8A" x="10" y="10" width="200" height="400"/>
+    </children>
+    <styles xsi:type="notation:DiagramStyle" xmi:id="_1yS4smVgEeKWYor_23ii8A"/>
+    <edges xmi:id="_1yvkp2VgEeKWYor_23ii8A" type="Transition" element="_1yvkpmVgEeKWYor_23ii8A" source="_1ylzp2VgEeKWYor_23ii8A" target="_1ylzs2VgEeKWYor_23ii8A">
+      <children xsi:type="notation:DecorationNode" xmi:id="_1yvkq2VgEeKWYor_23ii8A" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_1yvkrGVgEeKWYor_23ii8A"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_1yvkrWVgEeKWYor_23ii8A" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_1yvkqGVgEeKWYor_23ii8A" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_1yvkqmVgEeKWYor_23ii8A" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_1yvkqWVgEeKWYor_23ii8A" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    </edges>
+    <edges xmi:id="_42iFwWVgEeKWYor_23ii8A" type="Transition" element="_42iFwGVgEeKWYor_23ii8A" source="_1ylzs2VgEeKWYor_23ii8A" target="_4EryEmVgEeKWYor_23ii8A">
+      <children xsi:type="notation:DecorationNode" xmi:id="_42rPsGVgEeKWYor_23ii8A" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_42rPsWVgEeKWYor_23ii8A"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_42rPsmVgEeKWYor_23ii8A" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_42iFwmVgEeKWYor_23ii8A" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_42iFxGVgEeKWYor_23ii8A" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_42iFw2VgEeKWYor_23ii8A" points="[12, 2, -118, -3]$[123, -23, -7, -28]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_42rPs2VgEeKWYor_23ii8A" id="(0.9314285714285714,0.4722222222222222)"/>
+    </edges>
+  </notation:Diagram>
+</xmi:XMI>

+ 10 - 0
test-plugins/org.yakindu.sct.test.models/tests/StateWithEmptyRegion.sctunit

@@ -0,0 +1,10 @@
+
+testgroup StateWithEmptyRegion for statechart StateWithEmptyRegion{
+	test StateWithEmptyRegionTest { 
+		enter
+		assert active(StateWithEmptyRegion.main_region.A)
+		cycle
+		
+		assert active(StateWithEmptyRegion.main_region.B)	 
+	} 
+}