From e27d67d7c969276b9de3e536cd827e98fb938545 Mon Sep 17 00:00:00 2001 From: Peter Braden Date: Sun, 12 Oct 2014 07:32:53 +0200 Subject: [PATCH 1/2] Starting porting the tests to tape --- package.json | 4 +- test/unit.js | 379 +++++++++++++++++++++------------------------------ 2 files changed, 161 insertions(+), 222 deletions(-) diff --git a/package.json b/package.json index a22c2f6..4405141 100755 --- a/package.json +++ b/package.json @@ -8,12 +8,12 @@ }, "version": "1.0.0", "devDependencies": { - "vows": "*" + "tape": "^3.0.0" }, "license": "MIT", "scripts": { "build": "node-gyp build", - "test": "vows test/unit.js" + "test": "node test/unit.js" }, "keywords": [ "opencv", diff --git a/test/unit.js b/test/unit.js index 3c2c968..2ef48bf 100755 --- a/test/unit.js +++ b/test/unit.js @@ -1,176 +1,128 @@ -var vows = require('vows') - , assert = require('assert') - , fs = require('fs'); - -assertDeepSimilar = function(res, exp){ - for (var i = 0; i < res.length; i++){ - // res[i] = Math.round(res[i]/100)*100; - } - assert.deepEqual(res, exp) -} - -assertWithinRange = function(res, exp, range){ - assert.ok((res - exp) < range || (res - exp) > -range, "Not within range:" + res + " (" + exp + "+- " + range + ")") -} - -assertWithinRanges = function(res, exp, range){ - for (var i =0; i 100) + + assert.end() + }) + }) +}) + +/* - , "toBuffer Async": { - topic: function(cv){ - var buf = fs.readFileSync('./examples/files/mona.png') - , cb = this.callback - cv.readImage(buf.slice(0), function(err, mat){ - var buff = mat.toBuffer(function(){ - cb.apply(this, arguments) - }) - }) - } - , 'gives a buffer' : function(e, res){ - assert.ok(!e) - assert.ok(res); - assert.ok(res.length > 100); - } - } , "detectObject": { @@ -321,69 +273,56 @@ vows.describe('Smoke Tests OpenCV').addBatch({ } , "ObjectDetectionStream" :{ topic : require('../lib/opencv') - - } - - , "CamShift" : { - - "Can Create and Track" : { - topic : function(){ - var cv = require('../lib/opencv') - , self = this - - cv.readImage('./examples/files/coin1.jpg', function(e, im){ - cv.readImage('./examples/files/coin2.jpg', function(e, im2){ - self.callback(im, im2, cv) - }) - }) - } - - , "create TrackedObject" : function(im, im2, cv){ - var tracked = new cv.TrackedObject(im, [420, 110, 490, 170]); - assert.ok(tracked); - } - - , "use TrackedObject.track" : function(im, im2, cv){ - var tracked = new cv.TrackedObject(im, [420, 110, 490, 170], {channel: 'v'}); - assertWithinRanges(tracked.track(im2), [386, 112, 459, 166], 10); - } - } - - } - - , "putText": { - topic: function() { - var cv = require('../lib/opencv') - , self = this - - cv.readImage('./examples/files/coin1.jpg', function(e, im){ - self.callback(null, im); - }); - }, - "fonts": function(im) { - function rnd() { - return Math.round(Math.random() * 255); - }; - - var y = 0; - - ([ - "HERSEY_SIMPLEX", - "HERSEY_PLAIN", - "HERSEY_DUPLEX", - "HERSEY_COMPLEX", - "HERSEY_TRIPLEX", - "HERSEY_COMPLEX_SMALL", - "HERSEY_SCRIPT_SIMPLEX", - "HERSEY_SCRIPT_COMPLEX", - "HERSEY_SCRIPT_SIMPLEX" - ]).forEach(function(font) { - im.putText("Some text", 0, y += 20, font, [rnd(), rnd(), rnd()]); - }); - - im.save("./examples/tmp/coin1-with-text.jpg"); - } } +*/ -}).export(module); +test("CamShift", function(assert){ + cv.readImage('./examples/files/coin1.jpg', function(e, im){ + cv.readImage('./examples/files/coin2.jpg', function(e, im2){ + var tracked = new cv.TrackedObject(im, [420, 110, 490, 170], {channel: 'v'}); + assert.ok(tracked); + var res = tracked.track(im2) + assert.ok(res); + assert.ok(res[0] < 396) + assert.ok(res[0] > 376) + assert.ok(res[1] < 122) + assert.ok(res[1] > 102) + assert.ok(res[2] < 469) + assert.ok(res[2] > 449) + assert.ok(res[3] < 176) + assert.ok(res[3] > 156) + assert.end() + }) + }) +}) + +test("fonts", function(t) { + + function rnd() { + return Math.round(Math.random() * 255); + }; + + cv.readImage('./examples/files/coin1.jpg', function(e, im){ + var y = 0; + + ([ + "HERSEY_SIMPLEX", + "HERSEY_PLAIN", + "HERSEY_DUPLEX", + "HERSEY_COMPLEX", + "HERSEY_TRIPLEX", + "HERSEY_COMPLEX_SMALL", + "HERSEY_SCRIPT_SIMPLEX", + "HERSEY_SCRIPT_COMPLEX", + "HERSEY_SCRIPT_SIMPLEX" + ]).forEach(function(font) { + im.putText("Some text", 0, y += 20, font, [rnd(), rnd(), rnd()]); + }); + + t.ok(im, "image is ok") + //im.save("./examples/tmp/coin1-with-text.jpg"); + t.end(); + }); +}) + From e95ade25f695567e36ca06cc25f356d4f5342fa4 Mon Sep 17 00:00:00 2001 From: Peter Braden Date: Wed, 15 Oct 2014 19:50:38 +0200 Subject: [PATCH 2/2] Tape tests, complete conversion --- test/unit.js | 221 ++++++++++++++++++++------------------------------- 1 file changed, 85 insertions(+), 136 deletions(-) diff --git a/test/unit.js b/test/unit.js index 2ef48bf..ac5609d 100755 --- a/test/unit.js +++ b/test/unit.js @@ -121,160 +121,109 @@ test("Matrix toBuffer Async", function(assert){ }) }) -/* + +test("detectObject", function(assert){ + cv.readImage("./examples/files/mona.png", function(err, im){ + im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){ + assert.error(err) + assert.ok(faces) + assert.equal(faces.length, 1) + assert.end() + }) + }) +}) + +test(".absDiff and .countNonZero", function(assert){ + cv.readImage("./examples/files/mona.png", function(err, im) { + cv.readImage("./examples/files/mona.png", function(err, im2){ + assert.ok(im); + assert.ok(im2); + + var diff = new cv.Matrix(im.width(), im.height()); + diff.absDiff(im, im2); + + diff.convertGrayscale(); + assert.equal(diff.countNonZero(), 0); + assert.end() + }); + }); +}) - , "detectObject": { +test(".bitwiseXor", function(assert){ + var mat1 = new cv.Matrix(1,1); + mat1.set(0,0, 1); - topic : function(){ - var cv = require('../lib/opencv') - , cb = this.callback + var mat2 = new cv.Matrix(1,1); + mat2.set(0,0, 1); - cv.readImage("./examples/files/mona.png", function(err, im){ - im.detectObject(cv.FACE_CASCADE, {}, cb) - }) - } + var xored = new cv.Matrix(1,1); + xored.bitwiseXor(mat1, mat2); - , "finds face": function(err, faces){ - assert.isNull(err); - assert.isArray(faces); - assert.equal(faces.length, 1) - } - } + assert.equal(xored.get(0,0), 0); - , ".absDiff and .countNonZero" : function(cv) { - cv.readImage("./examples/files/mona.png", function(err, im) { - cv.readImage("./examples/files/mona.png", function(err, im2){ - assert.ok(im); - assert.ok(im2); - - var diff = new cv.Matrix(im.width(), im.height()); - diff.absDiff(im, im2); - - diff.convertGrayscale(); - assert.equal(diff.countNonZero(), 0); - }); - }); - } - - , ".bitwiseXor" : function(cv) { - var mat1 = new cv.Matrix(1,1); - mat1.set(0,0, 1); - - var mat2 = new cv.Matrix(1,1); - mat2.set(0,0, 1); - - var xored = new cv.Matrix(1,1); - xored.bitwiseXor(mat1, mat2); - - assert.equal(xored.get(0,0), 0); - } - - } + assert.end() +}) - - , "Image" : { - topic : require('../lib/opencv') - - , ".readImage from file": function(cv){ - cv.readImage("./examples/files/mona.png", function(err, im){ - assert.ok(im); - assert.equal(im.width(), 500); - assert.equal(im.height(), 756) - assert.equal(im.empty(), false) - }) - } - - , ".readImage from buffer" : function(cv){ - cv.readImage(fs.readFileSync('./examples/files/mona.png'), function(err, im){ - assert.ok(im); - assert.equal(im.width(), 500); - assert.equal(im.height(), 756) - assert.equal(im.empty(), false) - }) - - } - - } +test("Image read from file", function(assert){ + cv.readImage("./examples/files/mona.png", function(err, im){ + assert.ok(im); + assert.equal(im.width(), 500); + assert.equal(im.height(), 756) + assert.equal(im.empty(), false) + assert.end() + }) +}) - , "CascadeClassifier": { - topic : require('../lib/opencv') +test("read Image from buffer", function(assert){ + cv.readImage(fs.readFileSync('./examples/files/mona.png'), function(err, im){ + assert.ok(im); + assert.equal(im.width(), 500); + assert.equal(im.height(), 756) + assert.equal(im.empty(), false) + assert.end() + }) +}) - , "constructor" : function(cv){ - assert.ok(new cv.CascadeClassifier("./data/haarcascade_frontalface_alt.xml")) - } +test("Cascade Classifier", function(assert){ + assert.ok(new cv.CascadeClassifier("./data/haarcascade_frontalface_alt.xml"), 'test constructor') - , "face detection": { - topic : function(){ - var cv = require('../lib/opencv') - , self = this - - cv.readImage("./examples/files/mona.png", function(err, im){ - cascade = new cv.CascadeClassifier("./data/haarcascade_frontalface_alt.xml"); - cascade.detectMultiScale(im, self.callback)//, 1.1, 2, [30, 30]); - }) - - } - - , "finds face": function(err, faces){ - assert.isNull(err); - assert.isArray(faces); - assert.equal(faces.length, 1) - - } - } - - } + cv.readImage("./examples/files/mona.png", function(err, im){ + cascade = new cv.CascadeClassifier("./data/haarcascade_frontalface_alt.xml"); + cascade.detectMultiScale(im, function(err, faces){//, 1.1, 2, [30, 30]); + assert.error(err); + assert.equal(typeof faces, typeof []); + assert.equal(faces.length, 1) + assert.end() + }) + }) +}) - , "ImageDataStream" : { - topic : require('../lib/opencv') +test("ImageDataStream", function(assert){ + var s = new cv.ImageDataStream() + s.on('load', function(im){ + assert.ok(im) + assert.equal(im.empty(), false); + assert.end() + }) - , "pipe" : { - topic : function(cv){ - var s = new cv.ImageDataStream() - , self = this - s.on('load', function(im){ - assert.ok(im) - assert.equal(im.empty(), false); - self.callback() - }) - fs.createReadStream('./examples/files/mona.png').pipe(s); - } + fs.createReadStream('./examples/files/mona.png').pipe(s); - , "loaded" : function(im){ - //assert.ok(im) - //assert.equal(im.empty(), false); - } - } +}) +test("ImageStream", function(assert){ + var s = new cv.ImageStream() + , im = fs.readFileSync('./examples/files/mona.png') - } - , "ImageStream" :{ - topic : require('../lib/opencv') - , "write" : { - topic: function(cv){ - var s = new cv.ImageStream() - , im = fs.readFileSync('./examples/files/mona.png') - , self = this; - - s.on('data', function(m){ - self.callback(null, m) - }) - s.write(im); - } - , "receives data" : function(mat){ - assert.deepEqual(mat.size(), [756,500]) - } - } - - } - , "ObjectDetectionStream" :{ - topic : require('../lib/opencv') - } -*/ + s.on('data', function(mat){ + assert.deepEqual(mat.size(), [756,500]) + assert.end() + }) + s.write(im); +}) test("CamShift", function(assert){