mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { canvasFor } from "../../../apps/api/src/routes/tools/aspect-pad.js";
|
|
|
|
describe("canvasFor", () => {
|
|
it("wide source into tall ratio (landscape into 9:16)", () => {
|
|
// 1920x1080 into 9:16
|
|
const { cw, ch } = canvasFor(1920, 1080, 9, 16);
|
|
// Source is wider than 9:16, so height expands: ch = round(1920*16/9) = 3414 (even: 3414)
|
|
// cw stays 1920 (even)
|
|
expect(cw % 2).toBe(0);
|
|
expect(ch % 2).toBe(0);
|
|
expect(cw).toBe(1920);
|
|
expect(ch).toBe(Math.round((1920 * 16) / 9) + (Math.round((1920 * 16) / 9) % 2));
|
|
});
|
|
|
|
it("tall source into wide ratio (portrait into 16:9)", () => {
|
|
// 1080x1920 into 16:9
|
|
const { cw, ch } = canvasFor(1080, 1920, 16, 9);
|
|
// Source is taller than 16:9, so width expands: cw = round(1920*16/9) = 3414 (even: 3414)
|
|
// ch stays 1920 (even)
|
|
expect(cw % 2).toBe(0);
|
|
expect(ch % 2).toBe(0);
|
|
expect(ch).toBe(1920);
|
|
expect(cw).toBe(Math.round((1920 * 16) / 9) + (Math.round((1920 * 16) / 9) % 2));
|
|
});
|
|
|
|
it("already matching ratio returns same-ish dims (both even)", () => {
|
|
const { cw, ch } = canvasFor(1920, 1080, 16, 9);
|
|
expect(cw % 2).toBe(0);
|
|
expect(ch % 2).toBe(0);
|
|
expect(cw).toBe(1920);
|
|
expect(ch).toBe(1080);
|
|
});
|
|
|
|
it("odd-dim source gets even output", () => {
|
|
const { cw, ch } = canvasFor(101, 101, 1, 1);
|
|
expect(cw % 2).toBe(0);
|
|
expect(ch % 2).toBe(0);
|
|
// 101 is odd, so cw should be 102
|
|
expect(cw).toBe(102);
|
|
expect(ch).toBe(102);
|
|
});
|
|
|
|
it("small source into 4:3", () => {
|
|
const { cw, ch } = canvasFor(64, 48, 4, 3);
|
|
expect(cw % 2).toBe(0);
|
|
expect(ch % 2).toBe(0);
|
|
expect(cw).toBe(64);
|
|
expect(ch).toBe(48);
|
|
});
|
|
});
|