summaryrefslogtreecommitdiff
path: root/cesar/cp2/fsm/test
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/cp2/fsm/test')
-rw-r--r--cesar/cp2/fsm/test/utest/inc/scenario_defs.h8
-rw-r--r--cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm11
-rw-r--r--cesar/cp2/fsm/test/utest/src/fsm_stub.c36
-rw-r--r--cesar/cp2/fsm/test/utest/src/test_fsm.c27
4 files changed, 82 insertions, 0 deletions
diff --git a/cesar/cp2/fsm/test/utest/inc/scenario_defs.h b/cesar/cp2/fsm/test/utest/inc/scenario_defs.h
index 945924c4b9..65f98da665 100644
--- a/cesar/cp2/fsm/test/utest/inc/scenario_defs.h
+++ b/cesar/cp2/fsm/test/utest/inc/scenario_defs.h
@@ -49,6 +49,10 @@ scenario_action_post_and_process_cb (scenario_globals_t *globals,
cp_fsm__STATE3__event1, \
cp_fsm__STATE3__event2, \
cp_fsm__STATE4__event1, \
+ cp_fsm__STATE5__enter, \
+ cp_fsm__STATE5__leave, \
+ cp_fsm__STATE6__enter, \
+ cp_fsm__STATE6__leave, \
cp_fsm__STATEA__eventb, \
cp_fsm__STATEB__eventa
@@ -77,6 +81,10 @@ scenario_event_cp_fsm__STATE3__event1_t;
typedef scenario_empty_t scenario_event_cp_fsm__STATE3__event2_t;
typedef scenario_event_transition_with_branch_t
scenario_event_cp_fsm__STATE4__event1_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE5__enter_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE5__leave_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE6__enter_t;
+typedef scenario_empty_t scenario_event_cp_fsm__STATE6__leave_t;
typedef scenario_empty_t scenario_event_cp_fsm__STATEA__eventb_t;
typedef scenario_empty_t scenario_event_cp_fsm__STATEB__eventa_t;
diff --git a/cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm b/cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm
index f3a2fe523b..76ad45a617 100644
--- a/cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm
+++ b/cesar/cp2/fsm/test/utest/override/cp2/fsm/src/fsm/cp.fsm
@@ -6,6 +6,8 @@ States:
STATE2
STATE3
STATE4
+ STATE5 [enter=cp_fsm__STATE5__enter leave=cp_fsm__STATE5__leave]
+ STATE6 [enter=cp_fsm__STATE6__enter leave=cp_fsm__STATE6__leave]
*STATEA
STATEB
@@ -14,6 +16,8 @@ Events:
event2
event3
event4
+ event5
+ event6
error_event_no_branch
test error conditions: no branch selected
error_event_bad_branch
@@ -29,6 +33,7 @@ Events:
STATE1:
event1 -> .
event2 -> STATE2
+ event5 -> STATE5 [NULL]
error_event_no_branch: branch1 -> .
error_event_no_branch: branch2 -> .
error_event_bad_branch: branch1 -> .
@@ -51,6 +56,12 @@ STATE3, STATE4:
event1: branch1 -> STATE1
event1: branch2 -> .
+STATE5:
+ event6 -> STATE6 [NULL]
+
+STATE6:
+ event1 -> STATE1 [NULL]
+
STATEA:
eventb -> STATEB
diff --git a/cesar/cp2/fsm/test/utest/src/fsm_stub.c b/cesar/cp2/fsm/test/utest/src/fsm_stub.c
index 86e595c5a7..3ddd0f60c6 100644
--- a/cesar/cp2/fsm/test/utest/src/fsm_stub.c
+++ b/cesar/cp2/fsm/test/utest/src/fsm_stub.c
@@ -55,6 +55,18 @@ void
cp_fsm__STATE4__event1 (cp_t *ctx);
void
+cp_fsm__STATE5__enter (cp_t *ctx);
+
+void
+cp_fsm__STATE5__leave (cp_t *ctx);
+
+void
+cp_fsm__STATE6__enter (cp_t *ctx);
+
+void
+cp_fsm__STATE6__leave (cp_t *ctx);
+
+void
cp_fsm__STATEA__eventb (cp_t *ctx);
void
@@ -145,6 +157,30 @@ cp_fsm__STATE4__event1 (cp_t *ctx)
}
void
+cp_fsm__STATE5__enter (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE5__enter);
+}
+
+void
+cp_fsm__STATE5__leave (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE5__leave);
+}
+
+void
+cp_fsm__STATE6__enter (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE6__enter);
+}
+
+void
+cp_fsm__STATE6__leave (cp_t *ctx)
+{
+ scenario_event (cp_fsm__STATE6__leave);
+}
+
+void
cp_fsm__STATEA__eventb (cp_t *ctx)
{
scenario_event (cp_fsm__STATEA__eventb);
diff --git a/cesar/cp2/fsm/test/utest/src/test_fsm.c b/cesar/cp2/fsm/test/utest/src/test_fsm.c
index 3f5a88c28e..d6976b4f23 100644
--- a/cesar/cp2/fsm/test/utest/src/test_fsm.c
+++ b/cesar/cp2/fsm/test/utest/src/test_fsm.c
@@ -163,6 +163,33 @@ test_fsm_basic_test_case (test_t t)
test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
cp_fsm_uninit (&cp);
} test_end;
+ test_begin (t, "enter leave")
+ {
+ cp_fsm_init (&cp);
+ scenario_entry_t entries[] = {
+ /* STATE1 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event5),
+ SCENARIO_EVENT (cp_fsm__STATE5__enter),
+ /* STATE5 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event6),
+ SCENARIO_EVENT (cp_fsm__STATE5__leave),
+ SCENARIO_EVENT (cp_fsm__STATE6__enter),
+ /* STATE6 */
+ SCENARIO_ACTION (post_and_process,
+ .type = CP_FSM_EVENT_TYPE_event1),
+ SCENARIO_EVENT (cp_fsm__STATE6__leave),
+ /* STATE1 */
+ SCENARIO_END
+ };
+ scenario_globals_t globals = {
+ .cp = &cp,
+ };
+ scenario_run (t, entries, &globals);
+ test_fail_unless (cp.fsm.active_states[0] == CP_FSM_STATE_STATE1);
+ cp_fsm_uninit (&cp);
+ } test_end;
}
void