forked from AkkomaGang/akkoma-fe
120 lines
3.3 KiB
JavaScript
120 lines
3.3 KiB
JavaScript
import GestureService from 'src/services/gesture_service/gesture_service.js'
|
|
|
|
const mockTouchEvent = (x, y) => ({
|
|
touches: [
|
|
{
|
|
screenX: x,
|
|
screenY: y
|
|
}
|
|
]
|
|
})
|
|
|
|
describe('GestureService', () => {
|
|
describe('swipeGesture', () => {
|
|
it('calls the callback on a successful swipe', () => {
|
|
let swiped = false
|
|
const callback = () => { swiped = true }
|
|
const gesture = GestureService.swipeGesture(
|
|
GestureService.DIRECTION_RIGHT,
|
|
callback
|
|
)
|
|
|
|
GestureService.beginSwipe(mockTouchEvent(100, 100), gesture)
|
|
GestureService.updateSwipe(mockTouchEvent(200, 100), gesture)
|
|
|
|
expect(swiped).to.eql(true)
|
|
})
|
|
|
|
it('calls the callback only once per begin', () => {
|
|
let hits = 0
|
|
const callback = () => { hits += 1 }
|
|
const gesture = GestureService.swipeGesture(
|
|
GestureService.DIRECTION_RIGHT,
|
|
callback
|
|
)
|
|
|
|
GestureService.beginSwipe(mockTouchEvent(100, 100), gesture)
|
|
GestureService.updateSwipe(mockTouchEvent(150, 100), gesture)
|
|
GestureService.updateSwipe(mockTouchEvent(200, 100), gesture)
|
|
|
|
expect(hits).to.eql(1)
|
|
})
|
|
|
|
it('doesn\'t call the callback on an opposite swipe', () => {
|
|
let swiped = false
|
|
const callback = () => { swiped = true }
|
|
const gesture = GestureService.swipeGesture(
|
|
GestureService.DIRECTION_RIGHT,
|
|
callback
|
|
)
|
|
|
|
GestureService.beginSwipe(mockTouchEvent(100, 100), gesture)
|
|
GestureService.updateSwipe(mockTouchEvent(0, 100), gesture)
|
|
|
|
expect(swiped).to.eql(false)
|
|
})
|
|
|
|
it('doesn\'t call the callback on a swipe below threshold', () => {
|
|
let swiped = false
|
|
const callback = () => { swiped = true }
|
|
const gesture = GestureService.swipeGesture(
|
|
GestureService.DIRECTION_RIGHT,
|
|
callback,
|
|
100
|
|
)
|
|
|
|
GestureService.beginSwipe(mockTouchEvent(100, 100), gesture)
|
|
GestureService.updateSwipe(mockTouchEvent(150, 100), gesture)
|
|
|
|
expect(swiped).to.eql(false)
|
|
})
|
|
|
|
it('doesn\'t call the callback on a perpendicular swipe', () => {
|
|
let swiped = false
|
|
const callback = () => { swiped = true }
|
|
const gesture = GestureService.swipeGesture(
|
|
GestureService.DIRECTION_RIGHT,
|
|
callback,
|
|
30,
|
|
0.5
|
|
)
|
|
|
|
GestureService.beginSwipe(mockTouchEvent(100, 100), gesture)
|
|
GestureService.updateSwipe(mockTouchEvent(150, 200), gesture)
|
|
|
|
expect(swiped).to.eql(false)
|
|
})
|
|
|
|
it('calls the callback on perpendicular swipe if within tolerance', () => {
|
|
let swiped = false
|
|
const callback = () => { swiped = true }
|
|
const gesture = GestureService.swipeGesture(
|
|
GestureService.DIRECTION_RIGHT,
|
|
callback,
|
|
30,
|
|
2.0
|
|
)
|
|
|
|
GestureService.beginSwipe(mockTouchEvent(100, 100), gesture)
|
|
GestureService.updateSwipe(mockTouchEvent(150, 150), gesture)
|
|
|
|
expect(swiped).to.eql(true)
|
|
})
|
|
|
|
it('works with any arbitrary 2d directions', () => {
|
|
let swiped = false
|
|
const callback = () => { swiped = true }
|
|
const gesture = GestureService.swipeGesture(
|
|
[-1, -1],
|
|
callback,
|
|
30,
|
|
0.1
|
|
)
|
|
|
|
GestureService.beginSwipe(mockTouchEvent(100, 100), gesture)
|
|
GestureService.updateSwipe(mockTouchEvent(60, 60), gesture)
|
|
|
|
expect(swiped).to.eql(true)
|
|
})
|
|
})
|
|
})
|