diff --git a/src/ol/layer/layerbase.js b/src/ol/layer/layerbase.js index 46bc1b7d2c..160fd04b7d 100644 --- a/src/ol/layer/layerbase.js +++ b/src/ol/layer/layerbase.js @@ -25,7 +25,8 @@ ol.layer.LayerProperty = { /** - * @typedef {{brightness: number, + * @typedef {{layer: ol.layer.Layer, + * brightness: number, * contrast: number, * hue: number, * opacity: number, @@ -126,6 +127,7 @@ ol.layer.Base.prototype.getLayerState = function() { var maxResolution = this.getMaxResolution(); var minResolution = this.getMinResolution(); return { + layer: /** @type {ol.layer.Layer} */ (this), brightness: goog.isDef(brightness) ? goog.math.clamp(brightness, -1, 1) : 0, contrast: goog.isDef(contrast) ? Math.max(contrast, 0) : 1, hue: goog.isDef(hue) ? hue : 0, diff --git a/test/spec/ol/layer/layer.test.js b/test/spec/ol/layer/layer.test.js index 4d8f1b516c..afafb9a617 100644 --- a/test/spec/ol/layer/layer.test.js +++ b/test/spec/ol/layer/layer.test.js @@ -48,6 +48,7 @@ describe('ol.layer.Layer', function() { it('provides default layerState', function() { expect(layer.getLayerState()).to.eql({ + layer: layer, brightness: 0, contrast: 1, hue: 0, @@ -90,6 +91,7 @@ describe('ol.layer.Layer', function() { expect(layer.getMinResolution()).to.be(0.25); expect(layer.get('foo')).to.be(42); expect(layer.getLayerState()).to.eql({ + layer: layer, brightness: 0.5, contrast: 10, hue: 180, @@ -132,6 +134,7 @@ describe('ol.layer.Layer', function() { layer.setMaxResolution(500); layer.setMinResolution(0.25); expect(layer.getLayerState()).to.eql({ + layer: layer, brightness: -0.7, contrast: 0.3, hue: -0.3, @@ -152,6 +155,7 @@ describe('ol.layer.Layer', function() { layer.setSaturation(-0.7); layer.setVisible(false); expect(layer.getLayerState()).to.eql({ + layer: layer, brightness: 1, contrast: 0, hue: 42, @@ -170,6 +174,7 @@ describe('ol.layer.Layer', function() { layer.setSaturation(42); layer.setVisible(true); expect(layer.getLayerState()).to.eql({ + layer: layer, brightness: -1, contrast: 42, hue: -100, diff --git a/test/spec/ol/layer/layergroup.test.js b/test/spec/ol/layer/layergroup.test.js index d3a29cfd15..20650c8bb4 100644 --- a/test/spec/ol/layer/layergroup.test.js +++ b/test/spec/ol/layer/layergroup.test.js @@ -44,6 +44,7 @@ describe('ol.layer.Group', function() { it('provides default layerState', function() { expect(layerGroup.getLayerState()).to.eql({ + layer: layerGroup, brightness: 0, contrast: 1, hue: 0, @@ -170,6 +171,7 @@ describe('ol.layer.Group', function() { expect(layerGroup.getMaxResolution()).to.be(500); expect(layerGroup.getMinResolution()).to.be(0.25); expect(layerGroup.getLayerState()).to.eql({ + layer: layerGroup, brightness: 0.5, contrast: 10, hue: 180, @@ -212,6 +214,7 @@ describe('ol.layer.Group', function() { layerGroup.setMaxResolution(500); layerGroup.setMinResolution(0.25); expect(layerGroup.getLayerState()).to.eql({ + layer: layerGroup, brightness: -0.7, contrast: 0.3, hue: -0.3, @@ -232,6 +235,7 @@ describe('ol.layer.Group', function() { layerGroup.setSaturation(-0.7); layerGroup.setVisible(false); expect(layerGroup.getLayerState()).to.eql({ + layer: layerGroup, brightness: 1, contrast: 0, hue: 42, @@ -250,6 +254,7 @@ describe('ol.layer.Group', function() { layerGroup.setSaturation(42); layerGroup.setVisible(true); expect(layerGroup.getLayerState()).to.eql({ + layer: layerGroup, brightness: -1, contrast: 42, hue: -100, @@ -345,7 +350,14 @@ describe('ol.layer.Group', function() { expect(layerStatesArray).to.be.a(Array); expect(layerStatesArray.length).to.be(2); expect(layerStatesArray[0]).to.eql(layer1.getLayerState()); - expect(layerStatesArray[0]).to.eql(layerGroup.getLayerState()); + + // layer state should match except for layer reference + var layerState = goog.object.clone(layerStatesArray[0]); + delete layerState.layer; + var groupState = goog.object.clone(layerGroup.getLayerState()); + delete groupState.layer; + expect(layerState).to.eql(groupState); + expect(layerStatesArray[1]).to.eql(layer2.getLayerState()); goog.dispose(layerGroup); @@ -367,8 +379,21 @@ describe('ol.layer.Group', function() { obj = layerGroup.getLayerStatesArray(); layersArray = obj.layers; layerStatesArray = obj.layerStates; - expect(layerStatesArray[0]).to.eql(layerGroup.getLayerState()); - expect(layerStatesArray[1]).to.eql({ + + // compare layer state to group state + var groupState, layerState; + + // layer state should match except for layer reference + layerState = goog.object.clone(layerStatesArray[0]); + delete layerState.layer; + groupState = goog.object.clone(layerGroup.getLayerState()); + delete groupState.layer; + expect(layerState).to.eql(groupState); + + // layer state should be transformed (and we ignore layer reference) + layerState = goog.object.clone(layerStatesArray[1]); + delete layerState.layer; + expect(layerState).to.eql({ brightness: 1, contrast: 100, hue: 360, @@ -392,6 +417,7 @@ describe('ol.layer.Group', function() { goog.require('goog.dispose'); goog.require('goog.events.EventType'); +goog.require('goog.object'); goog.require('ol.ObjectEventType'); goog.require('ol.layer.Layer'); goog.require('ol.layer.Group');