返回 DeepSeek-Reasonix
captureQueue.test.ts
根目录 / desktop / electron / src / main / browser / captureQueue.test.ts
1 import assert from "node:assert/strict";
2 import { test } from "node:test";
3 import { CaptureQueue, abortable } from "./captureQueue.js";
4
5 test("an already-cancelled wait still consumes the underlying promise rejection", async () => {
6 const controller = new AbortController(); controller.abort();
7 let reject!: (reason: Error) => void;
8 const work = new Promise<void>((_resolve, fail) => { reject = fail; });
9 await assert.rejects(abortable(work, controller.signal), /cancelled/);
10 reject(new Error("late page evaluation failure"));
11 await new Promise<void>(resolve => setImmediate(resolve));
12 });
13
14 test("cancelled middle waiter cannot release an earlier capture or unblock its successor", async () => {
15 const queue = new CaptureQueue();
16 let finish!: () => void;
17 const first = queue.run(new AbortController().signal, () => new Promise<void>(resolve => { finish = resolve; }));
18 await Promise.resolve();
19 const controller = new AbortController();
20 const second = queue.run(controller.signal, async () => assert.fail("cancelled waiter ran"));
21 let thirdEntered = false;
22 const third = queue.run(new AbortController().signal, async () => { thirdEntered = true; });
23 controller.abort();
24 await assert.rejects(second, /cancelled/);
25 assert.equal(thirdEntered, false);
26 finish();
27 await Promise.all([first, third]);
28 assert.equal(thirdEntered, true);
29 });
30
31 test("failure releases its slot exactly once", async () => {
32 const queue = new CaptureQueue();
33 await assert.rejects(queue.run(new AbortController().signal, async () => { throw new Error("probe failed"); }), /probe failed/);
34 assert.equal(await queue.run(new AbortController().signal, async () => 42), 42);
35 });
36
36 lines TYPESCRIPT