diff --git a/plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/extensions/SExecExtensions.xtend b/plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/extensions/SExecExtensions.xtend index 030d2074fb..35a183da5f 100644 --- a/plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/extensions/SExecExtensions.xtend +++ b/plugins/org.yakindu.sct.model.sexec/src/org/yakindu/sct/model/sexec/extensions/SExecExtensions.xtend @@ -315,9 +315,9 @@ class SExecExtensions { def List effectFunctions(ExecutionFlow it) { val funcs = new ArrayList() - funcs += referencedEffects - states.forEach( s | funcs += s.referencedEffects ) - nodes.forEach( n | funcs += n.referencedEffects ) + funcs += referencedEffects.filter[reachable] + states.forEach( s | funcs += s.referencedEffects.filter[reachable] ) + nodes.forEach( n | funcs += n.referencedEffects.filter[reachable] ) return funcs } diff --git a/test-plugins/org.yakindu.sct.generator.c.test/gtests/UnreachableStatesTest/UnreachableStates.sgen b/test-plugins/org.yakindu.sct.generator.c.test/gtests/UnreachableStatesTest/UnreachableStates.sgen new file mode 100644 index 0000000000..ac69e91637 --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.c.test/gtests/UnreachableStatesTest/UnreachableStates.sgen @@ -0,0 +1,19 @@ +GeneratorModel for yakindu::c { + statechart UnreachableStates { + feature Outlet { + targetProject = "gtests" + targetFolder = "UnreachableStatesTest" + } + feature FunctionInlining { + inlineReactions = false + inlineEntryActions = false + inlineEnterSequences = false + inlineExitActions = false + inlineExitSequences = false + inlineChoices = false + inlineEntries = false + inlineEnterRegion = false + inlineExitRegion = false + } + } +} diff --git a/test-plugins/org.yakindu.sct.generator.c.test/gtests/UnreachableStatesTest/UnreachableStatesTest.cc b/test-plugins/org.yakindu.sct.generator.c.test/gtests/UnreachableStatesTest/UnreachableStatesTest.cc new file mode 100644 index 0000000000..86ffc61920 --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.c.test/gtests/UnreachableStatesTest/UnreachableStatesTest.cc @@ -0,0 +1,69 @@ +/** Generated by YAKINDU Statechart Tools code generator. */ + +#include "gtest/gtest.h" +#include "UnreachableStates.h" + +#include "sc_timer_service.h" + +#define SC_UNUSED(P) (void)P + +static UnreachableStates statechart; + + +class UnreachableStatesTest : public ::testing::Test +{ +public: + /* All operations from the SCTUnit test class. */ + void test(); + void setTimer(UnreachableStates* statechart, const sc_eventid evid, const sc_integer time_ms, const sc_boolean periodic); + void unsetTimer(UnreachableStates* handle, const sc_eventid evid); +protected: + sc_unit_timer_service_t timer_service; + virtual void SetUp(); +}; + +static UnreachableStatesTest * tc; + + +void UnreachableStatesTest::SetUp() +{ + unreachableStates_init(&statechart); + sc_timer_service_init( + &timer_service, + 0, + (sc_run_cycle_fp) &unreachableStates_runCycle, + false, + 200, + &statechart + ); + + + tc = this; +} +void UnreachableStatesTest::test() +{ + unreachableStates_enter(&statechart); + sc_timer_service_proceed_cycles(&timer_service, 1); + EXPECT_TRUE(unreachableStates_isStateActive(&statechart, UnreachableStates_main_region_A)); + EXPECT_TRUE(!unreachableStates_isStateActive(&statechart, UnreachableStates_main_region_B)); + EXPECT_TRUE(!unreachableStates_isStateActive(&statechart, UnreachableStates_main_region_C)); + unreachableStates_exit(&statechart); +} + +void UnreachableStatesTest::setTimer(UnreachableStates* statechart, const sc_eventid evid, const sc_integer time_ms, const sc_boolean periodic){ + SC_UNUSED(statechart); + sc_timer_t timer; + sc_timer_init(&timer, time_ms, periodic, evid); + insert_timer(&(tc->timer_service), timer); +} + +void UnreachableStatesTest::unsetTimer(UnreachableStates* handle, const sc_eventid evid){ + SC_UNUSED(handle); + delete_task(&(tc->timer_service), find_time_event(&timer_service, evid)); +} + +TEST_F(UnreachableStatesTest, test) { + test(); +} + + diff --git a/test-plugins/org.yakindu.sct.generator.c.test/model/test.sgen b/test-plugins/org.yakindu.sct.generator.c.test/model/test.sgen index 4cb84008c8..f2dba035f5 100644 --- a/test-plugins/org.yakindu.sct.generator.c.test/model/test.sgen +++ b/test-plugins/org.yakindu.sct.generator.c.test/model/test.sgen @@ -2096,4 +2096,34 @@ GeneratorModel for sctunit::c { } } + + test UnreachableStates { + + feature Outlet { + targetProject = "org.yakindu.sct.generator.c.test" + targetFolder = "gtests/UnreachableStatesTest" + 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 + } + + } } \ No newline at end of file diff --git a/test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/AllTests.java b/test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/AllTests.java index 10e5257eb3..373a3f6db7 100644 --- a/test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/AllTests.java +++ b/test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/AllTests.java @@ -91,7 +91,8 @@ ValuedEventsTest.class, TypeAliasTest.class, StatemachineKeywords.class, - TimedTransitionsTest.class + TimedTransitionsTest.class, + UnreachableStatesTest.class }) public class AllTests { } diff --git a/test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/UnreachableStatesTest.java b/test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/UnreachableStatesTest.java new file mode 100644 index 0000000000..1b41bc5e60 --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.c.test/test-gen/org/yakindu/sct/generator/c/test/UnreachableStatesTest.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/UnreachableStatesTest/UnreachableStatesTest.cc", + program = "gtests/UnreachableStatesTest/UnreachableStates", + model = "testmodels/SCTUnit/UnreachableStates.sct", + additionalFilesToCopy = { + "libraryTarget/sc_timer_service.c", + "libraryTarget/sc_timer_service.h" + }, + additionalFilesToCompile = { + "UnreachableStates.c", + "sc_timer_service.c" + } +) +@RunWith(GTestRunner.class) +public class UnreachableStatesTest { + + protected final GTestHelper helper = new GTestHelper(this); + + @Before + public void setUp() { + helper.generate(); + helper.compile(); + } +} diff --git a/test-plugins/org.yakindu.sct.generator.cpp.test/gtests/UnreachableStatesTest/UnreachableStates.sgen b/test-plugins/org.yakindu.sct.generator.cpp.test/gtests/UnreachableStatesTest/UnreachableStates.sgen new file mode 100644 index 0000000000..07d1043400 --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.cpp.test/gtests/UnreachableStatesTest/UnreachableStates.sgen @@ -0,0 +1,19 @@ +GeneratorModel for yakindu::cpp { + statechart UnreachableStates { + feature Outlet { + targetProject = "gtests" + targetFolder = "UnreachableStatesTest" + } + feature FunctionInlining { + inlineReactions = false + inlineEntryActions = false + inlineEnterSequences = false + inlineExitActions = false + inlineExitSequences = false + inlineChoices = false + inlineEntries = false + inlineEnterRegion = false + inlineExitRegion = false + } + } +} diff --git a/test-plugins/org.yakindu.sct.generator.cpp.test/gtests/UnreachableStatesTest/UnreachableStatesTest.cc b/test-plugins/org.yakindu.sct.generator.cpp.test/gtests/UnreachableStatesTest/UnreachableStatesTest.cc new file mode 100644 index 0000000000..71c2c319db --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.cpp.test/gtests/UnreachableStatesTest/UnreachableStatesTest.cc @@ -0,0 +1,53 @@ +/** Generated by YAKINDU Statechart Tools code generator. */ +#include +#include "gtest/gtest.h" +#include "UnreachableStates.h" +#include "sc_runner.h" +#include "sc_types.h" + +namespace { + +UnreachableStates* statechart; + + + +//! The timers are managed by a timer service. */ +static SctUnitRunner * runner; + +class UnreachableStatesTest : public ::testing::Test{ + protected: + virtual void SetUp() { + statechart = new UnreachableStates(); + statechart->init(); + runner = new SctUnitRunner( + statechart, + false, + 200 + ); + } + virtual void TearDown() { + delete statechart; + delete runner; + } +}; + + +TEST_F(UnreachableStatesTest, test) { + + statechart->enter(); + + runner->proceed_cycles(1); + + EXPECT_TRUE(statechart->isStateActive(UnreachableStates::main_region_A)); + + EXPECT_TRUE(!statechart->isStateActive(UnreachableStates::main_region_B)); + + EXPECT_TRUE(!statechart->isStateActive(UnreachableStates::main_region_C)); + + statechart->exit(); + + +} + +} + diff --git a/test-plugins/org.yakindu.sct.generator.cpp.test/model/test.sgen b/test-plugins/org.yakindu.sct.generator.cpp.test/model/test.sgen index c2367f51c1..f5062fc317 100644 --- a/test-plugins/org.yakindu.sct.generator.cpp.test/model/test.sgen +++ b/test-plugins/org.yakindu.sct.generator.cpp.test/model/test.sgen @@ -2091,4 +2091,33 @@ GeneratorModel for sctunit::cpp { GenerateSGen = true } } + + test UnreachableStates { + + feature Outlet{ + targetProject = targetProject + targetFolder = "gtests/UnreachableStatesTest" + 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 + } + } } \ No newline at end of file diff --git a/test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/AllTests.java b/test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/AllTests.java index 6d210a508b..4355d39d3f 100644 --- a/test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/AllTests.java +++ b/test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/AllTests.java @@ -91,7 +91,8 @@ ValuedEventsTest.class, TypeAliasTest.class, StatemachineKeywords.class, - TimedTransitionsTest.class + TimedTransitionsTest.class, + UnreachableStatesTest.class }) public class AllTests { } diff --git a/test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/UnreachableStatesTest.java b/test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/UnreachableStatesTest.java new file mode 100644 index 0000000000..6b20bec8cd --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.cpp.test/test-gen/org/yakindu/sct/generator/cpp/test/UnreachableStatesTest.java @@ -0,0 +1,35 @@ +/** Generated by YAKINDU Statechart Tools code generator. */ +package org.yakindu.sct.generator.cpp.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; +import org.yakindu.sct.generator.c.gtest.GTestHelper.Compiler; + +@GTest( + statechartBundle = "org.yakindu.sct.test.models", + sourceFile = "gtests/UnreachableStatesTest/UnreachableStatesTest.cc", + program = "gtests/UnreachableStatesTest/UnreachableStates", + model = "testmodels/SCTUnit/UnreachableStates.sct", + additionalFilesToCopy = { + "libraryTarget/sc_runner.h", + "libraryTarget/sc_runner.cpp" + }, + additionalFilesToCompile = { + "UnreachableStates.cpp", + "sc_runner.cpp" + } +) +@RunWith(GTestRunner.class) +public class UnreachableStatesTest { +protected final GTestHelper helper = new GTestHelper(this, Compiler.GPLUSPLUS); + + @Before + public void setUp() { + helper.generate(); + helper.compile(); + } + +} diff --git a/test-plugins/org.yakindu.sct.generator.java.test/model/model.sgen b/test-plugins/org.yakindu.sct.generator.java.test/model/model.sgen index 052b7af243..11ff3b718d 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/model/model.sgen +++ b/test-plugins/org.yakindu.sct.generator.java.test/model/model.sgen @@ -2035,5 +2035,29 @@ GeneratorModel for yakindu::java { inlineExitRegion = false inlineEntries = false } - } + } + + statechart UnreachableStates { + + feature Outlet { + targetProject = "org.yakindu.sct.generator.java.test" + targetFolder = "src-gen" + } + + feature Naming { + basePackage = "org.yakindu.scr" + } + + feature FunctionInlining { + inlineReactions = false + inlineEntryActions = false + inlineExitActions = false + inlineEnterSequences = false + inlineExitSequences = false + inlineChoices = false + inlineEnterRegion = false + inlineExitRegion = false + inlineEntries = false + } + } } \ No newline at end of file diff --git a/test-plugins/org.yakindu.sct.generator.java.test/model/test.sgen b/test-plugins/org.yakindu.sct.generator.java.test/model/test.sgen index 1c5cacd79b..078024e425 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/model/test.sgen +++ b/test-plugins/org.yakindu.sct.generator.java.test/model/test.sgen @@ -1130,4 +1130,20 @@ GeneratorModel for sctunit::java { libraryTargetFolder = "src-gen" } } + + test UnreachableStates { + feature Naming { + basePackage = "org.yakindu.sct.generator.java.test" + } + + feature Outlet { + targetProject = "org.yakindu.sct.generator.java.test" + targetFolder = "test-gen" + } + + feature StatechartNaming { + basePackage = "org.yakindu.scr" + libraryTargetFolder = "src-gen" + } + } } \ No newline at end of file diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstexecutionhierarchy/ChildFirstExecutionHierarchyStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstexecutionhierarchy/ChildFirstExecutionHierarchyStatemachine.java index 4295d2b5d1..3c6bcdfb51 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstexecutionhierarchy/ChildFirstExecutionHierarchyStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstexecutionhierarchy/ChildFirstExecutionHierarchyStatemachine.java @@ -416,17 +416,6 @@ private void exitSequence_ChildFirstExecutionHierarchy_r_A_r() { } } - /* Default exit sequence for region r */ - private void exitSequence_ChildFirstExecutionHierarchy_r_A_r_AA_r() { - switch (stateVector[0]) { - case childFirstExecutionHierarchy_r_A_r_AA_r_AAA: - exitSequence_ChildFirstExecutionHierarchy_r_A_r_AA_r_AAA(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_ChildFirstExecutionHierarchy_r__entry_Default() { enterSequence_ChildFirstExecutionHierarchy_r_A_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstorthogonalreactions/ChildFirstOrthogonalReactionsStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstorthogonalreactions/ChildFirstOrthogonalReactionsStatemachine.java index 38632c68be..53fd213994 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstorthogonalreactions/ChildFirstOrthogonalReactionsStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirstorthogonalreactions/ChildFirstOrthogonalReactionsStatemachine.java @@ -605,28 +605,6 @@ private void exitSequence_ChildFirstOrthogonalReactions_r_A_r() { } } - /* Default exit sequence for region r */ - private void exitSequence_ChildFirstOrthogonalReactions_r_A_r_AA_r() { - switch (stateVector[0]) { - case childFirstOrthogonalReactions_r_A_r_AA_r_AAA: - exitSequence_ChildFirstOrthogonalReactions_r_A_r_AA_r_AAA(); - break; - default: - break; - } - } - - /* Default exit sequence for region */ - private void exitSequence_ChildFirstOrthogonalReactions_r_A_r_AA__region1() { - switch (stateVector[1]) { - case childFirstOrthogonalReactions_r_A_r_AA__region1_AAC: - exitSequence_ChildFirstOrthogonalReactions_r_A_r_AA__region1_AAC(); - break; - default: - break; - } - } - /* Default exit sequence for region r2 */ private void exitSequence_ChildFirstOrthogonalReactions_r_A_r2() { switch (stateVector[2]) { diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirsttransitiontaking/ChildFirstTransitionTakingStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirsttransitiontaking/ChildFirstTransitionTakingStatemachine.java index b5827a8862..171ffa5d67 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirsttransitiontaking/ChildFirstTransitionTakingStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/childfirsttransitiontaking/ChildFirstTransitionTakingStatemachine.java @@ -603,42 +603,6 @@ private void exitSequence_ChildFirstTransitionTaking_r2() { } } - /* Default exit sequence for region r */ - private void exitSequence_ChildFirstTransitionTaking_r2_C_r() { - switch (stateVector[2]) { - case childFirstTransitionTaking_r2_C_r_CA_r_CAA_r1_CAAA: - exitSequence_ChildFirstTransitionTaking_r2_C_r_CA_r_CAA_r1_CAAA(); - break; - case childFirstTransitionTaking_r2_C_r_CA_r_CAB: - exitSequence_ChildFirstTransitionTaking_r2_C_r_CA_r_CAB(); - break; - case childFirstTransitionTaking_r2_C_r_CB_r1_CBA: - exitSequence_ChildFirstTransitionTaking_r2_C_r_CB_r1_CBA(); - break; - default: - break; - } - - switch (stateVector[3]) { - case childFirstTransitionTaking_r2_C_r_CA_r_CAA_r2_CAAB: - exitSequence_ChildFirstTransitionTaking_r2_C_r_CA_r_CAA_r2_CAAB(); - break; - case childFirstTransitionTaking_r2_C_r_CB_r2_CBB: - exitSequence_ChildFirstTransitionTaking_r2_C_r_CB_r2_CBB(); - break; - default: - break; - } - - switch (stateVector[4]) { - case childFirstTransitionTaking_r2_C_r_CB_r3_CBC: - exitSequence_ChildFirstTransitionTaking_r2_C_r_CB_r3_CBC(); - break; - default: - break; - } - } - /* Default exit sequence for region r */ private void exitSequence_ChildFirstTransitionTaking_r2_C_r_CA_r() { switch (stateVector[2]) { diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ckeywords/CKeywordsStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ckeywords/CKeywordsStatemachine.java index f238a2776f..3c64b74852 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ckeywords/CKeywordsStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ckeywords/CKeywordsStatemachine.java @@ -871,28 +871,6 @@ private void exitSequence_auto() { } } - /* Default exit sequence for region switch */ - private void exitSequence_auto_loop_switch() { - switch (stateVector[0]) { - case auto_loop_switch_case_enum_asm: - exitSequence_auto_loop_switch_case_enum_asm(); - break; - default: - break; - } - } - - /* Default exit sequence for region enum */ - private void exitSequence_auto_loop_switch_case_enum() { - switch (stateVector[0]) { - case auto_loop_switch_case_enum_asm: - exitSequence_auto_loop_switch_case_enum_asm(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_auto__entry_Default() { enterSequence_auto_char_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/deepentry/DeepEntryStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/deepentry/DeepEntryStatemachine.java index 041a1994d7..554449ae23 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/deepentry/DeepEntryStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/deepentry/DeepEntryStatemachine.java @@ -436,17 +436,6 @@ private void exitSequence_r() { } } - /* Default exit sequence for region r */ - private void exitSequence_r_A_r() { - switch (stateVector[0]) { - case r_A_r_B: - exitSequence_r_A_r_B(); - break; - default: - break; - } - } - /* Default exit sequence for region r2 */ private void exitSequence_r2() { switch (stateVector[1]) { @@ -500,28 +489,6 @@ private void exitSequence_r3() { } } - /* Default exit sequence for region r */ - private void exitSequence_r3_D_r() { - switch (stateVector[2]) { - case r3_D_r_DA_r_DAA: - exitSequence_r3_D_r_DA_r_DAA(); - break; - default: - break; - } - } - - /* Default exit sequence for region r */ - private void exitSequence_r3_D_r_DA_r() { - switch (stateVector[2]) { - case r3_D_r_DA_r_DAA: - exitSequence_r3_D_r_DA_r_DAA(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_r__entry_Default() { entryAction_r_A(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/emptytransition/EmptyTransitionStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/emptytransition/EmptyTransitionStatemachine.java index 11867a053f..2b6b3930f5 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/emptytransition/EmptyTransitionStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/emptytransition/EmptyTransitionStatemachine.java @@ -107,12 +107,6 @@ private void enterSequence_main_region_A_default() { stateVector[0] = State.main_region_A; } - /* 'default' enter sequence for state B */ - private void enterSequence_main_region_B_default() { - nextStateIndex = 0; - stateVector[0] = State.main_region_B; - } - /* 'default' enter sequence for region main region */ private void enterSequence_main_region_default() { react_main_region__entry_Default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/enterstate/EnterStateStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/enterstate/EnterStateStatemachine.java index 4d9c9338d4..4190f16ab1 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/enterstate/EnterStateStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/enterstate/EnterStateStatemachine.java @@ -245,20 +245,6 @@ private void exitSequence_r() { } } - /* Default exit sequence for region r */ - private void exitSequence_r_B_r() { - switch (stateVector[0]) { - case r_B_r_E: - exitSequence_r_B_r_E(); - break; - case r_B_r_F: - exitSequence_r_B_r_F(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_r__entry_Default() { enterSequence_r_A_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/exitsequence/ExitSequenceStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/exitsequence/ExitSequenceStatemachine.java index aff992d06b..21d615c98b 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/exitsequence/ExitSequenceStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/exitsequence/ExitSequenceStatemachine.java @@ -833,17 +833,6 @@ private void exitSequence_main_region_A_r_AC_r() { } } - /* Default exit sequence for region r */ - private void exitSequence_main_region_A_r_AC_r_ACA_r() { - switch (stateVector[0]) { - case main_region_A_r_AC_r_ACA_r_ACAA: - exitSequence_main_region_A_r_AC_r_ACA_r_exitSequence_main_region_A_r_AC_r_ACA_r_ACAA(); - break; - default: - break; - } - } - /* Default exit sequence for region r1 */ private void exitSequence_main_region_A_r_AD_r1() { switch (stateVector[0]) { diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ieq/localevents/LocalEventsStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ieq/localevents/LocalEventsStatemachine.java index 09267f9895..a92379e1a6 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ieq/localevents/LocalEventsStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/ieq/localevents/LocalEventsStatemachine.java @@ -463,23 +463,6 @@ private void exitSequence_localEvents_r1() { } } - /* Default exit sequence for region r */ - private void exitSequence_localEvents_r1_Comp1_r() { - switch (stateVector[0]) { - case localEvents_r1_Comp1_r_A1: - exitSequence_localEvents_r1_Comp1_r_A1(); - break; - case localEvents_r1_Comp1_r_C1: - exitSequence_localEvents_r1_Comp1_r_C1(); - break; - case localEvents_r1_Comp1_r_D1: - exitSequence_localEvents_r1_Comp1_r_D1(); - break; - default: - break; - } - } - /* Default exit sequence for region r2 */ private void exitSequence_localEvents_r2() { switch (stateVector[1]) { @@ -500,26 +483,6 @@ private void exitSequence_localEvents_r2() { } } - /* Default exit sequence for region r */ - private void exitSequence_localEvents_r2_Comp2_r() { - switch (stateVector[1]) { - case localEvents_r2_Comp2_r_A2: - exitSequence_localEvents_r2_Comp2_r_A2(); - break; - case localEvents_r2_Comp2_r_B2: - exitSequence_localEvents_r2_Comp2_r_B2(); - break; - case localEvents_r2_Comp2_r_C2: - exitSequence_localEvents_r2_Comp2_r_C2(); - break; - case localEvents_r2_Comp2_r_D2: - exitSequence_localEvents_r2_Comp2_r_D2(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_localEvents_r1__entry_Default() { enterSequence_localEvents_r1_Comp1_r_A1_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/javakeywords/JavaKeywordsStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/javakeywords/JavaKeywordsStatemachine.java index 953c3ebe48..d2268d93de 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/javakeywords/JavaKeywordsStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/javakeywords/JavaKeywordsStatemachine.java @@ -1369,31 +1369,6 @@ private void exitSequence_goto() { } } - /* Default exit sequence for region volatile */ - private void exitSequence_goto_void_volatile() { - switch (stateVector[0]) { - case goto_void_volatile_transient_throw_false: - exitSequence_goto_void_volatile_transient_throw_false(); - break; - case goto_void_volatile_state: - exitSequence_goto_void_volatile_state(); - break; - default: - break; - } - } - - /* Default exit sequence for region throw */ - private void exitSequence_goto_void_volatile_transient_throw() { - switch (stateVector[0]) { - case goto_void_volatile_transient_throw_false: - exitSequence_goto_void_volatile_transient_throw_false(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_goto__entry_Default() { enterSequence_goto_abstract_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/localevents/LocalEventsStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/localevents/LocalEventsStatemachine.java index 5d5bbd5b26..572c063601 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/localevents/LocalEventsStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/localevents/LocalEventsStatemachine.java @@ -444,23 +444,6 @@ private void exitSequence_localEvents_r1() { } } - /* Default exit sequence for region r */ - private void exitSequence_localEvents_r1_Comp1_r() { - switch (stateVector[0]) { - case localEvents_r1_Comp1_r_A1: - exitSequence_localEvents_r1_Comp1_r_A1(); - break; - case localEvents_r1_Comp1_r_C1: - exitSequence_localEvents_r1_Comp1_r_C1(); - break; - case localEvents_r1_Comp1_r_D1: - exitSequence_localEvents_r1_Comp1_r_D1(); - break; - default: - break; - } - } - /* Default exit sequence for region r2 */ private void exitSequence_localEvents_r2() { switch (stateVector[1]) { @@ -481,26 +464,6 @@ private void exitSequence_localEvents_r2() { } } - /* Default exit sequence for region r */ - private void exitSequence_localEvents_r2_Comp2_r() { - switch (stateVector[1]) { - case localEvents_r2_Comp2_r_A2: - exitSequence_localEvents_r2_Comp2_r_A2(); - break; - case localEvents_r2_Comp2_r_B2: - exitSequence_localEvents_r2_Comp2_r_B2(); - break; - case localEvents_r2_Comp2_r_C2: - exitSequence_localEvents_r2_Comp2_r_C2(); - break; - case localEvents_r2_Comp2_r_D2: - exitSequence_localEvents_r2_Comp2_r_D2(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_localEvents_r1__entry_Default() { enterSequence_localEvents_r1_Comp1_r_A1_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstexecutionhierarchy/ParentFirstExecutionHierarchyStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstexecutionhierarchy/ParentFirstExecutionHierarchyStatemachine.java index caaf1212b9..c9a49e1a62 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstexecutionhierarchy/ParentFirstExecutionHierarchyStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstexecutionhierarchy/ParentFirstExecutionHierarchyStatemachine.java @@ -416,17 +416,6 @@ private void exitSequence_ParentFirstExecutionHierarchy_r_A_r() { } } - /* Default exit sequence for region r */ - private void exitSequence_ParentFirstExecutionHierarchy_r_A_r_AA_r() { - switch (stateVector[0]) { - case parentFirstExecutionHierarchy_r_A_r_AA_r_AAA: - exitSequence_ParentFirstExecutionHierarchy_r_A_r_AA_r_AAA(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_ParentFirstExecutionHierarchy_r__entry_Default() { enterSequence_ParentFirstExecutionHierarchy_r_A_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstorthogonalreactions/ParentFirstOrthogonalReactionsStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstorthogonalreactions/ParentFirstOrthogonalReactionsStatemachine.java index 5aa0fb1953..ab8d1d2470 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstorthogonalreactions/ParentFirstOrthogonalReactionsStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/parentfirstorthogonalreactions/ParentFirstOrthogonalReactionsStatemachine.java @@ -605,28 +605,6 @@ private void exitSequence_ParentFirstOrthogonalReactions_r_A_r() { } } - /* Default exit sequence for region r */ - private void exitSequence_ParentFirstOrthogonalReactions_r_A_r_AA_r() { - switch (stateVector[0]) { - case parentFirstOrthogonalReactions_r_A_r_AA_r_AAA: - exitSequence_ParentFirstOrthogonalReactions_r_A_r_AA_r_AAA(); - break; - default: - break; - } - } - - /* Default exit sequence for region */ - private void exitSequence_ParentFirstOrthogonalReactions_r_A_r_AA__region1() { - switch (stateVector[1]) { - case parentFirstOrthogonalReactions_r_A_r_AA__region1_AAC: - exitSequence_ParentFirstOrthogonalReactions_r_A_r_AA__region1_AAC(); - break; - default: - break; - } - } - /* Default exit sequence for region r2 */ private void exitSequence_ParentFirstOrthogonalReactions_r_A_r2() { switch (stateVector[2]) { diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/runnabletestrunnable/RunnableTestStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/runnabletestrunnable/RunnableTestStatemachine.java index b544588d1a..abb3d2c2e7 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/runnabletestrunnable/RunnableTestStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/runnabletestrunnable/RunnableTestStatemachine.java @@ -44,22 +44,28 @@ public synchronized void setSCInterfaceOperationCallback( private long ev_outValue; - public synchronized boolean isRaisedEv_out() { - return ev_out; + public boolean isRaisedEv_out() { + synchronized(RunnableTestStatemachine.this) { + return ev_out; + } } - protected synchronized void raiseEv_out(long value) { - ev_outValue = value; - ev_out = true; - for (SCInterfaceListener listener : listeners) { - listener.onEv_outRaised(value); + protected void raiseEv_out(long value) { + synchronized(RunnableTestStatemachine.this) { + ev_outValue = value; + ev_out = true; + for (SCInterfaceListener listener : listeners) { + listener.onEv_outRaised(value); + } } } - public synchronized long getEv_outValue() { - if (! ev_out ) - throw new IllegalStateException("Illegal event value access. Event Ev_out is not raised!"); - return ev_outValue; + public long getEv_outValue() { + synchronized(RunnableTestStatemachine.this) { + if (! ev_out ) + throw new IllegalStateException("Illegal event value access. Event Ev_out is not raised!"); + return ev_outValue; + } } private boolean ev_in; @@ -67,62 +73,82 @@ public synchronized long getEv_outValue() { private long ev_inValue; - public synchronized void raiseEv_in(final long value) { - inEventQueue.add( - new Runnable() { - @Override - public void run() { - ev_inValue = value; - ev_in = true; - runCycle(); + public void raiseEv_in(final long value) { + synchronized(RunnableTestStatemachine.this) { + inEventQueue.add( + new Runnable() { + @Override + public void run() { + ev_inValue = value; + ev_in = true; + runCycle(); + } } - } - ); + ); + } } - protected synchronized long getEv_inValue() { - if (! ev_in ) - throw new IllegalStateException("Illegal event value access. Event Ev_in is not raised!"); - return ev_inValue; + protected long getEv_inValue() { + synchronized(RunnableTestStatemachine.this) { + if (! ev_in ) + throw new IllegalStateException("Illegal event value access. Event Ev_in is not raised!"); + return ev_inValue; + } } private long myVar; public synchronized long getMyVar() { - return myVar; + synchronized(RunnableTestStatemachine.this) { + return myVar; + } } - public synchronized void setMyVar(long value) { - this.myVar = value; + public void setMyVar(long value) { + synchronized(RunnableTestStatemachine.this) { + this.myVar = value; + } } private long afterCalls; public synchronized long getAfterCalls() { - return afterCalls; + synchronized(RunnableTestStatemachine.this) { + return afterCalls; + } } - public synchronized void setAfterCalls(long value) { - this.afterCalls = value; + public void setAfterCalls(long value) { + synchronized(RunnableTestStatemachine.this) { + this.afterCalls = value; + } } private long cycles; public synchronized long getCycles() { - return cycles; + synchronized(RunnableTestStatemachine.this) { + return cycles; + } } - public synchronized void setCycles(long value) { - this.cycles = value; + public void setCycles(long value) { + synchronized(RunnableTestStatemachine.this) { + this.cycles = value; + } } private long s2_entered; public synchronized long getS2_entered() { - return s2_entered; + synchronized(RunnableTestStatemachine.this) { + return s2_entered; + } } - public synchronized void setS2_entered(long value) { - this.s2_entered = value; + public void setS2_entered(long value) { + synchronized(RunnableTestStatemachine.this) { + this.s2_entered = value; + } } protected void clearEvents() { diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/samenamedifferentregion/SameNameDifferentRegionStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/samenamedifferentregion/SameNameDifferentRegionStatemachine.java index e1b41d37ad..11b2bd8268 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/samenamedifferentregion/SameNameDifferentRegionStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/samenamedifferentregion/SameNameDifferentRegionStatemachine.java @@ -206,20 +206,6 @@ private void exitSequence_main_region() { } } - /* Default exit sequence for region r1 */ - private void exitSequence_main_region_StateB_r1() { - switch (stateVector[0]) { - case main_region_StateB_r1_StateA: - exitSequence_main_region_StateB_r1_StateA(); - break; - case main_region_StateB_r1_StateB: - exitSequence_main_region_StateB_r1_StateB(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_main_region__entry_Default() { enterSequence_main_region_StateA_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/simplehierachy/SimpleHierachyStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/simplehierachy/SimpleHierachyStatemachine.java index b3fea97806..27b33fd222 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/simplehierachy/SimpleHierachyStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/simplehierachy/SimpleHierachyStatemachine.java @@ -185,17 +185,6 @@ private void exitSequence_main_region() { } } - /* Default exit sequence for region subregion1 */ - private void exitSequence_main_region_B_subregion1() { - switch (stateVector[0]) { - case main_region_B_subregion1_B1: - exitSequence_main_region_B_subregion1_B1(); - break; - default: - break; - } - } - /* Default react sequence for initial entry */ private void react_main_region__entry_Default() { enterSequence_main_region_A_default(); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/unreachablestates/IUnreachableStatesStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/unreachablestates/IUnreachableStatesStatemachine.java new file mode 100644 index 0000000000..d99a94550e --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/unreachablestates/IUnreachableStatesStatemachine.java @@ -0,0 +1,7 @@ +/** Generated by YAKINDU Statechart Tools code generator. */ +package org.yakindu.scr.unreachablestates; + +import org.yakindu.scr.IStatemachine; + +public interface IUnreachableStatesStatemachine extends IStatemachine { +} diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/unreachablestates/UnreachableStatesStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/unreachablestates/UnreachableStatesStatemachine.java new file mode 100644 index 0000000000..2c3b2a732a --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/unreachablestates/UnreachableStatesStatemachine.java @@ -0,0 +1,198 @@ +/** Generated by YAKINDU Statechart Tools code generator. */ +package org.yakindu.scr.unreachablestates; + + +public class UnreachableStatesStatemachine implements IUnreachableStatesStatemachine { + private boolean initialized = false; + + public enum State { + main_region_B, + main_region_A, + main_region_C, + $NullState$ + }; + + private final State[] stateVector = new State[1]; + + private int nextStateIndex; + + public UnreachableStatesStatemachine() { + } + + public void init() { + this.initialized = true; + for (int i = 0; i < 1; i++) { + stateVector[i] = State.$NullState$; + } + clearEvents(); + clearOutEvents(); + } + + public void enter() { + if (!initialized) { + throw new IllegalStateException( + "The state machine needs to be initialized first by calling the init() function." + ); + } + enterSequence_main_region_default(); + } + + public void runCycle() { + if (!initialized) + throw new IllegalStateException( + "The state machine needs to be initialized first by calling the init() function."); + clearOutEvents(); + for (nextStateIndex = 0; nextStateIndex < stateVector.length; nextStateIndex++) { + switch (stateVector[nextStateIndex]) { + case main_region_B: + main_region_B_react(true); + break; + case main_region_A: + main_region_A_react(true); + break; + case main_region_C: + main_region_C_react(true); + break; + default: + // $NullState$ + } + } + clearEvents(); + } + public void exit() { + exitSequence_main_region(); + } + + /** + * @see IStatemachine#isActive() + */ + public boolean isActive() { + return stateVector[0] != State.$NullState$; + } + + /** + * Always returns 'false' since this state machine can never become final. + * + * @see IStatemachine#isFinal() + */ + public boolean isFinal() { + return false; + } + /** + * This method resets the incoming events (time events included). + */ + protected void clearEvents() { + } + + /** + * This method resets the outgoing events. + */ + protected void clearOutEvents() { + } + + /** + * Returns true if the given state is currently active otherwise false. + */ + public boolean isStateActive(State state) { + + switch (state) { + case main_region_B: + return stateVector[0] == State.main_region_B; + case main_region_A: + return stateVector[0] == State.main_region_A; + case main_region_C: + return stateVector[0] == State.main_region_C; + default: + return false; + } + } + + /* 'default' enter sequence for state A */ + private void enterSequence_main_region_A_default() { + nextStateIndex = 0; + stateVector[0] = State.main_region_A; + } + + /* 'default' enter sequence for region main region */ + private void enterSequence_main_region_default() { + react_main_region__entry_Default(); + } + + /* Default exit sequence for state B */ + private void exitSequence_main_region_B() { + nextStateIndex = 0; + stateVector[0] = State.$NullState$; + } + + /* Default exit sequence for state A */ + private void exitSequence_main_region_A() { + nextStateIndex = 0; + stateVector[0] = State.$NullState$; + } + + /* Default exit sequence for state C */ + private void exitSequence_main_region_C() { + nextStateIndex = 0; + stateVector[0] = State.$NullState$; + } + + /* Default exit sequence for region main region */ + private void exitSequence_main_region() { + switch (stateVector[0]) { + case main_region_B: + exitSequence_main_region_B(); + break; + case main_region_A: + exitSequence_main_region_A(); + break; + case main_region_C: + exitSequence_main_region_C(); + break; + default: + break; + } + } + + /* Default react sequence for initial entry */ + private void react_main_region__entry_Default() { + enterSequence_main_region_A_default(); + } + + private boolean react() { + return false; + } + + private boolean main_region_B_react(boolean try_transition) { + boolean did_transition = try_transition; + + if (try_transition) { + if (react()==false) { + did_transition = false; + } + } + return did_transition; + } + + private boolean main_region_A_react(boolean try_transition) { + boolean did_transition = try_transition; + + if (try_transition) { + if (react()==false) { + did_transition = false; + } + } + return did_transition; + } + + private boolean main_region_C_react(boolean try_transition) { + boolean did_transition = try_transition; + + if (try_transition) { + if (react()==false) { + did_transition = false; + } + } + return did_transition; + } + +} diff --git a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/wrappertestsync/WrapperTestStatemachine.java b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/wrappertestsync/WrapperTestStatemachine.java index d71ce1c0b1..5a7b92e94c 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/wrappertestsync/WrapperTestStatemachine.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/src-gen/org/yakindu/scr/wrappertestsync/WrapperTestStatemachine.java @@ -22,14 +22,18 @@ public synchronized void setSCInterfaceOperationCallback( private boolean ev_out; - public synchronized boolean isRaisedEv_out() { - return ev_out; + public boolean isRaisedEv_out() { + synchronized(WrapperTestStatemachine.this) { + return ev_out; + } } protected void raiseEv_out() { - ev_out = true; - for (SCInterfaceListener listener : listeners) { - listener.onEv_outRaised(); + synchronized(WrapperTestStatemachine.this) { + ev_out = true; + for (SCInterfaceListener listener : listeners) { + listener.onEv_outRaised(); + } } } @@ -37,37 +41,51 @@ protected void raiseEv_out() { public void raiseEv_in() { - ev_in = true; + synchronized(WrapperTestStatemachine.this) { + ev_in = true; + } } private long afterCalls; public synchronized long getAfterCalls() { - return afterCalls; + synchronized(WrapperTestStatemachine.this) { + return afterCalls; + } } - public synchronized void setAfterCalls(long value) { - this.afterCalls = value; + public void setAfterCalls(long value) { + synchronized(WrapperTestStatemachine.this) { + this.afterCalls = value; + } } private long cycles; public synchronized long getCycles() { - return cycles; + synchronized(WrapperTestStatemachine.this) { + return cycles; + } } - public synchronized void setCycles(long value) { - this.cycles = value; + public void setCycles(long value) { + synchronized(WrapperTestStatemachine.this) { + this.cycles = value; + } } private long s2_entered; public synchronized long getS2_entered() { - return s2_entered; + synchronized(WrapperTestStatemachine.this) { + return s2_entered; + } } - public synchronized void setS2_entered(long value) { - this.s2_entered = value; + public void setS2_entered(long value) { + synchronized(WrapperTestStatemachine.this) { + this.s2_entered = value; + } } protected void clearEvents() { diff --git a/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTests.java b/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTests.java index b479a68259..4a8bec8d12 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTests.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/AllTests.java @@ -92,7 +92,8 @@ ValuedEvents.class, TypeAlias.class, StatemachineKeywords.class, - TimedTransitions.class + TimedTransitions.class, + UnreachableStates.class }) public class AllTests { } diff --git a/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/ChildFirstLocalReactions.java b/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/ChildFirstLocalReactions.java index 333b72adb0..6ea85d2e47 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/ChildFirstLocalReactions.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/ChildFirstLocalReactions.java @@ -66,9 +66,9 @@ public void expectParentLocalReactionOnChildLocalTransition() { public void expectParentLocalReactionOnChildSelfTransition() { statemachine.enter(); assertTrue(statemachine.isStateActive(State.childFirstLocalReactions_r_A_r_AA_r_AAA)); - statemachine.raiseDoSelfTransition(); - statemachine.setDisable_a(true); - statemachine.setDisable_aa(true); + statemachine.getSCInterface().raiseDoSelfTransition(); + statemachine.getSCInterface().setDisable_a(true); + statemachine.getSCInterface().setDisable_aa(true); timer.cycleLeap(1l); assertTrue(statemachine.isStateActive(State.childFirstLocalReactions_r_A_r_AA_r_AAA)); assertTrue(statemachine.getAaa_local() == 0l); @@ -110,9 +110,9 @@ public void expectNoLocalReactionOnGrandparentTransition() { public void expectNoLocalReactionOnGrandparentSelfTransition() { statemachine.enter(); assertTrue(statemachine.isStateActive(State.childFirstLocalReactions_r_A_r_AA_r_AAA)); - statemachine.setDisable_aaa(true); - statemachine.setDisable_aa(true); - statemachine.raiseDoSelfTransition(); + statemachine.getSCInterface().setDisable_aaa(true); + statemachine.getSCInterface().setDisable_aa(true); + statemachine.getSCInterface().raiseDoSelfTransition(); timer.cycleLeap(1l); assertTrue(statemachine.isStateActive(State.childFirstLocalReactions_r_A)); assertTrue(statemachine.getAaa_local() == 1l); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/ParentFirstLocalReactions.java b/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/ParentFirstLocalReactions.java index 1ef15545ab..31c7626258 100644 --- a/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/ParentFirstLocalReactions.java +++ b/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/ParentFirstLocalReactions.java @@ -68,9 +68,9 @@ public void expectParentLocalReactionOnChildLocalTransition() { public void expectParentLocalReactionOnChildSelfTransition() { statemachine.enter(); assertTrue(statemachine.isStateActive(State.parentFirstLocalReactions_r_A_r_AA_r_AAA)); - statemachine.raiseDoSelfTransition(); - statemachine.setDisable_a(true); - statemachine.setDisable_aa(true); + statemachine.getSCInterface().raiseDoSelfTransition(); + statemachine.getSCInterface().setDisable_a(true); + statemachine.getSCInterface().setDisable_aa(true); timer.cycleLeap(1l); assertTrue(statemachine.isStateActive(State.parentFirstLocalReactions_r_A_r_AA_r_AAA)); assertTrue(statemachine.getSm_local() == 1l); @@ -112,9 +112,9 @@ public void expectNoLocalReactionOnGrandparentTransition() { public void expectNoLocalReactionOnGrandparentSelfTransition() { statemachine.enter(); assertTrue(statemachine.isStateActive(State.parentFirstLocalReactions_r_A_r_AA_r_AAA)); - statemachine.setDisable_aaa(true); - statemachine.setDisable_aa(true); - statemachine.raiseDoSelfTransition(); + statemachine.getSCInterface().setDisable_aaa(true); + statemachine.getSCInterface().setDisable_aa(true); + statemachine.getSCInterface().raiseDoSelfTransition(); timer.cycleLeap(1l); assertTrue(statemachine.isStateActive(State.parentFirstLocalReactions_r_A)); assertTrue(statemachine.getSm_local() == 1l); diff --git a/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/UnreachableStates.java b/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/UnreachableStates.java new file mode 100644 index 0000000000..1ec73b1acc --- /dev/null +++ b/test-plugins/org.yakindu.sct.generator.java.test/test-gen/org/yakindu/sct/generator/java/test/UnreachableStates.java @@ -0,0 +1,49 @@ +/** Generated by YAKINDU Statechart Tools code generator. */ + +package org.yakindu.sct.generator.java.test; + +import org.junit.*; +import static org.junit.Assert.*; +import org.yakindu.scr.unreachablestates.UnreachableStatesStatemachine; +import org.yakindu.scr.unreachablestates.UnreachableStatesStatemachine.State; +import org.yakindu.scr.VirtualTimer; +import org.yakindu.scr.VirtualTimer.VirtualTimeTask; +import org.yakindu.scr.VirtualTimer.CycleTimeEventTask; + +/** + * Unit TestCase for UnreachableStates + */ +@SuppressWarnings("all") +public class UnreachableStates { + + private UnreachableStatesStatemachine statemachine; + private VirtualTimer timer; + + + @Before + public void unreachableStates_setUp() { + statemachine = new UnreachableStatesStatemachine(); + timer = new VirtualTimer(200); + timer.schedulePeriodicalTask(new CycleTimeEventTask(statemachine), 200, 200); + + statemachine.init(); + + } + + @After + public void unreachableStates_tearDown() { + statemachine = null; + + timer = null; + } + + @Test + public void test() { + statemachine.enter(); + timer.cycleLeap(1l); + assertTrue(statemachine.isStateActive(State.main_region_A)); + assertTrue(!statemachine.isStateActive(State.main_region_B)); + assertTrue(!statemachine.isStateActive(State.main_region_C)); + statemachine.exit(); + } +} diff --git a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/model/test.sgen b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/model/test.sgen index f8791e059e..aabf6f8270 100644 --- a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/model/test.sgen +++ b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/model/test.sgen @@ -512,6 +512,14 @@ GeneratorModel for sctunit::interpreter { targetFolder = "test-gen/org/yakindu/sct/simulation/core/sexec/test" } } + + test UnreachableStates { + + feature Outlet { + targetProject = "org.yakindu.sct.simulation.core.sexec.test" + targetFolder = "test-gen/org/yakindu/sct/simulation/core/sexec/test" + } + } test ValuedEvents { diff --git a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/AllTests.java b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/AllTests.java index f8f064714f..7200f75935 100644 --- a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/AllTests.java +++ b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/AllTests.java @@ -91,7 +91,8 @@ ValuedEvents.class, TypeAlias.class, StatemachineKeywords.class, - TimedTransitions.class + TimedTransitions.class, + UnreachableStates.class }) public class AllTests { } diff --git a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/ChildFirstLocalReactions.java b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/ChildFirstLocalReactions.java index e3d470a195..bf91f0b097 100644 --- a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/ChildFirstLocalReactions.java +++ b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/ChildFirstLocalReactions.java @@ -49,6 +49,20 @@ public void expectParentLocalReactionOnChildLocalTransition() throws Exception { assertTrue(getInteger("sm_local") == 3l); } @Test + public void expectParentLocalReactionOnChildSelfTransition() throws Exception { + interpreter.enter(); + assertTrue(isStateActive("AAA")); + raiseEvent("doSelfTransition"); + setBoolean("disable_a", true); + setBoolean("disable_aa", true); + timer.timeLeap(getCyclePeriod()); + assertTrue(isStateActive("AAA")); + assertTrue(getInteger("aaa_local") == 0l); + assertTrue(getInteger("aa_local") == 1l); + assertTrue(getInteger("a_local") == 2l); + assertTrue(getInteger("sm_local") == 3l); + } + @Test public void expectGrandparentLocalReactionOnParentLocalTransition() throws Exception { interpreter.enter(); assertTrue(isStateActive("AAA")); @@ -75,4 +89,18 @@ public void expectNoLocalReactionOnGrandparentTransition() throws Exception { assertTrue(getInteger("a_local") == 0l); assertTrue(getInteger("sm_local") == 3l); } + @Test + public void expectNoLocalReactionOnGrandparentSelfTransition() throws Exception { + interpreter.enter(); + assertTrue(isStateActive("AAA")); + setBoolean("disable_aaa", true); + setBoolean("disable_aa", true); + raiseEvent("doSelfTransition"); + timer.timeLeap(getCyclePeriod()); + assertTrue(isStateActive("A")); + assertTrue(getInteger("aaa_local") == 1l); + assertTrue(getInteger("aa_local") == 2l); + assertTrue(getInteger("a_local") == 0l); + assertTrue(getInteger("sm_local") == 3l); + } } diff --git a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/EventDrivenTriggeredByEvent.java b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/EventDrivenTriggeredByEvent.java index 42a075d1e3..1e507ab42b 100644 --- a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/EventDrivenTriggeredByEvent.java +++ b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/EventDrivenTriggeredByEvent.java @@ -41,7 +41,7 @@ public void internalEventTriggersRunCycle() throws Exception { public void proceedTimeDoesNotTriggerRunCycle() throws Exception { interpreter.enter(); assertTrue(isStateActive("A")); - timer.timeLeap(120000); + timer.timeLeap(120l*1000l); assertTrue(getInteger("x") == 0l); interpreter.exit(); } diff --git a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/EventDrivenTriggeredByTimeEvent.java b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/EventDrivenTriggeredByTimeEvent.java index dac25a6a9e..c7a5201d97 100644 --- a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/EventDrivenTriggeredByTimeEvent.java +++ b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/EventDrivenTriggeredByTimeEvent.java @@ -30,22 +30,22 @@ public void timeEventTriggersRunCycle() throws Exception { interpreter.enter(); assertTrue(isStateActive("A")); assertTrue(getInteger("x") == 0l); - timer.timeLeap(999); + timer.timeLeap(999l); assertTrue(isStateActive("A")); assertTrue(getInteger("x") == 0l); - timer.timeLeap(1); + timer.timeLeap(1l); assertTrue(isStateActive("B")); assertTrue(getInteger("x") == 0l); assertTrue(getInteger("transition_count") == 1l); - timer.timeLeap(1000); + timer.timeLeap(1l*1000l); assertTrue(isStateActive("A")); assertTrue(getInteger("x") == 0l); assertTrue(getInteger("transition_count") == 2l); - timer.timeLeap(999000); + timer.timeLeap(999l*1000l); assertTrue(isStateActive("B")); assertTrue(getInteger("x") == 0l); assertTrue(getInteger("transition_count") == 1001l); - timer.timeLeap(999000); + timer.timeLeap(999l*1000l); assertTrue(isStateActive("A")); assertTrue(getInteger("x") == 0l); assertTrue(getInteger("transition_count") == 2000l); diff --git a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/ParentFirstLocalReactions.java b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/ParentFirstLocalReactions.java index d7fd3b2285..074d238775 100644 --- a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/ParentFirstLocalReactions.java +++ b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/ParentFirstLocalReactions.java @@ -51,6 +51,20 @@ public void expectParentLocalReactionOnChildLocalTransition() throws Exception { assertTrue(getInteger("aaa_local") == 0l); } @Test + public void expectParentLocalReactionOnChildSelfTransition() throws Exception { + interpreter.enter(); + assertTrue(isStateActive("AAA")); + raiseEvent("doSelfTransition"); + setBoolean("disable_a", true); + setBoolean("disable_aa", true); + timer.timeLeap(getCyclePeriod()); + assertTrue(isStateActive("AAA")); + assertTrue(getInteger("sm_local") == 1l); + assertTrue(getInteger("a_local") == 2l); + assertTrue(getInteger("aa_local") == 3l); + assertTrue(getInteger("aaa_local") == 0l); + } + @Test public void expectGrandparentLocalReactionOnParentLocalTransition() throws Exception { interpreter.enter(); assertTrue(isStateActive("AAA")); @@ -77,4 +91,18 @@ public void expectNoLocalReactionOnGrandparentTransition() throws Exception { assertTrue(getInteger("aa_local") == 0l); assertTrue(getInteger("aaa_local") == 0l); } + @Test + public void expectNoLocalReactionOnGrandparentSelfTransition() throws Exception { + interpreter.enter(); + assertTrue(isStateActive("AAA")); + setBoolean("disable_aaa", true); + setBoolean("disable_aa", true); + raiseEvent("doSelfTransition"); + timer.timeLeap(getCyclePeriod()); + assertTrue(isStateActive("A")); + assertTrue(getInteger("sm_local") == 1l); + assertTrue(getInteger("a_local") == 0l); + assertTrue(getInteger("aa_local") == 0l); + assertTrue(getInteger("aaa_local") == 0l); + } } diff --git a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/TimedTransitions.java b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/TimedTransitions.java index 029a0d70ef..867658fa05 100644 --- a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/TimedTransitions.java +++ b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/TimedTransitions.java @@ -29,7 +29,7 @@ public void setup() throws Exception{ public void timer01() throws Exception { interpreter.enter(); assertTrue(isStateActive("Start")); - timer.timeLeap(2030); + timer.timeLeap(2030l); timer.timeLeap(getCyclePeriod()); assertTrue(isStateActive("End")); } @@ -37,16 +37,16 @@ public void timer01() throws Exception { public void timer02() throws Exception { interpreter.enter(); assertTrue(isStateActive("Start")); - timer.timeLeap(2000); + timer.timeLeap(2l*1000l); assertTrue(isStateActive("End")); } @Test public void noAdditionalCycle() throws Exception { interpreter.enter(); assertTrue(isStateActive("Start")); - timer.timeLeap(1950); + timer.timeLeap(1950l); assertTrue(isStateActive("Start")); - timer.timeLeap(100); + timer.timeLeap(100l); assertTrue(isStateActive("End")); } @Test @@ -55,13 +55,13 @@ public void countCycles() throws Exception { assertTrue(isStateActive("Start")); assertTrue((getInteger("cycles") == 0l)); assertTrue((getInteger("seconds") == 0l)); - timer.timeLeap(100); + timer.timeLeap(100l); assertTrue((getInteger("cycles") == 0l)); assertTrue((getInteger("seconds") == 0l)); - timer.timeLeap(100); + timer.timeLeap(100l); assertTrue((getInteger("cycles") == 1l)); assertTrue((getInteger("seconds") == 0l)); - timer.timeLeap(800); + timer.timeLeap(800l); assertTrue((getInteger("cycles") == 5l)); assertTrue((getInteger("seconds") == 1l)); } diff --git a/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/UnreachableStates.java b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/UnreachableStates.java new file mode 100644 index 0000000000..3ead1078f9 --- /dev/null +++ b/test-plugins/org.yakindu.sct.simulation.core.sexec.test/test-gen/org/yakindu/sct/simulation/core/sexec/test/UnreachableStates.java @@ -0,0 +1,37 @@ +/** Generated by YAKINDU Statechart Tools code generator. */ +package org.yakindu.sct.simulation.core.sexec.test; +import org.eclipse.xtext.junit4.InjectWith; +import org.eclipse.xtext.junit4.XtextRunner; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.yakindu.sct.model.sexec.ExecutionFlow; +import org.yakindu.sct.model.sexec.interpreter.test.util.AbstractExecutionFlowTest; +import org.yakindu.sct.model.sexec.interpreter.test.util.SExecInjectionProvider; +import org.yakindu.sct.test.models.SCTUnitTestModels; +import com.google.inject.Inject; +import static org.junit.Assert.*; + +/** + * Unit TestCase for UnreachableStates + */ +@SuppressWarnings("all") +@RunWith(XtextRunner.class) +@InjectWith(SExecInjectionProvider.class) +public class UnreachableStates extends AbstractExecutionFlowTest { + + @Before + public void setup() throws Exception{ + ExecutionFlow flow = models.loadExecutionFlowFromResource("UnreachableStates.sct"); + initInterpreter(flow); + } + @Test + public void test() throws Exception { + interpreter.enter(); + timer.timeLeap(getCyclePeriod()); + assertTrue(isStateActive("A")); + assertTrue(!isStateActive("B")); + assertTrue(!isStateActive("C")); + interpreter.exit(); + } +} diff --git a/test-plugins/org.yakindu.sct.test.models/testmodels/SCTUnit/UnreachableStates.sct b/test-plugins/org.yakindu.sct.test.models/testmodels/SCTUnit/UnreachableStates.sct new file mode 100644 index 0000000000..55157797ae --- /dev/null +++ b/test-plugins/org.yakindu.sct.test.models/testmodels/SCTUnit/UnreachableStates.sct @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test-plugins/org.yakindu.sct.test.models/tests/AllTests.sctunit b/test-plugins/org.yakindu.sct.test.models/tests/AllTests.sctunit index e0d22ba9b8..b195a07824 100644 --- a/test-plugins/org.yakindu.sct.test.models/tests/AllTests.sctunit +++ b/test-plugins/org.yakindu.sct.test.models/tests/AllTests.sctunit @@ -103,5 +103,6 @@ testsuite AllTests { ValuedEvents, TypeAlias, StatemachineKeywords, - TimedTransitions + TimedTransitions, + UnreachableStates } \ No newline at end of file diff --git a/test-plugins/org.yakindu.sct.test.models/tests/UnreachableStates.sctunit b/test-plugins/org.yakindu.sct.test.models/tests/UnreachableStates.sctunit new file mode 100644 index 0000000000..2637597066 --- /dev/null +++ b/test-plugins/org.yakindu.sct.test.models/tests/UnreachableStates.sctunit @@ -0,0 +1,12 @@ +testclass UnreachableStates for statechart UnreachableStates { + + @Test + operation test() { + enter + proceed 1 cycle + assert active (main_region.A) + assert !active (main_region.B) + assert !active (main_region.C) + exit + } +}