Advertisement
Guest User

Untitled

a guest
Nov 1st, 2023
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TypeScript 1.40 KB | Software | 0 0
  1. import { describe, expect, test, jest } from "@jest/globals";
  2.  
  3. type IListeners = {
  4.   name: string,
  5.   callback: (...args:any[]) => void
  6. }
  7.  
  8. class EventEmitter {
  9.   protected Listeners:IListeners[] = [];
  10.   public addEventListener(eventName: string, callback: (...args:any[]) => void) {
  11.     this.Listeners.push({
  12.       callback,
  13.       name: eventName
  14.     });
  15.   }
  16.   public trigger(eventName: string, data?: any) {
  17.     this.Listeners.forEach(event => {
  18.       if (event.name===eventName) {
  19.         event.callback(data);
  20.       }
  21.     });
  22.   }
  23.   public removeEventListener(eventName: string, callback: () => any) {
  24.     this.Listeners = this.Listeners.filter(event => event.name!==eventName);
  25.   }
  26. }
  27.  
  28. describe("Event emitter", () => {
  29.   const emitter = new EventEmitter();
  30.   const callback = jest.fn();
  31.   test("adds a listener", () => {
  32.     emitter.addEventListener("click", callback);
  33.     expect(callback.mock.calls.length).toBe(0);
  34.   });
  35.  
  36.   test("emits an event", () => {
  37.     let sentEvent = {
  38.       x: 123,
  39.       y: 42,
  40.     };
  41.     emitter.trigger("click", sentEvent);
  42.  
  43.     expect(callback.mock.calls[0][0]).toBe(sentEvent);
  44.   });
  45.  
  46.   test("removes the listener", () => {
  47.     emitter.trigger("click");
  48.     expect(callback.mock.calls.length).toBe(2);
  49.  
  50.     emitter.removeEventListener("click", callback);
  51.     emitter.trigger("click");
  52.     expect(callback.mock.calls.length).toBe(2);
  53.   });
  54. });
  55.  
  56.  
Tags: typescript
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement