mobility-toolbox-js 2.0.0-beta.35 → 2.0.0-beta.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +14 -8
  2. package/api/RealtimeAPI.test.d.ts +2 -0
  3. package/api/RealtimeAPI.test.d.ts.map +1 -0
  4. package/api/RealtimeAPI.test.js +67 -0
  5. package/api/RoutingAPI.d.ts +6 -2
  6. package/api/RoutingAPI.d.ts.map +1 -1
  7. package/api/RoutingAPI.test.d.ts +2 -0
  8. package/api/RoutingAPI.test.d.ts.map +1 -0
  9. package/api/RoutingAPI.test.js +29 -0
  10. package/api/StopsAPI.test.d.ts +2 -0
  11. package/api/StopsAPI.test.d.ts.map +1 -0
  12. package/api/StopsAPI.test.js +26 -0
  13. package/common/api/HttpAPI.d.ts +4 -4
  14. package/common/api/HttpAPI.d.ts.map +1 -1
  15. package/common/api/HttpAPI.test.d.ts +2 -0
  16. package/common/api/HttpAPI.test.d.ts.map +1 -0
  17. package/common/api/HttpAPI.test.js +54 -0
  18. package/common/api/WebSocketAPI.d.ts +6 -2
  19. package/common/api/WebSocketAPI.d.ts.map +1 -1
  20. package/common/api/WebSocketAPI.js +57 -31
  21. package/common/api/WebSocketAPI.test.d.ts +2 -0
  22. package/common/api/WebSocketAPI.test.d.ts.map +1 -0
  23. package/common/api/WebSocketAPI.test.js +380 -0
  24. package/common/controls/Control.test.d.ts +2 -0
  25. package/common/controls/Control.test.d.ts.map +1 -0
  26. package/common/controls/Control.test.js +89 -0
  27. package/common/layers/Layer.test.d.ts +2 -0
  28. package/common/layers/Layer.test.d.ts.map +1 -0
  29. package/common/layers/Layer.test.js +137 -0
  30. package/common/mixins/UserInteractionsLayerMixin.test.d.ts +2 -0
  31. package/common/mixins/UserInteractionsLayerMixin.test.d.ts.map +1 -0
  32. package/common/mixins/UserInteractionsLayerMixin.test.js +214 -0
  33. package/common/styles/realtimeDefaultStyle.d.ts.map +1 -1
  34. package/common/styles/realtimeDefaultStyle.js +2 -4
  35. package/common/styles/realtimeSimpleStyle.js +1 -1
  36. package/common/utils/createTrackerFilters.test.d.ts +2 -0
  37. package/common/utils/createTrackerFilters.test.d.ts.map +1 -0
  38. package/common/utils/createTrackerFilters.test.js +79 -0
  39. package/common/utils/getMapboxMapCopyrights.test.d.ts +2 -0
  40. package/common/utils/getMapboxMapCopyrights.test.d.ts.map +1 -0
  41. package/common/utils/getMapboxMapCopyrights.test.js +40 -0
  42. package/common/utils/removeDuplicate.test.d.ts +2 -0
  43. package/common/utils/removeDuplicate.test.d.ts.map +1 -0
  44. package/common/utils/removeDuplicate.test.js +19 -0
  45. package/common/utils/timeUtils.test.d.ts +2 -0
  46. package/common/utils/timeUtils.test.d.ts.map +1 -0
  47. package/common/utils/timeUtils.test.js +10 -0
  48. package/common/utils/trackerConfig.test.d.ts +2 -0
  49. package/common/utils/trackerConfig.test.d.ts.map +1 -0
  50. package/common/utils/trackerConfig.test.js +23 -0
  51. package/index.d.ts +4 -0
  52. package/mapbox/index.d.ts +1 -0
  53. package/mapbox/layers/Layer.test.d.ts +2 -0
  54. package/mapbox/layers/Layer.test.d.ts.map +1 -0
  55. package/mapbox/layers/Layer.test.js +204 -0
  56. package/mapbox/layers/RealtimeLayer.test.d.ts +2 -0
  57. package/mapbox/layers/RealtimeLayer.test.d.ts.map +1 -0
  58. package/mapbox/layers/RealtimeLayer.test.js +10 -0
  59. package/mbt.js +56 -32
  60. package/mbt.js.map +2 -2
  61. package/mbt.min.js +10 -10
  62. package/mbt.min.js.map +2 -2
  63. package/ol/controls/CopyrightControl.test.d.ts +2 -0
  64. package/ol/controls/CopyrightControl.test.d.ts.map +1 -0
  65. package/ol/controls/CopyrightControl.test.js +177 -0
  66. package/ol/controls/RoutingControl.d.ts +2 -1
  67. package/ol/controls/RoutingControl.d.ts.map +1 -1
  68. package/ol/controls/RoutingControl.test.d.ts +2 -0
  69. package/ol/controls/RoutingControl.test.d.ts.map +1 -0
  70. package/ol/controls/RoutingControl.test.js +150 -0
  71. package/ol/controls/StopFinderControl.test.d.ts +2 -0
  72. package/ol/controls/StopFinderControl.test.d.ts.map +1 -0
  73. package/ol/controls/StopFinderControl.test.js +49 -0
  74. package/ol/index.d.ts +1 -0
  75. package/ol/layers/Layer.test.d.ts +2 -0
  76. package/ol/layers/Layer.test.d.ts.map +1 -0
  77. package/ol/layers/Layer.test.js +196 -0
  78. package/ol/layers/MapboxLayer.d.ts.map +1 -1
  79. package/ol/layers/MapboxLayer.js +4 -0
  80. package/ol/layers/MapboxLayer.test.d.ts +2 -0
  81. package/ol/layers/MapboxLayer.test.d.ts.map +1 -0
  82. package/ol/layers/MapboxLayer.test.js +164 -0
  83. package/ol/layers/MapboxStyleLayer.test.d.ts +2 -0
  84. package/ol/layers/MapboxStyleLayer.test.d.ts.map +1 -0
  85. package/ol/layers/MapboxStyleLayer.test.js +232 -0
  86. package/ol/layers/RealtimeLayer.test.d.ts +2 -0
  87. package/ol/layers/RealtimeLayer.test.d.ts.map +1 -0
  88. package/ol/layers/RealtimeLayer.test.js +71 -0
  89. package/ol/layers/RoutingLayer.test.d.ts +2 -0
  90. package/ol/layers/RoutingLayer.test.d.ts.map +1 -0
  91. package/ol/layers/RoutingLayer.test.js +39 -0
  92. package/ol/layers/VectorLayer.test.d.ts +2 -0
  93. package/ol/layers/VectorLayer.test.d.ts.map +1 -0
  94. package/ol/layers/VectorLayer.test.js +87 -0
  95. package/ol/layers/WMSLayer.test.d.ts +2 -0
  96. package/ol/layers/WMSLayer.test.d.ts.map +1 -0
  97. package/ol/layers/WMSLayer.test.js +66 -0
  98. package/package.json +5 -2
