From 49ee4bbd1c458e4f74f3c9b768c59be5e5f5a632 Mon Sep 17 00:00:00 2001 From: James Cheese Date: Mon, 24 Sep 2018 08:52:43 +0100 Subject: [PATCH] Adding tests for ZoomSlider drags ending out of bounds. As per the existing tests for the slider, ensure that listeners are unbound correctly and values are as expected. --- test/spec/ol/control/zoomslider.test.js | 69 +++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/test/spec/ol/control/zoomslider.test.js b/test/spec/ol/control/zoomslider.test.js index da1b120c51..4299c9ca88 100644 --- a/test/spec/ol/control/zoomslider.test.js +++ b/test/spec/ol/control/zoomslider.test.js @@ -135,6 +135,41 @@ describe('ol.control.ZoomSlider', function() { expect(control.dragListenerKeys_.length).to.be(0); expect(control.dragging_).to.be(false); }); + it('[horizontal] handles a drag sequence ending outside its bounds', function() { + const control = new ZoomSlider(); + map.addControl(control); + map.getView().setZoom(0); + control.element.style.width = '500px'; + control.element.style.height = '10px'; + control.element.firstChild.style.width = '100px'; + control.element.firstChild.style.height = '10px'; + map.renderSync(); + const dragger = control.dragger_; + const event = new PointerEvent('pointerdown', { + target: control.element.firstElementChild + }); + event.clientX = control.widthLimit_; + event.clientY = 0; + dragger.dispatchEvent(event); + expect(control.currentResolution_).to.be(16); + expect(control.dragging_).to.be(true); + expect(control.dragListenerKeys_.length).to.be(6); + event.type = 'pointermove'; + event.clientX = 6 * control.widthLimit_ / 8; + event.clientY = 0; + dragger.dispatchEvent(event); + expect(control.currentResolution_).to.be(4); + event.type = 'pointermove'; + event.clientX = 12 * control.widthLimit_ / 8; + event.clientY = 0; + dragger.dispatchEvent(event); + event.type = 'pointerup'; + event.target = 'document'; + dragger.dispatchEvent(event); + expect(control.dragListenerKeys_.length).to.be(0); + expect(control.dragging_).to.be(false); + expect(control.currentResolution_).to.be(16); + }); it('[vertical] handles a drag sequence', function() { const control = new ZoomSlider(); control.element.style.width = '10px'; @@ -169,6 +204,40 @@ describe('ol.control.ZoomSlider', function() { expect(control.dragListenerKeys_.length).to.be(0); expect(control.dragging_).to.be(false); }); + it('[vertical] handles a drag sequence ending outside its bounds', function() { + const control = new ZoomSlider(); + control.element.style.width = '10px'; + control.element.style.height = '100px'; + control.element.firstChild.style.width = '10px'; + control.element.firstChild.style.height = '20px'; + map.addControl(control); + map.getView().setZoom(8); + map.renderSync(); + const dragger = control.dragger_; + const event = new PointerEvent('pointerdown', { + target: control.element.firstElementChild + }); + event.clientX = 0; + event.clientY = 0; + dragger.dispatchEvent(event); + expect(control.currentResolution_).to.be(0.0625); + expect(control.dragging_).to.be(true); + expect(control.dragListenerKeys_.length).to.be(6); + event.type = 'pointermove'; + event.clientX = 0; + event.clientY = 2 * control.heightLimit_ / 8; + dragger.dispatchEvent(event); + expect(control.currentResolution_).to.be(0.25); + event.type = 'pointermove'; + event.clientX = 0; + event.clientY = 12 * control.heightLimit_ / 8; + dragger.dispatchEvent(event); + event.type = 'pointerup'; + dragger.dispatchEvent(event); + expect(control.currentResolution_).to.be(16); + expect(control.dragListenerKeys_.length).to.be(0); + expect(control.dragging_).to.be(false); + }); }); });