t.test('Gracefully ignores wheel events with deltaY: 0', (t) => { const map = createMap(); map._renderTaskQueue.run(); const startZoom = map.getZoom(); // simulate shift+'wheel' events simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -0, shiftKey: true}); simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -0, shiftKey: true}); simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -0, shiftKey: true}); simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -0, shiftKey: true}); map._renderTaskQueue.run(); now += 400; map._renderTaskQueue.run(); t.equal(map.getZoom() - startZoom, 0.0); t.end(); });
t.test('Zooms for single mouse wheel tick with non-magical deltaY', (t) => { const map = createMap(); map._renderTaskQueue.run(); // Simulate a single 'wheel' event without the magical deltaY value. // This requires the handler to briefly wait to see if a subsequent // event is coming in order to guess trackpad vs. mouse wheel simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -20}); map.on('zoomstart', () => { map.remove(); t.end(); }); });
test('does not zoom if preventDefault is called on the wheel event', (t) => { const map = createMap(); map.on('wheel', e => e.preventDefault()); simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -simulate.magicWheelZoomDelta}); map._renderTaskQueue.run(); now += 400; map._renderTaskQueue.run(); t.equal(map.getZoom(), 0); map.remove(); t.end(); });
t.test('Zooms for single mouse wheel tick', (t) => { const map = createMap(); map._renderTaskQueue.run(); // simulate a single 'wheel' event const startZoom = map.getZoom(); simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -simulate.magicWheelZoomDelta}); map._renderTaskQueue.run(); now += 400; map._renderTaskQueue.run(); t.equalWithPrecision(map.getZoom() - startZoom, 0.0285, 0.001); map.remove(); t.end(); });
test('Map#isMoving returns true when drag panning and scroll zooming interleave', (t) => { const map = createMap(); map.on('dragstart', () => { t.equal(map.isMoving(), true); }); map.on('zoomstart', () => { t.equal(map.isMoving(), true); }); map.on('zoomend', () => { t.equal(map.isMoving(), true); simulate.mouseup(map.getCanvas()); map._renderTaskQueue.run(); }); map.on('dragend', () => { t.equal(map.isMoving(), false); map.remove(); t.end(); }); // The following should trigger the above events, where a zoomstart/zoomend // pair is nested within a dragstart/dragend pair. simulate.mousedown(map.getCanvas()); map._renderTaskQueue.run(); simulate.mousemove(map.getCanvas()); map._renderTaskQueue.run(); const browserNow = t.stub(browser, 'now'); let now = 0; browserNow.callsFake(() => now); simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -simulate.magicWheelZoomDelta}); map._renderTaskQueue.run(); now += 400; map._renderTaskQueue.run(); });
test('Map#isZooming returns true when scroll zooming', (t) => { const map = createMap(t); map.on('zoomstart', () => { t.equal(map.isZooming(), true); }); map.on('zoomend', () => { t.equal(map.isZooming(), false); map.remove(); t.end(); }); let now = 0; t.stub(browser, 'now').callsFake(() => now); simulate.wheel(map.getCanvas(), {type: 'wheel', deltaY: -simulate.magicWheelZoomDelta}); map._renderTaskQueue.run(); now += 400; map._renderTaskQueue.run(); });
t.test('Zooms for multiple mouse wheel ticks', (t) => { const map = createMap(); map._renderTaskQueue.run(); const startZoom = map.getZoom(); const events = [ [2, {type: 'wheel', deltaY: -simulate.magicWheelZoomDelta}], [7, {type: 'wheel', deltaY: -41}], [30, {type: 'wheel', deltaY: -169}], [1, {type: 'wheel', deltaY: -801}], [5, {type: 'wheel', deltaY: -326}], [20, {type: 'wheel', deltaY: -345}], [22, {type: 'wheel', deltaY: -376}], ]; const end = now + 500; let lastWheelEvent = now; // simulate the above sequence of wheel events, with render frames // interspersed every 20ms while (now++ < end) { if (events.length && lastWheelEvent + events[0][0] === now) { const [, event] = events.shift(); simulate.wheel(map.getCanvas(), event); lastWheelEvent = now; } if (now % 20 === 0) { map._renderTaskQueue.run(); } } t.equalWithPrecision(map.getZoom() - startZoom, 1.944, 0.001); map.remove(); t.end(); });