Skip to content

Commit

Permalink
OnTransitioning event for initial transition
Browse files Browse the repository at this point in the history
  • Loading branch information
qmuntal committed Jan 19, 2021
1 parent 639ec7f commit 26996e4
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
3 changes: 2 additions & 1 deletion statemachine.go
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ func (sm *StateMachine) handleTransitioningTrigger(ctx context.Context, sr *stat
return err
}
}
sm.onTransitionedEvents.Invoke(ctx, transition)
sm.onTransitionedEvents.Invoke(ctx, Transition{transition.Source, rep.State, transition.Trigger, false})
return nil
}

Expand All @@ -451,6 +451,7 @@ func (sm *StateMachine) enterState(ctx context.Context, sr *stateRepresentation,
}
initialTranslation := Transition{Source: transition.Source, Destination: sr.InitialTransitionTarget, Trigger: transition.Trigger, isInitial: true}
sr = sm.stateRepresentation(sr.InitialTransitionTarget)
sm.onTransitioningEvents.Invoke(ctx, Transition{transition.Destination, initialTranslation.Destination, transition.Trigger, false})
sr, err = sm.enterState(ctx, sr, initialTranslation, args...)
}
return sr, err
Expand Down
11 changes: 6 additions & 5 deletions statemachine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package stateless
import (
"context"
"errors"
"fmt"
"reflect"
"sync"
"testing"
Expand Down Expand Up @@ -1195,7 +1196,7 @@ func TestStateMachine_InitialTransition_EntersSubStateofSubstate(t *testing.T) {

func TestStateMachine_InitialTransition_Ordering(t *testing.T) {
var actualOrdering []string
expectedOrdering := []string{"ExitA", "OnTransitioning", "EnterB", "EnterC", "OnTransitioned"}
expectedOrdering := []string{"ExitA", "OnTransitioningAB", "EnterB", "OnTransitioningBC", "EnterC", "OnTransitionedAC"}

sm := NewStateMachine(stateA)

Expand All @@ -1220,11 +1221,11 @@ func TestStateMachine_InitialTransition_Ordering(t *testing.T) {
return nil
})

sm.OnTransitioning(func(_ context.Context, _ Transition) {
actualOrdering = append(actualOrdering, "OnTransitioning")
sm.OnTransitioning(func(_ context.Context, tr Transition) {
actualOrdering = append(actualOrdering, fmt.Sprintf("OnTransitioning%s%s", tr.Source, tr.Destination))
})
sm.OnTransitioned(func(_ context.Context, _ Transition) {
actualOrdering = append(actualOrdering, "OnTransitioned")
sm.OnTransitioned(func(_ context.Context, tr Transition) {
actualOrdering = append(actualOrdering, fmt.Sprintf("OnTransitioned%s%s", tr.Source, tr.Destination))
})

sm.Fire(triggerX)
Expand Down

0 comments on commit 26996e4

Please sign in to comment.