dashboard/pkg/myfsm/fsm_test.go

88 lines
1.7 KiB
Go

package fsm
import (
"log"
"testing"
"time"
)
type myFsm struct {
fsm *FSM
}
func state1(fsm *FSM, event EventName, arg interface{}) EventName {
switch event {
case EventEntry:
log.Println("state1", event)
case EventExit:
log.Println("state1", event)
default:
log.Println("state1", event)
return EventNoProc
}
return EventOK
}
func state2(fsm *FSM, event EventName, arg interface{}) EventName {
switch event {
case EventEntry:
log.Println("state2", event)
case EventExit:
log.Println("state2", event)
default:
log.Println("state2", event)
return EventNoProc
}
return EventOK
}
func state3(fsm *FSM, event EventName, arg interface{}) EventName {
switch event {
case EventEntry:
log.Println("state3", event)
case EventExit:
log.Println("state3", event)
case "test event":
log.Println("state3", event)
default:
log.Println("state3", event)
return EventNoProc
}
return EventOK
}
func newMyFsm() *myFsm {
state1 := NewFSMState("State1", "", "State2", state1)
state2 := NewFSMState("State2", "State1", "", state2)
state3 := NewFSMState("State3", "State1", "", state3)
fsm, err := NewFSM("MyFSM", &[]string{string(EventEntry), string(EventExit)}, state2, state1, state3)
if err != nil {
log.Fatal(err)
}
return &myFsm{fsm: fsm}
}
func Test_fsm(t *testing.T) {
myfsm := newMyFsm()
if err := myfsm.fsm.ChangeState("State3", nil); err != nil {
log.Fatal(err)
}
myfsm.fsm.ExecuteEvent("test event", nil)
// Start a timer (example)
// timerHandle := &ReactorTimerHandle{}
// if err := fsm.StartReactorTimer(timerHandle, 0, 1000, EventEntry, nil); err != nil {
// log.Fatal(err)
// }
// Keep the program running to observeinterior
time.Sleep(2 * time.Second)
}