diff options
Diffstat (limited to 'platform/node/test/js')
-rw-r--r-- | platform/node/test/js/map.test.js | 2 | ||||
-rw-r--r-- | platform/node/test/js/request.test.js | 167 | ||||
-rw-r--r-- | platform/node/test/js/request_fail.test.js | 59 | ||||
-rw-r--r-- | platform/node/test/js/request_notfound.test.js | 74 |
4 files changed, 168 insertions, 134 deletions
diff --git a/platform/node/test/js/map.test.js b/platform/node/test/js/map.test.js index 4ab76b937a..39665e41ef 100644 --- a/platform/node/test/js/map.test.js +++ b/platform/node/test/js/map.test.js @@ -108,8 +108,8 @@ test('Map', function(t) { 'render', 'release', 'cancel', - 'addClass', 'addSource', + 'removeSource', 'addLayer', 'removeLayer', 'addImage', diff --git a/platform/node/test/js/request.test.js b/platform/node/test/js/request.test.js new file mode 100644 index 0000000000..4f8d1cabb0 --- /dev/null +++ b/platform/node/test/js/request.test.js @@ -0,0 +1,167 @@ +'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(); + }); + }); +}); + +test(`render reports an error if the request function throws an exception`, function(t) { + var map = new mbgl.Map({ + request: function() { + throw new Error('message'); + } + }); + 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(); + }); +}); + +test(`render ignores request functions throwing an exception after calling the callback`, function(t) { + var map = new mbgl.Map({ + request: function(req, callback) { + var data = mockfs.dataForRequest(req); + callback(null, { data: data }); + throw new Error('message'); + } + }); + map.load(mockfs.style_vector); + map.render({ zoom: 16 }, function(err, pixels) { + t.error(err); + t.assert(pixels); + t.end(); + }); +}); + +test(`render ignores request functions calling the callback a second time`, function(t) { + var map = new mbgl.Map({ + request: function(req, callback) { + var data = mockfs.dataForRequest(req); + callback(null, { data: data }); + callback(null, { data: data }); + } + }); + map.load(mockfs.style_vector); + map.render({ zoom: 16 }, function(err, pixels) { + t.error(err); + t.assert(pixels); + t.end(); + }); +}); + +test(`render reports an error from loading the current style`, function(t) { + var map = new mbgl.Map({ + request: function(req, callback) { + var data = mockfs.dataForRequest(req); + if (mockfs.source_vector === 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); + + map.render({ zoom: 16 }, function(err, pixels) { + t.assert(err); + t.assert(/message/.test(err.message)); + t.assert(!pixels); + t.end(); + }); + }); +}); + +test(`render does not report an error from rendering a previous style`, function(t) { + var map = new mbgl.Map({ + request: function(req, callback) { + var data = mockfs.dataForRequest(req); + if (mockfs.source_vector === 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); + + map.load(mockfs.style_raster); + map.render({ zoom: 16 }, function(err, pixels) { + t.error(err); + t.assert(pixels); + t.end(); + }); + }); +}); diff --git a/platform/node/test/js/request_fail.test.js b/platform/node/test/js/request_fail.test.js deleted file mode 100644 index fad116a2b8..0000000000 --- a/platform/node/test/js/request_fail.test.js +++ /dev/null @@ -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); -}); diff --git a/platform/node/test/js/request_notfound.test.js b/platform/node/test/js/request_notfound.test.js deleted file mode 100644 index d2d2812784..0000000000 --- a/platform/node/test/js/request_notfound.test.js +++ /dev/null @@ -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); -}); |