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); })); });