From 8ad171ee561bffea80029e407d521e973bbebddf Mon Sep 17 00:00:00 2001 From: aashna27 Date: Wed, 27 Mar 2019 17:19:42 +0530 Subject: [PATCH] Tests added (#943) --- package-lock.json | 193 ++++++++++++++---------------- test/core/modules/blur.js | 10 +- test/core/modules/channel.js | 8 +- test/core/modules/colormap.js | 8 +- test/core/modules/decode-qr.js | 6 +- test/core/modules/dither.js | 8 +- test/core/modules/resize.js | 8 +- test/core/modules/rotate.js | 8 +- test/core/modules/text-overlay.js | 42 +++++++ 9 files changed, 157 insertions(+), 134 deletions(-) create mode 100644 test/core/modules/text-overlay.js diff --git a/package-lock.json b/package-lock.json index 8c0b065d..d0b9ab4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2857,8 +2857,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2874,25 +2873,23 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -2907,22 +2904,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2969,7 +2963,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -2986,14 +2980,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -3003,12 +2997,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -3025,7 +3019,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -3035,7 +3029,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -3045,16 +3039,15 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -3068,9 +3061,8 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "optional": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -3085,27 +3077,24 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, - "optional": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -3115,7 +3104,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -3123,7 +3112,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -3142,9 +3130,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -3154,16 +3142,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -3173,8 +3161,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -3191,8 +3179,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -3202,18 +3190,17 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3227,9 +3214,8 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "optional": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3253,8 +3239,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -3278,10 +3264,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -3300,13 +3286,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -3316,15 +3302,14 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -3366,11 +3351,10 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3380,7 +3364,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -3388,9 +3372,8 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3407,13 +3390,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -3430,22 +3413,20 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true, - "optional": true + "dev": true } } }, diff --git a/test/core/modules/blur.js b/test/core/modules/blur.js index 6f5a8690..ddb41765 100644 --- a/test/core/modules/blur.js +++ b/test/core/modules/blur.js @@ -6,26 +6,26 @@ require('../../../src/ImageSequencer') var sequencer = ImageSequencer({ui: false}) var red = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEX+AAD///+KQee0AAAAAWJLR0QB/wIt3gAAAAd0SU1FB+EGHRIVAvrm6EMAAAAMSURBVAjXY2AgDQAAADAAAceqhY4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTctMDYtMjlUMTg6MjE6MDIrMDI6MDDGD83DAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE3LTA2LTI5VDE4OjIxOjAyKzAyOjAwt1J1fwAAAABJRU5ErkJggg==" -var benchmark = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAklEQVR4AewaftIAAACSSURBVKXBMUoDURAA0Dc/w4ZgJdh5AE/urawsBMuIpDBkx4VNESzWH/57gTKgGZSuXvGAPQJh2wkfyHd8onDAhIaw7Yxn5CP2mJFIBMK2whPygAkXq7AK/5uQgR0aCqFfQ1oEAuU+gXQj3KfQDEp/lH6FdFUolD4XfCEtfnDGjNLnhDekxRHfmFH6vFjlzphm0C96GR7JNsLICQAAAABJRU5ErkJggg==" +var benchmark = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAklEQVR4AewaftIAAAA0SURBVKXBwRGAIBDAwBiu/44ZeWgFZPcBXgKJht/mzmwaiSSSSCKJJJJIIomGS4vPLBqJDh2XAyeCsOZ9AAAAAElFTkSuQmCC" var target = 'test_outputs' var options = {blur: 3.25} test('Blur module loads correctly', function(t) { - sequencer.loadImages('test', red) + sequencer.loadImages(red) sequencer.addSteps('blur', options) - t.equal(sequencer.images.test.steps[1].options.name, 'blur', 'Blur module is getting loaded') + t.equal(sequencer.steps[1].options.name, 'blur', 'Blur module is getting loaded') t.end() }) test('Blur module loads with correct options', function(t) { - t.equal(sequencer.images.test.steps[1].options.blur, 3.25, 'Options are correct'); + t.equal(sequencer.steps[1].options.blur, 3.25, 'Options are correct'); t.end(); }) test('Blur module works correctly', function(t) { sequencer.run({mode:'test'}, function(out) { - var result = sequencer.images.test.steps[1].output.src + var result = sequencer.steps[1].output.src base64Img.imgSync(result, target, 'result') base64Img.imgSync(benchmark, target, 'benchmark') result = './test_outputs/result.png' diff --git a/test/core/modules/channel.js b/test/core/modules/channel.js index ee017cd5..a398ef25 100644 --- a/test/core/modules/channel.js +++ b/test/core/modules/channel.js @@ -13,20 +13,20 @@ var target = 'test_outputs' var options = {channel: 'red'} test('Channel module loads correctly', function(t) { - sequencer.loadImages('test', red) + sequencer.loadImages( red) sequencer.addSteps('channel', options) - t.equal(sequencer.images.test.steps[1].options.name, 'channel', 'Channel module is getting loaded') + t.equal(sequencer.steps[1].options.name, 'channel', 'Channel module is getting loaded') t.end() }) test('Channel module loads with correct options', function(t) { - t.equal(sequencer.images.test.steps[1].options.channel, 'red', 'Options are correct'); + t.equal(sequencer.steps[1].options.channel, 'red', 'Options are correct'); t.end(); }) test('Channel module works correctly', function(t) { sequencer.run({mode:'test'}, function(out) { - var result = sequencer.images.test.steps[1].output.src + var result = sequencer.steps[1].output.src base64Img.imgSync(result, target, 'result') base64Img.imgSync(benchmark, target, 'benchmark') result = './test_outputs/result.png' diff --git a/test/core/modules/colormap.js b/test/core/modules/colormap.js index edf0d20f..f97a020d 100644 --- a/test/core/modules/colormap.js +++ b/test/core/modules/colormap.js @@ -13,20 +13,20 @@ var target = 'test_outputs' var options = {colormap: 'blutoredjet'} test('Colormap module loads correctly', function(t) { - sequencer.loadImages('test', red) + sequencer.loadImages( red) sequencer.addSteps('colormap', options) - t.equal(sequencer.images.test.steps[1].options.name, 'colormap', 'Colormap module is getting loaded') + t.equal(sequencer.steps[1].options.name, 'colormap', 'Colormap module is getting loaded') t.end() }) test('Colormap module loads with correct options', function(t) { - t.equal(sequencer.images.test.steps[1].options.colormap, 'blutoredjet', 'Options are correct'); + t.equal(sequencer.steps[1].options.colormap, 'blutoredjet', 'Options are correct'); t.end(); }) test('Colormap module works correctly', function(t) { sequencer.run({mode:'test'}, function(out) { - var result = sequencer.images.test.steps[1].output.src + var result = sequencer.steps[1].output.src base64Img.imgSync(result, target, 'result') base64Img.imgSync(benchmark, target, 'benchmark') result = './test_outputs/result.png' diff --git a/test/core/modules/decode-qr.js b/test/core/modules/decode-qr.js index 858e4045..540d3671 100644 --- a/test/core/modules/decode-qr.js +++ b/test/core/modules/decode-qr.js @@ -7,15 +7,15 @@ var sequencer = ImageSequencer({ ui: false }); var Qr = "data:image/png;base64,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"; test('Load Decode-Qr module', function(t) { - sequencer.loadImages('test', Qr); + sequencer.loadImages(Qr); sequencer.addSteps('decode-qr'); - t.equal(sequencer.images.test.steps[1].options.name, 'decode-qr', 'Decode-Qr module is getting loaded'); + t.equal(sequencer.steps[1].options.name, 'decode-qr', 'Decode-Qr module is getting loaded'); t.end(); }); test('Decode-qr module works correctly', function(t) { sequencer.run({ mode: 'test' }, function(out) { - var result = sequencer.images.test.steps[1].options.step.qrval; + var result = sequencer.steps[1].options.step.qrval; t.equal(result, "http://github.com/publiclab/image-sequencer", 'should be equal'); t.end(); }) diff --git a/test/core/modules/dither.js b/test/core/modules/dither.js index 988f76cf..5967caa3 100644 --- a/test/core/modules/dither.js +++ b/test/core/modules/dither.js @@ -13,20 +13,20 @@ var target = 'test_outputs' var options = {dither: 'bayer'} test('Dither module loads correctly', function(t) { - sequencer.loadImages('test', red) + sequencer.loadImages(red) sequencer.addSteps('dither', options) - t.equal(sequencer.images.test.steps[1].options.name, 'dither', 'Dither module is getting loaded') + t.equal(sequencer.steps[1].options.name, 'dither', 'Dither module is getting loaded') t.end() }) test('Dither module loads with correct options', function(t) { - t.equal(sequencer.images.test.steps[1].options.dither, 'bayer', 'Options are correct'); + t.equal(sequencer.steps[1].options.dither, 'bayer', 'Options are correct'); t.end(); }) test('Dither module works correctly', function(t) { sequencer.run({mode:'test'}, function(out) { - var result = sequencer.images.test.steps[1].output.src + var result = sequencer.steps[1].output.src base64Img.imgSync(result, target, 'result') base64Img.imgSync(benchmark, target, 'benchmark') result = './test_outputs/result.png' diff --git a/test/core/modules/resize.js b/test/core/modules/resize.js index 0d5a4b47..f8886fa8 100644 --- a/test/core/modules/resize.js +++ b/test/core/modules/resize.js @@ -13,20 +13,20 @@ var target = 'test_outputs' var options = {resize: '129%'} test('Resize module loads correctly', function(t) { - sequencer.loadImages('test', red) + sequencer.loadImages(red) sequencer.addSteps('resize', options) - t.equal(sequencer.images.test.steps[1].options.name, 'resize', 'Resize module is getting loaded') + t.equal(sequencer.steps[1].options.name, 'resize', 'Resize module is getting loaded') t.end() }) test('Resize module loads with correct options', function(t) { - t.equal(sequencer.images.test.steps[1].options.resize, '129%', 'Options are correct'); + t.equal(sequencer.steps[1].options.resize, '129%', 'Options are correct'); t.end(); }) test('Resize module works correctly', function(t) { sequencer.run({mode:'test'}, function(out) { - var result = sequencer.images.test.steps[1].output.src + var result = sequencer.steps[1].output.src base64Img.imgSync(result, target, 'result') base64Img.imgSync(benchmark, target, 'benchmark') result = './test_outputs/result.png' diff --git a/test/core/modules/rotate.js b/test/core/modules/rotate.js index 7d92664f..4d805be4 100644 --- a/test/core/modules/rotate.js +++ b/test/core/modules/rotate.js @@ -12,20 +12,20 @@ var target = 'test_outputs' var options = {rotate: 45} test('Rotate module loads correctly', function(t) { - sequencer.loadImages('test', red) + sequencer.loadImages(red) sequencer.addSteps('rotate', options) - t.equal(sequencer.images.test.steps[1].options.name, 'rotate', 'Rotate module is getting loaded') + t.equal(sequencer.steps[1].options.name, 'rotate', 'Rotate module is getting loaded') t.end() }) test('Rotate module loads with correct options', function(t) { - t.equal(sequencer.images.test.steps[1].options.rotate, 45, 'Options are correct'); + t.equal(sequencer.steps[1].options.rotate, 45, 'Options are correct'); t.end(); }) test('Rotate module works correctly', function(t) { sequencer.run({mode:'test'}, function(out) { - var result = sequencer.images.test.steps[1].output.src + var result = sequencer.steps[1].output.src base64Img.imgSync(result, target, 'result') base64Img.imgSync(benchmark, target, 'benchmark') result = './test_outputs/result.png' diff --git a/test/core/modules/text-overlay.js b/test/core/modules/text-overlay.js new file mode 100644 index 00000000..daa7d662 --- /dev/null +++ b/test/core/modules/text-overlay.js @@ -0,0 +1,42 @@ +var test = require('tape'); +var base64Img = require('base64-img'); +var looksSame = require('looks-same'); + +require('../../../src/ImageSequencer.js'); + +var sequencer = ImageSequencer({ ui: false }); +var options = {text : "Hello World"}; +var target = 'test_outputs'; +var red = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEX+AAD///+KQee0AAAAAWJLR0QB/wIt3gAAAAd0SU1FB+EGHRIVAvrm6EMAAAAMSURBVAjXY2AgDQAAADAAAceqhY4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTctMDYtMjlUMTg6MjE6MDIrMDI6MDDGD83DAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE3LTA2LTI5VDE4OjIxOjAyKzAyOjAwt1J1fwAAAABJRU5ErkJggg=="; + +// Test 1 to check text overlay module is getting loaded. +test('Load Text Overlay module', function(t) { + sequencer.loadImages(red); + sequencer.addSteps('text-overlay', options); + t.equal(sequencer.steps[1].options.name, 'text-overlay', 'Text Overlay module is getting loaded'); + t.end(); +}); + +// Test 2 to check options are correct. +test('Check Options', function(t) { + t.equal(sequencer.steps[1].options.text, "Hello World", 'Options are correct'); + t.end(); +}); + +// Test 3 to check Text Overlay module works as expected. +test('Text Overlay module works correctly', function(t) { + sequencer.run({ mode: 'test' }, function(out) { + // The test runs in node , and the text overlay is a browser only module, + // thus it there is no image processing and output is same as input. + var result = sequencer.steps[1].output.src + base64Img.imgSync(result, target, 'result') + base64Img.imgSync(red, target, 'red') + result = './test_outputs/result.png' + red = './test_outputs/red.png' + looksSame(result, red, function(err, res) { + if (err) console.log(err) + t.equal(res.equal, true) + t.end() + }) + }) +}) \ No newline at end of file