public void TickSequenceParentSelectorChildrenFirstChildFailsOnBothSequenceFails() { Sequence sequence = new Sequence(); MockSelector selector1 = new MockSelector(2); MockSelector selector2 = new MockSelector(2); sequence.Add(selector1); sequence.Add(selector2); sequence.Tick(); Assert.AreEqual(Status.BhRunning, sequence.Status); Assert.AreEqual(1, selector1[0].InitializeCalled); selector1[0].ReturnStatus = Status.BhFailure; sequence.Tick(); Assert.AreEqual(Status.BhRunning, sequence.Status); // if the child of the first selector fails, then // the second child should be running and the first // child should be terminated Assert.AreEqual(1, selector1[1].InitializeCalled); Assert.AreEqual(Status.BhRunning, selector1[1].Status); Assert.AreEqual(1, selector1[0].TerminateCalled); // the first child of the second selector should not // yet be called Assert.AreEqual(0, selector2[0].InitializeCalled); selector1[1].ReturnStatus = Status.BhSuccess; sequence.Tick(); Assert.AreEqual(Status.BhRunning, selector2[0].Status); Assert.AreEqual(1, selector1[1].TerminateCalled); Assert.AreEqual(1, selector2[0].InitializeCalled); // mark the first child of the second selector as failed selector2[0].ReturnStatus = Status.BhFailure; sequence.Tick(); Assert.AreEqual(Status.BhRunning, sequence.Status); selector2[1].ReturnStatus = Status.BhFailure; sequence.Tick(); Assert.AreEqual(Status.BhFailure, selector2.Status); Assert.AreEqual(Status.BhFailure, sequence.Status); }
public void TickSequenceParentSelectorChildrenSequenceSucceedes() { Sequence sequence = new Sequence(); MockSelector selector1 = new MockSelector(2); MockSelector selector2 = new MockSelector(2); sequence.Add(selector1); sequence.Add(selector2); sequence.Tick(); Assert.AreEqual(Status.BhRunning, sequence.Status); Assert.AreEqual(1, selector1[0].InitializeCalled); selector1[0].ReturnStatus = Status.BhSuccess; sequence.Tick(); Assert.AreEqual(Status.BhRunning, sequence.Status); // if the first selector succeedes, then none of the // other childrne of the selector will be touched Assert.AreEqual(Status.BhInvalid, selector1[1].Status); Assert.AreEqual(1, selector1[0].TerminateCalled); // since a sequence has to go trough all of its selectors (if any) // if they succeed. So the first child of the second selector // should now be initialized Assert.AreEqual(1, selector2[0].InitializeCalled); sequence.Tick(); Assert.AreEqual(Status.BhRunning, sequence.Status); Assert.AreEqual(0, selector2[0].TerminateCalled); Assert.AreEqual(0, selector2[1].TerminateCalled); Assert.AreEqual(Status.BhRunning, selector2[0].Status); selector2[0].ReturnStatus = Status.BhSuccess; sequence.Tick(); Assert.AreEqual(Status.BhSuccess, sequence.Status); }