feat(frontend): cbz page/spread view math (TDD)

This commit is contained in:
2026-09-16 15:22:59 +08:00
parent 996f492083
commit 1f9d7e7572
2 changed files with 45 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
import { describe, expect, it } from "vitest";
import { spreadPages, pageIndexToView, turnView, viewCount, viewToPageIndex } from "../src/lib/cbzPages";
describe("cbzPages", () => {
it("page mode: one page per view", () => {
expect(viewCount(5, "page")).toBe(5);
expect(viewToPageIndex(2, "page")).toBe(2);
expect(pageIndexToView(2, "page")).toBe(2);
});
it("spread mode: pairs [0,1] [2,3] [4]", () => {
expect(viewCount(5, "spread")).toBe(3);
expect(pageIndexToView(3, "spread")).toBe(1);
expect(viewToPageIndex(1, "spread")).toBe(2);
expect(spreadPages(2, 5, false)).toEqual([2, 3]);
expect(spreadPages(4, 5, false)).toEqual([4]); // 落单页
expect(spreadPages(2, 5, true)).toEqual([3, 2]); // RTL 右页为先
});
it("turnView clamps and RTL flips direction", () => {
expect(turnView(0, 1, false, 3)).toBe(1);
expect(turnView(2, 1, false, 3)).toBe(2); // 右边界钳制
expect(turnView(0, -1, false, 3)).toBe(0); // 左边界钳制
expect(turnView(1, 1, true, 3)).toBe(0); // RTL:d=+1 变后退
});
});