44 lines · 1.4 KB · TypeScript
RawDownload
import { afterEach, describe, expect, it, vi } from "vite-plus/test";import { subscribeDeviceForeground } from "./deviceHubApi"; describe("foreground app events", () => {  afterEach(() => vi.unstubAllGlobals());   it("clears the last app when it exits and ignores malformed events", () => {    let source: FakeEventSource;    class FakeEventSource {      onmessage: ((event: { data: string }) => void) | null = null;      addEventListener(_type: string, listener: (event: { data: string }) => void) {        this.onmessage = listener;      }      close = vi.fn();      constructor() {        source = this;      }    }    vi.stubGlobal("EventSource", FakeEventSource);    const onChange = vi.fn();    const stop = subscribeDeviceForeground(      {        platform: "ios",        deviceId: "test",        access: { httpBase: "http://test", wsBase: "ws://test", query: {}, credentials: true },      },      onChange,    );    const emit = (data: unknown) => source.onmessage?.({ data: JSON.stringify(data) });    emit({ bundleId: "com.example.app", pid: 123 });    emit({ bundleId: null });    emit({ bundleId: "com.example.other" });    emit({ bundleId: "" });    emit({ other: "not app state" });    expect(onChange.mock.calls.map(([app]) => app)).toEqual([      { id: "com.example.app", pid: 123 },      null,      { id: "com.example.other" },      null,    ]);    stop();    expect(source!.close).toHaveBeenCalledOnce();  });});