1 | import WorkerTile from '../source/worker_tile';
|
2 | import Wrapper, {Feature} from '../source/geojson_wrapper';
|
3 | import {OverscaledTileID} from '../source/tile_id';
|
4 | import StyleLayerIndex from '../style/style_layer_index';
|
5 | import {WorkerTileParameters} from './worker_source';
|
6 | import Actor from '../util/actor';
|
7 | import {VectorTile} from '@mapbox/vector-tile';
|
8 |
|
9 | function createWorkerTile() {
|
10 | return new WorkerTile({
|
11 | uid: '',
|
12 | zoom: 0,
|
13 | maxZoom: 20,
|
14 | tileSize: 512,
|
15 | source: 'source',
|
16 | tileID: new OverscaledTileID(1, 0, 1, 1, 1),
|
17 | overscaling: 1
|
18 | } as any as WorkerTileParameters);
|
19 | }
|
20 |
|
21 | function createWrapper() {
|
22 | return new Wrapper([{
|
23 | type: 1,
|
24 | geometry: [0, 0],
|
25 | tags: {}
|
26 | } as any as Feature]);
|
27 | }
|
28 |
|
29 | describe('worker tile', () => {
|
30 | test('WorkerTile#parse', done => {
|
31 | const layerIndex = new StyleLayerIndex([{
|
32 | id: 'test',
|
33 | source: 'source',
|
34 | type: 'circle'
|
35 | }]);
|
36 |
|
37 | const tile = createWorkerTile();
|
38 | tile.parse(createWrapper(), layerIndex, [], {} as Actor, (err, result) => {
|
39 | expect(err).toBeFalsy();
|
40 | expect(result.buckets[0]).toBeTruthy();
|
41 | done();
|
42 | });
|
43 | });
|
44 |
|
45 | test('WorkerTile#parse skips hidden layers', done => {
|
46 | const layerIndex = new StyleLayerIndex([{
|
47 | id: 'test-hidden',
|
48 | source: 'source',
|
49 | type: 'fill',
|
50 | layout: {visibility: 'none'}
|
51 | }]);
|
52 |
|
53 | const tile = createWorkerTile();
|
54 | tile.parse(createWrapper(), layerIndex, [], {} as Actor, (err, result) => {
|
55 | expect(err).toBeFalsy();
|
56 | expect(result.buckets).toHaveLength(0);
|
57 | done();
|
58 | });
|
59 | });
|
60 |
|
61 | test('WorkerTile#parse skips layers without a corresponding source layer', done => {
|
62 | const layerIndex = new StyleLayerIndex([{
|
63 | id: 'test',
|
64 | source: 'source',
|
65 | 'source-layer': 'nonesuch',
|
66 | type: 'fill'
|
67 | }]);
|
68 |
|
69 | const tile = createWorkerTile();
|
70 | tile.parse({layers: {}}, layerIndex, [], {} as Actor, (err, result) => {
|
71 | expect(err).toBeFalsy();
|
72 | expect(result.buckets).toHaveLength(0);
|
73 | done();
|
74 | });
|
75 | });
|
76 |
|
77 | test('WorkerTile#parse warns once when encountering a v1 vector tile layer', done => {
|
78 | const layerIndex = new StyleLayerIndex([{
|
79 | id: 'test',
|
80 | source: 'source',
|
81 | 'source-layer': 'test',
|
82 | type: 'fill'
|
83 | }]);
|
84 |
|
85 | const data = {
|
86 | layers: {
|
87 | test: {
|
88 | version: 1
|
89 | }
|
90 | }
|
91 | } as any as VectorTile;
|
92 |
|
93 | const spy = jest.spyOn(console, 'warn').mockImplementation(() => {});
|
94 |
|
95 | const tile = createWorkerTile();
|
96 | tile.parse(data, layerIndex, [], {} as Actor, (err) => {
|
97 | expect(err).toBeFalsy();
|
98 | expect(spy.mock.calls[0][0]).toMatch(/does not use vector tile spec v2/);
|
99 | done();
|
100 | });
|
101 | });
|
102 | });
|