-
Notifications
You must be signed in to change notification settings - Fork 5
/
director_test.go
125 lines (92 loc) · 3.78 KB
/
director_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
117
118
119
120
121
122
123
124
125
package stagehand
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestSceneDirector_NewSceneDirector(t *testing.T) {
mockScene := &MockScene{}
ruleSet := make(map[Scene[int]][]Directive[int])
director := NewSceneDirector[int](mockScene, 1, ruleSet)
assert.NotNil(t, director)
assert.Equal(t, mockScene, director.current)
}
func TestSceneDirector_ProcessTrigger(t *testing.T) {
mockScene := &MockScene{}
mockScene2 := &MockScene{}
ruleSet := make(map[Scene[int]][]Directive[int])
director := NewSceneDirector[int](mockScene, 1, ruleSet)
rule := Directive[int]{Dest: mockScene2, Trigger: 2}
ruleSet[mockScene] = []Directive[int]{rule}
// Call the ProcessTrigger method with wrong trigger
director.ProcessTrigger(1)
assert.NotEqual(t, rule.Dest, director.current)
// Call the ProcessTrigger method with correct trigger
director.ProcessTrigger(2)
assert.Equal(t, rule.Dest, director.current)
}
func TestSceneDirector_ProcessTriggerWithTransition(t *testing.T) {
mockScene := &MockScene{}
mockTransition := &baseTransitionImplementation{}
ruleSet := make(map[Scene[int]][]Directive[int])
director := NewSceneDirector[int](mockScene, 1, ruleSet)
rule := Directive[int]{Dest: &MockScene{}, Trigger: 2, Transition: mockTransition}
ruleSet[mockScene] = []Directive[int]{rule}
// Call the ProcessTrigger method with wrong trigger
director.ProcessTrigger(1)
assert.NotEqual(t, rule.Transition, director.current)
// Call the ProcessTrigger method with correct trigger
director.ProcessTrigger(2)
assert.Equal(t, rule.Transition, director.current)
rule.Transition.End()
assert.Equal(t, rule.Dest, director.current)
}
func TestSceneDirector_ProcessTriggerWithTransitionAwareness(t *testing.T) {
mockScene := &MockTransitionAwareScene{}
mockTransition := &baseTransitionImplementation{}
ruleSet := make(map[Scene[int]][]Directive[int])
director := NewSceneDirector[int](mockScene, 1, ruleSet)
rule := Directive[int]{Dest: &MockTransitionAwareScene{}, Trigger: 2, Transition: mockTransition}
ruleSet[mockScene] = []Directive[int]{rule}
// Call the ProcessTrigger method with wrong trigger
director.ProcessTrigger(1)
assert.NotEqual(t, rule.Transition, director.current)
// Call the ProcessTrigger method with correct trigger
director.ProcessTrigger(2)
assert.Equal(t, rule.Transition, director.current)
rule.Transition.End()
assert.Equal(t, rule.Dest, director.current)
}
func TestSceneDirector_ProcessTriggerCancelling(t *testing.T) {
mockScene := &MockScene{}
mockTransition := &baseTransitionImplementation{}
ruleSet := make(map[Scene[int]][]Directive[int])
director := NewSceneDirector[int](mockScene, 1, ruleSet)
rule := Directive[int]{Dest: &MockScene{}, Trigger: 2, Transition: mockTransition}
ruleSet[mockScene] = []Directive[int]{rule}
director.ProcessTrigger(2)
// Assert transition is running
assert.Equal(t, rule.Transition, director.current)
director.ProcessTrigger(1)
assert.Equal(t, rule.Dest, director.current)
}
func TestSceneDirector_ProcessTriggerCancellingToNewTransition(t *testing.T) {
mockSceneA := &MockScene{}
mockSceneB := &MockScene{}
mockTransitionA := &baseTransitionImplementation{}
mockTransitionB := &baseTransitionImplementation{}
ruleSet := make(map[Scene[int]][]Directive[int])
director := NewSceneDirector[int](mockSceneA, 1, ruleSet)
ruleSet[mockSceneA] = []Directive[int]{
Directive[int]{Dest: mockSceneB, Trigger: 2, Transition: mockTransitionA},
}
ruleSet[mockSceneB] = []Directive[int]{
Directive[int]{Dest: mockSceneA, Trigger: 2, Transition: mockTransitionB},
}
director.ProcessTrigger(2)
// Assert transition is running
assert.Equal(t, mockTransitionA, director.current)
director.ProcessTrigger(2)
assert.Equal(t, mockTransitionB, director.current)
mockTransitionB.End()
assert.Equal(t, mockSceneA, director.current)
}