From 17e91feb522456e5f9a0cb2c0b4babb69a57aabb Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 11 Dec 2013 12:23:05 -0700 Subject: [PATCH] Listen for property changes in layer group This avoids a future bug when the ol.ObjectEventType.CHANGE value becomes something different than the goog.events.EventType.CHANGE value. --- src/ol/layer/layergroup.js | 6 ++-- test/spec/ol/layer/layergroup.test.js | 46 +++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/ol/layer/layergroup.js b/src/ol/layer/layergroup.js index 9fd4b6c5b0..c2c0940786 100644 --- a/src/ol/layer/layergroup.js +++ b/src/ol/layer/layergroup.js @@ -3,13 +3,13 @@ goog.provide('ol.layer.Group'); goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.events'); -goog.require('goog.events.EventType'); goog.require('goog.math'); goog.require('goog.object'); goog.require('ol.Collection'); goog.require('ol.CollectionEvent'); goog.require('ol.CollectionEventType'); goog.require('ol.Object'); +goog.require('ol.ObjectEventType'); goog.require('ol.layer.Base'); goog.require('ol.source.State'); @@ -104,7 +104,7 @@ ol.layer.Group.prototype.handleLayersChanged_ = function(event) { for (i = 0, ii = layersArray.length; i < ii; i++) { layer = layersArray[i]; this.listenerKeys_[goog.getUid(layer).toString()] = - goog.events.listen(layer, goog.events.EventType.CHANGE, + goog.events.listen(layer, ol.ObjectEventType.CHANGE, this.handleLayerChange_, false, this); } } @@ -120,7 +120,7 @@ ol.layer.Group.prototype.handleLayersChanged_ = function(event) { ol.layer.Group.prototype.handleLayersAdd_ = function(collectionEvent) { var layer = /** @type {ol.layer.Base} */ (collectionEvent.getElement()); this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen( - layer, goog.events.EventType.CHANGE, this.handleLayerChange_, false, + layer, ol.ObjectEventType.CHANGE, this.handleLayerChange_, false, this); this.dispatchChangeEvent(); }; diff --git a/test/spec/ol/layer/layergroup.test.js b/test/spec/ol/layer/layergroup.test.js index cefa283374..14263e7e7f 100644 --- a/test/spec/ol/layer/layergroup.test.js +++ b/test/spec/ol/layer/layergroup.test.js @@ -63,7 +63,7 @@ describe('ol.layer.Group', function() { }); - describe('change event', function() { + describe('generic change event', function() { var layer, group, listener; beforeEach(function() { @@ -84,14 +84,14 @@ describe('ol.layer.Group', function() { }); it('is dispatched by the group when layer opacity changes', function() { - group.on(ol.ObjectEventType.CHANGE, listener); + group.on(goog.events.EventType.CHANGE, listener); layer.setOpacity(0.5); expect(listener.calledOnce).to.be(true); }); it('is dispatched by the group when layer visibility changes', function() { - group.on(ol.ObjectEventType.CHANGE, listener); + group.on(goog.events.EventType.CHANGE, listener); layer.setVisible(false); expect(listener.callCount).to.be(1); @@ -102,6 +102,45 @@ describe('ol.layer.Group', function() { }); + describe('property change event', function() { + + var layer, group, listener; + beforeEach(function() { + layer = new ol.layer.Layer({ + source: new ol.source.Source({ + projection: 'EPSG:4326' + }) + }); + group = new ol.layer.Group({ + layers: [layer] + }); + listener = sinon.spy(); + }); + + afterEach(function() { + goog.dispose(group); + goog.dispose(layer); + }); + + it('is dispatched by the group when group opacity changes', function() { + group.on(ol.ObjectEventType.CHANGE, listener); + + group.setOpacity(0.5); + expect(listener.calledOnce).to.be(true); + }); + + it('is dispatched by the group when group visibility changes', function() { + group.on(ol.ObjectEventType.CHANGE, listener); + + group.setVisible(false); + expect(listener.callCount).to.be(1); + + group.setVisible(true); + expect(listener.callCount).to.be(2); + }); + + }); + describe('constructor (options)', function() { it('accepts options', function() { @@ -352,6 +391,7 @@ describe('ol.layer.Group', function() { }); goog.require('goog.dispose'); +goog.require('goog.events.EventType'); goog.require('ol.ObjectEventType'); goog.require('ol.layer.Layer'); goog.require('ol.layer.Group');