Skip to content

Commit e056935

Browse files
committed
coverage badge
1 parent 2d21b44 commit e056935

1 file changed

Lines changed: 285 additions & 0 deletions

File tree

tests/EventEmitter.test.ts

Lines changed: 285 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,291 @@ describe('Event Emitter Tests', () => {
1212
expect(actual).to.be.instanceOf(EventEmitter);
1313
})
1414

15+
it('Should match', async () => {
16+
const emitter = new EventEmitter()
17+
18+
emitter.on('match something', x => {})
19+
emitter.on(/match (something)/g, x => {})
20+
emitter.on(/match (some)(thing)/i, x => {})
21+
emitter.on(/match (some)(thing)/i, x => {})
22+
emitter.on('no mas', x => {})
23+
emitter.on(/no mas/g, x => {})
24+
25+
const matches = emitter.match('match something')
26+
27+
expect(matches.get('match something')?.pattern).to.equal('match something')
28+
expect(matches.get('/match (something)/g')?.pattern).to.equal('/match (something)/g')
29+
expect(matches.get('/match (some)(thing)/i')?.pattern).to.equal('/match (some)(thing)/i')
30+
31+
expect(matches.get('/match (something)/g')?.data.args.length).to.equal(1)
32+
expect(matches.get('/match (some)(thing)/i')?.data.args.length).to.equal(2)
33+
})
34+
35+
it('Should emit', async () => {
36+
const emitter = new EventEmitter<{
37+
'trigger basic something': [number],
38+
'/trigger basic something/': [number],
39+
'trigger advance something': [number],
40+
'trigger incomplete something': [number]
41+
}>
42+
43+
const triggered: number[] = []
44+
emitter.on('trigger basic something', async (x) => {
45+
expect(x).to.equal(1)
46+
triggered.push(1)
47+
}, 1)
48+
49+
emitter.on<'/trigger basic something/'>(/trigger basic something/, async x => {
50+
expect(x).to.equal(1)
51+
triggered.push(2)
52+
}, 2)
53+
54+
emitter.on('trigger basic something', async x => {
55+
expect(x).to.equal(1)
56+
triggered.push(3)
57+
}, 3)
58+
59+
emitter.on(/trigger basic something/, async x => {
60+
expect(x).to.equal(1)
61+
triggered.push(4)
62+
}, 4)
63+
64+
await emitter.emit('trigger basic something', 1)
65+
66+
expect(triggered.length).to.equal(4)
67+
expect(triggered[0]).to.equal(4)
68+
expect(triggered[1]).to.equal(3)
69+
expect(triggered[2]).to.equal(2)
70+
expect(triggered[3]).to.equal(1)
71+
})
72+
73+
it('Should call all listeners', async () => {
74+
const emitter = new EventEmitter
75+
76+
const triggered: number[] = []
77+
emitter.on('trigger basic something', async x => {
78+
expect(x).to.equal(1)
79+
triggered.push(1)
80+
})
81+
82+
emitter.on('trigger basic something', async x => {
83+
expect(x).to.equal(1)
84+
triggered.push(2)
85+
})
86+
87+
emitter.on('trigger basic something', async x => {
88+
expect(x).to.equal(1)
89+
triggered.push(3)
90+
})
91+
92+
await emitter.emit('trigger basic something', 1)
93+
94+
expect(triggered.length).to.equal(3)
95+
expect(triggered[0]).to.equal(1)
96+
expect(triggered[1]).to.equal(2)
97+
expect(triggered[2]).to.equal(3)
98+
})
99+
100+
it('Should have meta', async () => {
101+
const emitter = new EventEmitter
102+
103+
const triggered: number[] = []
104+
emitter.on(/^trigger basic (.+)$/, async function something1() {
105+
expect(emitter.event?.event).to.equal('trigger basic something')
106+
expect(emitter.event?.pattern).to.equal('/^trigger basic (.+)$/')
107+
expect(emitter.event?.data.args[0]).to.equal('something')
108+
triggered.push(1)
109+
}, 2)
110+
111+
emitter.on(/trigger (.+) something$/, async function something2() {
112+
expect(emitter.event?.event).to.equal('trigger basic something')
113+
expect(emitter.event?.pattern).to.equal('/trigger (.+) something$/')
114+
expect(emitter.event?.data.args[0]).to.equal('basic')
115+
triggered.push(2)
116+
}, 1)
117+
118+
const actual = await emitter.emit('trigger basic something', 1)
119+
120+
expect(triggered.length).to.equal(2)
121+
expect(triggered[0]).to.equal(1)
122+
expect(triggered[1]).to.equal(2)
123+
expect(actual.code).to.equal(200)
124+
})
125+
126+
it('Should emit advanced event', async () => {
127+
const emitter = new EventEmitter
128+
129+
const triggered: number[] = []
130+
emitter.on('trigger advance something', async x => {
131+
expect(x).to.equal(1)
132+
triggered.push(1)
133+
})
134+
135+
emitter.on(/trigger (advance) something/, async x => {
136+
expect(x).to.equal(1)
137+
triggered.push(2)
138+
expect(emitter.event?.data.args[0]).to.equal('advance')
139+
}, 2)
140+
141+
const actual = await emitter.emit('trigger advance something', 1)
142+
143+
expect(triggered.length).to.equal(2)
144+
expect(triggered[0]).to.equal(2)
145+
expect(triggered[1]).to.equal(1)
146+
expect(actual.code).to.equal(200)
147+
})
148+
149+
it('Should emit incomplete event', async () => {
150+
const emitter = new EventEmitter
151+
152+
const triggered: number[] = []
153+
emitter.on('trigger incomplete something', async x => {
154+
triggered.push(1)
155+
})
156+
157+
emitter.on(/trigger (incomplete) something/, async x => {
158+
expect(x).to.equal(1)
159+
triggered.push(2)
160+
return false
161+
}, 2)
162+
163+
const actual = await emitter.emit('trigger incomplete something', 1)
164+
165+
expect(triggered.length).to.equal(1)
166+
expect(triggered[0]).to.equal(2)
167+
expect(actual.code).to.equal(309)
168+
})
169+
170+
it('Should unbind', async () => {
171+
const emitter = new EventEmitter
172+
let listener = async x => {
173+
triggered.push(1)
174+
}
175+
176+
const triggered: number[] = []
177+
emitter.on('trigger unbind something', listener)
178+
179+
emitter.clear('trigger unbind something')
180+
const actual = await emitter.emit('trigger unbind something')
181+
182+
expect(triggered.length).to.equal(0)
183+
expect(actual.code).to.equal(404)
184+
185+
let listener2 = async x => {
186+
triggered.push(2)
187+
}
188+
189+
emitter.on('trigger unbind something', listener)
190+
emitter.on('trigger unbind something', listener2)
191+
emitter.unbind('trigger unbind something', listener)
192+
193+
const actual2 = await emitter.emit('trigger unbind something')
194+
195+
expect(triggered.length).to.equal(1)
196+
expect(triggered[0]).to.equal(2)
197+
expect(actual2.code).to.equal(200)
198+
})
199+
200+
it('Should nest', async () => {
201+
const emitter = new EventEmitter<{
202+
'on something': [number],
203+
'on something else': [number]
204+
}>();
205+
206+
emitter.on('on something', async x => {
207+
expect(emitter.event?.event).to.equal('on something')
208+
const actual = await emitter.emit('on something else', x + 1)
209+
expect(actual.code).to.equal(200)
210+
})
211+
212+
emitter.on('on something else', x => {
213+
expect(emitter.event?.event).to.equal('on something else')
214+
})
215+
216+
await emitter.emit('on something', 1)
217+
})
218+
219+
it('Should listen to regexp', async () => {
220+
const emitter = new EventEmitter
221+
222+
let triggered = 0
223+
emitter.on('GET /components/heyo/beans', async x => {
224+
expect(emitter.event?.event).to.equal('GET /components/heyo/beans')
225+
triggered ++
226+
})
227+
228+
emitter.on(/^GET\s\/components\/(.*)\/*$/, async x => {
229+
expect(emitter.event?.event).to.equal('GET /components/heyo/beans')
230+
triggered ++
231+
expect(emitter.event?.data.args[0]).to.equal('heyo/beans')
232+
})
233+
234+
await emitter.emit('GET /components/heyo/beans', 1)
235+
236+
expect(triggered).to.equal(2)
237+
})
238+
239+
it('Should asyncronously emit', async() => {
240+
const emitter = new EventEmitter();
241+
242+
const actual: number[] = []
243+
244+
emitter.on('async test', async() => {
245+
actual.push(1)
246+
})
247+
248+
emitter.on('async test', async() => {
249+
actual.push(2)
250+
})
251+
252+
emitter.on('async test', async() => {
253+
actual.push(3)
254+
})
255+
256+
await emitter.emit('async test', 0)
257+
258+
expect(actual.length).to.equal(3)
259+
})
260+
261+
it('Should allow middleware', async() => {
262+
const emitter1 = new EventEmitter
263+
const emitter2 = new EventEmitter
264+
265+
const triggered: number[] = []
266+
emitter1.on('trigger basic something', async x => {
267+
expect(x).to.equal(1)
268+
triggered.push(1)
269+
}, 1)
270+
271+
emitter2.on('trigger basic something', async x => {
272+
expect(x).to.equal(1)
273+
triggered.push(2)
274+
}, 2)
275+
276+
emitter1.use(emitter2)
277+
278+
await emitter1.emit('trigger basic something', 1)
279+
280+
expect(triggered.length).to.equal(2)
281+
expect(triggered[0]).to.equal(2)
282+
expect(triggered[1]).to.equal(1)
283+
})
284+
285+
it('Should handle clearing a non-existent event gracefully', () => {
286+
const emitter = new EventEmitter();
287+
expect(emitter.listeners['non-existent event']).to.be.undefined;
288+
emitter.clear('non-existent event');
289+
expect(emitter.listeners['non-existent event']).to.be.undefined;
290+
})
291+
292+
it('Should return empty matches when no patterns match', () => {
293+
const emitter = new EventEmitter();
294+
emitter.on('exampleEvent', async () => {});
295+
emitter.on(/regexEvent/, async () => {});
296+
const matches = emitter.match('nonMatchingEvent');
297+
expect(matches.size).to.equal(0);
298+
})
299+
15300
it('Should hook', async () => {
16301
const emitter = new EventEmitter<{
17302
'on something': [number],

0 commit comments

Comments
 (0)