Skip to content

Commit cfec8af

Browse files
committed
Finished selector base tests, new base composite
1 parent cda4b6f commit cfec8af

File tree

9 files changed

+173
-95
lines changed

9 files changed

+173
-95
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using Adnc.FluidBT.TaskParents;
2+
using NSubstitute;
3+
using NUnit.Framework;
4+
5+
namespace Adnc.FluidBT.Testing {
6+
public class CompositeBaseTest {
7+
private CompositeExample _composite;
8+
9+
public class CompositeExample : CompositeBase {
10+
public void SetChildIndex (int index) {
11+
ChildIndex = index;
12+
}
13+
}
14+
15+
[SetUp]
16+
public void Set_composite () {
17+
_composite = new CompositeExample();
18+
}
19+
20+
public class EndMethod : CompositeBaseTest {
21+
[Test]
22+
public void Does_not_fail_if_children_empty () {
23+
_composite.End();
24+
}
25+
26+
[Test]
27+
public void Calls_end_on_current_child () {
28+
var child = A.TaskStub().Build();
29+
_composite.AddChild(child);
30+
31+
_composite.End();
32+
child.Received(1).End();
33+
}
34+
}
35+
36+
public class ResetMethod : CompositeBaseTest {
37+
[Test]
38+
public void Resets_child_node_pointer () {
39+
_composite.SetChildIndex(2);
40+
41+
_composite.Reset();
42+
43+
Assert.AreEqual(0, _composite.ChildIndex);
44+
}
45+
46+
[Test]
47+
public void Clears_all_lower_priorities () {
48+
_composite.AddChild(A.TaskStub().Build());
49+
50+
_composite.Reset();
51+
52+
Assert.AreEqual(0, _composite.AbortLowerPriorities.Count);
53+
}
54+
55+
[Test]
56+
public void Clears_self_abort_task () {
57+
var condition = A.TaskStub().WithAbortConditionSelf(true).Build();
58+
_composite.AddChild(condition);
59+
60+
_composite.Reset();
61+
62+
Assert.AreEqual(null, _composite.SelfAbortTask);
63+
}
64+
}
65+
}
66+
}

Assets/FluidBehaviorTree/Editor/Testing/ParentTasks/CompositeBaseTest.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 57 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Adnc.FluidBT.TaskParents;
22
using Adnc.FluidBT.Tasks;
33
using NSubstitute;
4+
using System.Collections.Generic;
45
using NUnit.Framework;
56

67
namespace Adnc.FluidBT.Testing {
@@ -38,57 +39,76 @@ public void Returns_continue_if_a_child_task_returns_continue () {
3839
}
3940
}
4041

