1
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-08-18 03:11:19 +02:00

Extract Carousel's swipe functionality to a separate Class (#32999)

This commit is contained in:
GeoSot
2021-10-11 17:04:43 +03:00
committed by GitHub
parent b21c7ccbb7
commit 8ec6c94522
5 changed files with 417 additions and 79 deletions

View File

@@ -2,6 +2,7 @@ import Carousel from '../../src/carousel'
import EventHandler from '../../src/dom/event-handler'
import { clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fixture'
import { isRTL, noop } from '../../src/util/index'
import Swipe from '../../src/util/swipe'
describe('Carousel', () => {
const { Simulator, PointerEvent } = window
@@ -301,23 +302,24 @@ describe('Carousel', () => {
})
expect(carousel._addTouchEventListeners).not.toHaveBeenCalled()
expect(carousel._swipeHelper).toBeNull()
})
it('should not add touch event listeners if touch supported = false', () => {
fixtureEl.innerHTML = '<div></div>'
const carouselEl = fixtureEl.querySelector('div')
spyOn(Swipe, 'isSupported').and.returnValue(false)
const carousel = new Carousel(carouselEl)
EventHandler.off(carouselEl, '.bs-carousel')
carousel._touchSupported = false
EventHandler.off(carouselEl, Carousel.EVENT_KEY)
spyOn(carousel, '_addTouchEventListeners')
carousel._addEventListeners()
expect(carousel._addTouchEventListeners).not.toHaveBeenCalled()
expect(carousel._swipeHelper).toBeNull()
})
it('should add touch event listeners by default', () => {
@@ -566,7 +568,7 @@ describe('Carousel', () => {
}, () => {
restorePointerEvents()
delete document.documentElement.ontouchstart
expect(carousel.touchDeltaX).toEqual(0)
expect(carousel._swipeHelper._deltaX).toEqual(0)
done()
})
})
@@ -1237,19 +1239,20 @@ describe('Carousel', () => {
const carouselEl = fixtureEl.querySelector('#myCarousel')
const addEventSpy = spyOn(carouselEl, 'addEventListener').and.callThrough()
const removeEventSpy = spyOn(carouselEl, 'removeEventListener').and.callThrough()
const removeEventSpy = spyOn(EventHandler, 'off').and.callThrough()
// Headless browser does not support touch events, so need to fake it
// to test that touch events are add/removed properly.
document.documentElement.ontouchstart = noop
const carousel = new Carousel(carouselEl)
const swipeHelperSpy = spyOn(carousel._swipeHelper, 'dispose').and.callThrough()
const expectedArgs = [
['keydown', jasmine.any(Function), jasmine.any(Boolean)],
['mouseover', jasmine.any(Function), jasmine.any(Boolean)],
['mouseout', jasmine.any(Function), jasmine.any(Boolean)],
...(carousel._pointerEvent ?
...(carousel._swipeHelper._supportPointerEvents ?
[
['pointerdown', jasmine.any(Function), jasmine.any(Boolean)],
['pointerup', jasmine.any(Function), jasmine.any(Boolean)]
@@ -1265,7 +1268,8 @@ describe('Carousel', () => {
carousel.dispose()
expect(removeEventSpy.calls.allArgs()).toEqual(expectedArgs)
expect(removeEventSpy).toHaveBeenCalledWith(carouselEl, Carousel.EVENT_KEY)
expect(swipeHelperSpy).toHaveBeenCalled()
delete document.documentElement.ontouchstart
})