Software /
code /
prosody
Comparison
spec/util_events_spec.lua @ 8760:6f3c3bb768cb
util.events: Add tests
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 24 Apr 2018 23:03:02 +0100 |
child | 8761:b6e193e33145 |
comparison
equal
deleted
inserted
replaced
8759:9e839fb4541a | 8760:6f3c3bb768cb |
---|---|
1 local events = require "util.events"; | |
2 | |
3 describe("util.events", function () | |
4 it("should export a new() function", function () | |
5 assert.is_function(events.new); | |
6 end); | |
7 describe("new()", function () | |
8 it("should return return a new events object", function () | |
9 local e = events.new(); | |
10 assert.is_function(e.add_handler); | |
11 assert.is_function(e.remove_handler); | |
12 end); | |
13 end); | |
14 | |
15 local e, h; | |
16 | |
17 | |
18 describe("API", function () | |
19 before_each(function () | |
20 e = events.new(); | |
21 h = spy.new(function () end); | |
22 end); | |
23 | |
24 it("should call handlers when an event is fired", function () | |
25 e.add_handler("myevent", h); | |
26 e.fire_event("myevent"); | |
27 assert.spy(h).was_called(); | |
28 end); | |
29 | |
30 it("should not call handlers when a different event is fired", function () | |
31 e.add_handler("myevent", h); | |
32 e.fire_event("notmyevent"); | |
33 assert.spy(h).was_not_called(); | |
34 end); | |
35 | |
36 it("should pass the data argument to handlers", function () | |
37 e.add_handler("myevent", h); | |
38 e.fire_event("myevent", "mydata"); | |
39 assert.spy(h).was_called_with("mydata"); | |
40 end); | |
41 | |
42 it("should support non-string events", function () | |
43 local myevent = {}; | |
44 e.add_handler(myevent, h); | |
45 e.fire_event(myevent, "mydata"); | |
46 assert.spy(h).was_called_with("mydata"); | |
47 end); | |
48 | |
49 it("should call handlers in priority order", function () | |
50 local data = {}; | |
51 e.add_handler("myevent", function () table.insert(data, "h1"); end, 5); | |
52 e.add_handler("myevent", function () table.insert(data, "h2"); end, 3); | |
53 e.add_handler("myevent", function () table.insert(data, "h3"); end); | |
54 e.fire_event("myevent", "mydata"); | |
55 assert.same(data, { "h1", "h2", "h3" }); | |
56 end); | |
57 | |
58 it("should support non-integer priority values", function () | |
59 local data = {}; | |
60 e.add_handler("myevent", function () table.insert(data, "h1"); end, 1); | |
61 e.add_handler("myevent", function () table.insert(data, "h2"); end, 0.5); | |
62 e.add_handler("myevent", function () table.insert(data, "h3"); end, 0.25); | |
63 e.fire_event("myevent", "mydata"); | |
64 assert.same(data, { "h1", "h2", "h3" }); | |
65 end); | |
66 | |
67 it("should support negative priority values", function () | |
68 local data = {}; | |
69 e.add_handler("myevent", function () table.insert(data, "h1"); end, 1); | |
70 e.add_handler("myevent", function () table.insert(data, "h2"); end, 0); | |
71 e.add_handler("myevent", function () table.insert(data, "h3"); end, -1); | |
72 e.fire_event("myevent", "mydata"); | |
73 assert.same(data, { "h1", "h2", "h3" }); | |
74 end); | |
75 | |
76 it("should support removing handlers", function () | |
77 e.add_handler("myevent", h); | |
78 e.fire_event("myevent"); | |
79 e.remove_handler("myevent", h); | |
80 e.fire_event("myevent"); | |
81 assert.spy(h).was_called(1); | |
82 end); | |
83 | |
84 it("should support adding multiple handlers at the same time", function () | |
85 local ht = { | |
86 myevent1 = spy.new(function () end); | |
87 myevent2 = spy.new(function () end); | |
88 myevent3 = spy.new(function () end); | |
89 }; | |
90 e.add_handlers(ht); | |
91 e.fire_event("myevent1"); | |
92 e.fire_event("myevent2"); | |
93 assert.spy(ht.myevent1).was_called(); | |
94 assert.spy(ht.myevent2).was_called(); | |
95 assert.spy(ht.myevent3).was_not_called(); | |
96 end); | |
97 | |
98 it("should support removing multiple handlers at the same time", function () | |
99 local ht = { | |
100 myevent1 = spy.new(function () end); | |
101 myevent2 = spy.new(function () end); | |
102 myevent3 = spy.new(function () end); | |
103 }; | |
104 e.add_handlers(ht); | |
105 e.remove_handlers(ht); | |
106 e.fire_event("myevent1"); | |
107 e.fire_event("myevent2"); | |
108 assert.spy(ht.myevent1).was_not_called(); | |
109 assert.spy(ht.myevent2).was_not_called(); | |
110 assert.spy(ht.myevent3).was_not_called(); | |
111 end); | |
112 | |
113 pending("should support adding handlers within an event handler") | |
114 pending("should support removing handlers within an event handler") | |
115 | |
116 describe("wrappers", function () | |
117 local w | |
118 before_each(function () | |
119 w = spy.new(function (handlers, event_name, event_data) | |
120 assert.is_function(handlers); | |
121 assert.equal("myevent", event_name) | |
122 assert.equal("abc", event_data); | |
123 return handlers(event_name, event_data); | |
124 end); | |
125 end); | |
126 | |
127 it("should get called", function () | |
128 e.add_wrapper("myevent", w); | |
129 e.add_handler("myevent", h); | |
130 e.fire_event("myevent", "abc"); | |
131 assert.spy(w).was_called(1); | |
132 assert.spy(h).was_called(1); | |
133 end); | |
134 | |
135 it("should be removable", function () | |
136 e.add_wrapper("myevent", w); | |
137 e.add_handler("myevent", h); | |
138 e.fire_event("myevent", "abc"); | |
139 e.remove_wrapper("myevent", w); | |
140 e.fire_event("myevent", "abc"); | |
141 assert.spy(w).was_called(1); | |
142 assert.spy(h).was_called(2); | |
143 end); | |
144 | |
145 it("should allow multiple wrappers", function () | |
146 local w2 = spy.new(function (handlers, event_name, event_data) | |
147 return handlers(event_name, event_data); | |
148 end); | |
149 e.add_wrapper("myevent", w); | |
150 e.add_handler("myevent", h); | |
151 e.add_wrapper("myevent", w2); | |
152 e.fire_event("myevent", "abc"); | |
153 e.remove_wrapper("myevent", w); | |
154 e.fire_event("myevent", "abc"); | |
155 assert.spy(w).was_called(1); | |
156 assert.spy(w2).was_called(2); | |
157 assert.spy(h).was_called(2); | |
158 end); | |
159 end); | |
160 | |
161 describe("global wrappers", function () | |
162 local w | |
163 before_each(function () | |
164 w = spy.new(function (handlers, event_name, event_data) | |
165 assert.is_function(handlers); | |
166 assert.equal("myevent", event_name) | |
167 assert.equal("abc", event_data); | |
168 return handlers(event_name, event_data); | |
169 end); | |
170 end); | |
171 | |
172 it("should get called", function () | |
173 e.add_wrapper(false, w); | |
174 e.add_handler("myevent", h); | |
175 e.fire_event("myevent", "abc"); | |
176 assert.spy(w).was_called(1); | |
177 assert.spy(h).was_called(1); | |
178 end); | |
179 | |
180 it("should be removable", function () | |
181 e.add_wrapper(false, w); | |
182 e.add_handler("myevent", h); | |
183 e.fire_event("myevent", "abc"); | |
184 e.remove_wrapper(false, w); | |
185 e.fire_event("myevent", "abc"); | |
186 assert.spy(w).was_called(1); | |
187 assert.spy(h).was_called(2); | |
188 end); | |
189 end); | |
190 end); | |
191 end); |