aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-debug-adapter-protocol/debugger/preview.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bun-debug-adapter-protocol/debugger/preview.test.ts')
-rw-r--r--packages/bun-debug-adapter-protocol/debugger/preview.test.ts62
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();
+ }
+});