From 39694e5bf041e725009516573570d8d8f95ddfb7 Mon Sep 17 00:00:00 2001 From: samanpwbb Date: Tue, 10 Mar 2015 17:46:00 -0400 Subject: [PATCH] cleanup and add image comparisons to gz tests --- .gitignore | 3 +- test/js/gz.test.js | 115 +++++++++++++++++++++++++++--- test/results/gz-fail-expected.png | Bin 0 -> 5636 bytes 3 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 test/results/gz-fail-expected.png diff --git a/.gitignore b/.gitignore index cf1aea98a..80e156730 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /build /lib /node_modules -/test/results +/test/results/* +!/test/results/*-expected.png image.png diff --git a/test/js/gz.test.js b/test/js/gz.test.js index e6ca13a9b..228897edc 100644 --- a/test/js/gz.test.js +++ b/test/js/gz.test.js @@ -10,9 +10,11 @@ var mkdirp = require('mkdirp'); var http = require('http'); var request = require('request'); var st = require('st'); +var spawn = require('child_process').spawn; var style = require('../../test/fixtures/style.json'); +var dir = 'test/results'; -mkdirp.sync('test/results'); +mkdirp.sync(dir); var server = http.createServer(st({path: __dirname + '/..'})); server.listen(2900); @@ -61,10 +63,54 @@ test('unpacked gzip', function(t) { setup(getFileSource(true, t), function(map) { map.load(style); map.render({}, function(err, image) { - mbgl.compressPNG(image, function(err, data) { - fs.writeFileSync('test/results/image-gz-success.png', data); - mbgl.removeAllListeners('message'); - t.end(); + mbgl.compressPNG(image, function(err, image) { + t.error(err); + + var expected = path.join(dir, 'gz-success-expected.png'); + var actual = path.join(dir, 'gz-success-actual.png'); + var diff = path.join(dir, 'gz-success-diff.png'); + + if (process.env.UPDATE) { + fs.writeFile(expected, image, function(err) { + t.error(err); + mbgl.removeAllListeners('message'); + t.end(); + }); + } else { + fs.writeFile(actual, image, function(err) { + + var compare = spawn('compare', ['-metric', 'MAE', actual, expected, diff]); + var error = ''; + + compare.stderr.on('data', function(data) { + error += data.toString(); + }); + + compare.on('error', function(err) { + t.error(err); + }); + + compare.on('exit', function (code) { + // The compare program returns 2 on error otherwise 0 if the images are similar or 1 if they are dissimilar. + if (code === 2) { + writeResult(error.trim(), Infinity); + } else { + var match = error.match(/^\d+(?:\.\d+)?\s+\(([^\)]+)\)\s*$/); + var difference = match ? parseFloat(match[1]) : Infinity; + writeResult(match ? '' : error, difference); + } + }); + + compare.stdin.end(); + + function writeResult(error, difference) { + t.ok(difference <= 0.001, 'actual matches expected'); + mbgl.removeAllListeners('message'); + t.end(); + } + + }); + } }); }); }); @@ -72,22 +118,69 @@ test('unpacked gzip', function(t) { test('unhandled gzip', function(t) { - mbgl.once('message', function(msg) { + mbgl.on('message', function(msg) { t.ok(msg, 'emits error'); t.equal(msg.class, 'ParseTile'); t.equal(msg.severity, 'ERROR'); - t.equal(msg.text, 'Parsing [0/0/0] failed: pbf unknown field type exception'); + t.equal(msg.text.indexOf('failed: pbf unknown field type exception') !== -1, true); }); setup(getFileSource(false, t), function(map) { map.load(style); map.render({}, function(err, image) { - mbgl.compressPNG(image, function(err, data) { - fs.writeFileSync('test/results/image-gz-fail.png', data); - t.ok(fs.statSync('test/results/image-gz-success.png')['size'] > fs.statSync('test/results/image-gz-fail.png')['size'], 'render is smaller than unpacked render'); - server.close(t.end); + mbgl.compressPNG(image, function(err, image) { + t.error(err); + + var expected = path.join(dir, 'gz-fail-expected.png'); + var actual = path.join(dir, 'gz-fail-actual.png'); + var diff = path.join(dir, 'gz-fail-diff.png'); + + if (process.env.UPDATE) { + fs.writeFile(expected, image, function(err) { + t.error(err); + server.close(t.end); + }); + } else { + fs.writeFile(actual, image, function(err) { + + var compare = spawn('compare', ['-metric', 'MAE', actual, expected, diff]); + var error = ''; + + compare.stderr.on('data', function(data) { + error += data.toString(); + }); + + compare.on('error', function(err) { + t.error(err); + }); + + compare.on('exit', function (code) { + // The compare program returns 2 on error otherwise 0 if the images are similar or 1 if they are dissimilar. + if (code === 2) { + writeResult(error.trim(), Infinity); + } else { + var match = error.match(/^\d+(?:\.\d+)?\s+\(([^\)]+)\)\s*$/); + var difference = match ? parseFloat(match[1]) : Infinity; + writeResult(match ? '' : error, difference); + } + }); + + compare.stdin.end(); + + function writeResult(error, difference) { + t.ok(difference <= 0.001, 'actual matches expected'); + mbgl.removeAllListeners('message'); + server.close(t.end); + } + + }); + } }); }); }); }); + + + + diff --git a/test/results/gz-fail-expected.png b/test/results/gz-fail-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb90d8b8fd296d0f46fff1bf364d55cec915dac GIT binary patch literal 5636 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4Yzkn2Dage(c!@6@aFBup__j$TF zhEy=Vz2+#$puofIcwqnYLkW+!@ojpkTzya1y@7#|iG^bci=Woo4J;f23Jwhi#0?m1 zm_VWe99$9%2QRs*Ie=8LHOK>Hfec4RW`&4dC%~!?FnnMJGZZuu7+Ac;XM&BBV5ozb z%fiajknmDT7_5=`06)llhQ5bDIgmZ5*U7ftx^yWF<@v~+U*0@$irX{wu+^R ziOpd{$wW?&#s|hr<1RP-Cn5Jh0)@Z=+2W;o4V@E@FG|i4?u+h?Bw44FVdQ&MBb@0Qlf}hyVZp literal 0 HcmV?d00001