@@ -0,0 +1,164 @@
1
+ import OlMap from 'ol/Map';
2
+ import View from 'ol/View';
3
+ import gllib from 'mapbox-gl';
4
+ import MapboxLayer from './MapboxLayer';
5
+ let layer;
6
+ let map;
7
+ let consoleOutput;
8
+ const styleUrl = 'http://foo.com/styles';
9
+ describe('MapboxLayer', () => {
10
+ describe('without apiKey', () => {
11
+ beforeEach(() => {
12
+ // Mock console statement
13
+ consoleOutput = [];
14
+ // eslint-disable-next-line no-console
15
+ console.error = (message) => consoleOutput.push(message);
16
+ layer = new MapboxLayer({
17
+ name: 'Layer',
18
+ url: styleUrl,
19
+ });
20
+ map = new OlMap({
21
+ target: document.createElement('div'),
22
+ view: new View({ center: [0, 0] }),
23
+ });
24
+ });
25
+ test('should be instanced.', () => {
26
+ expect(layer).toBeInstanceOf(MapboxLayer);
27
+ expect(layer.styleUrl).toBe(styleUrl);
28
+ });
29
+ test('should not initalized mapbox map.', () => {
30
+ layer.attachToMap();
31
+ expect(layer.mbMap).toBe();
32
+ });
33
+ test('should initalized mapbox map and warn the user if there is no api key defined.', () => {
34
+ layer.attachToMap(map);
35
+ expect(layer.mbMap).toBeInstanceOf(gllib.Map);
36
+ expect(consoleOutput[0]).toBe('No apiKey defined for mapbox layer with style url to http://foo.com/styles');
37
+ });
38
+ test('should called terminate on initalization.', () => {
39
+ const spy = jest.spyOn(layer, 'detachFromMap');
40
+ layer.attachToMap();
41
+ expect(spy).toHaveBeenCalledTimes(1);
42
+ });
43
+ test('should clone', () => {
44
+ const clone = layer.clone({ name: 'clone' });
45
+ expect(clone).not.toBe(layer);
46
+ expect(clone.name).toBe('clone');
47
+ expect(clone).toBeInstanceOf(MapboxLayer);
48
+ });
49
+ });
50
+ describe('with apiKey', () => {
51
+ beforeEach(() => {
52
+ layer = new MapboxLayer({
53
+ name: 'Layer',
54
+ url: styleUrl,
55
+ apiKey: 'apiKey',
56
+ });
57
+ map = new OlMap({
58
+ target: document.createElement('div'),
59
+ view: new View({ center: [0, 0] }),
60
+ });
61
+ });
62
+ test('should be instanced with apiKey.', () => {
63
+ expect(layer).toBeInstanceOf(MapboxLayer);
64
+ expect(layer.styleUrl).toBe(styleUrl);
65
+ });
66
+ test('should not initalized mapbox map.', () => {
67
+ layer.attachToMap();
68
+ expect(layer.mbMap).toBe();
69
+ });
70
+ test("should initalized mapbox map, with 'apiKey' prop", () => {
71
+ const layer1 = new MapboxLayer({
72
+ name: 'Layer',
73
+ url: styleUrl,
74
+ apiKey: 'apiKeyVal',
75
+ });
76
+ layer1.attachToMap(map);
77
+ expect(layer1.mbMap.options.style).toBe('http://foo.com/styles?key=apiKeyVal');
78
+ });
79
+ test("should initalized mapbox map, with 'apiKeyName' prop", () => {
80
+ const layer1 = new MapboxLayer({
81
+ name: 'Layer',
82
+ url: styleUrl,
83
+ apiKey: 'test',
84
+ apiKeyName: 'apiKey',
85
+ });
86
+ layer1.attachToMap(map);
87
+ expect(layer1.mbMap.options.style).toBe('http://foo.com/styles?apiKey=test');
88
+ });
89
+ });
90
+ describe('#getFeatureInfoAtCoordinate()', () => {
91
+ let layer1;
92
+ beforeEach(() => {
93
+ layer1 = new MapboxLayer({
94
+ name: 'Layer',
95
+ url: styleUrl,
96
+ apiKey: 'test',
97
+ apiKeyName: 'apiKey',
98
+ });
99
+ layer1.attachToMap(map);
100
+ layer1.mbMap.isStyleLoaded = jest.fn(() => true);
101
+ layer1.mbMap.getSource = jest.fn(() => true);
102
+ });
103
+ afterEach(() => {
104
+ layer1.mbMap.getSource.mockRestore();
105
+ layer1.mbMap.isStyleLoaded.mockRestore();
106
+ });
107
+ test('should set the mapboxFeature as a property', (done) => {
108
+ const mapboxFeature = {
109
+ id: '2',
110
+ type: 'Feature',
111
+ properties: {
112
+ foo: 'bar',
113
+ },
114
+ source: 'barr',
115
+ sourceLayer: 'fooo',
116
+ };
117
+ layer1.mbMap.project = jest.fn((coord) => ({ x: coord[0], y: coord[1] }));
118
+ layer1.mbMap.queryRenderedFeatures = jest.fn(() => [mapboxFeature]);
119
+ layer1.getFeatureInfoAtCoordinate([0, 0], {}).then((featureInfo) => {
120
+ expect(featureInfo.features[0].get('mapboxFeature')).toBe(mapboxFeature);
121
+ done();
122
+ });
123
+ layer1.mbMap.project.mockRestore();
124
+ layer1.mbMap.queryRenderedFeatures.mockRestore();
125
+ });
126
+ describe('should use hitTolerance property', () => {
127
+ beforeEach(() => {
128
+ layer1.mbMap.project = jest.fn((coord) => ({
129
+ x: coord[0],
130
+ y: coord[1],
131
+ }));
132
+ });
133
+ afterEach(() => {
134
+ layer1.mbMap.project.mockRestore();
135
+ layer1.mbMap.queryRenderedFeatures.mockRestore();
136
+ });
137
+ test('when hitTolerance is not set', (done) => {
138
+ layer1.mbMap.queryRenderedFeatures = jest.fn((pixelBounds) => {
139
+ // Use default hoitTolerance
140
+ expect(pixelBounds).toEqual([
141
+ { x: -5, y: -5 },
142
+ { x: 5, y: 5 },
143
+ ]);
144
+ done();
145
+ return [];
146
+ });
147
+ layer1.getFeatureInfoAtCoordinate([0, 0], {});
148
+ });
149
+ test('when hitTolerance is set to 10', (done) => {
150
+ layer1.hitTolerance = 10;
151
+ layer1.mbMap.queryRenderedFeatures = jest.fn((pixelBounds) => {
152
+ // Use default hoitTolerance
153
+ expect(pixelBounds).toEqual([
154
+ { x: -10, y: -10 },
155
+ { x: 10, y: 10 },
156
+ ]);
157
+ done();
158
+ return [];
159
+ });
160
+ layer1.getFeatureInfoAtCoordinate([0, 0], {});
161
+ });
162
+ });
163
+ });
164
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MapboxStyleLayer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapboxStyleLayer.test.d.ts","sourceRoot":"","sources":["../../../src/ol/layers/MapboxStyleLayer.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,232 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import OlMap from 'ol/Map';
11
+ import View from 'ol/View';
12
+ import gllib from 'maplibre-gl';
13
+ import Layer from './Layer';
14
+ import MaplibreLayer from './MaplibreLayer';
15
+ import MapboxStyleLayer from './MapboxStyleLayer';
16
+ let source;
17
+ let layer;
18
+ let map;
19
+ let onClick;
20
+ const styleLayer = {
21
+ id: 'layer',
22
+ };
23
+ describe('MapboxStyleLayer', () => {
24
+ beforeEach(() => {
25
+ onClick = jest.fn();
26
+ source = new MaplibreLayer({
27
+ name: 'Layer',
28
+ apiKey: 'foo',
29
+ url: 'https://foo.com/styles',
30
+ });
31
+ layer = new MapboxStyleLayer({
32
+ name: 'mapbox layer',
33
+ visible: true,
34
+ mapboxLayer: source,
35
+ styleLayer,
36
+ onClick,
37
+ });
38
+ map = new OlMap({
39
+ target: document.createElement('div'),
40
+ view: new View({ center: [0, 0] }),
41
+ });
42
+ });
43
+ afterEach(() => {
44
+ if (layer.map) {
45
+ layer.detachFromMap(map);
46
+ }
47
+ if (source.map) {
48
+ source.detachFromMap(map);
49
+ }
50
+ });
51
+ test('should be instanced.', () => {
52
+ expect(layer).toBeInstanceOf(MapboxStyleLayer);
53
+ expect(layer.styleLayers[0]).toBe(styleLayer);
54
+ });
55
+ test('should not initalized mapbox map.', () => {
56
+ layer.attachToMap();
57
+ expect(layer.mbMap).toBe();
58
+ layer.detachFromMap();
59
+ });
60
+ test('should initalized mapbox map.', () => {
61
+ source.attachToMap(map);
62
+ layer.attachToMap(map);
63
+ expect(layer.mapboxLayer.mbMap).toBeInstanceOf(gllib.Map);
64
+ layer.detachFromMap();
65
+ source.detachFromMap();
66
+ });
67
+ test('should called terminate on initalization.', () => {
68
+ const spy = jest.spyOn(layer, 'detachFromMap');
69
+ layer.attachToMap();
70
+ expect(spy).toHaveBeenCalledTimes(1);
71
+ layer.detachFromMap(map);
72
+ });
73
+ test('should return coordinates, features and a layer instance.', () => __awaiter(void 0, void 0, void 0, function* () {
74
+ source.attachToMap(map);
75
+ layer.attachToMap(map);
76
+ const data = yield layer.getFeatureInfoAtCoordinate([50, 50]);
77
+ expect(data.coordinate).toEqual([50, 50]);
78
+ expect(data.features).toEqual([]);
79
+ expect(data.layer).toBeInstanceOf(MapboxStyleLayer);
80
+ layer.detachFromMap(map);
81
+ source.detachFromMap(map);
82
+ }));
83
+ test('should call onClick callback', () => __awaiter(void 0, void 0, void 0, function* () {
84
+ const coordinate = [500, 500];
85
+ const features = [];
86
+ const evt = { type: 'singleclick', map, coordinate };
87
+ layer.attachToMap(map);
88
+ expect(onClick).toHaveBeenCalledTimes(0);
89
+ yield map.dispatchEvent(evt);
90
+ expect(onClick).toHaveBeenCalledTimes(1);
91
+ expect(onClick).toHaveBeenCalledWith(features, layer, coordinate);
92
+ layer.detachFromMap();
93
+ }));
94
+ test('should call super class terminate function.', () => {
95
+ layer.attachToMap(map);
96
+ const spy = jest.spyOn(Layer.prototype, 'detachFromMap');
97
+ layer.detachFromMap(map);
98
+ expect(spy).toHaveBeenCalledTimes(1);
99
+ spy.mockRestore();
100
+ });
101
+ test('should call super class terminate if the mapboxLayer associated has been terminated before.', () => {
102
+ layer.attachToMap(map);
103
+ source.detachFromMap(map);
104
+ const spy = jest.spyOn(Layer.prototype, 'detachFromMap');
105
+ layer.detachFromMap(map);
106
+ expect(spy).toHaveBeenCalledTimes(1);
107
+ spy.mockRestore();
108
+ });
109
+ test('should clone', () => {
110
+ const clone = layer.clone({ name: 'clone' });
111
+ expect(clone).not.toBe(layer);
112
+ expect(clone.name).toBe('clone');
113
+ expect(clone).toBeInstanceOf(MapboxStyleLayer);
114
+ });
115
+ test('should add layer on load', () => {
116
+ const style = { layers: [] };
117
+ layer.mapboxLayer.mbMap = {
118
+ getStyle: () => style,
119
+ getSource: () => ({}),
120
+ getLayer: () => null,
121
+ setLayoutProperty: () => null,
122
+ addLayer: (styleLayerr) => style.layers.push(styleLayerr),
123
+ };
124
+ layer.onLoad();
125
+ expect(style.layers[0]).toBe(styleLayer);
126
+ });
127
+ describe('should set disabled property to false on load', () => {
128
+ test('when layer uses styleLayer property', () => {
129
+ const styles = { layers: [] };
130
+ layer.mapboxLayer.mbMap = {
131
+ getStyle: () => styles,
132
+ getSource: () => ({}),
133
+ getLayer: () => null,
134
+ setLayoutProperty: () => null,
135
+ addLayer: (styleLayerr) => styles.layers.push(styleLayerr),
136
+ };
137
+ expect(layer).toBeInstanceOf(MapboxStyleLayer);
138
+ layer.onLoad();
139
+ expect(layer.disabled).toBe(false);
140
+ });
141
+ });
142
+ describe('should set disabled property to true on load', () => {
143
+ test('when layer uses styleLayersFilter property', () => {
144
+ const styles = { layers: [styleLayer] };
145
+ const layer2 = new MapboxStyleLayer({
146
+ name: 'mapbox layer',
147
+ mapboxLayer: source,
148
+ styleLayersFilter: () => false,
149
+ });
150
+ layer2.mapboxLayer.mbMap = {
151
+ getStyle: () => styles,
152
+ getSource: () => ({}),
153
+ getLayer: () => null,
154
+ setLayoutProperty: () => null,
155
+ addLayer: () => ({}),
156
+ };
157
+ layer2.onLoad();
158
+ expect(layer2.disabled).toBe(true);
159
+ });
160
+ });
161
+ describe('#getFeatureInfoAtCoordinate()', () => {
162
+ beforeEach(() => {
163
+ source.attachToMap(map);
164
+ source.mbMap.isStyleLoaded = jest.fn(() => true);
165
+ source.mbMap.getSource = jest.fn(() => true);
166
+ });
167
+ afterEach(() => {
168
+ source.mbMap.getSource.mockRestore();
169
+ source.mbMap.isStyleLoaded.mockRestore();
170
+ });
171
+ test('should request features on layers ids from styleLayers property', () => {
172
+ source.mbMap.getStyle = jest.fn(() => ({
173
+ layers: [{ id: 'foo' }, { id: 'layer' }, { id: 'bar' }],
174
+ }));
175
+ layer.attachToMap(map);
176
+ layer.mapboxLayer.getFeatureInfoAtCoordinate = jest.fn(() => Promise.resolve({ features: [] }));
177
+ layer.getFeatureInfoAtCoordinate([0, 0]).then(() => { });
178
+ expect(layer.mapboxLayer.getFeatureInfoAtCoordinate).toHaveBeenCalledWith([0, 0], { layers: ['layer'], validate: false });
179
+ layer.mapboxLayer.getFeatureInfoAtCoordinate.mockRestore();
180
+ source.mbMap.getStyle.mockRestore();
181
+ });
182
+ test('should request features on layers ids from styleLayersFilter property', () => {
183
+ source.mbMap.getStyle = jest.fn(() => ({
184
+ layers: [{ id: 'foo' }, { id: 'layer' }, { id: 'bar' }, { id: 'foo2' }],
185
+ }));
186
+ const layer2 = new MapboxStyleLayer({
187
+ name: 'mapbox layer',
188
+ visible: true,
189
+ mapboxLayer: source,
190
+ styleLayer,
191
+ styleLayersFilter: ({ id }) => /foo/.test(id),
192
+ });
193
+ layer2.attachToMap(map);
194
+ layer2.mapboxLayer.getFeatureInfoAtCoordinate = jest.fn(() => Promise.resolve({ features: [] }));
195
+ layer2.getFeatureInfoAtCoordinate([0, 0]).then(() => { });
196
+ expect(layer2.mapboxLayer.getFeatureInfoAtCoordinate).toHaveBeenCalledWith([0, 0], {
197
+ layers: ['foo', 'foo2'],
198
+ validate: false,
199
+ });
200
+ layer2.mapboxLayer.getFeatureInfoAtCoordinate.mockRestore();
201
+ source.mbMap.getStyle.mockRestore();
202
+ });
203
+ test('should request features on layers ids from queryRenderedLayersFilter property', () => {
204
+ source.mbMap.getStyle = jest.fn(() => ({
205
+ layers: [
206
+ { id: 'foo' },
207
+ { id: 'bar2' },
208
+ { id: 'layer' },
209
+ { id: 'bar' },
210
+ { id: 'foo2' },
211
+ ],
212
+ }));
213
+ const layer2 = new MapboxStyleLayer({
214
+ name: 'mapbox layer',
215
+ visible: true,
216
+ mapboxLayer: source,
217
+ styleLayer,
218
+ styleLayersFilter: ({ id }) => /foo/.test(id),
219
+ queryRenderedLayersFilter: ({ id }) => /bar/.test(id),
220
+ });
221
+ layer2.attachToMap(map);
222
+ layer2.mapboxLayer.getFeatureInfoAtCoordinate = jest.fn(() => Promise.resolve({ features: [] }));
223
+ layer2.getFeatureInfoAtCoordinate([0, 0]).then(() => { });
224
+ expect(layer2.mapboxLayer.getFeatureInfoAtCoordinate).toHaveBeenCalledWith([0, 0], {
225
+ layers: ['bar2', 'bar'],
226
+ validate: false,
227
+ });
228
+ layer2.mapboxLayer.getFeatureInfoAtCoordinate.mockRestore();
229
+ source.mbMap.getStyle.mockRestore();
230
+ });
231
+ });
232
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RealtimeLayer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealtimeLayer.test.d.ts","sourceRoot":"","sources":["../../../src/ol/layers/RealtimeLayer.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import fetch from 'jest-fetch-mock';
2
+ import Map from 'ol/Map';
3
+ import View from 'ol/View';
4
+ import WS from 'jest-websocket-mock';
5
+ import RealtimeLayer from './RealtimeLayer';
6
+ // create a WS instance, listening on port 1234 on localhost
7
+ let layer;
8
+ let onClick;
9
+ let olMap;
10
+ let server;
11
+ describe('RealtimeLayer', () => {
12
+ beforeEach(() => {
13
+ server = new WS('ws://localhost:1234');
14
+ global.fetch = fetch;
15
+ fetch.resetMocks();
16
+ onClick = jest.fn();
17
+ layer = new RealtimeLayer({
18
+ url: 'ws://localhost:1234',
19
+ apiKey: 'apiKey',
20
+ onClick,
21
+ });
22
+ olMap = new Map({
23
+ view: new View({
24
+ center: [831634, 5933959],
25
+ zoom: 9,
26
+ }),
27
+ });
28
+ });
29
+ afterEach(() => {
30
+ // ...or gracefully close the connection
31
+ server.close();
32
+ // The WS class also has a static "clean" method to gracefully close all open connections,
33
+ // particularly useful to reset the environment between test runs.
34
+ WS.clean();
35
+ });
36
+ test('should be instanced.', () => {
37
+ expect(layer).toBeInstanceOf(RealtimeLayer);
38
+ });
39
+ test('should called terminate on initalization.', () => {
40
+ const spy = jest.spyOn(layer, 'detachFromMap');
41
+ fetch.mockResponseOnce(JSON.stringify(global.fetchTrajectoriesResponse));
42
+ layer.attachToMap(olMap);
43
+ expect(spy).toHaveBeenCalledTimes(1);
44
+ });
45
+ test('should clone', () => {
46
+ const clone = layer.clone({ name: 'clone' });
47
+ expect(clone).not.toBe(layer);
48
+ expect(clone.name).toBe('clone');
49
+ expect(clone).toBeInstanceOf(RealtimeLayer);
50
+ });
51
+ test('should use the sort function.', () => {
52
+ const fn = () => true;
53
+ const laye = new RealtimeLayer({
54
+ url: 'ws://localhost:1234',
55
+ apiKey: 'apiKey',
56
+ sort: fn,
57
+ });
58
+ expect(laye).toBeInstanceOf(RealtimeLayer);
59
+ expect(laye.sort).toBe(fn);
60
+ });
61
+ test('should use filter function.', () => {
62
+ const fn = () => true;
63
+ const laye = new RealtimeLayer({
64
+ url: 'ws://localhost:1234',
65
+ apiKey: 'apiKey',
66
+ filter: fn, // reverse the array
67
+ });
68
+ expect(laye).toBeInstanceOf(RealtimeLayer);
69
+ expect(laye.filter).toBe(fn);
70
+ });
71
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RoutingLayer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingLayer.test.d.ts","sourceRoot":"","sources":["../../../src/ol/layers/RoutingLayer.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import fetch from 'jest-fetch-mock';
2
+ import Map from 'ol/Map';
3
+ import View from 'ol/View';
4
+ import RoutingLayer from './RoutingLayer';
5
+ let layer;
6
+ let onClick;
7
+ let olMap;
8
+ describe('RoutingLayer', () => {
9
+ beforeEach(() => {
10
+ global.fetch = fetch;
11
+ fetch.resetMocks();
12
+ onClick = jest.fn();
13
+ layer = new RoutingLayer({
14
+ onClick,
15
+ apiKey: 'apiKey',
16
+ });
17
+ olMap = new Map({
18
+ view: new View({
19
+ center: [831634, 5933959],
20
+ zoom: 9,
21
+ }),
22
+ });
23
+ });
24
+ test('should be instanced.', () => {
25
+ expect(layer).toBeInstanceOf(RoutingLayer);
26
+ });
27
+ test('should called terminate on initalization.', () => {
28
+ const spy = jest.spyOn(layer, 'detachFromMap');
29
+ fetch.mockResponseOnce(JSON.stringify(global.fetchTrajectoriesResponse));
30
+ layer.attachToMap(olMap);
31
+ expect(spy).toHaveBeenCalledTimes(1);
32
+ });
33
+ test('should clone', () => {
34
+ const clone = layer.clone({ name: 'clone' });
35
+ expect(clone).not.toBe(layer);
36
+ expect(clone.name).toBe('clone');
37
+ expect(clone).toBeInstanceOf(RoutingLayer);
38
+ });
39
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=VectorLayer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VectorLayer.test.d.ts","sourceRoot":"","sources":["../../../src/ol/layers/VectorLayer.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import OLVectorLayer from 'ol/layer/Vector';
11
+ import VectorSource from 'ol/source/Vector';
12
+ import View from 'ol/View';
13
+ import Feature from 'ol/Feature';
14
+ import Point from 'ol/geom/Point';
15
+ import Map from 'ol/Map';
16
+ import VectorLayer from './VectorLayer';
17
+ const feature1 = new Feature({
18
+ attribute: 'bar',
19
+ geometry: new Point([500, 500]),
20
+ });
21
+ const olLayer = new OLVectorLayer({
22
+ source: new VectorSource({
23
+ features: [
24
+ feature1,
25
+ new Feature({
26
+ attribute: 'foo',
27
+ geometry: new Point([50, 50]),
28
+ }),
29
+ ],
30
+ }),
31
+ });
32
+ let layer;
33
+ let map;
34
+ let onClick;
35
+ describe('VectorLayer', () => {
36
+ beforeEach(() => {
37
+ onClick = jest.fn();
38
+ layer = new VectorLayer({
39
+ name: 'Layer',
40
+ olLayer,
41
+ onClick,
42
+ });
43
+ map = new Map({
44
+ view: new View({ resolution: 5 }),
45
+ target: document.body,
46
+ });
47
+ });
48
+ test('should be instanced.', () => {
49
+ expect(layer).toBeInstanceOf(VectorLayer);
50
+ expect(layer.hitTolerance).toBe(5);
51
+ });
52
+ test('should called terminate on initalization.', () => {
53
+ const spy = jest.spyOn(layer, 'detachFromMap');
54
+ layer.attachToMap();
55
+ expect(spy).toHaveBeenCalledTimes(1);
56
+ });
57
+ test('should call getFeatureInfoAtCoordinate on click then the callback', () => __awaiter(void 0, void 0, void 0, function* () {
58
+ const coordinate = [500, 500];
59
+ const px = [10, 10];
60
+ const features = [feature1];
61
+ const evt = { type: 'singleclick', map, coordinate };
62
+ const spy = jest.spyOn(layer, 'getFeatureInfoAtCoordinate');
63
+ const spy2 = jest.spyOn(map, 'getPixelFromCoordinate').mockReturnValue(px);
64
+ const spy3 = jest
65
+ .spyOn(map, 'getFeaturesAtPixel')
66
+ .mockReturnValue(features);
67
+ layer.attachToMap(map);
68
+ expect(onClick).toHaveBeenCalledTimes(0);
69
+ yield map.dispatchEvent(evt);
70
+ expect(spy).toHaveBeenCalledTimes(1);
71
+ expect(spy).toHaveBeenCalledWith(coordinate);
72
+ expect(spy2).toHaveBeenCalledTimes(1);
73
+ expect(spy2).toHaveBeenCalledWith(coordinate);
74
+ expect(spy3).toHaveBeenCalledTimes(1);
75
+ expect(spy3.mock.calls[0][0]).toBe(px);
76
+ expect(spy3.mock.calls[0][1].layerFilter(layer.olLayer)).toBe(true);
77
+ expect(spy3.mock.calls[0][1].layerFilter({})).toBe(false);
78
+ expect(onClick).toHaveBeenCalledTimes(1);
79
+ expect(onClick).toHaveBeenCalledWith(features, layer, coordinate);
80
+ }));
81
+ test('should clone', () => {
82
+ const clone = layer.clone({ name: 'clone' });
83
+ expect(clone).not.toBe(layer);
84
+ expect(clone.name).toBe('clone');
85
+ expect(clone).toBeInstanceOf(VectorLayer);
86
+ });
87
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=WMSLayer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WMSLayer.test.d.ts","sourceRoot":"","sources":["../../../src/ol/layers/WMSLayer.test.js"],"names":[],"mappings":""}