import { Jimp, mkJGD, hasOwnProp } from '@jimp/test-utils'; import configure from '@jimp/custom'; import blit from '@jimp/plugin-blit'; import resize from '@jimp/plugin-resize'; import scale from '@jimp/plugin-scale'; import contain from '../src'; const jimp = configure({ plugins: [scale, resize, blit, contain] }, Jimp); describe('All align combinations for contain', () => { const verticalJGD = mkJGD( '▴▴▴▴▸▸▸▸', '▴▴▴▴▸▸▸▸', '▴▴▴▴▸▸▸▸', '▴▴▴▴▸▸▸▸', '▴▴▴▴▸▸▸▸', '▴▴▴▴▸▸▸▸', '▾▾▾▾◆◆◆◆', '▾▾▾▾◆◆◆◆', '▾▾▾▾◆◆◆◆', '▾▾▾▾◆◆◆◆', '▾▾▾▾◆◆◆◆', '▾▾▾▾◆◆◆◆' ); const horizontalJGD = mkJGD( '▴▴▴▴▴▴▸▸▸▸▸▸', '▴▴▴▴▴▴▸▸▸▸▸▸', '▴▴▴▴▴▴▸▸▸▸▸▸', '▴▴▴▴▴▴▸▸▸▸▸▸', '▾▾▾▾▾▾◆◆◆◆◆◆', '▾▾▾▾▾▾◆◆◆◆◆◆', '▾▾▾▾▾▾◆◆◆◆◆◆', '▾▾▾▾▾▾◆◆◆◆◆◆' ); let vertical; let horizontal; // stores the Jimp instances of the JGD images above. before(done => { const img1 = jimp.read(verticalJGD); const img2 = jimp.read(horizontalJGD); Promise.all([img1, img2]) .then(images => { vertical = images[0]; horizontal = images[1]; done(); }) .catch(done); }); const tests = {}; // Stores the expected result for each alignment combination. tests['LEFT TOP'] = { contain: { verti: mkJGD('▴▴▸▸ ', '▴▴▸▸ ', '▴▴▸▸ ', '▾▾◆◆ ', '▾▾◆◆ ', '▾▾◆◆ '), horiz: mkJGD('▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ', ' ') } }; tests['CENTER TOP'] = { contain: { verti: mkJGD(' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▾▾◆◆ ', ' ▾▾◆◆ ', ' ▾▾◆◆ '), horiz: mkJGD('▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ', ' ') } }; tests['RIGHT TOP'] = { contain: { verti: mkJGD(' ▴▴▸▸', ' ▴▴▸▸', ' ▴▴▸▸', ' ▾▾◆◆', ' ▾▾◆◆', ' ▾▾◆◆'), horiz: mkJGD('▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ', ' ') } }; tests['LEFT MIDDLE'] = { contain: { verti: mkJGD('▴▴▸▸ ', '▴▴▸▸ ', '▴▴▸▸ ', '▾▾◆◆ ', '▾▾◆◆ ', '▾▾◆◆ '), horiz: mkJGD(' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ') } }; tests['CENTER MIDDLE'] = { contain: { verti: mkJGD(' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▾▾◆◆ ', ' ▾▾◆◆ ', ' ▾▾◆◆ '), horiz: mkJGD(' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ') } }; tests['RIGHT MIDDLE'] = { contain: { verti: mkJGD(' ▴▴▸▸', ' ▴▴▸▸', ' ▴▴▸▸', ' ▾▾◆◆', ' ▾▾◆◆', ' ▾▾◆◆'), horiz: mkJGD(' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ') } }; tests['LEFT BOTTOM'] = { contain: { verti: mkJGD('▴▴▸▸ ', '▴▴▸▸ ', '▴▴▸▸ ', '▾▾◆◆ ', '▾▾◆◆ ', '▾▾◆◆ '), horiz: mkJGD(' ', ' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆') } }; tests['CENTER BOTTOM'] = { contain: { verti: mkJGD(' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▾▾◆◆ ', ' ▾▾◆◆ ', ' ▾▾◆◆ '), horiz: mkJGD(' ', ' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆') } }; tests['RIGHT BOTTOM'] = { contain: { verti: mkJGD(' ▴▴▸▸', ' ▴▴▸▸', ' ▴▴▸▸', ' ▾▾◆◆', ' ▾▾◆◆', ' ▾▾◆◆'), horiz: mkJGD(' ', ' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆') } }; function runAlignTest(align) { const jgdContainV = tests[align].contain.verti; const jgdContainH = tests[align].contain.horiz; let a = align.split(' '); a = Jimp['HORIZONTAL_ALIGN_' + a[0]] | Jimp['VERTICAL_ALIGN_' + a[1]]; it('contain aligned to ' + align, () => { vertical .clone() .contain(6, 6, a) .getJGDSync() .should.be.sameJGD(jgdContainV, 'Vertical image'); horizontal .clone() .contain(6, 6, a) .getJGDSync() .should.be.sameJGD(jgdContainH, 'Horizontal image'); }); } for (const align in tests) if (hasOwnProp(tests, align)) runAlignTest(align); });