maplibre-gl
Version:
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
43 lines (33 loc) • 1.87 kB
text/typescript
import {describe, test, expect, vi} from 'vitest';
import {Dispatcher} from '../util/dispatcher';
import {type SourceClass, addSourceType, create} from './source';
describe('addSourceType', () => {
test('adds factory function without a worker url does not dispatch to worker', async () => {
const sourceType = vi.fn().mockImplementation(function (id) { this.id = id; }) as SourceClass;
// expect no call to load worker source
const spy = vi.spyOn(Dispatcher.prototype, 'broadcast');
await addSourceType('foo', sourceType);
expect(spy).not.toHaveBeenCalled();
create('id', {type: 'foo'} as any, null, null);
expect(sourceType).toHaveBeenCalled();
});
test('create a custom source without an id throws', async () => {
const sourceType = vi.fn() as SourceClass;
// expect no call to load worker source
const spy = vi.spyOn(Dispatcher.prototype, 'broadcast');
await addSourceType('foo2', sourceType);
expect(spy).not.toHaveBeenCalled();
expect(() => create('id', {type: 'foo2'} as any, null, null)).toThrow();
expect(sourceType).toHaveBeenCalled();
});
test('refuses to add new type over existing name', async () => {
const sourceType = function () {} as any as SourceClass;
await expect(addSourceType('canvas', sourceType)).rejects.toThrow();
await expect(addSourceType('geojson', sourceType)).rejects.toThrow();
await expect(addSourceType('image', sourceType)).rejects.toThrow();
await expect(addSourceType('raster', sourceType)).rejects.toThrow();
await expect(addSourceType('raster-dem', sourceType)).rejects.toThrow();
await expect(addSourceType('vector', sourceType)).rejects.toThrow();
await expect(addSourceType('video', sourceType)).rejects.toThrow();
});
});