Beispiel #1
0
        public void Throw_An_Exception_If_User_Tries_To_Add_A_Null_Behaviour()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var stateBehaviour1 = Substitute.For <IStateBehaviour>();

            Assert.Throws <ArgumentNullException>(() => fsm.AddWithBehaviours(1, stateBehaviour1, null));

            fsm.AddWithBehaviours(1);

            Assert.Throws <ArgumentNullException>(() => fsm.AddBehaviourTo(1, null));
            Assert.Throws <ArgumentNullException>(() => fsm.AddBehavioursTo(1, stateBehaviour1, null));
        }
Beispiel #2
0
        public void Remove_Behaviours_From_Behavioural_States()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var stateBehaviour1 = Substitute.For <IStateBehaviour>();
            var stateBehaviour2 = Substitute.For <IStateBehaviour>();

            fsm.AddWithBehaviours(1, stateBehaviour1, stateBehaviour2);

            fsm.RemoveBehaviourFrom(1, stateBehaviour1);

            Assert.IsTrue(fsm.BehaviourCount() == 1);
            Assert.IsTrue(fsm.BehaviourCountOf(1) == 1);
            Assert.IsFalse(fsm.ContainsBehaviour(stateBehaviour1));
            Assert.IsFalse(fsm.ContainsBehaviourOn(1, stateBehaviour1));
            Assert.IsTrue(fsm.ContainsBehaviour(stateBehaviour2));
            Assert.IsTrue(fsm.ContainsBehaviourOn(1, stateBehaviour2));

            fsm.RemoveBehaviourFrom(1, stateBehaviour2);

            Assert.IsTrue(fsm.BehaviourCount() == 0);
            Assert.IsTrue(fsm.BehaviourCountOf(1) == 0);
            Assert.IsFalse(fsm.ContainsBehaviour(stateBehaviour2));
            Assert.IsFalse(fsm.ContainsBehaviourOn(1, stateBehaviour2));
        }
Beispiel #3
0
        public void Enter_Update_And_Exit_Behaviours()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var stateBehaviour1 = Substitute.For <IStateBehaviour>();
            var stateBehaviour2 = Substitute.For <IStateBehaviour>();

            fsm.AddWithBehaviours(1, stateBehaviour1, stateBehaviour2);

            fsm.InitialState = 1;

            fsm.Start();

            stateBehaviour1.Received(1).OnEnter();
            stateBehaviour2.Received(1).OnEnter();

            fsm.Update();

            stateBehaviour1.Received(1).OnUpdate();
            stateBehaviour2.Received(1).OnUpdate();

            fsm.Stop();

            stateBehaviour1.Received(1).OnExit();
            stateBehaviour2.Received(1).OnExit();
        }
Beispiel #4
0
        public void Return_Behaviour_Of_Specific_Type_From_Specific_State()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var stateBehaviour = new TestStateBehaviour();

            fsm.AddWithBehaviours(1, stateBehaviour);

            Assert.AreEqual(stateBehaviour, fsm.GetBehaviourOf <TestStateBehaviour, int, int>(1));
        }
Beispiel #5
0
        public void Do_Nothing_If_User_Tries_To_Add_The_Same_Behaviour_On_The_Same_State_Twice()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var stateBehaviour1 = Substitute.For <IStateBehaviour>();

            fsm.AddWithBehaviours(1);

            fsm.AddBehaviourTo(1, stateBehaviour1);
            Assert.DoesNotThrow(() => fsm.AddBehaviourTo(1, stateBehaviour1));
            Assert.IsTrue(fsm.BehaviourCount() == 1);
        }
Beispiel #6
0
        public void Add_Behaviour_To_Behavioural_States()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var stateBehaviour1 = Substitute.For <IStateBehaviour>();

            fsm.AddWithBehaviours(1);

            fsm.AddBehaviourTo(1, stateBehaviour1);

            Assert.IsTrue(fsm.ContainsBehaviour(stateBehaviour1));
        }
Beispiel #7
0
        public void Add_Behavioural_States()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var behaviouralState1 = fsm.AddWithBehaviours(1);

            Assert.IsTrue(fsm.ContainsState(1));
            Assert.IsTrue(fsm.GetStateById(1) == behaviouralState1);

            IStateBehaviour stateBehaviour1 = Substitute.For <IStateBehaviour>();
            IStateBehaviour stateBehaviour2 = Substitute.For <IStateBehaviour>();

            var behaviouralState2 = fsm.AddWithBehaviours(2, stateBehaviour1, stateBehaviour2);

            Assert.IsTrue(fsm.ContainsState(2));
            Assert.IsTrue(fsm.GetStateById(2) == behaviouralState2);
            Assert.IsTrue(fsm.ContainsBehaviour(stateBehaviour1));
            Assert.IsTrue(fsm.ContainsBehaviour(stateBehaviour2));
            Assert.IsTrue(fsm.BehaviourCount() == 2);
            Assert.IsTrue(fsm.BehaviourCountOf(2) == 2);
        }
Beispiel #8
0
        public void Return_Behaviours_Of_Specific_Type_From_Specific_Behavioural_State()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var stateBehaviour1 = new TestStateBehaviour();
            var stateBehaviour2 = new TestStateBehaviour();
            var stateBehaviour3 = Substitute.For <IStateBehaviour>();

            fsm.AddWithBehaviours(1, stateBehaviour1, stateBehaviour2, stateBehaviour3);

            var behaviors = fsm.GetBehavioursOf <TestStateBehaviour, int, int>(1);

            Assert.IsTrue(behaviors.Length == 2);
            Assert.IsTrue(behaviors.Contains(stateBehaviour1));
            Assert.IsTrue(behaviors.Contains(stateBehaviour2));
        }
Beispiel #9
0
        public void Iterate_Over_All_Behaviours()
        {
            var fsm = new HierarchicalStateMachine <int, int>();

            var stateBehaviour1 = Substitute.For <IStateBehaviour>();
            var stateBehaviour2 = Substitute.For <IStateBehaviour>();

            fsm.AddWithBehaviours(1, stateBehaviour1, stateBehaviour2);

            var behaviours = new List <IStateBehaviour>();

            behaviours.Add(stateBehaviour1);
            behaviours.Add(stateBehaviour2);

            fsm.ForeachBehaviour(behaviour =>
            {
                behaviours.Remove(behaviour);
                return(false);
            });

            Assert.IsTrue(behaviours.Count == 0);
        }