public void Trigger_WithUnAcceptableCommand_Exception()
        {
            // Arrange
            var stateData = new StateData <StateType>(StateType.State1);
            var target    = new MyStateMachineWithCommand();
            var actual    = default(Exception);

            // Act
            actual = Assert.Throws <Exception>(() => target.Trigger(stateData, CommandType.Command2));

            // Assert
            Assert.IsNotNull(actual);
        }
        public void TranslateTo_WithAcceptableTargetState_ChangeCurrentStateToSpecifiedState()
        {
            // Arrange
            const StateType expected  = StateType.State2;
            var             stateData = new StateData <StateType>(StateType.State1);
            var             target    = new MyStateMachineWithCommand();
            var             actual    = default(StateType);

            // Act
            actual = target.TranslateTo(stateData, StateType.State2).State;

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void Trigger_WithAcceptableCommand_StateChangedEventInvoked()
        {
            // Arrange
            var stateData = new StateData <StateType>(StateType.State1);
            var target    = new MyStateMachineWithCommand();
            var actual    = default(bool);

            target.StateChanged += (sender, args) => { actual = true; };

            // Act
            target.Trigger(stateData, CommandType.Command1);

            // Assert
            Assert.IsTrue(actual);
        }
        public void TranslateTo_WithAcceptableTargetState_StateChangingEventInvoked()
        {
            // Arrange
            var stateData = new StateData <StateType>(StateType.State1);
            var target    = new MyStateMachineWithCommand();
            var actual    = default(bool);

            target.StateChanging += (sender, args) => { actual = true; };

            // Act
            target.TranslateTo(stateData, StateType.State2);

            // Assert
            Assert.IsTrue(actual);
        }