aboutsummaryrefslogtreecommitdiff
path: root/test/cdp
diff options
context:
space:
mode:
authoramankumarsingh77 <amankumarsingh7702@gmail.com>2026-07-27 01:17:32 +0530
committerAman Kumar <145339995+amankumarsingh77@users.noreply.github.com>2026-08-02 19:12:46 +0530
commit9e9bf2a3badb59d0ce5bdb47c4e9d09ffb259e69 (patch)
tree602a6e33a98de62bf1f0c1d873eeb2676c650242 /test/cdp
parentd1b57558ff40ef6d6b19ee7eff0a44f7f4a585f6 (diff)
refactor(cdp): extract attachTo, getWindowId, evaluateJson helpers
Target.attachToTarget was decoded at 5 sites, Browser.getWindowForTarget at 5, and Runtime.evaluate unwrapped at another. Each is now one typed helper. Deletes the dead cdp/window-binding.ts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'test/cdp')
-rw-r--r--test/cdp/evaluate-test.ts39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/cdp/evaluate-test.ts b/test/cdp/evaluate-test.ts
new file mode 100644
index 0000000..237ab40
--- /dev/null
+++ b/test/cdp/evaluate-test.ts
@@ -0,0 +1,39 @@
+import { test, describe } from "node:test";
+import assert from "node:assert/strict";
+import { evaluateJson } from "../../src/cdp/evaluate";
+import type { CdpSession } from "../../src/cdp/session";
+import { ok } from "../../src/util/result";
+
+const isNumberArray = (v: unknown): v is ReadonlyArray<number> =>
+ Array.isArray(v) && v.every((x) => typeof x === "number");
+
+const fakeSession = (payload: unknown): CdpSession =>
+ ({
+ call: async () => ok(payload),
+ }) as unknown as CdpSession;
+
+describe("evaluateJson", () => {
+ test("unwraps result.value and applies the guard", async () => {
+ const s = fakeSession({ result: { type: "object", value: [1, 2, 3] } });
+ const r = await evaluateJson(s, "[1,2,3]", isNumberArray);
+ assert.equal(r.success, true);
+ if (r.success) assert.deepEqual(r.data, [1, 2, 3]);
+ });
+
+ test("surfaces a page exception as an error", async () => {
+ const s = fakeSession({
+ result: { type: "undefined" },
+ exceptionDetails: { text: "ReferenceError: x is not defined" },
+ });
+ const r = await evaluateJson(s, "x", isNumberArray);
+ assert.equal(r.success, false);
+ if (!r.success) assert.match(r.error.message, /ReferenceError/);
+ });
+
+ test("rejects a value that fails the guard", async () => {
+ const s = fakeSession({ result: { type: "string", value: "nope" } });
+ const r = await evaluateJson(s, "'nope'", isNumberArray);
+ assert.equal(r.success, false);
+ if (!r.success) assert.equal(r.error.kind, "invalid_response");
+ });
+});