From 1480889205d49cf7221a36608a8896b452967cea Mon Sep 17 00:00:00 2001 From: Ashcon Partovi Date: Thu, 24 Aug 2023 22:53:34 -0700 Subject: Improved support for `debug-adapter-protocol` (#4186) * Improve support for \`debug-adapter-protocol\` * More improvements, fix formatting in debug console * Fix attaching * Prepare for source maps * Start of source map support, breakpoints work * Source map support * add some package.jsons * wip * Update package.json * More fixes * Make source maps safer if exception occurs * Check bun version if it fails * Fix console.log formatting * Fix source maps partly * More source map fixes * Prepare for extension * watch mode with dap * Improve preview code * Prepare for extension 2 --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> --- .../debugger/preview.test.ts | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 packages/bun-debug-adapter-protocol/debugger/preview.test.ts (limited to 'packages/bun-debug-adapter-protocol/debugger/preview.test.ts') 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(); + } +}); -- cgit v1.2.3