cleanup and add image comparisons to gz tests
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,5 +1,6 @@
|
||||
/build
|
||||
/lib
|
||||
/node_modules
|
||||
/test/results
|
||||
/test/results/*
|
||||
!/test/results/*-expected.png
|
||||
image.png
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
test/results/gz-fail-expected.png
Normal file
BIN
test/results/gz-fail-expected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.5 KiB |
Reference in New Issue
Block a user