44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
import assert from "node:assert/strict"
|
|
import { describe, it } from "node:test"
|
|
import { buildHorizontalRulerTicks } from "@/lib/drive/docs-ruler-math"
|
|
import { getRulerUnitConfig, resolveRulerUnit, formatMarginDistanceLabel } from "@/lib/drive/docs-ruler-units"
|
|
import { MM_TO_PX } from "@/lib/drive/page-formats"
|
|
|
|
describe("docs ruler units", () => {
|
|
it("uses cm for A4 and inches for Letter", () => {
|
|
assert.equal(resolveRulerUnit("a4"), "cm")
|
|
assert.equal(resolveRulerUnit("a5"), "cm")
|
|
assert.equal(resolveRulerUnit("letter"), "inch")
|
|
assert.equal(resolveRulerUnit("legal"), "inch")
|
|
assert.equal(resolveRulerUnit("tabloid"), "inch")
|
|
})
|
|
|
|
it("builds cm ticks for A4 width", () => {
|
|
const widthPx = Math.round(210 * MM_TO_PX)
|
|
const ticks = buildHorizontalRulerTicks(widthPx, "a4")
|
|
const majors = ticks.filter((t) => t.major && t.label)
|
|
assert.equal(majors[0]?.label, "1")
|
|
assert.equal(majors.at(-1)?.label, "21")
|
|
assert.equal(getRulerUnitConfig("a4").majorStepPx, MM_TO_PX * 10)
|
|
})
|
|
|
|
it("builds inch ticks for Letter width", () => {
|
|
const widthPx = Math.round(216 * MM_TO_PX)
|
|
const ticks = buildHorizontalRulerTicks(widthPx, "letter")
|
|
const majors = ticks.filter((t) => t.major && t.label)
|
|
assert.equal(majors[0]?.label, "1")
|
|
assert.equal(majors.length, 8)
|
|
})
|
|
|
|
it("formats margin tooltip in cm for A4", () => {
|
|
const cmStep = MM_TO_PX * 10
|
|
assert.equal(formatMarginDistanceLabel(cmStep * 2.5, "a4"), "2,5 cm")
|
|
assert.equal(formatMarginDistanceLabel(cmStep * 2, "a4"), "2 cm")
|
|
})
|
|
|
|
it("formats margin tooltip in inches for Letter", () => {
|
|
const inchPx = MM_TO_PX * 25.4
|
|
assert.equal(formatMarginDistanceLabel(inchPx * 1.5, "letter"), '1.5"')
|
|
})
|
|
})
|