mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
refactor(ionSlideBox): use live nodeList to preserve ordering
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
}));
|
||||
|
||||
|
||||
@@ -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>' +
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
}));
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user