import BScroll from 'scroll/index' import { dispatchTouchStart, dispatchTouchMove, dispatchSwipe } from '../../utils/event' describe('BScroll - core scroll', () => { let scroll let scroller let scrollOptions = { bindToWrapper: true, probeType: 3, deceleration: 0.001 } beforeEach(() => { const wrapper = document.createElement('div') const list = document.createElement('ul') scroller = document.createElement('div') scroller.appendChild(list) wrapper.appendChild(scroller) document.body.appendChild(wrapper) wrapper.style.height = '500px' wrapper.style.overflow = 'hidden' let listHTML = '' list.style.margin = '0' for (let i = 0; i < 100; i++) { listHTML += `
  • ${i}
  • ` } list.innerHTML = listHTML scroll = new BScroll(wrapper, scrollOptions) }) afterEach(() => { if (scroll) { document.body.removeChild(scroll.wrapper) scroll.destroy() } }) it('start', () => { const wrapper = scroll.wrapper const startHandler = sinon.spy() scroll.on('beforeScrollStart', startHandler) dispatchTouchStart(wrapper, { pageX: 100, pageY: 50 }) expect(startHandler) .to.be.calledOnce expect(scroll.pointX) .to.equal(100) expect(scroll.pointY) .to.equal(50) }) it('move', () => { const wrapper = scroll.wrapper const startHandler = sinon.spy() const scrollHandler = sinon.spy() scroll.on('scrollStart', startHandler) scroll.on('scroll', scrollHandler) dispatchTouchStart(wrapper, { pageX: 100, pageY: 100 }) dispatchTouchMove(wrapper, { pageX: 100, pageY: 50 }) expect(startHandler) .to.be.calledOnce expect(scrollHandler) .to.be.calledOnce }) it('end', (done) => { const wrapper = scroll.wrapper const endHandler = sinon.spy() scroll.on('touchEnd', endHandler) scroll.on('scrollEnd', () => { done() }) dispatchSwipe(wrapper, [ { pageX: 100, pageY: 100 }, { pageX: 100, pageY: 80 } ], 100, () => { expect(endHandler) .to.be.calledOnce }) expect(scroll.x) .to.equal(0) expect(scroll.y) .to.equal(0) }) it('scrollStop', (done) => { const endHandler = sinon.spy() scroll.on('scrollEnd', endHandler) scroll.scrollToElement(scroller, 100000, 0, 500) setTimeout(() => { scroll.stop() expect(endHandler) .to.be.calledOnce done() }, 5000) }) it('scrollToElement', () => { scroll.scrollToElement(scroller, 1000, 0, 500) expect(scroll.y) .to.equal(-500) scroll.scrollToElement(scroller, 1000, 0, 400) expect(scroll.y) .to.equal(-400) }) it('scrollBy', () => { scroll.scrollBy(0, -300, 1000) expect(scroll.y) .to.equal(-300) scroll.scrollBy(0, -200, 1000) expect(scroll.y) .to.equal(-500) }) it('resize', (done) => { const refreshHandle = sinon.spy() scroll.on('refresh', refreshHandle) if (document.createEvent) { var event = document.createEvent('HTMLEvents') event.initEvent('resize', true, true) window.dispatchEvent(event) } else if (document.createEventObject) { window.fireEvent('onresize') } setTimeout(() => { expect(refreshHandle) .to.be.called done() }, 5000) }) })