rotation.test.js•16.2 kB
import { Jimp, mkJGD } from "@jimp/test-utils";
import configure from "@jimp/custom";
import blit from "@jimp/plugin-blit";
import crop from "@jimp/plugin-crop";
import resize from "@jimp/plugin-resize";
import rotate from "../src";
import { expectToBeJGD } from "@jimp/test-utils/src";
const jimp = configure({ plugins: [rotate, blit, crop, resize] }, Jimp);
describe("Rotate a image with even size", () => {
let imgSrc = null;
before((done) => {
jimp
.read(
mkJGD(
"▰▴▴▴▪▪▪▰",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▦▪▪▪▴▴▴▦"
)
)
.then((imgJimp) => {
imgSrc = imgJimp;
done();
})
.catch(done);
});
it("1 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(1, true).getJGDSync(),
mkJGD(
"▰▴▴▴▪▪▪▰ ",
"▴▴▴▴▪▪▪▪ ",
"▴▴▴▴▪▪▪▪ ",
"▴▴▴▴▪▪▪▪ ",
"▪▪▪▪▴▴▴▴ ",
"▪▪▪▪▴▴▴▴ ",
"▪▪▪▪▴▴▴▴ ",
"▦▪▪▪▴▴▴▦ ",
" ",
" "
)
);
});
it("91 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(91, true).getJGDSync(),
mkJGD(
" ",
"▰▪▪▪▴▴▴▦ ",
"▪▪▪▪▴▴▴▴ ",
"▪▪▪▪▴▴▴▴ ",
"▪▪▪▪▴▴▴▴ ",
"▴▴▴▴▪▪▪▪ ",
"▴▴▴▴▪▪▪▪ ",
"▴▴▴▴▪▪▪▪ ",
"▰▴▴▴▪▪▪▦ ",
" "
)
);
});
it("30 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(30, true).getJGDSync(),
mkJGD(
" ▰▰ ",
" ▪▪▪▪ ",
" ▴▪▪▪▪▪ ",
"▴▴▴▴▪▪▪▪ ",
"▴▴▴▴▪▪▴▴▴ ",
"▴▴▴▴▪▴▴▴▴▴ ",
" ▴▴▪▪▴▴▴▴▦ ",
" ▪▪▪▪▪▴▴▴ ",
" ▪▪▪▪▪ ",
" ▪▪▪ ",
" ▦ ",
" "
)
);
});
it("45 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(45, true).getJGDSync(),
mkJGD(
" ",
" ▰ ",
" ▪▪▪ ",
" ▪▪▪▪▪ ",
" ▴▴▪▪▪▪▴ ",
" ▴▴▴▴▪▪▴▴▴ ",
"▰▰▴▴▴▴▴▴▴▴▦ ",
" ▴▴▴▴▪▪▴▴▴ ",
" ▴▴▪▪▪▪▴ ",
" ▪▪▪▪▪ ",
" ▪▪▪ ",
" ▦ ",
" ",
" "
)
);
});
it("60 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(60, true).getJGDSync(),
mkJGD(
" ▰ ",
" ▪▪▪ ",
" ▪▪▪▪▪ ",
" ▪▪▪▪▪▴▴▴ ",
" ▴▴▪▪▴▴▴▴▦ ",
"▴▴▴▴▪▴▴▴▴▴ ",
"▴▴▴▴▪▪▴▴▴ ",
"▴▴▴▴▪▪▪▪ ",
" ▴▪▪▪▪▪ ",
" ▪▪▪▪ ",
" ▦▦ ",
" "
)
);
});
it("90 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(90, true).getJGDSync(),
mkJGD(
"▰▪▪▪▴▴▴▦",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▰▴▴▴▪▪▪▦"
)
);
});
it("-90 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(-90, true).getJGDSync(),
mkJGD(
"▦▪▪▪▴▴▴▰",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▦▴▴▴▪▪▪▰"
)
);
});
it("120 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(120, true).getJGDSync(),
mkJGD(
" ",
" ▴▦ ",
" ▴▴▴▴ ",
" ▪▪▴▴▴▴ ",
"▰▪▪▪▴▴▴▴▪ ",
"▰▪▪▪▪▴▴▪▪▪ ",
" ▪▪▪▪▪▪▪▪▪ ",
" ▪▪▴▴▴▪▪▪▪▦ ",
" ▴▴▴▴▴▪▪ ",
" ▴▴▴▴▪ ",
" ▴▴▴ ",
" "
)
);
});
it("135 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(135, true).getJGDSync(),
mkJGD(
" ",
" ",
" ▦ ",
" ▴▴▴ ",
" ▴▴▴▴▴ ",
" ▪▪▴▴▴▪▪ ",
" ▪▪▪▪▴▪▪▪▪ ",
" ▰▪▪▪▪▴▪▪▪▪▦ ",
" ▪▪▪▴▴▴▪▪▪ ",
" ▪▴▴▴▴▴▪ ",
" ▴▴▴▴▴ ",
" ▴▰▴ ",
" ▰ ",
" "
)
);
});
it("180 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(180, true).getJGDSync(),
mkJGD(
"▦▴▴▴▪▪▪▦",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▰▪▪▪▴▴▴▰"
)
);
});
it("225 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(225, true).getJGDSync(),
mkJGD(
" ",
" ▦ ",
" ▪▪▪ ",
" ▪▪▪▪▪ ",
" ▴▪▪▪▪▴▴ ",
" ▴▴▴▪▪▴▴▴▴ ",
" ▦▴▴▴▴▴▴▴▴▰▰ ",
" ▴▴▴▪▪▴▴▴▴ ",
" ▴▪▪▪▪▴▴ ",
" ▪▪▪▪▪ ",
" ▪▪▪ ",
" ▰ ",
" ",
" "
)
);
});
it("270 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(270, true).getJGDSync(),
mkJGD(
"▦▪▪▪▴▴▴▰",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▦▴▴▴▪▪▪▰"
)
);
});
it("315 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(315, true).getJGDSync(),
mkJGD(
" ▰ ",
" ▴▰▴ ",
" ▴▴▴▴▴ ",
" ▪▴▴▴▴▴▪ ",
" ▪▪▪▴▴▴▪▪▪ ",
" ▦▪▪▪▪▴▪▪▪▪▰ ",
" ▪▪▪▪▴▪▪▪▪ ",
" ▪▪▴▴▴▪▪ ",
" ▴▴▴▴▴ ",
" ▴▴▴ ",
" ▦ ",
" ",
" ",
" "
)
);
});
it("360 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(360, true).getJGDSync(),
mkJGD(
"▰▴▴▴▪▪▪▰",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▴▴▴▴▪▪▪▪",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▪▪▪▪▴▴▴▴",
"▦▪▪▪▴▴▴▦"
)
);
});
});
describe("Rotate a image with odd size", () => {
let imgSrc = null;
before((done) => {
jimp
.read(
mkJGD(
"▴▴▴▦▪▪▪",
"▴▴▴▦▪▪▪",
"▴▴▴▦▪▪▪",
"▦▦▦▦▦▦▦",
"▴▴▴▦▴▴▴",
"▴▴▴▦▴▴▴",
"▴▴▴▦▴▴▴"
)
)
.then((imgJimp) => {
imgSrc = imgJimp;
done();
})
.catch(done);
});
it("45 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(45, true).getJGDSync(),
mkJGD(
" ",
" ▪ ",
" ▪▪▪ ",
" ▦▪▪▪▦ ",
" ▴▴▦▪▦▴▴ ",
" ▴▴▴▴▦▴▴▴▴ ",
" ▴▴▦▴▦▴▴ ",
" ▦▴▴▴▦ ",
" ▴▴▴ ",
" ▴ ",
" ",
" "
)
);
});
it("135 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(135, true).getJGDSync(),
mkJGD(
" ",
" ▴ ",
" ▴▴▴ ",
" ▦▴▴▴▦ ",
" ▪▪▦▴▦▴▴ ",
" ▪▪▪▪▦▴▴▴▴ ",
" ▪▪▦▴▦▴▴ ",
" ▦▴▴▴▦ ",
" ▴▴▴ ",
" ▴ ",
" ",
" "
)
);
});
it("225 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(225, true).getJGDSync(),
mkJGD(
" ",
" ▴ ",
" ▴▴▴ ",
" ▦▴▴▴▦ ",
" ▴▴▦▴▦▴▴ ",
" ▴▴▴▴▦▴▴▴▴ ",
" ▴▴▦▪▦▴▴ ",
" ▦▪▪▪▦ ",
" ▪▪▪ ",
" ▪ ",
" ",
" "
)
);
});
it("315 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(315, true).getJGDSync(),
mkJGD(
" ",
" ▴ ",
" ▴▴▴ ",
" ▦▴▴▴▦ ",
" ▴▴▦▴▦▪▪ ",
" ▴▴▴▴▦▪▪▪▪ ",
" ▴▴▦▴▦▪▪ ",
" ▦▴▴▴▦ ",
" ▴▴▴ ",
" ▴ ",
" ",
" "
)
);
});
});
describe("Rotate a non-square image", () => {
let imgSrc = null;
before((done) => {
jimp
.read(mkJGD("▴▴▴▴▪▪▪▪", "▴▴▴▴▪▪▪▪", "▦▦▦▦▴▴▴▴", "▦▦▦▦▴▴▴▴"))
.then((imgJimp) => {
imgSrc = imgJimp;
done();
})
.catch(done);
});
it("1 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(1, true).getJGDSync(),
mkJGD(
"▴▴▴▴▪▪▪▪ ",
"▴▴▴▴▪▪▪▪ ",
"▦▦▦▦▴▴▴▴ ",
"▦▦▦▦▴▴▴▴ ",
" ",
" "
)
);
});
it("10 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(10, true).getJGDSync(),
mkJGD(
" ▪ ",
" ▴▴▴▪▪▪▪ ",
"▴▴▴▴▪▪▪▴ ",
"▴▴▦▦▴▴▴▴ ",
"▦▦▦▦▴▴▴ ",
"▦▦ ",
" ",
" "
)
);
});
it("30 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(30, true).getJGDSync(),
mkJGD(
" ",
" ▪▪ ",
" ▪▪▪▪ ",
" ▴▴▪▪▴▴▴ ",
"▴▴▴▦▴▴▴ ",
"▴▴▦▦▴▴ ",
"▦▦▦▦ ",
" ▦ ",
" ",
" "
)
);
});
it("45 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(45, true).getJGDSync(),
mkJGD(
" ",
" ▪▪ ",
" ▪▪▪▴ ",
" ▴▪▪▴▴▴ ",
" ▴▴▴▴▴▴ ",
"▴▴▴▦▦▴ ",
"▴▴▦▦▦ ",
" ▦▦▦ ",
" ▦ ",
" "
)
);
});
it("90 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(90, true).getJGDSync(),
mkJGD("▪▪▴▴", "▪▪▴▴", "▪▪▴▴", "▪▪▴▴", "▴▴▦▦", "▴▴▦▦", "▴▴▦▦", "▴▴▦▦")
);
});
it("-90 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(-90, true).getJGDSync(),
mkJGD("▦▦▴▴", "▦▦▴▴", "▦▦▴▴", "▦▦▴▴", "▴▴▪▪", "▴▴▪▪", "▴▴▪▪", "▴▴▪▪")
);
});
it("135 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(135, true).getJGDSync(),
mkJGD(
" ",
" ▴ ",
" ▴▴▴ ",
" ▪▪▴▴▴ ",
" ▪▪▪▴▦▦ ",
" ▪▪▴▦▦▦ ",
" ▴▴▴▦▦▦ ",
" ▴▴▴▦ ",
" ▴▴ ",
" "
)
);
});
it("180 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(180, true).getJGDSync(),
mkJGD("▴▴▴▴▦▦▦▦", "▴▴▴▴▦▦▦▦", "▪▪▪▪▴▴▴▴", "▪▪▪▪▴▴▴▴")
);
});
it("225 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(225, true).getJGDSync(),
mkJGD(
" ▦ ",
" ▦▦▦ ",
" ▦▦▦▴▴ ",
" ▴▦▦▴▴▴ ",
" ▴▴▴▴▴▴ ",
" ▴▴▴▪▪▴ ",
" ▴▪▪▪ ",
" ▪▪ ",
" ",
" "
)
);
});
it("315 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(315, true).getJGDSync(),
mkJGD(
" ▴▴ ",
" ▦▴▴▴ ",
"▦▦▦▴▴▴ ",
" ▦▦▦▴▪▪ ",
" ▦▦▴▪▪▪ ",
" ▴▴▴▪▪ ",
" ▴▴▴ ",
" ▴ ",
" ",
" "
)
);
});
it("-180 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(-180, true).getJGDSync(),
mkJGD("▴▴▴▴▦▦▦▦", "▴▴▴▴▦▦▦▦", "▪▪▪▪▴▴▴▴", "▪▪▪▪▴▴▴▴")
);
});
it("-270 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(-270, true).getJGDSync(),
mkJGD("▪▪▴▴", "▪▪▴▴", "▪▪▴▴", "▪▪▴▴", "▴▴▦▦", "▴▴▦▦", "▴▴▦▦", "▴▴▦▦")
);
});
});
describe("Rotate a non-square image without resizing", () => {
let imgSrc = null;
before((done) => {
jimp
.read(mkJGD("□□□□□□□□", "▹▹▹▹▹▹▹▹", "▿▿▿▿▿▿▿▿", "□□□□□□□□"))
.then((imgJimp) => {
imgSrc = imgJimp;
done();
})
.catch(done);
});
it("90 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(90, false).getJGDSync(),
mkJGD(" □▹▿□ ", " □▹▿□ ", " □▹▿□ ", " □▹▿□ ")
);
});
it("180 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(180, false).getJGDSync(),
mkJGD("□□□□□□□□", "▿▿▿▿▿▿▿▿", "▹▹▹▹▹▹▹▹", "□□□□□□□□")
);
});
it("270 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(270, false).getJGDSync(),
mkJGD(" □▿▹□ ", " □▿▹□ ", " □▿▹□ ", " □▿▹□ ")
);
});
it("45 degrees", () => {
expectToBeJGD(
imgSrc.clone().rotate(45, false).getJGDSync(),
mkJGD(" □▹▹▿□□ ", "□▹▹▿□□ ", "▹▹▿□□ ", "▹▿□□ ")
);
});
});