Quellcode durchsuchen

Fix tests for release 3 0 (#1596)

* Revert "Updated sct models"

This reverts commit dcd2865159ff00a25b7fcc73c1f8b873b11eee73.

* added missing sgen files for tests

* regenerated C test cases

* regenerated c++ test case wrappers

* Added libraryTargetFolger setting for C tests in sgen

* regenerates java test wrapper classes for C

* regenerated tests for C

* regenerated tests for c++

* updates sgen for interpreter tests

* regenerated interpreter test cases
Axel Terfloth vor 8 Jahren
Ursprung
Commit
841f28899e
100 geänderte Dateien mit 2192 neuen und 8 gelöschten Zeilen
  1. 19 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchy.sgen
  2. 86 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchyTest.cc
  3. 19 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/ChildFirstLocalReactions/ChildFirstLocalReactions.sgen
  4. 79 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/ChildFirstLocalReactions/ChildFirstLocalReactionsTest.cc
  5. 19 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenInternalEvent/EventDrivenInternalEvent.sgen
  6. 45 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenInternalEvent/EventDrivenInternalEventTest.cc
  7. 19 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEvent.sgen
  8. 60 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEventTest.cc
  9. 19 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEvent.sgen
  10. 67 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEventTest.cc
  11. 19 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchy.sgen
  12. 86 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchyTest.cc
  13. 19 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/ParentFirstLocalReactions/ParentFirstLocalReactions.sgen
  14. 81 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/ParentFirstLocalReactions/ParentFirstLocalReactionsTest.cc
  15. 1 0
      test-plugins/org.yakindu.sct.generator.c.test/gtests/TimedTransitions/TimedTransitionsTest.cc
  16. 96 0
      test-plugins/org.yakindu.sct.generator.c.test/model/test.eventdriven.sgen
  17. 188 0
      test-plugins/org.yakindu.sct.generator.c.test/model/test.executionorder.sgen
  18. 8 3
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/AllTests.java
  19. 34 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ChildFirstExecutionHierarchyTest.java
  20. 34 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ChildFirstLocalReactionsTest.java
  21. 1 1
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ConstOnlyDefaultScopeTest.java
  22. 1 1
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ConstOnlyInternalScopeTest.java
  23. 1 1
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ConstOnlyNamedScopeTest.java
  24. 1 1
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/EntryReactionActionTest.java
  25. 34 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/EventDrivenInternalEventTest.java
  26. 34 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/EventDrivenTriggeredByEventTest.java
  27. 34 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/EventDrivenTriggeredByTimeEventTest.java
  28. 34 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ParentFirstExecutionHierarchyTest.java
  29. 34 0
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ParentFirstLocalReactionsTest.java
  30. 1 1
      test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/TriggerExpressionPrecedenceTest.java
  31. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/AlwaysOncycleTest/AlwaysOncycleTest.cc
  32. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/AssignmentAsExpressionTest/AssignmentAsExpressionTest.cc
  33. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/BitExpressionsTest/BitExpressionsTest.cc
  34. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/BooleanExpressionsTest/BooleanExpressionsTest.cc
  35. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/CKeywordsTest/CKeywordsTest.cc
  36. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/CastExpressionsTest/CastExpressionsTest.cc
  37. 19 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchy.sgen
  38. 135 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchyTest.cc
  39. 19 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChildFirstLocalReactions/ChildFirstLocalReactions.sgen
  40. 121 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChildFirstLocalReactions/ChildFirstLocalReactionsTest.cc
  41. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChoiceTest/ChoiceTest.cc
  42. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConditionalExpressionsTest/ConditionalExpression.cc
  43. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConstOnlyDefaultScopeTest/ConstOnlyDefaultScopeTest.cc
  44. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConstOnlyInternalScopeTest/ConstOnlyInternalScopeTest.cc
  45. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConstOnlyNamedScopeTest/ConstOnlyNamedScopeTest.cc
  46. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConstantsTest/ConstantsTests.cc
  47. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/DeclarationsTest/DeclarationsTest.cc
  48. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/DeepEntryTest/DeepEntryTest.cc
  49. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/DeepHistoryTest/DeepHistoryTest.cc
  50. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/DynamicChoiceTest/DynamicChoiceTest.cc
  51. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EmptyTransitionTest/EmptyTransitionTest.cc
  52. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EnterStateTest/EnterStateTest.cc
  53. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EntryChoiceTest/EntryChoiceTest.cc
  54. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EntryExitSelfTransitionTest/EntryExitSelfTransitionTest.cc
  55. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EntryReactionActionTest/EntryReactionActionTest.cc
  56. 19 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenInternalEvent/EventDrivenInternalEvent.sgen
  57. 57 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenInternalEvent/EventDrivenInternalEventTest.cc
  58. 19 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEvent.sgen
  59. 67 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEventTest.cc
  60. 19 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEvent.sgen
  61. 82 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEventTest.cc
  62. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ExitOnSelfTransitionTest/ExitOnSelfTransitionTest.cc
  63. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ExitStateTest/ExitStateTest.cc
  64. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/FeatureCallsTest/FeatureCallsTest.cc
  65. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/FinalStateTest/FinalStateTest.cc
  66. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/GuardTest/GuardTest.cc
  67. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/GuardedEntryTest/GuardedEntryTest.cc
  68. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/GuardedExitTest/GuardedExitTest.cc
  69. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/HistoryWithExitPointTest/HistoryWithExitPointTest.cc
  70. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/HistoryWithoutInitialStepTest/HistoryWithoutInitialStepTest.cc
  71. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/InEventLifeCycleTest/InEventLifeCycleTest.cc
  72. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/IntegerExpressionsTest/IntegerExpressionsTest.cc
  73. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/InternalEventLifeCycleTest/InternalEventLifeCycleTest.cc
  74. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/LocalReactionsTest/LocalReactionsTest.cc
  75. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/LogicalAndTest/LogicalAndTests.cc
  76. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/LogicalOrTest/LogicalOrTests.cc
  77. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/NamedInterfaceAccessTest/NamedInterfaceAccessTest.cc
  78. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/NullCheckTest/NullCheckTest.cc
  79. 2 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/OperationsTest/OperationsTest.cc
  80. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/OutEventLifeCycleTest/OutEventLifeCycleTest.cc
  81. 19 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchy.sgen
  82. 135 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchyTest.cc
  83. 19 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParentFirstLocalReactions/ParentFirstLocalReactions.sgen
  84. 125 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParentFirstLocalReactions/ParentFirstLocalReactionsTest.cc
  85. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParenthesisTest/ParenthesisTest.cc
  86. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/PriorityValuesTest/PriorityValuesTest.cc
  87. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/RaiseEventTest/RaiseEventTest.cc
  88. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ReadOnlyVariableTest/ReadOnlyVariableTest.cc
  89. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/STextKeywordsInStatesAndRegionsTest/STextKeywordsInStatesAndRegionsTest.cc
  90. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/SameNameDifferentRegionTest/SameNameDifferentRegionTest.cc
  91. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ShallowHistoryTest/ShallowHistoryTest.cc
  92. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ShallowHistoryWithDeepEntryTest/ShallowHistoryWithDeepEntryTest.cc
  93. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/SimpleEventTest/SimpleEventTest.cc
  94. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/SimpleHierachyTest/SimpleHierachyTest.cc
  95. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StateIsActiveTest/StateIsActiveTest.cc
  96. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StatechartActiveTest/StatechartActiveTest.cc
  97. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StatechartLocalReactionsTest/StatechartLocalReactionsTest.cc
  98. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StatemachineKeywordsTest/StatemachineKeywords.cc
  99. 3 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StaticChoiceTest/StaticChoiceTest.cc
  100. 0 0
      test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StringExpressionsTest/StringExpressionsTest.cc

+ 19 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchy.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::c {
+	statechart executionorder.ChildFirstExecutionHierarchy {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "ChildFirstExecutionHierarchy"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 86 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchyTest.cc

@@ -0,0 +1,86 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+
+#include "gtest/gtest.h"
+#include "ChildFirstExecutionHierarchy.h"
+
+#include "sc_timer_service.h"
+
+
+
+//! The timers are managed by a timer service. */
+static sc_unit_timer_service_t timer_service;
+
+static ChildFirstExecutionHierarchy statechart;
+
+class ChildFirstExecutionHierarchyTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		childFirstExecutionHierarchy_init(&statechart);
+		sc_timer_service_init(
+			&timer_service,
+			0,
+			(sc_run_cycle_fp) &childFirstExecutionHierarchy_runCycle,
+			false,
+			200,
+			&statechart
+		);
+	}
+};
+
+void assertNoLocalReaction(){
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_a_local(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_aa_local(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_aaa_local(&statechart));
+}
+
+TEST_F(ChildFirstExecutionHierarchyTest, childShouldTakeTransition) {
+	childFirstExecutionHierarchy_enter(&statechart);
+	EXPECT_TRUE(childFirstExecutionHierarchy_isStateActive(&statechart, ChildFirstExecutionHierarchy_ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	childFirstExecutionHierarchyIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(childFirstExecutionHierarchy_isStateActive(&statechart, ChildFirstExecutionHierarchy_ChildFirstExecutionHierarchy_r_B));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_a_reacted(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_aa_reacted(&statechart));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_aaa_reacted(&statechart));
+	assertNoLocalReaction();
+}
+TEST_F(ChildFirstExecutionHierarchyTest, parentShouldTakeTransition) {
+	childFirstExecutionHierarchy_enter(&statechart);
+	EXPECT_TRUE(childFirstExecutionHierarchy_isStateActive(&statechart, ChildFirstExecutionHierarchy_ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	childFirstExecutionHierarchyIface_set_disable_aaa(&statechart,true);
+	childFirstExecutionHierarchyIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(childFirstExecutionHierarchy_isStateActive(&statechart, ChildFirstExecutionHierarchy_ChildFirstExecutionHierarchy_r_B));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_a_reacted(&statechart));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_aa_reacted(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_aaa_reacted(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_a_local(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_aa_local(&statechart));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_aaa_local(&statechart));
+}
+TEST_F(ChildFirstExecutionHierarchyTest, grandparentShouldTakeTransition) {
+	childFirstExecutionHierarchy_enter(&statechart);
+	EXPECT_TRUE(childFirstExecutionHierarchy_isStateActive(&statechart, ChildFirstExecutionHierarchy_ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	childFirstExecutionHierarchyIface_set_disable_aa(&statechart,true);
+	childFirstExecutionHierarchyIface_set_disable_aaa(&statechart,true);
+	childFirstExecutionHierarchyIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(childFirstExecutionHierarchy_isStateActive(&statechart, ChildFirstExecutionHierarchy_ChildFirstExecutionHierarchy_r_B));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_a_reacted(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_aa_reacted(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_aaa_reacted(&statechart));
+	EXPECT_TRUE(!childFirstExecutionHierarchyIface_get_a_local(&statechart));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_aa_local(&statechart));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_aaa_local(&statechart));
+}
+TEST_F(ChildFirstExecutionHierarchyTest, expectLocalReactrionsExecuteWithNoTransition) {
+	childFirstExecutionHierarchy_enter(&statechart);
+	EXPECT_TRUE(childFirstExecutionHierarchy_isStateActive(&statechart, ChildFirstExecutionHierarchy_ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(childFirstExecutionHierarchy_isStateActive(&statechart, ChildFirstExecutionHierarchy_ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_a_local(&statechart));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_aa_local(&statechart));
+	EXPECT_TRUE(childFirstExecutionHierarchyIface_get_aaa_local(&statechart));
+}
+
+

+ 19 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/ChildFirstLocalReactions/ChildFirstLocalReactions.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::c {
+	statechart executionorder.ChildFirstLocalReactions {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "ChildFirstLocalReactions"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 79 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/ChildFirstLocalReactions/ChildFirstLocalReactionsTest.cc

@@ -0,0 +1,79 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+
+#include "gtest/gtest.h"
+#include "ChildFirstLocalReactions.h"
+
+#include "sc_timer_service.h"
+
+static long counter = 0l;
+
+
+//! The timers are managed by a timer service. */
+static sc_unit_timer_service_t timer_service;
+
+static ChildFirstLocalReactions statechart;
+
+class ChildFirstLocalReactionsTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		childFirstLocalReactions_init(&statechart);
+		sc_timer_service_init(
+			&timer_service,
+			0,
+			(sc_run_cycle_fp) &childFirstLocalReactions_runCycle,
+			false,
+			200,
+			&statechart
+		);
+	}
+};
+
+
+TEST_F(ChildFirstLocalReactionsTest, expectBottomUpLocalReactionOrder) {
+	childFirstLocalReactions_enter(&statechart);
+	EXPECT_TRUE(childFirstLocalReactions_isStateActive(&statechart, ChildFirstLocalReactions_ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(childFirstLocalReactions_isStateActive(&statechart, ChildFirstLocalReactions_ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_aaa_local(&statechart)== 1l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_aa_local(&statechart)== 2l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_a_local(&statechart)== 3l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_sm_local(&statechart)== 4l);
+}
+TEST_F(ChildFirstLocalReactionsTest, expectParentLocalReactionOnChildLocalTransition) {
+	childFirstLocalReactions_enter(&statechart);
+	EXPECT_TRUE(childFirstLocalReactions_isStateActive(&statechart, ChildFirstLocalReactions_ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	childFirstLocalReactionsIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(childFirstLocalReactions_isStateActive(&statechart, ChildFirstLocalReactions_ChildFirstLocalReactions_r_A_r_AA_r_AAB));
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_aaa_local(&statechart)== 0l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_aa_local(&statechart)== 1l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_a_local(&statechart)== 2l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_sm_local(&statechart)== 3l);
+}
+TEST_F(ChildFirstLocalReactionsTest, expectGrandparentLocalReactionOnParentLocalTransition) {
+	childFirstLocalReactions_enter(&statechart);
+	EXPECT_TRUE(childFirstLocalReactions_isStateActive(&statechart, ChildFirstLocalReactions_ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	childFirstLocalReactionsIface_set_disable_aaa(&statechart,true);
+	childFirstLocalReactionsIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(childFirstLocalReactions_isStateActive(&statechart, ChildFirstLocalReactions_ChildFirstLocalReactions_r_A_r_AB));
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_aaa_local(&statechart)== 1l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_aa_local(&statechart)== 0l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_a_local(&statechart)== 2l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_sm_local(&statechart)== 3l);
+}
+TEST_F(ChildFirstLocalReactionsTest, expectNoLocalReactionOnGrandparentTransition) {
+	childFirstLocalReactions_enter(&statechart);
+	EXPECT_TRUE(childFirstLocalReactions_isStateActive(&statechart, ChildFirstLocalReactions_ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	childFirstLocalReactionsIface_set_disable_aaa(&statechart,true);
+	childFirstLocalReactionsIface_set_disable_aa(&statechart,true);
+	childFirstLocalReactionsIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(childFirstLocalReactions_isStateActive(&statechart, ChildFirstLocalReactions_ChildFirstLocalReactions_r_B));
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_aaa_local(&statechart)== 1l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_aa_local(&statechart)== 2l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_a_local(&statechart)== 0l);
+	EXPECT_TRUE(childFirstLocalReactionsIface_get_sm_local(&statechart)== 3l);
+}
+
+

+ 19 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenInternalEvent/EventDrivenInternalEvent.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::c {
+	statechart eventdriven.EventDrivenInternalEvent {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "EventDrivenInternalEvent"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 45 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenInternalEvent/EventDrivenInternalEventTest.cc

@@ -0,0 +1,45 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+
+#include "gtest/gtest.h"
+#include "EventDrivenInternalEvent.h"
+
+#include "sc_timer_service.h"
+
+
+
+//! The timers are managed by a timer service. */
+static sc_unit_timer_service_t timer_service;
+
+static EventDrivenInternalEvent statechart;
+
+class EventDrivenInternalEventTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		eventDrivenInternalEvent_init(&statechart);
+		sc_timer_service_init(
+			&timer_service,
+			0,
+			(sc_run_cycle_fp) &eventDrivenInternalEvent_runCycle,
+			true,
+			200,
+			&statechart
+		);
+	}
+};
+
+
+TEST_F(EventDrivenInternalEventTest, checkInternlEventQueueing) {
+	eventDrivenInternalEvent_enter(&statechart);
+	EXPECT_TRUE(eventDrivenInternalEvent_isStateActive(&statechart, EventDrivenInternalEvent_EventDrivenInternalEvent_r1_A));
+	EXPECT_TRUE(eventDrivenInternalEvent_isStateActive(&statechart, EventDrivenInternalEvent_EventDrivenInternalEvent_r2_C));
+	EXPECT_TRUE(eventDrivenInternalEvent_isStateActive(&statechart, EventDrivenInternalEvent_EventDrivenInternalEvent_check_VALID));
+	eventDrivenInternalEventIface_raise_start(&statechart);
+	EXPECT_TRUE(eventDrivenInternalEvent_isStateActive(&statechart, EventDrivenInternalEvent_EventDrivenInternalEvent_r1_B));
+	EXPECT_TRUE(eventDrivenInternalEvent_isStateActive(&statechart, EventDrivenInternalEvent_EventDrivenInternalEvent_r2_D));
+	EXPECT_TRUE(eventDrivenInternalEvent_isStateActive(&statechart, EventDrivenInternalEvent_EventDrivenInternalEvent_check_VALID));
+	EXPECT_TRUE(eventDrivenInternalEventIface_get_i1_sequence(&statechart)== 2l);
+	EXPECT_TRUE(eventDrivenInternalEventIface_get_i2_sequence(&statechart)== 3l);
+	eventDrivenInternalEvent_exit(&statechart);
+}
+
+

+ 19 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEvent.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::c {
+	statechart eventdriven.EventDrivenTriggeredByEvent {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "EventDrivenTriggeredByEvent"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 60 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEventTest.cc

@@ -0,0 +1,60 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+
+#include "gtest/gtest.h"
+#include "EventDrivenTriggeredByEvent.h"
+
+#include "EventDrivenTriggeredByEventRequired.h"
+#include "sc_timer_service.h"
+
+
+
+//! The timers are managed by a timer service. */
+static sc_unit_timer_service_t timer_service;
+
+static EventDrivenTriggeredByEvent statechart;
+
+class EventDrivenTriggeredByEventTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		eventDrivenTriggeredByEvent_init(&statechart);
+		sc_timer_service_init(
+			&timer_service,
+			(sc_raise_time_event_fp) &eventDrivenTriggeredByEvent_raiseTimeEvent,
+			(sc_run_cycle_fp) &eventDrivenTriggeredByEvent_runCycle,
+			true,
+			200,
+			&statechart
+		);
+	}
+};
+
+
+TEST_F(EventDrivenTriggeredByEventTest, internalEventTriggersRunCycle) {
+	eventDrivenTriggeredByEvent_enter(&statechart);
+	EXPECT_TRUE(eventDrivenTriggeredByEvent_isStateActive(&statechart, EventDrivenTriggeredByEvent_EventDrivenTriggeredByEvent_main_region_A));
+	eventDrivenTriggeredByEventIface_raise_e(&statechart);
+	EXPECT_TRUE(eventDrivenTriggeredByEvent_isStateActive(&statechart, EventDrivenTriggeredByEvent_EventDrivenTriggeredByEvent_main_region_B));
+	EXPECT_TRUE(eventDrivenTriggeredByEventIface_get_x(&statechart)== 0l);
+	eventDrivenTriggeredByEventIface_raise_e(&statechart);
+	EXPECT_TRUE(eventDrivenTriggeredByEvent_isStateActive(&statechart, EventDrivenTriggeredByEvent_EventDrivenTriggeredByEvent_main_region_A));
+	EXPECT_TRUE(eventDrivenTriggeredByEventIface_get_x(&statechart)== 0l);
+	eventDrivenTriggeredByEvent_exit(&statechart);
+}
+TEST_F(EventDrivenTriggeredByEventTest, proceedTimeDoesNotTriggerRunCycle) {
+	eventDrivenTriggeredByEvent_enter(&statechart);
+	EXPECT_TRUE(eventDrivenTriggeredByEvent_isStateActive(&statechart, EventDrivenTriggeredByEvent_EventDrivenTriggeredByEvent_main_region_A));
+	sc_timer_service_proceed_time(&timer_service, 120000);
+	EXPECT_TRUE(eventDrivenTriggeredByEventIface_get_x(&statechart)== 0l);
+	eventDrivenTriggeredByEvent_exit(&statechart);
+}
+
+void eventDrivenTriggeredByEvent_setTimer(EventDrivenTriggeredByEvent* statechart, const sc_eventid evid, const sc_integer time_ms, const sc_boolean periodic){
+	sc_timer_t timer;
+	sc_timer_init(&timer, time_ms, periodic, evid);
+	insert_timer(&timer_service, timer);
+}
+
+void eventDrivenTriggeredByEvent_unsetTimer(EventDrivenTriggeredByEvent* handle, const sc_eventid evid){
+	delete_task(&timer_service, find_time_event(&timer_service, evid));
+}
+

+ 19 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEvent.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::c {
+	statechart eventdriven.EventDrivenTriggeredByTimeEvent {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "EventDrivenTriggeredByTimeEvent"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 67 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEventTest.cc

@@ -0,0 +1,67 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+
+#include "gtest/gtest.h"
+#include "EventDrivenTriggeredByTimeEvent.h"
+
+#include "EventDrivenTriggeredByTimeEventRequired.h"
+#include "sc_timer_service.h"
+
+
+
+//! The timers are managed by a timer service. */
+static sc_unit_timer_service_t timer_service;
+
+static EventDrivenTriggeredByTimeEvent statechart;
+
+class EventDrivenTriggeredByTimeEventTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		eventDrivenTriggeredByTimeEvent_init(&statechart);
+		sc_timer_service_init(
+			&timer_service,
+			(sc_raise_time_event_fp) &eventDrivenTriggeredByTimeEvent_raiseTimeEvent,
+			(sc_run_cycle_fp) &eventDrivenTriggeredByTimeEvent_runCycle,
+			true,
+			200,
+			&statechart
+		);
+	}
+};
+
+
+TEST_F(EventDrivenTriggeredByTimeEventTest, timeEventTriggersRunCycle) {
+	eventDrivenTriggeredByTimeEvent_enter(&statechart);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEvent_isStateActive(&statechart, EventDrivenTriggeredByTimeEvent_EventDrivenTriggeredByTimeEvent_r_A));
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_x(&statechart)== 0l);
+	sc_timer_service_proceed_time(&timer_service, 999);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEvent_isStateActive(&statechart, EventDrivenTriggeredByTimeEvent_EventDrivenTriggeredByTimeEvent_r_A));
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_x(&statechart)== 0l);
+	sc_timer_service_proceed_time(&timer_service, 1);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEvent_isStateActive(&statechart, EventDrivenTriggeredByTimeEvent_EventDrivenTriggeredByTimeEvent_r_B));
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_x(&statechart)== 0l);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_transition_count(&statechart)== 1l);
+	sc_timer_service_proceed_time(&timer_service, 1000);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEvent_isStateActive(&statechart, EventDrivenTriggeredByTimeEvent_EventDrivenTriggeredByTimeEvent_r_A));
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_x(&statechart)== 0l);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_transition_count(&statechart)== 2l);
+	sc_timer_service_proceed_time(&timer_service, 999000);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEvent_isStateActive(&statechart, EventDrivenTriggeredByTimeEvent_EventDrivenTriggeredByTimeEvent_r_B));
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_x(&statechart)== 0l);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_transition_count(&statechart)== 1001l);
+	sc_timer_service_proceed_time(&timer_service, 999000);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEvent_isStateActive(&statechart, EventDrivenTriggeredByTimeEvent_EventDrivenTriggeredByTimeEvent_r_A));
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_x(&statechart)== 0l);
+	EXPECT_TRUE(eventDrivenTriggeredByTimeEventIface_get_transition_count(&statechart)== 2000l);
+	eventDrivenTriggeredByTimeEvent_exit(&statechart);
+}
+
+void eventDrivenTriggeredByTimeEvent_setTimer(EventDrivenTriggeredByTimeEvent* statechart, const sc_eventid evid, const sc_integer time_ms, const sc_boolean periodic){
+	sc_timer_t timer;
+	sc_timer_init(&timer, time_ms, periodic, evid);
+	insert_timer(&timer_service, timer);
+}
+
+void eventDrivenTriggeredByTimeEvent_unsetTimer(EventDrivenTriggeredByTimeEvent* handle, const sc_eventid evid){
+	delete_task(&timer_service, find_time_event(&timer_service, evid));
+}
+

