refactor(ionSlideBox): use live nodeList to preserve ordering

This commit is contained in:
Andrew
2014-11-05 13:51:56 -07:00
parent debccaeaaa
commit 8b1bef3ea1
13 changed files with 237 additions and 348 deletions

View File

@@ -1,14 +1,23 @@
describe('$ionSlideBox controller', function() {
beforeEach(module('ionic'));
beforeEach(function() {
ionic.animationFrameThrottle = function(cb) {
return function() {
cb.apply(this, arguments);
};
};
});
function mockSlide() {
return {
onAdded: jasmine.createSpy('onAdded'),
onRemoved: jasmine.createSpy('onRemoved'),
function mockSlide(slideBoxCtrl) {
var slideCtrl = {
setState: jasmine.createSpy('setState'),
transform: jasmine.createSpy('transform')
};
var slide = angular.element('<ion-slide>');
slide.data('$ionSlideController', slideCtrl);
slideBoxCtrl.element.append(slide);
return slideCtrl;
}
function makeCtrl(locals) {
var ctrl;
@@ -21,62 +30,11 @@ describe('$ionSlideBox controller', function() {
return ctrl;
}
it('#add()', inject(function($rootScope, $timeout) {
var ctrl = makeCtrl();
var slide1 = mockSlide();
var slide2 = mockSlide();
expect(ctrl.selected()).toBe(-1);
ctrl.add(slide1);
expect(ctrl.selected()).toBe(0);
expect(ctrl.count()).toBe(1);
$timeout.flush();
expect(slide1.setState).toHaveBeenCalledWith('selected');
ctrl.add(slide2);
$rootScope.$apply();
expect(ctrl.selected()).toBe(0);
expect(ctrl.count()).toBe(2);
$timeout.flush();
expect(slide2.setState).toHaveBeenCalledWith('next');
}));
it('#remove()', function() {
var ctrl = makeCtrl();
var slide0, slide1, slide2;
ctrl.add(slide0 = mockSlide());
ctrl.add(slide1 = mockSlide());
ctrl.add(slide2 = mockSlide());
ctrl.select(1);
expect(ctrl.selected()).toBe(1);
ctrl.remove(slide1);
expect(ctrl.selected()).toBe(1);
expect(ctrl.at(1)).toBe(slide2);
ctrl.remove(slide2);
expect(ctrl.selected()).toBe(0);
});
it('#move()', function() {
var ctrl = makeCtrl();
var slide0, slide1;
ctrl.add(slide0 = mockSlide());
ctrl.add(slide1 = mockSlide());
expect(ctrl.at(1)).toBe(slide1);
ctrl.move(slide1, 0);
expect(ctrl.at(0)).toBe(slide1);
expect(ctrl.at(1)).toBe(slide0);
});
it('#onDrag()', function() {
var ctrl = makeCtrl();
var slide0, slide1, slide2;
ctrl.add(slide0 = mockSlide());
ctrl.add(slide1 = mockSlide());
ctrl.add(slide2 = mockSlide());
var slide0 = mockSlide(ctrl);
var slide1 = mockSlide(ctrl);
var slide2 = mockSlide(ctrl);
ctrl.select(1);
// Transforming forward should move current and next
@@ -98,10 +56,9 @@ describe('$ionSlideBox controller', function() {
it('#onDragEnd()', function() {
var ctrl = makeCtrl();
var slide0, slide1, slide2;
ctrl.add(slide0 = mockSlide());
ctrl.add(slide1 = mockSlide());
ctrl.add(slide2 = mockSlide());
var slide0 = mockSlide(ctrl);
var slide1 = mockSlide(ctrl);
var slide2 = mockSlide(ctrl);
ctrl.select(1);
// Greater than 0.5 should change slide
@@ -116,11 +73,9 @@ describe('$ionSlideBox controller', function() {
it('#isRelevant()', function() {
var ctrl = makeCtrl();
ctrl.add(mockSlide());
ctrl.add(mockSlide());
ctrl.add(mockSlide());
ctrl.add(mockSlide());
ctrl.add(mockSlide());
for (var i = 0; i < 5; i++) {
mockSlide(ctrl);
}
ctrl.loop(false);
ctrl.select(0);
@@ -139,9 +94,9 @@ describe('$ionSlideBox controller', function() {
it('#previous()', function() {
var ctrl = makeCtrl();
ctrl.add(mockSlide());
ctrl.add(mockSlide());
ctrl.add(mockSlide());
for (var i = 0; i < 3; i++) {
mockSlide(ctrl);
}
ctrl.loop(false);
ctrl.select(0);
@@ -158,9 +113,9 @@ describe('$ionSlideBox controller', function() {
it('#next()', function() {
var ctrl = makeCtrl();
ctrl.add(mockSlide());
ctrl.add(mockSlide());
ctrl.add(mockSlide());
for (var i = 0; i < 3; i++) {
mockSlide(ctrl);
}
ctrl.loop(false);
ctrl.select(2);

View File

@@ -12,23 +12,8 @@ describe('$ionSlide controller', function() {
return ctrl;
}
it('#onAdded()', function() {
var ctrl = makeCtrl();
expect(ctrl.state).toBeFalsy();
ctrl.onAdded(parent);
expect(ctrl.state).toBe('detached');
});
it('#onRemoved()', function() {
var ctrl = makeCtrl();
expect(ctrl.state).toBeFalsy();
ctrl.onRemoved();
expect(ctrl.state).toBe('detached');
});
it('#setState()', function() {
var ctrl = makeCtrl();
ctrl.onAdded();
ctrl.setState('selected');
expect(ctrl.element.attr('slide-state')).toBe('selected');

View File

@@ -1,7 +1,7 @@
describe('ionSlide directive', function() {
beforeEach(module('ionic'));
it('should add and remove itself from parent ctrl', inject(function($compile, $rootScope) {
it('should add and remove itself from parent ctrl', inject(function($compile, $rootScope, $timeout) {
var parent = $compile('<ion-scroll><ion-slide-box>' +
'<ion-slide>Hello</ion-slide>' +
'</ion-slide-box></ion-scroll>')($rootScope.$new());
@@ -15,7 +15,8 @@ describe('ionSlide directive', function() {
expect(slideBoxCtrl.count()).toBe(1);
expect(slideBoxCtrl.at(0)).toBe(slideCtrl);
slide.triggerHandler('$destroy');
slide.remove();
$timeout.flush();
expect(slideBoxCtrl.count()).toBe(0);
}));

View File

@@ -41,25 +41,6 @@ describe('ionSlideBox directive', function() {
expect(slideBoxCtrl.selected()).toBe(-1);
}));
it('should bind to selected attr to slide', inject(function($rootScope, $timeout) {
$rootScope.currentIndex = 2;
var slideBox = makeSlideBox('<ion-slide-box selected="$root.currentIndex">' +
'<ion-slide>A</ion-slide>' +
'<ion-slide>B</ion-slide>' +
'<ion-slide>C</ion-slide>' +
'</ion-slide-box>');
var slideBoxCtrl = slideBox.controller('ionSlideBox');
expect(slideBoxCtrl.selected()).toBe(2);
expect($rootScope.currentIndex).toBe(2);
$timeout.flush();
slideBoxCtrl.select(1);
$timeout.flush();
expect($rootScope.currentIndex).toBe(1);
}));
it('should loop depending on attr.loop', inject(function($rootScope) {
var slideBox = makeSlideBox('<ion-slide-box loop="shouldLoop">' +
'<ion-slide>A</ion-slide>' +

View File

@@ -1,5 +1,10 @@
describe('<ion-slide-pager> directive', function() {
beforeEach(module('ionic'));
beforeEach(function() {
ionic.animationFrameThrottle = function(cb) {
return function() { cb.apply(this, arguments); };
};
});
it('should create pager elements', inject(function($compile, $rootScope, $timeout) {
var el = $compile('<ion-slide-box>' +
@@ -19,7 +24,7 @@ describe('<ion-slide-pager> directive', function() {
$rootScope.$apply('showThird = false');
$timeout.flush();
expect(pager.find('.slider-pager-page').length).toBe(2);
}));
it('should by default select on click', inject(function($compile, $rootScope, $timeout) {
@@ -39,7 +44,7 @@ describe('<ion-slide-pager> directive', function() {
pagers.eq(2).click();
expect(slideBoxCtrl.selected()).toBe(2);
}));
it('should allow custom click action which overrides default', inject(function($compile, $rootScope, $timeout) {
@@ -62,7 +67,7 @@ describe('<ion-slide-pager> directive', function() {
pagers.eq(2).click();
expect(slideBoxCtrl.selected()).toBe(0);
expect($rootScope.click).toHaveBeenCalledWith(2);
}));
});