From 7808a8cb9a624c87d4b14e2fbd814fd7082ac6d5 Mon Sep 17 00:00:00 2001 From: "Langbein, Michael" Date: Sun, 30 Aug 2020 13:19:34 +0200 Subject: [PATCH] Implement unit-tests for WebGLLayerRenderer's new preRender and postRender methods. The test only checks if the event is fired. It does not check for the properties of the RenderEvent object. --- .../ol/renderer/webgl/pointslayer.test.js | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/test/spec/ol/renderer/webgl/pointslayer.test.js b/test/spec/ol/renderer/webgl/pointslayer.test.js index c6299098ea..9546c30ffb 100644 --- a/test/spec/ol/renderer/webgl/pointslayer.test.js +++ b/test/spec/ol/renderer/webgl/pointslayer.test.js @@ -1,4 +1,5 @@ import Feature from '../../../../../src/ol/Feature.js'; +import GeoJSON from '../../../../../src/ol/format/GeoJSON.js'; import Point from '../../../../../src/ol/geom/Point.js'; import VectorLayer from '../../../../../src/ol/layer/Vector.js'; import VectorSource from '../../../../../src/ol/source/Vector.js'; @@ -592,4 +593,81 @@ describe('ol.renderer.webgl.PointsLayer', function () { ); }); }); + + describe('fires events', () => { + let layer, source, renderer, frameState; + + beforeEach(function () { + source = new VectorSource({ + features: new GeoJSON().readFeatures({ + 'type': 'FeatureCollection', + 'features': [ + { + 'type': 'Feature', + 'properties': {}, + 'geometry': { + 'type': 'Point', + 'coordinates': [13, 52], + }, + }, + ], + }), + }); + + layer = new VectorLayer({ + source, + }); + + renderer = new WebGLPointsLayerRenderer(layer, { + vertexShader: simpleVertexShader, + fragmentShader: simpleFragmentShader, + }); + + frameState = { + viewHints: [], + viewState: { + projection: getProjection('EPSG:4326'), + resolution: 0.010986328125, + rotation: 0, + center: [15, 52], + zoom: 7, + }, + extent: [ + 11.1932373046875, + 46.429931640625, + 18.8067626953125, + 57.570068359375, + ], + size: [693, 1014], + layerIndex: 0, + layerStatesArray: [ + { + layer: layer, + opacity: 1, + visible: true, + zIndex: 0, + }, + ], + }; + }); + + it('fires prerender and postrender events', function (done) { + let prerenderNotified = false; + let postrenderNotified = false; + + layer.once('prerender', (evt) => { + prerenderNotified = true; + }); + + layer.once('postrender', (evt) => { + postrenderNotified = true; + expect(prerenderNotified).to.be(true); + expect(postrenderNotified).to.be(true); + done(); + }); + + renderer.prepareFrame(frameState); + renderer.renderFrame(frameState); + }); + }); });