UNPKG

openlayers

Version:

Build tools and sources for developing OpenLayers based mapping applications

244 lines (191 loc) 5.87 kB
goog.provide('ol.test.Object'); goog.require('ol.Object'); goog.require('ol.events'); describe('ol.Object', function() { var o; beforeEach(function() { o = new ol.Object(); }); describe('get, set and unset', function() { describe('get an unset property', function() { var v; beforeEach(function() { v = o.get('k'); }); it('returns undefined', function() { expect(v).to.be(undefined); }); }); describe('get a set property', function() { var v; beforeEach(function() { o.set('k', 1); v = o.get('k'); }); it('returns expected value', function() { expect(v).to.eql(1); }); }); describe('unset a set property', function() { beforeEach(function() { o.set('k', 1); }); it('returns undefined', function() { var v = o.unset('k'); expect(v).to.be(undefined); }); }); }); describe('#get()', function() { it('does not return values that are not explicitly set', function() { var o = new ol.Object(); expect(o.get('constructor')).to.be(undefined); expect(o.get('hasOwnProperty')).to.be(undefined); expect(o.get('isPrototypeOf')).to.be(undefined); expect(o.get('propertyIsEnumerable')).to.be(undefined); expect(o.get('toLocaleString')).to.be(undefined); expect(o.get('toString')).to.be(undefined); expect(o.get('valueOf')).to.be(undefined); }); }); describe('#set()', function() { it('can be used with arbitrary names', function() { var o = new ol.Object(); o.set('set', 'sat'); expect(o.get('set')).to.be('sat'); o.set('get', 'got'); expect(o.get('get')).to.be('got'); o.set('toString', 'string'); expect(o.get('toString')).to.be('string'); expect(typeof o.toString).to.be('function'); }); }); describe('#getKeys()', function() { it('returns property names set at construction', function() { var o = new ol.Object({ prop1: 'val1', prop2: 'val2', toString: 'string', get: 'foo' }); var keys = o.getKeys(); expect(keys.length).to.be(4); expect(keys.sort()).to.eql(['get', 'prop1', 'prop2', 'toString']); }); }); describe('setProperties', function() { it('sets multiple values at once', function() { o.setProperties({ k1: 1, k2: 2 }); expect(o.get('k1')).to.eql(1); expect(o.get('k2')).to.eql(2); var keys = o.getKeys().sort(); expect(keys).to.eql(['k1', 'k2']); }); }); describe('notify', function() { var listener1, listener2; beforeEach(function() { listener1 = sinon.spy(); ol.events.listen(o, 'change:k', listener1); listener2 = sinon.spy(); ol.events.listen(o, 'propertychange', listener2); }); it('dispatches events', function() { o.notify('k', 1); expect(listener1.calledOnce).to.be(true); var args = listener1.firstCall.args; expect(args).to.have.length(1); var event = args[0]; expect(event.key).to.be('k'); expect(event.oldValue).to.be(1); }); it('dispatches generic change events to bound objects', function() { o.notify('k', 1); expect(listener2.calledOnce).to.be(true); var args = listener2.firstCall.args; expect(args).to.have.length(1); var event = args[0]; expect(event.key).to.be('k'); expect(event.oldValue).to.be(1); }); }); describe('set', function() { var listener1, listener2; beforeEach(function() { listener1 = sinon.spy(); ol.events.listen(o, 'change:k', listener1); listener2 = sinon.spy(); ol.events.listen(o, 'propertychange', listener2); }); it('dispatches events to object', function() { o.set('k', 1); expect(listener1).to.be.called(); expect(o.getKeys()).to.eql(['k']); }); it('dispatches generic change events to object', function() { o.set('k', 1); expect(listener2.calledOnce).to.be(true); var args = listener2.firstCall.args; expect(args).to.have.length(1); var event = args[0]; expect(event.key).to.be('k'); }); it('dispatches events only if the value is different', function() { o.set('k', 1); o.set('k', 1); expect(listener1.calledOnce).to.be(true); expect(listener2.calledOnce).to.be(true); }); }); describe('setter', function() { beforeEach(function() { o.setX = function(x) { this.set('x', x); }; sinon.spy(o, 'setX'); }); it('does not call the setter', function() { o.set('x', 1); expect(o.get('x')).to.eql(1); expect(o.setX).to.not.be.called(); expect(o.getKeys()).to.eql(['x']); }); }); describe('getter', function() { beforeEach(function() { o.getX = function() { return 1; }; sinon.spy(o, 'getX'); }); it('does not call the getter', function() { expect(o.get('x')).to.be(undefined); expect(o.getX).to.not.be.called(); }); }); describe('create with options', function() { it('sets the property', function() { var o = new ol.Object({k: 1}); expect(o.get('k')).to.eql(1); expect(o.getKeys()).to.eql(['k']); }); }); describe('case sensitivity', function() { var listener1, listener2; beforeEach(function() { listener1 = sinon.spy(); ol.events.listen(o, 'change:k', listener1); listener2 = sinon.spy(); ol.events.listen(o, 'change:K', listener2); }); it('dispatches the expected event', function() { o.set('K', 1); expect(listener1).to.not.be.called(); expect(listener2).to.be.called(); expect(o.getKeys()).to.eql(['K']); }); }); });