[node] Rewrite request tests

This commit is contained in:
John Firebaugh
2017-07-19 13:28:42 -07:00
parent 5ee05a7781
commit ed29dfce43
4 changed files with 71 additions and 136 deletions

View File

@@ -0,0 +1,68 @@
'use strict';
var mockfs = require('../mockfs');
var mbgl = require('../../index');
var test = require('tape');
[ 'sprite_png', 'sprite_json', 'source_vector', 'glyph' ].forEach(function (resource) {
test(`render reports an error when the request function responds with an error (${resource})`, function(t) {
var map = new mbgl.Map({
request: function(req, callback) {
var data = mockfs.dataForRequest(req);
if (mockfs[resource] === data) {
callback(new Error('message'));
} else {
callback(null, { data: data });
}
}
});
map.load(mockfs.style_vector);
map.render({ zoom: 16 }, function(err, pixels) {
t.assert(err);
t.assert(/message/.test(err.message));
t.assert(!pixels);
t.end();
});
});
});
[ 'vector', 'raster' ].forEach(function (type) {
test(`render does not report an error when the request function responds with no data for a tile (${type})`, function(t) {
var map = new mbgl.Map({
request: function(req, callback) {
var data = mockfs.dataForRequest(req);
if (mockfs[`tile_${type}`] === data) {
callback();
} else {
callback(null, { data: data });
}
}
});
map.load(mockfs[`style_${type}`]);
map.render({ zoom: 16 }, function(err, pixels) {
t.error(err);
t.assert(pixels);
t.end();
});
});
test(`render reports an error when the request function responds with an error for a tile (${type})`, function(t) {
var map = new mbgl.Map({
request: function(req, callback) {
var data = mockfs.dataForRequest(req);
if (mockfs[`tile_${type}`] === data) {
callback(new Error('message'));
} else {
callback(null, { data: data });
}
}
});
map.load(mockfs[`style_${type}`]);
map.render({ zoom: 16 }, function(err, pixels) {
t.assert(err);
t.assert(/message/.test(err.message));
t.assert(!pixels);
t.end();
});
});
});

View File

@@ -1,59 +0,0 @@
'use strict';
var mockfs = require('../mockfs');
var mbgl = require('../../index');
var test = require('tape');
function asyncReply(callback, data) {
setTimeout(function() { callback(null, { data: data }); }, 0);
};
function asyncFail(callback) {
setTimeout(function() { callback(new Error('not found')); }, 0);
};
function failRequest(t, style, failedResource) {
var options = {
request: function(req, callback) {
var data = mockfs.dataForRequest(req);
if (failedResource != data) {
asyncReply(callback, data);
} else {
asyncFail(callback);
}
},
ratio: 2,
};
var map = new mbgl.Map(options);
map.load(style);
map.render({ zoom: 16 }, function(err, pixels) {
if (err) {
t.pass("pass");
map.release();
}
});
};
test('Vector', function(t) {
t.plan(5);
failRequest(t, mockfs.style_vector, null);
failRequest(t, mockfs.style_vector, mockfs.sprite_png);
failRequest(t, mockfs.style_vector, mockfs.sprite_json);
failRequest(t, mockfs.style_vector, mockfs.source_vector);
failRequest(t, mockfs.style_vector, mockfs.tile_vector);
failRequest(t, mockfs.style_vector, mockfs.glyph);
});
test('Raster', function(t) {
t.plan(4);
failRequest(t, mockfs.style_raster, null);
failRequest(t, mockfs.style_raster, mockfs.sprite_png);
failRequest(t, mockfs.style_raster, mockfs.sprite_json);
failRequest(t, mockfs.style_raster, mockfs.source_raster);
failRequest(t, mockfs.style_raster, mockfs.tile_raster);
});

View File

@@ -1,74 +0,0 @@
'use strict';
var mockfs = require('../mockfs');
var mbgl = require('../../index');
var test = require('tape');
function isTile(data) {
return data == mockfs.tile_vector || data == mockfs.tile_raster;
}
function asyncReply(callback, data) {
setTimeout(function() { callback(null, { data: data }); }, 0);
};
function asyncFail(callback, data) {
// Do not set an error for tile when not found. A not found
// tile is a valid tile.
if (isTile(data)) {
setTimeout(function() { callback(); }, 0);
} else {
setTimeout(function() { callback(new Error('not found')); }, 0);
}
};
function notfoundRequest(t, style, notfoundResource) {
var options = {
request: function(req, callback) {
var data = mockfs.dataForRequest(req);
if (notfoundResource != data) {
asyncReply(callback, data);
} else {
asyncFail(callback, data);
}
},
ratio: 2,
};
var map = new mbgl.Map(options);
map.load(style);
map.render({ zoom: 16 }, function(err, pixels) {
if (err && !isTile(notfoundResource)) {
t.pass("pass");
return;
}
if (!err && isTile(notfoundResource)) {
t.pass("pass");
return;
}
t.fail("fail");
});
};
test('Vector', function(t) {
t.plan(5);
notfoundRequest(t, mockfs.style_vector, mockfs.sprite_png);
notfoundRequest(t, mockfs.style_vector, mockfs.sprite_json);
notfoundRequest(t, mockfs.style_vector, mockfs.source_vector);
notfoundRequest(t, mockfs.style_vector, mockfs.tile_vector);
notfoundRequest(t, mockfs.style_vector, mockfs.glyph);
});
test('Raster', function(t) {
t.plan(4);
notfoundRequest(t, mockfs.style_raster, mockfs.sprite_png);
notfoundRequest(t, mockfs.style_raster, mockfs.sprite_json);
notfoundRequest(t, mockfs.style_raster, mockfs.source_raster);
notfoundRequest(t, mockfs.style_raster, mockfs.tile_raster);
});

View File

@@ -5,7 +5,7 @@ var path = require('path');
function readFixture(file) {
return fs.readFileSync(path.join('test/fixtures/resources', file));
};
}
var style_raster = readFixture('style_raster.json').toString('utf8');
var style_vector = readFixture('style_vector.json').toString('utf8');
@@ -18,7 +18,7 @@ var tile_raster = readFixture('raster.tile');
var tile_vector = readFixture('vector.tile');
function dataForRequest(req) {
if (req.url == null) {
if (req.url === null) {
return null;
} else if (req.url.indexOf('sprite') > -1 && req.url.endsWith('json')) {
return sprite_json;
@@ -37,7 +37,7 @@ function dataForRequest(req) {
} else {
return null;
}
};
}
module.exports = {
dataForRequest: dataForRequest,