+ 19 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchy.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::c {
+	statechart executionorder.ParentFirstExecutionHierarchy {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "ParentFirstExecutionHierarchy"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 86 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchyTest.cc

@@ -0,0 +1,86 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+
+#include "gtest/gtest.h"
+#include "ParentFirstExecutionHierarchy.h"
+
+#include "sc_timer_service.h"
+
+
+
+//! The timers are managed by a timer service. */
+static sc_unit_timer_service_t timer_service;
+
+static ParentFirstExecutionHierarchy statechart;
+
+class ParentFirstExecutionHierarchyTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		parentFirstExecutionHierarchy_init(&statechart);
+		sc_timer_service_init(
+			&timer_service,
+			0,
+			(sc_run_cycle_fp) &parentFirstExecutionHierarchy_runCycle,
+			false,
+			200,
+			&statechart
+		);
+	}
+};
+
+void assertNoLocalReaction(){
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_a_local(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aa_local(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aaa_local(&statechart));
+}
+
+TEST_F(ParentFirstExecutionHierarchyTest, childShouldTakeTransition) {
+	parentFirstExecutionHierarchy_enter(&statechart);
+	EXPECT_TRUE(parentFirstExecutionHierarchy_isStateActive(&statechart, ParentFirstExecutionHierarchy_ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	parentFirstExecutionHierarchyIface_set_disable_a(&statechart,true);
+	parentFirstExecutionHierarchyIface_set_disable_aa(&statechart,true);
+	parentFirstExecutionHierarchyIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(parentFirstExecutionHierarchy_isStateActive(&statechart, ParentFirstExecutionHierarchy_ParentFirstExecutionHierarchy_r_B));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_a_reacted(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aa_reacted(&statechart));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_aaa_reacted(&statechart));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_a_local(&statechart));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_aa_local(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aaa_local(&statechart));
+}
+TEST_F(ParentFirstExecutionHierarchyTest, parentShouldTakeTransition) {
+	parentFirstExecutionHierarchy_enter(&statechart);
+	EXPECT_TRUE(parentFirstExecutionHierarchy_isStateActive(&statechart, ParentFirstExecutionHierarchy_ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	parentFirstExecutionHierarchyIface_set_disable_a(&statechart,true);
+	parentFirstExecutionHierarchyIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(parentFirstExecutionHierarchy_isStateActive(&statechart, ParentFirstExecutionHierarchy_ParentFirstExecutionHierarchy_r_B));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_a_reacted(&statechart));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_aa_reacted(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aaa_reacted(&statechart));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_a_local(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aa_local(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aaa_local(&statechart));
+}
+TEST_F(ParentFirstExecutionHierarchyTest, grandparentShouldTakeTransition) {
+	parentFirstExecutionHierarchy_enter(&statechart);
+	EXPECT_TRUE(parentFirstExecutionHierarchy_isStateActive(&statechart, ParentFirstExecutionHierarchy_ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	parentFirstExecutionHierarchyIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(parentFirstExecutionHierarchy_isStateActive(&statechart, ParentFirstExecutionHierarchy_ParentFirstExecutionHierarchy_r_B));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_a_reacted(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aa_reacted(&statechart));
+	EXPECT_TRUE(!parentFirstExecutionHierarchyIface_get_aaa_reacted(&statechart));
+	assertNoLocalReaction();
+}
+TEST_F(ParentFirstExecutionHierarchyTest, expectLocalReactrionsExecuteWithNoTransition) {
+	parentFirstExecutionHierarchy_enter(&statechart);
+	EXPECT_TRUE(parentFirstExecutionHierarchy_isStateActive(&statechart, ParentFirstExecutionHierarchy_ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(parentFirstExecutionHierarchy_isStateActive(&statechart, ParentFirstExecutionHierarchy_ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_a_local(&statechart));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_aa_local(&statechart));
+	EXPECT_TRUE(parentFirstExecutionHierarchyIface_get_aaa_local(&statechart));
+}
+
+

+ 19 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/ParentFirstLocalReactions/ParentFirstLocalReactions.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::c {
+	statechart executionorder.ParentFirstLocalReactions {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "ParentFirstLocalReactions"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 81 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/ParentFirstLocalReactions/ParentFirstLocalReactionsTest.cc

@@ -0,0 +1,81 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+
+#include "gtest/gtest.h"
+#include "ParentFirstLocalReactions.h"
+
+#include "sc_timer_service.h"
+
+static long counter = 0l;
+
+
+//! The timers are managed by a timer service. */
+static sc_unit_timer_service_t timer_service;
+
+static ParentFirstLocalReactions statechart;
+
+class ParentFirstLocalReactionsTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		parentFirstLocalReactions_init(&statechart);
+		sc_timer_service_init(
+			&timer_service,
+			0,
+			(sc_run_cycle_fp) &parentFirstLocalReactions_runCycle,
+			false,
+			200,
+			&statechart
+		);
+	}
+};
+
+
+TEST_F(ParentFirstLocalReactionsTest, expectBottomUpLocalReactionOrder) {
+	parentFirstLocalReactions_enter(&statechart);
+	EXPECT_TRUE(parentFirstLocalReactions_isStateActive(&statechart, ParentFirstLocalReactions_ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(parentFirstLocalReactions_isStateActive(&statechart, ParentFirstLocalReactions_ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_sm_local(&statechart)== 1l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_a_local(&statechart)== 2l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_aa_local(&statechart)== 3l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_aaa_local(&statechart)== 4l);
+}
+TEST_F(ParentFirstLocalReactionsTest, expectParentLocalReactionOnChildLocalTransition) {
+	parentFirstLocalReactions_enter(&statechart);
+	EXPECT_TRUE(parentFirstLocalReactions_isStateActive(&statechart, ParentFirstLocalReactions_ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	parentFirstLocalReactionsIface_raise_e(&statechart);
+	parentFirstLocalReactionsIface_set_disable_a(&statechart,true);
+	parentFirstLocalReactionsIface_set_disable_aa(&statechart,true);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(parentFirstLocalReactions_isStateActive(&statechart, ParentFirstLocalReactions_ParentFirstLocalReactions_r_A_r_AA_r_AAB));
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_sm_local(&statechart)== 1l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_a_local(&statechart)== 2l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_aa_local(&statechart)== 3l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_aaa_local(&statechart)== 0l);
+}
+TEST_F(ParentFirstLocalReactionsTest, expectGrandparentLocalReactionOnParentLocalTransition) {
+	parentFirstLocalReactions_enter(&statechart);
+	EXPECT_TRUE(parentFirstLocalReactions_isStateActive(&statechart, ParentFirstLocalReactions_ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	parentFirstLocalReactionsIface_set_disable_a(&statechart,true);
+	parentFirstLocalReactionsIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(parentFirstLocalReactions_isStateActive(&statechart, ParentFirstLocalReactions_ParentFirstLocalReactions_r_A_r_AB));
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_sm_local(&statechart)== 1l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_a_local(&statechart)== 2l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_aa_local(&statechart)== 0l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_aaa_local(&statechart)== 0l);
+}
+TEST_F(ParentFirstLocalReactionsTest, expectNoLocalReactionOnGrandparentTransition) {
+	parentFirstLocalReactions_enter(&statechart);
+	EXPECT_TRUE(parentFirstLocalReactions_isStateActive(&statechart, ParentFirstLocalReactions_ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	parentFirstLocalReactionsIface_set_disable_aaa(&statechart,true);
+	parentFirstLocalReactionsIface_set_disable_aa(&statechart,true);
+	parentFirstLocalReactionsIface_raise_e(&statechart);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
+	EXPECT_TRUE(parentFirstLocalReactions_isStateActive(&statechart, ParentFirstLocalReactions_ParentFirstLocalReactions_r_B));
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_sm_local(&statechart)== 1l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_a_local(&statechart)== 0l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_aa_local(&statechart)== 0l);
+	EXPECT_TRUE(parentFirstLocalReactionsIface_get_aaa_local(&statechart)== 0l);
+}
+
+

+ 1 - 0
test-plugins/org.yakindu.sct.generator.c.test/gtests/TimedTransitions/TimedTransitionsTest.cc

@@ -33,6 +33,7 @@ TEST_F(TimedTransitionsTest, Timer01) {
 	timedTransitions_enter(&statechart);
 	EXPECT_TRUE(timedTransitions_isStateActive(&statechart, TimedTransitions_main_region_Start));
 	sc_timer_service_proceed_time(&timer_service, 2030);
+	sc_timer_service_proceed_cycles(&timer_service, 1);
 	EXPECT_TRUE(timedTransitions_isStateActive(&statechart, TimedTransitions_main_region_End));
 }
 

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

@@ -0,0 +1,96 @@
+GeneratorModel for sctunit::c {
+
+	test EventDrivenInternalEvent {
+
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.c.test"
+			targetFolder = "gtests/EventDrivenInternalEvent"
+			libraryTargetFolder = "libraryTarget"
+		}
+
+		feature JUnitWrapper {
+			WrapToJUnit = "true"
+		}
+
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineExitActions = false
+			inlineEnterSequences = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+			inlineEntries = false
+		}
+		
+		feature SGenModel{
+			GenerateSGen = "true"
+		}
+		
+	}
+
+	test EventDrivenTriggeredByEvent {
+
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.c.test"
+			targetFolder = "gtests/EventDrivenTriggeredByEvent"
+			libraryTargetFolder = "libraryTarget"
+		}
+
+		feature JUnitWrapper {
+			WrapToJUnit = "true"
+		}
+
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineExitActions = false
+			inlineEnterSequences = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+			inlineEntries = false
+		}
+		
+		feature SGenModel{
+			GenerateSGen = "true"
+		}
+		
+	}
+
+
+	test EventDrivenTriggeredByTimeEvent {
+
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.c.test"
+			targetFolder = "gtests/EventDrivenTriggeredByTimeEvent"
+			libraryTargetFolder = "libraryTarget"
+		}
+
+		feature JUnitWrapper {
+			WrapToJUnit = "true"
+		}
+
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineExitActions = false
+			inlineEnterSequences = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+			inlineEntries = false
+		}
+		
+		feature SGenModel{
+			GenerateSGen = "true"
+		}
+		
+	}
+
+
+
+}

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

@@ -0,0 +1,188 @@
+GeneratorModel for sctunit::c {
+
+	test ChildFirstExecutionHierarchy {
+
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.c.test"
+			targetFolder = "gtests/ChildFirstExecutionHierarchy"
+			libraryTargetFolder = "libraryTarget"
+		}
+
+		feature JUnitWrapper {
+			WrapToJUnit = "true"
+		}
+
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineExitActions = false
+			inlineEnterSequences = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+			inlineEntries = false
+		}
+		
+		feature SGenModel{
+			GenerateSGen = "true"
+		}
+		
+	}
+
+	test ChildFirstLocalReactions {
+
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.c.test"
+			targetFolder = "gtests/ChildFirstLocalReactions"
+			libraryTargetFolder = "libraryTarget"
+		}
+
+		feature JUnitWrapper {
+			WrapToJUnit = "true"
+		}
+
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineExitActions = false
+			inlineEnterSequences = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+			inlineEntries = false
+		}
+		
+		feature SGenModel{
+			GenerateSGen = "true"
+		}
+		
+	}
+
+
+//	test ChildFirstOrthogonalReactions {
+//
+//		feature Outlet {
+//			targetProject = "org.yakindu.sct.generator.c.test"
+//			targetFolder = "gtests/ChildFirstOrthogonalReactions"
+//			libraryTargetFolder = "libraryTarget"
+//		}
+//
+//		feature JUnitWrapper {
+//			WrapToJUnit = "true"
+//		}
+//
+//		feature FunctionInlining {
+//			inlineReactions = false
+//			inlineEntryActions = false
+//			inlineExitActions = false
+//			inlineEnterSequences = false
+//			inlineExitSequences = false
+//			inlineChoices = false
+//			inlineEnterRegion = false
+//			inlineExitRegion = false
+//			inlineEntries = false
+//		}
+//		
+//		feature SGenModel{
+//			GenerateSGen = "true"
+//		}
+//		
+//	}
+
+
+	test ParentFirstExecutionHierarchy {
+
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.c.test"
+			targetFolder = "gtests/ParentFirstExecutionHierarchy"
+			libraryTargetFolder = "libraryTarget"
+		}
+
+		feature JUnitWrapper {
+			WrapToJUnit = "true"
+		}
+
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineExitActions = false
+			inlineEnterSequences = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+			inlineEntries = false
+		}
+		
+		feature SGenModel{
+			GenerateSGen = "true"
+		}
+		
+	}
+
+	test ParentFirstLocalReactions {
+
+		feature Outlet {
+			targetProject = "org.yakindu.sct.generator.c.test"
+			targetFolder = "gtests/ParentFirstLocalReactions"
+			libraryTargetFolder = "libraryTarget"
+		}
+
+		feature JUnitWrapper {
+			WrapToJUnit = "true"
+		}
+
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineExitActions = false
+			inlineEnterSequences = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+			inlineEntries = false
+		}
+		
+		feature SGenModel{
+			GenerateSGen = "true"
+		}
+		
+	}
+
+
+//	test ParentFirstOrthogonalReactions {
+//
+//		feature Outlet {
+//			targetProject = "org.yakindu.sct.generator.c.test"
+//			targetFolder = "gtests/ParentFirstOrthogonalReactions"
+//			libraryTargetFolder = "libraryTarget"
+//		}
+//
+//		feature JUnitWrapper {
+//			WrapToJUnit = "true"
+//		}
+//
+//		feature FunctionInlining {
+//			inlineReactions = false
+//			inlineEntryActions = false
+//			inlineExitActions = false
+//			inlineEnterSequences = false
+//			inlineExitSequences = false
+//			inlineChoices = false
+//			inlineEnterRegion = false
+//			inlineExitRegion = false
+//			inlineEntries = false
+//		}
+//		
+//		feature SGenModel{
+//			GenerateSGen = "true"
+//		}
+//		
+//	}
+
+
+
+}

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

