/
events.test.js
158 lines (115 loc) · 3.56 KB
/
events.test.js
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import event from "../src/event.js";
import eventCategory from "../src/eventCategory.js";
import events from "../src/eventManager.js";
describe("events", () => {
it("Bind callback to event", () => {
// Arrange: an event
let anEvent = event();
let spy = jasmine.createSpy("callback");
// Act: bind a callback
anEvent.register(spy);
// and execute
anEvent.trigger();
// Assert
expect(spy).toHaveBeenCalled();
});
it("Bind multiple callbacks to an event", () => {
// Arrange: an event
let anEvent = event();
let spy1 = jasmine.createSpy("callback1");
let spy2 = jasmine.createSpy("callback2");
// Act: bind two callbacks and trigger event
anEvent.register(spy1);
anEvent.register(spy2);
anEvent.trigger();
// Assert: that both where executed
expect(spy1).toHaveBeenCalledTimes(1);
expect(spy2).toHaveBeenCalledTimes(1);
});
it("Bind same callback only once", () => {
// Arrange: an event
let anEvent = event();
let spy = jasmine.createSpy("callback");
// Act: bind two callbacks and trigger event
anEvent.register(spy);
anEvent.register(spy);
anEvent.trigger();
// Assert: that both where executed
expect(spy).toHaveBeenCalledTimes(1);
});
it("Bind same callback with anonymous functions", () => {
// Arrange: an event
let anEvent = event();
let spy = jasmine.createSpy("callback");
// Act: bind two callbacks and trigger event
anEvent.register(() => {
spy();
});
anEvent.register(() => {
spy();
});
anEvent.trigger();
// Assert: that both where executed
expect(spy).toHaveBeenCalledTimes(2);
});
it("Trigger pass values to callbacks", () => {
// Arrange: an event
let anEvent = event();
let spy1 = jasmine.createSpy("callback1");
let spy2 = jasmine.createSpy("callback2");
// Act: bind two callbacks and trigger event
anEvent.register(spy1);
anEvent.register(spy2);
anEvent.trigger(2, "text");
// Assert: that both where executed
expect(spy1).toHaveBeenCalledWith(2, "text");
expect(spy2).toHaveBeenCalledWith(2, "text");
});
it("Bind and trigger callback only once using registerOnce", () => {
// Arrange: an event
let anEvent = event();
let spy = jasmine.createSpy("callback");
// Act: bind a callback
anEvent.registerOnce(spy);
// and trigger twice
anEvent.trigger();
anEvent.trigger();
expect(spy).toHaveBeenCalledTimes(1);
});
it("Event Category can bind callback to named event using register", () => {
// Arrange: an event
let someEvents = eventCategory();
let anEvent = someEvents.createEvent("namedEvent");
// bind a callback
someEvents.register("namedEvent", () => {
expect(true).toBeTruthy();
});
// Act: trigger named event
anEvent.trigger("namedEvent");
});
it("Event Category can bind and trigger named event callback only once using registerOnce", () => {
// Arrange: an event
let someEvents = eventCategory();
let anEvent = someEvents.createEvent("namedEvent");
let spy = jasmine.createSpy("callback");
// Act: bind a callback
someEvents.registerOnce("namedEvent", spy);
// and trigger twice
anEvent.trigger("namedEvent");
anEvent.trigger("namedEvent");
expect(spy).toHaveBeenCalledTimes(1);
});
it("Event Manager keeps list of named event categories", () => {
let triggered = false;
events.at("c1").register("foo", () => {
triggered = true;
});
expect(!triggered).toBeTruthy();
events.at("c1").trigger("bar");
expect(!triggered).toBeTruthy();
events.at("c2").trigger("foo");
expect(!triggered).toBeTruthy();
events.at("c1").trigger("foo");
expect(triggered).toBeTruthy();
});
});