mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
feat(collectionRepeat): other children of ion-content element fit in
Closes #1920. Closes #1866. Closes #1380.
This commit is contained in:
@@ -106,16 +106,16 @@ describe('collectionRepeat directive', function() {
|
||||
|
||||
it('should error if list is not an array and is truthy', function() {
|
||||
var el = setup('collection-repeat="item in items" collection-item-height="50"');
|
||||
expect(function() {
|
||||
expect(function() {
|
||||
el.scope().$apply('items = "string"');
|
||||
}).toThrow();
|
||||
expect(function() {
|
||||
expect(function() {
|
||||
el.scope().$apply('items = 123');
|
||||
}).toThrow();
|
||||
expect(function() {
|
||||
expect(function() {
|
||||
el.scope().$apply('items = {}');
|
||||
}).toThrow();
|
||||
expect(function() {
|
||||
expect(function() {
|
||||
el.scope().$apply('items = []');
|
||||
}).not.toThrow();
|
||||
});
|
||||
@@ -128,11 +128,11 @@ describe('collectionRepeat directive', function() {
|
||||
repeatManager.resize.reset();
|
||||
|
||||
el.scope().$apply('items = [ 1,2,3 ]');
|
||||
expect(dataSource.setData).toHaveBeenCalledWith(el.scope().items);
|
||||
expect(dataSource.setData).toHaveBeenCalledWith(el.scope().items, [], []);
|
||||
expect(repeatManager.resize.callCount).toBe(1);
|
||||
expect(scrollView.resize.callCount).toBe(1);
|
||||
el.scope().$apply('items = null');
|
||||
expect(dataSource.setData).toHaveBeenCalledWith(null);
|
||||
expect(dataSource.setData).toHaveBeenCalledWith(null, [], []);
|
||||
expect(repeatManager.resize.callCount).toBe(2);
|
||||
expect(scrollView.resize.callCount).toBe(2);
|
||||
});
|
||||
@@ -147,7 +147,7 @@ describe('collectionRepeat directive', function() {
|
||||
el.scope().items = [1,2,3];
|
||||
|
||||
ionic.trigger('resize', { target: window });
|
||||
expect(dataSource.setData).toHaveBeenCalledWith(el.scope().items);
|
||||
expect(dataSource.setData).toHaveBeenCalledWith(el.scope().items, [], []);
|
||||
expect(repeatManager.resize.callCount).toBe(1);
|
||||
expect(scrollView.resize.callCount).toBe(1);
|
||||
});
|
||||
|
||||
@@ -98,11 +98,11 @@ describe('ionicInfiniteScroll directive', function() {
|
||||
].forEach(function(opts) {
|
||||
|
||||
describe('with scrollingX='+opts.scrollingX+', scrollingY='+opts.scrollingY, function() {
|
||||
it('should default to 1%', function() {
|
||||
it('should default to 2.5%', function() {
|
||||
var el = setup('', {}, opts);
|
||||
expect(ctrl.getMaxScroll()).toEqual({
|
||||
left: opts.scrollingX ? scrollLeftMaxValue * 0.99 : -1,
|
||||
top: opts.scrollingY ? scrollTopMaxValue * 0.99 : -1
|
||||
left: opts.scrollingX ? scrollLeftMaxValue * 0.975 : -1,
|
||||
top: opts.scrollingY ? scrollTopMaxValue * 0.975 : -1
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -21,6 +21,9 @@ describe('$collectionDataSource service', function() {
|
||||
cb( $compile(template || '<div>')(scope) );
|
||||
};
|
||||
dataSource = new $collectionDataSource(options);
|
||||
dataSource.dataStartIndex = 0;
|
||||
dataSource.beforeSiblings = [];
|
||||
dataSource.afterSiblings = [];
|
||||
});
|
||||
return dataSource;
|
||||
}
|
||||
@@ -148,6 +151,7 @@ describe('$collectionDataSource service', function() {
|
||||
keyExpr: 'value'
|
||||
});
|
||||
source.data = ['a', 'b', 'c'];
|
||||
source.dimensions = ['a','b','c'];
|
||||
spyOn(source, 'getItem').andCallFake(function() {
|
||||
return { scope: $rootScope.$new() };
|
||||
});
|
||||
@@ -242,15 +246,15 @@ describe('$collectionDataSource service', function() {
|
||||
describe('.getLength()', function() {
|
||||
it('should return 0 by default', function() {
|
||||
var source = setup();
|
||||
source.data = null;
|
||||
source.dimensions = null;
|
||||
expect(source.getLength()).toBe(0);
|
||||
});
|
||||
|
||||
it('should return data length', function() {
|
||||
it('should return dimensions length', function() {
|
||||
var source = setup();
|
||||
source.data = [1,2,3];
|
||||
source.dimensions = [1,2,3];
|
||||
expect(source.getLength()).toBe(3);
|
||||
source.data = [];
|
||||
source.dimensions = [];
|
||||
expect(source.getLength()).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -180,7 +180,7 @@ describe('collectionRepeatManager service', function() {
|
||||
manager.secondaryScrollSize = function() {
|
||||
return 100;
|
||||
};
|
||||
var result = manager.calculateDimensions();
|
||||
var result = manager.calculateDimensions().dimensions;
|
||||
expect(result[0].primarySize).toBe(20);
|
||||
expect(result[0].secondarySize).toBe(100);
|
||||
expect(result[0].primaryPos).toBe(0);
|
||||
@@ -214,7 +214,7 @@ describe('collectionRepeatManager service', function() {
|
||||
manager.secondaryScrollSize = function() {
|
||||
return 90;
|
||||
};
|
||||
var result = manager.calculateDimensions();
|
||||
var result = manager.calculateDimensions().dimensions;
|
||||
expect(result[0].primarySize).toBe(30);
|
||||
expect(result[0].secondarySize).toBe(30);
|
||||
expect(result[0].primaryPos).toBe(0);
|
||||
@@ -251,7 +251,11 @@ describe('collectionRepeatManager service', function() {
|
||||
it('should work without data', function() {
|
||||
var manager = setup();
|
||||
spyOn(manager, 'render');
|
||||
spyOn(manager, 'calculateDimensions').andReturn([]);
|
||||
spyOn(manager, 'calculateDimensions').andReturn({
|
||||
dimensions: [],
|
||||
beforeSize: 0,
|
||||
totalSize: 0
|
||||
});
|
||||
spyOn(manager, 'setCurrentIndex');
|
||||
manager.resize();
|
||||
expect(manager.dimensions).toEqual([]);
|
||||
@@ -261,9 +265,13 @@ describe('collectionRepeatManager service', function() {
|
||||
});
|
||||
it('should work with data', function() {
|
||||
var manager = setup();
|
||||
spyOn(manager, 'calculateDimensions').andReturn([{
|
||||
primaryPos: 100, primarySize: 30
|
||||
}]);
|
||||
spyOn(manager, 'calculateDimensions').andReturn({
|
||||
dimensions: [{
|
||||
primaryPos: 100, primarySize: 30
|
||||
}],
|
||||
beforeSize: 0,
|
||||
totalSize: 130
|
||||
});
|
||||
manager.resize();
|
||||
expect(manager.viewportSize).toBe(130);
|
||||
});
|
||||
@@ -430,12 +438,12 @@ describe('collectionRepeatManager service', function() {
|
||||
});
|
||||
manager.resize(); //triggers render
|
||||
|
||||
//it should render (items that fit * items per row) with one extra row at end
|
||||
expect(Object.keys(manager.renderedItems).length).toBe(18);
|
||||
for (var i = 0; i < 18; i++) {
|
||||
//it should render (items that fit * items per row) with three extra row at end
|
||||
expect(Object.keys(manager.renderedItems).length).toBe(20);
|
||||
for (var i = 0; i < 20; i++) {
|
||||
expect(manager.renderedItems[i]).toBe(true);
|
||||
}
|
||||
expect(manager.renderedItems[18]).toBeUndefined();
|
||||
expect(manager.renderedItems[20]).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should render items in the middle of the screen', function() {
|
||||
@@ -449,32 +457,15 @@ describe('collectionRepeatManager service', function() {
|
||||
manager.resize();
|
||||
var startIndex = 17;
|
||||
var bufferStartIndex = 14; //one row of buffer before the start
|
||||
var bufferEndIndex = 35; //start + 17 + 6
|
||||
var bufferEndIndex = 37; //start + 17 + 6
|
||||
|
||||
expect(Object.keys(manager.renderedItems).length).toBe(22);
|
||||
expect(Object.keys(manager.renderedItems).length).toBe(24);
|
||||
for (var i = bufferStartIndex; i <= bufferEndIndex; i++) {
|
||||
expect(manager.renderedItems[i]).toBe(true);
|
||||
}
|
||||
expect(manager.renderedItems[bufferStartIndex - 1]).toBeUndefined();
|
||||
expect(manager.renderedItems[bufferEndIndex + 1]).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should remove items outside the range', function() {
|
||||
var manager = mockRendering({
|
||||
itemWidth: 3,
|
||||
itemHeight: 20,
|
||||
scrollWidth: 10,
|
||||
scrollHeight: 100
|
||||
});
|
||||
manager.resize();
|
||||
manager.removeItem.reset();
|
||||
manager.renderedItems = { 17: true, 18: true, 19: true };
|
||||
//resize() re-renders everything, need to just do a normal rerender
|
||||
manager.render();
|
||||
expect(manager.removeItem.callCount).toBe(2);
|
||||
expect(manager.removeItem).toHaveBeenCalledWith('18');
|
||||
expect(manager.removeItem).toHaveBeenCalledWith('19');
|
||||
});
|
||||
});
|
||||
|
||||
describe('.renderItem()', function() {
|
||||
|
||||
Reference in New Issue
Block a user