186 lines
4.3 KiB
Go
186 lines
4.3 KiB
Go
package utils
|
|
|
|
import "testing"
|
|
|
|
func TestLinearStateMachine_RunPause(t *testing.T) {
|
|
callCount := 0
|
|
lsm := NewLinearStateMachine(
|
|
func() LSMAction {
|
|
callCount++
|
|
return LSMActionPause
|
|
},
|
|
)
|
|
cancelled, done := lsm.Run()
|
|
if cancelled {
|
|
t.Error("unexpected cancelled=true")
|
|
}
|
|
if done {
|
|
t.Error("unexpected done=true")
|
|
}
|
|
if callCount != 1 {
|
|
t.Errorf("callCount = %d, want 1", callCount)
|
|
}
|
|
}
|
|
|
|
func TestLinearStateMachine_RunNext(t *testing.T) {
|
|
callOrder := []int{}
|
|
lsm := NewLinearStateMachine(
|
|
func() LSMAction { callOrder = append(callOrder, 1); return LSMActionNext },
|
|
func() LSMAction { callOrder = append(callOrder, 2); return LSMActionNext },
|
|
func() LSMAction { callOrder = append(callOrder, 3); return LSMActionNext },
|
|
)
|
|
cancelled, done := lsm.Run()
|
|
if cancelled {
|
|
t.Error("unexpected cancelled=true")
|
|
}
|
|
if !done {
|
|
t.Error("unexpected done=false")
|
|
}
|
|
if len(callOrder) != 3 {
|
|
t.Fatalf("callOrder len = %d, want 3", len(callOrder))
|
|
}
|
|
for i, v := range []int{1, 2, 3} {
|
|
if callOrder[i] != v {
|
|
t.Errorf("callOrder[%d] = %d, want %d", i, callOrder[i], v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLinearStateMachine_RunReset(t *testing.T) {
|
|
callCount := 0
|
|
lsm := NewLinearStateMachine(
|
|
func() LSMAction {
|
|
callCount++
|
|
if callCount == 1 {
|
|
return LSMActionReset
|
|
}
|
|
return LSMActionNext
|
|
},
|
|
func() LSMAction { callCount++; return LSMActionNext },
|
|
)
|
|
cancelled, done := lsm.Run()
|
|
if cancelled {
|
|
t.Error("unexpected cancelled=true")
|
|
}
|
|
if !done {
|
|
t.Error("unexpected done=false")
|
|
}
|
|
if callCount != 3 {
|
|
t.Errorf("callCount = %d, want 3 (step0 reset, step0 next, step1 next)", callCount)
|
|
}
|
|
}
|
|
|
|
func TestLinearStateMachine_RunCancel(t *testing.T) {
|
|
callCount := 0
|
|
lsm := NewLinearStateMachine(
|
|
func() LSMAction { callCount++; return LSMActionNext },
|
|
func() LSMAction { callCount++; return LSMActionCancel },
|
|
func() LSMAction { callCount++; return LSMActionNext },
|
|
)
|
|
cancelled, done := lsm.Run()
|
|
if !cancelled {
|
|
t.Error("unexpected cancelled=false")
|
|
}
|
|
if !done {
|
|
t.Error("unexpected done=false")
|
|
}
|
|
if callCount != 2 {
|
|
t.Errorf("callCount = %d, want 2 (third step should not execute)", callCount)
|
|
}
|
|
}
|
|
|
|
func TestLinearStateMachine_RunMixed(t *testing.T) {
|
|
pauseCount := 0
|
|
lsm := NewLinearStateMachine(
|
|
func() LSMAction { return LSMActionNext },
|
|
func() LSMAction {
|
|
pauseCount++
|
|
if pauseCount == 1 {
|
|
return LSMActionPause
|
|
}
|
|
return LSMActionNext
|
|
},
|
|
func() LSMAction { return LSMActionNext },
|
|
func() LSMAction { return LSMActionNext },
|
|
)
|
|
cancelled, done := lsm.Run()
|
|
if cancelled {
|
|
t.Error("unexpected cancelled=true")
|
|
}
|
|
if done {
|
|
t.Error("unexpected done=true on first run")
|
|
}
|
|
cancelled, done = lsm.Run()
|
|
if cancelled {
|
|
t.Error("unexpected cancelled=true on second run")
|
|
}
|
|
if !done {
|
|
t.Error("unexpected done=false on second run")
|
|
}
|
|
}
|
|
|
|
func TestLinearStateMachine_RunEmpty(t *testing.T) {
|
|
lsm := NewLinearStateMachine()
|
|
cancelled, done := lsm.Run()
|
|
if cancelled {
|
|
t.Error("unexpected cancelled=true")
|
|
}
|
|
if !done {
|
|
t.Error("unexpected done=false for empty LSM")
|
|
}
|
|
}
|
|
|
|
func TestLinearStateMachine_AppendSteps(t *testing.T) {
|
|
lsm := NewLinearStateMachine(
|
|
func() LSMAction { return LSMActionNext },
|
|
)
|
|
lsm.Run()
|
|
lsm.AppendSteps(
|
|
func() LSMAction { return LSMActionNext },
|
|
)
|
|
_, done := lsm.Run()
|
|
if !done {
|
|
t.Error("unexpected done=false after AppendSteps")
|
|
}
|
|
}
|
|
|
|
func TestLinearStateMachine_Reset(t *testing.T) {
|
|
callCount := 0
|
|
lsm := NewLinearStateMachine(
|
|
func() LSMAction { callCount++; return LSMActionCancel },
|
|
)
|
|
lsm.Run()
|
|
if !lsm.cancelled {
|
|
t.Error("expected cancelled=true after cancel")
|
|
}
|
|
lsm.Reset()
|
|
if lsm.cancelled {
|
|
t.Error("expected cancelled=false after Reset")
|
|
}
|
|
if lsm.index != 0 {
|
|
t.Errorf("expected index=0 after Reset, got %d", lsm.index)
|
|
}
|
|
_, done := lsm.Run()
|
|
if !done {
|
|
t.Error("expected done=true, step executed again after Reset")
|
|
}
|
|
if callCount != 2 {
|
|
t.Errorf("callCount = %d, want 2 (first run + reset run)", callCount)
|
|
}
|
|
}
|
|
|
|
func TestLSMActionConstants(t *testing.T) {
|
|
if LSMActionPause != 0 {
|
|
t.Errorf("LSMActionPause = %d, want 0", LSMActionPause)
|
|
}
|
|
if LSMActionNext != 1 {
|
|
t.Errorf("LSMActionNext = %d, want 1", LSMActionNext)
|
|
}
|
|
if LSMActionReset != 2 {
|
|
t.Errorf("LSMActionReset = %d, want 2", LSMActionReset)
|
|
}
|
|
if LSMActionCancel != 3 {
|
|
t.Errorf("LSMActionCancel = %d, want 3", LSMActionCancel)
|
|
}
|
|
}
|