angularjs-slider
Version:
AngularJS slider directive with no external dependencies. Mobile friendly!.
440 lines (359 loc) • 16.2 kB
JavaScript
;(function() {
'use strict'
describe('Mouse controls - draggableRange Horizontal', function() {
var helper, RzSliderOptions, $rootScope, $timeout
beforeEach(module('test-helper'))
beforeEach(inject(function(
TestHelper,
_RzSliderOptions_,
_$rootScope_,
_$timeout_
) {
helper = TestHelper
RzSliderOptions = _RzSliderOptions_
$rootScope = _$rootScope_
$timeout = _$timeout_
}))
afterEach(function() {
helper.clean()
})
beforeEach(function() {
var sliderConf = {
min: 40,
max: 60,
options: {
floor: 0,
ceil: 100,
draggableRange: true,
},
}
helper.createRangeSlider(sliderConf)
})
afterEach(function() {
// to clean document listener
helper.fireMouseup()
})
it('should handle click and drag on minH correctly when mouse is on the middle', function() {
sinon.spy(helper.slider, 'positionTrackingHandle')
sinon.spy(helper.slider, 'callOnChange')
var event = helper.fireMousedown(helper.slider.minH, 0)
var expectedValue = 50
helper.moveMouseToValue(expectedValue)
expect(helper.scope.slider.min).to.equal(expectedValue)
expect(helper.slider.positionTrackingHandle.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(1)
})
it('should handle click and drag on maxH correctly when mouse is on the middle', function() {
sinon.spy(helper.slider, 'positionTrackingHandle')
sinon.spy(helper.slider, 'callOnChange')
var event = helper.fireMousedown(helper.slider.maxH, 0)
var expectedValue = 50
helper.moveMouseToValue(expectedValue)
expect(helper.scope.slider.max).to.equal(expectedValue)
expect(helper.slider.positionTrackingHandle.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(1)
})
it('should handle click and drag on minH and switch min/max if needed', function() {
var event = helper.fireMousedown(helper.slider.minH, 0)
var expectedValue = 80
helper.moveMouseToValue(expectedValue)
expect(helper.scope.slider.min).to.equal(60)
expect(helper.scope.slider.max).to.equal(80)
})
it('should handle click and drag on maxH and switch min/max if needed', function() {
var event = helper.fireMousedown(helper.slider.maxH, 0)
var expectedValue = 20
helper.moveMouseToValue(expectedValue)
expect(helper.scope.slider.min).to.equal(20)
expect(helper.scope.slider.max).to.equal(40)
})
it('should handle click on fullbar and move minH when click pos is nearer to minH', function() {
sinon.spy(helper.slider, 'positionTrackingHandle')
sinon.spy(helper.slider, 'callOnStart')
sinon.spy(helper.slider, 'callOnChange')
sinon.spy(helper.slider, 'focusElement')
var expectedValue = 10,
position = helper.getMousePosition(expectedValue)
var event = helper.fireMousedown(helper.slider.fullBar, position)
expect(helper.scope.slider.min).to.equal(expectedValue)
expect(helper.slider.tracking).to.equal('lowValue')
helper.slider.focusElement.calledWith(helper.slider.minH).should.be.true
expect(helper.slider.positionTrackingHandle.callCount).to.equal(1)
expect(helper.slider.callOnStart.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(1)
})
it('should handle click on fullbar and move maxH when click pos is nearer to maxH', function() {
sinon.spy(helper.slider, 'positionTrackingHandle')
sinon.spy(helper.slider, 'callOnStart')
sinon.spy(helper.slider, 'callOnChange')
sinon.spy(helper.slider, 'focusElement')
var expectedValue = 90,
position = helper.getMousePosition(expectedValue)
var event = helper.fireMousedown(helper.slider.fullBar, position)
expect(helper.scope.slider.max).to.equal(expectedValue)
expect(helper.slider.tracking).to.equal('highValue')
helper.slider.focusElement.calledWith(helper.slider.maxH).should.be.true
expect(helper.slider.positionTrackingHandle.callCount).to.equal(1)
expect(helper.slider.callOnStart.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(1)
})
it('should handle click on selbar and move whole range when moved within slider range', function() {
sinon.spy(helper.slider, 'positionTrackingBar')
sinon.spy(helper.slider, 'callOnStart')
sinon.spy(helper.slider, 'callOnChange')
sinon.spy(helper.slider, 'focusElement')
helper.fireMousedown(helper.slider.selBar, 0)
var moveValue = 10,
position = helper.slider.valueToPosition(moveValue)
helper.fireMousemove(position)
expect(helper.scope.slider.min).to.equal(50)
expect(helper.scope.slider.max).to.equal(70)
expect(helper.slider.tracking).to.equal('lowValue')
helper.slider.focusElement.calledWith(helper.slider.minH).should.be.true
expect(helper.slider.positionTrackingBar.callCount).to.equal(2)
expect(helper.slider.callOnStart.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(2)
})
it('should handle click on selbar and move move range when near 0 and moved left', function() {
helper.scope.slider.min = 10
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(-1000)
expect(helper.scope.slider.min).to.equal(0)
expect(helper.scope.slider.max).to.equal(50)
expect(helper.slider.tracking).to.equal('lowValue')
})
it("should handle click on selbar and don't move range when already at 0 and moved left", function() {
helper.scope.slider.min = 0
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(-100)
expect(helper.scope.slider.min).to.equal(0)
expect(helper.scope.slider.max).to.equal(60)
expect(helper.slider.tracking).to.equal('lowValue')
})
it('should handle click on selbar and move move range when near max and moved right', function() {
helper.scope.slider.max = 90
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(helper.slider.maxPos)
expect(helper.scope.slider.min).to.equal(50)
expect(helper.scope.slider.max).to.equal(100)
expect(helper.slider.tracking).to.equal('lowValue')
})
it("should handle click on selbar and don't move range when already at max and moved right", function() {
helper.scope.slider.max = 100
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(helper.slider.maxPos)
expect(helper.scope.slider.min).to.equal(40)
expect(helper.scope.slider.max).to.equal(100)
expect(helper.slider.tracking).to.equal('lowValue')
})
it('should a working positionTrackingBar', function() {
var newMin = 50,
newMax = 90,
minposition = Math.round(helper.slider.valueToPosition(newMin)),
maxposition = Math.round(helper.slider.valueToPosition(newMax))
helper.slider.positionTrackingBar(
newMin,
newMax,
minposition,
maxposition
)
expect(helper.scope.slider.min).to.equal(50)
expect(helper.scope.slider.max).to.equal(90)
expect(helper.slider.minH.css('left')).to.equal(minposition + 'px')
expect(helper.slider.maxH.css('left')).to.equal(maxposition + 'px')
})
it('should respect minLimit option', function() {
helper.scope.slider.options.minLimit = 20
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(-1000)
expect(helper.scope.slider.min).to.equal(20)
expect(helper.scope.slider.max).to.equal(40)
})
it('should respect maxLimit option', function() {
helper.scope.slider.options.maxLimit = 80
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(helper.slider.maxPos)
expect(helper.scope.slider.min).to.equal(60)
expect(helper.scope.slider.max).to.equal(80)
})
})
describe('Right to left Mouse controls - draggableRange Horizontal', function() {
var helper, RzSliderOptions, $rootScope, $timeout
beforeEach(module('test-helper'))
beforeEach(inject(function(
TestHelper,
_RzSliderOptions_,
_$rootScope_,
_$timeout_
) {
helper = TestHelper
RzSliderOptions = _RzSliderOptions_
$rootScope = _$rootScope_
$timeout = _$timeout_
}))
afterEach(function() {
helper.clean()
})
beforeEach(function() {
var sliderConf = {
min: 40,
max: 60,
options: {
floor: 0,
ceil: 100,
draggableRange: true,
rightToLeft: true,
},
}
helper.createRangeSlider(sliderConf)
})
afterEach(function() {
// to clean document listener
helper.fireMouseup()
})
it('should handle click and drag on minH correctly when mouse is on the middle', function() {
sinon.spy(helper.slider, 'positionTrackingHandle')
sinon.spy(helper.slider, 'callOnChange')
var event = helper.fireMousedown(helper.slider.minH, 0)
var expectedValue = 50,
position = helper.getMousePosition(expectedValue)
helper.fireMousemove(position)
expect(helper.scope.slider.min).to.equal(expectedValue)
expect(helper.slider.positionTrackingHandle.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(1)
})
it('should handle click and drag on maxH correctly when mouse is on the middle', function() {
sinon.spy(helper.slider, 'positionTrackingHandle')
sinon.spy(helper.slider, 'callOnChange')
var event = helper.fireMousedown(helper.slider.maxH, 0)
var expectedValue = 50,
position = helper.getMousePosition(expectedValue)
helper.fireMousemove(position)
expect(helper.scope.slider.max).to.equal(expectedValue)
expect(helper.slider.positionTrackingHandle.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(1)
})
it('should handle click and drag on minH and switch min/max if needed', function() {
var event = helper.fireMousedown(helper.slider.minH, 0)
var expectedValue = 80,
position = helper.getMousePosition(expectedValue)
helper.fireMousemove(position)
expect(helper.scope.slider.min).to.equal(60)
expect(helper.scope.slider.max).to.equal(80)
})
it('should handle click and drag on maxH and switch min/max if needed', function() {
var event = helper.fireMousedown(helper.slider.maxH, 0)
var expectedValue = 20,
position = helper.getMousePosition(expectedValue)
helper.fireMousemove(position)
expect(helper.scope.slider.min).to.equal(20)
expect(helper.scope.slider.max).to.equal(40)
})
it('should handle click on fullbar and move minH when click pos is nearer to minH', function() {
sinon.spy(helper.slider, 'positionTrackingHandle')
sinon.spy(helper.slider, 'callOnStart')
sinon.spy(helper.slider, 'callOnChange')
sinon.spy(helper.slider, 'focusElement')
var expectedValue = 10,
position = helper.getMousePosition(expectedValue)
var event = helper.fireMousedown(helper.slider.fullBar, position)
expect(helper.scope.slider.min).to.equal(expectedValue)
expect(helper.slider.tracking).to.equal('lowValue')
helper.slider.focusElement.calledWith(helper.slider.minH).should.be.true
expect(helper.slider.positionTrackingHandle.callCount).to.equal(1)
expect(helper.slider.callOnStart.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(1)
})
it('should handle click on fullbar and move maxH when click pos is nearer to maxH', function() {
sinon.spy(helper.slider, 'positionTrackingHandle')
sinon.spy(helper.slider, 'callOnStart')
sinon.spy(helper.slider, 'callOnChange')
sinon.spy(helper.slider, 'focusElement')
var expectedValue = 90,
position = helper.getMousePosition(expectedValue)
var event = helper.fireMousedown(helper.slider.fullBar, position)
expect(helper.scope.slider.max).to.equal(expectedValue)
expect(helper.slider.tracking).to.equal('highValue')
helper.slider.focusElement.calledWith(helper.slider.maxH).should.be.true
expect(helper.slider.positionTrackingHandle.callCount).to.equal(1)
expect(helper.slider.callOnStart.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(1)
})
it('should handle click on selbar and move whole range when moved within slider range', function() {
sinon.spy(helper.slider, 'positionTrackingBar')
sinon.spy(helper.slider, 'callOnStart')
sinon.spy(helper.slider, 'callOnChange')
sinon.spy(helper.slider, 'focusElement')
helper.fireMousedown(helper.slider.selBar, 0)
var moveValue = 10,
position =
helper.slider.maxPos - helper.slider.valueToPosition(moveValue)
helper.fireMousemove(position)
expect(helper.scope.slider.min).to.equal(30)
expect(helper.scope.slider.max).to.equal(50)
expect(helper.slider.tracking).to.equal('highValue')
helper.slider.focusElement.calledWith(helper.slider.maxH).should.be.true
expect(helper.slider.positionTrackingBar.callCount).to.equal(2)
expect(helper.slider.callOnStart.callCount).to.equal(1)
expect(helper.slider.callOnChange.callCount).to.equal(2)
})
it('should handle click on selbar and move move range when near 0 and moved right', function() {
helper.scope.slider.min = 10
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(1000)
expect(helper.scope.slider.min).to.equal(0)
expect(helper.scope.slider.max).to.equal(50)
expect(helper.slider.tracking).to.equal('highValue')
})
it("should handle click on selbar and don't move range when already at 0 and moved right", function() {
helper.scope.slider.min = 0
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(100)
expect(helper.scope.slider.min).to.equal(0)
expect(helper.scope.slider.max).to.equal(60)
expect(helper.slider.tracking).to.equal('highValue')
})
it('should handle click on selbar and move range when near max and moved left', function() {
helper.scope.slider.max = 90
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(-1000)
expect(helper.scope.slider.min).to.equal(50)
expect(helper.scope.slider.max).to.equal(100)
expect(helper.slider.tracking).to.equal('highValue')
})
it("should handle click on selbar and don't move range when already at max and moved left", function() {
helper.scope.slider.max = 100
helper.scope.$digest()
helper.fireMousedown(helper.slider.selBar, 0)
helper.fireMousemove(-1000)
expect(helper.scope.slider.min).to.equal(40)
expect(helper.scope.slider.max).to.equal(100)
expect(helper.slider.tracking).to.equal('highValue')
})
it('should a working positionTrackingBar', function() {
var newMin = 50,
newMax = 90,
minposition = Math.round(helper.slider.valueToPosition(newMin)),
maxposition = Math.round(helper.slider.valueToPosition(newMax))
helper.slider.positionTrackingBar(
newMin,
newMax,
minposition,
maxposition
)
expect(helper.scope.slider.min).to.equal(50)
expect(helper.scope.slider.max).to.equal(90)
expect(helper.slider.minH.css('left')).to.equal(minposition + 'px')
expect(helper.slider.maxH.css('left')).to.equal(maxposition + 'px')
})
})
})()