@@ -18,6 +18,8 @@ import org.junit.runners.Suite.SuiteClasses;
 	ConstOnlyDefaultScopeTest.class,
 	ConstOnlyInternalScopeTest.class,
 	ConstOnlyNamedScopeTest.class,
+	ChildFirstExecutionHierarchyTest.class,
+	ChildFirstLocalReactionsTest.class,
 	DeclarationsTest.class,
 	DeepEntryTest.class,
 	DeepHistoryTest.class,
@@ -27,6 +29,9 @@ import org.junit.runners.Suite.SuiteClasses;
 	EntryChoiceTest.class,
 	EntryExitSelfTransitionTest.class,
 	EntryReactionActionTest.class,
+	EventDrivenInternalEventTest.class,
+	EventDrivenTriggeredByEventTest.class,
+	EventDrivenTriggeredByTimeEventTest.class,
 	ExitOnSelfTransitionTest.class,
 	ExitStateTest.class,
 	FeatureCallsTest.class,
@@ -46,6 +51,8 @@ import org.junit.runners.Suite.SuiteClasses;
 	OperationsTest.class,
 	OutEventLifeCycleTest.class,
 	ParenthesisTest.class,
+	ParentFirstExecutionHierarchyTest.class,
+	ParentFirstLocalReactionsTest.class,
 	PriorityValuesTest.class,
 	RaiseEventTest.class,
 	ReadOnlyVariableTest.class,
