// Copyright 2024 Matthew Rich . All rights reserved. package machine import ( "github.com/stretchr/testify/assert" "log" "testing" ) func setupTransition() Transitioner { t := NewTransition("open", "closed", "open") if t == nil { log.Fatal("Failed creating new transition") } return t } func setupSubscriber() Subscriber { c := make(EventChannel, 2) return &c } func TestNewTransition(t *testing.T) { s := NewTransition("connect", "disconnected", "connected") if s == nil { t.Errorf("Failed creating new transition") } } func TestTransitionExecution(t *testing.T) { s := setupTransition() m := setupModel("closed") assert.Nil(t, s.Run(m)) state := m.InspectState() if state != "open" { t.Errorf("Failed to transition state: %s", state) } } func TestTransitionWildcard(t *testing.T) { tr := NewTransition("open", "*", "opened") assert.NotNil(t, tr) m := setupModel("closed") assert.Nil(t, tr.Run(m)) assert.Equal(t, "opened", string(m.InspectState())) } func TestTransitionSubscribe(t *testing.T) { c := setupSubscriber() s := setupTransition() s.Subscribe(c) m := setupModel("closed") assert.Nil(t, s.Run(m)) exitEvent := <-*c.(*EventChannel) enterEvent := <-*c.(*EventChannel) if exitEvent.On != EXITSTATEEVENT { t.Errorf("Invalid exit event") } if enterEvent.On != ENTERSTATEEVENT { t.Errorf("Invalid enter event") } }