@lowentry/utils 1.20.1 → 1.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,179 @@
1
+ import {describe, test, expect} from 'vitest';
2
+ import {EventEmitter} from '../src/index.js';
3
+
4
+
5
+ describe('EventEmitter', () =>
6
+ {
7
+ test('should create an instance of EventEmitter', () =>
8
+ {
9
+ const emitter = new EventEmitter();
10
+ expect(emitter).toBeInstanceOf(EventEmitter);
11
+ });
12
+
13
+ test('should emit and listen to events', () =>
14
+ {
15
+ const emitter = new EventEmitter();
16
+ let called = 0;
17
+
18
+ emitter.on('testEvent', () =>
19
+ {
20
+ called++;
21
+ });
22
+
23
+ emitter.emit('testEvent');
24
+ expect(called).toBe(1);
25
+ });
26
+
27
+ test('should remove event listeners', () =>
28
+ {
29
+ const emitter = new EventEmitter();
30
+ let called = 0;
31
+
32
+ const listener = () =>
33
+ {
34
+ called++;
35
+ };
36
+
37
+ emitter.on('testEvent', listener);
38
+ emitter.off('testEvent', listener);
39
+
40
+ emitter.emit('testEvent');
41
+ expect(called).toBe(0);
42
+ });
43
+
44
+ test('should handle multiple listeners for the same event', () =>
45
+ {
46
+ const emitter = new EventEmitter();
47
+ let called1 = 0;
48
+ let called2 = 0;
49
+
50
+ const listener1 = () =>
51
+ {
52
+ called1++;
53
+ };
54
+ const listener2 = () =>
55
+ {
56
+ called2++;
57
+ };
58
+
59
+ emitter.on('testEvent', listener1);
60
+ emitter.on('testEvent', listener2);
61
+
62
+ emitter.emit('testEvent');
63
+ expect(called1).toBe(1);
64
+ expect(called2).toBe(1);
65
+
66
+ emitter.off('testEvent', listener1);
67
+ emitter.emit('testEvent');
68
+ expect(called1).toBe(1);
69
+ expect(called2).toBe(2);
70
+ });
71
+
72
+ test('should handle event names with special characters', () =>
73
+ {
74
+ const emitter = new EventEmitter();
75
+ let called = 0;
76
+
77
+ emitter.on('test-event!@#$', () =>
78
+ {
79
+ called++;
80
+ });
81
+
82
+ emitter.emit('test-event!@#$');
83
+ expect(called).toBe(1);
84
+ });
85
+
86
+ test('should handle event names with spaces', () =>
87
+ {
88
+ const emitter = new EventEmitter();
89
+ let called = 0;
90
+
91
+ emitter.on('test event with spaces', () =>
92
+ {
93
+ called++;
94
+ });
95
+
96
+ emitter.emit('test event with spaces');
97
+ expect(called).toBe(1);
98
+ });
99
+
100
+ test('should be able to remove a listener using the returned listener object', () =>
101
+ {
102
+ const emitter = new EventEmitter();
103
+ let called = 0;
104
+
105
+ const listener = emitter.on('test123', () =>
106
+ {
107
+ called++;
108
+ });
109
+
110
+ emitter.emit('test123');
111
+ expect(called).toBe(1);
112
+
113
+ listener.remove();
114
+ emitter.emit('test123');
115
+ expect(called).toBe(1);
116
+ });
117
+
118
+ test('should handle multiple events with the same name', () =>
119
+ {
120
+ const emitter = new EventEmitter();
121
+ let called1 = 0;
122
+ let called2 = 0;
123
+
124
+ emitter.on('testEvent', () =>
125
+ {
126
+ called1++;
127
+ });
128
+
129
+ emitter.on('testEvent', () =>
130
+ {
131
+ called2++;
132
+ });
133
+
134
+ emitter.emit('testEvent');
135
+ expect(called1).toBe(1);
136
+ expect(called2).toBe(1);
137
+
138
+ emitter.clear('testEvent');
139
+ emitter.emit('testEvent');
140
+ expect(called1).toBe(1);
141
+ expect(called2).toBe(1);
142
+ });
143
+
144
+ test('should handle once() method', () =>
145
+ {
146
+ const emitter = new EventEmitter();
147
+ let called = 0;
148
+
149
+ emitter.once('testOnce', () =>
150
+ {
151
+ called++;
152
+ });
153
+
154
+ emitter.emit('testOnce');
155
+ expect(called).toBe(1);
156
+
157
+ emitter.emit('testOnce');
158
+ expect(called).toBe(1);
159
+ });
160
+
161
+ test('should allow canceling a once listener using .remove()', () =>
162
+ {
163
+ const emitter = new EventEmitter();
164
+ let called = 0;
165
+
166
+ const listener = emitter.once('testOnceCancel', () =>
167
+ {
168
+ called++;
169
+ });
170
+
171
+ listener.remove();
172
+
173
+ emitter.emit('testOnceCancel');
174
+ expect(called).toBe(0);
175
+
176
+ emitter.emit('testOnceCancel');
177
+ expect(called).toBe(0);
178
+ });
179
+ });