Files
MapLibreParticleLab/platform/node/test/js/gzip.test.js

126 lines
3.7 KiB
JavaScript

'use strict';
/* jshint node: true */
var test = require('tape').test;
var mbgl = require('../../../..');
var fs = require('fs');
var path = require('path');
var mkdirp = require('mkdirp');
var http = require('http');
var request = require('request');
var st = require('st');
var style = require('../fixtures/style.json');
var PNG = require('pngjs').PNG;
var compare = require('../compare.js');
var server = http.createServer(st({ path: path.join(__dirname, '..') }));
server.listen(0);
function filePath(name) {
return ['expected', 'actual', 'diff'].reduce(function(prev, key) {
var dir = path.join(__dirname, '..', key, 'gzip');
mkdirp.sync(dir);
prev[key] = path.join(dir, name);
return prev;
}, {});
}
function setup(options, callback) {
callback(new mbgl.Map(options));
}
function getOptions(gzip, t) {
return {
request: function(req) {
var parts = req.url.split('.');
var filetype = parts[parts.length - 1];
request({
url: 'http://localhost:' + server.address().port + path.join('/', req.url),
encoding: null,
gzip: filetype === 'pbf' ? gzip : true,
headers: {
'Accept-Encoding': 'gzip'
}
}, function (err, res, body) {
t.error(err);
var response = {};
response.data = res.body;
req.respond(null, response);
});
},
ratio: 1.0
};
}
test('gzip', function(t) {
t.test('success', function(t) {
mbgl.on('message', function(msg) {
if (msg.severity == 'ERROR') t.error(msg);
});
setup(getOptions(true, t), function(map) {
map.load(style);
map.render({}, function(err, data) {
mbgl.removeAllListeners('message');
map.release();
t.error(err);
var filename = filePath('success.png');
var png = new PNG({
width: data.width,
height: data.height
});
png.data = data.pixels;
if (process.env.UPDATE) {
png.pack()
.pipe(fs.createWriteStream(filename.expected))
.on('finish', t.end);
} else {
png.pack()
.pipe(fs.createWriteStream(filename.actual))
.on('finish', function() {
compare(filename.actual, filename.expected, filename.diff, t, function(err, diff) {
t.error(err);
t.ok(diff <= 0.01, 'actual matches expected');
t.end();
});
});
}
});
});
});
t.test('unhandled', function(t) {
mbgl.once('message', function(msg) {
if (msg.severity == 'ERROR') {
t.ok(msg, 'emits error');
t.equal(msg.class, 'Style');
t.equal(msg.severity, 'ERROR');
t.ok(msg.text.match(/pbf unknown field type exception/), 'error text matches');
}
});
setup(getOptions(false, t), function(map) {
map.load(style);
map.render({}, function(err, data) {
map.release();
t.ok(err, 'returns error');
t.ok(err.message.match(/Failed to parse/), 'error text matches');
t.end();
});
});
});
t.test('teardown', function(t) {
server.close(t.end);
});
});