|
| 1 | +/** |
| 2 | + * @ai-context 主窗尺寸守卫:`tauri.conf.json` 与 `windowSize.ts` 必须逐字一致。 |
| 3 | + * |
| 4 | + * Why 读 JSON 而不是信任常量:真值在 JSON 里,常量是**影子**。只有把两者钉在一起, |
| 5 | + * 「改了 JSON 忘了常量」才是红的(反之亦然)。规格 §1 决策 17 的两个数字是本测试的断言对象。 |
| 6 | + * |
| 7 | + * 口径:只断言四个数字与存在性;**不**断言 JSON 里的其它字段(批 4/8 会动它们)。 |
| 8 | + */ |
| 9 | +import { readFileSync } from "node:fs"; |
| 10 | +import { dirname, join } from "node:path"; |
| 11 | +import { fileURLToPath } from "node:url"; |
| 12 | +import { describe, expect, it } from "vitest"; |
| 13 | +import { NAV_MIN_WIDTH, WINDOW_SIZE } from "./windowSize"; |
| 14 | + |
| 15 | +const APP = join(dirname(fileURLToPath(import.meta.url)), "..", ".."); |
| 16 | +const CONF = join(APP, "src-tauri", "tauri.conf.json"); |
| 17 | + |
| 18 | +describe("主窗尺寸(规格 §1 决策 17)", () => { |
| 19 | + const conf = JSON.parse(readFileSync(CONF, "utf8")); |
| 20 | + const win = conf.app.windows[0]; |
| 21 | + |
| 22 | + it("默认 1280×800", () => { |
| 23 | + expect(win.width).toBe(WINDOW_SIZE.defaultWidth); |
| 24 | + expect(win.height).toBe(WINDOW_SIZE.defaultHeight); |
| 25 | + }); |
| 26 | + |
| 27 | + it("最小 1024×640(J1-1:今天完全没有 min 尺寸)", () => { |
| 28 | + expect(win.minWidth).toBe(WINDOW_SIZE.minWidth); |
| 29 | + expect(win.minHeight).toBe(WINDOW_SIZE.minHeight); |
| 30 | + }); |
| 31 | + |
| 32 | + it("窗口可缩放(否则 min 尺寸无意义)", () => { |
| 33 | + expect(win.resizable ?? true).toBe(true); |
| 34 | + }); |
| 35 | + |
| 36 | + it("断点下限 = 最小窗宽(防止两处各写一个 1024)", () => { |
| 37 | + expect(NAV_MIN_WIDTH).toBe(1024); |
| 38 | + expect(NAV_MIN_WIDTH).toBe(win.minWidth); |
| 39 | + }); |
| 40 | +}); |
0 commit comments