public void Input_handles_value_types()
 {
     var machine = new FiniteStateMachine<string, int>();
     machine.CurrentState = "Start";
     machine.Transitions.Add( new StateTransition<string, int>{InputValidator = i => i.Equals(0), FromState = "Start", ToState = "End"} );
     machine.Input(0);
 }
        public void Input_throws_ArgumentException_if_more_than_1_transition_found_for_current_state_and_input()
        {
            var machine = new FiniteStateMachine<UpdateState, string>();

            machine.Transitions.Add(new StateTransition<UpdateState, string>
                                        {
                                            FromState = UpdateState.Ready,
                                            ToState = UpdateState.Cancelling,
                                            InputValidator = s => s.Equals("Start")
                                        });

            machine.Transitions.Add(new StateTransition<UpdateState, string>
                                        {
                                            FromState = UpdateState.Ready,
                                            ToState = UpdateState.DownloadingUpdate,
                                            InputValidator = s => s.Equals("Start")
                                        });

            machine.Input("Start");
        }
 public void Unknown_input_throws_ArgumentException()
 {
     var machine = new FiniteStateMachine<string, string>();
     machine.Input("CheckForUpdates");
 }
 public void Transitions_for_mapped_input()
 {
     var machine = new FiniteStateMachine<UpdateState, string>();
     machine.Transitions.Add( new StateTransition<UpdateState, string>(){FromState = UpdateState.Ready, InputValidator = s => s.Equals("CheckForUpdates"), ToState = UpdateState.DownloadingUpdate});
     machine.Input("CheckForUpdates");
     Assert.AreEqual(UpdateState.DownloadingUpdate, machine.CurrentState);
 }