Tests: refactor output paths, might enable parallel runs

This commit is contained in:
Lovell Fuller 2021-01-26 18:43:48 +00:00
parent 24d9e53c3f
commit 67213ae86c
5 changed files with 88 additions and 83 deletions

View File

@ -15,6 +15,10 @@ const jimp = require('jimp');
const fixtures = require('../fixtures');
const outputJpg = fixtures.path('output.jpg');
const outputPng = fixtures.path('output.png');
const outputWebP = fixtures.path('output.webp');
const width = 720;
const height = 588;
@ -56,7 +60,7 @@ async.series({
image
.resize(width, height, jimp.RESIZE_BICUBIC)
.quality(80)
.write(fixtures.outputJpg, function (err) {
.write(outputJpg, function (err) {
if (err) {
throw err;
} else {
@ -77,7 +81,7 @@ async.series({
.resize(width, height, {
scaling_method: mapnik.imageScaling.lanczos
})
.save(fixtures.outputJpg, 'jpeg:quality=80', function (err) {
.save(outputJpg, 'jpeg:quality=80', function (err) {
if (err) throw err;
deferred.resolve();
});
@ -105,7 +109,7 @@ async.series({
fn: function (deferred) {
imagemagick.resize({
srcPath: fixtures.inputJpg,
dstPath: fixtures.outputJpg,
dstPath: outputJpg,
quality: 0.8,
width: width,
height: height,
@ -128,7 +132,7 @@ async.series({
.filter('Lanczos')
.resize(width, height)
.quality(80)
.write(fixtures.outputJpg, function (err) {
.write(outputJpg, function (err) {
if (err) {
throw err;
} else {
@ -159,7 +163,7 @@ async.series({
.filter('Lanczos')
.resize(width, height)
.quality(80)
.write(fixtures.outputJpg, function (err) {
.write(outputJpg, function (err) {
if (err) {
throw err;
} else {
@ -190,7 +194,7 @@ async.series({
fn: function (deferred) {
sharp(inputJpgBuffer)
.resize(width, height)
.toFile(fixtures.outputJpg, function (err) {
.toFile(outputJpg, function (err) {
if (err) {
throw err;
} else {
@ -217,7 +221,7 @@ async.series({
fn: function (deferred) {
sharp(fixtures.inputJpg)
.resize(width, height)
.toFile(fixtures.outputJpg, function (err) {
.toFile(outputJpg, function (err) {
if (err) {
throw err;
} else {
@ -229,7 +233,7 @@ async.series({
defer: true,
fn: function (deferred) {
const readable = fs.createReadStream(fixtures.inputJpg);
const writable = fs.createWriteStream(fixtures.outputJpg);
const writable = fs.createWriteStream(outputJpg);
writable.on('finish', function () {
deferred.resolve();
});
@ -600,7 +604,7 @@ async.series({
.resize(width, height)
.deflateLevel(6)
.filterType(0)
.write(fixtures.outputPng, function (err) {
.write(outputPng, function (err) {
if (err) {
throw err;
} else {
@ -625,7 +629,7 @@ async.series({
if (err) throw err;
img.demultiply(function (err, img) {
if (err) throw err;
img.save(fixtures.outputPng, 'png', function (err) {
img.save(outputPng, 'png', function (err) {
if (err) throw err;
deferred.resolve();
});
@ -663,7 +667,7 @@ async.series({
fn: function (deferred) {
imagemagick.resize({
srcPath: fixtures.inputPngAlphaPremultiplicationLarge,
dstPath: fixtures.outputPng,
dstPath: outputPng,
width: width,
height: height,
filter: 'Lanczos',
@ -689,7 +693,7 @@ async.series({
.resize(width, height)
.define('PNG:compression-level=6')
.define('PNG:compression-filter=0')
.write(fixtures.outputPng, function (err) {
.write(outputPng, function (err) {
if (err) {
throw err;
} else {
@ -723,7 +727,7 @@ async.series({
sharp(inputPngBuffer)
.resize(width, height)
.png({ compressionLevel: 6 })
.toFile(fixtures.outputPng, function (err) {
.toFile(outputPng, function (err) {
if (err) {
throw err;
} else {
@ -754,7 +758,7 @@ async.series({
sharp(fixtures.inputPngAlphaPremultiplicationLarge)
.resize(width, height)
.png({ compressionLevel: 6 })
.toFile(fixtures.outputPng, function (err) {
.toFile(outputPng, function (err) {
if (err) {
throw err;
} else {
@ -841,7 +845,7 @@ async.series({
fn: function (deferred) {
sharp(inputWebPBuffer)
.resize(width, height)
.toFile(fixtures.outputWebP, function (err) {
.toFile(outputWebP, function (err) {
if (err) {
throw err;
} else {
@ -868,7 +872,7 @@ async.series({
fn: function (deferred) {
sharp(fixtures.inputWebP)
.resize(width, height)
.toFile(fixtures.outputWebP, function (err) {
.toFile(outputWebP, function (err) {
if (err) {
throw err;
} else {

View File

@ -23,7 +23,7 @@ new Benchmark.Suite('random').add('imagemagick', {
fn: function (deferred) {
imagemagick.resize({
srcPath: fixtures.inputJpg,
dstPath: fixtures.outputJpg,
dstPath: fixtures.path('output.jpg'),
quality: 0.8,
width: randomDimension(),
height: randomDimension(),

View File

@ -120,13 +120,6 @@ module.exports = {
inputV: getPath('vfile.v'),
outputJpg: getPath('output.jpg'),
outputPng: getPath('output.png'),
outputWebP: getPath('output.webp'),
outputV: getPath('output.v'),
outputTiff: getPath('output.tiff'),
outputZoinks: getPath('output.zoinks'), // an 'unknown' file extension
testPattern: getPath('test-pattern.png'),
// Path for tests requiring human inspection

View File

@ -7,6 +7,8 @@ const rimraf = require('rimraf');
const sharp = require('../../');
const fixtures = require('../fixtures');
const outputJpg = fixtures.path('output.jpg');
describe('Input/output', function () {
beforeEach(function () {
sharp.cache(false);
@ -16,16 +18,16 @@ describe('Input/output', function () {
});
it('Read from File and write to Stream', function (done) {
const writable = fs.createWriteStream(fixtures.outputJpg);
const writable = fs.createWriteStream(outputJpg);
writable.on('close', function () {
sharp(fixtures.outputJpg).toBuffer(function (err, data, info) {
sharp(outputJpg).toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
assert.strictEqual(data.length, info.size);
assert.strictEqual('jpeg', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(240, info.height);
rimraf(fixtures.outputJpg, done);
rimraf(outputJpg, done);
});
});
sharp(fixtures.inputJpg).resize(320, 240).pipe(writable);
@ -33,16 +35,16 @@ describe('Input/output', function () {
it('Read from Buffer and write to Stream', function (done) {
const inputJpgBuffer = fs.readFileSync(fixtures.inputJpg);
const writable = fs.createWriteStream(fixtures.outputJpg);
const writable = fs.createWriteStream(outputJpg);
writable.on('close', function () {
sharp(fixtures.outputJpg).toBuffer(function (err, data, info) {
sharp(outputJpg).toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
assert.strictEqual(data.length, info.size);
assert.strictEqual('jpeg', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(240, info.height);
rimraf(fixtures.outputJpg, done);
rimraf(outputJpg, done);
});
});
sharp(inputJpgBuffer).resize(320, 240).pipe(writable);
@ -50,13 +52,13 @@ describe('Input/output', function () {
it('Read from Stream and write to File', function (done) {
const readable = fs.createReadStream(fixtures.inputJpg);
const pipeline = sharp().resize(320, 240).toFile(fixtures.outputJpg, function (err, info) {
const pipeline = sharp().resize(320, 240).toFile(outputJpg, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual('jpeg', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(240, info.height);
rimraf(fixtures.outputJpg, done);
rimraf(outputJpg, done);
});
readable.pipe(pipeline);
});
@ -131,16 +133,16 @@ describe('Input/output', function () {
it('Read from Stream and write to Stream', function (done) {
const readable = fs.createReadStream(fixtures.inputJpg);
const writable = fs.createWriteStream(fixtures.outputJpg);
const writable = fs.createWriteStream(outputJpg);
writable.on('close', function () {
sharp(fixtures.outputJpg).toBuffer(function (err, data, info) {
sharp(outputJpg).toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
assert.strictEqual(data.length, info.size);
assert.strictEqual('jpeg', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(240, info.height);
rimraf(fixtures.outputJpg, done);
rimraf(outputJpg, done);
});
});
const pipeline = sharp().resize(320, 240);
@ -181,7 +183,7 @@ describe('Input/output', function () {
it('Stream should emit info event', function (done) {
const readable = fs.createReadStream(fixtures.inputJpg);
const writable = fs.createWriteStream(fixtures.outputJpg);
const writable = fs.createWriteStream(outputJpg);
const pipeline = sharp().resize(320, 240);
let infoEventEmitted = false;
pipeline.on('info', function (info) {
@ -193,7 +195,7 @@ describe('Input/output', function () {
});
writable.on('close', function () {
assert.strictEqual(true, infoEventEmitted);
rimraf(fixtures.outputJpg, done);
rimraf(outputJpg, done);
});
readable.pipe(pipeline).pipe(writable);
});
@ -205,10 +207,10 @@ describe('Input/output', function () {
anErrorWasEmitted = !!err;
}).on('end', function () {
assert(anErrorWasEmitted);
rimraf(fixtures.outputJpg, done);
rimraf(outputJpg, done);
});
const readableButNotAnImage = fs.createReadStream(__filename);
const writable = fs.createWriteStream(fixtures.outputJpg);
const writable = fs.createWriteStream(outputJpg);
readableButNotAnImage.pipe(pipeline).pipe(writable);
});
@ -219,24 +221,24 @@ describe('Input/output', function () {
anErrorWasEmitted = !!err;
}).on('end', function () {
assert(anErrorWasEmitted);
rimraf(fixtures.outputJpg, done);
rimraf(outputJpg, done);
});
const writable = fs.createWriteStream(fixtures.outputJpg);
const writable = fs.createWriteStream(outputJpg);
readableButNotAnImage.pipe(writable);
});
it('Readable side of Stream can start flowing after Writable side has finished', function (done) {
const readable = fs.createReadStream(fixtures.inputJpg);
const writable = fs.createWriteStream(fixtures.outputJpg);
const writable = fs.createWriteStream(outputJpg);
writable.on('close', function () {
sharp(fixtures.outputJpg).toBuffer(function (err, data, info) {
sharp(outputJpg).toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
assert.strictEqual(data.length, info.size);
assert.strictEqual('jpeg', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(240, info.height);
rimraf(fixtures.outputJpg, done);
rimraf(outputJpg, done);
});
});
const pipeline = sharp().resize(320, 240);
@ -443,68 +445,70 @@ describe('Input/output', function () {
});
describe('Output filename with unknown extension', function () {
const outputZoinks = fixtures.path('output.zoinks');
it('Match JPEG input', function (done) {
sharp(fixtures.inputJpg)
.resize(320, 80)
.toFile(fixtures.outputZoinks, function (err, info) {
.toFile(outputZoinks, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual('jpeg', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(80, info.height);
rimraf(fixtures.outputZoinks, done);
rimraf(outputZoinks, done);
});
});
it('Match PNG input', function (done) {
sharp(fixtures.inputPng)
.resize(320, 80)
.toFile(fixtures.outputZoinks, function (err, info) {
.toFile(outputZoinks, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual('png', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(80, info.height);
rimraf(fixtures.outputZoinks, done);
rimraf(outputZoinks, done);
});
});
it('Match WebP input', function (done) {
sharp(fixtures.inputWebP)
.resize(320, 80)
.toFile(fixtures.outputZoinks, function (err, info) {
.toFile(outputZoinks, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual('webp', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(80, info.height);
rimraf(fixtures.outputZoinks, done);
rimraf(outputZoinks, done);
});
});
it('Match TIFF input', function (done) {
sharp(fixtures.inputTiff)
.resize(320, 80)
.toFile(fixtures.outputZoinks, function (err, info) {
.toFile(outputZoinks, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual('tiff', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(80, info.height);
rimraf(fixtures.outputZoinks, done);
rimraf(outputZoinks, done);
});
});
it('Autoconvert GIF input to PNG output', function (done) {
sharp(fixtures.inputGif)
.resize(320, 80)
.toFile(fixtures.outputZoinks, function (err, info) {
.toFile(outputZoinks, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual(sharp.format.magick.input.buffer ? 'gif' : 'png', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(80, info.height);
rimraf(fixtures.outputZoinks, done);
rimraf(outputZoinks, done);
});
});
@ -512,13 +516,13 @@ describe('Input/output', function () {
sharp(fixtures.inputPng)
.resize(320, 80)
.jpeg()
.toFile(fixtures.outputZoinks, function (err, info) {
.toFile(outputZoinks, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual('jpeg', info.format);
assert.strictEqual(320, info.width);
assert.strictEqual(80, info.height);
rimraf(fixtures.outputZoinks, done);
rimraf(outputZoinks, done);
});
});
});
@ -548,19 +552,20 @@ describe('Input/output', function () {
});
it('toFormat=JPEG takes precedence over WebP extension', function (done) {
const outputWebP = fixtures.path('output.webp');
sharp(fixtures.inputPng)
.jpeg()
.toFile(fixtures.outputWebP, function (err, info) {
.toFile(outputWebP, function (err, info) {
if (err) throw err;
assert.strictEqual('jpeg', info.format);
done();
rimraf(outputWebP, done);
});
});
it('toFormat=WebP takes precedence over JPEG extension', function (done) {
sharp(fixtures.inputPng)
.webp()
.toFile(fixtures.outputJpg, function (err, info) {
.toFile(outputJpg, function (err, info) {
if (err) throw err;
assert.strictEqual('webp', info.format);
done();
@ -581,15 +586,16 @@ describe('Input/output', function () {
});
it('Save Vips V file', function (done) {
const outputV = fixtures.path('output.v');
sharp(fixtures.inputJpg)
.extract({ left: 910, top: 1105, width: 70, height: 60 })
.toFile(fixtures.outputV, function (err, info) {
.toFile(outputV, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual('v', info.format);
assert.strictEqual(70, info.width);
assert.strictEqual(60, info.height);
rimraf(fixtures.outputV, done);
rimraf(outputV, done);
});
});

View File

@ -8,6 +8,8 @@ const rimraf = require('rimraf');
const sharp = require('../../');
const fixtures = require('../fixtures');
const outputTiff = fixtures.path('output.tiff');
describe('TIFF', function () {
it('Load TIFF from Buffer', function (done) {
const inputTiffBuffer = fs.readFileSync(fixtures.inputTiff);
@ -120,11 +122,11 @@ describe('TIFF', function () {
compression: 'none',
predictor: 'none'
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert.strictEqual(startSize, info.size);
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});
@ -137,11 +139,11 @@ describe('TIFF', function () {
compression: 'none',
predictor: 'none'
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert(info.size < (startSize / 2));
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});
@ -157,12 +159,12 @@ describe('TIFF', function () {
xres: 1000,
yres: 1000
})
.toFile(fixtures.outputTiff)
.then(() => sharp(fixtures.outputTiff)
.toFile(outputTiff)
.then(() => sharp(outputTiff)
.metadata()
.then(({ density }) => {
assert.strictEqual(25400, density);
return promisify(rimraf)(fixtures.outputTiff);
return promisify(rimraf)(outputTiff);
})
)
);
@ -201,12 +203,12 @@ describe('TIFF', function () {
compression: 'lzw',
predictor: 'horizontal'
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert.strictEqual(3, info.channels);
assert(info.size < startSize);
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});
@ -222,7 +224,7 @@ describe('TIFF', function () {
.tiff({
compression: 'lzw'
})
.toFile(fixtures.outputTiff)
.toFile(outputTiff)
.then(info => {
assert.strictEqual(4, info.channels);
})
@ -254,11 +256,11 @@ describe('TIFF', function () {
bitdepth: 1,
compression: 'ccittfax4'
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert(info.size < startSize);
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});
@ -269,11 +271,11 @@ describe('TIFF', function () {
compression: 'deflate',
predictor: 'horizontal'
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert(info.size < startSize);
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});
@ -284,11 +286,11 @@ describe('TIFF', function () {
compression: 'deflate',
predictor: 'float'
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert(info.size > startSize);
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});
@ -299,11 +301,11 @@ describe('TIFF', function () {
compression: 'deflate',
predictor: 'none'
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert(info.size < startSize);
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});
@ -313,11 +315,11 @@ describe('TIFF', function () {
.tiff({
compression: 'jpeg'
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert(info.size < startSize);
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});
@ -385,11 +387,11 @@ describe('TIFF', function () {
tileHeight: 256,
tileWidth: 256
})
.toFile(fixtures.outputTiff, (err, info) => {
.toFile(outputTiff, (err, info) => {
if (err) throw err;
assert.strictEqual('tiff', info.format);
assert(info.size > startSize);
rimraf(fixtures.outputTiff, done);
rimraf(outputTiff, done);
});
});