Something went wrong. Try again.
a tool for shared writing and social publishing
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import { describe, expect, test } from "vitest";import { canvasStackingOrder, canvasStackOrders, type CanvasLayer,} from "src/utils/canvasBlockOrder";
const block = (x: number, y: number, stackOrder?: string): CanvasLayer => ({ x, y, stackOrder,});
const stacked = (blocks: CanvasLayer[]) => [...blocks].sort(canvasStackingOrder).map((b) => `${b.x},${b.y}`);
describe("canvasStackingOrder", () => { test("falls back to position order when nothing is layered", () => { expect( stacked([block(50, 100), block(10, 0), block(90, 0), block(0, 100)]), ).toEqual(["10,0", "90,0", "0,100", "50,100"]); });
test("puts every layered block above every unlayered one", () => { expect(stacked([block(0, 500, "a0"), block(0, 0), block(0, 900)])).toEqual([ "0,0", "0,900", "0,500", ]); });
test("orders layered blocks by their index, ignoring position", () => { expect( [block(3, 900, "a0"), block(1, 100, "a2"), block(2, 500, "a1")] .sort(canvasStackingOrder) .map((b) => b.x), ).toEqual([3, 2, 1]); });});
describe("canvasStackOrders", () => { test("returns stack orders positioned against the input order, not paint order", () => { // Reading order: top-left, then the two lower ones. Paint order lifts the // layered block (index 2) above the rest. let blocks = [block(0, 0), block(10, 100), block(20, 100, "a0")]; expect(canvasStackOrders(blocks)).toEqual([1, 2, 3]);
let reordered = [block(20, 100, "a0"), block(0, 0), block(10, 100)]; expect(canvasStackOrders(reordered)).toEqual([3, 1, 2]); });});