Skip to content

Commit 0159214

Browse files
committed
Add tests for 'EventEmitter' module;
1 parent a7031bf commit 0159214

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
open Jest;
2+
3+
describe("EventEmitter", () => {
4+
test(
5+
"'Emitter.make' should create a new emitter instance that is defined", () => {
6+
open! ExpectJs;
7+
open! EventEmitterTestLib;
8+
let emitter = Emitter1.make();
9+
expect(emitter->Js.Undefined.return) |> toBeDefined;
10+
});
11+
12+
test("'Emitter.addListener' should add a new event listener", () => {
13+
open! ExpectJs;
14+
open! EventEmitterTestLib;
15+
let listeners =
16+
Emitter1.(
17+
{
18+
make()->addListener(Events.text, _ => ())->listeners(Events.text);
19+
}
20+
);
21+
expect(Array.length(listeners)) |> toBe(1);
22+
});
23+
24+
test("'Emitter.on' should add a new event listener", () => {
25+
open! ExpectJs;
26+
open! EventEmitterTestLib;
27+
let listeners =
28+
Emitter1.(
29+
{
30+
make()->on(Events.text, _ => ())->listeners(Events.text);
31+
}
32+
);
33+
expect(Array.length(listeners)) |> toBe(1);
34+
});
35+
36+
test("'Emitter.on' should add a new event listener", () => {
37+
open! ExpectJs;
38+
open! EventEmitterTestLib;
39+
let listeners =
40+
Emitter1.(
41+
{
42+
make()->on(Events.text, _ => ())->listeners(Events.text);
43+
}
44+
);
45+
expect(Array.length(listeners)) |> toBe(1);
46+
});
47+
48+
test("'Emitter.removeListener' should remove the event listener", () => {
49+
open! ExpectJs;
50+
open! EventEmitterTestLib;
51+
let eventListener = (_) => ();
52+
let listeners =
53+
Emitter1.(
54+
{
55+
make()
56+
|> on(_, Events.text, eventListener)
57+
|> removeListener(_, Events.text, eventListener)
58+
|> listeners(_, Events.text);
59+
}
60+
);
61+
expect(Array.length(listeners)) |> toBe(0);
62+
});
63+
64+
test("'Emitter.off' should remove the event listener", () => {
65+
open! ExpectJs;
66+
open! EventEmitterTestLib;
67+
let eventListener = (_) => ();
68+
let listeners =
69+
Emitter1.(
70+
{
71+
make()
72+
|> on(_, Events.text, eventListener)
73+
|> off(_, Events.text, eventListener)
74+
|> listeners(_, Events.text);
75+
}
76+
);
77+
expect(Array.length(listeners)) |> toBe(0);
78+
});
79+
80+
test("'Emitter.emit' should execute each listener for the correct event", () => {
81+
open! ExpectJs;
82+
open! EventEmitterTestLib;
83+
let ref1 = ref(0);
84+
let ref2 = ref(0);
85+
let data1 = 1;
86+
let data2 = 2;
87+
let listener1 = (_) => { ref1 := data1; };
88+
let listener2 = (_) => { ref2 := data2; };
89+
Emitter1.({
90+
let emitter =
91+
make()
92+
|> on(_, Events.integer, listener1)
93+
|> on(_, Events.integer, listener2);
94+
emit(emitter, Events.integer, data1)->ignore;
95+
emit(emitter, Events.integer, data2)->ignore;
96+
});
97+
Assert.strictEqual(ref1^, 1);
98+
Assert.strictEqual(ref2^, 2);
99+
expect(ref1^ === 1 && ref2^ === 2) |> toBe(true);
100+
});
101+
102+
test("'Emitter.removeAllListeners' should remove all event listeners", () => {
103+
open! ExpectJs;
104+
open! EventEmitterTestLib;
105+
let eventListener = (_) => ();
106+
let emitter =
107+
Emitter1.(
108+
{
109+
make()
110+
|> on(_, Events.text, eventListener)
111+
|> on(_, Events.text, eventListener)
112+
|> on(_, Events.text, eventListener)
113+
}
114+
);
115+
// Make sure 3 listeners were indeed added:
116+
Assert.strictEqual(Emitter1.(listeners(emitter, Events.text))->Array.length, 3);
117+
// Remove all the listeners:
118+
Emitter1.removeAllListeners(emitter)->ignore;
119+
expect(Emitter1.(listeners(emitter, Events.text))->Array.length) |> toBe(0);
120+
});
121+
122+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module Emitter1 = {
2+
include EventEmitter.Make();
3+
4+
let uniqueSymbol: Js.Types.symbol = [%raw {|Symbol("emitter1")|}];
5+
6+
module Events = {
7+
let symbol: Event.t(Js.Types.symbol => unit, t) = Event.fromSymbol(uniqueSymbol);
8+
let text: Event.t(string => unit, t) = Event.fromString("text");
9+
let integer: Event.t(int => unit, t) = Event.fromString("integer");
10+
let textAndInteger: Event.t((string, int) => unit, t) = Event.fromString("textAndInteger");
11+
};
12+
13+
};
14+

0 commit comments

Comments
 (0)