AxelTerfloth@googlemail.com 11 лет назад
Родитель
Сommit
9f9fb1b6a3
37 измененных файлов с 824 добавлено и 46 удалено
  1. 1 1
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/BehaviorMapping.xtend
  2. 6 0
      plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/StextExtensions.xtend
  3. 55 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/TriggerGuardExpressions/TriggerGuardExpressions.cc
  4. 8 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/TriggerGuardExpressions/TriggerGuardExpressions.sgen
  5. 12 0
      test-plugins/org.yakindu.sct.generator.c.test/model/test.sgen
  6. 1 1
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/AllTests.java
  7. 39 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/TriggerGuardExpressions.java
  8. 8 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/TriggerGuardExpressionsTest/TriggerGuardExpressions.sgen
  9. 54 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/TriggerGuardExpressionsTest/TriggerGuardExpressionsTest.cc
  10. 12 0
      test-plugins/org.yakindu.sct.generator.cpp.test/model/test.sgen
  11. 2 1
      test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/AllTestsTest.java
  12. 39 0
      test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/TriggerGuardExpressionsTest.java
  13. 12 0
      test-plugins/org.yakindu.sct.generator.java.test/model/model.sgen
  14. 9 0
      test-plugins/org.yakindu.sct.generator.java.test/model/test.sgen
  15. 1 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/castexpressions/CastExpressionsStatemachine.java
  16. 1 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ckeywords/CKeywordsStatemachine.java
  17. 1 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/conditionalexpressions/ConditionalExpressionsStatemachine.java
  18. 1 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/guard/GuardStatemachine.java
  19. 1 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/javakeywords/JavaKeywordsStatemachine.java
  20. 3 3
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/namedinterfaceaccess/NamedInterfaceAccessStatemachine.java
  21. 1 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/operations/OperationsStatemachine.java
  22. 1 1
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/priorityvalues/PriorityValuesStatemachine.java
  23. 19 19
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/stextkeywordsinstatesandregions/STextKeywordsInStatesAndRegionsStatemachine.java
  24. 8 8
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/stringexpressions/StringExpressionsStatemachine.java
  25. 16 0
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/triggerguardexpressions/ITriggerGuardExpressionsStatemachine.java
  26. 185 0
      test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/triggerguardexpressions/TriggerGuardExpressionsStatemachine.java
  27. 2 1
      test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTestsTest.java
  28. 75 0
      test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/TriggerGuardExpressionsTest.java
  29. 9 0
      test-plugins/org.yakindu.sct.simulation.core.sexec.test/model/test.sgen
  30. 2 1
      test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/AllTestsTest.java
  31. 0 4
      test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/CastExpressionsTest.java
  32. 72 0
      test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/TriggerGuardExpressionsTest.java
  33. 1 0
      test-plugins/org.yakindu.sct.test.models/.settings/org.eclipse.core.resources.prefs
  34. 3 0
      test-plugins/org.yakindu.sct.test.models/src/org/yakindu/sct/test/models/SCTUnitTestModels.java
  35. 113 0
      test-plugins/org.yakindu.sct.test.models/testmodels/SCTUnit/TriggerGuardExpressions.sct
  36. 1 0
      test-plugins/org.yakindu.sct.test.models/tests/AllTests.sctunit
  37. 50 0
      test-plugins/org.yakindu.sct.test.models/tests/TriggerGuardExpressions.sctunit

+ 1 - 1
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/BehaviorMapping.xtend

@@ -720,7 +720,7 @@ class BehaviorMapping {
 		
 		val guard = t.buildGuard
 		
-		if ( triggerCheck != null && guard != null ) stext.and(triggerCheck, guard)
+		if ( triggerCheck != null && guard != null )  stext.and(stext.parenthesis(triggerCheck), guard)
 		else if ( triggerCheck != null )  triggerCheck
 		else guard
 	}

+ 6 - 0
plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/transformation/StextExtensions.xtend

@@ -27,6 +27,12 @@ class StextExtensions {
 		and
 	}
 
