describe('ionSlideBox directive', function() {
beforeEach(module('ionic'));
beforeEach(function() {
spyOn(ionic, 'requestAnimationFrame').andCallFake(function(cb) { cb(); });
});
function makeSlideBox(template) {
var el;
inject(function($compile, $rootScope) {
el = $compile('' + template + '')($rootScope);
$rootScope.$apply();
});
return el.find('ion-slide-box');
}
it('should bind to selected attr', inject(function($rootScope, $timeout) {
var slideBox = makeSlideBox('' +
'A' +
'B' +
'C' +
'');
var slideBoxCtrl = slideBox.controller('ionSlideBox');
expect(slideBoxCtrl.selected()).toBe(0);
$timeout.flush();
expect($rootScope.currentIndex).toBe(0);
$rootScope.$apply('currentIndex = 2');
expect(slideBoxCtrl.selected()).toBe(2);
slideBoxCtrl.select(1);
$timeout.flush();
expect($rootScope.currentIndex).toBe(1);
// No out of bounds
expect(slideBoxCtrl.selected()).toBe(1);
$rootScope.$apply('currentIndex = -1');
expect(slideBoxCtrl.selected()).toBe(1);
$rootScope.$apply('currentIndex = 3');
expect(slideBoxCtrl.selected()).toBe(1);
}));
it('should loop depending on attr.loop', inject(function($rootScope) {
var slideBox = makeSlideBox('' +
'A' +
'B' +
'C' +
'');
$rootScope.$apply('shouldLoop = true');
var slideBoxCtrl = slideBox.controller('ionSlideBox');
expect(slideBoxCtrl.selected()).toBe(0);
slideBoxCtrl.select(slideBoxCtrl.previous());
expect(slideBoxCtrl.selected()).toBe(2);
slideBoxCtrl.select(slideBoxCtrl.next());
expect(slideBoxCtrl.selected()).toBe(0);
// Disable looping
$rootScope.$apply('shouldLoop = false');
// No loop at previous boundary
expect(slideBoxCtrl.selected()).toBe(0);
slideBoxCtrl.select(slideBoxCtrl.previous());
expect(slideBoxCtrl.selected()).toBe(0);
// No loop at next boundary
slideBoxCtrl.select(2);
expect(slideBoxCtrl.selected()).toBe(2);
slideBoxCtrl.select(slideBoxCtrl.next());
expect(slideBoxCtrl.selected()).toBe(2);
}));
it('should autoplay depending on attr.autoPlay', inject(function($rootScope, $interval) {
var slideBox = makeSlideBox('' +
'A' +
'B' +
'C' +
'');
$rootScope.$apply('shouldLoop = false; playInterval = 1000;');
var slideBoxCtrl = slideBox.controller('ionSlideBox');
expect(slideBoxCtrl.selected()).toBe(0);
$interval.flush(1000);
expect(slideBoxCtrl.selected()).toBe(1);
$interval.flush(1000);
expect(slideBoxCtrl.selected()).toBe(2);
// Should not go beyond limit with loop disabled
$interval.flush(1000);
expect(slideBoxCtrl.selected()).toBe(2);
// Should loop
$rootScope.$apply('shouldLoop = true');
$interval.flush(1000);
expect(slideBoxCtrl.selected()).toBe(0);
// Should deactivate and stop looping
$rootScope.$apply('playInterval = -1');
$interval.flush();
expect(slideBoxCtrl.selected()).toBe(0);
}));
});