返回 DeepSeek-Reasonix
workspace-view-memory.test.ts
根目录 / desktop / frontend / src / __tests__ / workspace-view-memory.test.ts
1 import assert from "node:assert/strict";
2 import { JSDOM } from "jsdom";
3 import * as memory from "../lib/workspaceViewMemory";
4 import * as legacy from "../lib/workspaceTreeMemory";
5
6 const dom = new JSDOM("", { url: "http://localhost/" });
7 Object.assign(globalThis, { window: dom.window, localStorage: dom.window.localStorage });
8 legacy.resetWorkspaceTreeMemoryForTests();
9 legacy.rememberWorkspaceTreeState("A", { selectedFilePath: "legacy.ts", openDirs: new Set(["", "src"]), recentPaths: ["legacy.ts"], dockTreeWidth: 440 });
10 const a = memory.workspaceViewMemoryKey("A", "first", true);
11 const b = memory.workspaceViewMemoryKey("A", "second");
12 const c = memory.workspaceViewMemoryKey("B", "first", true);
13 assert.equal(memory.readWorkspaceTreeMemory(a)?.selectedFilePath, "legacy.ts");
14 assert.equal(memory.readWorkspaceTreeMemory(b)?.selectedFilePath, null);
15 assert.equal(memory.readWorkspaceTreeMemory(c)?.selectedFilePath, null);
16 memory.rememberWorkspaceTreeState(a, { selectedFilePath: "a.ts", openTabs: ["a.ts", "a2.ts"], filter: "src", openDirs: new Set(["", "src/a"]), recentPaths: ["a.ts"] });
17 memory.rememberWorkspaceTreeScroll(a, 320);
18 memory.rememberWorkspaceTreeState(b, { selectedFilePath: "b.ts", openTabs: ["b.ts"], filter: "docs", openDirs: new Set(["", "docs"]), dockTreeWidth: 480 });
19 memory.rememberWorkspaceTreeScroll(b, 170);
20 memory.flushWorkspaceTreeMemory();
21 memory.reloadWorkspaceViewMemoryForTests();
22 assert.equal(memory.readWorkspaceTreeMemory(a)?.selectedFilePath, "a.ts");
23 assert.deepEqual(memory.readWorkspaceTreeMemory(a)?.openTabs, ["a.ts", "a2.ts"]);
24 assert.equal(memory.readWorkspaceTreeMemory(a)?.filter, "src");
25 assert.equal(memory.readWorkspaceTreeMemory(a)?.scrollTop, 320);
26 assert.equal(memory.readWorkspaceTreeMemory(b)?.selectedFilePath, "b.ts");
27 assert.equal(memory.readWorkspaceTreeMemory(b)?.filter, "docs");
28 assert.equal(memory.readWorkspaceTreeMemory(b)?.scrollTop, 170);
29 assert.deepEqual(memory.readWorkspaceTreeMemory(b)?.recentPaths, ["a.ts"]);
30 assert.equal(memory.readWorkspaceTreeMemory(a)?.dockTreeWidth, 480);
31 assert.equal(memory.readWorkspaceTreeMemory(c)?.selectedFilePath, null);
32 assert.equal(memory.readWorkspaceTreeMemory(memory.workspaceViewMemoryKey("A", "new-first", true))?.selectedFilePath, null, "legacy seeds only once");
33 assert.equal(legacy.readWorkspaceTreeMemory("A")?.selectedFilePath, "legacy.ts", "view writes preserve legacy browsing state for downgrade");
34 const persisted = JSON.parse(localStorage.getItem("reasonix.workspaceViews.v1")!);
35 assert(!("recentPaths" in persisted.projects.A.views.first));
36 assert(!("dockTreeWidth" in persisted.projects.A.views.first));
37 const future = JSON.stringify({ version: 9, data: "future-writer-owned" });
38 localStorage.setItem("reasonix.workspaceViews.v1", future);
39 memory.reloadWorkspaceViewMemoryForTests();
40 memory.rememberWorkspaceTreeState(a, { selectedFilePath: "temporary.ts" });
41 assert.equal(localStorage.getItem("reasonix.workspaceViews.v1"), future, "unknown versions remain untouched");
42 dom.window.close();
43 console.log("PASS per-view navigation, project history/geometry, restart and legacy/future compatibility");
44
44 lines TYPESCRIPT