From a2cf5b0889a88cc1a3ca0cc5f1efeeb51d308d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Mon, 10 Nov 2014 11:01:59 +0100 Subject: [PATCH] Add unit tests for WebGL image replay --- src/ol/render/webgl/webglreplay.js | 1 + test/spec/ol/render/webglreplay.test.js | 158 ++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 test/spec/ol/render/webglreplay.test.js diff --git a/src/ol/render/webgl/webglreplay.js b/src/ol/render/webgl/webglreplay.js index 586980ee04..3c44b591cc 100644 --- a/src/ol/render/webgl/webglreplay.js +++ b/src/ol/render/webgl/webglreplay.js @@ -1,3 +1,4 @@ +goog.provide('ol.render.webgl.ImageReplay'); goog.provide('ol.render.webgl.ReplayGroup'); goog.require('goog.array'); diff --git a/test/spec/ol/render/webglreplay.test.js b/test/spec/ol/render/webglreplay.test.js new file mode 100644 index 0000000000..8e600186e7 --- /dev/null +++ b/test/spec/ol/render/webglreplay.test.js @@ -0,0 +1,158 @@ +goog.provide('ol.test.render.webgl.Replay'); + +describe('ol.render.webgl.ImageReplay', function() { + var replay; + + var createImageStyle = function(image) { + var imageStyle = new ol.style.Image({ + opacity: 0.1, + rotateWithView: true, + rotation: 1.5, + scale: 2.0 + }); + imageStyle.getAnchor = function() { + return [0.5, 1]; + }; + imageStyle.getImage = function() { + return image; + }; + imageStyle.getImageSize = function() { + return [512, 512]; + }; + imageStyle.getOrigin = function() { + return [200, 200]; + }; + imageStyle.getSize = function() { + return [256, 256]; + }; + return imageStyle; + }; + + beforeEach(function() { + var tolerance = 0.1; + var maxExtent = [-10000, -20000, 10000, 20000]; + replay = new ol.render.webgl.ImageReplay(tolerance, maxExtent); + }); + + describe('#setImageStyle', function() { + + var imageStyle1, imageStyle2; + + beforeEach(function() { + imageStyle1 = createImageStyle(new Image()); + imageStyle2 = createImageStyle(new Image()); + }); + + it('set expected states', function() { + replay.setImageStyle(imageStyle1); + expect(replay.anchorX_).to.be(0.5); + expect(replay.anchorY_).to.be(1); + expect(replay.height_).to.be(256); + expect(replay.imageHeight_).to.be(512); + expect(replay.imageWidth_).to.be(512); + expect(replay.opacity_).to.be(0.1); + expect(replay.originX_).to.be(200); + expect(replay.originY_).to.be(200); + expect(replay.rotation_).to.be(1.5); + expect(replay.rotateWithView_).to.be(true); + expect(replay.scale_).to.be(2.0); + expect(replay.width_).to.be(256); + expect(replay.images_).to.have.length(1); + expect(replay.groupIndices_).to.have.length(0); + + replay.setImageStyle(imageStyle1); + expect(replay.images_).to.have.length(1); + expect(replay.groupIndices_).to.have.length(0); + + replay.setImageStyle(imageStyle2); + expect(replay.images_).to.have.length(2); + expect(replay.groupIndices_).to.have.length(1); + }); + }); + + describe('#drawPointGeometry', function() { + beforeEach(function() { + var imageStyle = createImageStyle(new Image()); + replay.setImageStyle(imageStyle); + }); + + it('sets the buffer data', function() { + var point; + + point = new ol.geom.Point([1000, 2000]); + replay.drawPointGeometry(point, null); + expect(replay.vertices_).to.have.length(32); + expect(replay.indices_).to.have.length(6); + expect(replay.indices_[0]).to.be(0); + expect(replay.indices_[1]).to.be(1); + expect(replay.indices_[2]).to.be(2); + expect(replay.indices_[3]).to.be(0); + expect(replay.indices_[4]).to.be(2); + expect(replay.indices_[5]).to.be(3); + + point = new ol.geom.Point([2000, 3000]); + replay.drawPointGeometry(point, null); + expect(replay.vertices_).to.have.length(64); + expect(replay.indices_).to.have.length(12); + expect(replay.indices_[6]).to.be(4); + expect(replay.indices_[7]).to.be(5); + expect(replay.indices_[8]).to.be(6); + expect(replay.indices_[9]).to.be(4); + expect(replay.indices_[10]).to.be(6); + expect(replay.indices_[11]).to.be(7); + }); + }); + + describe('#drawMultiPointGeometry', function() { + beforeEach(function() { + var imageStyle = createImageStyle(new Image()); + replay.setImageStyle(imageStyle); + }); + + it('sets the buffer data', function() { + var multiPoint; + + multiPoint = new ol.geom.MultiPoint( + [[1000, 2000], [2000, 3000]]); + replay.drawMultiPointGeometry(multiPoint, null); + expect(replay.vertices_).to.have.length(64); + expect(replay.indices_).to.have.length(12); + expect(replay.indices_[0]).to.be(0); + expect(replay.indices_[1]).to.be(1); + expect(replay.indices_[2]).to.be(2); + expect(replay.indices_[3]).to.be(0); + expect(replay.indices_[4]).to.be(2); + expect(replay.indices_[5]).to.be(3); + expect(replay.indices_[6]).to.be(4); + expect(replay.indices_[7]).to.be(5); + expect(replay.indices_[8]).to.be(6); + expect(replay.indices_[9]).to.be(4); + expect(replay.indices_[10]).to.be(6); + expect(replay.indices_[11]).to.be(7); + + multiPoint = new ol.geom.MultiPoint( + [[3000, 4000], [4000, 5000]]); + replay.drawMultiPointGeometry(multiPoint, null); + expect(replay.vertices_).to.have.length(128); + expect(replay.indices_).to.have.length(24); + expect(replay.indices_[12]).to.be(8); + expect(replay.indices_[13]).to.be(9); + expect(replay.indices_[14]).to.be(10); + expect(replay.indices_[15]).to.be(8); + expect(replay.indices_[16]).to.be(10); + expect(replay.indices_[17]).to.be(11); + expect(replay.indices_[18]).to.be(12); + expect(replay.indices_[19]).to.be(13); + expect(replay.indices_[20]).to.be(14); + expect(replay.indices_[21]).to.be(12); + expect(replay.indices_[22]).to.be(14); + expect(replay.indices_[23]).to.be(15); + }); + }); +}); + +goog.require('ol.extent'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.Point'); +goog.require('ol.render.webgl.ImageReplay'); +goog.require('ol.style.Image');