public void ShouldStartAllChildrenInParallel()
        {
            Parallel.Policy successPolicy = Parallel.Policy.ONE;
            Parallel.Policy failurePolicy = Parallel.Policy.ONE;
            MockNode        firstChild    = new MockNode();
            MockNode        secondChild   = new MockNode();
            Parallel        sut           = new Parallel(successPolicy, failurePolicy, firstChild, secondChild);
            TestRoot        behaviorTree  = CreateBehaviorTree(sut);

            behaviorTree.Start();

            Assert.AreEqual(Node.State.ACTIVE, sut.CurrentState);
            Assert.AreEqual(Node.State.ACTIVE, firstChild.CurrentState);
        }
        public void StopLowerPriorityChildrenForChild_WithoutImmediateRestart_ShouldThrowError()
        {
            Parallel.Policy failurePolicy = Parallel.Policy.ALL;
            Parallel.Policy successPolicy = Parallel.Policy.ALL;

            MockNode firstChild   = new MockNode();
            MockNode secondChild  = new MockNode();
            Parallel sut          = new Parallel(successPolicy, failurePolicy, firstChild, secondChild);
            TestRoot behaviorTree = CreateBehaviorTree(sut);

            behaviorTree.Start();
            firstChild.Finish(false);
            sut.StopLowerPriorityChildrenForChild(firstChild, false);
        }
        public void ShouldSucceed_WhenNotAllChildrenFailed_AndFailPolicyAll_AndSucessPolicyOne()
        {
            Parallel.Policy failurePolicy = Parallel.Policy.ALL;
            Parallel.Policy successPolicy = Parallel.Policy.ONE;
            MockNode        firstChild    = new MockNode();
            MockNode        secondChild   = new MockNode();
            Parallel        sut           = new Parallel(successPolicy, failurePolicy, firstChild, secondChild);
            TestRoot        behaviorTree  = CreateBehaviorTree(sut);

            behaviorTree.Start();
            firstChild.Finish(false);
            secondChild.Finish(true);

            Assert.AreEqual(Node.State.INACTIVE, sut.CurrentState);
            Assert.IsTrue(behaviorTree.DidFinish);
            Assert.IsTrue(behaviorTree.WasSuccess);
        }
        public void StopLowerPriorityChildrenForChild_WithImmediateRestart_ShouldRestartChild()
        {
            Parallel.Policy failurePolicy = Parallel.Policy.ALL;
            Parallel.Policy successPolicy = Parallel.Policy.ALL;

            MockNode firstChild   = new MockNode();
            MockNode secondChild  = new MockNode();
            Parallel sut          = new Parallel(successPolicy, failurePolicy, firstChild, secondChild);
            TestRoot behaviorTree = CreateBehaviorTree(sut);

            behaviorTree.Start();
            firstChild.Finish(false);
            sut.StopLowerPriorityChildrenForChild(firstChild, true);

            Assert.AreEqual(Node.State.ACTIVE, sut.CurrentState);
            Assert.AreEqual(Node.State.ACTIVE, firstChild.CurrentState);
            Assert.AreEqual(Node.State.ACTIVE, secondChild.CurrentState);
        }
        public void ShouldFail_WhenAllChildrenFailed_AndFailPolicyAll()
        {
            Parallel.Policy failurePolicy = Parallel.Policy.ALL;
            foreach (Parallel.Policy successPolicy in ALL_SUCCESS_POLICIES)
            {
                MockNode firstChild   = new MockNode();
                MockNode secondChild  = new MockNode();
                Parallel sut          = new Parallel(successPolicy, failurePolicy, firstChild, secondChild);
                TestRoot behaviorTree = CreateBehaviorTree(sut);

                behaviorTree.Start();
                firstChild.Finish(false);
                secondChild.Finish(false);

                Assert.AreEqual(Node.State.INACTIVE, sut.CurrentState);
                Assert.IsTrue(behaviorTree.DidFinish);
                Assert.IsFalse(behaviorTree.WasSuccess);
            }
        }
        public void ShouldSucceed_WhenOneChildSuccessful_AndSuccessPolicyOne()
        {
            Parallel.Policy successPolicy = Parallel.Policy.ONE;
            foreach (Parallel.Policy failurePolicy in ALL_FAILURE_POLICIES)
            {
                MockNode firstChild   = new MockNode();
                MockNode secondChild  = new MockNode(false);
                Parallel sut          = new Parallel(successPolicy, failurePolicy, firstChild, secondChild);
                TestRoot behaviorTree = CreateBehaviorTree(sut);

                behaviorTree.Start();
                firstChild.Finish(true);

                Assert.AreEqual(Node.State.INACTIVE, firstChild.CurrentState);
                Assert.AreEqual(Node.State.INACTIVE, secondChild.CurrentState);
                Assert.IsTrue(behaviorTree.DidFinish);
                Assert.IsTrue(behaviorTree.WasSuccess);
            }
        }
        public void StopLowerPriorityChildrenForChild_WithoutImmediateRestart_ShouldThrowError()
        {
            Parallel.Policy failurePolicy = Parallel.Policy.ALL;
            Parallel.Policy successPolicy = Parallel.Policy.ALL;

            MockNode firstChild   = new MockNode();
            MockNode secondChild  = new MockNode();
            Parallel sut          = new Parallel(successPolicy, failurePolicy, firstChild, secondChild);
            TestRoot behaviorTree = CreateBehaviorTree(sut);

            behaviorTree.Start();
            firstChild.Finish(false);
            bool bExceptionCought = false;

            try {
                sut.StopLowerPriorityChildrenForChild(firstChild, false);
            } catch (Exception) {
                bExceptionCought = true;
            }
            Assert.AreEqual(bExceptionCought, true);
        }