This repository has been archived by the owner on Dec 1, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.ts
98 lines (68 loc) · 2.53 KB
/
test.ts
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
import {EventEmitter} from 'events';
import StrictEventEmitter from 'strict-event-emitter-types';
import {DefaultEventMap, EventEmitter as TypedEventEmitter} from 'tsee';
import TypedEmitter from 'typed-emitter';
import onEventEmitter from '.';
import onStrictEventEmitter from './strict-event-emitter-types';
import onTypedEventEmitter from './tsee';
import onTypedEmitter from './typed-emitter';
interface TestEventMap extends DefaultEventMap {
e: (n: number, s: string) => void;
}
describe('on(...)', () => {
test('waits for emit', () => {
const ee = new EventEmitter();
setImmediate(() => ee.emit('e', null));
const emitted = onEventEmitter(ee, 'e');
expect(emitted).toEqual(expect.arrayContaining([null]));
expect(emitted).toHaveLength(1);
});
test('does not return undefined', () => {
const ee = new EventEmitter();
setImmediate(() => ee.emit('e'));
const emitted = onEventEmitter(ee, 'e');
expect(emitted).not.toEqual(undefined);
expect(emitted).toHaveLength(0);
});
test('returns first emitted event', () => {
const ee = new EventEmitter();
setImmediate(() => {
ee.emit('e', 1);
ee.emit('e', 2);
});
const emitted = onEventEmitter(ee, 'e');
expect(emitted).toEqual(expect.arrayContaining([1]));
expect(emitted).toHaveLength(1);
});
test('returns all arguments of emitted event', () => {
const ee = new EventEmitter();
setImmediate(() => ee.emit('e', 1, 2));
const emitted = onEventEmitter(ee, 'e');
expect(emitted).toEqual(expect.arrayContaining([1, 2]));
expect(emitted).toHaveLength(2);
});
test('typechecks for StrictEventEmitter<..., ...>', () => {
const ee: StrictEventEmitter<
EventEmitter,
TestEventMap
> = new EventEmitter();
setImmediate(() => ee.emit('e', 0, ''));
const emitted: [number, string] = onStrictEventEmitter(ee, 'e');
expect(emitted).toEqual(expect.arrayContaining([0, '']));
expect(emitted).toHaveLength(2);
});
test('typechecks for TypedEventEmitter<...>', () => {
const ee = new TypedEventEmitter<TestEventMap>();
setImmediate(() => ee.emit('e', 0, ''));
const emitted: [number, string] = onTypedEventEmitter(ee, 'e');
expect(emitted).toEqual(expect.arrayContaining([0, '']));
expect(emitted).toHaveLength(2);
});
test('typechecks for TypedEmitter<...>', () => {
const ee = new EventEmitter() as TypedEmitter<TestEventMap>;
setImmediate(() => ee.emit('e', 0, ''));
const emitted: [number, string] = onTypedEmitter(ee, 'e');
expect(emitted).toEqual(expect.arrayContaining([0, '']));
expect(emitted).toHaveLength(2);
});
});