diff --git a/doc/errors/index.md b/doc/errors/index.md index 79ac5dac7c..4213a0b4d1 100644 --- a/doc/errors/index.md +++ b/doc/errors/index.md @@ -236,3 +236,7 @@ A `WebGLArrayBuffer` must either be of type `ELEMENT_ARRAY_BUFFER` or `ARRAY_BUF ### 63 Support for the `OES_element_index_uint` WebGL extension is mandatory for WebGL layers. + +### 64 + +Layer opacity must be a number. diff --git a/src/ol/layer/Base.js b/src/ol/layer/Base.js index 2be76892d7..7b646c01dd 100644 --- a/src/ol/layer/Base.js +++ b/src/ol/layer/Base.js @@ -6,6 +6,7 @@ import BaseObject from '../Object.js'; import LayerProperty from './Property.js'; import {clamp} from '../math.js'; import {assign} from '../obj.js'; +import {assert} from '../asserts.js'; /** @@ -52,8 +53,11 @@ class BaseLayer extends BaseObject { * @type {Object} */ const properties = assign({}, options); + properties[LayerProperty.OPACITY] = - options.opacity !== undefined ? options.opacity : 1; + options.opacity !== undefined ? options.opacity : 1; + assert(typeof properties[LayerProperty.OPACITY] === 'number', 64); // Layer opacity must be a number + properties[LayerProperty.VISIBLE] = options.visible !== undefined ? options.visible : true; properties[LayerProperty.Z_INDEX] = options.zIndex; @@ -292,6 +296,7 @@ class BaseLayer extends BaseObject { * @api */ setOpacity(opacity) { + assert(typeof opacity === 'number', 64); // Layer opacity must be a number this.set(LayerProperty.OPACITY, opacity); } diff --git a/test/spec/ol/layer/layer.test.js b/test/spec/ol/layer/layer.test.js index f7d6b5f4ee..50f494dc18 100644 --- a/test/spec/ol/layer/layer.test.js +++ b/test/spec/ol/layer/layer.test.js @@ -112,6 +112,19 @@ describe('ol.layer.Layer', function() { layer.dispose(); }); + it('throws on non-numeric opacity', function() { + function create() { + new Layer({ + source: new Source({ + projection: 'EPSG:4326' + }), + opacity: 'foo' + }); + } + + expect(create).to.throwException(); + }); + it('accepts a custom render function', function() { let called = false; const layer = new Layer({ @@ -511,6 +524,13 @@ describe('ol.layer.Layer', function() { expect(layer.getOpacity()).to.be(0.3); }); + it('throws on types other than number', function() { + function set() { + layer.setOpacity('foo'); + } + expect(set).to.throwException(); + }); + it('triggers a change event', function() { const listener = sinon.spy(); layer.on('propertychange', listener);