59 lines
1.2 KiB
V
59 lines
1.2 KiB
V
import statemachine
|
|
|
|
struct MyReceiver {
|
|
mut:
|
|
data []string
|
|
}
|
|
|
|
fn default_setup() (MyReceiver, statemachine.StateMachine) {
|
|
mut receiver := MyReceiver{}
|
|
mut s := statemachine.new()
|
|
s.add_state('A', on_state_entry, on_state_run, on_state_exit)
|
|
s.add_state('B', on_state_entry, on_state_run, on_state_exit)
|
|
s.add_transition('A', 'B', condition_transition)
|
|
return receiver, s
|
|
}
|
|
|
|
fn test_statemachine_works_when_single_transition() {
|
|
mut receiver, mut s := default_setup()
|
|
|
|
s.run(receiver)
|
|
|
|
assert receiver.data.len == 3
|
|
}
|
|
|
|
fn test_statemachine_works_when_typical() {
|
|
mut receiver, mut s := default_setup()
|
|
|
|
s.run(receiver)
|
|
|
|
assert receiver.data[0] == 'on_state_exit'
|
|
assert receiver.data[1] == 'on_state_entry'
|
|
assert receiver.data[2] == 'on_state_run'
|
|
}
|
|
|
|
fn test_statemachine_works_when_final_state() {
|
|
mut receiver, mut s := default_setup()
|
|
|
|
s.run(receiver)
|
|
s.run(receiver)
|
|
|
|
assert receiver.data.len == 3
|
|
}
|
|
|
|
fn on_state_entry(mut receiver MyReceiver) {
|
|
receiver.data << 'on_state_entry'
|
|
}
|
|
|
|
fn on_state_run(mut receiver MyReceiver) {
|
|
receiver.data << 'on_state_run'
|
|
}
|
|
|
|
fn on_state_exit(mut receiver MyReceiver) {
|
|
receiver.data << 'on_state_exit'
|
|
}
|
|
|
|
fn condition_transition(receiver &MyReceiver) bool {
|
|
return true
|
|
}
|