diff --git a/.travis.yml b/.travis.yml index a91489f2..3d6d1baf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,9 @@ node_js: - '8' env: - CXX=g++-4.8 -script: npm test +script: + - npm test + - grunt build addons: apt: sources: diff --git a/dist/image-sequencer.js b/dist/image-sequencer.js index 6a6ef79c..cddb9510 100644 --- a/dist/image-sequencer.js +++ b/dist/image-sequencer.js @@ -34810,15 +34810,15 @@ ImageSequencer = function ImageSequencer(options) { // else if (options.imageUrl) loadImage(imageUrl); function addSteps(){ - thiss = (this.name == "ImageSequencer")?this:this.sequencer; + const this_ = (this.name == "ImageSequencer")?this:this.sequencer; args = (this.name == "ImageSequencer")?[]:[this.images]; json_q = {}; for(arg in arguments){args.push(copy(arguments[arg]));} - json_q = formatInput.call(thiss,args,"+"); + json_q = formatInput.call(this_,args,"+"); for (i in json_q) for (j in json_q[i]) - require("./AddStep")(thiss,i,json_q[i][j].name,json_q[i][j].o); + require("./AddStep")(this_,i,json_q[i][j].name,json_q[i][j].o); return this; } @@ -34834,7 +34834,7 @@ ImageSequencer = function ImageSequencer(options) { function removeSteps(image,index) { run = {}; - this_ = (this.name == "ImageSequencer")?this:this.sequencer; + const this_ = (this.name == "ImageSequencer")?this:this.sequencer; args = (this.name == "ImageSequencer")?[]:[this.images]; for(arg in arguments) args.push(copy(arguments[arg])); json_q = formatInput.call(this_,args,"-"); @@ -34851,7 +34851,7 @@ ImageSequencer = function ImageSequencer(options) { function insertSteps(image, index, name, o) { run = {}; - this_ = (this.name == "ImageSequencer")?this:this.sequencer; + const this_ = (this.name == "ImageSequencer")?this:this.sequencer; args = (this.name == "ImageSequencer")?[]:[this.images]; for (arg in arguments) args.push(arguments[arg]); @@ -34870,7 +34870,7 @@ ImageSequencer = function ImageSequencer(options) { function run(t_image,t_from) { log('\x1b[32m%s\x1b[0m',"Running the Sequencer!"); - this_ = (this.name == "ImageSequencer")?this:this.sequencer; + const this_ = (this.name == "ImageSequencer")?this:this.sequencer; args = (this.name == "ImageSequencer")?[]:[this.images]; for (var arg in arguments) args.push(copy(arguments[arg])); callback = function() {}; @@ -34909,7 +34909,7 @@ ImageSequencer = function ImageSequencer(options) { function replaceImage(selector,steps,options) { options = options || {}; - require('./ReplaceImage')(this,selector,steps); + return require('./ReplaceImage')(this,selector,steps); } return { @@ -35027,7 +35027,7 @@ module.exports = { },{"./modules/DoNothing":122,"./modules/DoNothingPix":123,"./modules/GreenChannel":124,"./modules/Invert":125,"./modules/NdviRed":126}],120:[function(require,module,exports){ function ReplaceImage(ref,selector,steps,options) { - if(!ref.options.inBrowser) return; // This isn't for Node.js + if(!ref.options.inBrowser) return false; // This isn't for Node.js this_ = ref; var input = document.querySelectorAll(selector); var images = []; diff --git a/src/ImageSequencer.js b/src/ImageSequencer.js index e1d752ad..525c22fa 100644 --- a/src/ImageSequencer.js +++ b/src/ImageSequencer.js @@ -48,15 +48,15 @@ ImageSequencer = function ImageSequencer(options) { // else if (options.imageUrl) loadImage(imageUrl); function addSteps(){ - thiss = (this.name == "ImageSequencer")?this:this.sequencer; + const this_ = (this.name == "ImageSequencer")?this:this.sequencer; args = (this.name == "ImageSequencer")?[]:[this.images]; json_q = {}; for(arg in arguments){args.push(copy(arguments[arg]));} - json_q = formatInput.call(thiss,args,"+"); + json_q = formatInput.call(this_,args,"+"); for (i in json_q) for (j in json_q[i]) - require("./AddStep")(thiss,i,json_q[i][j].name,json_q[i][j].o); + require("./AddStep")(this_,i,json_q[i][j].name,json_q[i][j].o); return this; } @@ -72,7 +72,7 @@ ImageSequencer = function ImageSequencer(options) { function removeSteps(image,index) { run = {}; - this_ = (this.name == "ImageSequencer")?this:this.sequencer; + const this_ = (this.name == "ImageSequencer")?this:this.sequencer; args = (this.name == "ImageSequencer")?[]:[this.images]; for(arg in arguments) args.push(copy(arguments[arg])); json_q = formatInput.call(this_,args,"-"); @@ -89,7 +89,7 @@ ImageSequencer = function ImageSequencer(options) { function insertSteps(image, index, name, o) { run = {}; - this_ = (this.name == "ImageSequencer")?this:this.sequencer; + const this_ = (this.name == "ImageSequencer")?this:this.sequencer; args = (this.name == "ImageSequencer")?[]:[this.images]; for (arg in arguments) args.push(arguments[arg]); @@ -108,7 +108,7 @@ ImageSequencer = function ImageSequencer(options) { function run(t_image,t_from) { log('\x1b[32m%s\x1b[0m',"Running the Sequencer!"); - this_ = (this.name == "ImageSequencer")?this:this.sequencer; + const this_ = (this.name == "ImageSequencer")?this:this.sequencer; args = (this.name == "ImageSequencer")?[]:[this.images]; for (var arg in arguments) args.push(copy(arguments[arg])); callback = function() {}; @@ -147,7 +147,7 @@ ImageSequencer = function ImageSequencer(options) { function replaceImage(selector,steps,options) { options = options || {}; - require('./ReplaceImage')(this,selector,steps); + return require('./ReplaceImage')(this,selector,steps); } return { diff --git a/src/ReplaceImage.js b/src/ReplaceImage.js index d42e9875..cba128b8 100644 --- a/src/ReplaceImage.js +++ b/src/ReplaceImage.js @@ -1,5 +1,5 @@ function ReplaceImage(ref,selector,steps,options) { - if(!ref.options.inBrowser) return; // This isn't for Node.js + if(!ref.options.inBrowser) return false; // This isn't for Node.js this_ = ref; var input = document.querySelectorAll(selector); var images = []; diff --git a/test/chain.js b/test/chain.js new file mode 100644 index 00000000..03a49f08 --- /dev/null +++ b/test/chain.js @@ -0,0 +1,76 @@ +'use strict'; + +var fs = require('fs'); +var test = require('tape'); + +// We should only test headless code here. +// http://stackoverflow.com/questions/21358015/error-jquery-requires-a-window-with-a-document#25622933 + +require('../src/ImageSequencer.js'); + +var sequencer = ImageSequencer({ ui: "none" }); +var red = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAQABADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAABgj/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABykX//Z"; + +test('loadImages/loadImage has a name generator.', function (t){ + sequencer.loadImage(red); + t.equal(sequencer.images.image1.steps.length, 1, "It Does!"); + t.end(); +}); + +test('loadImages/loadImage returns a wrapper.', function (t){ + var returnval = sequencer.loadImage(red); + t.equal(returnval.name,"ImageSequencer Wrapper", "It Does!"); + t.equal(returnval.images[0],"image2"); + t.end(); +}); + +test('addSteps is two-way chainable.', function (t){ + var returnval = sequencer.loadImage(red).addSteps('invert'); + t.equal(returnval.name,"ImageSequencer Wrapper"); + t.equal(returnval.images[0],"image3"); + t.equal(sequencer.images.image3.steps.length,2); + t.equal(sequencer.images.image3.steps[1].options.name,"invert"); + t.equal(sequencer.images.image2.steps.length,1); + t.equal(sequencer.images.image1.steps.length,1); + t.end(); +}); + +test('addSteps is two-way chainable without loadImages.', function (t){ + var returnval = sequencer.addSteps("image3","ndvi-red"); + t.equal(returnval.name,"ImageSequencer"); + t.equal(sequencer.images.image3.steps.length,3); + t.equal(sequencer.images.image3.steps[2].options.name,"ndvi-red"); + t.end(); +}); + +test('removeSteps is two-way chainable.', function (t){ + var returnval = sequencer.loadImage(red).addSteps('invert').removeSteps(1); + t.equal(returnval.name,"ImageSequencer Wrapper"); + t.equal(returnval.images[0],"image4"); + t.equal(sequencer.images.image4.steps.length,1); + t.end(); +}); + +test('removeSteps is two-way chainable without loadImages.', function (t){ + var returnval = sequencer.removeSteps("image3",1); + t.equal(returnval.name,"ImageSequencer"); + t.equal(sequencer.images.image3.steps.length,2); + t.end(); +}); + +test('insertSteps is two-way chainable.', function (t){ + var returnval = sequencer.loadImage(red).insertSteps(1,'invert'); + t.equal(returnval.name,"ImageSequencer Wrapper"); + t.equal(returnval.images[0],"image5"); + t.equal(sequencer.images.image5.steps.length,2); + t.equal(sequencer.images.image5.steps[1].options.name,"invert"); + t.end(); +}); + +test('insertSteps is two-way chainable without loadImages.', function (t){ + var returnval = sequencer.insertSteps("image5",1,"ndvi-red"); + t.equal(returnval.name,"ImageSequencer"); + t.equal(sequencer.images.image5.steps.length,3); + t.equal(sequencer.images.image5.steps[1].options.name,"ndvi-red"); + t.end(); +}); diff --git a/test/image-sequencer.js b/test/image-sequencer.js index 9968cfce..60e1d536 100644 --- a/test/image-sequencer.js +++ b/test/image-sequencer.js @@ -9,18 +9,37 @@ var test = require('tape'); require('../src/ImageSequencer.js'); var sequencer = ImageSequencer({ ui: "none" }); +var red = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAQABADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAABgj/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABykX//Z"; test('Image Sequencer has tests', function (t) { t.equal(true, true); t.end(); }); -test('loadImages loads an image and creates a step.', function (t){ - sequencer.loadImages('test','examples/red.jpg'); +test('loadImages loads a DataURL image and creates a step.', function (t){ + sequencer.loadImages('test',red); t.equal(sequencer.images.test.steps.length, 1, "It Does!"); t.end(); }); +test('loadImages loads a PATH image and creates a step. (NodeJS)', function (t){ + if(sequencer.options.inBrowser){ + t.equal("not applicable","not applicable"); + t.end(); + } + else { + sequencer.loadImages(red); + t.equal(sequencer.images.test.steps.length, 1, "It Does!"); + t.end(); + } +}); + +test('loadImage works too.', function (t){ + sequencer.loadImage('test2',red); + t.equal(sequencer.images.test2.steps.length, 1, "It Does!"); + t.end(); +}); + test('addSteps("image","name") adds a step', function (t) { sequencer.addSteps('test','do-nothing'); t.equal(sequencer.images.test.steps[1].options.name, "do-nothing"); @@ -104,9 +123,15 @@ test('insertSteps({image: {index: index, name: "module", o: options} }) inserts }); test('run() runs the sequencer and returns output to callback', function (t) { - sequencer.run(function(out){ + sequencer.run('test',function(out){ t.equal(typeof(sequencer.images.test.steps[sequencer.images.test.steps.length - 1].output), "object", "It Does!"); t.equal(out,sequencer.images.test.steps[sequencer.images.test.steps.length - 1].output.src, "It Does!"); }); t.end(); }); + +test('replaceImage returns false in NodeJS', function (t) { + var returnvalue = sequencer.replaceImage("#selector","test"); + t.equal(returnvalue,false); + t.end(); +});