@@ -66,9 +73,7 @@ import org.junit.runners.Suite.SuiteClasses;
 	TriggerGuardExpressionsTest.class,
 	TriggerExpressionPrecedenceTest.class,
 	ValuedEventsTest.class,
-	TypeAliasTest.class,
-	StatemachineKeywords.class,
-	TimedTransitionsTest.class
+	TypeAliasTest.class
 })
 public class AllTests {
 }

+ 34 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ChildFirstExecutionHierarchyTest.java

@@ -0,0 +1,34 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+package org.yakindu.sct.generator.c.test;
+
+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(
+	statechartBundle = "org.yakindu.sct.test.models",
+	sourceFile = "gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchyTest.cc",
+	program = "gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchy",
+	model = "testmodels/SCTUnit/executionorder/ChildFirstExecutionHierarchy.sct",
+	additionalFilesToCopy = {
+		"libraryTarget/sc_timer_service.c",
+		"libraryTarget/sc_timer_service.h"
+	},
+	additionalFilesToCompile = {
+		"ChildFirstExecutionHierarchy.c",
+		"sc_timer_service.c"
+	}
+)
+@RunWith(GTestRunner.class)
+public class ChildFirstExecutionHierarchyTest {
+
+	protected final GTestHelper helper = new GTestHelper(this);
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

+ 34 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ChildFirstLocalReactionsTest.java

@@ -0,0 +1,34 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+package org.yakindu.sct.generator.c.test;
+
+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(
+	statechartBundle = "org.yakindu.sct.test.models",
+	sourceFile = "gtests/ChildFirstLocalReactions/ChildFirstLocalReactionsTest.cc",
+	program = "gtests/ChildFirstLocalReactions/ChildFirstLocalReactions",
+	model = "testmodels/SCTUnit/executionorder/ChildFirstLocalReactions.sct",
+	additionalFilesToCopy = {
+		"libraryTarget/sc_timer_service.c",
+		"libraryTarget/sc_timer_service.h"
+	},
+	additionalFilesToCompile = {
+		"ChildFirstLocalReactions.c",
+		"sc_timer_service.c"
+	}
+)
+@RunWith(GTestRunner.class)
+public class ChildFirstLocalReactionsTest {
+
+	protected final GTestHelper helper = new GTestHelper(this);
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

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

@@ -11,7 +11,7 @@ import org.yakindu.sct.generator.c.gtest.GTestHelper;
 	statechartBundle = "org.yakindu.sct.test.models",
 	sourceFile = "gtests/ConstOnlyDefaultScope/ConstOnlyDefaultScopeTest.cc",
 	program = "gtests/ConstOnlyDefaultScope/ConstOnlyDefaultScope",
-	model = "testmodels/SCTUnit/ConstOnlyDefaultScope.sct",
+	model = "testmodels/SCTUnit/declarations/ConstOnlyDefaultScope.sct",
 	additionalFilesToCopy = {
 		"libraryTarget/sc_timer_service.c",
 		"libraryTarget/sc_timer_service.h"

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

@@ -11,7 +11,7 @@ import org.yakindu.sct.generator.c.gtest.GTestHelper;
 	statechartBundle = "org.yakindu.sct.test.models",
 	sourceFile = "gtests/ConstOnlyInternalScope/ConstOnlyInternalScopeTest.cc",
 	program = "gtests/ConstOnlyInternalScope/ConstOnlyInternalScope",
-	model = "testmodels/SCTUnit/ConstOnlyInternalScope.sct",
+	model = "testmodels/SCTUnit/declarations/ConstOnlyInternalScope.sct",
 	additionalFilesToCopy = {
 		"libraryTarget/sc_timer_service.c",
 		"libraryTarget/sc_timer_service.h"

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

@@ -11,7 +11,7 @@ import org.yakindu.sct.generator.c.gtest.GTestHelper;
 	statechartBundle = "org.yakindu.sct.test.models",
 	sourceFile = "gtests/ConstOnlyNamedScope/ConstOnlyNamedScopeTest.cc",
 	program = "gtests/ConstOnlyNamedScope/ConstOnlyNamedScope",
-	model = "testmodels/SCTUnit/ConstOnlyNamedScope.sct",
+	model = "testmodels/SCTUnit/declarations/ConstOnlyNamedScope.sct",
 	additionalFilesToCopy = {
 		"libraryTarget/sc_timer_service.c",
 		"libraryTarget/sc_timer_service.h"

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

@@ -11,7 +11,7 @@ import org.yakindu.sct.generator.c.gtest.GTestHelper;
 	statechartBundle = "org.yakindu.sct.test.models",
 	sourceFile = "gtests/EntryReactionAction/EntryReactionActionTest.cc",
 	program = "gtests/EntryReactionAction/EntryReactionAction",
-	model = "testmodels/SCTUnit/EntryReactionAction.sct",
+	model = "testmodels/SCTUnit/entries/EntryReactionAction.sct",
 	additionalFilesToCopy = {
 		"libraryTarget/sc_timer_service.c",
 		"libraryTarget/sc_timer_service.h"

+ 34 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/EventDrivenInternalEventTest.java

@@ -0,0 +1,34 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+package org.yakindu.sct.generator.c.test;
+
+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(
+	statechartBundle = "org.yakindu.sct.test.models",
+	sourceFile = "gtests/EventDrivenInternalEvent/EventDrivenInternalEventTest.cc",
+	program = "gtests/EventDrivenInternalEvent/EventDrivenInternalEvent",
+	model = "testmodels/SCTUnit/eventdriven/EventDrivenInternalEvent.sct",
+	additionalFilesToCopy = {
+		"libraryTarget/sc_timer_service.c",
+		"libraryTarget/sc_timer_service.h"
+	},
+	additionalFilesToCompile = {
+		"EventDrivenInternalEvent.c",
+		"sc_timer_service.c"
+	}
+)
+@RunWith(GTestRunner.class)
+public class EventDrivenInternalEventTest {
+
+	protected final GTestHelper helper = new GTestHelper(this);
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

+ 34 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/EventDrivenTriggeredByEventTest.java

@@ -0,0 +1,34 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+package org.yakindu.sct.generator.c.test;
+
+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(
+	statechartBundle = "org.yakindu.sct.test.models",
+	sourceFile = "gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEventTest.cc",
+	program = "gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEvent",
+	model = "testmodels/SCTUnit/eventdriven/EventDrivenTriggeredByEvent.sct",
+	additionalFilesToCopy = {
+		"libraryTarget/sc_timer_service.c",
+		"libraryTarget/sc_timer_service.h"
+	},
+	additionalFilesToCompile = {
+		"EventDrivenTriggeredByEvent.c",
+		"sc_timer_service.c"
+	}
+)
+@RunWith(GTestRunner.class)
+public class EventDrivenTriggeredByEventTest {
+
+	protected final GTestHelper helper = new GTestHelper(this);
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

+ 34 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/EventDrivenTriggeredByTimeEventTest.java

@@ -0,0 +1,34 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+package org.yakindu.sct.generator.c.test;
+
+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(
+	statechartBundle = "org.yakindu.sct.test.models",
+	sourceFile = "gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEventTest.cc",
+	program = "gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEvent",
+	model = "testmodels/SCTUnit/eventdriven/EventDrivenTriggeredByTimeEvent.sct",
+	additionalFilesToCopy = {
+		"libraryTarget/sc_timer_service.c",
+		"libraryTarget/sc_timer_service.h"
+	},
+	additionalFilesToCompile = {
+		"EventDrivenTriggeredByTimeEvent.c",
+		"sc_timer_service.c"
+	}
+)
+@RunWith(GTestRunner.class)
+public class EventDrivenTriggeredByTimeEventTest {
+
+	protected final GTestHelper helper = new GTestHelper(this);
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

+ 34 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ParentFirstExecutionHierarchyTest.java

@@ -0,0 +1,34 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+package org.yakindu.sct.generator.c.test;
+
+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(
+	statechartBundle = "org.yakindu.sct.test.models",
+	sourceFile = "gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchyTest.cc",
+	program = "gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchy",
+	model = "testmodels/SCTUnit/executionorder/ParentFirstExecutionHierarchy.sct",
+	additionalFilesToCopy = {
+		"libraryTarget/sc_timer_service.c",
+		"libraryTarget/sc_timer_service.h"
+	},
+	additionalFilesToCompile = {
+		"ParentFirstExecutionHierarchy.c",
+		"sc_timer_service.c"
+	}
+)
+@RunWith(GTestRunner.class)
+public class ParentFirstExecutionHierarchyTest {
+
+	protected final GTestHelper helper = new GTestHelper(this);
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

+ 34 - 0
test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/ParentFirstLocalReactionsTest.java

@@ -0,0 +1,34 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+package org.yakindu.sct.generator.c.test;
+
+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(
+	statechartBundle = "org.yakindu.sct.test.models",
+	sourceFile = "gtests/ParentFirstLocalReactions/ParentFirstLocalReactionsTest.cc",
+	program = "gtests/ParentFirstLocalReactions/ParentFirstLocalReactions",
+	model = "testmodels/SCTUnit/executionorder/ParentFirstLocalReactions.sct",
+	additionalFilesToCopy = {
+		"libraryTarget/sc_timer_service.c",
+		"libraryTarget/sc_timer_service.h"
+	},
+	additionalFilesToCompile = {
+		"ParentFirstLocalReactions.c",
+		"sc_timer_service.c"
+	}
+)
+@RunWith(GTestRunner.class)
+public class ParentFirstLocalReactionsTest {
+
+	protected final GTestHelper helper = new GTestHelper(this);
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}

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

@@ -11,7 +11,7 @@ import org.yakindu.sct.generator.c.gtest.GTestHelper;
 	statechartBundle = "org.yakindu.sct.test.models",
 	sourceFile = "gtests/TriggerExpressionPrecedence/TriggerExpressionPrecedenceTest.cc",
 	program = "gtests/TriggerExpressionPrecedence/TriggerExpressionPrecedence",
-	model = "testmodels/SCTUnit/TriggerExpressionPrecedence.sct",
+	model = "testmodels/SCTUnit/expressions/TriggerExpressionPrecedence.sct",
 	additionalFilesToCopy = {
 		"libraryTarget/sc_timer_service.c",
 		"libraryTarget/sc_timer_service.h"

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/AlwaysOncycleTest/AlwaysOncycleTest.cc

@@ -4,6 +4,9 @@
 #include "AlwaysOncycle.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static AlwaysOncycle* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/AssignmentAsExpressionTest/AssignmentAsExpressionTest.cc

@@ -4,6 +4,9 @@
 #include "AssignmentAsExpression.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static AssignmentAsExpression* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/BitExpressionsTest/BitExpressionsTest.cc

@@ -4,6 +4,9 @@
 #include "BitExpressions.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static BitExpressions* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/BooleanExpressionsTest/BooleanExpressionsTest.cc

@@ -4,6 +4,9 @@
 #include "BooleanExpressions.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static BooleanExpressions* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/CKeywordsTest/CKeywordsTest.cc

@@ -4,6 +4,9 @@
 #include "CKeywords.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static CKeywords* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/CastExpressionsTest/CastExpressionsTest.cc

@@ -4,6 +4,9 @@
 #include "CastExpressions.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static CastExpressions* statechart;
 
 //! The timers are managed by a timer service. */

+ 19 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchy.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::cpp {
+	statechart executionorder.ChildFirstExecutionHierarchy {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "ChildFirstExecutionHierarchy"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 135 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChildFirstExecutionHierarchy/ChildFirstExecutionHierarchyTest.cc

@@ -0,0 +1,135 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+#include <string>
+#include "gtest/gtest.h"
+#include "ChildFirstExecutionHierarchy.h"
+#include "sc_runner.h"
+#include "sc_types.h"
+
+
+
+static ChildFirstExecutionHierarchy* statechart;
+
+//! The timers are managed by a timer service. */
+static SctUnitRunner * runner;
+
+class ChildFirstExecutionHierarchyTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		statechart = new ChildFirstExecutionHierarchy();
+		statechart->init();
+		runner = new SctUnitRunner(
+			statechart,
+			false,
+			200
+		);
+	}
+	virtual void TearDown() {
+		delete statechart;
+		delete runner;
+	}
+};
+
+void assertNoLocalReaction(){
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_a_local());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aa_local());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aaa_local());
+	
+}
+
+TEST_F(ChildFirstExecutionHierarchyTest, childShouldTakeTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstExecutionHierarchy::ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstExecutionHierarchy::ChildFirstExecutionHierarchy_r_B));
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_a_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aa_reacted());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_reacted());
+	
+	assertNoLocalReaction();
+	
+}
+TEST_F(ChildFirstExecutionHierarchyTest, parentShouldTakeTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstExecutionHierarchy::ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->set_disable_aaa(true);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstExecutionHierarchy::ChildFirstExecutionHierarchy_r_B));
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_a_reacted());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aaa_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_a_local());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aa_local());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local());
+	
+}
+TEST_F(ChildFirstExecutionHierarchyTest, grandparentShouldTakeTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstExecutionHierarchy::ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->set_disable_aa(true);
+	
+	statechart->getDefaultSCI()->set_disable_aaa(true);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstExecutionHierarchy::ChildFirstExecutionHierarchy_r_B));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aa_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aaa_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_a_local());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local());
+	
+}
+TEST_F(ChildFirstExecutionHierarchyTest, expectLocalReactrionsExecuteWithNoTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstExecutionHierarchy::ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstExecutionHierarchy::ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local());
+	
+}

