private void actionsListbox_SelectedIndexChanged(object sender, EventArgs e) { ICondition condition = new MockCondition() as ICondition; condition.DataLeft = new MockDataElement(); condition.DataRight = new MockDataElement(); Initialize(condition); }
[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); }
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); }
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); }
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); }
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"); }