@daiso-tech/core 0.24.0 → 0.26.0
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.
- package/README.md +3 -2
- package/dist/async/utilities/lazy-promise/lazy-promise.d.ts +12 -3
- package/dist/async/utilities/lazy-promise/lazy-promise.js +37 -4
- package/dist/async/utilities/lazy-promise/lazy-promise.js.map +1 -1
- package/dist/cache/contracts/cache.contract.d.ts +4 -4
- package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js +2 -2
- package/dist/cache/implementations/adapters/kysely-sqlite-cache-adapter/kysely-sqlite-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js +4 -4
- package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js +2 -2
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js +5 -5
- package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/derivables/cache/cache.d.ts +70 -184
- package/dist/cache/implementations/derivables/cache/cache.js +68 -185
- package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.d.ts +11 -15
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.js +0 -11
- package/dist/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js +5 -5
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/iterable-collection.js +5 -5
- package/dist/collection/implementations/iterable-collection/iterable-collection.js.map +1 -1
- package/dist/collection/implementations/list-collection/list-collection.js +5 -5
- package/dist/collection/implementations/list-collection/list-collection.js.map +1 -1
- package/dist/event-bus/contracts/_shared.d.ts +0 -7
- package/dist/event-bus/contracts/_shared.js.map +1 -1
- package/dist/event-bus/contracts/event-bus-adapter.contract.d.ts +6 -5
- package/dist/event-bus/contracts/event-bus.contract.d.ts +21 -16
- package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.d.ts +4 -3
- package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js +3 -3
- package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js.map +1 -1
- package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.d.ts +4 -3
- package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.js.map +1 -1
- package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.d.ts +4 -3
- package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js +3 -3
- package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js.map +1 -1
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.d.ts +64 -33
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.js +92 -33
- package/dist/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
- package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.js +957 -201
- package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.js.map +1 -1
- package/dist/lock/contracts/lock-provider.contract.d.ts +2 -2
- package/dist/lock/contracts/lock.contract.d.ts +24 -6
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js +2 -2
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js +4 -4
- package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js +2 -2
- package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js +4 -4
- package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.d.ts +90 -48
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.js +67 -43
- package/dist/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.d.ts +4 -23
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js +8 -2
- package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider/lock.d.ts +744 -11
- package/dist/lock/implementations/derivables/lock-provider/lock.js +770 -3
- package/dist/lock/implementations/derivables/lock-provider/lock.js.map +1 -1
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.d.ts +36 -5
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +10 -4
- package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -1
- package/dist/lock/implementations/test-utilities/lock-provider.test-suite.d.ts +1 -0
- package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js +417 -0
- package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js.map +1 -1
- package/dist/serde/implementations/derivables/serde.js +4 -4
- package/dist/serde/implementations/derivables/serde.js.map +1 -1
- package/dist/utilities/{constants.js → _constants.js} +1 -1
- package/dist/utilities/_constants.js.map +1 -0
- package/dist/utilities/_module-exports.d.ts +1 -1
- package/dist/utilities/_module-exports.js +1 -1
- package/dist/utilities/_module-exports.js.map +1 -1
- package/dist/utilities/contracts/_module.d.ts +0 -1
- package/dist/utilities/contracts/_module.js +0 -1
- package/dist/utilities/contracts/_module.js.map +1 -1
- package/dist/utilities/functions.d.ts +3 -7
- package/dist/utilities/functions.js +3 -10
- package/dist/utilities/functions.js.map +1 -1
- package/dist/utilities/pipeline/_module.d.ts +1 -0
- package/dist/utilities/pipeline/_module.js +2 -0
- package/dist/utilities/pipeline/_module.js.map +1 -0
- package/dist/utilities/pipeline/pipeline.d.ts +45 -0
- package/dist/utilities/pipeline/pipeline.js +75 -0
- package/dist/utilities/pipeline/pipeline.js.map +1 -0
- package/dist/utilities/time-span/time-span.d.ts +3 -12
- package/dist/utilities/time-span/time-span.js +3 -6
- package/dist/utilities/time-span/time-span.js.map +1 -1
- package/dist/utilities/types.d.ts +19 -2
- package/package.json +1 -1
- package/dist/utilities/constants.js.map +0 -1
- package/dist/utilities/contracts/buildable.contract.d.ts +0 -11
- package/dist/utilities/contracts/buildable.contract.js +0 -5
- package/dist/utilities/contracts/buildable.contract.js.map +0 -1
- /package/dist/utilities/{constants.d.ts → _constants.d.ts} +0 -0
|
@@ -64,6 +64,12 @@ import { NoOpSerdeAdapter } from "../../../serde/implementations/adapters/_modul
|
|
|
64
64
|
*/
|
|
65
65
|
export function eventBusTestSuite(settings) {
|
|
66
66
|
const { expect, serde = new Serde(new NoOpSerdeAdapter()), test, describe, createEventBus, beforeEach, } = settings;
|
|
67
|
+
const TTL = TimeSpan.fromMilliseconds(50);
|
|
68
|
+
class AddEvent extends BaseEvent {
|
|
69
|
+
}
|
|
70
|
+
class SubEvent extends BaseEvent {
|
|
71
|
+
}
|
|
72
|
+
serde.registerEvent(AddEvent).registerEvent(SubEvent);
|
|
67
73
|
let eventBusA;
|
|
68
74
|
let eventBusB;
|
|
69
75
|
beforeEach(async () => {
|
|
@@ -71,335 +77,1085 @@ export function eventBusTestSuite(settings) {
|
|
|
71
77
|
eventBusA = eventBus;
|
|
72
78
|
eventBusB = eventBus.withGroup("b");
|
|
73
79
|
});
|
|
74
|
-
const TTL = TimeSpan.fromMilliseconds(50);
|
|
75
|
-
class TestEventA extends BaseEvent {
|
|
76
|
-
}
|
|
77
|
-
class TestEventB extends BaseEvent {
|
|
78
|
-
}
|
|
79
|
-
serde.registerEvent(TestEventA);
|
|
80
|
-
serde.registerEvent(TestEventB);
|
|
81
80
|
describe("Api tests:", () => {
|
|
82
81
|
describe("method: addListener, removeListener, dispatch", () => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
describe("Should be null when listener is added and event is not triggered", () => {
|
|
83
|
+
test("Object literal listener", async () => {
|
|
84
|
+
const listener = {
|
|
85
|
+
result: null,
|
|
86
|
+
invoke(event) {
|
|
87
|
+
this.result = event;
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
91
|
+
expect(listener.result).toBeNull();
|
|
92
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
93
|
+
});
|
|
94
|
+
test("Class instance listener", async () => {
|
|
95
|
+
class Listener {
|
|
96
|
+
result = null;
|
|
97
|
+
invoke(event) {
|
|
98
|
+
this.result = event;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const listener = new Listener();
|
|
102
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
103
|
+
expect(listener.result).toBeNull();
|
|
104
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
105
|
+
});
|
|
106
|
+
test("Function listener", async () => {
|
|
107
|
+
let result = null;
|
|
108
|
+
const listener = (event) => {
|
|
109
|
+
result = event;
|
|
110
|
+
};
|
|
111
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
112
|
+
expect(result).toBeNull();
|
|
113
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
87
114
|
});
|
|
88
|
-
expect(result).toBeNull();
|
|
89
115
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
116
|
+
describe("Should be AddEvent when listener is added and event is triggered", () => {
|
|
117
|
+
test("Object literal listener", async () => {
|
|
118
|
+
const listener = {
|
|
119
|
+
result: null,
|
|
120
|
+
invoke(event) {
|
|
121
|
+
this.result = event;
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
125
|
+
const event = new AddEvent({
|
|
126
|
+
a: 1,
|
|
127
|
+
b: 2,
|
|
128
|
+
});
|
|
129
|
+
await eventBusA.dispatch(event);
|
|
130
|
+
await delay(TTL);
|
|
131
|
+
expect(listener.result).toEqual(event);
|
|
132
|
+
expect(listener.result).toBeInstanceOf(AddEvent);
|
|
133
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
94
134
|
});
|
|
95
|
-
|
|
96
|
-
|
|
135
|
+
test("Class instance listener", async () => {
|
|
136
|
+
class Listener {
|
|
137
|
+
result = null;
|
|
138
|
+
invoke(event) {
|
|
139
|
+
this.result = event;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const listener = new Listener();
|
|
143
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
144
|
+
const event = new AddEvent({
|
|
145
|
+
a: 1,
|
|
146
|
+
b: 2,
|
|
147
|
+
});
|
|
148
|
+
await eventBusA.dispatch(event);
|
|
149
|
+
await delay(TTL);
|
|
150
|
+
expect(listener.result).toEqual(event);
|
|
151
|
+
expect(listener.result).toBeInstanceOf(AddEvent);
|
|
152
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
153
|
+
});
|
|
154
|
+
test("Function listener", async () => {
|
|
155
|
+
let result = null;
|
|
156
|
+
const listener = (event) => {
|
|
157
|
+
result = event;
|
|
158
|
+
};
|
|
159
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
160
|
+
const event = new AddEvent({
|
|
161
|
+
a: 1,
|
|
162
|
+
b: 2,
|
|
163
|
+
});
|
|
164
|
+
await eventBusA.dispatch(event);
|
|
165
|
+
await delay(TTL);
|
|
166
|
+
expect(result).toEqual(event);
|
|
167
|
+
expect(result).toBeInstanceOf(AddEvent);
|
|
168
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
97
169
|
});
|
|
98
|
-
await eventBusA.dispatch(event);
|
|
99
|
-
await delay(TTL);
|
|
100
|
-
expect(result).toEqual(event);
|
|
101
|
-
expect(result).toBeInstanceOf(TestEventA);
|
|
102
170
|
});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
171
|
+
describe("Should be null when listener removed and event is triggered", () => {
|
|
172
|
+
test("Object literal listener", async () => {
|
|
173
|
+
const listener = {
|
|
174
|
+
result: null,
|
|
175
|
+
invoke(event) {
|
|
176
|
+
this.result = event;
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
180
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
181
|
+
const event = new AddEvent({
|
|
182
|
+
a: 1,
|
|
183
|
+
b: 2,
|
|
184
|
+
});
|
|
185
|
+
await eventBusA.dispatch(event);
|
|
186
|
+
await delay(TTL);
|
|
187
|
+
expect(listener.result).toBeNull();
|
|
188
|
+
});
|
|
189
|
+
test("Class instance listener", async () => {
|
|
190
|
+
class Listener {
|
|
191
|
+
result = null;
|
|
192
|
+
invoke(event) {
|
|
193
|
+
this.result = event;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const listener = new Listener();
|
|
197
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
198
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
199
|
+
const event = new AddEvent({
|
|
200
|
+
a: 1,
|
|
201
|
+
b: 2,
|
|
202
|
+
});
|
|
203
|
+
await eventBusA.dispatch(event);
|
|
204
|
+
await delay(TTL);
|
|
205
|
+
expect(listener.result).toBeNull();
|
|
206
|
+
});
|
|
207
|
+
test("Function listener", async () => {
|
|
208
|
+
let result = null;
|
|
209
|
+
const listener = (event) => {
|
|
210
|
+
result = event;
|
|
211
|
+
};
|
|
212
|
+
await eventBusA.addListener(AddEvent, listener);
|
|
213
|
+
await eventBusA.removeListener(AddEvent, listener);
|
|
214
|
+
const event = new AddEvent({
|
|
215
|
+
a: 1,
|
|
216
|
+
b: 2,
|
|
217
|
+
});
|
|
218
|
+
await eventBusA.dispatch(event);
|
|
219
|
+
await delay(TTL);
|
|
220
|
+
expect(result).toBeNull();
|
|
106
221
|
});
|
|
107
|
-
let result = null;
|
|
108
|
-
const listener = (event) => {
|
|
109
|
-
result = event;
|
|
110
|
-
};
|
|
111
|
-
await eventBusA.addListener(TestEventA, listener);
|
|
112
|
-
await eventBusA.removeListener(TestEventA, listener);
|
|
113
|
-
await eventBusA.dispatch(event);
|
|
114
|
-
await delay(TTL);
|
|
115
|
-
expect(result).toBeNull();
|
|
116
222
|
});
|
|
117
223
|
});
|
|
118
|
-
describe("method: addListenerMany, removeListenerMany,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
224
|
+
describe("method: addListenerMany, removeListenerMany, dispatchMany", () => {
|
|
225
|
+
describe("Should be null when listener is added and event is not triggered", () => {
|
|
226
|
+
test("Object literal listener", async () => {
|
|
227
|
+
const listener = {
|
|
228
|
+
resultA: null,
|
|
229
|
+
resultB: null,
|
|
230
|
+
invoke(event) {
|
|
231
|
+
if (event instanceof AddEvent) {
|
|
232
|
+
this.resultA = event;
|
|
233
|
+
}
|
|
234
|
+
if (event instanceof SubEvent) {
|
|
235
|
+
this.resultB = event;
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
240
|
+
expect(listener.resultA).toBeNull();
|
|
241
|
+
expect(listener.resultB).toBeNull();
|
|
242
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
123
243
|
});
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
244
|
+
test("Class instance listener", async () => {
|
|
245
|
+
class Listener {
|
|
246
|
+
resultA = null;
|
|
247
|
+
resultB = null;
|
|
248
|
+
invoke(event) {
|
|
249
|
+
if (event instanceof AddEvent) {
|
|
250
|
+
this.resultA = event;
|
|
251
|
+
}
|
|
252
|
+
if (event instanceof SubEvent) {
|
|
253
|
+
this.resultB = event;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const listener = new Listener();
|
|
258
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
259
|
+
expect(listener.resultA).toBeNull();
|
|
260
|
+
expect(listener.resultB).toBeNull();
|
|
261
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
129
262
|
});
|
|
130
|
-
|
|
131
|
-
|
|
263
|
+
test("Function listener", async () => {
|
|
264
|
+
let resultA = null;
|
|
265
|
+
let resultB = null;
|
|
266
|
+
const listener = (event) => {
|
|
267
|
+
if (event instanceof AddEvent) {
|
|
268
|
+
resultA = event;
|
|
269
|
+
}
|
|
270
|
+
if (event instanceof SubEvent) {
|
|
271
|
+
resultB = event;
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
275
|
+
expect(resultA).toBeNull();
|
|
276
|
+
expect(resultB).toBeNull();
|
|
277
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
132
278
|
});
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
279
|
+
});
|
|
280
|
+
describe("Should be AddEvent and SubEvent when listener is added and event is triggered", () => {
|
|
281
|
+
test("Object literal listener", async () => {
|
|
282
|
+
const listener = {
|
|
283
|
+
resultA: null,
|
|
284
|
+
resultB: null,
|
|
285
|
+
invoke(event) {
|
|
286
|
+
if (event instanceof AddEvent) {
|
|
287
|
+
this.resultA = event;
|
|
288
|
+
}
|
|
289
|
+
if (event instanceof SubEvent) {
|
|
290
|
+
this.resultB = event;
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
295
|
+
const addEvent = new AddEvent({
|
|
296
|
+
a: 1,
|
|
297
|
+
b: 2,
|
|
298
|
+
});
|
|
299
|
+
const subEvent = new SubEvent({
|
|
300
|
+
c: 1,
|
|
301
|
+
d: 2,
|
|
302
|
+
});
|
|
303
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
304
|
+
await delay(TTL);
|
|
305
|
+
expect(listener.resultA).toEqual(addEvent);
|
|
306
|
+
expect(listener.resultA).toBeInstanceOf(AddEvent);
|
|
307
|
+
expect(listener.resultB).toEqual(subEvent);
|
|
308
|
+
expect(listener.resultB).toBeInstanceOf(SubEvent);
|
|
309
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
310
|
+
});
|
|
311
|
+
test("Class instance listener", async () => {
|
|
312
|
+
class Listener {
|
|
313
|
+
resultA = null;
|
|
314
|
+
resultB = null;
|
|
315
|
+
invoke(event) {
|
|
316
|
+
if (event instanceof AddEvent) {
|
|
317
|
+
this.resultA = event;
|
|
318
|
+
}
|
|
319
|
+
if (event instanceof SubEvent) {
|
|
320
|
+
this.resultB = event;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
141
323
|
}
|
|
324
|
+
const listener = new Listener();
|
|
325
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
326
|
+
const addEvent = new AddEvent({
|
|
327
|
+
a: 1,
|
|
328
|
+
b: 2,
|
|
329
|
+
});
|
|
330
|
+
const subEvent = new SubEvent({
|
|
331
|
+
c: 1,
|
|
332
|
+
d: 2,
|
|
333
|
+
});
|
|
334
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
335
|
+
await delay(TTL);
|
|
336
|
+
expect(listener.resultA).toEqual(addEvent);
|
|
337
|
+
expect(listener.resultA).toBeInstanceOf(AddEvent);
|
|
338
|
+
expect(listener.resultB).toEqual(subEvent);
|
|
339
|
+
expect(listener.resultB).toBeInstanceOf(SubEvent);
|
|
340
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
341
|
+
});
|
|
342
|
+
test("Function listener", async () => {
|
|
343
|
+
let resultA = null;
|
|
344
|
+
let resultB = null;
|
|
345
|
+
const listener = (event) => {
|
|
346
|
+
if (event instanceof AddEvent) {
|
|
347
|
+
resultA = event;
|
|
348
|
+
}
|
|
349
|
+
if (event instanceof SubEvent) {
|
|
350
|
+
resultB = event;
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
354
|
+
const addEvent = new AddEvent({
|
|
355
|
+
a: 1,
|
|
356
|
+
b: 2,
|
|
357
|
+
});
|
|
358
|
+
const subEvent = new SubEvent({
|
|
359
|
+
c: 1,
|
|
360
|
+
d: 2,
|
|
361
|
+
});
|
|
362
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
363
|
+
await delay(TTL);
|
|
364
|
+
expect(resultA).toEqual(addEvent);
|
|
365
|
+
expect(resultA).toBeInstanceOf(AddEvent);
|
|
366
|
+
expect(resultB).toEqual(subEvent);
|
|
367
|
+
expect(resultB).toBeInstanceOf(SubEvent);
|
|
368
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
142
369
|
});
|
|
143
|
-
await eventBusA.dispatchMany([event_1, event_2]);
|
|
144
|
-
await delay(TTL);
|
|
145
|
-
expect(result_1).toEqual(event_1);
|
|
146
|
-
expect(result_1).toBeInstanceOf(TestEventA);
|
|
147
|
-
expect(result_2).toEqual(event_2);
|
|
148
|
-
expect(result_2).toBeInstanceOf(TestEventB);
|
|
149
370
|
});
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
371
|
+
describe("Should be null when listener removed and event is triggered", () => {
|
|
372
|
+
test("Object literal listener", async () => {
|
|
373
|
+
const listener = {
|
|
374
|
+
resultA: null,
|
|
375
|
+
resultB: null,
|
|
376
|
+
invoke(event) {
|
|
377
|
+
if (event instanceof AddEvent) {
|
|
378
|
+
this.resultA = event;
|
|
379
|
+
}
|
|
380
|
+
if (event instanceof SubEvent) {
|
|
381
|
+
this.resultB = event;
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
};
|
|
385
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
386
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
387
|
+
const addEvent = new AddEvent({
|
|
388
|
+
a: 1,
|
|
389
|
+
b: 2,
|
|
390
|
+
});
|
|
391
|
+
const subEvent = new SubEvent({
|
|
392
|
+
c: 1,
|
|
393
|
+
d: 2,
|
|
394
|
+
});
|
|
395
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
396
|
+
await delay(TTL);
|
|
397
|
+
expect(listener.resultA).toBeNull();
|
|
398
|
+
expect(listener.resultB).toBeNull();
|
|
153
399
|
});
|
|
154
|
-
|
|
155
|
-
|
|
400
|
+
test("Class instance listener", async () => {
|
|
401
|
+
class Listener {
|
|
402
|
+
resultA = null;
|
|
403
|
+
resultB = null;
|
|
404
|
+
invoke(event) {
|
|
405
|
+
if (event instanceof AddEvent) {
|
|
406
|
+
this.resultA = event;
|
|
407
|
+
}
|
|
408
|
+
if (event instanceof SubEvent) {
|
|
409
|
+
this.resultB = event;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
const listener = new Listener();
|
|
414
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
415
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
416
|
+
const addEvent = new AddEvent({
|
|
417
|
+
a: 1,
|
|
418
|
+
b: 2,
|
|
419
|
+
});
|
|
420
|
+
const subEvent = new SubEvent({
|
|
421
|
+
c: 1,
|
|
422
|
+
d: 2,
|
|
423
|
+
});
|
|
424
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
425
|
+
await delay(TTL);
|
|
426
|
+
expect(listener.resultA).toBeNull();
|
|
427
|
+
expect(listener.resultB).toBeNull();
|
|
428
|
+
});
|
|
429
|
+
test("Function listener", async () => {
|
|
430
|
+
let resultA = null;
|
|
431
|
+
let resultB = null;
|
|
432
|
+
const listener = (event) => {
|
|
433
|
+
if (event instanceof AddEvent) {
|
|
434
|
+
resultA = event;
|
|
435
|
+
}
|
|
436
|
+
if (event instanceof SubEvent) {
|
|
437
|
+
resultB = event;
|
|
438
|
+
}
|
|
439
|
+
};
|
|
440
|
+
await eventBusA.addListenerMany([AddEvent, SubEvent], listener);
|
|
441
|
+
await eventBusA.removeListenerMany([AddEvent, SubEvent], listener);
|
|
442
|
+
const addEvent = new AddEvent({
|
|
443
|
+
a: 1,
|
|
444
|
+
b: 2,
|
|
445
|
+
});
|
|
446
|
+
const subEvent = new SubEvent({
|
|
447
|
+
c: 1,
|
|
448
|
+
d: 2,
|
|
449
|
+
});
|
|
450
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
451
|
+
await delay(TTL);
|
|
452
|
+
expect(resultA).toBeNull();
|
|
453
|
+
expect(resultB).toBeNull();
|
|
156
454
|
});
|
|
157
|
-
let result = null;
|
|
158
|
-
const listener = (event) => {
|
|
159
|
-
result = event;
|
|
160
|
-
};
|
|
161
|
-
await eventBusA.addListenerMany([TestEventA, TestEventB], listener);
|
|
162
|
-
await eventBusA.removeListenerMany([TestEventA, TestEventB], listener);
|
|
163
|
-
await eventBusA.dispatchMany([event_A, event_B]);
|
|
164
|
-
await delay(TTL);
|
|
165
|
-
expect(result).toBeNull();
|
|
166
455
|
});
|
|
167
456
|
});
|
|
168
|
-
describe("method: subscribe", () => {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
457
|
+
describe("method: subscribe, dispatch", () => {
|
|
458
|
+
describe("Should be null when listener is added and event is not triggered", () => {
|
|
459
|
+
test("Object literal listener", async () => {
|
|
460
|
+
const listener = {
|
|
461
|
+
result: null,
|
|
462
|
+
invoke(event) {
|
|
463
|
+
this.result = event;
|
|
464
|
+
},
|
|
465
|
+
};
|
|
466
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
467
|
+
expect(listener.result).toBeNull();
|
|
468
|
+
await unsubscribe();
|
|
469
|
+
});
|
|
470
|
+
test("Class instance listener", async () => {
|
|
471
|
+
class Listener {
|
|
472
|
+
result = null;
|
|
473
|
+
invoke(event) {
|
|
474
|
+
this.result = event;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
const listener = new Listener();
|
|
478
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
479
|
+
expect(listener.result).toBeNull();
|
|
480
|
+
await unsubscribe();
|
|
481
|
+
});
|
|
482
|
+
test("Function listener", async () => {
|
|
483
|
+
let result = null;
|
|
484
|
+
const listener = (event) => {
|
|
485
|
+
result = event;
|
|
486
|
+
};
|
|
487
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
488
|
+
expect(result).toBeNull();
|
|
489
|
+
await unsubscribe();
|
|
173
490
|
});
|
|
174
|
-
expect(result).toBeNull();
|
|
175
491
|
});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
492
|
+
describe("Should be AddEvent when listener is added and event is triggered", () => {
|
|
493
|
+
test("Object literal listener", async () => {
|
|
494
|
+
const listener = {
|
|
495
|
+
result: null,
|
|
496
|
+
invoke(event) {
|
|
497
|
+
this.result = event;
|
|
498
|
+
},
|
|
499
|
+
};
|
|
500
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
501
|
+
const event = new AddEvent({
|
|
502
|
+
a: 1,
|
|
503
|
+
b: 2,
|
|
504
|
+
});
|
|
505
|
+
await eventBusA.dispatch(event);
|
|
506
|
+
await delay(TTL);
|
|
507
|
+
expect(listener.result).toEqual(event);
|
|
508
|
+
expect(listener.result).toBeInstanceOf(AddEvent);
|
|
509
|
+
await unsubscribe();
|
|
179
510
|
});
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
511
|
+
test("Class instance listener", async () => {
|
|
512
|
+
class Listener {
|
|
513
|
+
result = null;
|
|
514
|
+
invoke(event) {
|
|
515
|
+
this.result = event;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
const listener = new Listener();
|
|
519
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
520
|
+
const event = new AddEvent({
|
|
521
|
+
a: 1,
|
|
522
|
+
b: 2,
|
|
523
|
+
});
|
|
524
|
+
await eventBusA.dispatch(event);
|
|
525
|
+
await delay(TTL);
|
|
526
|
+
expect(listener.result).toEqual(event);
|
|
527
|
+
expect(listener.result).toBeInstanceOf(AddEvent);
|
|
528
|
+
await unsubscribe();
|
|
529
|
+
});
|
|
530
|
+
test("Function listener", async () => {
|
|
531
|
+
let result = null;
|
|
532
|
+
const listener = (event) => {
|
|
533
|
+
result = event;
|
|
534
|
+
};
|
|
535
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
536
|
+
const event = new AddEvent({
|
|
537
|
+
a: 1,
|
|
538
|
+
b: 2,
|
|
539
|
+
});
|
|
540
|
+
await eventBusA.dispatch(event);
|
|
541
|
+
await delay(TTL);
|
|
542
|
+
expect(result).toEqual(event);
|
|
543
|
+
expect(result).toBeInstanceOf(AddEvent);
|
|
544
|
+
await unsubscribe();
|
|
183
545
|
});
|
|
184
|
-
await delay(TTL);
|
|
185
|
-
await eventBusA.dispatch(event);
|
|
186
|
-
expect(result).toEqual(event);
|
|
187
|
-
expect(result).toBeInstanceOf(TestEventA);
|
|
188
546
|
});
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
547
|
+
describe("Should be null when listener removed and event is triggered", () => {
|
|
548
|
+
test("Object literal listener", async () => {
|
|
549
|
+
const listener = {
|
|
550
|
+
result: null,
|
|
551
|
+
invoke(event) {
|
|
552
|
+
this.result = event;
|
|
553
|
+
},
|
|
554
|
+
};
|
|
555
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
556
|
+
await unsubscribe();
|
|
557
|
+
const event = new AddEvent({
|
|
558
|
+
a: 1,
|
|
559
|
+
b: 2,
|
|
560
|
+
});
|
|
561
|
+
await eventBusA.dispatch(event);
|
|
562
|
+
await delay(TTL);
|
|
563
|
+
expect(listener.result).toBeNull();
|
|
564
|
+
});
|
|
565
|
+
test("Class instance listener", async () => {
|
|
566
|
+
class Listener {
|
|
567
|
+
result = null;
|
|
568
|
+
invoke(event) {
|
|
569
|
+
this.result = event;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
const listener = new Listener();
|
|
573
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
574
|
+
await unsubscribe();
|
|
575
|
+
const event = new AddEvent({
|
|
576
|
+
a: 1,
|
|
577
|
+
b: 2,
|
|
578
|
+
});
|
|
579
|
+
await eventBusA.dispatch(event);
|
|
580
|
+
await delay(TTL);
|
|
581
|
+
expect(listener.result).toBeNull();
|
|
582
|
+
});
|
|
583
|
+
test("Function listener", async () => {
|
|
584
|
+
let result = null;
|
|
585
|
+
const listener = (event) => {
|
|
586
|
+
result = event;
|
|
587
|
+
};
|
|
588
|
+
const unsubscribe = await eventBusA.subscribe(AddEvent, listener);
|
|
589
|
+
await unsubscribe();
|
|
590
|
+
const event = new AddEvent({
|
|
591
|
+
a: 1,
|
|
592
|
+
b: 2,
|
|
593
|
+
});
|
|
594
|
+
await eventBusA.dispatch(event);
|
|
595
|
+
await delay(TTL);
|
|
596
|
+
expect(result).toBeNull();
|
|
192
597
|
});
|
|
193
|
-
let result = null;
|
|
194
|
-
const listener = (event) => {
|
|
195
|
-
result = event;
|
|
196
|
-
};
|
|
197
|
-
const unsubscribe = await eventBusA.subscribe(TestEventA, listener);
|
|
198
|
-
await unsubscribe();
|
|
199
|
-
await eventBusA.dispatch(event);
|
|
200
|
-
await delay(TTL);
|
|
201
|
-
expect(result).toBeNull();
|
|
202
598
|
});
|
|
203
599
|
});
|
|
204
|
-
describe("method: subscribeMany", () => {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
600
|
+
describe("method: subscribeMany, dispatchMany", () => {
|
|
601
|
+
describe("Should be null when listener is added and event is not triggered", () => {
|
|
602
|
+
test("Object literal listener", async () => {
|
|
603
|
+
const listener = {
|
|
604
|
+
resultA: null,
|
|
605
|
+
resultB: null,
|
|
606
|
+
invoke(event) {
|
|
607
|
+
if (event instanceof AddEvent) {
|
|
608
|
+
this.resultA = event;
|
|
609
|
+
}
|
|
610
|
+
if (event instanceof SubEvent) {
|
|
611
|
+
this.resultB = event;
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
};
|
|
615
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
616
|
+
expect(listener.resultA).toBeNull();
|
|
617
|
+
expect(listener.resultB).toBeNull();
|
|
618
|
+
await unsubscribe();
|
|
619
|
+
});
|
|
620
|
+
test("Class instance listener", async () => {
|
|
621
|
+
class Listener {
|
|
622
|
+
resultA = null;
|
|
623
|
+
resultB = null;
|
|
624
|
+
invoke(event) {
|
|
625
|
+
if (event instanceof AddEvent) {
|
|
626
|
+
this.resultA = event;
|
|
627
|
+
}
|
|
628
|
+
if (event instanceof SubEvent) {
|
|
629
|
+
this.resultB = event;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
const listener = new Listener();
|
|
634
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
635
|
+
expect(listener.resultA).toBeNull();
|
|
636
|
+
expect(listener.resultB).toBeNull();
|
|
637
|
+
await unsubscribe();
|
|
638
|
+
});
|
|
639
|
+
test("Function listener", async () => {
|
|
640
|
+
let resultA = null;
|
|
641
|
+
let resultB = null;
|
|
642
|
+
const listener = (event) => {
|
|
643
|
+
if (event instanceof AddEvent) {
|
|
644
|
+
resultA = event;
|
|
645
|
+
}
|
|
646
|
+
if (event instanceof SubEvent) {
|
|
647
|
+
resultB = event;
|
|
648
|
+
}
|
|
649
|
+
};
|
|
650
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
651
|
+
expect(resultA).toBeNull();
|
|
652
|
+
expect(resultB).toBeNull();
|
|
653
|
+
await unsubscribe();
|
|
209
654
|
});
|
|
210
|
-
expect(result).toBeNull();
|
|
211
655
|
});
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
656
|
+
describe("Should be AddEvent and SubEvent when listener is added and event is triggered", () => {
|
|
657
|
+
test("Object literal listener", async () => {
|
|
658
|
+
const listener = {
|
|
659
|
+
resultA: null,
|
|
660
|
+
resultB: null,
|
|
661
|
+
invoke(event) {
|
|
662
|
+
if (event instanceof AddEvent) {
|
|
663
|
+
this.resultA = event;
|
|
664
|
+
}
|
|
665
|
+
if (event instanceof SubEvent) {
|
|
666
|
+
this.resultB = event;
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
};
|
|
670
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
671
|
+
const addEvent = new AddEvent({
|
|
672
|
+
a: 1,
|
|
673
|
+
b: 2,
|
|
674
|
+
});
|
|
675
|
+
const subEvent = new SubEvent({
|
|
676
|
+
c: 1,
|
|
677
|
+
d: 2,
|
|
678
|
+
});
|
|
679
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
680
|
+
await delay(TTL);
|
|
681
|
+
expect(listener.resultA).toEqual(addEvent);
|
|
682
|
+
expect(listener.resultA).toBeInstanceOf(AddEvent);
|
|
683
|
+
expect(listener.resultB).toEqual(subEvent);
|
|
684
|
+
expect(listener.resultB).toBeInstanceOf(SubEvent);
|
|
685
|
+
await unsubscribe();
|
|
686
|
+
});
|
|
687
|
+
test("Class instance listener", async () => {
|
|
688
|
+
class Listener {
|
|
689
|
+
resultA = null;
|
|
690
|
+
resultB = null;
|
|
691
|
+
invoke(event) {
|
|
692
|
+
if (event instanceof AddEvent) {
|
|
693
|
+
this.resultA = event;
|
|
694
|
+
}
|
|
695
|
+
if (event instanceof SubEvent) {
|
|
696
|
+
this.resultB = event;
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
const listener = new Listener();
|
|
701
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
702
|
+
const addEvent = new AddEvent({
|
|
703
|
+
a: 1,
|
|
704
|
+
b: 2,
|
|
705
|
+
});
|
|
706
|
+
const subEvent = new SubEvent({
|
|
707
|
+
c: 1,
|
|
708
|
+
d: 2,
|
|
709
|
+
});
|
|
710
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
711
|
+
await delay(TTL);
|
|
712
|
+
expect(listener.resultA).toEqual(addEvent);
|
|
713
|
+
expect(listener.resultA).toBeInstanceOf(AddEvent);
|
|
714
|
+
expect(listener.resultB).toEqual(subEvent);
|
|
715
|
+
expect(listener.resultB).toBeInstanceOf(SubEvent);
|
|
716
|
+
await unsubscribe();
|
|
717
|
+
});
|
|
718
|
+
test("Function listener", async () => {
|
|
719
|
+
let resultA = null;
|
|
720
|
+
let resultB = null;
|
|
721
|
+
const listener = (event) => {
|
|
722
|
+
if (event instanceof AddEvent) {
|
|
723
|
+
resultA = event;
|
|
724
|
+
}
|
|
725
|
+
if (event instanceof SubEvent) {
|
|
726
|
+
resultB = event;
|
|
727
|
+
}
|
|
728
|
+
};
|
|
729
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
730
|
+
const addEvent = new AddEvent({
|
|
731
|
+
a: 1,
|
|
732
|
+
b: 2,
|
|
733
|
+
});
|
|
734
|
+
const subEvent = new SubEvent({
|
|
735
|
+
c: 1,
|
|
736
|
+
d: 2,
|
|
737
|
+
});
|
|
738
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
739
|
+
await delay(TTL);
|
|
740
|
+
expect(resultA).toEqual(addEvent);
|
|
741
|
+
expect(resultA).toBeInstanceOf(AddEvent);
|
|
742
|
+
expect(resultB).toEqual(subEvent);
|
|
743
|
+
expect(resultB).toBeInstanceOf(SubEvent);
|
|
744
|
+
await unsubscribe();
|
|
215
745
|
});
|
|
216
|
-
|
|
217
|
-
|
|
746
|
+
});
|
|
747
|
+
describe("Should be null when listener removed and event is triggered", () => {
|
|
748
|
+
test("Object literal listener", async () => {
|
|
749
|
+
const listener = {
|
|
750
|
+
resultA: null,
|
|
751
|
+
resultB: null,
|
|
752
|
+
invoke(event) {
|
|
753
|
+
if (event instanceof AddEvent) {
|
|
754
|
+
this.resultA = event;
|
|
755
|
+
}
|
|
756
|
+
if (event instanceof SubEvent) {
|
|
757
|
+
this.resultB = event;
|
|
758
|
+
}
|
|
759
|
+
},
|
|
760
|
+
};
|
|
761
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
762
|
+
await unsubscribe();
|
|
763
|
+
const addEvent = new AddEvent({
|
|
764
|
+
a: 1,
|
|
765
|
+
b: 2,
|
|
766
|
+
});
|
|
767
|
+
const subEvent = new SubEvent({
|
|
768
|
+
c: 1,
|
|
769
|
+
d: 2,
|
|
770
|
+
});
|
|
771
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
772
|
+
await delay(TTL);
|
|
773
|
+
expect(listener.resultA).toBeNull();
|
|
774
|
+
expect(listener.resultB).toBeNull();
|
|
218
775
|
});
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
776
|
+
test("Class instance listener", async () => {
|
|
777
|
+
class Listener {
|
|
778
|
+
resultA = null;
|
|
779
|
+
resultB = null;
|
|
780
|
+
invoke(event) {
|
|
781
|
+
if (event instanceof AddEvent) {
|
|
782
|
+
this.resultA = event;
|
|
783
|
+
}
|
|
784
|
+
if (event instanceof SubEvent) {
|
|
785
|
+
this.resultB = event;
|
|
786
|
+
}
|
|
787
|
+
}
|
|
224
788
|
}
|
|
225
|
-
|
|
226
|
-
|
|
789
|
+
const listener = new Listener();
|
|
790
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
791
|
+
await unsubscribe();
|
|
792
|
+
const addEvent = new AddEvent({
|
|
793
|
+
a: 1,
|
|
794
|
+
b: 2,
|
|
795
|
+
});
|
|
796
|
+
const subEvent = new SubEvent({
|
|
797
|
+
c: 1,
|
|
798
|
+
d: 2,
|
|
799
|
+
});
|
|
800
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
801
|
+
await delay(TTL);
|
|
802
|
+
expect(listener.resultA).toBeNull();
|
|
803
|
+
expect(listener.resultB).toBeNull();
|
|
804
|
+
});
|
|
805
|
+
test("Function listener", async () => {
|
|
806
|
+
let resultA = null;
|
|
807
|
+
let resultB = null;
|
|
808
|
+
const listener = (event) => {
|
|
809
|
+
if (event instanceof AddEvent) {
|
|
810
|
+
resultA = event;
|
|
811
|
+
}
|
|
812
|
+
if (event instanceof SubEvent) {
|
|
813
|
+
resultB = event;
|
|
814
|
+
}
|
|
815
|
+
};
|
|
816
|
+
const unsubscribe = await eventBusA.subscribeMany([AddEvent, SubEvent], listener);
|
|
817
|
+
await unsubscribe();
|
|
818
|
+
const addEvent = new AddEvent({
|
|
819
|
+
a: 1,
|
|
820
|
+
b: 2,
|
|
821
|
+
});
|
|
822
|
+
const subEvent = new SubEvent({
|
|
823
|
+
c: 1,
|
|
824
|
+
d: 2,
|
|
825
|
+
});
|
|
826
|
+
await eventBusA.dispatchMany([addEvent, subEvent]);
|
|
827
|
+
await delay(TTL);
|
|
828
|
+
expect(resultA).toBeNull();
|
|
829
|
+
expect(resultB).toBeNull();
|
|
830
|
+
});
|
|
831
|
+
});
|
|
832
|
+
});
|
|
833
|
+
describe("method: listenOnce", () => {
|
|
834
|
+
describe("Should be null when listener added and event is not triggered", () => {
|
|
835
|
+
test("Object literal listener", async () => {
|
|
836
|
+
const listener = {
|
|
837
|
+
result: null,
|
|
838
|
+
invoke(event) {
|
|
839
|
+
this.result = event;
|
|
840
|
+
},
|
|
841
|
+
};
|
|
842
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
843
|
+
expect(listener.result).toBeNull();
|
|
844
|
+
});
|
|
845
|
+
test("Class instance listener", async () => {
|
|
846
|
+
class Listener {
|
|
847
|
+
result = null;
|
|
848
|
+
invoke(event) {
|
|
849
|
+
this.result = event;
|
|
850
|
+
}
|
|
227
851
|
}
|
|
852
|
+
const listener = new Listener();
|
|
853
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
854
|
+
expect(listener.result).toBeNull();
|
|
855
|
+
});
|
|
856
|
+
test("Function listener", async () => {
|
|
857
|
+
let result = null;
|
|
858
|
+
const listener = (event) => {
|
|
859
|
+
result = event;
|
|
860
|
+
};
|
|
861
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
862
|
+
expect(result).toBeNull();
|
|
228
863
|
});
|
|
229
|
-
await delay(TTL);
|
|
230
|
-
await eventBusA.dispatchMany([event_1, event_2]);
|
|
231
|
-
expect(result_1).toEqual(event_1);
|
|
232
|
-
expect(result_1).toBeInstanceOf(TestEventA);
|
|
233
|
-
expect(result_2).toEqual(event_2);
|
|
234
|
-
expect(result_2).toBeInstanceOf(TestEventB);
|
|
235
864
|
});
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
865
|
+
describe("Should be AddEvent when listener added and event is triggered", () => {
|
|
866
|
+
test("Object literal listener", async () => {
|
|
867
|
+
const listener = {
|
|
868
|
+
result: null,
|
|
869
|
+
invoke(event) {
|
|
870
|
+
this.result = event;
|
|
871
|
+
},
|
|
872
|
+
};
|
|
873
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
874
|
+
const event = new AddEvent({
|
|
875
|
+
a: 1,
|
|
876
|
+
b: 2,
|
|
877
|
+
});
|
|
878
|
+
await eventBusA.dispatch(event);
|
|
879
|
+
await delay(TTL);
|
|
880
|
+
expect(listener.result).toEqual(event);
|
|
881
|
+
expect(listener.result).toBeInstanceOf(AddEvent);
|
|
239
882
|
});
|
|
240
|
-
|
|
241
|
-
|
|
883
|
+
test("Class instance listener", async () => {
|
|
884
|
+
class Listener {
|
|
885
|
+
result = null;
|
|
886
|
+
invoke(event) {
|
|
887
|
+
this.result = event;
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
const listener = new Listener();
|
|
891
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
892
|
+
const event = new AddEvent({
|
|
893
|
+
a: 1,
|
|
894
|
+
b: 2,
|
|
895
|
+
});
|
|
896
|
+
await eventBusA.dispatch(event);
|
|
897
|
+
await delay(TTL);
|
|
898
|
+
expect(listener.result).toEqual(event);
|
|
899
|
+
expect(listener.result).toBeInstanceOf(AddEvent);
|
|
900
|
+
});
|
|
901
|
+
test("Function listener", async () => {
|
|
902
|
+
let result = null;
|
|
903
|
+
const listener = (event) => {
|
|
904
|
+
result = event;
|
|
905
|
+
};
|
|
906
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
907
|
+
const event = new AddEvent({
|
|
908
|
+
a: 1,
|
|
909
|
+
b: 2,
|
|
910
|
+
});
|
|
911
|
+
await eventBusA.dispatch(event);
|
|
912
|
+
await delay(TTL);
|
|
913
|
+
expect(result).toEqual(event);
|
|
914
|
+
expect(result).toBeInstanceOf(AddEvent);
|
|
915
|
+
});
|
|
916
|
+
});
|
|
917
|
+
describe("Should only listen for event once", () => {
|
|
918
|
+
test("Object literal listener", async () => {
|
|
919
|
+
const listener = {
|
|
920
|
+
i: 0,
|
|
921
|
+
invoke(_event) {
|
|
922
|
+
this.i++;
|
|
923
|
+
},
|
|
924
|
+
};
|
|
925
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
926
|
+
const event = new AddEvent({
|
|
927
|
+
a: 1,
|
|
928
|
+
b: 2,
|
|
929
|
+
});
|
|
930
|
+
await eventBusA.dispatch(event);
|
|
931
|
+
await eventBusA.dispatch(event);
|
|
932
|
+
await delay(TTL);
|
|
933
|
+
expect(listener.i).toBe(1);
|
|
934
|
+
});
|
|
935
|
+
test("Class instance listener", async () => {
|
|
936
|
+
class Listener {
|
|
937
|
+
i = 0;
|
|
938
|
+
invoke(_event) {
|
|
939
|
+
this.i++;
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
const listener = new Listener();
|
|
943
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
944
|
+
const event = new AddEvent({
|
|
945
|
+
a: 1,
|
|
946
|
+
b: 2,
|
|
947
|
+
});
|
|
948
|
+
await eventBusA.dispatch(event);
|
|
949
|
+
await eventBusA.dispatch(event);
|
|
950
|
+
await delay(TTL);
|
|
951
|
+
expect(listener.i).toBe(1);
|
|
952
|
+
});
|
|
953
|
+
test("Function listener", async () => {
|
|
954
|
+
let i = 0;
|
|
955
|
+
const listener = () => {
|
|
956
|
+
i++;
|
|
957
|
+
};
|
|
958
|
+
await eventBusA.listenOnce(AddEvent, listener);
|
|
959
|
+
const event = new AddEvent({
|
|
960
|
+
a: 1,
|
|
961
|
+
b: 2,
|
|
962
|
+
});
|
|
963
|
+
await eventBusA.dispatch(event);
|
|
964
|
+
await eventBusA.dispatch(event);
|
|
965
|
+
await delay(TTL);
|
|
966
|
+
expect(i).toBe(1);
|
|
242
967
|
});
|
|
243
|
-
let result = null;
|
|
244
|
-
const listener = (event) => {
|
|
245
|
-
result = event;
|
|
246
|
-
};
|
|
247
|
-
const unsubscribe = await eventBusA.subscribeMany([TestEventA, TestEventB], listener);
|
|
248
|
-
await unsubscribe();
|
|
249
|
-
await eventBusA.dispatchMany([event_A, event_B]);
|
|
250
|
-
await delay(TTL);
|
|
251
|
-
expect(result).toBeNull();
|
|
252
968
|
});
|
|
253
969
|
});
|
|
254
|
-
describe("method:
|
|
255
|
-
test("Should be null when listener added and event is not triggered",
|
|
970
|
+
describe("method: asPromise", () => {
|
|
971
|
+
test("Should be null when listener added and event is not triggered", () => {
|
|
256
972
|
let result = null;
|
|
257
|
-
|
|
973
|
+
const listener = (event) => {
|
|
258
974
|
result = event;
|
|
259
|
-
}
|
|
975
|
+
};
|
|
976
|
+
eventBusA.asPromise(AddEvent).then(listener);
|
|
260
977
|
expect(result).toBeNull();
|
|
261
978
|
});
|
|
262
|
-
test("Should be
|
|
263
|
-
const event = new TestEventA({
|
|
264
|
-
type: TestEventA.name,
|
|
265
|
-
});
|
|
979
|
+
test("Should be AddEvent when listener added and event is triggered", async () => {
|
|
266
980
|
let result = null;
|
|
267
|
-
|
|
981
|
+
const listener = (event) => {
|
|
268
982
|
result = event;
|
|
983
|
+
};
|
|
984
|
+
eventBusA.asPromise(AddEvent).then(listener);
|
|
985
|
+
const event = new AddEvent({
|
|
986
|
+
a: 1,
|
|
987
|
+
b: 2,
|
|
269
988
|
});
|
|
270
989
|
await eventBusA.dispatch(event);
|
|
271
990
|
await delay(TTL);
|
|
272
991
|
expect(result).toEqual(event);
|
|
273
|
-
expect(result).toBeInstanceOf(
|
|
274
|
-
});
|
|
275
|
-
test("Should only listen for event once", async () => {
|
|
276
|
-
const event = new TestEventA({
|
|
277
|
-
type: TestEventA.name,
|
|
278
|
-
});
|
|
279
|
-
let i = 0;
|
|
280
|
-
await eventBusA.listenOnce(TestEventA, () => {
|
|
281
|
-
i++;
|
|
282
|
-
});
|
|
283
|
-
await eventBusA.dispatch(event);
|
|
284
|
-
await eventBusA.dispatch(event);
|
|
285
|
-
await delay(TTL);
|
|
286
|
-
expect(i).toBe(1);
|
|
992
|
+
expect(result).toBeInstanceOf(AddEvent);
|
|
287
993
|
});
|
|
288
994
|
});
|
|
289
995
|
});
|
|
290
996
|
describe("Group tests:", () => {
|
|
291
997
|
test("method: addListener / dispatch", async () => {
|
|
292
|
-
const event = new TestEventA({
|
|
293
|
-
type: TestEventA.name,
|
|
294
|
-
});
|
|
295
998
|
let result_a = null;
|
|
296
|
-
await eventBusA.addListener(
|
|
999
|
+
await eventBusA.addListener(AddEvent, (event) => {
|
|
297
1000
|
result_a = event;
|
|
298
1001
|
});
|
|
299
1002
|
let result_b = null;
|
|
300
|
-
await eventBusB.addListener(
|
|
1003
|
+
await eventBusB.addListener(AddEvent, (event) => {
|
|
301
1004
|
result_b = event;
|
|
302
1005
|
});
|
|
1006
|
+
const event = new AddEvent({
|
|
1007
|
+
a: 1,
|
|
1008
|
+
b: 2,
|
|
1009
|
+
});
|
|
303
1010
|
await eventBusA.dispatch(event);
|
|
1011
|
+
await delay(TTL);
|
|
304
1012
|
expect(result_a).toEqual(event);
|
|
305
|
-
expect(result_a).toBeInstanceOf(
|
|
1013
|
+
expect(result_a).toBeInstanceOf(AddEvent);
|
|
306
1014
|
expect(result_b).toBeNull();
|
|
307
1015
|
});
|
|
308
1016
|
test("method: addListenerMany / dispatch", async () => {
|
|
309
|
-
const event = new TestEventA({
|
|
310
|
-
type: "type",
|
|
311
|
-
});
|
|
312
1017
|
let result_a = null;
|
|
313
|
-
await eventBusA.addListenerMany([
|
|
1018
|
+
await eventBusA.addListenerMany([AddEvent], (event) => {
|
|
314
1019
|
result_a = event;
|
|
315
1020
|
});
|
|
316
1021
|
let result_b = null;
|
|
317
|
-
await eventBusB.addListenerMany([
|
|
1022
|
+
await eventBusB.addListenerMany([AddEvent], (event) => {
|
|
318
1023
|
result_b = event;
|
|
319
1024
|
});
|
|
1025
|
+
const event = new AddEvent({
|
|
1026
|
+
a: 1,
|
|
1027
|
+
b: 2,
|
|
1028
|
+
});
|
|
320
1029
|
await eventBusA.dispatch(event);
|
|
1030
|
+
await delay(TTL);
|
|
321
1031
|
expect(result_a).toEqual(event);
|
|
322
|
-
expect(result_a).toBeInstanceOf(
|
|
1032
|
+
expect(result_a).toBeInstanceOf(AddEvent);
|
|
323
1033
|
expect(result_b).toBeNull();
|
|
324
1034
|
});
|
|
325
1035
|
test("method: removeListener / addListener / dispatch", async () => {
|
|
326
|
-
const event = new TestEventA({
|
|
327
|
-
type: TestEventA.name,
|
|
328
|
-
});
|
|
329
1036
|
let result_a = null;
|
|
330
|
-
await eventBusA.addListener(
|
|
1037
|
+
await eventBusA.addListener(AddEvent, (event) => {
|
|
331
1038
|
result_a = event;
|
|
332
1039
|
});
|
|
333
1040
|
let result_b = null;
|
|
334
1041
|
const listenerB = (event) => {
|
|
335
1042
|
result_b = event;
|
|
336
1043
|
};
|
|
337
|
-
await eventBusB.addListener(
|
|
338
|
-
await eventBusB.removeListener(
|
|
1044
|
+
await eventBusB.addListener(AddEvent, listenerB);
|
|
1045
|
+
await eventBusB.removeListener(AddEvent, listenerB);
|
|
1046
|
+
const event = new AddEvent({
|
|
1047
|
+
a: 1,
|
|
1048
|
+
b: 2,
|
|
1049
|
+
});
|
|
339
1050
|
await eventBusA.dispatch(event);
|
|
340
1051
|
await eventBusB.dispatch(event);
|
|
1052
|
+
await delay(TTL);
|
|
341
1053
|
expect(result_a).toEqual(event);
|
|
342
|
-
expect(result_a).toBeInstanceOf(
|
|
1054
|
+
expect(result_a).toBeInstanceOf(AddEvent);
|
|
343
1055
|
expect(result_b).toBeNull();
|
|
344
1056
|
});
|
|
345
1057
|
test("method: removeListenerMany / addListener / dispatch", async () => {
|
|
346
|
-
const event = new TestEventA({
|
|
347
|
-
type: TestEventA.name,
|
|
348
|
-
});
|
|
349
1058
|
let result_a = null;
|
|
350
|
-
await eventBusA.addListener(
|
|
1059
|
+
await eventBusA.addListener(AddEvent, (event) => {
|
|
351
1060
|
result_a = event;
|
|
352
1061
|
});
|
|
353
1062
|
let result_b = null;
|
|
354
1063
|
const listenerB = (event) => {
|
|
355
1064
|
result_b = event;
|
|
356
1065
|
};
|
|
357
|
-
await eventBusB.addListener(
|
|
358
|
-
await eventBusB.removeListenerMany([
|
|
1066
|
+
await eventBusB.addListener(AddEvent, listenerB);
|
|
1067
|
+
await eventBusB.removeListenerMany([AddEvent], listenerB);
|
|
1068
|
+
const event = new AddEvent({
|
|
1069
|
+
a: 1,
|
|
1070
|
+
b: 2,
|
|
1071
|
+
});
|
|
359
1072
|
await eventBusA.dispatch(event);
|
|
360
1073
|
await eventBusB.dispatch(event);
|
|
1074
|
+
await delay(TTL);
|
|
361
1075
|
expect(result_a).toEqual(event);
|
|
362
|
-
expect(result_a).toBeInstanceOf(
|
|
1076
|
+
expect(result_a).toBeInstanceOf(AddEvent);
|
|
363
1077
|
expect(result_b).toBeNull();
|
|
364
1078
|
});
|
|
365
1079
|
test("method: subscribe / dispatch", async () => {
|
|
366
|
-
const event = new TestEventA({
|
|
367
|
-
type: TestEventA.name,
|
|
368
|
-
});
|
|
369
1080
|
let result_a = null;
|
|
370
|
-
await eventBusA.subscribe(
|
|
1081
|
+
await eventBusA.subscribe(AddEvent, (event) => {
|
|
371
1082
|
result_a = event;
|
|
372
1083
|
});
|
|
373
1084
|
let result_b = null;
|
|
374
1085
|
const listenerB = (event) => {
|
|
375
1086
|
result_b = event;
|
|
376
1087
|
};
|
|
377
|
-
const unsubscribe = await eventBusB.subscribe(
|
|
1088
|
+
const unsubscribe = await eventBusB.subscribe(AddEvent, listenerB);
|
|
378
1089
|
await unsubscribe();
|
|
1090
|
+
const event = new AddEvent({
|
|
1091
|
+
a: 1,
|
|
1092
|
+
b: 2,
|
|
1093
|
+
});
|
|
379
1094
|
await eventBusA.dispatch(event);
|
|
380
1095
|
await eventBusB.dispatch(event);
|
|
1096
|
+
await delay(TTL);
|
|
381
1097
|
expect(result_a).toEqual(event);
|
|
382
|
-
expect(result_a).toBeInstanceOf(
|
|
1098
|
+
expect(result_a).toBeInstanceOf(AddEvent);
|
|
383
1099
|
expect(result_b).toBeNull();
|
|
384
1100
|
});
|
|
385
1101
|
test("method: subscribeMany / dispatch", async () => {
|
|
386
|
-
const event = new TestEventA({
|
|
387
|
-
type: TestEventA.name,
|
|
388
|
-
});
|
|
389
1102
|
let result_a = null;
|
|
390
|
-
await eventBusA.subscribeMany([
|
|
1103
|
+
await eventBusA.subscribeMany([AddEvent], (event) => {
|
|
391
1104
|
result_a = event;
|
|
392
1105
|
});
|
|
393
1106
|
let result_b = null;
|
|
394
1107
|
const listenerB = (event) => {
|
|
395
1108
|
result_b = event;
|
|
396
1109
|
};
|
|
397
|
-
const unsubscribe = await eventBusB.subscribeMany([
|
|
1110
|
+
const unsubscribe = await eventBusB.subscribeMany([AddEvent], listenerB);
|
|
398
1111
|
await unsubscribe();
|
|
1112
|
+
const event = new AddEvent({
|
|
1113
|
+
a: 1,
|
|
1114
|
+
b: 2,
|
|
1115
|
+
});
|
|
399
1116
|
await eventBusA.dispatch(event);
|
|
400
1117
|
await eventBusB.dispatch(event);
|
|
1118
|
+
await delay(TTL);
|
|
1119
|
+
expect(result_a).toEqual(event);
|
|
1120
|
+
expect(result_a).toBeInstanceOf(AddEvent);
|
|
1121
|
+
expect(result_b).toBeNull();
|
|
1122
|
+
});
|
|
1123
|
+
test("method: listenOnce", async () => {
|
|
1124
|
+
let result_a = null;
|
|
1125
|
+
await eventBusA.listenOnce(AddEvent, (event) => {
|
|
1126
|
+
result_a = event;
|
|
1127
|
+
});
|
|
1128
|
+
let result_b = null;
|
|
1129
|
+
await eventBusB.listenOnce(AddEvent, (event) => {
|
|
1130
|
+
result_b = event;
|
|
1131
|
+
});
|
|
1132
|
+
const event = new AddEvent({
|
|
1133
|
+
a: 1,
|
|
1134
|
+
b: 2,
|
|
1135
|
+
});
|
|
1136
|
+
await eventBusA.dispatch(event);
|
|
1137
|
+
await delay(TTL);
|
|
1138
|
+
expect(result_a).toEqual(event);
|
|
1139
|
+
expect(result_a).toBeInstanceOf(AddEvent);
|
|
1140
|
+
expect(result_b).toBeNull();
|
|
1141
|
+
});
|
|
1142
|
+
test("method: asPromise", async () => {
|
|
1143
|
+
let result_a = null;
|
|
1144
|
+
eventBusA.asPromise(AddEvent).then((event) => {
|
|
1145
|
+
result_a = event;
|
|
1146
|
+
});
|
|
1147
|
+
let result_b = null;
|
|
1148
|
+
eventBusB.asPromise(AddEvent).then((event) => {
|
|
1149
|
+
result_b = event;
|
|
1150
|
+
});
|
|
1151
|
+
const event = new AddEvent({
|
|
1152
|
+
a: 1,
|
|
1153
|
+
b: 2,
|
|
1154
|
+
});
|
|
1155
|
+
await eventBusA.dispatch(event);
|
|
1156
|
+
await delay(TTL);
|
|
401
1157
|
expect(result_a).toEqual(event);
|
|
402
|
-
expect(result_a).toBeInstanceOf(
|
|
1158
|
+
expect(result_a).toBeInstanceOf(AddEvent);
|
|
403
1159
|
expect(result_b).toBeNull();
|
|
404
1160
|
});
|
|
405
1161
|
});
|