cleanup and add image comparisons to gz tests

This commit is contained in:
samanpwbb
2015-03-10 17:46:00 -04:00
parent 0cf80f34b2
commit 39694e5bf0
3 changed files with 106 additions and 12 deletions

3
.gitignore vendored
View File

@@ -1,5 +1,6 @@
/build
/lib
/node_modules
/test/results
/test/results/*
!/test/results/*-expected.png
image.png

View File

@@ -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);
}
});
}
});
});
});
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB