39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { readFile } from "node:fs/promises";
|
|
|
|
const source = await readFile(new URL("../js/mce_transform.js", import.meta.url), "utf8");
|
|
const moduleUrl = `data:text/javascript;base64,${Buffer.from(source).toString("base64")}`;
|
|
const { applyCanvasTransform, screenDeltaToOffset } = await import(moduleUrl);
|
|
|
|
|
|
const calls = [];
|
|
const context = {
|
|
translate: (...args) => calls.push(["translate", ...args]),
|
|
scale: (...args) => calls.push(["scale", ...args]),
|
|
rotate: (...args) => calls.push(["rotate", ...args]),
|
|
};
|
|
const state = {
|
|
scale: 2,
|
|
rotation: 90,
|
|
flipH: true,
|
|
flipV: false,
|
|
offsetX: 100,
|
|
offsetY: -25,
|
|
};
|
|
|
|
applyCanvasTransform(context, state, 0.5, 320, 240);
|
|
|
|
assert.deepEqual(calls, [
|
|
["translate", 320, 240],
|
|
["scale", 0.5, 0.5],
|
|
["translate", 100, -25],
|
|
["rotate", Math.PI / 2],
|
|
["scale", 2, 2],
|
|
["scale", -1, 1],
|
|
]);
|
|
|
|
assert.deepEqual(screenDeltaToOffset(50, -20, 0.5), [100, -40]);
|
|
assert.deepEqual(screenDeltaToOffset(50, -20, 2), [25, -10]);
|
|
|
|
console.log("frontend transform contract: OK");
|