Skip to content

Commit

Permalink
Add WorkerTile tests
Browse files Browse the repository at this point in the history
* WorkerTile#parse skips layers without a corresponding source layer
* WorkerTile#parse warns once when encountering a v1 vector tile layer

Covering the issues fixed in #3369

While here, rewrite the existing tests to conform more closely with our test guidelines. (Though technically they still mock domain objects.)
  • Loading branch information
jfirebaugh committed Oct 14, 2016
1 parent 31494bc commit 30c381f
Showing 1 changed file with 104 additions and 49 deletions.
153 changes: 104 additions & 49 deletions test/js/source/worker_tile.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,11 @@ var WorkerTile = require('../../../js/source/worker_tile');
var Wrapper = require('../../../js/source/geojson_wrapper');
var TileCoord = require('../../../js/source/tile_coord');
var StyleLayer = require('../../../js/style/style_layer');
var util = require('../../../js/util/util');
var featureFilter = require('feature-filter');

test('basic', function(t) {
var features = [{
type: 1,
geometry: [0, 0],
tags: {}
}];

var tile = new WorkerTile({
function createWorkerTile() {
return new WorkerTile({
uid: '',
zoom: 0,
maxZoom: 20,
Expand All @@ -23,52 +18,112 @@ test('basic', function(t) {
coord: new TileCoord(1, 1, 1),
overscaling: 1
});
}

function createWrapper() {
return new Wrapper([{
type: 1,
geometry: [0, 0],
tags: {}
}]);
}

test('WorkerTile#parse', function(t) {
var layerFamilies = {
test: [new StyleLayer({
id: 'test',
source: 'source',
type: 'circle',
layout: {},
compare: function () { return true; },
filter: featureFilter()
})]
};

var tile = createWorkerTile();
tile.parse(createWrapper(), layerFamilies, {}, function(err, result) {
t.ifError(err);
t.ok(result.buckets[0]);
t.end();
});
});

t.test('basic worker tile', function(t) {
var layerFamilies = {
test: [new StyleLayer({
id: 'test',
source: 'source',
type: 'circle',
layout: {},
compare: function () { return true; },
filter: featureFilter()
})]
};
test('WorkerTile#parse skips hidden layers', function(t) {
var layerFamilies = {
'test': [new StyleLayer({
id: 'test',
source: 'source',
type: 'circle',
layout: {},
compare: function () { return true; },
filter: featureFilter()
})],
'test-hidden': [new StyleLayer({
id: 'test-hidden',
source: 'source',
type: 'fill',
layout: { visibility: 'none' },
compare: function () { return true; },
filter: featureFilter()
})]
};

tile.parse(new Wrapper(features), layerFamilies, {}, function(err, result) {
t.equal(err, null);
t.ok(result.buckets[0]);
t.end();
});
var tile = createWorkerTile();
tile.parse(createWrapper(), layerFamilies, {}, function(err, result) {
t.ifError(err);
t.equal(Object.keys(result.buckets[0].arrays).length, 1);
t.end();
});
});

t.test('hidden layers', function(t) {
var layerFamilies = {
'test': [new StyleLayer({
id: 'test',
source: 'source',
type: 'circle',
layout: {},
compare: function () { return true; },
filter: featureFilter()
})],
'test-hidden': [new StyleLayer({
id: 'test-hidden',
source: 'source',
type: 'fill',
layout: { visibility: 'none' },
compare: function () { return true; },
filter: featureFilter()
})]
};
test('WorkerTile#parse skips layers without a corresponding source layer', function(t) {
var layerFamilies = {
'test-sourceless': [new StyleLayer({
id: 'test',
source: 'source',
'source-layer': 'nonesuch',
type: 'fill',
layout: {},
compare: function () { return true; },
filter: featureFilter()
})]
};

tile.parse(new Wrapper(features), layerFamilies, {}, function(err, result) {
t.equal(err, null);
t.equal(Object.keys(result.buckets[0].arrays).length, 1, 'array groups exclude hidden layer');
t.end();
});
var tile = createWorkerTile();
tile.parse({layers: {}}, layerFamilies, {}, function(err, result) {
t.ifError(err);
t.equal(result.buckets.length, 0);
t.end();
});
});

t.end();
test('WorkerTile#parse warns once when encountering a v1 vector tile layer', function(t) {
var layerFamilies = {
'test': [new StyleLayer({
id: 'test',
source: 'source',
'source-layer': 'test',
type: 'fill',
layout: {},
compare: function () { return true; },
filter: featureFilter()
})]
};

var data = {
layers: {
test: {
version: 1
}
}
};

t.stub(util, 'warnOnce');

var tile = createWorkerTile();
tile.parse(data, layerFamilies, {}, function(err) {
t.ifError(err);
t.ok(util.warnOnce.calledWithMatch(/does not use vector tile spec v2/));
t.end();
});
});

0 comments on commit 30c381f

Please sign in to comment.