From 0c212fdcb5214ad058cd90176f82f3cb9c3bd623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Tue, 29 Oct 2013 15:52:53 +0100 Subject: [PATCH 1/7] Emulated click events on mouse devices The map already emits emulated `click` and `dblclick` events on touch and pointer devices. With this commit the map emits emulated `click` and `dblclick` events on mouse devices as well. --- src/ol/mapbrowserevent.js | 95 ++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 56 deletions(-) diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index de24ec2085..5902e6b4b0 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -143,13 +143,13 @@ ol.MapBrowserEventHandler = function(map) { * @type {Array.} * @private */ - this.listenerKeys_ = null; + this.dragListenerKeys_ = null; /** - * @type {Array.} + * @type {goog.events.Key} * @private */ - this.dragListenerKeys_ = null; + this.mousedownListenerKey_ = null; /** * @type {Array.} @@ -164,14 +164,11 @@ ol.MapBrowserEventHandler = function(map) { this.down_ = null; var element = this.map_.getViewport(); - this.listenerKeys_ = [ - goog.events.listen(element, - [goog.events.EventType.CLICK, goog.events.EventType.DBLCLICK], - this.click_, false, this), - goog.events.listen(element, - goog.events.EventType.MOUSEDOWN, - this.handleMouseDown_, false, this) - ]; + + this.mousedownListenerKey_ = goog.events.listen(element, + goog.events.EventType.MOUSEDOWN, + this.handleMouseDown_, false, this); + // touch events this.touchListenerKeys_ = [ goog.events.listen(element, [ @@ -196,19 +193,22 @@ goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget); * @param {goog.events.BrowserEvent} browserEvent Browser event. * @private */ -ol.MapBrowserEventHandler.prototype.click_ = function(browserEvent) { - if (!this.dragged_) { - var newEvent; - var type = browserEvent.type; - if (type == goog.events.EventType.DBLCLICK) { - newEvent = new ol.MapBrowserEvent( - ol.MapBrowserEvent.EventType.DBLCLICK, this.map_, browserEvent); - this.dispatchEvent(newEvent); - } else { - newEvent = new ol.MapBrowserEvent( +ol.MapBrowserEventHandler.prototype.emulateClick_ = function(browserEvent) { + if (this.clickTimeoutId_ !== 0) { + // double-click + goog.global.clearTimeout(this.clickTimeoutId_); + this.clickTimeoutId_ = 0; + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.DBLCLICK, this.map_, browserEvent); + this.dispatchEvent(newEvent); + } else { + // click + this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() { + this.clickTimeoutId_ = 0; + var newEvent = new ol.MapBrowserEvent( ol.MapBrowserEvent.EventType.CLICK, this.map_, browserEvent); this.dispatchEvent(newEvent); - } + }, this), 250); } }; @@ -219,13 +219,15 @@ ol.MapBrowserEventHandler.prototype.click_ = function(browserEvent) { */ ol.MapBrowserEventHandler.prototype.handleMouseUp_ = function(browserEvent) { if (this.down_) { - this.down_ = null; goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); this.dragListenerKeys_ = null; if (this.dragged_) { var newEvent = new ol.MapBrowserEvent( ol.MapBrowserEvent.EventType.DRAGEND, this.map_, browserEvent); this.dispatchEvent(newEvent); + this.down_ = null; + } else { + this.emulateClick_(browserEvent); } } }; @@ -239,18 +241,16 @@ ol.MapBrowserEventHandler.prototype.handleMouseDown_ = function(browserEvent) { var newEvent = new ol.MapBrowserEvent( ol.MapBrowserEvent.EventType.DOWN, this.map_, browserEvent); this.dispatchEvent(newEvent); - if (!this.down_) { - this.down_ = browserEvent; - this.dragged_ = false; - this.dragListenerKeys_ = [ - goog.events.listen(goog.global.document, goog.events.EventType.MOUSEMOVE, - this.handleMouseMove_, false, this), - goog.events.listen(goog.global.document, goog.events.EventType.MOUSEUP, - this.handleMouseUp_, false, this) - ]; - // prevent browser image dragging with the dom renderer - browserEvent.preventDefault(); - } + this.down_ = browserEvent; + this.dragged_ = false; + this.dragListenerKeys_ = [ + goog.events.listen(goog.global.document, goog.events.EventType.MOUSEMOVE, + this.handleMouseMove_, false, this), + goog.events.listen(goog.global.document, goog.events.EventType.MOUSEUP, + this.handleMouseUp_, false, this) + ]; + // prevent browser image dragging with the dom renderer + browserEvent.preventDefault(); }; @@ -328,24 +328,7 @@ ol.MapBrowserEventHandler.prototype.handleTouchEnd_ = function(browserEvent) { this.dispatchEvent(newEvent); if (!this.dragged_) { goog.asserts.assert(!goog.isNull(this.down_)); - if (this.clickTimeoutId_ !== 0) { - // double-click - goog.global.clearTimeout(this.clickTimeoutId_); - this.clickTimeoutId_ = 0; - newEvent = new ol.MapBrowserEvent( - ol.MapBrowserEvent.EventType.DBLCLICK, this.map_, this.down_); - this.dispatchEvent(newEvent); - this.down_ = null; - } else { - // click - this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() { - this.clickTimeoutId_ = 0; - newEvent = new ol.MapBrowserEvent( - ol.MapBrowserEvent.EventType.CLICK, this.map_, this.down_); - this.dispatchEvent(newEvent); - this.down_ = null; - }, this), 250); - } + this.emulateClick_(this.down_); } }; @@ -354,9 +337,9 @@ ol.MapBrowserEventHandler.prototype.handleTouchEnd_ = function(browserEvent) { * FIXME empty description for jsdoc */ ol.MapBrowserEventHandler.prototype.disposeInternal = function() { - if (!goog.isNull(this.listenerKeys_)) { - goog.array.forEach(this.listenerKeys_, goog.events.unlistenByKey); - this.listenerKeys_ = null; + if (!goog.isNull(this.mousedownListenerKey_)) { + goog.events.unlistenByKey(this.mousedownListenerKey_); + this.mousedownListenerKey_ = null; } if (!goog.isNull(this.dragListenerKeys_)) { goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); From a85b82090d9a736b69053a3408dbca1cb13d17fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Tue, 29 Oct 2013 15:58:22 +0100 Subject: [PATCH 2/7] Emulate click events only on mouse "action" `click` events are fired only if the mouse action button is pressed. This prevents `click` events from being fired when the middle mouse button is used. Also, without this commit, in Chrome with emulated touch events enabled, double-clicking the map doesn't zoom the map. This is because `ol.BrowserFeature.HAS_TOUCH` is `false` in that environment. The commit fixes it by testing `isMouseActionButton` on mouse devices only. --- src/ol/interaction/doubleclickzoominteraction.js | 3 +-- src/ol/mapbrowserevent.js | 13 +------------ 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/ol/interaction/doubleclickzoominteraction.js b/src/ol/interaction/doubleclickzoominteraction.js index dc439f8b33..1b106052b1 100644 --- a/src/ol/interaction/doubleclickzoominteraction.js +++ b/src/ol/interaction/doubleclickzoominteraction.js @@ -46,8 +46,7 @@ ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { var stopEvent = false; var browserEvent = mapBrowserEvent.browserEvent; - if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK && - mapBrowserEvent.isMouseActionButton()) { + if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK) { var map = mapBrowserEvent.map; var anchor = mapBrowserEvent.getCoordinate(); var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_; diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index 5902e6b4b0..6cecd64c92 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -8,7 +8,6 @@ goog.require('goog.events'); goog.require('goog.events.BrowserEvent'); goog.require('goog.events.EventTarget'); goog.require('goog.events.EventType'); -goog.require('ol.BrowserFeature'); goog.require('ol.Coordinate'); goog.require('ol.FrameState'); goog.require('ol.MapEvent'); @@ -76,16 +75,6 @@ ol.MapBrowserEvent.prototype.getPixel = function() { }; -/** - * @return {boolean} Do we have a left click? - */ -ol.MapBrowserEvent.prototype.isMouseActionButton = function() { - // always assume a left-click on touch devices - return ol.BrowserFeature.HAS_TOUCH || - this.browserEvent.isMouseActionButton(); -}; - - /** * Prevents the default browser action. * @see https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault @@ -226,7 +215,7 @@ ol.MapBrowserEventHandler.prototype.handleMouseUp_ = function(browserEvent) { ol.MapBrowserEvent.EventType.DRAGEND, this.map_, browserEvent); this.dispatchEvent(newEvent); this.down_ = null; - } else { + } else if (browserEvent.isMouseActionButton()) { this.emulateClick_(browserEvent); } } From 9f7ead5ef4d372c7a9aa65206e925c9c14322919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Tue, 29 Oct 2013 16:03:55 +0100 Subject: [PATCH 3/7] Remove unused ol.MapBrowserEventHandler#relayEvent_ func --- src/ol/mapbrowserevent.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index 6cecd64c92..5372ee7aee 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -261,16 +261,6 @@ ol.MapBrowserEventHandler.prototype.handleMouseMove_ = function(browserEvent) { }; -/** - * @param {goog.events.BrowserEvent} browserEvent Browser event. - * @private - */ -ol.MapBrowserEventHandler.prototype.relayEvent_ = function(browserEvent) { - this.dispatchEvent(new ol.MapBrowserEvent( - browserEvent.type, this.map_, browserEvent)); -}; - - /** * @param {goog.events.BrowserEvent} browserEvent Browser event. * @private From 0fa66cc7e76199db406624f96f6bc92702f7f33d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Tue, 29 Oct 2013 16:08:38 +0100 Subject: [PATCH 4/7] Remove mousedown listener on first touchstart --- src/ol/mapbrowserevent.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index 5372ee7aee..b5c19b4d17 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -266,6 +266,10 @@ ol.MapBrowserEventHandler.prototype.handleMouseMove_ = function(browserEvent) { * @private */ ol.MapBrowserEventHandler.prototype.handleTouchStart_ = function(browserEvent) { + if (!goog.isNull(this.mousedownListenerKey_)) { + goog.events.unlistenByKey(this.mousedownListenerKey_); + this.mousedownListenerKey_ = null; + } // prevent context menu // When the IE pointer events are used, this prevents a // 'mousedown' from being fired after this event for the primary From 6ab88aad72970885629b65b8d6e57a096f493067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 30 Oct 2013 10:47:36 +0100 Subject: [PATCH 5/7] Add tests for emulated clicks --- test/spec/ol/mapbrowserevent.test.js | 58 ++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 test/spec/ol/mapbrowserevent.test.js diff --git a/test/spec/ol/mapbrowserevent.test.js b/test/spec/ol/mapbrowserevent.test.js new file mode 100644 index 0000000000..42ae60fe78 --- /dev/null +++ b/test/spec/ol/mapbrowserevent.test.js @@ -0,0 +1,58 @@ +goog.provide('ol.test.MapBrowserEventHandler'); + +describe('ol.MapBrowserEventHandler', function() { + describe('#emulateClick_', function() { + var clock; + var handler; + var clickSpy; + var dblclickSpy; + + beforeEach(function() { + clock = sinon.useFakeTimers(); + handler = new ol.MapBrowserEventHandler(new ol.Map({})); + + clickSpy = sinon.spy(); + goog.events.listen(handler, 'click', clickSpy); + + dblclickSpy = sinon.spy(); + goog.events.listen(handler, 'dblclick', dblclickSpy); + }); + + afterEach(function() { + clock.restore(); + }); + + it('emulates click', function() { + handler.emulateClick_(); + expect(clickSpy.called).to.not.be.ok(); + expect(dblclickSpy.called).to.not.be.ok(); + + clock.tick(250); + expect(clickSpy.calledOnce).to.be.ok(); + expect(dblclickSpy.called).to.not.be.ok(); + + handler.emulateClick_(); + expect(clickSpy.calledOnce).to.be.ok(); + expect(dblclickSpy.called).to.not.be.ok(); + }); + + it('emulates dblclick', function() { + handler.emulateClick_(); + expect(clickSpy.called).to.not.be.ok(); + expect(dblclickSpy.called).to.not.be.ok(); + + handler.emulateClick_(); + expect(clickSpy.called).to.not.be.ok(); + expect(dblclickSpy.calledOnce).to.be.ok(); + + clock.tick(250); + expect(clickSpy.called).to.not.be.ok(); + expect(dblclickSpy.calledOnce).to.be.ok(); + }); + + }); +}); + +goog.require('goog.events'); +goog.require('ol.Map'); +goog.require('ol.MapBrowserEventHandler'); From 2c930d74b570440cd6865f9723bc344740f9b1da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 30 Oct 2013 10:57:26 +0100 Subject: [PATCH 6/7] clickOnly condition checks map clicks --- src/ol/events/condition.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ol/events/condition.js b/src/ol/events/condition.js index c69c2db7ec..02be818677 100644 --- a/src/ol/events/condition.js +++ b/src/ol/events/condition.js @@ -2,8 +2,8 @@ goog.provide('ol.events.ConditionType'); goog.provide('ol.events.condition'); goog.require('goog.dom.TagName'); -goog.require('goog.events.EventType'); goog.require('goog.functions'); +goog.require('ol.MapBrowserEvent.EventType'); /** @@ -55,8 +55,7 @@ ol.events.condition.always = goog.functions.TRUE; * @todo stability experimental */ ol.events.condition.clickOnly = function(mapBrowserEvent) { - var browserEvent = mapBrowserEvent.browserEvent; - return browserEvent.type == goog.events.EventType.CLICK; + return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.CLICK; }; From 8402eee0c3c7bf909cc6aa3305ccd112d430a49c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 31 Oct 2013 09:17:24 +0100 Subject: [PATCH 7/7] Map "click" event renamed to "singleclick" As discussed with @tschaub in #1195. --- examples/getfeatureinfo.js | 2 +- examples/gpx.js | 2 +- examples/icon.js | 2 +- examples/kml-earthquakes.js | 2 +- examples/kml-timezones.js | 2 +- examples/kml.js | 2 +- examples/overlay.js | 2 +- examples/popup.js | 2 +- examples/vector-layer.js | 2 +- src/ol/events/condition.js | 4 ++-- src/ol/interaction/selectinteraction.js | 2 +- src/ol/mapbrowserevent.js | 4 ++-- test/spec/ol/mapbrowserevent.test.js | 18 +++++++++--------- 13 files changed, 23 insertions(+), 23 deletions(-) diff --git a/examples/getfeatureinfo.js b/examples/getfeatureinfo.js index fcf32db161..ae7258d6cb 100644 --- a/examples/getfeatureinfo.js +++ b/examples/getfeatureinfo.js @@ -46,7 +46,7 @@ var map = new ol.Map({ }) }); -map.on('click', function(evt) { +map.on('singleclick', function(evt) { map.getFeatureInfo({ pixel: evt.getPixel(), success: function(featureInfoByLayer) { diff --git a/examples/gpx.js b/examples/gpx.js index 899b9cdb31..df2452b176 100644 --- a/examples/gpx.js +++ b/examples/gpx.js @@ -48,7 +48,7 @@ $(map.getViewport()).on('mousemove', function(evt) { displayFeatureInfo(pixel); }); -map.on('click', function(evt) { +map.on('singleclick', function(evt) { var pixel = evt.getPixel(); displayFeatureInfo(pixel); }); diff --git a/examples/icon.js b/examples/icon.js index af0e158b30..07ef45ce88 100644 --- a/examples/icon.js +++ b/examples/icon.js @@ -71,7 +71,7 @@ var popup = new ol.Overlay({ map.addOverlay(popup); -map.on('click', function(evt) { +map.on('singleclick', function(evt) { map.getFeatures({ pixel: evt.getPixel(), layers: [vector], diff --git a/examples/kml-earthquakes.js b/examples/kml-earthquakes.js index fd2405cea9..8ff5de66d1 100644 --- a/examples/kml-earthquakes.js +++ b/examples/kml-earthquakes.js @@ -87,7 +87,7 @@ $(map.getViewport()).on('mousemove', function(evt) { displayFeatureInfo(pixel); }); -map.on('click', function(evt) { +map.on('singleclick', function(evt) { var pixel = evt.getPixel(); displayFeatureInfo(pixel); }); diff --git a/examples/kml-timezones.js b/examples/kml-timezones.js index 6657961593..8b88d27d93 100644 --- a/examples/kml-timezones.js +++ b/examples/kml-timezones.js @@ -109,7 +109,7 @@ $(map.getViewport()).on('mousemove', function(evt) { displayFeatureInfo(pixel); }); -map.on('click', function(evt) { +map.on('singleclick', function(evt) { var pixel = evt.getPixel(); displayFeatureInfo(pixel); }); diff --git a/examples/kml.js b/examples/kml.js index bce5752903..c356c761d8 100644 --- a/examples/kml.js +++ b/examples/kml.js @@ -59,7 +59,7 @@ $(map.getViewport()).on('mousemove', function(evt) { displayFeatureInfo(pixel); }); -map.on('click', function(evt) { +map.on('singleclick', function(evt) { var pixel = evt.getPixel(); displayFeatureInfo(pixel); }); diff --git a/examples/overlay.js b/examples/overlay.js index bc5d12915c..e4e036c099 100644 --- a/examples/overlay.js +++ b/examples/overlay.js @@ -47,7 +47,7 @@ var popup = new ol.Overlay({ }); map.addOverlay(popup); -map.on('click', function(evt) { +map.on('singleclick', function(evt) { var element = popup.getElement(); var coordinate = evt.getCoordinate(); var hdms = ol.coordinate.toStringHDMS(ol.proj.transform( diff --git a/examples/popup.js b/examples/popup.js index 944b5b8b8b..0c6a362153 100644 --- a/examples/popup.js +++ b/examples/popup.js @@ -61,7 +61,7 @@ var map = new ol.Map({ /** * Add a click handler to the map to render the popup. */ -map.on('click', function(evt) { +map.on('singleclick', function(evt) { var coordinate = evt.getCoordinate(); var hdms = ol.coordinate.toStringHDMS(ol.proj.transform( coordinate, 'EPSG:3857', 'EPSG:4326')); diff --git a/examples/vector-layer.js b/examples/vector-layer.js index f1c2df3d7a..2f4214ced2 100644 --- a/examples/vector-layer.js +++ b/examples/vector-layer.js @@ -82,7 +82,7 @@ $(map.getViewport()).on('mousemove', function(evt) { displayFeatureInfo(pixel); }); -map.on('click', function(evt) { +map.on('singleclick', function(evt) { var pixel = evt.getPixel(); displayFeatureInfo(pixel); }); diff --git a/src/ol/events/condition.js b/src/ol/events/condition.js index 02be818677..7171cbde36 100644 --- a/src/ol/events/condition.js +++ b/src/ol/events/condition.js @@ -54,8 +54,8 @@ ol.events.condition.always = goog.functions.TRUE; * @return {boolean} True if the event is a click event. * @todo stability experimental */ -ol.events.condition.clickOnly = function(mapBrowserEvent) { - return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.CLICK; +ol.events.condition.singleClick = function(mapBrowserEvent) { + return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.SINGLECLICK; }; diff --git a/src/ol/interaction/selectinteraction.js b/src/ol/interaction/selectinteraction.js index 553254421e..705e872671 100644 --- a/src/ol/interaction/selectinteraction.js +++ b/src/ol/interaction/selectinteraction.js @@ -27,7 +27,7 @@ ol.interaction.Select = function(opt_options) { * @type {ol.events.ConditionType} */ this.condition_ = goog.isDef(options.condition) ? - options.condition : ol.events.condition.clickOnly; + options.condition : ol.events.condition.singleClick; /** * @private diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index b5c19b4d17..237ac700c9 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -195,7 +195,7 @@ ol.MapBrowserEventHandler.prototype.emulateClick_ = function(browserEvent) { this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() { this.clickTimeoutId_ = 0; var newEvent = new ol.MapBrowserEvent( - ol.MapBrowserEvent.EventType.CLICK, this.map_, browserEvent); + ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, browserEvent); this.dispatchEvent(newEvent); }, this), 250); } @@ -341,12 +341,12 @@ ol.MapBrowserEventHandler.prototype.disposeInternal = function() { * @enum {string} */ ol.MapBrowserEvent.EventType = { - CLICK: goog.events.EventType.CLICK, DBLCLICK: goog.events.EventType.DBLCLICK, DOWN: 'down', DRAGSTART: 'dragstart', DRAG: 'drag', DRAGEND: 'dragend', + SINGLECLICK: 'singleclick', TOUCHSTART: goog.events.EventType.TOUCHSTART, TOUCHMOVE: goog.events.EventType.TOUCHMOVE, TOUCHEND: goog.events.EventType.TOUCHEND diff --git a/test/spec/ol/mapbrowserevent.test.js b/test/spec/ol/mapbrowserevent.test.js index 42ae60fe78..cf2b385fc7 100644 --- a/test/spec/ol/mapbrowserevent.test.js +++ b/test/spec/ol/mapbrowserevent.test.js @@ -4,15 +4,15 @@ describe('ol.MapBrowserEventHandler', function() { describe('#emulateClick_', function() { var clock; var handler; - var clickSpy; + var singleclickSpy; var dblclickSpy; beforeEach(function() { clock = sinon.useFakeTimers(); handler = new ol.MapBrowserEventHandler(new ol.Map({})); - clickSpy = sinon.spy(); - goog.events.listen(handler, 'click', clickSpy); + singleclickSpy = sinon.spy(); + goog.events.listen(handler, 'singleclick', singleclickSpy); dblclickSpy = sinon.spy(); goog.events.listen(handler, 'dblclick', dblclickSpy); @@ -24,29 +24,29 @@ describe('ol.MapBrowserEventHandler', function() { it('emulates click', function() { handler.emulateClick_(); - expect(clickSpy.called).to.not.be.ok(); + expect(singleclickSpy.called).to.not.be.ok(); expect(dblclickSpy.called).to.not.be.ok(); clock.tick(250); - expect(clickSpy.calledOnce).to.be.ok(); + expect(singleclickSpy.calledOnce).to.be.ok(); expect(dblclickSpy.called).to.not.be.ok(); handler.emulateClick_(); - expect(clickSpy.calledOnce).to.be.ok(); + expect(singleclickSpy.calledOnce).to.be.ok(); expect(dblclickSpy.called).to.not.be.ok(); }); it('emulates dblclick', function() { handler.emulateClick_(); - expect(clickSpy.called).to.not.be.ok(); + expect(singleclickSpy.called).to.not.be.ok(); expect(dblclickSpy.called).to.not.be.ok(); handler.emulateClick_(); - expect(clickSpy.called).to.not.be.ok(); + expect(singleclickSpy.called).to.not.be.ok(); expect(dblclickSpy.calledOnce).to.be.ok(); clock.tick(250); - expect(clickSpy.called).to.not.be.ok(); + expect(singleclickSpy.called).to.not.be.ok(); expect(dblclickSpy.calledOnce).to.be.ok(); });