UNPKG

openlayers

Version:

Build tools and sources for developing OpenLayers based mapping applications

306 lines (237 loc) 7.23 kB
goog.provide('ol.test.source.RasterSource'); goog.require('ol.Map'); goog.require('ol.View'); goog.require('ol.layer.Image'); goog.require('ol.proj.Projection'); goog.require('ol.source.ImageStatic'); goog.require('ol.source.Raster'); goog.require('ol.source.Source'); goog.require('ol.source.Tile'); var red = 'data:image/gif;base64,R0lGODlhAQABAPAAAP8AAP///yH5BAAAAAAALAAAAAA' + 'BAAEAAAICRAEAOw=='; var green = 'data:image/gif;base64,R0lGODlhAQABAPAAAAD/AP///yH5BAAAAAAALAAAA' + 'AABAAEAAAICRAEAOw=='; var blue = 'data:image/gif;base64,R0lGODlhAQABAPAAAAAA/////yH5BAAAAAAALAAAAA' + 'ABAAEAAAICRAEAOw=='; where('Uint8ClampedArray').describe('ol.source.Raster', function() { var target, map, redSource, greenSource, blueSource, raster; beforeEach(function() { target = document.createElement('div'); var style = target.style; style.position = 'absolute'; style.left = '-1000px'; style.top = '-1000px'; style.width = '2px'; style.height = '2px'; document.body.appendChild(target); var extent = [-1, -1, 1, 1]; redSource = new ol.source.ImageStatic({ url: red, imageExtent: extent }); greenSource = new ol.source.ImageStatic({ url: green, imageExtent: extent }); blueSource = new ol.source.ImageStatic({ url: blue, imageExtent: extent }); raster = new ol.source.Raster({ threads: 0, sources: [redSource, greenSource, blueSource], operation: function(inputs) { return inputs[0]; } }); map = new ol.Map({ target: target, view: new ol.View({ resolutions: [1], projection: new ol.proj.Projection({ code: 'image', units: 'pixels', extent: extent }) }), layers: [ new ol.layer.Image({ source: raster }) ] }); }); afterEach(function() { map.setTarget(null); map.dispose(); raster.dispose(); greenSource.dispose(); redSource.dispose(); blueSource.dispose(); document.body.removeChild(target); }); describe('constructor', function() { it('returns a tile source', function() { var source = new ol.source.Raster({ threads: 0, sources: [new ol.source.Tile({})] }); expect(source).to.be.a(ol.source.Source); expect(source).to.be.a(ol.source.Raster); }); it('defaults to "pixel" operation', function(done) { var log = []; var source = new ol.source.Raster({ threads: 0, sources: [redSource, greenSource, blueSource], operation: function(inputs) { log.push(inputs); return inputs[0]; } }); source.once('afteroperations', function() { expect(log.length).to.equal(4); var inputs = log[0]; var pixel = inputs[0]; expect(pixel).to.be.an('array'); done(); }); map.getLayers().item(0).setSource(source); var view = map.getView(); view.setCenter([0, 0]); view.setZoom(0); }); it('allows operation type to be set to "image"', function(done) { var log = []; var source = new ol.source.Raster({ operationType: 'image', threads: 0, sources: [redSource, greenSource, blueSource], operation: function(inputs) { log.push(inputs); return inputs[0]; } }); source.once('afteroperations', function() { expect(log.length).to.equal(1); var inputs = log[0]; var imageData = inputs[0]; expect(imageData.data).to.be.a(Uint8ClampedArray); expect(imageData.width).to.be(2); expect(imageData.height).to.be(2); done(); }); map.getLayers().item(0).setSource(source); var view = map.getView(); view.setCenter([0, 0]); view.setZoom(0); }); }); describe('#setOperation()', function() { it('allows operation to be set', function(done) { var count = 0; raster.setOperation(function(pixels) { ++count; var redPixel = pixels[0]; var greenPixel = pixels[1]; var bluePixel = pixels[2]; expect(redPixel).to.eql([255, 0, 0, 255]); expect(greenPixel).to.eql([0, 255, 0, 255]); expect(bluePixel).to.eql([0, 0, 255, 255]); return pixels[0]; }); var view = map.getView(); view.setCenter([0, 0]); view.setZoom(0); raster.once('afteroperations', function(event) { expect(count).to.equal(4); done(); }); }); it('updates and re-runs the operation', function(done) { var view = map.getView(); view.setCenter([0, 0]); view.setZoom(0); var count = 0; raster.on('afteroperations', function(event) { ++count; if (count === 1) { raster.setOperation(function(inputs) { return inputs[0]; }); } else { done(); } }); }); }); describe('beforeoperations', function() { it('gets called before operations are run', function(done) { var count = 0; raster.setOperation(function(inputs) { ++count; return inputs[0]; }); raster.once('beforeoperations', function(event) { expect(count).to.equal(0); expect(!!event).to.be(true); expect(event.extent).to.be.an('array'); expect(event.resolution).to.be.a('number'); expect(event.data).to.be.an('object'); done(); }); var view = map.getView(); view.setCenter([0, 0]); view.setZoom(0); }); it('allows data to be set for the operation', function(done) { raster.setOperation(function(inputs, data) { ++data.count; return inputs[0]; }); raster.on('beforeoperations', function(event) { event.data.count = 0; }); raster.once('afteroperations', function(event) { expect(event.data.count).to.equal(4); done(); }); var view = map.getView(); view.setCenter([0, 0]); view.setZoom(0); }); }); describe('afteroperations', function() { it('gets called after operations are run', function(done) { var count = 0; raster.setOperation(function(inputs) { ++count; return inputs[0]; }); raster.once('afteroperations', function(event) { expect(count).to.equal(4); expect(!!event).to.be(true); expect(event.extent).to.be.an('array'); expect(event.resolution).to.be.a('number'); expect(event.data).to.be.an('object'); done(); }); var view = map.getView(); view.setCenter([0, 0]); view.setZoom(0); }); it('receives data set by the operation', function(done) { raster.setOperation(function(inputs, data) { data.message = 'hello world'; return inputs[0]; }); raster.once('afteroperations', function(event) { expect(event.data.message).to.equal('hello world'); done(); }); var view = map.getView(); view.setCenter([0, 0]); view.setZoom(0); }); }); });