41-
public class TwoNodes : UpdateMethod {
42-
// @TODO Break off into a stops on continue test
42+
public class MultipleNodes : UpdateMethod {
4343
[Test]
44-
public void Reruns_the_same_node_if_it_returns_continue () {
45-
var selector = new Selector();
46-
47-
var childSuccess = A.TaskStub().WithUpdateStatus(TaskStatus.Failure).Build();
48-
selector.AddChild(childSuccess);
44+
public void Stops_on_continue () {
45+
var childFailure = A.TaskStub().WithUpdateStatus(TaskStatus.Failure).Build();
46+
_selector.AddChild(childFailure);
4947

5048
var childContinue = A.TaskStub().WithUpdateStatus(TaskStatus.Continue).Build();
51-
selector.AddChild(childContinue);
52-
53-
selector.Update();
54-
55-
// @TODO Check child index instead
56-
childSuccess.Received(1).Update();
57-
childContinue.Received(1).Update();
58-
59-
selector.Update();
60-
61-
childSuccess.Received(1).Update();
62-
childContinue.Received(2).Update();
49+
_selector.AddChild(childContinue);
50+
51+
var childSuccess = A.TaskStub().Build();
52+
_selector.AddChild(childSuccess);
53+
54+
_selector.Update();
55+
56+
var updateCalls = new List<int> {1, 1, 0};
57+
for (var i = 0; i < updateCalls.Count; i++) {
58+
var child = _selector.children[i];
59+
child.Received(updateCalls[i]).Update();
60+
}
6361
}
62+
63+
[Test]
64+
public void Reruns_the_same_node_if_it_returns_continue () {
65+
var childFailure = A.TaskStub().WithUpdateStatus(TaskStatus.Failure).Build();
66+
_selector.AddChild(childFailure);
6467

65-
public void Stops_on_continue () {
66-
67-
}
68+
var childContinue = A.TaskStub().WithUpdateStatus(TaskStatus.Continue).Build();
69+
_selector.AddChild(childContinue);
6870

69-
public void Returns_failure_if_all_return_failure () {
71+
_selector.Update();
72+
_selector.Update();
7073

74+
var updateCalls = new List<int> {1, 2};
75+
for (var i = 0; i < updateCalls.Count; i++) {
76+
var child = _selector.children[i];
77+
child.Received(updateCalls[i]).Update();
78+
}
7179
}
7280

73-
public void Only_runs_first_node_if_success () {
81+
[Test]
82+
public void Returns_failure_if_all_return_failure () {
83+
var childA = A.TaskStub().WithUpdateStatus(TaskStatus.Failure).Build();
84+
_selector.AddChild(childA);
85+
86+
var childB = A.TaskStub().WithUpdateStatus(TaskStatus.Failure).Build();
87+
_selector.AddChild(childB);
7488

89+
Assert.AreEqual(TaskStatus.Failure, _selector.Update());
7590
}
7691

77-
public void Runs_all_nodes_on_success () {
92+
[Test]
93+
public void Stops_on_first_success_node () {
94+
var childFailure = A.TaskStub().WithUpdateStatus(TaskStatus.Failure).Build();
95+
_selector.AddChild(childFailure);
96+
97+
var childSuccessA = A.TaskStub().Build();
98+
_selector.AddChild(childSuccessA);
99+
100+
var childSuccessB = A.TaskStub().Build();
101+
_selector.AddChild(childSuccessB);
102+
103+
_selector.Update();
104+
105+
var updateCalls = new List<int> {1, 1, 0};
106+
for (var i = 0; i < updateCalls.Count; i++) {
107+
var child = _selector.children[i];
108+
child.Received(updateCalls[i]).Update();
109+
}
78110
}
79111
}
80112
}
81-
82-
public class EndMethod {
83-
public void Calls_end_on_current_child_node () {
84-
85-
}
86-
}
87-
88-
public class ResetMethod {
89-
public void Sets_child_index_to_zero () {
90-
91-
}
92-
}
93113
}
94114
}

Assets/FluidBehaviorTree/Editor/Testing/ParentTasks/TaskSequenceTest.cs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -427,19 +427,6 @@ public void Triggers_lower_priority_when_valid () {
427427
}
428428
}
429429
}
430-
431-
public class ResetMethod : TaskSequenceTest {
432-
[Test]
433-
public void Resets_ticking_of_child_nodes () {
434-
_childB.Update().Returns(TaskStatus.Continue);
435-
436-
_sequence.Update();
437-
_sequence.Reset();
438-
_sequence.Update();
439-
440-
_sequence.children.ForEach((c) => c.Received(2).Update());
441-
}
442-
}
443430
}
444431
}
445432

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Collections.Generic;
2+
using Adnc.FluidBT.Tasks;
3+
4+
namespace Adnc.FluidBT.TaskParents {
5+
public abstract class CompositeBase : TaskParentBase {
6+
public ITask SelfAbortTask { get; protected set; }
7+
public int ChildIndex { get; protected set; }
8+
public List<ITask> AbortLowerPriorities { get; } = new List<ITask>();
9+
10+
public override ITaskParent AddChild (ITask child) {
11+
if (children.Count == 0) {
12+
SelfAbortTask = child.GetAbortCondition();
13+
}
14+
15+
return base.AddChild(child);
16+
}
17+
18+
public override void End () {
19+
if (ChildIndex < children.Count) {
20+
children[ChildIndex].End();
21+
}
22+
}
23+
24+
public override void Reset (bool hardReset = false) {
25+
ChildIndex = 0;
26+
AbortLowerPriorities.Clear();
27+
SelfAbortTask = null;
28+
29+
base.Reset(hardReset);
30+
}
31+
}
32+
}

