-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathevents.spec.luau
More file actions
125 lines (116 loc) · 4.33 KB
/
events.spec.luau
File metadata and controls
125 lines (116 loc) · 4.33 KB
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
-- ROBLOX upstream: https://github.com/facebook/react/blob/v17.0.1/packages/react-devtools-shared/src/__tests__/events-test.js
-- /**
-- * Copyright (c) Facebook, Inc. and its affiliates.
-- *
-- * This source code is licensed under the MIT license found in the
-- *
-- * LICENSE file in the root directory of this source tree.
-- * @flow
-- */
local Error = require("@pkg/@jsdotlua/luau-polyfill").Error
local JestGlobals = require("@pkg/@jsdotlua/jest-globals")
local describe = JestGlobals.describe
local it = JestGlobals.it
local beforeEach = JestGlobals.beforeEach
local jestExpect = JestGlobals.expect
local jest = JestGlobals.jest
describe("events", function()
local dispatcher
beforeEach(function()
jest.resetModules()
local EventEmitter = require("../events")
dispatcher = EventEmitter.new()
end)
it("can dispatch an event with no listeners", function()
dispatcher:emit("event", 123)
end)
it("handles a listener being attached multiple times", function()
local callback = jest.fn()
dispatcher:addListener("event", callback)
dispatcher:addListener("event", callback)
dispatcher:emit("event", 123)
jestExpect(callback).toHaveBeenCalledTimes(1)
jestExpect(callback).toHaveBeenCalledWith(123)
end)
it("notifies all attached listeners of events", function()
local callback1 = jest.fn()
local callback2 = jest.fn()
local callback3 = jest.fn()
dispatcher:addListener("event", callback1)
dispatcher:addListener("event", callback2)
dispatcher:addListener("other-event", callback3)
dispatcher:emit("event", 123)
jestExpect(callback1).toHaveBeenCalledTimes(1)
jestExpect(callback1).toHaveBeenCalledWith(123)
jestExpect(callback2).toHaveBeenCalledTimes(1)
jestExpect(callback2).toHaveBeenCalledWith(123)
jestExpect(callback3).never.toHaveBeenCalled()
end)
it("calls later listeners before re-throwing if an earlier one throws", function()
local callbackThatThrows = jest.fn(function()
error(Error.new("expected"))
end)
local callback = jest.fn()
dispatcher:addListener("event", callbackThatThrows)
dispatcher:addListener("event", callback)
jestExpect(function()
dispatcher:emit("event", 123)
end).toThrow("expected")
jestExpect(callbackThatThrows).toHaveBeenCalledTimes(1)
jestExpect(callbackThatThrows).toHaveBeenCalledWith(123)
jestExpect(callback).toHaveBeenCalledTimes(1)
jestExpect(callback).toHaveBeenCalledWith(123)
end)
it("removes attached listeners", function()
local callback1 = jest.fn()
local callback2 = jest.fn()
dispatcher:addListener("event", callback1)
dispatcher:addListener("other-event", callback2)
dispatcher:removeListener("event", callback1)
dispatcher:emit("event", 123)
jestExpect(callback1).never.toHaveBeenCalled()
dispatcher:emit("other-event", 123)
jestExpect(callback2).toHaveBeenCalledTimes(1)
jestExpect(callback2).toHaveBeenCalledWith(123)
end)
it("removes all listeners", function()
local callback1 = jest.fn()
local callback2 = jest.fn()
local callback3 = jest.fn()
dispatcher:addListener("event", callback1)
dispatcher:addListener("event", callback2)
dispatcher:addListener("other-event", callback3)
dispatcher:removeAllListeners()
dispatcher:emit("event", 123)
dispatcher:emit("other-event", 123)
jestExpect(callback1).never.toHaveBeenCalled()
jestExpect(callback2).never.toHaveBeenCalled()
jestExpect(callback3).never.toHaveBeenCalled()
end)
it(
"should call the initial listeners even if others are added or removed during a dispatch",
function()
local callback2, callback3
local callback1 = jest.fn(function()
dispatcher:removeListener("event", callback2)
dispatcher:addListener("event", callback3)
end)
callback2 = jest.fn()
callback3 = jest.fn()
dispatcher:addListener("event", callback1)
dispatcher:addListener("event", callback2)
dispatcher:emit("event", 123)
jestExpect(callback1).toHaveBeenCalledTimes(1)
jestExpect(callback1).toHaveBeenCalledWith(123)
jestExpect(callback2).toHaveBeenCalledTimes(1)
jestExpect(callback2).toHaveBeenCalledWith(123)
jestExpect(callback3).never.toHaveBeenCalled()
dispatcher:emit("event", 456)
jestExpect(callback1).toHaveBeenCalledTimes(2)
jestExpect(callback1).toHaveBeenCalledWith(456)
jestExpect(callback2).toHaveBeenCalledTimes(1)
jestExpect(callback3).toHaveBeenCalledTimes(1)
jestExpect(callback3).toHaveBeenCalledWith(456)
end
)
end)