import MapboxVectorLayer, { getMapboxPath, normalizeSourceUrl, normalizeSpriteUrl, normalizeStyleUrl, } from '../../../../../src/ol/layer/MapboxVector.js'; describe('ol/layer/MapboxVector', () => { describe('getMapboxPath()', () => { const cases = [ { url: 'mapbox://path/to/resource', expected: 'path/to/resource', }, { url: 'mapbox://path/to/resource?query', expected: 'path/to/resource?query', }, { url: 'https://example.com/resource', expected: '', }, ]; for (const c of cases) { it(`works for ${c.url}`, () => { expect(getMapboxPath(c.url)).to.be(c.expected); }); } }); describe('normalizeStyleUrl()', () => { const cases = [ { url: 'mapbox://styles/mapbox/bright-v9', expected: 'https://api.mapbox.com/styles/v1/mapbox/bright-v9?&access_token=test-token', }, { url: 'https://example.com/style', expected: 'https://example.com/style', }, ]; const token = 'test-token'; for (const c of cases) { it(`works for ${c.url}`, () => { expect(normalizeStyleUrl(c.url, token)).to.be(c.expected); }); } }); describe('normalizeSpriteUrl()', () => { const cases = [ { url: 'mapbox://sprites/mapbox/bright-v9', expected: 'https://api.mapbox.com/styles/v1/mapbox/bright-v9/sprite?access_token=test-token', }, { url: 'https://example.com/sprite', expected: 'https://example.com/sprite', }, ]; const token = 'test-token'; for (const c of cases) { it(`works for ${c.url}`, () => { expect(normalizeSpriteUrl(c.url, token)).to.be(c.expected); }); } }); describe('normalizeSourceUrl()', () => { const cases = [ { url: 'mapbox://mapbox.mapbox-streets-v7', expected: 'https://{a-d}.tiles.mapbox.com/v4/mapbox.mapbox-streets-v7/{z}/{x}/{y}.vector.pbf?access_token=test-token', }, { url: 'https://example.com/source/{z}/{x}/{y}.pbf', expected: 'https://example.com/source/{z}/{x}/{y}.pbf?token=test-token', }, { url: 'https://example.com/source/{z}/{x}/{y}.pbf?foo=bar', expected: 'https://example.com/source/{z}/{x}/{y}.pbf?foo=bar&token=test-token', }, ]; const token = 'test-token'; const tokenParam = 'token'; for (const c of cases) { it(`works for ${c.url}`, () => { expect(normalizeSourceUrl(c.url, token, tokenParam)).to.be(c.expected); }); } }); describe('TileJSON', function () { it('lets ol-mapbox-style handle TileJSON URLs', function (done) { const layer = new MapboxVectorLayer({ styleUrl: 'data:,' + encodeURIComponent( JSON.stringify({ version: 8, sources: { 'foo': { url: '/spec/ol/data/tilejson.json', type: 'vector', }, }, }) ), }); layer.on('change:source', function () { // we only get here when a new source was set, which is what ol-mapbox-style's // setupVectorSource() does. done(); }); }); }); describe('Access token', function () { it('applies correct access token from access_token', function () { const layer = new MapboxVectorLayer({ styleUrl: 'mapbox://styles/mapbox/streets-v7', accessToken: '123', }); expect(layer.accessToken).to.be('123'); expect(layer.accessTokenParam_).to.be(undefined); }); it('applies correct access token from url', function () { const layer = new MapboxVectorLayer({ styleUrl: '?key=123', }); expect(layer.accessToken).to.be('123'); expect(layer.accessTokenParam_).to.be('key'); }); }); });