+ 19 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChildFirstLocalReactions/ChildFirstLocalReactions.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::cpp {
+	statechart executionorder.ChildFirstLocalReactions {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "ChildFirstLocalReactions"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 121 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChildFirstLocalReactions/ChildFirstLocalReactionsTest.cc

@@ -0,0 +1,121 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+#include <string>
+#include "gtest/gtest.h"
+#include "ChildFirstLocalReactions.h"
+#include "sc_runner.h"
+#include "sc_types.h"
+
+static long counter = 0l;
+
+
+static ChildFirstLocalReactions* statechart;
+
+//! The timers are managed by a timer service. */
+static SctUnitRunner * runner;
+
+class ChildFirstLocalReactionsTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		statechart = new ChildFirstLocalReactions();
+		statechart->init();
+		runner = new SctUnitRunner(
+			statechart,
+			false,
+			200
+		);
+	}
+	virtual void TearDown() {
+		delete statechart;
+		delete runner;
+	}
+};
+
+
+TEST_F(ChildFirstLocalReactionsTest, expectBottomUpLocalReactionOrder) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstLocalReactions::ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstLocalReactions::ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local()== 1l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local()== 2l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local()== 3l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_sm_local()== 4l);
+	
+}
+TEST_F(ChildFirstLocalReactionsTest, expectParentLocalReactionOnChildLocalTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstLocalReactions::ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstLocalReactions::ChildFirstLocalReactions_r_A_r_AA_r_AAB));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local()== 1l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local()== 2l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_sm_local()== 3l);
+	
+}
+TEST_F(ChildFirstLocalReactionsTest, expectGrandparentLocalReactionOnParentLocalTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstLocalReactions::ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->set_disable_aaa(true);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstLocalReactions::ChildFirstLocalReactions_r_A_r_AB));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local()== 1l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local()== 2l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_sm_local()== 3l);
+	
+}
+TEST_F(ChildFirstLocalReactionsTest, expectNoLocalReactionOnGrandparentTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstLocalReactions::ChildFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->set_disable_aaa(true);
+	
+	statechart->getDefaultSCI()->set_disable_aa(true);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ChildFirstLocalReactions::ChildFirstLocalReactions_r_B));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local()== 1l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local()== 2l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_sm_local()== 3l);
+	
+}

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ChoiceTest/ChoiceTest.cc