+	def Expression parenthesis(Expression exp) {
+		val p = expfactory.createParenthesizedExpression
+		p.expression = exp
+		p
+	}
+
 
 	def Expression active(State state) {
 		val active = factory.createActiveStateReferenceExpression

+ 55 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/TriggerGuardExpressions/TriggerGuardExpressions.cc

@@ -0,0 +1,55 @@
+/**
+* Copyright (c) 2014 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+#include <string>
+#include "gtest/gtest.h"
+#include "TriggerGuardExpressions.h"
+
+
+TriggerGuardExpressions handle;
+
+TEST(StatemachineTest, trueGuard) {
+	triggerGuardExpressions_init(&handle);
+	triggerGuardExpressions_enter(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_A));
+	triggerGuardExpressionsIface_raise_e1(&handle);
+	triggerGuardExpressionsIface_set_b(&handle, true);
+	triggerGuardExpressions_runCycle(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_B));
+	triggerGuardExpressions_runCycle(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_A));
+	triggerGuardExpressionsIface_raise_e2(&handle);
+	triggerGuardExpressions_runCycle(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_B));
+	triggerGuardExpressions_runCycle(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_A));
+	triggerGuardExpressionsIface_raise_e1(&handle);
+	triggerGuardExpressionsIface_raise_e2(&handle);
+	triggerGuardExpressions_runCycle(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_B));
+}
+TEST(StatemachineTest, falseGuard) {
+	triggerGuardExpressions_init(&handle);
+	triggerGuardExpressions_enter(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_A));
+	triggerGuardExpressionsIface_set_b(&handle, false);
+	triggerGuardExpressionsIface_raise_e1(&handle);
+	triggerGuardExpressions_runCycle(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_A));
+	triggerGuardExpressionsIface_raise_e2(&handle);
+	triggerGuardExpressions_runCycle(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_A));
+	triggerGuardExpressionsIface_raise_e1(&handle);
+	triggerGuardExpressionsIface_raise_e2(&handle);
+	triggerGuardExpressions_runCycle(&handle);
+	EXPECT_TRUE(triggerGuardExpressions_isActive(&handle, TriggerGuardExpressions_main_region_A));
+}
+
+		

+ 8 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/TriggerGuardExpressions/TriggerGuardExpressions.sgen

@@ -0,0 +1,8 @@
+GeneratorModel for yakindu::c {
+	statechart TriggerGuardExpressions {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "TriggerGuardExpressions"
+		}
+	}
+}

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

@@ -607,6 +607,18 @@ GeneratorModel for sctunit::c {
 		}			
 	}	
 
+	test TriggerGuardExpressions{
+		
+		feature Outlet{ 
+			targetProject = "org.yakindu.sct.generator.c.test" 
+			targetFolder = "test-gen"			
+		}		
+				
+		feature JUnitWrapper {
+			WrapToJUnit =  "true" 
+		}			
+	}	
+
 	test ValuedEvents{
 		
 		feature Outlet{ 

+ 1 - 1
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/AllTests.java

@@ -32,6 +32,6 @@ import org.junit.runners.Suite.SuiteClasses;
 		SimpleHierachy.class, StateIsActive.class, StaticChoice.class,
 		STextKeywordsInStatesAndRegions.class, StringExpressions.class,
 		SyncFork.class, SyncJoin.class, TransitionWithoutCondition.class,
-		ValuedEvents.class})
+		TriggerGuardExpressions.class, ValuedEvents.class})
 public class AllTests {
 }

+ 39 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/TriggerGuardExpressions.java

@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2014 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     committers of YAKINDU - initial API and implementation
+ */
+package org.yakindu.sct.generator.c.test;
+
+import java.util.Collection;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.generator.c.gtest.GTest;
+import org.yakindu.sct.generator.c.gtest.GTestRunner;
+import org.yakindu.sct.generator.c.gtest.GTestHelper;
+
+@GTest(sourceFile = "gtests/TriggerGuardExpressions/TriggerGuardExpressions.cc", program = "gtests/TriggerGuardExpressions/TriggerGuardExpressions", model = "testmodels/SCTUnit/TriggerGuardExpressions.sct")
+@RunWith(GTestRunner.class)
+public class TriggerGuardExpressions {
+
+	protected final GTestHelper helper = new GTestHelper(this) {
+
+		@Override
+		protected void getSourceFiles(Collection<String> files) {
+			super.getSourceFiles(files);
+			files.add(getFileName(getTestProgram()) + ".c");
+		}
+	};
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

+ 8 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/TriggerGuardExpressionsTest/TriggerGuardExpressions.sgen

@@ -0,0 +1,8 @@
+GeneratorModel for yakindu::cpp {
+	statechart TriggerGuardExpressions {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "TriggerGuardExpressionsTest"
+		}
+	}
+}

+ 54 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/TriggerGuardExpressionsTest/TriggerGuardExpressionsTest.cc

@@ -0,0 +1,54 @@
+/**
+* Copyright (c) 2014 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+#include <string>
+#include "gtest/gtest.h"
+#include "TriggerGuardExpressions.h"
+
+TEST(StatemachineTest, trueGuard) {
+	TriggerGuardExpressions* statechart = new TriggerGuardExpressions();
+	statechart->init();
+	statechart->enter();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_A));
+	statechart->raise_e1();
+	statechart->getDefaultSCI()->set_b(true);
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_B));
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_A));
+	statechart->raise_e2();
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_B));
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_A));
+	statechart->raise_e1();
+	statechart->raise_e2();
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_B));
+	delete statechart;
+}
+TEST(StatemachineTest, falseGuard) {
+	TriggerGuardExpressions* statechart = new TriggerGuardExpressions();
+	statechart->init();
+	statechart->enter();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_A));
+	statechart->getDefaultSCI()->set_b(false);
+	statechart->raise_e1();
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_A));
+	statechart->raise_e2();
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_A));
+	statechart->raise_e1();
+	statechart->raise_e2();
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isActive(TriggerGuardExpressions::main_region_A));
+	delete statechart;
+}

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

@@ -602,6 +602,18 @@ GeneratorModel for sctunit::cpp {
 		}				
 	}	
 
+	test TriggerGuardExpressions {
+		
+		feature Outlet{ 
+			targetProject = "org.yakindu.sct.generator.cpp.test" 
+			targetFolder = "test-gen"			
+		}	
+		
+		feature JUnitWrapper {
+			WrapToJUnit =  "true"
+		}				
+	}	
+
 	test ValuedEvents{
 		
 		feature Outlet{ 

+ 2 - 1
test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/AllTestsTest.java

@@ -35,6 +35,7 @@ import org.junit.runners.Suite.SuiteClasses;
 		StateIsActiveTest.class, StaticChoiceTest.class,
 		STextKeywordsInStatesAndRegionsTest.class, StringExpressionsTest.class,
 		SyncForkTest.class, SyncJoinTest.class,
-		TransitionWithoutConditionTest.class, ValuedEventsTest.class})
+		TransitionWithoutConditionTest.class,
+		TriggerGuardExpressionsTest.class, ValuedEventsTest.class})
 public class AllTestsTest {
 }

+ 39 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/TriggerGuardExpressionsTest.java

@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2014 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     committers of YAKINDU - initial API and implementation
+ */
+package org.yakindu.sct.generator.cpp.test;
+
+import java.util.Collection;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.generator.c.gtest.GTest;
+import org.yakindu.sct.generator.c.gtest.GTestRunner;
+import org.yakindu.sct.generator.c.gtest.GTestHelper;
+
+@GTest(sourceFile = "gtests/TriggerGuardExpressionsTest/TriggerGuardExpressionsTest.cc", program = "gtests/TriggerGuardExpressionsTest/TriggerGuardExpressions", model = "testmodels/SCTUnit/TriggerGuardExpressions.sct")
+@RunWith(GTestRunner.class)
+public class TriggerGuardExpressionsTest {
+
+	protected final GTestHelper helper = new GTestHelper(this) {
+
+		@Override
+		protected void getSourceFiles(Collection<String> files) {
+			super.getSourceFiles(files);
+			files.add(getFileName(getTestProgram()) + ".cpp");
+		}
+	};
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

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

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

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

@@ -413,6 +413,15 @@ GeneratorModel for sctunit::java {
 	}
 
 
+	test TriggerGuardExpressions {
+		
+		feature Outlet{ 
+			targetProject = "org.yakindu.sct.generator.java.test" 
+			targetFolder = "test-gen"			
+		}			
+	}
+
+
 	test ValuedEvents{
 		
 		feature Outlet{ 

+ 1 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/castexpressions/CastExpressionsStatemachine.java

@@ -156,7 +156,7 @@ public class CastExpressionsStatemachine
 
 	/* The reactions of state B. */
 	private void reactMain_region_B() {
-		if (true
+		if ((true)
 				&& ((double) (sCInterface.realValue * 0.1)) > ((long) 1.4)
 				&& ((long) (sCInterface.realValue * sCInterface.intValue)) < ((double) 100)) {
 			nextStateIndex = 0;

+ 1 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ckeywords/CKeywordsStatemachine.java

@@ -823,7 +823,7 @@ public class CKeywordsStatemachine implements ICKeywordsStatemachine {
 
 	/* The reactions of state char. */
 	private void reactAuto_char() {
-		if (sCInterface.auto && sCInterface.case_ID) {
+		if ((sCInterface.auto) && sCInterface.case_ID) {
 			nextStateIndex = 0;
 			stateVector[0] = State.$NullState$;
 

+ 1 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/conditionalexpressions/ConditionalExpressionsStatemachine.java

@@ -155,7 +155,7 @@ public class ConditionalExpressionsStatemachine
 
 	/* The reactions of state A. */
 	private void reactMain_region_A() {
-		if (sCInterface.e && 1 == (sCInterface.boolVar ? 1 : 0)) {
+		if ((sCInterface.e) && 1 == (sCInterface.boolVar ? 1 : 0)) {
 			nextStateIndex = 0;
 			stateVector[0] = State.$NullState$;
 

+ 1 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/guard/GuardStatemachine.java

@@ -152,7 +152,7 @@ public class GuardStatemachine implements IGuardStatemachine {
 
 	/* The reactions of state A. */
 	private void reactMain_region_A() {
-		if (sCInterface.event1 && sCInterface.myVar == 10) {
+		if ((sCInterface.event1) && sCInterface.myVar == 10) {
 			nextStateIndex = 0;
 			stateVector[0] = State.$NullState$;
 

+ 1 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/javakeywords/JavaKeywordsStatemachine.java

@@ -1134,7 +1134,7 @@ public class JavaKeywordsStatemachine implements IJavaKeywordsStatemachine {
 
 	/* The reactions of state abstract. */
 	private void reactGoto_abstract() {
-		if (sCInterface.while_ID && true) {
+		if ((sCInterface.while_ID) && true) {
 			nextStateIndex = 0;
 			stateVector[0] = State.$NullState$;
 

+ 3 - 3
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/namedinterfaceaccess/NamedInterfaceAccessStatemachine.java

@@ -213,7 +213,7 @@ public class NamedInterfaceAccessStatemachine
 
 	/* The reactions of state Idle. */
 	private void reactRegion_1_Idle() {
-		if (sCIUser.numberPressed && sCIUser.numberPressedValue == number1) {
+		if ((sCIUser.numberPressed) && sCIUser.numberPressedValue == number1) {
 			nextStateIndex = 0;
 			stateVector[0] = State.$NullState$;
 
@@ -224,7 +224,7 @@ public class NamedInterfaceAccessStatemachine
 
 	/* The reactions of state Number1Pressed. */
 	private void reactRegion_1_Number1Pressed() {
-		if (sCIUser.numberPressed && sCIUser.numberPressedValue == number2) {
+		if ((sCIUser.numberPressed) && sCIUser.numberPressedValue == number2) {
 			nextStateIndex = 0;
 			stateVector[0] = State.$NullState$;
 
@@ -245,7 +245,7 @@ public class NamedInterfaceAccessStatemachine
 
 	/* The reactions of state Number2Pressed. */
 	private void reactRegion_1_Number2Pressed() {
-		if (sCIUser.numberPressed && sCIUser.numberPressedValue == number3) {
+		if ((sCIUser.numberPressed) && sCIUser.numberPressedValue == number3) {
 			nextStateIndex = 0;
 			stateVector[0] = State.$NullState$;
 

+ 1 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/operations/OperationsStatemachine.java

@@ -160,7 +160,7 @@ public class OperationsStatemachine implements IOperationsStatemachine {
 
 	/* The reactions of state B. */
 	private void reactMain_region_B() {
-		if (sCInterface.ev && sCInterface.operationCallback.alwaysTrue()) {
+		if ((sCInterface.ev) && sCInterface.operationCallback.alwaysTrue()) {
 			nextStateIndex = 0;
 			stateVector[0] = State.$NullState$;
 

+ 1 - 1
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/priorityvalues/PriorityValuesStatemachine.java

@@ -202,7 +202,7 @@ public class PriorityValuesStatemachine implements IPriorityValuesStatemachine {
 					nextStateIndex = 1;
 					stateVector[1] = State.main_region_D;
 				} else {
-					if (sCInterface.event2
+					if ((sCInterface.event2)
 							&& !isStateActive(State.someRegion_B)) {
 						nextStateIndex = 1;
 						stateVector[1] = State.$NullState$;

+ 19 - 19
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/stextkeywordsinstatesandregions/STextKeywordsInStatesAndRegionsStatemachine.java

@@ -540,7 +540,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state interface. */
 	private void reactOperation_interface() {
-		if (sCInterface.e1 && isStateActive(State.default_namespace)) {
+		if ((sCInterface.e1) && isStateActive(State.default_namespace)) {
 			nextStateIndex = 1;
 			stateVector[1] = State.$NullState$;
 
@@ -555,7 +555,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state event. */
 	private void reactNamespace_event() {
-		if (sCInterface.e2 && isStateActive(State.operation_internal)) {
+		if ((sCInterface.e2) && isStateActive(State.operation_internal)) {
 			nextStateIndex = 2;
 			stateVector[2] = State.$NullState$;
 
@@ -570,7 +570,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state in. */
 	private void reactLocal_in() {
-		if (sCInterface.e1 && isStateActive(State.namespace_local)) {
+		if ((sCInterface.e1) && isStateActive(State.namespace_local)) {
 			nextStateIndex = 3;
 			stateVector[3] = State.$NullState$;
 
@@ -585,7 +585,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state var. */
 	private void reactInterface_var() {
-		if (sCInterface.e2 && isStateActive(State.local_out)) {
+		if ((sCInterface.e2) && isStateActive(State.local_out)) {
 			nextStateIndex = 4;
 			stateVector[4] = State.$NullState$;
 
@@ -600,7 +600,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state external. */
 	private void reactInternal_external() {
-		if (sCInterface.e1 && isStateActive(State.interface_readonly)) {
+		if ((sCInterface.e1) && isStateActive(State.interface_readonly)) {
 			nextStateIndex = 5;
 			stateVector[5] = State.$NullState$;
 
@@ -615,7 +615,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state default. */
 	private void reactEvent_default() {
-		if (sCInterface.e2 && isStateActive(State.internal_operation)) {
+		if ((sCInterface.e2) && isStateActive(State.internal_operation)) {
 			nextStateIndex = 6;
 			stateVector[6] = State.$NullState$;
 
@@ -630,7 +630,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state entry. */
 	private void reactIn_entry() {
-		if (sCInterface.e1 && isStateActive(State.event_else)) {
+		if ((sCInterface.e1) && isStateActive(State.event_else)) {
 			nextStateIndex = 7;
 			stateVector[7] = State.$NullState$;
 
@@ -645,7 +645,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state always. */
 	private void reactOut_always() {
-		if (sCInterface.e2 && isStateActive(State.in_exit)) {
+		if ((sCInterface.e2) && isStateActive(State.in_exit)) {
 			nextStateIndex = 8;
 			stateVector[8] = State.$NullState$;
 
@@ -660,7 +660,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state raise. */
 	private void reactVar_raise() {
-		if (sCInterface.e1 && isStateActive(State.out_oncycle)) {
+		if ((sCInterface.e1) && isStateActive(State.out_oncycle)) {
 			nextStateIndex = 9;
 			stateVector[9] = State.$NullState$;
 
@@ -675,7 +675,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state active. */
 	private void reactReadonly_active() {
-		if (sCInterface.e2 && isStateActive(State.var_valueof)) {
+		if ((sCInterface.e2) && isStateActive(State.var_valueof)) {
 			nextStateIndex = 10;
 			stateVector[10] = State.$NullState$;
 
@@ -690,7 +690,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state interface. */
 	private void reactExternal_interface() {
-		if (sCInterface.e1 && isStateActive(State.readonly_namespace)) {
+		if ((sCInterface.e1) && isStateActive(State.readonly_namespace)) {
 			nextStateIndex = 11;
 			stateVector[11] = State.$NullState$;
 
@@ -705,7 +705,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state event. */
 	private void reactElse_event() {
-		if (sCInterface.e2 && isStateActive(State.external_internal)) {
+		if ((sCInterface.e2) && isStateActive(State.external_internal)) {
 			nextStateIndex = 12;
 			stateVector[12] = State.$NullState$;
 
@@ -720,7 +720,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state in. */
 	private void reactEntry_in() {
-		if (sCInterface.e1 && isStateActive(State.else_local)) {
+		if ((sCInterface.e1) && isStateActive(State.else_local)) {
 			nextStateIndex = 13;
 			stateVector[13] = State.$NullState$;
 
@@ -735,7 +735,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state var. */
 	private void reactExit_var() {
-		if (sCInterface.e2 && isStateActive(State.entry_out)) {
+		if ((sCInterface.e2) && isStateActive(State.entry_out)) {
 			nextStateIndex = 14;
 			stateVector[14] = State.$NullState$;
 
@@ -750,7 +750,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state external. */
 	private void reactAlways_external() {
-		if (sCInterface.e1 && isStateActive(State.exit_readonly)) {
+		if ((sCInterface.e1) && isStateActive(State.exit_readonly)) {
 			nextStateIndex = 15;
 			stateVector[15] = State.$NullState$;
 
@@ -765,7 +765,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state default. */
 	private void reactOncycle_default() {
-		if (sCInterface.e2 && isStateActive(State.always_operation)) {
+		if ((sCInterface.e2) && isStateActive(State.always_operation)) {
 			nextStateIndex = 16;
 			stateVector[16] = State.$NullState$;
 
@@ -780,7 +780,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state entry. */
 	private void reactRaise_entry() {
-		if (sCInterface.e1 && isStateActive(State.oncycle_else)) {
+		if ((sCInterface.e1) && isStateActive(State.oncycle_else)) {
 			nextStateIndex = 17;
 			stateVector[17] = State.$NullState$;
 
@@ -795,7 +795,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state always. */
 	private void reactValueof_always() {
-		if (sCInterface.e2 && isStateActive(State.raise_exit)) {
+		if ((sCInterface.e2) && isStateActive(State.raise_exit)) {
 			nextStateIndex = 18;
 			stateVector[18] = State.$NullState$;
 
@@ -810,7 +810,7 @@ public class STextKeywordsInStatesAndRegionsStatemachine
 
 	/* The reactions of state raise. */
 	private void reactActive_raise() {
-		if (sCInterface.e1 && isStateActive(State.valueof_oncycle)) {
+		if ((sCInterface.e1) && isStateActive(State.valueof_oncycle)) {
 			nextStateIndex = 19;
 			stateVector[19] = State.$NullState$;
 

+ 8 - 8
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/stringexpressions/StringExpressionsStatemachine.java

@@ -335,7 +335,7 @@ public class StringExpressionsStatemachine
 						? sCInterface.stringB != null
 						: !sCInterface.stringA.equals(sCInterface.stringB));
 
-				if (sCInterface.e
+				if ((sCInterface.e)
 						&& (sCInterface.stringA == null
 								? sCInterface.stringA2 == null
 								: sCInterface.stringA
@@ -344,7 +344,7 @@ public class StringExpressionsStatemachine
 							? sCInterface.stringA2 == null
 							: sCInterface.stringA.equals(sCInterface.stringA2));
 
-					if (sCInterface.e
+					if ((sCInterface.e)
 							&& (sCInterface.stringA == null
 									? sCInterface.stringB != null
 									: !sCInterface.stringA
@@ -390,7 +390,7 @@ public class StringExpressionsStatemachine
 						? "B" != null
 						: !sCInterface.stringA.equals("B"));
 
-				if (sCInterface.e
+				if ((sCInterface.e)
 						&& (sCInterface.stringA == null
 								? "A" == null
 								: sCInterface.stringA.equals("A"))) {
@@ -398,7 +398,7 @@ public class StringExpressionsStatemachine
 							? "A" == null
 							: sCInterface.stringA.equals("A"));
 
-					if (sCInterface.e
+					if ((sCInterface.e)
 							&& (sCInterface.stringA == null
 									? "B" != null
 									: !sCInterface.stringA.equals("B"))) {
@@ -438,14 +438,14 @@ public class StringExpressionsStatemachine
 						? sCInterface.stringB != null
 						: !"A".equals(sCInterface.stringB));
 
-				if (sCInterface.e
+				if ((sCInterface.e)
 						&& ("A" == null ? sCInterface.stringA == null : "A"
 								.equals(sCInterface.stringA))) {
 					sCInterface.guardStringEqual = ("A" == null
 							? sCInterface.stringA == null
 							: "A".equals(sCInterface.stringA));
 
-					if (sCInterface.e
+					if ((sCInterface.e)
 							&& ("A" == null
 									? sCInterface.stringB != null
 									: !"A".equals(sCInterface.stringB))) {
@@ -484,13 +484,13 @@ public class StringExpressionsStatemachine
 						? "B" != null
 						: !"A".equals("B"));
 
-				if (sCInterface.e
+				if ((sCInterface.e)
 						&& ("A" == null ? "A" == null : "A".equals("A"))) {
 					sCInterface.guardStringEqual = ("A" == null
 							? "A" == null
 							: "A".equals("A"));
 
-					if (sCInterface.e
+					if ((sCInterface.e)
 							&& ("A" == null ? "B" != null : !"A".equals("B"))) {
 						sCInterface.guardStringNotEqual = ("A" == null
 								? "B" != null

+ 16 - 0
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/triggerguardexpressions/ITriggerGuardExpressionsStatemachine.java

@@ -0,0 +1,16 @@
+package org.yakindu.scr.triggerguardexpressions;
+import org.yakindu.scr.IStatemachine;
+
+public interface ITriggerGuardExpressionsStatemachine extends IStatemachine {
+
+	public interface SCInterface {
+		public void raiseE1();
+		public void raiseE2();
+		public boolean getB();
+		public void setB(boolean value);
+
+	}
+
+	public SCInterface getSCInterface();
+
+}

+ 185 - 0
test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/triggerguardexpressions/TriggerGuardExpressionsStatemachine.java

@@ -0,0 +1,185 @@
+package org.yakindu.scr.triggerguardexpressions;
+
+public class TriggerGuardExpressionsStatemachine
+		implements
+			ITriggerGuardExpressionsStatemachine {
+
+	private final class SCInterfaceImpl implements SCInterface {
+
+		private boolean e1;
+
+		public void raiseE1() {
+			e1 = true;
+		}
+
+		private boolean e2;
+
+		public void raiseE2() {
+			e2 = true;
+		}
+
+		private boolean b;
+
+		public boolean getB() {
+			return b;
+		}
+
+		public void setB(boolean value) {
+			this.b = value;
+		}
+
+		public void clearEvents() {
+			e1 = false;
+			e2 = false;
+		}
+
+	}
+
+	private SCInterfaceImpl sCInterface;
+
+	public enum State {
+		main_region_A, main_region_B, $NullState$
+	};
+
+	private final State[] stateVector = new State[1];
+
+	private int nextStateIndex;
+
+	public TriggerGuardExpressionsStatemachine() {
+
+		sCInterface = new SCInterfaceImpl();
+	}
+
+	public void init() {
+		for (int i = 0; i < 1; i++) {
+			stateVector[i] = State.$NullState$;
+		}
+
+		clearEvents();
+		clearOutEvents();
+
+		sCInterface.b = false;
+	}
+
+	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();
+	}
+
+	/**
+	 * This method resets the incoming events (time events included).
+	 */
+	protected void clearEvents() {
+		sCInterface.clearEvents();
+
+	}
+
+	/**
+	 * This method resets the outgoing events.
+	 */
+	protected void clearOutEvents() {
+	}
+
+	/**
+	 * Returns true if the given state is currently active otherwise false.
+	 */
+	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;
+		}
+	}
+
+	public SCInterface getSCInterface() {
+		return sCInterface;
+	}
+
+	public void raiseE1() {
+		sCInterface.raiseE1();
+	}
+	public void raiseE2() {
+		sCInterface.raiseE2();
+	}
+
+	public boolean getB() {
+		return sCInterface.getB();
+	}
+
+	public void setB(boolean value) {
+		sCInterface.setB(value);
+	}
+
+	/* Entry action for statechart 'TriggerGuardExpressions'. */
+	private void entryAction() {
+	}
+
+	/* Exit action for state 'TriggerGuardExpressions'. */
+	private void exitAction() {
+	}
+
+	/* The reactions of state A. */
+	private void reactMain_region_A() {
+		if ((sCInterface.e1 || sCInterface.e2) && sCInterface.b) {
+			nextStateIndex = 0;
+			stateVector[0] = State.$NullState$;
+
+			nextStateIndex = 0;
+			stateVector[0] = State.main_region_B;
+		}
+	}
+
+	/* The reactions of state B. */
+	private void reactMain_region_B() {
+		nextStateIndex = 0;
+		stateVector[0] = State.$NullState$;
+
+		nextStateIndex = 0;
+		stateVector[0] = State.main_region_A;
+	}
+
+	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();
+	}
+}

+ 2 - 1
test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTestsTest.java

@@ -35,6 +35,7 @@ import org.junit.runners.Suite.SuiteClasses;
 		StateIsActiveTest.class, StaticChoiceTest.class,
 		STextKeywordsInStatesAndRegionsTest.class, StringExpressionsTest.class,
 		SyncForkTest.class, SyncJoinTest.class,
-		TransitionWithoutConditionTest.class, ValuedEventsTest.class})
+		TransitionWithoutConditionTest.class,
+		TriggerGuardExpressionsTest.class, ValuedEventsTest.class})
 public class AllTestsTest {
 }

+ 75 - 0
test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/TriggerGuardExpressionsTest.java

@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2014 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     committers of YAKINDU - initial API and implementation
+ */
+
+package org.yakindu.sct.generator.java.test;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.yakindu.scr.triggerguardexpressions.TriggerGuardExpressionsStatemachine;
+import org.yakindu.scr.triggerguardexpressions.TriggerGuardExpressionsStatemachine.State;
+/**
+ *  Unit TestCase for TriggerGuardExpressions
+ */
+@SuppressWarnings("all")
+public class TriggerGuardExpressionsTest {
+
+	private TriggerGuardExpressionsStatemachine statemachine;
+
+	@Before
+	public void setUp() {
+		statemachine = new TriggerGuardExpressionsStatemachine();
+		statemachine.init();
+	}
+
+	@After
+	public void tearDown() {
+		statemachine = null;
+	}
+
+	@Test
+	public void testtrueGuard() {
+		statemachine.enter();
+		assertTrue(statemachine.isStateActive(State.main_region_A));
+		statemachine.raiseE1();
+		statemachine.setB(true);
+		statemachine.runCycle();
+		assertTrue(statemachine.isStateActive(State.main_region_B));
+		statemachine.runCycle();
+		assertTrue(statemachine.isStateActive(State.main_region_A));
+		statemachine.raiseE2();
+		statemachine.runCycle();
+		assertTrue(statemachine.isStateActive(State.main_region_B));
+		statemachine.runCycle();
+		assertTrue(statemachine.isStateActive(State.main_region_A));
+		statemachine.raiseE1();
+		statemachine.raiseE2();
+		statemachine.runCycle();
+		assertTrue(statemachine.isStateActive(State.main_region_B));
+	}
+	@Test
+	public void testfalseGuard() {
+		statemachine.enter();
+		assertTrue(statemachine.isStateActive(State.main_region_A));
+		statemachine.setB(false);
+		statemachine.raiseE1();
+		statemachine.runCycle();
+		assertTrue(statemachine.isStateActive(State.main_region_A));
+		statemachine.raiseE2();
+		statemachine.runCycle();
+		assertTrue(statemachine.isStateActive(State.main_region_A));
+		statemachine.raiseE1();
+		statemachine.raiseE2();
+		statemachine.runCycle();
+		assertTrue(statemachine.isStateActive(State.main_region_A));
+	}
+}

+ 9 - 0
test-plugins/org.yakindu.sct.simulation.core.sexec.test/model/test.sgen

@@ -406,6 +406,15 @@ GeneratorModel for sctunit::interpreter {
 	}
 	
 
+	test TriggerGuardExpressions{
+		
+		feature Outlet{ 
+			targetProject = "org.yakindu.sct.simulation.core.sexec.test" 
+			targetFolder = "test-gen"			
+		}			
+	}
+	
+
 	test ValuedEvents{
 		
 		feature Outlet{ 

+ 2 - 1
test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/AllTestsTest.java

@@ -36,6 +36,7 @@ import org.junit.runners.Suite.SuiteClasses;
 		StateIsActiveTest.class, StaticChoiceTest.class,
 		STextKeywordsInStatesAndRegionsTest.class, StringExpressionsTest.class,
 		SyncForkTest.class, SyncJoinTest.class,
-		TransitionWithoutConditionTest.class, ValuedEventsTest.class})
+		TransitionWithoutConditionTest.class,
+		TriggerGuardExpressionsTest.class, ValuedEventsTest.class})
 public class AllTestsTest {
 }

+ 0 - 4
test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/CastExpressionsTest.java

@@ -12,16 +12,13 @@ package org.yakindu.sct.simulation.core.sexec.test;
 import org.eclipse.xtext.junit4.InjectWith;
 import org.eclipse.xtext.junit4.XtextRunner;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.yakindu.sct.model.sexec.ExecutionFlow;
 import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
 import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
 import org.yakindu.sct.test.models.SCTUnitTestModels;
-
 import com.google.inject.Inject;
-
 import static org.junit.Assert.assertTrue;
 /**
  *  Unit TestCase for CastExpressions
@@ -37,7 +34,6 @@ public class CastExpressionsTest extends AbstractExecutionFlowTest {
 		initInterpreter(flow);
 	}
 	@Test
-	@Ignore
 	public void CastExpressionTest() throws Exception {
 		interpreter.enter();
 		assertTrue(getReal("realValue") == 5);

+ 72 - 0
test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/TriggerGuardExpressionsTest.java

@@ -0,0 +1,72 @@
+/**
+ * Copyright (c) 2014 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     committers of YAKINDU - initial API and implementation
+ */
+package org.yakindu.sct.simulation.core.sexec.test;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sexec.ExecutionFlow;
+import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest;
+import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider;
+import org.yakindu.sct.test.models.SCTUnitTestModels;
+import com.google.inject.Inject;
+import static org.junit.Assert.assertTrue;
+/**
+ *  Unit TestCase for TriggerGuardExpressions
+ */
+@SuppressWarnings("all")
+@RunWith(XtextRunner.class)
+@InjectWith(SExecInjectionProvider.class)
+public class TriggerGuardExpressionsTest extends AbstractExecutionFlowTest {
+	@Before
+	public void setup() throws Exception {
+		ExecutionFlow flow = models
+				.loadExecutionFlowFromResource("TriggerGuardExpressions.sct");
+		initInterpreter(flow);
+	}
+	@Test
+	public void trueGuard() throws Exception {
+		interpreter.enter();
+		assertTrue(isActive("A"));
+		raiseEvent("e1");
+		setBoolean("b", true);
+		interpreter.runCycle();
+		assertTrue(isActive("B"));
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+		raiseEvent("e2");
+		interpreter.runCycle();
+		assertTrue(isActive("B"));
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+		raiseEvent("e1");
+		raiseEvent("e2");
+		interpreter.runCycle();
+		assertTrue(isActive("B"));
+	}
+	@Test
+	public void falseGuard() throws Exception {
+		interpreter.enter();
+		assertTrue(isActive("A"));
+		setBoolean("b", false);
+		raiseEvent("e1");
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+		raiseEvent("e2");
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+		raiseEvent("e1");
+		raiseEvent("e2");
+		interpreter.runCycle();
+		assertTrue(isActive("A"));
+	}
+}

+ 1 - 0
test-plugins/org.yakindu.sct.test.models/.settings/org.eclipse.core.resources.prefs

@@ -24,6 +24,7 @@ encoding//testmodels/SCTUnit/StaticChoice.sct=UTF-8
 encoding//testmodels/SCTUnit/SyncJoin.sct=UTF-8
 encoding//testmodels/SCTUnit/TimedTransitions.sct=UTF-8
 encoding//testmodels/SCTUnit/TransitionWithoutCondition.sct=UTF-8
+encoding//testmodels/SCTUnit/TriggerGuardExpressions.sct=UTF-8
 encoding//testmodels/SCTUnit/VariableInitialization.sct=UTF-8
 encoding//testmodels/validation/EntryTransitionToParentState.sct=UTF-8
 encoding//testmodels/validation/NoTriggerOnTransitionWithExitPointSpec.sct=UTF-8

+ 3 - 0
test-plugins/org.yakindu.sct.test.models/src/org/yakindu/sct/test/models/SCTUnitTestModels.java

@@ -48,11 +48,13 @@ public class SCTUnitTestModels extends AbstractTestModelsUtil {
 	public static final String GUARD = "Guard.sct";
 	public static final String GUARDED_ENTRY = "GuardedEntry.sct";
 	public static final String GUARDED_EXIT = "GuardedExit.sct";
+	public static final String HISTORY_WITH_EXIT_POINT = "HistoryWithExitPoint.sct";
 	public static final String HISTORY_WITHOUT_INITIAL_STEP = "HistoryWithoutInitialStep.sct";
 	public static final String IN_EVENT_LIFE_CYCLE = "InEventLifeCycle.sct";
 	public static final String INTEGER_EXPRESSIONS = "IntegerExpressions.sct";
 	public static final String INTERNAT_EVENT_LIFE_CYCLE = "InternalEventLifeCycle.sct";
 	public static final String JAVA_KEYWORDS_M = "JavaKeywords.sct";
+	public static final String LOCAL_REACTIONS = "LocalReactions.sct";
 	public static final String LOGICAL_AND = "LogicalAnd.sct";
 	public static final String LOGICAL_OR = "LogicalOr.sct";
 	public static final String NAMED_INTERFACE_ACCESS = "NamedInterfaceAccess.sct";
@@ -77,6 +79,7 @@ public class SCTUnitTestModels extends AbstractTestModelsUtil {
 	public static final String SYNC_FORK = "SyncFork.sct";
 	public static final String TIMED_TRANSITIONS = "TimedTransitions.sct";
 	public static final String TRANSITIONS_WITHOUT_CONDITION = "TransitionWithoutCondition.sct";
+	public static final String TRIFFER_GUARD_EXPRESSIONS = "TriggerGuardExpressions.sct";
 	public static final String VALUED_EVENTS = "ValuedEvents.sct";
 	public static final String VARIABLE_INITIALIZATION = "VariableInitialization.sct";
 	

+ 113 - 0
test-plugins/org.yakindu.sct.test.models/testmodels/SCTUnit/TriggerGuardExpressions.sct

@@ -0,0 +1,113 @@
+<?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="_DNPG4G5CEeSiWI4Gr0wiOg" specification="&#xA;interface:&#xA;&#xA;&#x9;in event e1&#xA;&#x9;in event e2&#xA;&#x9;var b : boolean" name="TriggerGuardExpressions">
+    <regions xmi:id="_DNPt8m5CEeSiWI4Gr0wiOg" name="main region">
+      <vertices xsi:type="sgraph:Entry" xmi:id="_DNPt_G5CEeSiWI4Gr0wiOg">
+        <outgoingTransitions xmi:id="_DNQ8GW5CEeSiWI4Gr0wiOg" target="_DNQVCm5CEeSiWI4Gr0wiOg"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_DNQVCm5CEeSiWI4Gr0wiOg" name="A" incomingTransitions="_DNQ8GW5CEeSiWI4Gr0wiOg _Y0h_cG5CEeSiWI4Gr0wiOg">
+        <outgoingTransitions xmi:id="_VXQnUG5CEeSiWI4Gr0wiOg" specification="e1, e2 [b]" target="_UFp1gG5CEeSiWI4Gr0wiOg"/>
+      </vertices>
+      <vertices xsi:type="sgraph:State" xmi:id="_UFp1gG5CEeSiWI4Gr0wiOg" name="B" incomingTransitions="_VXQnUG5CEeSiWI4Gr0wiOg">
+        <outgoingTransitions xmi:id="_Y0h_cG5CEeSiWI4Gr0wiOg" specification="always" target="_DNQVCm5CEeSiWI4Gr0wiOg"/>
+      </vertices>
+    </regions>
+  </sgraph:Statechart>
+  <notation:Diagram xmi:id="_DNPt8G5CEeSiWI4Gr0wiOg" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_DNPG4G5CEeSiWI4Gr0wiOg" measurementUnit="Pixel">
+    <children xmi:id="_DNPt825CEeSiWI4Gr0wiOg" type="Region" element="_DNPt8m5CEeSiWI4Gr0wiOg">
+      <children xsi:type="notation:DecorationNode" xmi:id="_DNPt9m5CEeSiWI4Gr0wiOg" type="RegionName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_DNPt925CEeSiWI4Gr0wiOg"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_DNPt-G5CEeSiWI4Gr0wiOg"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_DNPt-W5CEeSiWI4Gr0wiOg" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+        <children xmi:id="_DNQVAG5CEeSiWI4Gr0wiOg" type="Entry" element="_DNPt_G5CEeSiWI4Gr0wiOg">
+          <children xmi:id="_DNQVA25CEeSiWI4Gr0wiOg" type="BorderItemLabelContainer">
+            <children xsi:type="notation:DecorationNode" xmi:id="_DNQVBm5CEeSiWI4Gr0wiOg" type="BorderItemLabel">
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_DNQVB25CEeSiWI4Gr0wiOg"/>
+              <layoutConstraint xsi:type="notation:Location" xmi:id="_DNQVCG5CEeSiWI4Gr0wiOg"/>
+            </children>
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_DNQVBG5CEeSiWI4Gr0wiOg" fontName="Verdana" lineColor="4210752"/>
+            <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DNQVBW5CEeSiWI4Gr0wiOg"/>
+          </children>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_DNQVAW5CEeSiWI4Gr0wiOg" fontName="Verdana" lineColor="4210752"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DNQVCW5CEeSiWI4Gr0wiOg" x="70" y="20"/>
+        </children>
+        <children xmi:id="_DNQVDW5CEeSiWI4Gr0wiOg" type="State" element="_DNQVCm5CEeSiWI4Gr0wiOg">
+          <children xsi:type="notation:DecorationNode" xmi:id="_DNQ8EG5CEeSiWI4Gr0wiOg" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_DNQ8EW5CEeSiWI4Gr0wiOg"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_DNQ8Em5CEeSiWI4Gr0wiOg"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_DNQ8E25CEeSiWI4Gr0wiOg" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_DNQ8FG5CEeSiWI4Gr0wiOg" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DNQ8FW5CEeSiWI4Gr0wiOg"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_DNQ8Fm5CEeSiWI4Gr0wiOg" type="StateFigureCompartment"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_DNQVDm5CEeSiWI4Gr0wiOg" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_DNQVD25CEeSiWI4Gr0wiOg"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_DNQ8F25CEeSiWI4Gr0wiOg" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DNQ8GG5CEeSiWI4Gr0wiOg" x="59" y="75"/>
+        </children>
+        <children xmi:id="_UFqckG5CEeSiWI4Gr0wiOg" type="State" element="_UFp1gG5CEeSiWI4Gr0wiOg">
+          <children xsi:type="notation:DecorationNode" xmi:id="_UFrDoG5CEeSiWI4Gr0wiOg" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_UFrDoW5CEeSiWI4Gr0wiOg"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_UFrDom5CEeSiWI4Gr0wiOg"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_UFrDo25CEeSiWI4Gr0wiOg" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_UFrDpG5CEeSiWI4Gr0wiOg" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_UFrDpW5CEeSiWI4Gr0wiOg"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_UFrDpm5CEeSiWI4Gr0wiOg" type="StateFigureCompartment"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_UFqckW5CEeSiWI4Gr0wiOg" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_UFqckm5CEeSiWI4Gr0wiOg"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_UFrDp25CEeSiWI4Gr0wiOg" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_UFqck25CEeSiWI4Gr0wiOg" x="233" y="75"/>
+        </children>
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DNPt-m5CEeSiWI4Gr0wiOg"/>
+      </children>
+      <styles xsi:type="notation:ShapeStyle" xmi:id="_DNPt9G5CEeSiWI4Gr0wiOg" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DNPt-25CEeSiWI4Gr0wiOg" x="220" y="10" width="400" height="400"/>
+    </children>
+    <children xsi:type="notation:Shape" xmi:id="_DNRjJ25CEeSiWI4Gr0wiOg" type="StatechartText" fontName="Verdana" lineColor="4210752">
+      <children xsi:type="notation:DecorationNode" xmi:id="_DNRjKW5CEeSiWI4Gr0wiOg" type="StatechartName">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_DNRjKm5CEeSiWI4Gr0wiOg"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_DNRjK25CEeSiWI4Gr0wiOg"/>
+      </children>
+      <children xsi:type="notation:Shape" xmi:id="_DNRjLG5CEeSiWI4Gr0wiOg" type="StatechartTextExpression" fontName="Verdana" lineColor="4210752">
+        <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DNRjLW5CEeSiWI4Gr0wiOg"/>
+      </children>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_DNRjLm5CEeSiWI4Gr0wiOg" x="10" y="10" width="200" height="400"/>
+    </children>
+    <styles xsi:type="notation:DiagramStyle" xmi:id="_DNPt8W5CEeSiWI4Gr0wiOg"/>
+    <edges xmi:id="_DNRjIG5CEeSiWI4Gr0wiOg" type="Transition" element="_DNQ8GW5CEeSiWI4Gr0wiOg" source="_DNQVAG5CEeSiWI4Gr0wiOg" target="_DNQVDW5CEeSiWI4Gr0wiOg">
+      <children xsi:type="notation:DecorationNode" xmi:id="_DNRjJG5CEeSiWI4Gr0wiOg" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_DNRjJW5CEeSiWI4Gr0wiOg"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_DNRjJm5CEeSiWI4Gr0wiOg" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_DNRjIW5CEeSiWI4Gr0wiOg" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_DNRjI25CEeSiWI4Gr0wiOg" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_DNRjIm5CEeSiWI4Gr0wiOg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    </edges>
+    <edges xmi:id="_VXR1cG5CEeSiWI4Gr0wiOg" type="Transition" element="_VXQnUG5CEeSiWI4Gr0wiOg" source="_DNQVDW5CEeSiWI4Gr0wiOg" target="_UFqckG5CEeSiWI4Gr0wiOg">
+      <children xsi:type="notation:DecorationNode" xmi:id="_VXR1dG5CEeSiWI4Gr0wiOg" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_VXR1dW5CEeSiWI4Gr0wiOg"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_VXScgG5CEeSiWI4Gr0wiOg" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_VXR1cW5CEeSiWI4Gr0wiOg" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_VXR1c25CEeSiWI4Gr0wiOg" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_VXR1cm5CEeSiWI4Gr0wiOg" points="[18, 6, -120, 6]$[146, 24, 8, 24]"/>
+    </edges>
+    <edges xmi:id="_Y0imgG5CEeSiWI4Gr0wiOg" type="Transition" element="_Y0h_cG5CEeSiWI4Gr0wiOg" source="_UFqckG5CEeSiWI4Gr0wiOg" target="_DNQVDW5CEeSiWI4Gr0wiOg">
+      <children xsi:type="notation:DecorationNode" xmi:id="_Y0jNkW5CEeSiWI4Gr0wiOg" type="TransitionExpression">
+        <styles xsi:type="notation:ShapeStyle" xmi:id="_Y0jNkm5CEeSiWI4Gr0wiOg"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_Y0jNk25CEeSiWI4Gr0wiOg" y="10"/>
+      </children>
+      <styles xsi:type="notation:ConnectorStyle" xmi:id="_Y0imgW5CEeSiWI4Gr0wiOg" lineColor="4210752"/>
+      <styles xsi:type="notation:FontStyle" xmi:id="_Y0jNkG5CEeSiWI4Gr0wiOg" fontName="Verdana"/>
+      <bendpoints xsi:type="notation:RelativeBendpoints" xmi:id="_Y0imgm5CEeSiWI4Gr0wiOg" points="[-3, 7, 154, 2]$[-154, -6, 3, -11]"/>
+      <sourceAnchor xsi:type="notation:IdentityAnchor" xmi:id="_Y0kbsG5CEeSiWI4Gr0wiOg" id="(0.1,0.1320754716981132)"/>
+      <targetAnchor xsi:type="notation:IdentityAnchor" xmi:id="_Y0kbsW5CEeSiWI4Gr0wiOg" id="(0.575,0.24528301886792453)"/>
+    </edges>
+  </notation:Diagram>
+</xmi:XMI>

+ 1 - 0
test-plugins/org.yakindu.sct.test.models/tests/AllTests.sctunit

@@ -48,5 +48,6 @@ testsuite AllTests {
 	SyncJoin, 
 //	TimedTransitions,
 	TransitionWithoutCondition,
+	TriggerGuardExpressions,
 	ValuedEvents
 } 

+ 50 - 0
test-plugins/org.yakindu.sct.test.models/tests/TriggerGuardExpressions.sctunit

@@ -0,0 +1,50 @@
+
+testgroup TriggerGuardExpressions for statechart TriggerGuardExpressions {
+	
+	/** If the guard is true then the transition will be taken on any event that matches a trigger.  */
+	test trueGuard {
+
+		enter
+		assert active (TriggerGuardExpressions.main_region.A)
+		
+		raise e1
+		b = true
+		cycle
+		assert active (TriggerGuardExpressions.main_region.B)
+		
+		cycle
+		assert active (TriggerGuardExpressions.main_region.A)
+		raise e2
+		cycle
+		assert active (TriggerGuardExpressions.main_region.B)
+		
+		cycle
+		assert active (TriggerGuardExpressions.main_region.A)
+		raise e1
+		raise e2
+		cycle
+		assert active (TriggerGuardExpressions.main_region.B)
+	}
+	
+	/** If the guard is false then the transition will be taken on any event that matches a trigger.  */
+	test falseGuard {
+
+		enter
+		assert active (TriggerGuardExpressions.main_region.A)
+		b = false
+		
+		raise e1
+		cycle
+		assert active (TriggerGuardExpressions.main_region.A)
+		
+		raise e2
+		cycle
+		assert active (TriggerGuardExpressions.main_region.A)
+		
+		raise e1
+		raise e2
+		cycle
+		assert active (TriggerGuardExpressions.main_region.A)
+	}
+	
+}