All files / repo-tools/src/test-utils postMessage.ts

100% Statements 10/10
100% Branches 2/2
100% Functions 5/5
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44      21x                   19x 19x 21x 19x             19x   16x     19x   8x           19x              
import { vi } from 'vitest';
import type { Mock } from 'vitest';
 
export const makeMockMessageTarget = (): {
  postMessage: Mock<(message: unknown) => void>;
  addEventListener: Mock<
    (_type: 'message', listener: (event: MessageEvent) => void) => void
  >;
  removeEventListener: Mock<
    (_type: 'message', listener: (event: MessageEvent) => void) => void
  >;
  listeners: ((payload: unknown) => void)[];
} => {
  const listeners: ((payload: unknown) => void)[] = [];
  const postMessage = vi.fn((message: unknown) => {
    listeners.forEach((listener) =>
      listener(
        message instanceof MessageEvent
          ? message
          : new MessageEvent('message', { data: message }),
      ),
    );
  });
  const addEventListener = vi.fn(
    (_type: 'message', listener: (event: MessageEvent) => void) => {
      listeners.push(listener as (payload: unknown) => void);
    },
  );
  const removeEventListener = vi.fn(
    (_type: 'message', listener: (event: MessageEvent) => void) => {
      listeners.splice(
        listeners.indexOf(listener as (payload: unknown) => void),
        1,
      );
    },
  );
  return {
    postMessage,
    addEventListener,
    removeEventListener,
    listeners,
  };
};