67 lines
2.3 KiB
TypeScript
67 lines
2.3 KiB
TypeScript
import assert from "node:assert/strict"
|
|
import { describe, it } from "node:test"
|
|
import {
|
|
bboxToPageCoords,
|
|
normalizePageCoords,
|
|
pageCoordsToStackStyle,
|
|
pageIndexFromStackY,
|
|
usesPageLayer,
|
|
} from "./docs-graphic-position.ts"
|
|
import { DOCS_GRAPHIC_DEFAULTS } from "./docs-graphic-types.ts"
|
|
import { DOCS_PAGE_GAP_PX } from "./docs-page-layout-constants.ts"
|
|
|
|
describe("docs-graphic-position", () => {
|
|
it("usesPageLayer for fixed and behind/in-front wraps", () => {
|
|
assert.equal(
|
|
usesPageLayer({ ...DOCS_GRAPHIC_DEFAULTS, positionMode: "fixed-on-page" }),
|
|
true
|
|
)
|
|
assert.equal(
|
|
usesPageLayer({ ...DOCS_GRAPHIC_DEFAULTS, wrap: "behind", positionMode: "move-with-text" }),
|
|
true
|
|
)
|
|
assert.equal(
|
|
usesPageLayer({ ...DOCS_GRAPHIC_DEFAULTS, wrap: "square", placement: "absolute" }),
|
|
false
|
|
)
|
|
})
|
|
|
|
it("pageIndexFromStackY handles multi-page stack", () => {
|
|
const pageHeight = 1000
|
|
assert.equal(pageIndexFromStackY(0, pageHeight), 0)
|
|
assert.equal(pageIndexFromStackY(pageHeight + DOCS_PAGE_GAP_PX, pageHeight), 1)
|
|
})
|
|
|
|
it("bboxToPageCoords maps viewport rect to page coords", () => {
|
|
const pageHeight = 1000
|
|
const stackRect = { left: 100, top: 50, width: 800, height: 3000 } as DOMRect
|
|
const graphicRect = { left: 150, top: 120, width: 200, height: 100 } as DOMRect
|
|
const coords = bboxToPageCoords(graphicRect, stackRect, 1, pageHeight)
|
|
assert.equal(coords.pageIndex, 0)
|
|
assert.equal(coords.pageX, 50)
|
|
assert.equal(coords.pageY, 70)
|
|
})
|
|
|
|
it("normalizePageCoords re-resolves page index after cross-page drags", () => {
|
|
const pageHeight = 1000
|
|
const next = normalizePageCoords(0, pageHeight + DOCS_PAGE_GAP_PX + 50, pageHeight)
|
|
assert.equal(next.pageIndex, 1)
|
|
assert.equal(next.pageY, 50)
|
|
|
|
const up = normalizePageCoords(1, -200, pageHeight)
|
|
assert.equal(up.pageIndex, 0)
|
|
assert.equal(up.pageY, Math.min(pageHeight, 800 + DOCS_PAGE_GAP_PX))
|
|
|
|
const clamped = normalizePageCoords(0, -50, pageHeight)
|
|
assert.equal(clamped.pageIndex, 0)
|
|
assert.equal(clamped.pageY, 0)
|
|
})
|
|
|
|
it("pageCoordsToStackStyle stacks page offsets", () => {
|
|
const pageHeight = 1000
|
|
const style = pageCoordsToStackStyle(1, 40, 80, pageHeight)
|
|
assert.equal(style.left, 40)
|
|
assert.equal(style.top, pageHeight + DOCS_PAGE_GAP_PX + 80)
|
|
})
|
|
})
|