-
Notifications
You must be signed in to change notification settings - Fork 0
/
beetea_test.go
116 lines (96 loc) · 2.91 KB
/
beetea_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package beetea
import (
"testing"
)
func TestActionNode(t *testing.T) {
actionNode := NewAction("action1", func() Status {
return Success
})
if actionNode.Tick() != Success {
t.Errorf("Expected ActionNode to return Success")
}
initialVersion := actionNode.GetVersion()
actionNode.UpdateVersion()
if actionNode.GetVersion() == initialVersion {
t.Errorf("Expected version to be incremented")
}
if actionNode.CalculateHash() == "" {
t.Errorf("Expected non-empty hash for ActionNode")
}
}
func TestConditionNode(t *testing.T) {
conditionNode := NewCondition("condition1", func() bool {
return true
})
if conditionNode.Tick() != Success {
t.Errorf("Expected ConditionNode to return Success on true condition")
}
if conditionNode.CalculateHash() == "" {
t.Errorf("Expected non-empty hash for ConditionNode")
}
}
func TestSelectorNode(t *testing.T) {
successNode := NewAction("action1", func() Status {
return Success
})
failureNode := NewAction("action1", func() Status {
return Failure
})
selector := NewSelector("selctor1", failureNode, successNode)
if selector.Tick() != Success {
t.Errorf("Expected Selector to succeed when one child succeeds")
}
if selector.CalculateHash() == "" {
t.Errorf("Expected non-empty hash for Selector")
}
}
func TestSequenceNode(t *testing.T) {
successNode := NewAction("action1", func() Status {
return Success
})
failureNode := NewAction("action1", func() Status {
return Failure
})
sequence := NewSequence("sequence1", successNode, failureNode)
if sequence.Tick() != Failure {
t.Errorf("Expected Sequence to fail when one child fails")
}
if sequence.CalculateHash() == "" {
t.Errorf("Expected non-empty hash for Sequence")
}
}
func TestHashRecalculationOnModification(t *testing.T) {
actionNode := NewAction("action2", func() Status {
return Running
})
initialHash := actionNode.CalculateHash()
// Simulate modification by changing the action
actionNode.Action = func() Status {
return Success
}
actionNode.UpdateVersion()
if actionNode.CalculateHash() == initialHash {
t.Errorf("Expected hash to change after modification")
}
}
func TestCompositeNodeWithVariousChildStatuses(t *testing.T) {
alwaysRunning := NewAction("alwaysRunning", func() Status {
return Running
})
alwaysSuccess := NewAction("alwaysSuccess", func() Status {
return Success
})
alwaysFailure := NewAction("alwaysFailure", func() Status {
return Failure
})
// Selector should succeed if any child succeeds
selector := NewSelector("selector2", alwaysFailure, alwaysRunning, alwaysSuccess)
if selector.Tick() != Running {
t.Errorf("Expected Selector to return Running when a child is running")
}
// Sequence should fail if any child fails
sequence := NewSequence("sequence3", alwaysSuccess, alwaysRunning, alwaysFailure)
if sequence.Tick() != Running {
t.Errorf("Expected Sequence to return Running when a child is running before encountering a failure")
}
}