コード例 #1
0
 private void actionsListbox_SelectedIndexChanged(object sender, EventArgs e)
 {
     ICondition condition = new MockCondition() as ICondition;
     condition.DataLeft = new MockDataElement();
     condition.DataRight = new MockDataElement();
     Initialize(condition);
 }
コード例 #2
0
    [Test] public void TreeA()
    {
        MockCondition isSafe = new MockCondition(BehaviorStatus.Failure);
        MockCondition isFoodNearby = new MockCondition(BehaviorStatus.Success);
        MockAction run = new MockAction(BehaviorStatus.Running);
        MockAction eat = new MockAction(BehaviorStatus.Running);

        BehaviorTree behaviorTree = new BehaviorTreeBuilder<BehaviorTree>(new Selector())
            .Sequence("Run")
                .Decorator(new Invert())
                    .Condition(isSafe)
                .Action(run)
            .End()
            .Sequence("Eat")
                .Condition(isFoodNearby)
                .Action(eat)
            .End()
        .Build();

        Assert.IsTrue(behaviorTree.Tick() == BehaviorStatus.Running);

        run.status = BehaviorStatus.Success;
        Assert.IsTrue(behaviorTree.Tick() == BehaviorStatus.Success);

        isSafe.status = BehaviorStatus.Success;
        Assert.IsTrue(behaviorTree.Tick() == BehaviorStatus.Running);

        eat.status = BehaviorStatus.Success;
        Assert.IsTrue(behaviorTree.Tick() == BehaviorStatus.Success);

        isFoodNearby.status = BehaviorStatus.Failure;
        Assert.IsTrue(behaviorTree.Tick() == BehaviorStatus.Failure);
    }
コード例 #3
0
        public void ExecuteRunsElseTasksWhenConditionsFail()
        {
            var passRan       = false;
            var failRan       = false;
            var mockCondition = new MockCondition
            {
                EvalFunction = ir => false
            };
            var passTask = new MockTask
            {
                RunAction = ir => passRan = true
            };
            var failTask = new MockTask
            {
                RunAction = ir => failRan = true
            };
            var task = new ConditionalTask
            {
                Tasks          = new[] { passTask },
                ElseTasks      = new[] { failTask },
                TaskConditions = new[] { mockCondition }
            };
            var resultMock = this.GenerateResultMock();

            this.mocks.ReplayAll();
            resultMock.Status = IntegrationStatus.Success;
            task.Run(resultMock);

            this.mocks.VerifyAll();
            Assert.IsFalse(passRan);
            Assert.IsTrue(failRan);
        }
コード例 #4
0
        public void ExecuteRunsAllTasksWhenConditionsFailAndContinueOnFailure()
        {
            var passRan       = false;
            var firstFailRan  = false;
            var secondFailRan = false;
            var thirdFailRan  = false;
            var mockCondition = new MockCondition
            {
                EvalFunction = ir => false
            };
            var passTask = new MockTask
            {
                RunAction = ir => passRan = true
            };
            var firstFailTask = new MockTask
            {
                RunAction = ir => firstFailRan = true
            };
            var secondFailTask = new MockTask
            {
                RunAction = ir => { secondFailRan = true; ir.Status = IntegrationStatus.Failure; }
            };
            var thirdFailTask = new MockTask
            {
                RunAction = ir => thirdFailRan = true
            };
            var task = new ConditionalTask
            {
                Tasks          = new[] { passTask },
                ElseTasks      = new[] { firstFailTask, secondFailTask, thirdFailTask },
                TaskConditions = new[] { mockCondition }
            };
            var resultMock = this.GenerateResultMock();

            AddResultMockExpectedClone(resultMock);
            AddResultMockExpectedClone(resultMock);
            AddResultMockExpectedMerge(resultMock);
            AddResultMockExpectedMerge(resultMock);

            this.mocks.ReplayAll();
            resultMock.Status = IntegrationStatus.Success;
            task.Run(resultMock);

            this.mocks.VerifyAll();
            Assert.IsFalse(passRan);
            Assert.IsTrue(firstFailRan);
            Assert.IsTrue(secondFailRan);
            Assert.IsTrue(thirdFailRan);
        }
コード例 #5
0
        public void ValidateValidatesConditions()
        {
            var wasValidated  = false;
            var conditionMock = new MockCondition
            {
                ValidateAction = (c, t, ep) => wasValidated = true
            };
            var task = new ConditionalTask
            {
                TaskConditions = new[] { conditionMock }
            };

            task.Validate(null, ConfigurationTrace.Start(this), null);
            Assert.IsTrue(wasValidated);
        }
コード例 #6
0
        public void ExecuteRunsAllInnerTasksWhenConditionsFailAndContinueOnFailure()
        {
            const int innerCount = 3;
            const int leafCount  = 2;

            var passRan      = false;
            int taskRunCount = 0;

            var mockCondition = new MockCondition
            {
                EvalFunction = ir => false
            };
            var passTask = new MockTask
            {
                RunAction = ir => passRan = true
            };


            var innerTasks = new List <ConditionalTask>();

            for (var innerLoop = 1; innerLoop <= innerCount; innerLoop++)
            {
                var leafTasks = new List <MockTask>();
                for (var leafLoop = 1; leafLoop <= leafCount; leafLoop++)
                {
                    leafTasks.Add(((innerLoop == 2) && (leafLoop == 2)) ?
                                  new MockTask
                    {
                        RunAction = ir =>
                        {
                            taskRunCount++;
                            ir.Status = IntegrationStatus.Failure;
                        }
                    }
                        :
                                  new MockTask
                    {
                        RunAction = ir =>
                        {
                            taskRunCount++;
                            ir.Status = IntegrationStatus.Success;
                        }
                    }
                                  );
                }

                innerTasks.Add(new ConditionalTask
                {
                    ContinueOnFailure = false,
                    ElseTasks         = leafTasks.ToArray(),
                    TaskConditions    = new[] { mockCondition }
                });
            }

            var task = new ConditionalTask
            {
                Tasks             = new[] { passTask },
                ElseTasks         = innerTasks.ToArray(),
                TaskConditions    = new[] { mockCondition },
                ContinueOnFailure = true
            };
            var resultMock = this.GenerateResultMock(leafCount, leafCount);

            AddResultMockExpectedClone(resultMock, leafCount, leafCount);
            AddResultMockExpectedClone(resultMock, leafCount, leafCount);
            AddResultMockExpectedMerge(resultMock);
            AddResultMockExpectedMerge(resultMock);

            this.mocks.ReplayAll();
            resultMock.Status = IntegrationStatus.Success;
            task.Run(resultMock);

            this.mocks.VerifyAll();
            Assert.IsFalse(passRan);
            Assert.AreEqual(innerCount * leafCount, taskRunCount, "Bad task run count");
        }