aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-debug-adapter-protocol/debugger/preview.test.ts
blob: 6669137192e20998a8c1fdec94c2c1c85c3f1441 (plain) (blame)
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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();
  }
});
mg src='//www.gravatar.com/avatar/08ecf36c18a9cde65df00e27a15518c2?s=13&d=retro' width='13' height='13' alt='Gravatar' /> Fred K. Bot 1-114/+112 2022-06-30Integration Docs Next Steps (#3677)Gravatar Dan Jutan 11-314/+666 2022-06-30[ci] formatGravatar tony-sull 1-2/+2 2022-06-30refactor to provide better cli error handling (#3768)Gravatar Fred K. Schott 2-43/+37 2022-06-30[ci] release (#3772)@astrojs/preact@0.3.1Gravatar Fred K. Bot 12-22/+23 2022-06-30Added Cloudflare adapter to README.md (#3773)Gravatar Isaac McFadyen 1-0/+1 2022-06-30[ci] formatGravatar hippotastic 1-5/+4 2022-06-30Fix "Invalid hook call" warning (#3769)Gravatar hippotastic 2-9/+79 2022-06-29[ci] release (#3759)astro@1.0.0-beta.59@astrojs/telemetry@0.2.2@astrojs/preact@0.3.0Gravatar Fred K. Bot 42-121/+117 2022-06-29[ci] formatGravatar FredKSchott 8-35/+36 2022-06-29manual lockfile update (#3751)Gravatar Fred K. Schott 3-2659/+2871 2022-06-29add error event to telemetry (#3750)Gravatar Fred K. Schott 16-85/+270