import { describe, expect, test } from "vitest"; import { createJimp } from "@jimp/core"; import { makeTestImage } from "@jimp/test-utils"; import { methods } from "./index.js"; const jimp = createJimp({ plugins: [methods] }); describe("Rotate a image with even size", () => { const imgSrc = jimp.fromBitmap( makeTestImage( "▰▴▴▴▪▪▪▰", "▴▴▴▴▪▪▪▪", "▴▴▴▴▪▪▪▪", "▴▴▴▴▪▪▪▪", "▪▪▪▪▴▴▴▴", "▪▪▪▪▴▴▴▴", "▪▪▪▪▴▴▴▴", "▦▪▪▪▴▴▴▦", ), ); const angles = [ 1, 91, 30, 45, 60, 90, -90, 120, 135, 180, 225, 270, 315, 360, ]; angles.forEach((angle) => { test(`${angle} degrees`, () => { expect(imgSrc.clone().rotate(angle)).toMatchSnapshot(); }); }); }); describe("Rotate a image with odd size", () => { const imgSrc = jimp.fromBitmap( makeTestImage( "▴▴▴▦▪▪▪", "▴▴▴▦▪▪▪", "▴▴▴▦▪▪▪", "▦▦▦▦▦▦▦", "▴▴▴▦▴▴▴", "▴▴▴▦▴▴▴", "▴▴▴▦▴▴▴", ), ); const angles = [45, 135, 225, 315]; angles.forEach((angle) => { test(`${angle} degrees`, () => { expect(imgSrc.clone().rotate(angle)).toMatchSnapshot(); }); }); }); describe("Rotate a non-square image", () => { const imgSrc = jimp.fromBitmap( makeTestImage("▴▴▴▴▪▪▪▪", "▴▴▴▴▪▪▪▪", "▦▦▦▦▴▴▴▴", "▦▦▦▦▴▴▴▴"), ); const angles = [1, 10, 30, 45, 90, -90, 135, 180, 225, 315, -180, -270]; angles.forEach((angle) => { test(`${angle} degrees`, () => { expect(imgSrc.clone().rotate(angle)).toMatchSnapshot(); }); }); }); describe("Rotate a non-square image without resizing", () => { const imgSrc = jimp.fromBitmap( makeTestImage("□□□□□□□□", "▹▹▹▹▹▹▹▹", "▿▿▿▿▿▿▿▿", "□□□□□□□□"), ); const angles = [90, 180, 270, 45]; angles.forEach((angle) => { test(`${angle} degrees`, () => { expect( imgSrc.clone().rotate({ deg: angle, mode: false }), ).toMatchSnapshot(); }); }); });