@@ -4,6 +4,9 @@
 #include "Choice.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static Choice* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConditionalExpressionsTest/ConditionalExpression.cc

@@ -4,6 +4,9 @@
 #include "ConditionalExpressions.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ConditionalExpressions* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConstOnlyDefaultScopeTest/ConstOnlyDefaultScopeTest.cc

@@ -4,6 +4,9 @@
 #include "ConstOnlyDefaultScope.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ConstOnlyDefaultScope* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConstOnlyInternalScopeTest/ConstOnlyInternalScopeTest.cc

@@ -4,6 +4,9 @@
 #include "ConstOnlyInternalScope.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ConstOnlyInternalScope* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConstOnlyNamedScopeTest/ConstOnlyNamedScopeTest.cc

@@ -4,6 +4,9 @@
 #include "ConstOnlyNamedScope.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ConstOnlyNamedScope* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ConstantsTest/ConstantsTests.cc

@@ -4,6 +4,9 @@
 #include "Constants.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static Constants* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/DeclarationsTest/DeclarationsTest.cc

@@ -4,6 +4,9 @@
 #include "Declarations.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static Declarations* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/DeepEntryTest/DeepEntryTest.cc

@@ -4,6 +4,9 @@
 #include "DeepEntry.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static DeepEntry* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/DeepHistoryTest/DeepHistoryTest.cc