Assets/FluidBehaviorTree/Scripts/TaskParents/Composites/CompositeBase.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/FluidBehaviorTree/Scripts/TaskParents/Composites/Selector.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
using Adnc.FluidBT.Tasks;
22

33
namespace Adnc.FluidBT.TaskParents {
4-
public class Selector : TaskParentBase {
5-
public int ChildIndex { get; private set; }
6-
4+
public class Selector : CompositeBase {
75
protected override TaskStatus OnUpdate () {
86
for (var i = ChildIndex; i < children.Count; i++) {
97
var child = children[ChildIndex];

Assets/FluidBehaviorTree/Scripts/TaskParents/Composites/Sequence.cs

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,26 @@
22
using Adnc.FluidBT.Tasks;
33

44
namespace Adnc.FluidBT.TaskParents {
5-
public class Sequence : TaskParentBase {
6-
private ITask _selfAbortTask;
7-
private int _childIndex;
8-
private readonly List<ITask> _abortLowerPriorities = new List<ITask>();
9-
5+
public class Sequence : CompositeBase {
106
protected override TaskStatus OnUpdate () {
117
if (AbortType.HasFlag(AbortType.Self)
12-
&& _childIndex > 0
13-
&& _selfAbortTask != null
14-
&& _selfAbortTask.Update() == TaskStatus.Failure) {
15-
children[_childIndex].End();
8+
&& ChildIndex > 0
9+
&& SelfAbortTask != null
10+
&& SelfAbortTask.Update() == TaskStatus.Failure) {
11+
children[ChildIndex].End();
1612
Reset();
1713
return TaskStatus.Failure;
1814
}
1915

20-
foreach (var abort in _abortLowerPriorities) {
16+
foreach (var abort in AbortLowerPriorities) {
2117
if (abort.Update() != TaskStatus.Failure) continue;
22-
children[_childIndex].End();
18+
children[ChildIndex].End();
2319
Reset();
2420
return TaskStatus.Failure;
2521
}
2622

27-
for (var i = _childIndex; i < children.Count; i++) {
28-
var child = children[_childIndex];
23+
for (var i = ChildIndex; i < children.Count; i++) {
24+
var child = children[ChildIndex];
2925

3026
if (child.Enabled) {
3127
var status = child.Update();
@@ -36,34 +32,15 @@ protected override TaskStatus OnUpdate () {
3632
if (child.IsLowerPriority) {
3733
var abortCondition = child.GetAbortCondition();
3834
if (abortCondition != null) {
39-
_abortLowerPriorities.Add(abortCondition);
35+
AbortLowerPriorities.Add(abortCondition);
4036
}
4137
}
4238
}
4339

44-
_childIndex++;
40+
ChildIndex++;
4541
}
4642

4743
return TaskStatus.Success;
4844
}
49-
50-
public override ITaskParent AddChild (ITask child) {
51-
if (children.Count == 0) {
52-
_selfAbortTask = child.GetAbortCondition();
53-
}
54-
55-
return base.AddChild(child);
56-
}
57-
58-
public override void End () {
59-
children[_childIndex].End();
60-
}
61-
62-
public override void Reset (bool hardReset = false) {
63-
_childIndex = 0;
64-
_abortLowerPriorities.Clear();
65-
66-
base.Reset(hardReset);
67-
}
6845
}
6946
}

Assets/FluidBehaviorTree/Scripts/TaskParents/Composites/Sequence.meta

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)