diff options
Diffstat (limited to 'packages/bun-debug-adapter-protocol/debugger/preview.test.ts')
-rw-r--r-- | packages/bun-debug-adapter-protocol/debugger/preview.test.ts | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/packages/bun-debug-adapter-protocol/debugger/preview.test.ts b/packages/bun-debug-adapter-protocol/debugger/preview.test.ts new file mode 100644 index 000000000..666913719 --- /dev/null +++ b/packages/bun-debug-adapter-protocol/debugger/preview.test.ts @@ -0,0 +1,62 @@ +import { beforeAll, afterAll, test, expect } from "bun:test"; +import type { JSC } from "../../bun-inspector-protocol"; +import { WebSocketInspector } from "../../bun-inspector-protocol"; +import type { PipedSubprocess } from "bun"; +import { spawn } from "bun"; +import { remoteObjectToString } from "./preview"; + +let subprocess: PipedSubprocess | undefined; +let objects: JSC.Runtime.RemoteObject[] = []; + +beforeAll(async () => { + subprocess = spawn({ + cwd: import.meta.dir, + cmd: [process.argv0, "--inspect-wait=0", "fixtures/preview.js"], + stdout: "pipe", + stderr: "pipe", + stdin: "pipe", + }); + const decoder = new TextDecoder(); + let url: URL; + for await (const chunk of subprocess!.stdout) { + const text = decoder.decode(chunk); + if (text.includes("ws://")) { + url = new URL(/(ws:\/\/.*)/.exec(text)![0]); + break; + } + } + objects = await new Promise((resolve, reject) => { + const inspector = new WebSocketInspector({ + url, + listener: { + ["Inspector.connected"]: () => { + inspector.send("Inspector.enable"); + inspector.send("Runtime.enable"); + inspector.send("Console.enable"); + inspector.send("Debugger.enable"); + inspector.send("Debugger.resume"); + inspector.send("Inspector.initialized"); + }, + ["Inspector.disconnected"]: error => { + reject(error); + }, + ["Console.messageAdded"]: ({ message }) => { + const { parameters } = message; + resolve(parameters!); + inspector.close(); + }, + }, + }); + inspector.start(); + }); +}); + +afterAll(() => { + subprocess?.kill(); +}); + +test("remoteObjectToString", () => { + for (const object of objects) { + expect(remoteObjectToString(object)).toMatchSnapshot(); + } +}); |