From bb17cf14cfe165f636bcaeb415726eabc149ed8e Mon Sep 17 00:00:00 2001 From: Rowan Wookey Date: Sat, 11 Apr 2015 20:02:13 +0100 Subject: [PATCH] Updated tests to use finish consistently Refactored tests to use async queue methods Added alpha method #374 --- lib/args.js | 5 +++++ test/78.js | 10 +++++----- test/alpha.js | 42 ++++++++++++++++++++++++++++++++++++++++++ test/append.js | 20 ++++++++++---------- test/geometry.js | 1 - test/index.js | 24 ++++++++++++------------ test/streamerr.js | 3 +-- 7 files changed, 75 insertions(+), 30 deletions(-) create mode 100644 test/alpha.js diff --git a/lib/args.js b/lib/args.js index 644daf7..ea0ca83 100644 --- a/lib/args.js +++ b/lib/args.js @@ -33,6 +33,11 @@ module.exports = function (proto) { return this.out("-affine", matrix); } + proto.alpha = function alpha (type) { + if (!this._options.imageMagick) return new Error('Method -alpha is not supported by GraphicsMagick'); + return this.out('-alpha', type); + } + /** * Appends images to the list of "source" images. * diff --git a/test/78.js b/test/78.js index 77a49c7..6078066 100644 --- a/test/78.js +++ b/test/78.js @@ -1,15 +1,15 @@ var assert = require('assert') -module.exports = function (_, dir, next, gm) { - if (!gm.integration) return next(); +module.exports = function (_, dir, finish, gm) { + if (!gm.integration) return finish(); var magick = _._options.imageMagick; var name = magick ? '78-IM' : '78'; var out = dir + '/' + name; _.resize(600, 450, '!').write(out + '.png', function (err) { - if (err) return next(err); + if (err) return finish(err); var img = gm(out + '.png'); if (magick) @@ -19,8 +19,8 @@ module.exports = function (_, dir, next, gm) { .crop(70, 70, 100, 100) .resize(50, 50) .write(out + '-2.jpg', function (err) { - if (err) return next(err); - next(); + if (err) return finish(err); + finish(); }) }); diff --git a/test/alpha.js b/test/alpha.js new file mode 100644 index 0000000..35c4720 --- /dev/null +++ b/test/alpha.js @@ -0,0 +1,42 @@ +var assert = require('assert'); +var async = require('async'); + +module.exports = function (_, dir, finish, gm, im) { + if (!gm.integration) return finish(); + + var alphaTypes = [ + "Activate", + "On", + "Deactivate", + "Off", + "Set", + "Opaque", + "Transparent", + "Extract", + "Copy", + "Shape", + "Remove", + "Background" + ]; + // alpha not supported by GM so only test IM + if (!im) { + assert.throws(function() { + gm(dir + '/edge.png') + .alpha( alphaTypes.pop() ).write(dir+'/alpha_fail.png'); + + }); + finish(); + } else { + + async.eachSeries(alphaTypes,function(alphaType,cb) { + var m = gm(dir + '/edge.png').options({imageMagick: im}).alpha( alphaType ); + var args = m.args(); + assert.equal('convert', args[0]); + assert.equal('-alpha', args[2]); + assert.equal(alphaType, args[3]); + + m.write( dir + '/alpha_' + alphaType + '.png', cb); + + },finish); +} +} diff --git a/test/append.js b/test/append.js index 0db74f2..7fcadab 100644 --- a/test/append.js +++ b/test/append.js @@ -1,6 +1,6 @@ var assert = require('assert') -module.exports = function (_, dir, next, gm) { +module.exports = function (_, dir, finish, gm) { var out = require('path').resolve(dir + '/append.jpg'); try { @@ -23,22 +23,22 @@ module.exports = function (_, dir, next, gm) { assert.equal('-',args[7]); if (!gm.integration) { - return horizontal(dir, next, gm); + return horizontal(dir, finish, gm); } m.write(out, function (err) { - if (err) return next(err); + if (err) return finish(err); gm(out).size(function (err, size) { - if (err) return next(err); + if (err) return finish(err); assert.equal(460, size.width); assert.equal(435, size.height); - horizontal(dir, next, gm); + horizontal(dir, finish, gm); }) }); } -function horizontal (dir, next, gm) { +function horizontal (dir, finish, gm) { var out = require('path').resolve(dir + '/appendHorizontal.jpg'); var m = gm(dir + '/original.jpg') @@ -52,18 +52,18 @@ function horizontal (dir, next, gm) { assert.equal('-',args[4]); if (!gm.integration) { - return next(); + return finish(); } m .write(out, function (err) { - if (err) return next(err); + if (err) return finish(err); gm(out).size(function (err, size) { - if (err) return next(err); + if (err) return finish(err); assert.equal(697, size.width); assert.equal(155, size.height); - next(); + finish(); }) }); diff --git a/test/geometry.js b/test/geometry.js index 421116e..4dbbbcd 100644 --- a/test/geometry.js +++ b/test/geometry.js @@ -12,6 +12,5 @@ module.exports = function (gm, dir, finish, GM) { assert.equal('-geometry', args[2]); assert.equal('x100', args[3]); // Keep-aspect-ratio command - if (!GM.integration) return finish(); } diff --git a/test/index.js b/test/index.js index 568a4e5..088f3df 100644 --- a/test/index.js +++ b/test/index.js @@ -13,7 +13,6 @@ gm.integration = !! ~process.argv.indexOf('--integration'); if (gm.integration) only.shift(); var files = fs.readdirSync(__dirname).filter(filter); -var pending, total = pending = files.length * 2; function filter (file) { if (!/\.js$/.test(file)) return false; @@ -38,18 +37,9 @@ function finish (filename) { throw err; } - --pending; process.stdout.write('\033[2K'); process.stdout.write('\033[0G'); - process.stdout.write('pending ' + pending); - if (pending) return; - - process.stdout.write('\033[?25h'); - process.stdout.write('\033[2K'); - process.stdout.write('\033[0G'); - var leaks = gleak.detect(); - assert.equal(0, leaks.length, "global leaks detected: " + leaks); - console.error("\n\u001B[32mAll tests passed\u001B[0m"); + process.stdout.write('pending ' + (q.length()+q.running())); } } @@ -63,7 +53,17 @@ var q = async.queue(function (task, callback) { finish(filename)(err); callback(); }, gm, im); -}, 5); +}, 10); + +q.drain = function(){ + +process.stdout.write('\033[?25h'); + process.stdout.write('\033[2K'); + process.stdout.write('\033[0G'); + var leaks = gleak.detect(); + assert.equal(0, leaks.length, "global leaks detected: " + leaks); + console.error("\n\u001B[32mAll tests passed\u001B[0m"); +}; files = files.map(function (file) { return __dirname + '/' + file diff --git a/test/streamerr.js b/test/streamerr.js index 534cbbb..d9f6c23 100644 --- a/test/streamerr.js +++ b/test/streamerr.js @@ -15,7 +15,6 @@ module.exports = function (_, dir, finish, gm) { assert.ok(err, "Expecting error on this buffer"); }); - if (!gm.integration) - return finish(); + return finish(); }