-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathyour-event-emitter.js
More file actions
executable file
·52 lines (40 loc) · 1.24 KB
/
your-event-emitter.js
File metadata and controls
executable file
·52 lines (40 loc) · 1.24 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
import assert from "node:assert/strict";
// EventEmitter is a grate pattern to decouple the code.
// Implement YourEventEmitter to pass the tests down below.
class YourEventEmitter {
// Write your code here.
emit(key, data) {
// Write your code here.
}
off(key, handler) {
// Write your code here.
}
on(key, handler) {
// Write your code here.
}
}
const tracker = new assert.CallTracker();
const eventEmitter = new YourEventEmitter();
// Event 1.
const event1Data = "event1 is called";
const event1Handler = (data) => {
assert.deepEqual(data, event1Data);
};
const trackedEvent1Handler = tracker.calls(event1Handler, 2);
eventEmitter.on("event1", trackedEvent1Handler);
eventEmitter.on("event1", trackedEvent1Handler);
eventEmitter.emit("event1", event1Data);
eventEmitter.off("event1", trackedEvent1Handler);
eventEmitter.emit("event1", event1Data);
// Event 2.
const event2Data = "event2 is called";
const event2Handler = (data) => {
assert.deepEqual(data, event2Data);
};
const trackedEvent2Handler = tracker.calls(event2Handler, 1);
eventEmitter.on("event2", trackedEvent2Handler);
eventEmitter.emit("event2", event2Data);
// Verify calls.
// Event1 must be called twice.
// Event2 must be called once.
tracker.verify();