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'; 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', () => { imgSrc .clone() .rotate(1, true) .getJGDSync() .should.be.sameJGD( mkJGD( '▰▴▴▴▪▪▪▰ ', '▴▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▪▪ ', '▪▪▪▪▴▴▴▴ ', '▪▪▪▪▴▴▴▴ ', '▪▪▪▪▴▴▴▴ ', '▦▪▪▪▴▴▴▦ ', ' ', ' ' ) ); }); it('91 degrees', () => { imgSrc .clone() .rotate(91, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', '▰▪▪▪▴▴▴▦ ', '▪▪▪▪▴▴▴▴ ', '▪▪▪▪▴▴▴▴ ', '▪▪▪▪▴▴▴▴ ', '▴▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▪▪ ', '▰▴▴▴▪▪▪▦ ', ' ' ) ); }); it('30 degrees', () => { imgSrc .clone() .rotate(30, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ▰▰ ', ' ▪▪▪▪ ', ' ▴▪▪▪▪▪ ', '▴▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▴▴▴ ', '▴▴▴▴▪▴▴▴▴▴ ', ' ▴▴▪▪▴▴▴▴▦ ', ' ▪▪▪▪▪▴▴▴ ', ' ▪▪▪▪▪ ', ' ▪▪▪ ', ' ▦ ', ' ' ) ); }); it('45 degrees', () => { imgSrc .clone() .rotate(45, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▰ ', ' ▪▪▪ ', ' ▪▪▪▪▪ ', ' ▴▴▪▪▪▪▴ ', ' ▴▴▴▴▪▪▴▴▴ ', '▰▰▴▴▴▴▴▴▴▴▦ ', ' ▴▴▴▴▪▪▴▴▴ ', ' ▴▴▪▪▪▪▴ ', ' ▪▪▪▪▪ ', ' ▪▪▪ ', ' ▦ ', ' ', ' ' ) ); }); it('60 degrees', () => { imgSrc .clone() .rotate(60, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ▰ ', ' ▪▪▪ ', ' ▪▪▪▪▪ ', ' ▪▪▪▪▪▴▴▴ ', ' ▴▴▪▪▴▴▴▴▦ ', '▴▴▴▴▪▴▴▴▴▴ ', '▴▴▴▴▪▪▴▴▴ ', '▴▴▴▴▪▪▪▪ ', ' ▴▪▪▪▪▪ ', ' ▪▪▪▪ ', ' ▦▦ ', ' ' ) ); }); it('90 degrees', () => { imgSrc .clone() .rotate(90, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', '▰▪▪▪▴▴▴▦ ', '▪▪▪▪▴▴▴▴ ', '▪▪▪▪▴▴▴▴ ', '▪▪▪▪▴▴▴▴ ', '▴▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▪▪ ', '▰▴▴▴▪▪▪▦ ', ' ' ) ); }); it('120 degrees', () => { imgSrc .clone() .rotate(120, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▴▦ ', ' ▴▴▴▴ ', ' ▪▪▴▴▴▴ ', '▰▪▪▪▴▴▴▴▪ ', '▰▪▪▪▪▴▴▪▪▪ ', ' ▪▪▪▪▪▪▪▪▪ ', ' ▪▪▴▴▴▪▪▪▪▦ ', ' ▴▴▴▴▴▪▪ ', ' ▴▴▴▴▪ ', ' ▴▴▴ ', ' ' ) ); }); it('135 degrees', () => { imgSrc .clone() .rotate(135, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ', ' ▦ ', ' ▴▴▴ ', ' ▴▴▴▴▴ ', ' ▪▪▴▴▴▪▪ ', ' ▪▪▪▪▴▪▪▪▪ ', ' ▰▪▪▪▪▴▪▪▪▪▦ ', ' ▪▪▪▴▴▴▪▪▪ ', ' ▪▴▴▴▴▴▪ ', ' ▴▴▴▴▴ ', ' ▴▰▴ ', ' ▰ ', ' ' ) ); }); it('180 degrees', () => { imgSrc .clone() .rotate(180, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▦▴▴▴▪▪▪▦ ', ' ▴▴▴▴▪▪▪▪ ', ' ▴▴▴▴▪▪▪▪ ', ' ▴▴▴▴▪▪▪▪ ', ' ▪▪▪▪▴▴▴▴ ', ' ▪▪▪▪▴▴▴▴ ', ' ▪▪▪▪▴▴▴▴ ', ' ▰▪▪▪▴▴▴▰ ', ' ' ) ); }); it('225 degrees', () => { imgSrc .clone() .rotate(225, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▦ ', ' ▪▪▪ ', ' ▪▪▪▪▪ ', ' ▴▪▪▪▪▴▴ ', ' ▴▴▴▪▪▴▴▴▴ ', ' ▦▴▴▴▴▴▴▴▴▰▰ ', ' ▴▴▴▪▪▴▴▴▴ ', ' ▴▪▪▪▪▴▴ ', ' ▪▪▪▪▪ ', ' ▪▪▪ ', ' ▰ ', ' ', ' ' ) ); }); it('270 degrees', () => { imgSrc .clone() .rotate(270, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ▦▪▪▪▴▴▴▰ ', ' ▪▪▪▪▴▴▴▴ ', ' ▪▪▪▪▴▴▴▴ ', ' ▪▪▪▪▴▴▴▴ ', ' ▴▴▴▴▪▪▪▪ ', ' ▴▴▴▴▪▪▪▪ ', ' ▴▴▴▴▪▪▪▪ ', ' ▦▴▴▴▪▪▪▰ ', ' ', ' ' ) ); }); it('315 degrees', () => { imgSrc .clone() .rotate(315, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ▰ ', ' ▴▰▴ ', ' ▴▴▴▴▴ ', ' ▪▴▴▴▴▴▪ ', ' ▪▪▪▴▴▴▪▪▪ ', ' ▦▪▪▪▪▴▪▪▪▪▰ ', ' ▪▪▪▪▴▪▪▪▪ ', ' ▪▪▴▴▴▪▪ ', ' ▴▴▴▴▴ ', ' ▴▴▴ ', ' ▦ ', ' ', ' ', ' ' ) ); }); it('360 degrees', () => { imgSrc .clone() .rotate(360, true) .getJGDSync() .should.be.sameJGD( 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', () => { imgSrc .clone() .rotate(45, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▪ ', ' ▪▪▪ ', ' ▦▪▪▪▦ ', ' ▴▴▦▪▦▴▴ ', ' ▴▴▴▴▦▴▴▴▴ ', ' ▴▴▦▴▦▴▴ ', ' ▦▴▴▴▦ ', ' ▴▴▴ ', ' ▴ ', ' ', ' ' ) ); }); it('135 degrees', () => { imgSrc .clone() .rotate(135, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▴ ', ' ▴▴▴ ', ' ▦▴▴▴▦ ', ' ▪▪▦▴▦▴▴ ', ' ▪▪▪▪▦▴▴▴▴ ', ' ▪▪▦▴▦▴▴ ', ' ▦▴▴▴▦ ', ' ▴▴▴ ', ' ▴ ', ' ', ' ' ) ); }); it('225 degrees', () => { imgSrc .clone() .rotate(225, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▴ ', ' ▴▴▴ ', ' ▦▴▴▴▦ ', ' ▴▴▦▴▦▴▴ ', ' ▴▴▴▴▦▴▴▴▴ ', ' ▴▴▦▪▦▴▴ ', ' ▦▪▪▪▦ ', ' ▪▪▪ ', ' ▪ ', ' ', ' ' ) ); }); it('315 degrees', () => { imgSrc .clone() .rotate(315, true) .getJGDSync() .should.be.sameJGD( 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', () => { imgSrc .clone() .rotate(1, true) .getJGDSync() .should.be.sameJGD( mkJGD( '▴▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▪▪ ', '▦▦▦▦▴▴▴▴ ', '▦▦▦▦▴▴▴▴ ', ' ', ' ' ) ); }); it('10 degrees', () => { imgSrc .clone() .rotate(10, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ▪ ', ' ▴▴▴▪▪▪▪ ', '▴▴▴▴▪▪▪▴ ', '▴▴▦▦▴▴▴▴ ', '▦▦▦▦▴▴▴ ', '▦▦ ', ' ', ' ' ) ); }); it('30 degrees', () => { imgSrc .clone() .rotate(30, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▪▪ ', ' ▪▪▪▪ ', ' ▴▴▪▪▴▴▴ ', '▴▴▴▦▴▴▴ ', '▴▴▦▦▴▴ ', '▦▦▦▦ ', ' ▦ ', ' ', ' ' ) ); }); it('45 degrees', () => { imgSrc .clone() .rotate(45, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▪▪ ', ' ▪▪▪▴ ', ' ▴▪▪▴▴▴ ', ' ▴▴▴▴▴▴ ', '▴▴▴▦▦▴ ', '▴▴▦▦▦ ', ' ▦▦▦ ', ' ▦ ', ' ' ) ); }); it('90 degrees', () => { imgSrc .clone() .rotate(90, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', '▪▪▴▴ ', '▪▪▴▴ ', '▪▪▴▴ ', '▪▪▴▴ ', '▴▴▦▦ ', '▴▴▦▦ ', '▴▴▦▦ ', '▴▴▦▦ ', ' ' ) ); }); it('135 degrees', () => { imgSrc .clone() .rotate(135, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▴ ', ' ▴▴▴ ', ' ▪▪▴▴▴ ', ' ▪▪▪▴▦▦ ', ' ▪▪▴▦▦▦ ', ' ▴▴▴▦▦▦ ', ' ▴▴▴▦ ', ' ▴▴ ', ' ' ) ); }); it('180 degrees', () => { imgSrc .clone() .rotate(180, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ', ' ▴▴▴▴▦▦▦▦ ', ' ▴▴▴▴▦▦▦▦ ', ' ▪▪▪▪▴▴▴▴ ', ' ▪▪▪▪▴▴▴▴ ', ' ' ) ); }); it('225 degrees', () => { imgSrc .clone() .rotate(225, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ▦ ', ' ▦▦▦ ', ' ▦▦▦▴▴ ', ' ▴▦▦▴▴▴ ', ' ▴▴▴▴▴▴ ', ' ▴▴▴▪▪▴ ', ' ▴▪▪▪ ', ' ▪▪ ', ' ', ' ' ) ); }); it('315 degrees', () => { imgSrc .clone() .rotate(315, true) .getJGDSync() .should.be.sameJGD( mkJGD( ' ▴▴ ', ' ▦▴▴▴ ', '▦▦▦▴▴▴ ', ' ▦▦▦▴▪▪ ', ' ▦▦▴▪▪▪ ', ' ▴▴▴▪▪ ', ' ▴▴▴ ', ' ▴ ', ' ', ' ' ) ); }); });