Parcourir la source

Moved empty transition test from sgraph to stext

Andreas Mülder il y a 11 ans
Parent
commit
78b6411dcb

+ 0 - 26
plugins/org.yakindu.sct.model.sgraph/src/org/yakindu/sct/model/sgraph/validation/SGraphJavaValidator.java

@@ -27,7 +27,6 @@ import org.yakindu.sct.model.sgraph.Choice;
 import org.yakindu.sct.model.sgraph.CompositeElement;
 import org.yakindu.sct.model.sgraph.Entry;
 import org.yakindu.sct.model.sgraph.EntryKind;
-import org.yakindu.sct.model.sgraph.Exit;
 import org.yakindu.sct.model.sgraph.FinalState;
 import org.yakindu.sct.model.sgraph.Region;
 import org.yakindu.sct.model.sgraph.Synchronization;
@@ -67,11 +66,7 @@ public class SGraphJavaValidator extends AbstractDeclarativeValidator {
 	public static final String ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_ORTHOGONAL = "The source states of a synchronization must be orthogonal!";
 	public static final String ISSUE_SYNCHRONIZATION_SOURCE_STATES_NOT_WITHIN_SAME_PARENTSTATE = "The source states of a synchronization have to be contained in the same parent state within different regions!";
 	public static final String ISSUE_SYNCHRONIZATION_TRANSITION_COUNT = "A synchronization should have at least two incoming or two outgoing transitions";
-	public static final String ISSUE_TRANSITION_WITHOUT_TRIGGER = "Missing trigger. Transisition is never taken. Use 'oncycle' or 'always' instead";
 
-	public SGraphJavaValidator() {
-		// TODO Auto-generated constructor stub
-	}
 
 	@Check(CheckType.FAST)
 	public void vertexNotReachable(final Vertex vertex) {
@@ -196,27 +191,6 @@ public class SGraphJavaValidator extends AbstractDeclarativeValidator {
 		orthogonalStates(fork, false);
 	}
 
-	@Check(CheckType.FAST)
-	public void transitionsWithNoTrigger(Transition trans) {
-		if (trans.getSource() instanceof Entry || trans.getSource() instanceof Choice) {
-			return;
-		}
-		if (trans.getSource() instanceof org.yakindu.sct.model.sgraph.State) {
-			org.yakindu.sct.model.sgraph.State state = (org.yakindu.sct.model.sgraph.State) trans.getSource();
-			if (state.isComposite()) {
-				for (Region r : state.getRegions()) {
-					for (Vertex v : r.getVertices()) {
-						if (v instanceof Exit) {
-							return;
-						}
-					}
-				}
-			}
-		}
-		if (trans.getTrigger() == null) {
-			warning(ISSUE_TRANSITION_WITHOUT_TRIGGER, trans, null, -1);
-		}
-	}
 
 	private void orthogonalStates(Synchronization fork, boolean searchTarget) {
 		List<Transition> transitions = searchTarget ? fork.getOutgoingTransitions() : fork.getIncomingTransitions();

+ 25 - 0
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/STextJavaValidator.java

@@ -50,6 +50,7 @@ import org.yakindu.sct.model.sgraph.ScopedElement;
 import org.yakindu.sct.model.sgraph.Transition;
 import org.yakindu.sct.model.sgraph.Trigger;
 import org.yakindu.sct.model.sgraph.Variable;
+import org.yakindu.sct.model.sgraph.Vertex;
 import org.yakindu.sct.model.sgraph.resource.AbstractSCTResource;
 import org.yakindu.sct.model.sgraph.validation.SCTResourceValidator;
 import org.yakindu.sct.model.sgraph.validation.SGraphJavaValidator;
@@ -118,6 +119,7 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 	public static final String EXIT_DEFAULT_UNUSED = "The parent composite state has no 'default' exit transition.";
 	public static final String TRANSITION_EXIT_SPEC_ON_MULTIPLE_SIBLINGS = "ExitPointSpec can't be used on transition siblings.";
 	public static final String LEFT_HAND_ASSIGNMENT = "The left-hand side of an assignment must be a variable";
+	public static final String ISSUE_TRANSITION_WITHOUT_TRIGGER = "Missing trigger. Transisition is never taken. Use 'oncycle' or 'always' instead";
 
 	@Inject
 	private ISTextTypeInferrer typeInferrer;
@@ -131,6 +133,29 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 	@Named(Constants.LANGUAGE_NAME)
 	private String languageName;
 
+	@Check(CheckType.FAST)
+	public void transitionsWithNoTrigger(Transition trans) {
+		if (trans.getSource() instanceof Entry || trans.getSource() instanceof Choice) {
+			return;
+		}
+		if (trans.getSource() instanceof org.yakindu.sct.model.sgraph.State) {
+			org.yakindu.sct.model.sgraph.State state = (org.yakindu.sct.model.sgraph.State) trans.getSource();
+			if (state.isComposite()) {
+				for (Region r : state.getRegions()) {
+					for (Vertex v : r.getVertices()) {
+						if (v instanceof Exit) {
+							return;
+						}
+					}
+				}
+			}
+		}
+		if (trans.getTrigger() == null) {
+			warning(ISSUE_TRANSITION_WITHOUT_TRIGGER, trans, null, -1);
+		}
+	}
+	
+
 	@Check(CheckType.FAST)
 	public void checkUnusedEntry(final Entry entry) {
 		if (entry.getParentRegion().getComposite() instanceof org.yakindu.sct.model.sgraph.State

+ 1 - 85
test-plugins/org.yakindu.sct.model.sgraph.test/src/org/yakindu/sct/model/sgraph/test/SGraphJavaValidationTest.java

@@ -47,7 +47,6 @@ import org.junit.runner.RunWith;
 import org.yakindu.sct.model.sgraph.Choice;
 import org.yakindu.sct.model.sgraph.Entry;
 import org.yakindu.sct.model.sgraph.EntryKind;
-import org.yakindu.sct.model.sgraph.Exit;
 import org.yakindu.sct.model.sgraph.FinalState;
 import org.yakindu.sct.model.sgraph.Region;
 import org.yakindu.sct.model.sgraph.SGraphFactory;
@@ -487,90 +486,7 @@ public class SGraphJavaValidationTest {
 		assertError(diagnostics, ISSUE_CHOICE_WITHOUT_OUTGOING_TRANSITION);
 	}
 
-	/**
-	 * Show warning when transition has no guard
-	 */
-	@Test
-	public void transitionsWithNoTrigger() {
-		statechart = factory.createStatechart();
-		region = factory.createRegion();
-
-		// create vertices for main region
-		Entry entry = factory.createEntry();
-		State a = factory.createState();
-		a.setName("A");
-		State b = factory.createState();
-		b.setName("B");
-		State c = factory.createState();
-		c.setName("C");
-		State d = factory.createState();
-		c.setName("D");
-		Choice e = factory.createChoice();
-		State f = factory.createState();
-		f.setName("F");
-		Transition entryToA = createTransition(entry, a);
-		Transition aToB = createTransition(a, b);
-		Transition bToC = createTransition(b, c);
-		Transition cToD = createTransition(c, d);
-		Transition eToF = createTransition(e, f);
-
-		// create vertices for compositState
-		State bb = factory.createState();
-		bb.setName("BB");
-		Entry entryB = factory.createEntry();
-		Exit exitB = factory.createExit();
-
-		Region b_region = factory.createRegion();
-		b_region.getVertices().add(entryB);
-		b_region.getVertices().add(bb);
-		b_region.getVertices().add(exitB);
-		b.getRegions().add(b_region);
-		Transition entryBToBB = createTransition(entryB, bb);
-		Transition bbToExitB = createTransition(bb, exitB);
-
-		region.getVertices().add(entry);
-		region.getVertices().add(a);
-		region.getVertices().add(b);
-		region.getVertices().add(c);
-		region.getVertices().add(d);
-		statechart.getRegions().add(region);
-
-		// transitions from entry point to State A -> valid model with no
-		// warnings
-		assertTrue(validator.validate(eToF, diagnostics, new HashMap<Object, Object>()));
-		assertIssueCount(diagnostics, 0);
-
-		// transitions from entry point to State A -> valid model with no
-		// warnings
-		assertTrue(validator.validate(entryToA, diagnostics, new HashMap<Object, Object>()));
-		assertIssueCount(diagnostics, 0);
-
-		// transition from StateA to StateB -> valid model with warnings expect
-		// 1 warning in total
-		assertTrue(validator.validate(aToB, diagnostics, new HashMap<Object, Object>()));
-		assertIssueCount(diagnostics, 1);
-
-		// transition from EntryB to StateBB -> valid model with no warnings
-		// expect 1 warning in total
-		assertTrue(validator.validate(entryBToBB, diagnostics, new HashMap<Object, Object>()));
-		assertIssueCount(diagnostics, 1);
-
-		// transition from BB to ExitB -> valid model with warnings expect 2
-		// warning in total
-		assertTrue(validator.validate(bbToExitB, diagnostics, new HashMap<Object, Object>()));
-		assertIssueCount(diagnostics, 2);
-
-		// transition from B to C -> valid model with no warning warnings expect
-		// 2 warning in total
-		assertTrue(validator.validate(bToC, diagnostics, new HashMap<Object, Object>()));
-		assertIssueCount(diagnostics, 2);
-
-		// transition from C to D -> valid model with warning warning expect 3
-		// warning in total
-		assertTrue(validator.validate(cToD, diagnostics, new HashMap<Object, Object>()));
-		assertIssueCount(diagnostics, 3);
-
-	}
+	
 
 	@Test
 	public void synchronizationTransitionCount() {

+ 107 - 1
test-plugins/org.yakindu.sct.model.stext.test/src/org/yakindu/sct/model/stext/test/STextJavaValidatorTest.java

@@ -38,6 +38,7 @@ import java.util.Iterator;
 
 import org.eclipse.emf.common.util.BasicDiagnostic;
 import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.xtext.junit4.InjectWith;
 import org.eclipse.xtext.junit4.XtextRunner;
@@ -48,13 +49,18 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sgraph.Choice;
 import org.yakindu.sct.model.sgraph.Entry;
 import org.yakindu.sct.model.sgraph.Exit;
+import org.yakindu.sct.model.sgraph.Region;
+import org.yakindu.sct.model.sgraph.SGraphFactory;
 import org.yakindu.sct.model.sgraph.Scope;
 import org.yakindu.sct.model.sgraph.State;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.model.sgraph.Transition;
 import org.yakindu.sct.model.sgraph.Trigger;
+import org.yakindu.sct.model.sgraph.Vertex;
+import org.yakindu.sct.model.stext.resource.impl.StextResource;
 import org.yakindu.sct.model.stext.stext.Expression;
 import org.yakindu.sct.model.stext.stext.InterfaceScope;
 import org.yakindu.sct.model.stext.stext.InternalScope;
@@ -141,7 +147,7 @@ public class STextJavaValidatorTest extends AbstractSTextTest {
 
 	@Test
 	public void checkLeftHandAssignment() {
-		
+
 		Scope scope = (Scope) parseExpression(
 				"interface if : operation myOperation() : boolean event Event1 : boolean var myVar : boolean", null,
 				InterfaceScope.class.getSimpleName());
@@ -553,6 +559,106 @@ public class STextJavaValidatorTest extends AbstractSTextTest {
 		assertIssueCount(diagnostics, 4);
 	}
 
+	/**
+	 * Show warning when transition has no guard
+	 */
+	@Test
+	public void transitionsWithNoTrigger() {
+
+		StextResource resource = new StextResource(URI.createURI(""));
+		injector.injectMembers(resource);
+		SGraphFactory factory = SGraphFactory.eINSTANCE;
+		Statechart statechart = factory.createStatechart();
+		resource.getContents().add(statechart);
+		Region region = factory.createRegion();
+
+		// create vertices for main region
+		Entry entry = factory.createEntry();
+		State a = factory.createState();
+		a.setName("A");
+		State b = factory.createState();
+		b.setName("B");
+		State c = factory.createState();
+		c.setName("C");
+		State d = factory.createState();
+		c.setName("D");
+		Choice e = factory.createChoice();
+		State f = factory.createState();
+		f.setName("F");
+		Transition entryToA = createTransition(entry, a);
+		Transition aToB = createTransition(a, b);
+		Transition bToC = createTransition(b, c);
+		Transition cToD = createTransition(c, d);
+		Transition eToF = createTransition(e, f);
+
+		// create vertices for compositState
+		State bb = factory.createState();
+		bb.setName("BB");
+		Entry entryB = factory.createEntry();
+		Exit exitB = factory.createExit();
+
+		Region b_region = factory.createRegion();
+		b_region.getVertices().add(entryB);
+		b_region.getVertices().add(bb);
+		b_region.getVertices().add(exitB);
+		b.getRegions().add(b_region);
+		Transition entryBToBB = createTransition(entryB, bb);
+		Transition bbToExitB = createTransition(bb, exitB);
+
+		region.getVertices().add(entry);
+		region.getVertices().add(a);
+		region.getVertices().add(b);
+		region.getVertices().add(c);
+		region.getVertices().add(d);
+		statechart.getRegions().add(region);
+
+		BasicDiagnostic diagnostics = new BasicDiagnostic();
+		// transitions from entry point to State A -> valid model with no
+		// warnings
+		assertTrue(validator.validate(eToF, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 0);
+
+		// transitions from entry point to State A -> valid model with no
+		// warnings
+		assertTrue(validator.validate(entryToA, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 0);
+
+		// transition from StateA to StateB -> valid model with warnings expect
+		// 1 warning in total
+		assertTrue(validator.validate(aToB, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+
+		// transition from EntryB to StateBB -> valid model with no warnings
+		// expect 1 warning in total
+		assertTrue(validator.validate(entryBToBB, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 1);
+
+		// transition from BB to ExitB -> valid model with warnings expect 2
+		// warning in total
+		assertTrue(validator.validate(bbToExitB, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 2);
+
+		// transition from B to C -> valid model with no warning warnings expect
+		// 2 warning in total
+		assertTrue(validator.validate(bToC, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 2);
+
+		// transition from C to D -> valid model with warning warning expect 3
+		// warning in total
+		assertTrue(validator.validate(cToD, diagnostics, new HashMap<Object, Object>()));
+		assertIssueCount(diagnostics, 3);
+
+	}
+
+	protected Transition createTransition(Vertex source, Vertex target) {
+		Transition trans = SGraphFactory.eINSTANCE.createTransition();
+		trans.setSource(source);
+		trans.setTarget(target);
+		source.getOutgoingTransitions().add(trans);
+		target.getIncomingTransitions().add(trans);
+		return trans;
+	}
+
 	protected void assertError(BasicDiagnostic diag, String message) {
 		Diagnostic d = issueByName(diag, message);
 		assertNotNull("Issue '" + message + "' does not exist.", issueByName(diag, message));