'use strict'; var tracking = require('./utils/sandbox.js'); module.exports = { setUp: function(done) { done(); }, tearDown: function(done) { done(); }, testConstructorEmpty: function(test) { var colors; var tracker; test.doesNotThrow(function() { tracker = new tracking.ColorTracker(); }); colors = tracker.getColors(); test.equal(1, colors.length, 'Colors array should have a single value'); test.equal('magenta', colors[0], 'Default color is magenta'); test.done(); }, testConstructorString: function(test) { var colors; var tracker; test.doesNotThrow(function() { tracker = new tracking.ColorTracker('yellow'); }); colors = tracker.getColors(); test.equal(1, colors.length, 'Colors array should have a single value'); test.equal('yellow', colors[0], 'The colors array should be set to value in the constructor'); test.throws(function() { tracker = new tracking.ColorTracker('notvalid'); }); test.done(); }, testConstructorArray: function(test) { var colors; var tracker; test.doesNotThrow(function() { tracker = new tracking.ColorTracker([]); }); colors = tracker.getColors(); test.equal(0, colors.length, 'Colors array should be empty'); test.doesNotThrow(function() { tracker = new tracking.ColorTracker(['magenta', 'cyan', 'yellow']); }); colors = tracker.getColors(); test.equal(3, colors.length, 'Colors array have 3 values'); test.equal('magenta', colors[0], 'The colors array should be set to values in the constructor'); test.equal('cyan', colors[1], 'The colors array should be set to values in the constructor'); test.equal('yellow', colors[2], 'The colors array should be set to values in the constructor'); test.throws(function() { tracker = new tracking.ColorTracker(['magenta', null, 'yellow']); }); test.done(); }, testFindColor: function(test) { var colors; var pixels; var tracker; tracking.ColorTracker.registerColor('black', function(r, g, b) { return r === 0 && g === 0 && b === 0; }); tracker = new tracking.ColorTracker('black'); colors = tracker.getColors(); test.equal(1, colors.length, 'Colors array have a single value'); test.equal('black', colors[0], 'The colors array should be set to values in the constructor'); tracker.setMinDimension(2); tracker.setMinGroupSize(6); pixels = [ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, ]; tracker.on('track', function(event) { test.equal(1, event.data.length, 'There should only be one result rectangle'); test.equal(1, event.data[0].x, 'The first rectangle should be at x = 1'); test.equal(0, event.data[0].y, 'The first rectangle should be at y = 0'); test.equal(2, event.data[0].width, 'The first rectangle\'s width should be 2'); test.equal(3, event.data[0].height, 'The first rectangle\'s height should be 3'); test.done(); }); tracker.track(pixels, 5, 4); }, testMergedRectangles: function(test) { var pixels; var tracker; tracking.ColorTracker.registerColor('black', function(r, g, b) { return r === 0 && g === 0 && b === 0; }); tracker = new tracking.ColorTracker('black'); tracker.setMinDimension(1); tracker.setMinGroupSize(6); pixels = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 ]; tracker.on('track', function(event) { test.equal(2, event.data.length, 'There should be 2 result rectangles'); test.equal(0, event.data[0].x, 'The first rectangle should be at x = 0'); test.equal(0, event.data[0].y, 'The first rectangle should be at y = 0'); test.equal(5, event.data[0].width, 'The first rectangle\'s width should be 5'); test.equal(6, event.data[0].height, 'The first rectangle\'s height should be 6'); test.equal(2, event.data[1].x, 'The second rectangle should be at x = 2'); test.equal(8, event.data[1].y, 'The second rectangle should be at y = 8'); test.equal(1, event.data[1].width, 'The second rectangle\'s width should be 1'); test.equal(2, event.data[1].height, 'The second rectangle\'s height should be 2'); test.done(); }); tracker.track(pixels, 6, 11); }, testDimensionConstraints: function(test) { var pixels; var tracker; tracking.ColorTracker.registerColor('black', function(r, g, b) { return r === 0 && g === 0 && b === 0; }); tracker = new tracking.ColorTracker('black'); tracker.setMinDimension(1); tracker.setMaxDimension(2); tracker.setMinGroupSize(6); pixels = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 ]; tracker.on('track', function(event) { test.equal(1, event.data.length, 'There should be 1 result rectangle'); test.equal(1, event.data[0].width, 'The rectangle\'s width should be 1'); test.equal(2, event.data[0].height, 'The rectangle\'s height should be 2'); test.done(); }); tracker.track(pixels, 6, 11); } };