public void OnRequestToChangeStateToStateNotAllowed_ThrowsException()
        {
            var factory      = new TestStateFactory(null, null);
            var stateMachine = new StateMachine(factory);

            stateMachine.ChangeState(typeof(TestStateFirst));

            Assert.Throws <ArgumentOutOfRangeException>(() => stateMachine.ChangeState(typeof(TestStateNotAllowed)));
        }
        public void OnChangeState_SetsLastType()
        {
            var factory      = new TestStateFactory(null, null);
            var stateMachine = new StateMachine(factory);

            stateMachine.ChangeState(typeof(TestStateFirst));
            stateMachine.ChangeState(typeof(TestStateSecond));
            Assert.That(stateMachine.LastStateWas(typeof(TestStateFirst)));
        }
        public void OnChangeState_CallsStartOnNewState()
        {
            var called       = false;
            var factory      = new TestStateFactory(() => { called = true; }, null);
            var stateMachine = new StateMachine(factory);

            stateMachine.ChangeState(typeof(TestStateFirst));
            Assert.That(called);
        }
        public void OnChangeState_CallsExitOnOldState()
        {
            var called       = false;
            var factory      = new TestStateFactory(null, () => { called = true; });
            var stateMachine = new StateMachine(factory);

            stateMachine.ChangeState(typeof(TestStateFirst));
            Assert.That(!called);
            stateMachine.ChangeState(typeof(TestStateSecond));
            Assert.That(called);
        }
        public void OnChangeState_ChangesState()
        {
            var factory      = new TestStateFactory(null, null);
            var stateMachine = new StateMachine(factory);

            var state = stateMachine.CurrentState;

            stateMachine.ChangeState(typeof(TestStateFirst));
            Assert.That(state != stateMachine.CurrentState);
            Assert.That(stateMachine.CurrentStateIs(typeof(TestStateFirst)));
        }