90 lines
3.2 KiB
TypeScript
90 lines
3.2 KiB
TypeScript
import assert from "node:assert/strict"
|
|
import { describe, it } from "node:test"
|
|
import {
|
|
applyGraphicKeyboardAction,
|
|
cycleFloatSide,
|
|
graphicKeyboardActionFromKey,
|
|
isInFlowGraphic,
|
|
} from "./docs-graphic-keyboard.ts"
|
|
import { DOCS_GRAPHIC_DEFAULTS } from "./docs-graphic-types.ts"
|
|
|
|
describe("docs-graphic-keyboard", () => {
|
|
it("maps arrow keys to move steps", () => {
|
|
const event = { key: "ArrowRight", shiftKey: false, altKey: false, metaKey: false, ctrlKey: false } as KeyboardEvent
|
|
assert.deepEqual(graphicKeyboardActionFromKey(event), { type: "move", dx: 1, dy: 0 })
|
|
})
|
|
|
|
it("maps shift+arrow to larger move", () => {
|
|
const event = { key: "ArrowDown", shiftKey: true, altKey: false, metaKey: false, ctrlKey: false } as KeyboardEvent
|
|
assert.deepEqual(graphicKeyboardActionFromKey(event), { type: "move", dx: 0, dy: 10 })
|
|
})
|
|
|
|
it("maps alt+arrow to resize", () => {
|
|
const event = { key: "ArrowRight", shiftKey: false, altKey: true, metaKey: false, ctrlKey: false } as KeyboardEvent
|
|
assert.deepEqual(graphicKeyboardActionFromKey(event), { type: "resize", dw: 5, dh: 0 })
|
|
})
|
|
|
|
it("maps mod+] to bring forward", () => {
|
|
const event = { key: "]", shiftKey: false, altKey: false, metaKey: true, ctrlKey: false } as KeyboardEvent
|
|
assert.deepEqual(graphicKeyboardActionFromKey(event), { type: "layer", direction: "forward" })
|
|
})
|
|
|
|
it("applyGraphicKeyboardAction moves page-layer coords", () => {
|
|
const attrs = {
|
|
...DOCS_GRAPHIC_DEFAULTS,
|
|
wrap: "in-front" as const,
|
|
positionMode: "fixed-on-page" as const,
|
|
pageX: 100,
|
|
pageY: 50,
|
|
}
|
|
const patch = applyGraphicKeyboardAction(attrs, { type: "move", dx: 3, dy: -2 })
|
|
assert.equal(patch?.pageX, 103)
|
|
assert.equal(patch?.pageY, 48)
|
|
})
|
|
|
|
it("isInFlowGraphic detects move-with-text graphics outside page layer", () => {
|
|
const attrs = {
|
|
...DOCS_GRAPHIC_DEFAULTS,
|
|
wrap: "square" as const,
|
|
positionMode: "move-with-text" as const,
|
|
}
|
|
assert.equal(isInFlowGraphic(attrs), true)
|
|
assert.equal(
|
|
isInFlowGraphic({ ...attrs, positionMode: "fixed-on-page", placement: "absolute" }),
|
|
false
|
|
)
|
|
})
|
|
|
|
it("cycleFloatSide rotates left, center, right", () => {
|
|
assert.equal(cycleFloatSide("left", "right"), "center")
|
|
assert.equal(cycleFloatSide("center", "right"), "right")
|
|
assert.equal(cycleFloatSide("right", "right"), "left")
|
|
assert.equal(cycleFloatSide("left", "left"), "right")
|
|
assert.equal(cycleFloatSide("center", "left"), "left")
|
|
})
|
|
|
|
it("applyGraphicKeyboardAction defers in-flow arrow moves to runGraphicKeyboardAction", () => {
|
|
const attrs = {
|
|
...DOCS_GRAPHIC_DEFAULTS,
|
|
placement: "block" as const,
|
|
wrap: "square" as const,
|
|
positionMode: "move-with-text" as const,
|
|
}
|
|
assert.equal(applyGraphicKeyboardAction(attrs, { type: "move", dx: 1, dy: 0 }), null)
|
|
})
|
|
|
|
it("applyGraphicKeyboardAction shrinks width from left with offset", () => {
|
|
const attrs = {
|
|
...DOCS_GRAPHIC_DEFAULTS,
|
|
placement: "absolute" as const,
|
|
x: 40,
|
|
y: 20,
|
|
width: 100,
|
|
height: 80,
|
|
}
|
|
const patch = applyGraphicKeyboardAction(attrs, { type: "resize", dw: -10, dh: 0 })
|
|
assert.equal(patch?.width, 90)
|
|
assert.equal(patch?.x, 50)
|
|
})
|
|
})
|