Add missing dispose calls for webgl renderer tests
This commit is contained in:
@@ -469,6 +469,7 @@ describe('ol/Map', function () {
|
|||||||
document.body.removeChild(map.getTargetElement());
|
document.body.removeChild(map.getTargetElement());
|
||||||
map.setTarget(null);
|
map.setTarget(null);
|
||||||
map.dispose();
|
map.dispose();
|
||||||
|
map.getLayers().forEach((layer) => layer.dispose());
|
||||||
});
|
});
|
||||||
|
|
||||||
it('triggers when all tiles and sources are loaded and faded in', function (done) {
|
it('triggers when all tiles and sources are loaded and faded in', function (done) {
|
||||||
|
|||||||
@@ -6,35 +6,41 @@ import VectorSource from '../../../../../src/ol/source/Vector.js';
|
|||||||
import View from '../../../../../src/ol/View.js';
|
import View from '../../../../../src/ol/View.js';
|
||||||
|
|
||||||
describe('ol/layer/Heatmap', function () {
|
describe('ol/layer/Heatmap', function () {
|
||||||
|
/** @type {HTMLDivElement} */
|
||||||
|
let target;
|
||||||
|
/** @type {Map} */
|
||||||
|
let map;
|
||||||
|
/** @type {HeatmapLayer} */
|
||||||
|
let layer;
|
||||||
|
beforeEach(() => {
|
||||||
|
target = document.createElement('div');
|
||||||
|
target.style.width = '300px';
|
||||||
|
target.style.height = '300px';
|
||||||
|
document.body.appendChild(target);
|
||||||
|
|
||||||
|
map = new Map({
|
||||||
|
view: new View({
|
||||||
|
center: [0, 0],
|
||||||
|
resolution: 0.1,
|
||||||
|
}),
|
||||||
|
target: target,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
map.dispose();
|
||||||
|
document.body.removeChild(target);
|
||||||
|
layer.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
describe('constructor', function () {
|
describe('constructor', function () {
|
||||||
let target, map;
|
|
||||||
beforeEach(() => {
|
|
||||||
target = document.createElement('div');
|
|
||||||
target.style.width = '300px';
|
|
||||||
target.style.height = '300px';
|
|
||||||
document.body.appendChild(target);
|
|
||||||
|
|
||||||
map = new Map({
|
|
||||||
view: new View({
|
|
||||||
center: [0, 0],
|
|
||||||
resolution: 0.1,
|
|
||||||
}),
|
|
||||||
target: target,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
map.dispose();
|
|
||||||
document.body.removeChild(target);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can be constructed without arguments', function () {
|
it('can be constructed without arguments', function () {
|
||||||
const instance = new HeatmapLayer();
|
layer = new HeatmapLayer();
|
||||||
expect(instance).to.be.an(HeatmapLayer);
|
expect(layer).to.be.an(HeatmapLayer);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('has a default className', function () {
|
it('has a default className', function () {
|
||||||
const layer = new HeatmapLayer({
|
layer = new HeatmapLayer({
|
||||||
source: new VectorSource(),
|
source: new VectorSource(),
|
||||||
});
|
});
|
||||||
map.addLayer(layer);
|
map.addLayer(layer);
|
||||||
@@ -45,7 +51,7 @@ describe('ol/layer/Heatmap', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('accepts a custom className', function () {
|
it('accepts a custom className', function () {
|
||||||
const layer = new HeatmapLayer({
|
layer = new HeatmapLayer({
|
||||||
source: new VectorSource(),
|
source: new VectorSource(),
|
||||||
className: 'a-class-name',
|
className: 'a-class-name',
|
||||||
});
|
});
|
||||||
@@ -59,11 +65,6 @@ describe('ol/layer/Heatmap', function () {
|
|||||||
|
|
||||||
describe('hit detection', function () {
|
describe('hit detection', function () {
|
||||||
it('hit detects two distinct features', function (done) {
|
it('hit detects two distinct features', function (done) {
|
||||||
const target = document.createElement('div');
|
|
||||||
target.style.width = '300px';
|
|
||||||
target.style.height = '300px';
|
|
||||||
document.body.appendChild(target);
|
|
||||||
|
|
||||||
const feature = new Feature({
|
const feature = new Feature({
|
||||||
geometry: new Point([0, 0]),
|
geometry: new Point([0, 0]),
|
||||||
id: 1,
|
id: 1,
|
||||||
@@ -78,19 +79,12 @@ describe('ol/layer/Heatmap', function () {
|
|||||||
const source = new VectorSource({
|
const source = new VectorSource({
|
||||||
features: [feature, feature2],
|
features: [feature, feature2],
|
||||||
});
|
});
|
||||||
const layer = new HeatmapLayer({
|
layer = new HeatmapLayer({
|
||||||
source: source,
|
source: source,
|
||||||
blur: 10,
|
blur: 10,
|
||||||
radius: 10,
|
radius: 10,
|
||||||
});
|
});
|
||||||
const map = new Map({
|
map.addLayer(layer);
|
||||||
layers: [layer],
|
|
||||||
view: new View({
|
|
||||||
center: [0, 0],
|
|
||||||
resolution: 0.1,
|
|
||||||
}),
|
|
||||||
target: target,
|
|
||||||
});
|
|
||||||
map.render();
|
map.render();
|
||||||
|
|
||||||
function hitTest(coordinate) {
|
function hitTest(coordinate) {
|
||||||
@@ -118,7 +112,6 @@ describe('ol/layer/Heatmap', function () {
|
|||||||
res = hitTest([0, 14]);
|
res = hitTest([0, 14]);
|
||||||
expect(res).to.be(null);
|
expect(res).to.be(null);
|
||||||
|
|
||||||
document.body.removeChild(target);
|
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ describe('ol/layer/WebGLTile', function () {
|
|||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
map.setTarget(null);
|
map.setTarget(null);
|
||||||
document.body.removeChild(target);
|
document.body.removeChild(target);
|
||||||
|
map.getLayers().forEach((layer) => layer.dispose());
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('dispose()', () => {
|
describe('dispose()', () => {
|
||||||
@@ -63,7 +64,7 @@ describe('ol/layer/WebGLTile', function () {
|
|||||||
|
|
||||||
it('creates fragment and vertex shaders', function () {
|
it('creates fragment and vertex shaders', function () {
|
||||||
const compileShaderSpy = sinon.spy(WebGLHelper.prototype, 'compileShader');
|
const compileShaderSpy = sinon.spy(WebGLHelper.prototype, 'compileShader');
|
||||||
const renderer = layer.createRenderer();
|
const renderer = layer.getRenderer();
|
||||||
const viewState = map.getView().getState();
|
const viewState = map.getView().getState();
|
||||||
const size = map.getSize();
|
const size = map.getSize();
|
||||||
const frameState = {
|
const frameState = {
|
||||||
@@ -164,7 +165,7 @@ describe('ol/layer/WebGLTile', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const compileShaderSpy = sinon.spy(WebGLHelper.prototype, 'compileShader');
|
const compileShaderSpy = sinon.spy(WebGLHelper.prototype, 'compileShader');
|
||||||
const renderer = layer.createRenderer();
|
const renderer = layer.getRenderer();
|
||||||
const viewState = map.getView().getState();
|
const viewState = map.getView().getState();
|
||||||
const size = map.getSize();
|
const size = map.getSize();
|
||||||
const frameState = {
|
const frameState = {
|
||||||
@@ -259,7 +260,7 @@ describe('ol/layer/WebGLTile', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('can be called before the layer is rendered', function () {
|
it('can be called before the layer is rendered', function () {
|
||||||
const layer = new WebGLTileLayer({
|
layer = new WebGLTileLayer({
|
||||||
style: {
|
style: {
|
||||||
variables: {
|
variables: {
|
||||||
foo: 'bar',
|
foo: 'bar',
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ describe('ol/renderer/webgl/PointsLayer', function () {
|
|||||||
fragmentShader: simpleFragmentShader,
|
fragmentShader: simpleFragmentShader,
|
||||||
});
|
});
|
||||||
expect(renderer).to.be.a(WebGLPointsLayerRenderer);
|
expect(renderer).to.be.a(WebGLPointsLayerRenderer);
|
||||||
|
renderer.dispose();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -127,6 +128,10 @@ describe('ol/renderer/webgl/PointsLayer', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
renderer.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
it('calls WebGlHelper#prepareDraw', function () {
|
it('calls WebGlHelper#prepareDraw', function () {
|
||||||
renderer.prepareFrame(frameState);
|
renderer.prepareFrame(frameState);
|
||||||
|
|
||||||
@@ -320,6 +325,10 @@ describe('ol/renderer/webgl/PointsLayer', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
renderer.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
it('correctly hit detects a feature', function (done) {
|
it('correctly hit detects a feature', function (done) {
|
||||||
const transform = composeTransform(
|
const transform = composeTransform(
|
||||||
createTransform(),
|
createTransform(),
|
||||||
@@ -456,7 +465,7 @@ describe('ol/renderer/webgl/PointsLayer', function () {
|
|||||||
|
|
||||||
const spyHelper = sinon.spy(renderer.helper, 'disposeInternal');
|
const spyHelper = sinon.spy(renderer.helper, 'disposeInternal');
|
||||||
const spyWorker = sinon.spy(renderer.worker_, 'terminate');
|
const spyWorker = sinon.spy(renderer.worker_, 'terminate');
|
||||||
renderer.disposeInternal();
|
renderer.dispose();
|
||||||
expect(spyHelper.called).to.be(true);
|
expect(spyHelper.called).to.be(true);
|
||||||
expect(spyWorker.called).to.be(true);
|
expect(spyWorker.called).to.be(true);
|
||||||
});
|
});
|
||||||
@@ -672,6 +681,10 @@ describe('ol/renderer/webgl/PointsLayer', function () {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
renderer.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
it('fires prerender and postrender events', function (done) {
|
it('fires prerender and postrender events', function (done) {
|
||||||
let prerenderNotified = false;
|
let prerenderNotified = false;
|
||||||
let postrenderNotified = false;
|
let postrenderNotified = false;
|
||||||
@@ -720,6 +733,7 @@ describe('ol/renderer/webgl/PointsLayer', function () {
|
|||||||
|
|
||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
disposeMap(map);
|
disposeMap(map);
|
||||||
|
layer.dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('is completely rendered on rendercomplete', function (done) {
|
it('is completely rendered on rendercomplete', function (done) {
|
||||||
@@ -808,6 +822,7 @@ describe('ol/renderer/webgl/PointsLayer', function () {
|
|||||||
});
|
});
|
||||||
afterEach(function () {
|
afterEach(function () {
|
||||||
disposeMap(map);
|
disposeMap(map);
|
||||||
|
layer.dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('allows changing variables', function (done) {
|
it('allows changing variables', function (done) {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ describe('ol/renderer/webgl/TileLayer', function () {
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
renderer = tileLayer.createRenderer();
|
renderer = tileLayer.getRenderer();
|
||||||
|
|
||||||
const proj = get('EPSG:3857');
|
const proj = get('EPSG:3857');
|
||||||
frameState = {
|
frameState = {
|
||||||
@@ -55,6 +55,10 @@ describe('ol/renderer/webgl/TileLayer', function () {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
tileLayer.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
it('maintains a cache on the renderer instead of the source', function () {
|
it('maintains a cache on the renderer instead of the source', function () {
|
||||||
expect(tileLayer.getSource().tileCache.highWaterMark).to.be(0.1);
|
expect(tileLayer.getSource().tileCache.highWaterMark).to.be(0.1);
|
||||||
expect(renderer.tileTextureCache_.highWaterMark).to.be(512);
|
expect(renderer.tileTextureCache_.highWaterMark).to.be(512);
|
||||||
|
|||||||
@@ -13,39 +13,39 @@ import {getUid} from '../../../../../src/ol/util.js';
|
|||||||
|
|
||||||
const VERTEX_SHADER = `
|
const VERTEX_SHADER = `
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
uniform mat4 u_offsetScaleMatrix;
|
uniform mat4 u_offsetScaleMatrix;
|
||||||
uniform mat4 u_offsetRotateMatrix;
|
uniform mat4 u_offsetRotateMatrix;
|
||||||
uniform float u_time;
|
uniform float u_time;
|
||||||
uniform float u_zoom;
|
uniform float u_zoom;
|
||||||
uniform float u_resolution;
|
uniform float u_resolution;
|
||||||
|
|
||||||
attribute float a_test;
|
attribute float a_test;
|
||||||
uniform float u_test;
|
uniform float u_test;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
gl_Position = vec4(u_test, a_test, 0.0, 1.0);
|
gl_Position = vec4(u_test, a_test, 0.0, 1.0);
|
||||||
}`;
|
}`;
|
||||||
|
|
||||||
const INVALID_VERTEX_SHADER = `
|
const INVALID_VERTEX_SHADER = `
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
uniform mat4 u_offsetScaleMatrix;
|
uniform mat4 u_offsetScaleMatrix;
|
||||||
uniform mat4 u_offsetRotateMatrix;
|
uniform mat4 u_offsetRotateMatrix;
|
||||||
uniform float u_time;
|
uniform float u_time;
|
||||||
uniform float u_zoom;
|
uniform float u_zoom;
|
||||||
uniform float u_resolution;
|
uniform float u_resolution;
|
||||||
|
|
||||||
bla
|
bla
|
||||||
uniform float u_test;
|
uniform float u_test;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
gl_Position = vec4(u_test, a_test, 0.0, 1.0);
|
gl_Position = vec4(u_test, a_test, 0.0, 1.0);
|
||||||
}`;
|
}`;
|
||||||
|
|
||||||
const FRAGMENT_SHADER = `
|
const FRAGMENT_SHADER = `
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
||||||
}`;
|
}`;
|
||||||
@@ -58,9 +58,13 @@ const INVALID_FRAGMENT_SHADER = `
|
|||||||
}`;
|
}`;
|
||||||
|
|
||||||
describe('ol/webgl/WebGLHelper', function () {
|
describe('ol/webgl/WebGLHelper', function () {
|
||||||
|
let h;
|
||||||
|
afterEach(function () {
|
||||||
|
h.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
describe('constructor', function () {
|
describe('constructor', function () {
|
||||||
describe('without an argument', function () {
|
describe('without an argument', function () {
|
||||||
let h;
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
h = new WebGLHelper();
|
h = new WebGLHelper();
|
||||||
});
|
});
|
||||||
@@ -76,7 +80,6 @@ describe('ol/webgl/WebGLHelper', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('with post process passes', function () {
|
describe('with post process passes', function () {
|
||||||
let h;
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
h = new WebGLHelper({
|
h = new WebGLHelper({
|
||||||
postProcesses: [
|
postProcesses: [
|
||||||
@@ -105,7 +108,6 @@ describe('ol/webgl/WebGLHelper', function () {
|
|||||||
|
|
||||||
describe('operations', function () {
|
describe('operations', function () {
|
||||||
describe('prepare draw', function () {
|
describe('prepare draw', function () {
|
||||||
let h;
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
h = new WebGLHelper({
|
h = new WebGLHelper({
|
||||||
uniforms: {
|
uniforms: {
|
||||||
@@ -157,7 +159,6 @@ describe('ol/webgl/WebGLHelper', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('valid shader compiling', function () {
|
describe('valid shader compiling', function () {
|
||||||
let h;
|
|
||||||
let p;
|
let p;
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
h = new WebGLHelper();
|
h = new WebGLHelper();
|
||||||
@@ -189,18 +190,18 @@ describe('ol/webgl/WebGLHelper', function () {
|
|||||||
|
|
||||||
describe('invalid shader compiling', function () {
|
describe('invalid shader compiling', function () {
|
||||||
it('throws for an invalid vertex shader', function () {
|
it('throws for an invalid vertex shader', function () {
|
||||||
const helper = new WebGLHelper();
|
h = new WebGLHelper();
|
||||||
expect(() =>
|
expect(() =>
|
||||||
helper.getProgram(FRAGMENT_SHADER, INVALID_VERTEX_SHADER)
|
h.getProgram(FRAGMENT_SHADER, INVALID_VERTEX_SHADER)
|
||||||
).to.throwException(
|
).to.throwException(
|
||||||
/Vertex shader compilation failed: ERROR: 0:10: 'bla' : syntax error/
|
/Vertex shader compilation failed: ERROR: 0:10: 'bla' : syntax error/
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('throws for an invalid fragment shader', function () {
|
it('throws for an invalid fragment shader', function () {
|
||||||
const helper = new WebGLHelper();
|
h = new WebGLHelper();
|
||||||
expect(() =>
|
expect(() =>
|
||||||
helper.getProgram(INVALID_FRAGMENT_SHADER, VERTEX_SHADER)
|
h.getProgram(INVALID_FRAGMENT_SHADER, VERTEX_SHADER)
|
||||||
).to.throwException(
|
).to.throwException(
|
||||||
/Fragment shader compliation failed: ERROR: 0:5: 'oops' : undeclared identifier/
|
/Fragment shader compliation failed: ERROR: 0:5: 'oops' : undeclared identifier/
|
||||||
);
|
);
|
||||||
@@ -208,7 +209,6 @@ describe('ol/webgl/WebGLHelper', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('#makeProjectionTransform', function () {
|
describe('#makeProjectionTransform', function () {
|
||||||
let h;
|
|
||||||
let frameState;
|
let frameState;
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
h = new WebGLHelper();
|
h = new WebGLHelper();
|
||||||
@@ -246,20 +246,19 @@ describe('ol/webgl/WebGLHelper', function () {
|
|||||||
|
|
||||||
describe('deleteBuffer()', function () {
|
describe('deleteBuffer()', function () {
|
||||||
it('can be called to free up buffer resources', function () {
|
it('can be called to free up buffer resources', function () {
|
||||||
const helper = new WebGLHelper();
|
h = new WebGLHelper();
|
||||||
const buffer = new WebGLArrayBuffer(ARRAY_BUFFER, STATIC_DRAW);
|
const buffer = new WebGLArrayBuffer(ARRAY_BUFFER, STATIC_DRAW);
|
||||||
buffer.fromArray([0, 1, 2, 3]);
|
buffer.fromArray([0, 1, 2, 3]);
|
||||||
helper.flushBufferData(buffer);
|
h.flushBufferData(buffer);
|
||||||
const bufferKey = getUid(buffer);
|
const bufferKey = getUid(buffer);
|
||||||
expect(helper.bufferCache_).to.have.property(bufferKey);
|
expect(h.bufferCache_).to.have.property(bufferKey);
|
||||||
|
|
||||||
helper.deleteBuffer(buffer);
|
h.deleteBuffer(buffer);
|
||||||
expect(helper.bufferCache_).to.not.have.property(bufferKey);
|
expect(h.bufferCache_).to.not.have.property(bufferKey);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#createTexture', function () {
|
describe('#createTexture', function () {
|
||||||
let h;
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
h = new WebGLHelper();
|
h = new WebGLHelper();
|
||||||
});
|
});
|
||||||
@@ -342,7 +341,7 @@ describe('ol/webgl/WebGLHelper', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('#enableAttributes', function () {
|
describe('#enableAttributes', function () {
|
||||||
let baseAttrs, h;
|
let baseAttrs;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
h = new WebGLHelper();
|
h = new WebGLHelper();
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ describe('ol.webgl.RenderTarget', function () {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(function () {
|
||||||
|
helper.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
describe('constructor', function () {
|
describe('constructor', function () {
|
||||||
it('creates a target of size 1x1', function () {
|
it('creates a target of size 1x1', function () {
|
||||||
const rt = new WebGLRenderTarget(helper);
|
const rt = new WebGLRenderTarget(helper);
|
||||||
|
|||||||
Reference in New Issue
Block a user