@@ -4,6 +4,9 @@
 #include "DeepHistory.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static DeepHistory* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/DynamicChoiceTest/DynamicChoiceTest.cc

@@ -4,6 +4,9 @@
 #include "DynamicChoice.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static DynamicChoice* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EmptyTransitionTest/EmptyTransitionTest.cc

@@ -4,6 +4,9 @@
 #include "EmptyTransition.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static EmptyTransition* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EnterStateTest/EnterStateTest.cc

@@ -4,6 +4,9 @@
 #include "EnterState.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static EnterState* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EntryChoiceTest/EntryChoiceTest.cc

@@ -4,6 +4,9 @@
 #include "EntryChoice.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static EntryChoice* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EntryExitSelfTransitionTest/EntryExitSelfTransitionTest.cc

@@ -4,6 +4,9 @@
 #include "EntryExitSelfTransition.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static EntryExitSelfTransition* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EntryReactionActionTest/EntryReactionActionTest.cc

@@ -4,6 +4,9 @@
 #include "EntryReactionAction.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static EntryReactionAction* statechart;
 
 //! The timers are managed by a timer service. */

+ 19 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenInternalEvent/EventDrivenInternalEvent.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::cpp {
+	statechart eventdriven.EventDrivenInternalEvent {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "EventDrivenInternalEvent"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 57 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenInternalEvent/EventDrivenInternalEventTest.cc

@@ -0,0 +1,57 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+#include <string>
+#include "gtest/gtest.h"
+#include "EventDrivenInternalEvent.h"
+#include "sc_runner.h"
+#include "sc_types.h"
+
+
+
+static EventDrivenInternalEvent* statechart;
+
+//! The timers are managed by a timer service. */
+static SctUnitRunner * runner;
+
+class EventDrivenInternalEventTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		statechart = new EventDrivenInternalEvent();
+		statechart->init();
+		runner = new SctUnitRunner(
+			statechart,
+			true,
+			200
+		);
+	}
+	virtual void TearDown() {
+		delete statechart;
+		delete runner;
+	}
+};
+
+
+TEST_F(EventDrivenInternalEventTest, checkInternlEventQueueing) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenInternalEvent::EventDrivenInternalEvent_r1_A));
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenInternalEvent::EventDrivenInternalEvent_r2_C));
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenInternalEvent::EventDrivenInternalEvent_check_VALID));
+	
+	statechart->getDefaultSCI()->raise_start();
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenInternalEvent::EventDrivenInternalEvent_r1_B));
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenInternalEvent::EventDrivenInternalEvent_r2_D));
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenInternalEvent::EventDrivenInternalEvent_check_VALID));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_i1_sequence()== 2l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_i2_sequence()== 3l);
+	
+	statechart->exit();
+	
+}

+ 19 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEvent.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::cpp {
+	statechart eventdriven.EventDrivenTriggeredByEvent {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "EventDrivenTriggeredByEvent"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 67 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenTriggeredByEvent/EventDrivenTriggeredByEventTest.cc

@@ -0,0 +1,67 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+#include <string>
+#include "gtest/gtest.h"
+#include "EventDrivenTriggeredByEvent.h"
+#include "sc_runner_timed.h"
+#include "sc_types.h"
+
+
+
+static EventDrivenTriggeredByEvent* statechart;
+
+//! The timers are managed by a timer service. */
+static TimedSctUnitRunner * runner;
+
+class EventDrivenTriggeredByEventTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		statechart = new EventDrivenTriggeredByEvent();
+		statechart->init();
+		runner = new TimedSctUnitRunner(
+			statechart,
+			true,
+			200
+		);
+		statechart->setTimer(runner);
+	}
+	virtual void TearDown() {
+		delete statechart;
+		delete runner;
+	}
+};
+
+
+TEST_F(EventDrivenTriggeredByEventTest, internalEventTriggersRunCycle) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByEvent::EventDrivenTriggeredByEvent_main_region_A));
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByEvent::EventDrivenTriggeredByEvent_main_region_B));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByEvent::EventDrivenTriggeredByEvent_main_region_A));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	statechart->exit();
+	
+}
+TEST_F(EventDrivenTriggeredByEventTest, proceedTimeDoesNotTriggerRunCycle) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByEvent::EventDrivenTriggeredByEvent_main_region_A));
+	
+	runner->proceed_time(120000);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	statechart->exit();
+	
+}

+ 19 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEvent.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::cpp {
+	statechart eventdriven.EventDrivenTriggeredByTimeEvent {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "EventDrivenTriggeredByTimeEvent"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 82 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/EventDrivenTriggeredByTimeEvent/EventDrivenTriggeredByTimeEventTest.cc

@@ -0,0 +1,82 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+#include <string>
+#include "gtest/gtest.h"
+#include "EventDrivenTriggeredByTimeEvent.h"
+#include "sc_runner_timed.h"
+#include "sc_types.h"
+
+
+
+static EventDrivenTriggeredByTimeEvent* statechart;
+
+//! The timers are managed by a timer service. */
+static TimedSctUnitRunner * runner;
+
+class EventDrivenTriggeredByTimeEventTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		statechart = new EventDrivenTriggeredByTimeEvent();
+		statechart->init();
+		runner = new TimedSctUnitRunner(
+			statechart,
+			true,
+			200
+		);
+		statechart->setTimer(runner);
+	}
+	virtual void TearDown() {
+		delete statechart;
+		delete runner;
+	}
+};
+
+
+TEST_F(EventDrivenTriggeredByTimeEventTest, timeEventTriggersRunCycle) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByTimeEvent::EventDrivenTriggeredByTimeEvent_r_A));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	runner->proceed_time(999);
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByTimeEvent::EventDrivenTriggeredByTimeEvent_r_A));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	runner->proceed_time(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByTimeEvent::EventDrivenTriggeredByTimeEvent_r_B));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_transition_count()== 1l);
+	
+	runner->proceed_time(1000);
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByTimeEvent::EventDrivenTriggeredByTimeEvent_r_A));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_transition_count()== 2l);
+	
+	runner->proceed_time(999000);
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByTimeEvent::EventDrivenTriggeredByTimeEvent_r_B));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_transition_count()== 1001l);
+	
+	runner->proceed_time(999000);
+	
+	EXPECT_TRUE(statechart->isStateActive(EventDrivenTriggeredByTimeEvent::EventDrivenTriggeredByTimeEvent_r_A));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_x()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_transition_count()== 2000l);
+	
+	statechart->exit();
+	
+}

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ExitOnSelfTransitionTest/ExitOnSelfTransitionTest.cc

@@ -4,6 +4,9 @@
 #include "ExitOnSelfTransition.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ExitOnSelfTransition* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ExitStateTest/ExitStateTest.cc

@@ -4,6 +4,9 @@
 #include "ExitState.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ExitState* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/FeatureCallsTest/FeatureCallsTest.cc

@@ -4,6 +4,9 @@
 #include "FeatureCalls.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static FeatureCalls* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/FinalStateTest/FinalStateTest.cc

@@ -4,6 +4,9 @@
 #include "FinalState.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static FinalState* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/GuardTest/GuardTest.cc

@@ -4,6 +4,9 @@
 #include "Guard.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static Guard* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/GuardedEntryTest/GuardedEntryTest.cc

@@ -4,6 +4,9 @@
 #include "GuardedEntry.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static GuardedEntry* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/GuardedExitTest/GuardedExitTest.cc

@@ -4,6 +4,9 @@
 #include "GuardedExit.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static GuardedExit* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/HistoryWithExitPointTest/HistoryWithExitPointTest.cc

@@ -4,6 +4,9 @@
 #include "HistoryWithExitPoint.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static HistoryWithExitPoint* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/HistoryWithoutInitialStepTest/HistoryWithoutInitialStepTest.cc

@@ -4,6 +4,9 @@
 #include "HistoryWithoutInitialStep.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static HistoryWithoutInitialStep* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/InEventLifeCycleTest/InEventLifeCycleTest.cc

@@ -4,6 +4,9 @@
 #include "InEventLifeCycle.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static InEventLifeCycle* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/IntegerExpressionsTest/IntegerExpressionsTest.cc

@@ -4,6 +4,9 @@
 #include "IntegerExpressions.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static IntegerExpressions* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/InternalEventLifeCycleTest/InternalEventLifeCycleTest.cc

@@ -4,6 +4,9 @@
 #include "InternalEventLifeCycle.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static InternalEventLifeCycle* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/LocalReactionsTest/LocalReactionsTest.cc

@@ -4,6 +4,9 @@
 #include "LocalReactions.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static LocalReactions* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/LogicalAndTest/LogicalAndTests.cc

@@ -4,6 +4,9 @@
 #include "LogicalAnd.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static LogicalAnd* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/LogicalOrTest/LogicalOrTests.cc

@@ -4,6 +4,9 @@
 #include "LogicalOr.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static LogicalOr* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/NamedInterfaceAccessTest/NamedInterfaceAccessTest.cc

@@ -4,6 +4,9 @@
 #include "NamedInterfaceAccess.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static NamedInterfaceAccess* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/NullCheckTest/NullCheckTest.cc

@@ -4,6 +4,9 @@
 #include "NullCheck.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static NullCheck* statechart;
 
 //! The timers are managed by a timer service. */

