@@ -368,6 +368,31 @@ func TestStateMachine_Fire_ParametersSuppliedToFireArePassedToEntryAction(t *tes
368368 }
369369}
370370
371+ func TestStateMachine_Fire_ParametersSuppliedToFireArePassedToExitAction (t * testing.T ) {
372+ sm := NewStateMachine (stateB )
373+ sm .SetTriggerParameters (triggerX , reflect .TypeOf ("" ), reflect .TypeOf (0 ))
374+ sm .Configure (stateB ).Permit (triggerX , stateC )
375+
376+ var (
377+ entryArg1 string
378+ entryArg2 int
379+ )
380+ sm .Configure (stateB ).OnExitWith (triggerX , func (_ context.Context , args ... any ) error {
381+ entryArg1 = args [0 ].(string )
382+ entryArg2 = args [1 ].(int )
383+ return nil
384+ })
385+ suppliedArg1 , suppliedArg2 := "something" , 2
386+ sm .Fire (triggerX , suppliedArg1 , suppliedArg2 )
387+
388+ if entryArg1 != suppliedArg1 {
389+ t .Errorf ("entryArg1 = %v, want %v" , entryArg1 , suppliedArg1 )
390+ }
391+ if entryArg2 != suppliedArg2 {
392+ t .Errorf ("entryArg2 = %v, want %v" , entryArg2 , suppliedArg2 )
393+ }
394+ }
395+
371396func TestStateMachine_OnUnhandledTrigger_TheProvidedHandlerIsCalledWithStateAndTrigger (t * testing.T ) {
372397 sm := NewStateMachine (stateB )
373398 var (
@@ -570,6 +595,29 @@ func TestStateMachine_Fire_IgnoreVsPermitReentryFrom(t *testing.T) {
570595 }
571596}
572597
598+ func TestStateMachine_Fire_IgnoreVsPermitReentryExitWith (t * testing.T ) {
599+ sm := NewStateMachine (stateA )
600+ var calls int
601+ sm .Configure (stateA ).
602+ OnExitWith (triggerX , func (_ context.Context , _ ... any ) error {
603+ calls += 1
604+ return nil
605+ }).
606+ OnExitWith (triggerY , func (_ context.Context , _ ... any ) error {
607+ calls += 1
608+ return nil
609+ }).
610+ PermitReentry (triggerX ).
611+ Ignore (triggerY )
612+
613+ sm .Fire (triggerX )
614+ sm .Fire (triggerY )
615+
616+ if calls != 1 {
617+ t .Errorf ("calls = %d, want %d" , calls , 1 )
618+ }
619+ }
620+
573621func TestStateMachine_Fire_IfSelfTransitionPermited_ActionsFire_InSubstate (t * testing.T ) {
574622 sm := NewStateMachine (stateA )
575623 var onEntryStateBfired , onExitStateBfired , onExitStateAfired bool
0 commit comments