aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/cdp/session-switch-test.ts66
1 files changed, 66 insertions, 0 deletions
diff --git a/test/cdp/session-switch-test.ts b/test/cdp/session-switch-test.ts
new file mode 100644
index 0000000..f09d26c
--- /dev/null
+++ b/test/cdp/session-switch-test.ts
@@ -0,0 +1,66 @@
+import { test, describe } from "node:test";
+import assert from "node:assert/strict";
+import { createCdpSession } from "../../src/cdp/session";
+import { createOwnershipRegistry } from "../../src/cdp/ownership";
+import { createStubTransport } from "../domains/fake-client";
+import { ok } from "../../src/util/result";
+
+const ENABLED_DOMAINS = ["Page", "DOM", "Runtime", "Network", "Accessibility", "Log"];
+
+const twoTabSession = async () => {
+ const stub = createStubTransport({
+ "Target.setDiscoverTargets": ok({}),
+ "Target.getTargets": ok({
+ targetInfos: [
+ { targetId: "t1", type: "page", title: "One", url: "https://one.test/" },
+ { targetId: "t2", type: "page", title: "Two", url: "https://two.test/" },
+ ],
+ }),
+ "Target.attachToTarget": [ok({ sessionId: "s1" }), ok({ sessionId: "s2" }), ok({ sessionId: "s3" })],
+ "Browser.getWindowForTarget": ok({ windowId: 7 }),
+ "Target.activateTarget": ok({}),
+ });
+ const ownership = createOwnershipRegistry({ ownedTargetIds: ["t1", "t2"] });
+ const session = createCdpSession(stub.transport, ownership);
+ const attached = await session.attachFirstPage();
+ assert.equal(attached.success, true);
+ return { stub, session };
+};
+
+const enablesFor = (stub: { calls: ReadonlyArray<{ method: string; sessionId: string | null | undefined }> }, sessionId: string): string[] =>
+ stub.calls.filter((c) => c.sessionId === sessionId && c.method.endsWith(".enable")).map((c) => c.method);
+
+describe("CdpSession.switchTo domain enablement", () => {
+ test("a first visit enables every domain on the new session", async () => {
+ const { stub, session } = await twoTabSession();
+ const switched = await session.switchTo("t2");
+ assert.equal(switched.success, true);
+ assert.deepEqual(
+ enablesFor(stub, "s2").sort(),
+ ENABLED_DOMAINS.map((d) => `${d}.enable`).sort(),
+ );
+ });
+
+ test("returning to a known tab re-enables domains on its new session", async () => {
+ const { stub, session } = await twoTabSession();
+ await session.switchTo("t2");
+ const back = await session.switchTo("t1");
+ assert.equal(back.success, true);
+ assert.equal(session.current()?.sessionId, "s3");
+ assert.deepEqual(
+ enablesFor(stub, "s3").sort(),
+ ENABLED_DOMAINS.map((d) => `${d}.enable`).sort(),
+ );
+ });
+
+ test("calls on the returned-to tab are routed to its refreshed session id", async () => {
+ const { stub, session } = await twoTabSession();
+ await session.switchTo("t2");
+ await session.switchTo("t1");
+ const r = await session.call("Page.bringToFront", {});
+ assert.equal(r.success, true);
+ const last = stub.calls.at(-1);
+ assert.equal(last?.method, "Page.bringToFront");
+ assert.equal(last?.sessionId, "s3");
+ });
+});