maplibre-gl
Version:
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
73 lines (64 loc) • 3.01 kB
text/typescript
import {createMap, beforeMapTest} from '../../util/test/util';
beforeEach(() => {
beforeMapTest();
global.fetch = null;
});
test('does not fire "webglcontextlost" after #remove has been called', done => {
const map = createMap();
const canvas = map.getCanvas();
map.once('webglcontextlost', () => done('"webglcontextlost" fired after #remove has been called'));
map.remove();
// Dispatch the event manually because at the time of this writing, gl does not support
// the WEBGL_lose_context extension.
canvas.dispatchEvent(new window.Event('webglcontextlost'));
done();
});
test('does not fire "webglcontextrestored" after #remove has been called', done => {
const map = createMap();
const canvas = map.getCanvas();
map.once('webglcontextlost', () => {
map.once('webglcontextrestored', () => done('"webglcontextrestored" fired after #remove has been called'));
map.remove();
canvas.dispatchEvent(new window.Event('webglcontextrestored'));
done();
});
// Dispatch the event manually because at the time of this writing, gl does not support
// the WEBGL_lose_context extension.
canvas.dispatchEvent(new window.Event('webglcontextlost'));
});
test('WebGL error while creating map', () => {
const original = HTMLCanvasElement.prototype.getContext;
HTMLCanvasElement.prototype.getContext = function (type: string) {
if (type === 'webgl2' || type === 'webgl') {
const errorEvent = new Event('webglcontextcreationerror');
(errorEvent as any).statusMessage = 'mocked webglcontextcreationerror message';
(this as HTMLCanvasElement).dispatchEvent(errorEvent);
return null;
}
};
try {
createMap();
} catch (e) {
const errorMessageObject = JSON.parse(e.message);
// this message is from map code
expect(errorMessageObject.message).toBe('Failed to initialize WebGL');
// this is from test mock
expect(errorMessageObject.statusMessage).toBe('mocked webglcontextcreationerror message');
} finally {
HTMLCanvasElement.prototype.getContext = original;
}
});
test('Hit WebGL max drawing buffer limit', () => {
// Simulate a device with MAX_TEXTURE_SIZE=16834 and max rendering area of ~32Mpx
const container = window.document.createElement('div');
Object.defineProperty(container, 'clientWidth', {value: 8000});
Object.defineProperty(container, 'clientHeight', {value: 4500});
const map = createMap({container, maxCanvasSize: [16834, 16834], pixelRatio: 1});
jest.spyOn(map.painter.context.gl, 'drawingBufferWidth', 'get').mockReturnValue(7536);
jest.spyOn(map.painter.context.gl, 'drawingBufferHeight', 'get').mockReturnValue(4239);
map.resize();
expect(map.getCanvas().width).toBe(7536);
expect(map.getCanvas().height).toBe(4239);
// Check if maxCanvasSize is updated
expect(map._maxCanvasSize).toEqual([7536, 4239]);
});