From 34e5cfdcbe29bbb5f2f46ba54eb67903abd9274d Mon Sep 17 00:00:00 2001 From: amankumarsingh77 Date: Tue, 28 Jul 2026 20:32:57 +0530 Subject: refactor(test): strip comment noise Removes suite banners, section dividers, and test-id markers that restate the test names. Keeps one-line notes for the deleted-binary fixture order, the never-arriving event consumer, the absent-vs-undefined key distinction, the unexpected-method-echo rationale, and the real-browser teardown and Local State flush quirks. Co-Authored-By: Claude Opus 5 (1M context) --- test/cdp/session-call-test.ts | 26 +++++---------------- test/deep-research/agent-config-test.ts | 9 -------- test/deep-research/readability-test.ts | 7 ------ test/deep-research/serp-parser-test.ts | 8 ------- test/manual/bridge-test.ts | 23 +------------------ test/manual/daemon-transport-test.ts | 23 +------------------ test/manual/e2e-test.ts | 33 --------------------------- test/manual/forms-test.ts | 21 ----------------- test/manual/ipc-server-test.ts | 22 ++---------------- test/manual/profile-concurrency-test.ts | 22 ------------------ test/manual/profile-e2e-test.ts | 40 +++------------------------------ test/manual/socket-guard-test.ts | 7 ------ test/manual/window-binding-test.ts | 27 ---------------------- test/profile/browser-process-test.ts | 26 +-------------------- test/profile/launch-test.ts | 19 ---------------- test/profile/list-test.ts | 18 +-------------- test/profile/paths-test.ts | 17 -------------- test/profile/store-test.ts | 9 -------- 18 files changed, 15 insertions(+), 342 deletions(-) diff --git a/test/cdp/session-call-test.ts b/test/cdp/session-call-test.ts index 7b1386b..6a14e17 100644 --- a/test/cdp/session-call-test.ts +++ b/test/cdp/session-call-test.ts @@ -14,13 +14,6 @@ type RecordedCall = { readonly opts: RequestOpts | undefined; }; -/** - * A stub transport: no socket, no browser. `request()` looks up a canned - * Result by method name (defaulting to `ok({})` for methods the test doesn't - * care about — e.g. the six domain-enable calls switchTo fires as a side - * effect). Every call is recorded so tests can assert on exactly what the - * session sent, including the sessionId routing and the timeoutMs option. - */ const makeStubTransport = ( responses: Record> = {}, ): { transport: CdpTransport; calls: RecordedCall[] } => { @@ -32,8 +25,7 @@ const makeStubTransport = ( calls.push({ method, params, opts }); return Promise.resolve(responses[method] ?? ok({})); }, - // No real events ever arrive; the session's background consumer just - // awaits forever. No timers involved, so it doesn't keep the process alive. + // No real events ever arrive, so the session's background consumer awaits forever — with no timers involved, it does not keep the process alive. events: (): AsyncIterable => (async function* (): AsyncGenerator { await new Promise(() => {}); })(), @@ -84,8 +76,6 @@ describe("CdpSession.call / callOnTarget / callBrowser", () => { const r = await session.call("Target.getTargetInfo", {}); assert.equal(r.success, false); if (!r.success) { - // Must stay "timeout" — decodeResult must never run on a failed - // transport call and relabel it "invalid_response". assert.equal(r.error.kind, "timeout"); assert.equal(r.error.message, "socket dead"); } @@ -97,24 +87,21 @@ describe("CdpSession.call / callOnTarget / callBrowser", () => { }); const session = createCdpSession(transport); - // Establish an internal sessionId distinct from both null and the - // explicit sid used below, via the public switchTo() — no attachFirstPage - // bookkeeping required. const switched = await session.switchTo("target-1"); assert.equal(switched.success, true); - calls.length = 0; // discard switchTo's own requests (activate/attach/enable*6) + calls.length = 0; await session.call("Page.navigate", { url: "http://example.com" }); await session.callOnTarget("Page.navigate", { url: "http://example.com" }, "explicit-sid"); await session.callBrowser("Target.getTargets"); const navigateCalls = calls.filter((c) => c.method === "Page.navigate"); - assert.equal(navigateCalls[0]?.opts?.sessionId, "session-xyz"); // call() uses the active session - assert.equal(navigateCalls[1]?.opts?.sessionId, "explicit-sid"); // callOnTarget() uses the given sid, not the active one + assert.equal(navigateCalls[0]?.opts?.sessionId, "session-xyz"); + assert.equal(navigateCalls[1]?.opts?.sessionId, "explicit-sid"); const browserCall = calls.find((c) => c.method === "Target.getTargets"); - assert.equal(browserCall?.opts?.sessionId, null); // callBrowser() forces null even though a session is active + assert.equal(browserCall?.opts?.sessionId, null); }); test("opts.timeoutMs reaches the transport only when provided (exactOptionalPropertyTypes)", async () => { @@ -127,8 +114,7 @@ describe("CdpSession.call / callOnTarget / callBrowser", () => { await session.callBrowser("Target.getTargets"); const withoutTimeout = calls.filter((c) => c.method === "Target.getTargets")[1]; - // The key itself must be absent, not present-with-undefined — that's the - // distinction exactOptionalPropertyTypes exists to enforce at the call site. + // The key must be absent, not present-with-undefined — the distinction exactOptionalPropertyTypes enforces at the call site. assert.equal(withoutTimeout?.opts && "timeoutMs" in withoutTimeout.opts, false); }); }); diff --git a/test/deep-research/agent-config-test.ts b/test/deep-research/agent-config-test.ts index 5859060..025a844 100644 --- a/test/deep-research/agent-config-test.ts +++ b/test/deep-research/agent-config-test.ts @@ -1,12 +1,3 @@ -/** - * S20: the web-search-researcher subagent config references only real tools. - * - * Guards against the pre-Phase-3 regression where the agent named the - * non-existent web_search / web_fetch tools. Pure string checks over the - * markdown file — no browser, no subagent runtime. - * - * Run: npm test - */ import { test, before, describe } from "node:test"; import assert from "node:assert/strict"; import { readFileSync } from "node:fs"; diff --git a/test/deep-research/readability-test.ts b/test/deep-research/readability-test.ts index ba0e0e0..211229d 100644 --- a/test/deep-research/readability-test.ts +++ b/test/deep-research/readability-test.ts @@ -1,8 +1,3 @@ -/** - * Unit tests for the pure readability extractor — no browser required. - * - * Run: npm test - */ import { test, describe } from "node:test"; import assert from "node:assert/strict"; import { readFileSync } from "node:fs"; @@ -13,7 +8,6 @@ const fixture = (name: string): PageCapture => JSON.parse(readFileSync(join(import.meta.dirname, "fixtures", name), "utf8")) as PageCapture; describe("pure readability extractor", () => { - // S10: boilerplate stripped, article content preserved test("S10: article body text is present", () => { const page = extractReadable(fixture("article-capture.json")); assert.ok(page.text.includes("Chrome DevTools Protocol lets tools instrument")); @@ -54,7 +48,6 @@ describe("pure readability extractor", () => { assert.ok(page.wordCount > 40); }); - // S11: no clear article node falls back to bounded body text test("S11: structure-less page falls back to non-empty body text", () => { const page = extractReadable(fixture("no-article-capture.json")); assert.ok(page.text.length > 0); diff --git a/test/deep-research/serp-parser-test.ts b/test/deep-research/serp-parser-test.ts index af5ac54..433c650 100644 --- a/test/deep-research/serp-parser-test.ts +++ b/test/deep-research/serp-parser-test.ts @@ -1,8 +1,3 @@ -/** - * Unit tests for the pure Google SERP parser — no browser required. - * - * Run: npm test - */ import { test, describe } from "node:test"; import assert from "node:assert/strict"; import { readFileSync } from "node:fs"; @@ -17,7 +12,6 @@ const captcha = fixture("google-serp-captcha.json"); const empty = fixture("google-serp-empty.json"); describe("pure Google SERP parser", () => { - // S1: redirect unwrapping + internal/javascript anchors dropped test("S1: /url?q= redirect is unwrapped to the real target", () => { const results = parseGoogleSerp(ok.anchors, 10); const urls = results.map((r) => r.url); @@ -36,7 +30,6 @@ describe("pure Google SERP parser", () => { assert.ok(!urls.some((u) => u.startsWith("javascript:"))); }); - // S2: dedupe + rank + limit test("S2: trailing-slash duplicate collapses to one result", () => { const results = parseGoogleSerp(ok.anchors, 10); const realExampleCount = results.filter((r) => r.url.startsWith("https://real.example/x")).length; @@ -53,7 +46,6 @@ describe("pure Google SERP parser", () => { assert.ok(capped.length === 2 && capped[capped.length - 1]?.rank === 2); }); - // S3: CAPTCHA / no-results classification test("S3: populated SERP classifies as ok", () => { assert.equal(classifySerp(ok.pageText, parseGoogleSerp(ok.anchors, 10).length), "ok"); }); diff --git a/test/manual/bridge-test.ts b/test/manual/bridge-test.ts index 5402aae..d247f97 100644 --- a/test/manual/bridge-test.ts +++ b/test/manual/bridge-test.ts @@ -1,8 +1,3 @@ -/** - * Manual integration test for CdpBridge against real Chrome. - * Requires: Chrome with remote debugging enabled (chrome://inspect/#remote-debugging). - * Run: npx tsx test/manual/bridge-test.ts - */ import { createCdpBridge, type SendToClient } from "../../src/daemon/bridge"; import type { WireRequest, WireResponse, WireEvent } from "../../src/daemon/protocol"; @@ -17,11 +12,8 @@ async function main() { console.log("Starting CdpBridge..."); const bridge = createCdpBridge(); - // ── Test 1: Connect to Chrome ────────────────────────────────────────── - // start() now runs auto-retry in the background. Wait a moment for - // the initial connection attempt to complete. await bridge.start(); - await sleep(3000); // allow time for WebSocket handshake + await sleep(3000); if (!bridge.isAlive()) { console.error("Cannot continue — Chrome not reachable. Run /browser-setup first."); console.error("(The bridge will keep retrying in the background.)"); @@ -30,7 +22,6 @@ async function main() { console.log(" ✓ Connect to Chrome: ok"); check(bridge.isAlive(), "Bridge reports alive after connect"); - // ── Test 2: Send Target.getTargets ───────────────────────────────────── const responses: WireResponse[] = []; const events: WireEvent[] = []; let eventCount = 0; @@ -55,7 +46,6 @@ async function main() { console.log(` Found ${r.targetInfos?.length ?? 0} targets`); } - // ── Test 3: Create a new tab ─────────────────────────────────────────── responses.length = 0; const req2: WireRequest = { type: "request", id: 2, method: "Target.createTarget", @@ -75,7 +65,6 @@ async function main() { process.exit(1); } - // ── Test 4: Attach to target ─────────────────────────────────────────── responses.length = 0; const req3: WireRequest = { type: "request", id: 3, method: "Target.attachToTarget", @@ -89,7 +78,6 @@ async function main() { const sessionId = (res3?.result as any)?.sessionId as string | undefined; check(typeof sessionId === "string", `Session ID: ${sessionId ?? "FAILED"}`); - // Verify session ownership was tracked if (sessionId) { const owner = bridge.getSessionOwner(sessionId); check(owner === "pi-test", "Session ownership tracked correctly"); @@ -100,7 +88,6 @@ async function main() { process.exit(1); } - // ── Test 5: Navigate tab via session ─────────────────────────────────── responses.length = 0; const req4: WireRequest = { type: "request", id: 4, method: "Page.navigate", @@ -115,7 +102,6 @@ async function main() { const frameId = (res4?.result as any)?.frameId as string | undefined; check(typeof frameId === "string", `Navigated to example.com (frame: ${frameId ?? "FAILED"})`); - // ── Test 6: Evaluate JS in the page ──────────────────────────────────── responses.length = 0; const req5: WireRequest = { type: "request", id: 5, method: "Runtime.evaluate", @@ -130,7 +116,6 @@ async function main() { const title = (res5?.result as any)?.result?.value as string | undefined; check(title === "Example Domain", `Page title: "${title ?? "FAILED"}" (expected "Example Domain")`); - // ── Test 7: Detach from target ───────────────────────────────────────── responses.length = 0; const req6: WireRequest = { type: "request", id: 6, method: "Target.detachFromTarget", @@ -142,11 +127,9 @@ async function main() { const res6 = responses.find(r => r.id === 6); check(res6 != null, "Target.detachFromTarget response received"); - // Session ownership should be released const ownerAfter = bridge.getSessionOwner(sessionId); check(ownerAfter === undefined, "Session ownership released after detach"); - // ── Test 8: Close target ─────────────────────────────────────────────── responses.length = 0; const req7: WireRequest = { type: "request", id: 7, method: "Target.closeTarget", @@ -158,12 +141,8 @@ async function main() { const res7 = responses.find(r => r.id === 7); check(res7 != null, "Target.closeTarget response received"); - // ── Test 9: Remove client ────────────────────────────────────────────── bridge.removeClient("pi-test"); - // After removal, no pending requests should remain — verify by checking - // no errors are thrown when handling subsequent events. - // ── Cleanup ──────────────────────────────────────────────────────────── console.log("\nStopping bridge..."); await bridge.stop(); console.log("Bridge stopped ✓"); diff --git a/test/manual/daemon-transport-test.ts b/test/manual/daemon-transport-test.ts index e9660c8..5738e23 100644 --- a/test/manual/daemon-transport-test.ts +++ b/test/manual/daemon-transport-test.ts @@ -1,10 +1,3 @@ -/** - * Integration test: IpcServer + DaemonTransport end-to-end. - * Starts a real IpcServer, connects a DaemonTransport, sends CDP requests. - * No Chrome required — the server simulates CDP responses. - * - * Run: npx tsx test/manual/daemon-transport-test.ts - */ import { createIpcServer } from "../../src/daemon/server"; import { createDaemonTransport } from "../../src/cdp/daemon-transport"; import { DAEMON_SOCKET_PATH } from "../../src/daemon/protocol"; @@ -19,17 +12,13 @@ const check = (cond: boolean, label: string) => { }; async function main() { - // Clean up any stale socket try { unlinkSync(DAEMON_SOCKET_PATH); } catch {} - // ── Start IpcServer ──────────────────────────────────────────────────── console.log("Starting IpcServer..."); const server = createIpcServer(); - // When a request arrives, reply with a fake CDP response server.onMessage((msg, client) => { if (msg.type === "request") { - // Simulate a CDP response const reply: WireMessage = { type: "response", id: msg.id, @@ -42,15 +31,12 @@ async function main() { await server.start(); console.log("Server started ✓"); - // ── Create DaemonTransport ───────────────────────────────────────────── const transport = createDaemonTransport("pi-test-transport"); - // ── Test 1: Connect ──────────────────────────────────────────────────── const connResult = await transport.connect(""); check(connResult.success, `Connect: ${connResult.success ? "ok" : connResult.error.message}`); check(transport.state() === "open", `State is "open" (actual: "${transport.state()}")`); - // ── Test 2: Send a request ───────────────────────────────────────────── const reqResult = await transport.request("Page.navigate", { url: "https://example.com" }); check(reqResult.success, `Request succeeded: ${reqResult.success}`); if (reqResult.success) { @@ -59,11 +45,9 @@ async function main() { check(data?.method === "Page.navigate", "Response echoes method"); } - // ── Test 3: Send request with sessionId ──────────────────────────────── const req2 = await transport.request("Runtime.evaluate", { expression: "1+1" }, { sessionId: "abc123" }); check(req2.success, "Request with sessionId succeeded"); - // ── Test 4: Events ───────────────────────────────────────────────────── const eventPromise = new Promise((resolve) => { const timeout = setTimeout(() => resolve(false), 2000); (async () => { @@ -75,7 +59,6 @@ async function main() { })(); }); - // Simulate server sending an event server.broadcast({ type: "event", method: "Target.targetCreated", @@ -85,7 +68,6 @@ async function main() { const gotEvent = await eventPromise; check(gotEvent, "Event received via transport.events()"); - // ── Test 5: Close transport ──────────────────────────────────────────── let closeFired = false; transport.onClose(() => { closeFired = true; }); @@ -93,16 +75,13 @@ async function main() { check(transport.state() === "closed", "State is closed after close()"); check(closeFired, "onClose handler fired"); - // ── Test 6: Reconnect ────────────────────────────────────────────────── - await new Promise(r => setTimeout(r, 500)); // let server process socket close + await new Promise(r => setTimeout(r, 500)); const reconnectResult = await transport.connect(""); check(reconnectResult.success, `Reconnect: ${reconnectResult.success ? "ok" : reconnectResult.error.message}`); - // ── Test 7: Request after reconnect ──────────────────────────────────── const req3 = await transport.request("Browser.getVersion", {}); check(req3.success, "Request after reconnect succeeded"); - // ── Cleanup ──────────────────────────────────────────────────────────── await transport.close(); await server.stop(); console.log("Cleanup complete ✓"); diff --git a/test/manual/e2e-test.ts b/test/manual/e2e-test.ts index 963efaf..659409f 100644 --- a/test/manual/e2e-test.ts +++ b/test/manual/e2e-test.ts @@ -1,11 +1,3 @@ -/** - * End-to-end integration test: full daemon pipeline. - * - * Starts the daemon (IpcServer + CdpBridge), connects via DaemonTransport, - * exercises the full CDP request/response/event lifecycle. - * - * Run: npx tsx test/manual/e2e-test.ts - */ import { createIpcServer } from "../../src/daemon/server"; import { createCdpBridge, type SendToClient } from "../../src/daemon/bridge"; import { createDaemonTransport } from "../../src/cdp/daemon-transport"; @@ -21,15 +13,12 @@ const check = (cond: boolean, label: string) => { }; async function main() { - // Clean up stale socket try { unlinkSync(DAEMON_SOCKET_PATH); } catch {} - // ── Start daemon ─────────────────────────────────────────────────────── console.log("Starting daemon (IpcServer + CdpBridge)..."); const ipcServer = createIpcServer(); const cdpBridge = createCdpBridge(); - // Wire IpcServer ↔ CdpBridge ipcServer.onMessage((msg, client) => { if (msg.type !== "request") return; const send: SendToClient = (cid, resp) => ipcServer.send(cid, resp); @@ -45,10 +34,7 @@ async function main() { await ipcServer.start(); console.log("Daemon started ✓"); - // The bridge will try to connect to Chrome — might fail, that's ok for - // this test. We'll simulate CDP responses from the server side. - // ── Connect pi client via DaemonTransport ────────────────────────────── console.log("\nConnecting pi client (DaemonTransport)..."); const transport = createDaemonTransport("pi-e2e-test"); @@ -56,17 +42,11 @@ async function main() { check(connectResult.success, `Client connect: ${connectResult.success ? "ok" : connectResult.error.message}`); check(transport.state() === "open", "Transport state is open"); - // ── Test 1: Request → simulated CDP response ─────────────────────────── - // The IpcServer's onMessage handler forwards requests to the bridge. - // The bridge tries to send to Chrome (which may be down). For this test, - // we intercept at the IpcServer level and simulate CDP responses. - // Override the message handler to simulate CDP responses directly. let rawRequests: WireRequest[] = []; ipcServer.onMessage((msg, client) => { if (msg.type === "request") { rawRequests.push(msg); - // Simulate a CDP success response ipcServer.send(client.id, { type: "response", id: msg.id, @@ -85,13 +65,11 @@ async function main() { check(rawRequests.length === 1, "Server received exactly 1 request"); check(rawRequests[0]!.method === "Page.navigate", "Correct method forwarded"); - // ── Test 2: Request with sessionId ───────────────────────────────────── rawRequests.length = 0; const res2 = await transport.request("Runtime.evaluate", { expression: "1+1" }, { sessionId: "session-abc" }); check(res2.success, "Session-scoped request succeeded"); check(rawRequests[0]?.sessionId === "session-abc", "SessionId forwarded correctly"); - // ── Test 3: Multiple parallel requests ───────────────────────────────── rawRequests.length = 0; const [r3a, r3b, r3c] = await Promise.all([ transport.request("Target.getTargets", {}), @@ -101,7 +79,6 @@ async function main() { check(r3a.success && r3b.success && r3c.success, "All 3 parallel requests succeeded"); check(rawRequests.length === 3, "Server received all 3 requests"); - // ── Test 4: Events ───────────────────────────────────────────────────── const eventPromise = new Promise((resolve) => { const timeout = setTimeout(() => resolve(null), 2000); (async () => { @@ -113,7 +90,6 @@ async function main() { })(); }); - // Simulate a CDP event broadcast from the daemon ipcServer.broadcast({ type: "event", method: "Target.targetCreated", @@ -123,33 +99,24 @@ async function main() { const eventMethod = await eventPromise; check(eventMethod === "Target.targetCreated", `Event received: ${eventMethod ?? "TIMEOUT"}`); - // ── Test 5: Session persistence (detach simulation) ──────────────────── - // Simulate a session shutdown: close the transport, then reconnect. - // The transport.close() sends deregister, server cleans up. await transport.close(); check(transport.state() === "closed", "Transport closed"); - // Small delay for server cleanup await new Promise(r => setTimeout(r, 500)); - // Reconnect — simulates next pi session const reconnectResult = await transport.connect(""); check(reconnectResult.success, "Transport reconnected (simulated session restart)"); - // Send a request through the reconnected transport const res4 = await transport.request("Target.getTargets", {}); check(res4.success, "Request after reconnect succeeded"); check(transport.state() === "open", "Transport state is open after reconnect"); - // ── Test 6: Server-side client count ─────────────────────────────────── check(ipcServer.clientCount() === 1, "Server reports 1 connected client"); - // ── Test 7: Client disconnect cleanup ────────────────────────────────── await transport.close(); await new Promise(r => setTimeout(r, 500)); check(ipcServer.clientCount() === 0, "Server reports 0 clients after disconnect"); - // ── Cleanup ──────────────────────────────────────────────────────────── await ipcServer.stop(); console.log("\nDaemon stopped ✓"); diff --git a/test/manual/forms-test.ts b/test/manual/forms-test.ts index ca6c596..43b2863 100644 --- a/test/manual/forms-test.ts +++ b/test/manual/forms-test.ts @@ -1,15 +1,3 @@ -/** - * Manual integration test for the form-filling tools. - * - * Exercises browser_snapshot (ref surfacing) + browser_fill_form / browser_fill / - * browser_select_option / browser_set_checked against a data:-URL fixture that - * includes a plain input, a textarea, a "controlled" input (commits its model - * only on the `input` event — the realistic failure mode for naive value-setting), - * a native