/** * @fileoverview * Various helpers for testing the components */ import { IEventEmitter } from '../src/interfaces/common'; export async function waitForEvents< EventList extends Record, Type extends Extract >( emitter: IEventEmitter, type: Type, callback: () => void, n: number = 1 ): Promise> { let counter = 0; const result = []; const disposers = []; return new Promise((resolve) => { const disposer = emitter.on(type, (event) => { result.push(event); if (++counter >= n) { setTimeout(() => { for (const disposer of disposers) { disposer.off(); } resolve(result); }, 0); } }); disposers.push(disposer); callback(); }); } export function defer() { let resolve: (result: T) => void; let reject: (error: any) => void; const promise = new Promise((nestedResolve, nestedReject) => { resolve = nestedResolve; }); return { resolve, reject, promise }; } export function omitUndefined(obj: T): Partial { const result: Partial = {}; for (const [k, v] of Object.entries(obj)) { if (v !== undefined) { result[k] = v; } } return result; }