+ 2 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/OperationsTest/OperationsTest.cc

@@ -10,6 +10,7 @@ using ::testing::AtLeast;
 using ::testing::Return;
 using ::testing::_;
 
+
 class MockInternal : public Operations::InternalSCI_OCB {
 	public:
 	MOCK_METHOD0(internalOperation1, void());
@@ -44,6 +45,7 @@ class MockDefault : public Operations::DefaultSCI_OCB {
 	MOCK_METHOD1(unnamedOperation5a, sc_string(sc_string param1));
 	MOCK_METHOD0(alwaysTrue, sc_boolean());
 };
+
 static Operations* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/OutEventLifeCycleTest/OutEventLifeCycleTest.cc

@@ -4,6 +4,9 @@
 #include "OutEventLifeCycle.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static OutEventLifeCycle* statechart;
 
 //! The timers are managed by a timer service. */

+ 19 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchy.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::cpp {
+	statechart executionorder.ParentFirstExecutionHierarchy {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "ParentFirstExecutionHierarchy"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 135 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParentFirstExecutionHierarchy/ParentFirstExecutionHierarchyTest.cc

@@ -0,0 +1,135 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+#include <string>
+#include "gtest/gtest.h"
+#include "ParentFirstExecutionHierarchy.h"
+#include "sc_runner.h"
+#include "sc_types.h"
+
+
+
+static ParentFirstExecutionHierarchy* statechart;
+
+//! The timers are managed by a timer service. */
+static SctUnitRunner * runner;
+
+class ParentFirstExecutionHierarchyTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		statechart = new ParentFirstExecutionHierarchy();
+		statechart->init();
+		runner = new SctUnitRunner(
+			statechart,
+			false,
+			200
+		);
+	}
+	virtual void TearDown() {
+		delete statechart;
+		delete runner;
+	}
+};
+
+void assertNoLocalReaction(){
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_a_local());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aa_local());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aaa_local());
+	
+}
+
+TEST_F(ParentFirstExecutionHierarchyTest, childShouldTakeTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstExecutionHierarchy::ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->set_disable_a(true);
+	
+	statechart->getDefaultSCI()->set_disable_aa(true);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstExecutionHierarchy::ParentFirstExecutionHierarchy_r_B));
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_a_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aa_reacted());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_reacted());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aaa_local());
+	
+}
+TEST_F(ParentFirstExecutionHierarchyTest, parentShouldTakeTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstExecutionHierarchy::ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->set_disable_a(true);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstExecutionHierarchy::ParentFirstExecutionHierarchy_r_B));
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_a_reacted());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aaa_reacted());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aa_local());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aaa_local());
+	
+}
+TEST_F(ParentFirstExecutionHierarchyTest, grandparentShouldTakeTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstExecutionHierarchy::ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstExecutionHierarchy::ParentFirstExecutionHierarchy_r_B));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aa_reacted());
+	
+	EXPECT_TRUE(!statechart->getDefaultSCI()->get_aaa_reacted());
+	
+	assertNoLocalReaction();
+	
+}
+TEST_F(ParentFirstExecutionHierarchyTest, expectLocalReactrionsExecuteWithNoTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstExecutionHierarchy::ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstExecutionHierarchy::ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local());
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local());
+	
+}

+ 19 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParentFirstLocalReactions/ParentFirstLocalReactions.sgen

@@ -0,0 +1,19 @@
+GeneratorModel for yakindu::cpp {
+	statechart executionorder.ParentFirstLocalReactions {
+		feature Outlet {
+			targetProject = "gtests"
+			targetFolder = "ParentFirstLocalReactions"
+		}
+		feature FunctionInlining {
+			inlineReactions = false
+			inlineEntryActions = false
+			inlineEnterSequences = false 
+			inlineExitActions = false
+			inlineExitSequences = false
+			inlineChoices = false
+			inlineEntries = false
+			inlineEnterRegion = false
+			inlineExitRegion = false
+		}
+	}
+}

+ 125 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParentFirstLocalReactions/ParentFirstLocalReactionsTest.cc

@@ -0,0 +1,125 @@
+/* Generated by YAKINDU Statechart Tools code generator. */
+#include <string>
+#include "gtest/gtest.h"
+#include "ParentFirstLocalReactions.h"
+#include "sc_runner.h"
+#include "sc_types.h"
+
+static long counter = 0l;
+
+
+static ParentFirstLocalReactions* statechart;
+
+//! The timers are managed by a timer service. */
+static SctUnitRunner * runner;
+
+class ParentFirstLocalReactionsTest : public ::testing::Test{
+	protected:
+	virtual void SetUp() {
+		statechart = new ParentFirstLocalReactions();
+		statechart->init();
+		runner = new SctUnitRunner(
+			statechart,
+			false,
+			200
+		);
+	}
+	virtual void TearDown() {
+		delete statechart;
+		delete runner;
+	}
+};
+
+
+TEST_F(ParentFirstLocalReactionsTest, expectBottomUpLocalReactionOrder) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstLocalReactions::ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstLocalReactions::ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_sm_local()== 1l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local()== 2l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local()== 3l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local()== 4l);
+	
+}
+TEST_F(ParentFirstLocalReactionsTest, expectParentLocalReactionOnChildLocalTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstLocalReactions::ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	statechart->getDefaultSCI()->set_disable_a(true);
+	
+	statechart->getDefaultSCI()->set_disable_aa(true);
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstLocalReactions::ParentFirstLocalReactions_r_A_r_AA_r_AAB));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_sm_local()== 1l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local()== 2l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local()== 3l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local()== 0l);
+	
+}
+TEST_F(ParentFirstLocalReactionsTest, expectGrandparentLocalReactionOnParentLocalTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstLocalReactions::ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->set_disable_a(true);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstLocalReactions::ParentFirstLocalReactions_r_A_r_AB));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_sm_local()== 1l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local()== 2l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local()== 0l);
+	
+}
+TEST_F(ParentFirstLocalReactionsTest, expectNoLocalReactionOnGrandparentTransition) {
+	
+	statechart->enter();
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstLocalReactions::ParentFirstLocalReactions_r_A_r_AA_r_AAA));
+	
+	statechart->getDefaultSCI()->set_disable_aaa(true);
+	
+	statechart->getDefaultSCI()->set_disable_aa(true);
+	
+	statechart->getDefaultSCI()->raise_e();
+	
+	runner->proceed_cycles(1);
+	
+	EXPECT_TRUE(statechart->isStateActive(ParentFirstLocalReactions::ParentFirstLocalReactions_r_B));
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_sm_local()== 1l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_a_local()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aa_local()== 0l);
+	
+	EXPECT_TRUE(statechart->getDefaultSCI()->get_aaa_local()== 0l);
+	
+}

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ParenthesisTest/ParenthesisTest.cc

@@ -4,6 +4,9 @@
 #include "Parenthesis.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static Parenthesis* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/PriorityValuesTest/PriorityValuesTest.cc

@@ -4,6 +4,9 @@
 #include "PriorityValues.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static PriorityValues* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/RaiseEventTest/RaiseEventTest.cc

@@ -4,6 +4,9 @@
 #include "RaiseEvent.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static RaiseEvent* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ReadOnlyVariableTest/ReadOnlyVariableTest.cc

@@ -4,6 +4,9 @@
 #include "ReadOnlyVariable.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ReadOnlyVariable* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/STextKeywordsInStatesAndRegionsTest/STextKeywordsInStatesAndRegionsTest.cc

@@ -4,6 +4,9 @@
 #include "STextKeywordsInStatesAndRegions.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static STextKeywordsInStatesAndRegions* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/SameNameDifferentRegionTest/SameNameDifferentRegionTest.cc

@@ -4,6 +4,9 @@
 #include "SameNameDifferentRegion.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static SameNameDifferentRegion* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ShallowHistoryTest/ShallowHistoryTest.cc

@@ -4,6 +4,9 @@
 #include "ShallowHistory.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ShallowHistory* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/ShallowHistoryWithDeepEntryTest/ShallowHistoryWithDeepEntryTest.cc

@@ -4,6 +4,9 @@
 #include "ShallowHistoryWithDeepEntry.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static ShallowHistoryWithDeepEntry* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/SimpleEventTest/SimpleEventTest.cc

@@ -4,6 +4,9 @@
 #include "SimpleEvent.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static SimpleEvent* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/SimpleHierachyTest/SimpleHierachyTest.cc

@@ -4,6 +4,9 @@
 #include "SimpleHierachy.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static SimpleHierachy* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StateIsActiveTest/StateIsActiveTest.cc

@@ -4,6 +4,9 @@
 #include "StateIsActive.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static StateIsActive* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StatechartActiveTest/StatechartActiveTest.cc

@@ -4,6 +4,9 @@
 #include "StatechartActive.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static StatechartActive* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StatechartLocalReactionsTest/StatechartLocalReactionsTest.cc

@@ -4,6 +4,9 @@
 #include "StatechartLocalReactions.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static StatechartLocalReactions* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StatemachineKeywordsTest/StatemachineKeywords.cc

@@ -4,6 +4,9 @@
 #include "StatechartKeywords.h"
 #include "sc_runner_timed.h"
 #include "sc_types.h"
+
+
+
 static StatechartKeywords* statechart;
 
 //! The timers are managed by a timer service. */

+ 3 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/StaticChoiceTest/StaticChoiceTest.cc

@@ -4,6 +4,9 @@
 #include "StaticChoice.h"
 #include "sc_runner.h"
 #include "sc_types.h"
+
+
+
 static StaticChoice* statechart;
 
 //! The timers are managed by a timer service. */

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


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.