返回 DeepSeek-Reasonix
window-state-ordering.test.ts
根目录 / desktop / frontend / src / __tests__ / window-state-ordering.test.ts
1 // Run: pnpm test:window-state
2
3 import { createWindowStateSaver, type WindowStateSnapshot } from "../lib/windowState";
4
5 let failed = 0;
6
7 function ok(value: boolean, label: string) {
8 process.stdout.write(` ${value ? "PASS" : "FAIL"} ${label}\n`);
9 if (!value) failed += 1;
10 }
11
12 function deferred() {
13 let resolve!: () => void;
14 const promise = new Promise<void>((done) => { resolve = done; });
15 return { promise, resolve };
16 }
17
18 let nativeState = { width: 900, height: 600, x: 10, y: 20, maximised: false };
19 let sizeReads = 0;
20 const firstPersist = deferred();
21 const persisted: WindowStateSnapshot[] = [];
22 const save = createWindowStateSaver(
23 {
24 async WindowGetSize() {
25 sizeReads += 1;
26 return { w: nativeState.width, h: nativeState.height };
27 },
28 async WindowGetPosition() {
29 return { x: nativeState.x, y: nativeState.y };
30 },
31 async WindowIsMaximised() {
32 return nativeState.maximised;
33 },
34 },
35 async (state) => {
36 persisted.push(state);
37 if (persisted.length === 1) await firstPersist.promise;
38 },
39 );
40
41 const oldSave = save();
42 while (persisted.length === 0) await Promise.resolve();
43
44 nativeState = { width: 1280, height: 800, x: 40, y: 50, maximised: true };
45 const newSave = save();
46 await Promise.resolve();
47 ok(sizeReads === 1, "a newer request waits for the in-flight capture and persistence");
48
49 firstPersist.resolve();
50 await Promise.all([oldSave, newSave]);
51 ok(persisted.length === 2, "both distinct observations are persisted");
52 ok(persisted[0].width === 900 && persisted[1].width === 1280, "the newest observation is written last");
53 ok(persisted[1].maximised, "the newest maximised state is preserved");
54
55 await save();
56 ok(persisted.length === 2, "an unchanged observation is deduplicated after persistence succeeds");
57
58 if (failed > 0) process.exit(1);
59
59 lines TYPESCRIPT