public void TestTransitionMultipleHandlersSorted() { StateMachine sm = Initialize(false); // Set up Prepare handlers. sm.UniversalTransitionHandler().AddPrepareEvent(new PrepareTransitionEvent(UniversalPrepareToTransition), -2); sm.OutboundTransitionHandler(States.Idle).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitionOutOfIdleWithSuccess_1), 4); sm.OutboundTransitionHandler(States.Idle).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitionOutOfIdleWithSuccess_2), 3); sm.OutboundTransitionHandler(States.Idle).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitionOutOfIdleWithSuccess_3), 2); sm.OutboundTransitionHandler(States.Idle).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitionOutOfIdleWithSuccess_4), 1); sm.InboundTransitionHandler(States.Validated).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitiontoValidWithSuccess_1), 4); sm.InboundTransitionHandler(States.Validated).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitiontoValidWithSuccess_2), 3); sm.InboundTransitionHandler(States.Validated).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitiontoValidWithSuccess_3), 2); sm.InboundTransitionHandler(States.Validated).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitiontoValidWithSuccess_4), 1); sm.TransitionHandler(States.Idle, States.Validated).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitionIdletoValidWithSuccess_1), 4); sm.TransitionHandler(States.Idle, States.Validated).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitionIdletoValidWithSuccess_2), 3); sm.TransitionHandler(States.Idle, States.Validated).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitionIdletoValidWithSuccess_3), 2); sm.TransitionHandler(States.Idle, States.Validated).AddPrepareEvent(new PrepareTransitionEvent(PrepareToTransitionIdletoValidWithSuccess_4), 1); // Set up Commit handlers. sm.UniversalTransitionHandler().AddCommitEvent(new CommitTransitionEvent(UniversalCommitTransition), -2); sm.OutboundTransitionHandler(States.Idle).AddCommitEvent(new CommitTransitionEvent(CommitTransitionOutOfIdle_1), 4); sm.OutboundTransitionHandler(States.Idle).AddCommitEvent(new CommitTransitionEvent(CommitTransitionOutOfIdle_2), 3); sm.OutboundTransitionHandler(States.Idle).AddCommitEvent(new CommitTransitionEvent(CommitTransitionOutOfIdle_3), 2); sm.OutboundTransitionHandler(States.Idle).AddCommitEvent(new CommitTransitionEvent(CommitTransitionOutOfIdle_4), 1); sm.InboundTransitionHandler(States.Validated).AddCommitEvent(new CommitTransitionEvent(CommitTransitionToValid_1), 4); sm.InboundTransitionHandler(States.Validated).AddCommitEvent(new CommitTransitionEvent(CommitTransitionToValid_2), 3); sm.InboundTransitionHandler(States.Validated).AddCommitEvent(new CommitTransitionEvent(CommitTransitionToValid_3), 2); sm.InboundTransitionHandler(States.Validated).AddCommitEvent(new CommitTransitionEvent(CommitTransitionToValid_4), 1); sm.TransitionHandler(States.Idle, States.Validated).AddCommitEvent(new CommitTransitionEvent(CommitTransitionIdleToValid_1), 4); sm.TransitionHandler(States.Idle, States.Validated).AddCommitEvent(new CommitTransitionEvent(CommitTransitionIdleToValid_2), 3); sm.TransitionHandler(States.Idle, States.Validated).AddCommitEvent(new CommitTransitionEvent(CommitTransitionIdleToValid_3), 2); sm.TransitionHandler(States.Idle, States.Validated).AddCommitEvent(new CommitTransitionEvent(CommitTransitionIdleToValid_4), 1); sm.DoTransition(States.Validated, m_batch); _Debug.Assert(States.Validated.Equals(sm.State), ""); }
public void TestTransitionMultipleHandlers() { StateMachine sm = Initialize(false); // Set up Prepare handlers. sm.UniversalTransitionHandler().Prepare += new PrepareTransitionEvent(UniversalPrepareToTransition); sm.OutboundTransitionHandler(States.Idle).Prepare += new PrepareTransitionEvent(PrepareToTransitionOutOfIdleWithSuccess_1); sm.OutboundTransitionHandler(States.Idle).Prepare += new PrepareTransitionEvent(PrepareToTransitionOutOfIdleWithSuccess_2); sm.OutboundTransitionHandler(States.Idle).Prepare += new PrepareTransitionEvent(PrepareToTransitionOutOfIdleWithSuccess_3); sm.OutboundTransitionHandler(States.Idle).Prepare += new PrepareTransitionEvent(PrepareToTransitionOutOfIdleWithSuccess_4); sm.InboundTransitionHandler(States.Validated).Prepare += new PrepareTransitionEvent(PrepareToTransitiontoValidWithSuccess_1); sm.InboundTransitionHandler(States.Validated).Prepare += new PrepareTransitionEvent(PrepareToTransitiontoValidWithSuccess_2); sm.InboundTransitionHandler(States.Validated).Prepare += new PrepareTransitionEvent(PrepareToTransitiontoValidWithSuccess_3); sm.InboundTransitionHandler(States.Validated).Prepare += new PrepareTransitionEvent(PrepareToTransitiontoValidWithSuccess_4); sm.TransitionHandler(States.Idle, States.Validated).Prepare += new PrepareTransitionEvent(PrepareToTransitionIdletoValidWithSuccess_1); sm.TransitionHandler(States.Idle, States.Validated).Prepare += new PrepareTransitionEvent(PrepareToTransitionIdletoValidWithSuccess_2); sm.TransitionHandler(States.Idle, States.Validated).Prepare += new PrepareTransitionEvent(PrepareToTransitionIdletoValidWithSuccess_3); sm.TransitionHandler(States.Idle, States.Validated).Prepare += new PrepareTransitionEvent(PrepareToTransitionIdletoValidWithSuccess_4); // Set up Commit handlers. sm.UniversalTransitionHandler().Commit += new CommitTransitionEvent(UniversalCommitTransition); sm.OutboundTransitionHandler(States.Idle).Commit += new CommitTransitionEvent(CommitTransitionOutOfIdle_1); sm.OutboundTransitionHandler(States.Idle).Commit += new CommitTransitionEvent(CommitTransitionOutOfIdle_2); sm.OutboundTransitionHandler(States.Idle).Commit += new CommitTransitionEvent(CommitTransitionOutOfIdle_3); sm.OutboundTransitionHandler(States.Idle).Commit += new CommitTransitionEvent(CommitTransitionOutOfIdle_4); sm.InboundTransitionHandler(States.Validated).Commit += new CommitTransitionEvent(CommitTransitionToValid_1); sm.InboundTransitionHandler(States.Validated).Commit += new CommitTransitionEvent(CommitTransitionToValid_2); sm.InboundTransitionHandler(States.Validated).Commit += new CommitTransitionEvent(CommitTransitionToValid_3); sm.InboundTransitionHandler(States.Validated).Commit += new CommitTransitionEvent(CommitTransitionToValid_4); sm.TransitionHandler(States.Idle, States.Validated).Commit += new CommitTransitionEvent(CommitTransitionIdleToValid_1); sm.TransitionHandler(States.Idle, States.Validated).Commit += new CommitTransitionEvent(CommitTransitionIdleToValid_2); sm.TransitionHandler(States.Idle, States.Validated).Commit += new CommitTransitionEvent(CommitTransitionIdleToValid_3); sm.TransitionHandler(States.Idle, States.Validated).Commit += new CommitTransitionEvent(CommitTransitionIdleToValid_4); sm.DoTransition(States.Validated, m_batch); Assert.IsTrue(States.Validated.Equals(sm.State), ""); }