| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | 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);});
 |