packages/vscode-extension-web-ide/test-utils/EventEmitter.ts (19 lines of code) (raw):
import * as vscode from 'vscode';
import NodeEmitter from 'events';
/**
* This is an arbitrary name. The node event emitter supports multiple
* types of events per emitter but we need only one, so we hardcode it.
*/
const EVENT_NAME = 'test-event';
/**
* This is a test fake with simplified implementation of the vscode
* EventEmitter. Thanks to this fake we can unit test logic that uses
* vscode events.
*/
export class EventEmitter<T> implements vscode.EventEmitter<T> {
eventEmitter: NodeEmitter = new NodeEmitter();
event = (listener: (e: T) => any, thisArgs: any = {}): vscode.Disposable => {
const nodeListener = (e: T) => listener.bind(thisArgs)(e);
this.eventEmitter.on(EVENT_NAME, nodeListener);
return {
dispose: () => this.eventEmitter.removeListener(EVENT_NAME, nodeListener),
};
};
fire(data: T): void {
this.eventEmitter.emit(EVENT_NAME, data);
}
dispose(): void {
this.eventEmitter.removeAllListeners();
}
}