132 lines
5.0 KiB
JavaScript
132 lines
5.0 KiB
JavaScript
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);
|
|
});
|