Unit tests for -scrollToObject horizontal end position

Summary:
Fixes #238

Try to finish what I started 😂
Closes https://github.com/Instagram/IGListKit/pull/247

Differential Revision: D4220011

Pulled By: rnystrom

fbshipit-source-id: 9f4e1bd4f112f69f601c83d6604dc18bc27f0c68
This commit is contained in:
Bofei Zhu 2016-11-22 06:38:27 -08:00 committed by Facebook Github Bot
parent f1a1b941d0
commit 4231235620
6 changed files with 141 additions and 6 deletions

View file

@ -62,6 +62,10 @@
828540461DDFF59C00118B94 /* IGListGridCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 828540441DDFF59C00118B94 /* IGListGridCollectionViewLayout.m */; };
828540481DDFF5D400118B94 /* IGListGridCollectionViewLayoutTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 828540471DDFF5D400118B94 /* IGListGridCollectionViewLayoutTests.m */; };
828540491DDFF5D400118B94 /* IGListGridCollectionViewLayoutTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 828540471DDFF5D400118B94 /* IGListGridCollectionViewLayoutTests.m */; };
8285404C1DE40C6E00118B94 /* IGListTestHorizontalSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 8285404B1DE40C6E00118B94 /* IGListTestHorizontalSection.m */; };
8285404D1DE40C6E00118B94 /* IGListTestHorizontalSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 8285404B1DE40C6E00118B94 /* IGListTestHorizontalSection.m */; };
828540501DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 8285404F1DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m */; };
828540511DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 8285404F1DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m */; };
829D7BAA1DD1819000549816 /* IGListSectionMapTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 829D7BA81DD1816400549816 /* IGListSectionMapTests.m */; };
88144F071D870EDC007C7F66 /* IGListAdapterE2ETests.m in Sources */ = {isa = PBXBuildFile; fileRef = 88144EE21D870EDC007C7F66 /* IGListAdapterE2ETests.m */; };
88144F081D870EDC007C7F66 /* IGListAdapterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 88144EE31D870EDC007C7F66 /* IGListAdapterTests.m */; };
@ -289,6 +293,10 @@
828540431DDFF59C00118B94 /* IGListGridCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGListGridCollectionViewLayout.h; sourceTree = "<group>"; };
828540441DDFF59C00118B94 /* IGListGridCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListGridCollectionViewLayout.m; sourceTree = "<group>"; };
828540471DDFF5D400118B94 /* IGListGridCollectionViewLayoutTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListGridCollectionViewLayoutTests.m; sourceTree = "<group>"; };
8285404A1DE40C6E00118B94 /* IGListTestHorizontalSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGListTestHorizontalSection.h; sourceTree = "<group>"; };
8285404B1DE40C6E00118B94 /* IGListTestHorizontalSection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListTestHorizontalSection.m; sourceTree = "<group>"; };
8285404E1DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGListTestAdapterHorizontalDataSource.h; sourceTree = "<group>"; };
8285404F1DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListTestAdapterHorizontalDataSource.m; sourceTree = "<group>"; };
829D7BA81DD1816400549816 /* IGListSectionMapTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListSectionMapTests.m; sourceTree = "<group>"; };
841726B542A3E9A4BD48946F /* Pods-IGListKit-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IGListKit-tvOSTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-IGListKit-tvOSTests/Pods-IGListKit-tvOSTests.debug.xcconfig"; sourceTree = "<group>"; };
88144EE21D870EDC007C7F66 /* IGListAdapterE2ETests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListAdapterE2ETests.m; sourceTree = "<group>"; };
@ -443,12 +451,16 @@
children = (
88144EF11D870EDC007C7F66 /* IGListTestAdapterDataSource.h */,
88144EF21D870EDC007C7F66 /* IGListTestAdapterDataSource.m */,
8285404E1DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.h */,
8285404F1DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m */,
8240C7F91DC2F6CF00B3AAE7 /* IGListTestAdapterStoryboardDataSource.h */,
8240C7FA1DC2F6CF00B3AAE7 /* IGListTestAdapterStoryboardDataSource.m */,
88144EF31D870EDC007C7F66 /* IGListTestOffsettingLayout.h */,
88144EF41D870EDC007C7F66 /* IGListTestOffsettingLayout.m */,
88144EF51D870EDC007C7F66 /* IGListTestSection.h */,
88144EF61D870EDC007C7F66 /* IGListTestSection.m */,
8285404A1DE40C6E00118B94 /* IGListTestHorizontalSection.h */,
8285404B1DE40C6E00118B94 /* IGListTestHorizontalSection.m */,
8240C7F61DC2F3FB00B3AAE7 /* IGListTestStoryboardSection.h */,
8240C7F71DC2F3FB00B3AAE7 /* IGListTestStoryboardSection.m */,
88144EF71D870EDC007C7F66 /* IGListTestUICollectionViewDataSource.h */,
@ -1042,7 +1054,9 @@
828540491DDFF5D400118B94 /* IGListGridCollectionViewLayoutTests.m in Sources */,
885FE22F1DC51B76009CE2B4 /* IGListDiffSwiftTests.swift in Sources */,
885FE23F1DC51B86009CE2B4 /* IGTestObject.m in Sources */,
828540511DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m in Sources */,
885FE2371DC51B76009CE2B4 /* IGListWorkingRangeHandlerTests.m in Sources */,
8285404D1DE40C6E00118B94 /* IGListTestHorizontalSection.m in Sources */,
885FE2381DC51B86009CE2B4 /* IGListTestAdapterDataSource.m in Sources */,
885FE2341DC51B76009CE2B4 /* IGListSingleNibItemControllerTests.m in Sources */,
885FE2391DC51B86009CE2B4 /* IGListTestOffsettingLayout.m in Sources */,
@ -1114,7 +1128,9 @@
88144F1A1D870EDC007C7F66 /* IGTestObject.m in Sources */,
88144F0B1D870EDC007C7F66 /* IGListDiffSwiftTests.swift in Sources */,
88144F191D870EDC007C7F66 /* IGTestDelegateDataSource.m in Sources */,
828540501DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m in Sources */,
88144F0C1D870EDC007C7F66 /* IGListDiffTests.m in Sources */,
8285404C1DE40C6E00118B94 /* IGListTestHorizontalSection.m in Sources */,
88144F0A1D870EDC007C7F66 /* IGListBatchUpdateDataTests.m in Sources */,
26271C8C1DAE96740073E116 /* IGListSingleNibItemControllerTests.m in Sources */,
829D7BAA1DD1819000549816 /* IGListSectionMapTests.m in Sources */,

View file

@ -16,6 +16,7 @@
#import "IGListAdapterInternal.h"
#import "IGListTestAdapterDataSource.h"
#import "IGListTestAdapterHorizontalDataSource.h"
#import "IGListTestSection.h"
#import "IGTestSupplementarySource.h"
#import "IGTestNibSupplementaryView.h"
@ -562,23 +563,26 @@ XCTAssertEqual(CGPointEqualToPoint(point, p), YES); \
- (void)test_whenScrollHorizontallyToItem {
// # of items for each object == [item integerValue], so @2 has 2 items (cells)
self.dataSource.objects = @[@1, @2, @3, @4, @5, @6];
IGListTestAdapterHorizontalDataSource *dataSource = [[IGListTestAdapterHorizontalDataSource alloc] init];
self.adapter.dataSource = dataSource;
dataSource.objects = @[@1, @2, @3, @4, @5, @6];
self.layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
[self.adapter reloadDataWithCompletion:nil];
XCTAssertEqual([self.collectionView numberOfSections], 6);
[self.adapter scrollToObject:@1 supplementaryKinds:nil scrollDirection:UICollectionViewScrollDirectionHorizontal scrollPosition:UICollectionViewScrollPositionNone animated:NO];
IGAssertEqualPoint([self.collectionView contentOffset], 0, 0);
[self.adapter scrollToObject:@2 supplementaryKinds:nil scrollDirection:UICollectionViewScrollDirectionHorizontal scrollPosition:UICollectionViewScrollPositionNone animated:NO];
IGAssertEqualPoint([self.collectionView contentOffset], 100, 0);
IGAssertEqualPoint([self.collectionView contentOffset], 10, 0);
[self.adapter scrollToObject:@3 supplementaryKinds:nil scrollDirection:UICollectionViewScrollDirectionHorizontal scrollPosition:UICollectionViewScrollPositionNone animated:NO];
IGAssertEqualPoint([self.collectionView contentOffset], 200, 0);
IGAssertEqualPoint([self.collectionView contentOffset], 30, 0);
[self.adapter scrollToObject:@6 supplementaryKinds:nil scrollDirection:UICollectionViewScrollDirectionHorizontal scrollPosition:UICollectionViewScrollPositionNone animated:NO];
IGAssertEqualPoint([self.collectionView contentOffset], 500, 0);
IGAssertEqualPoint([self.collectionView contentOffset], 150, 0);
[self.adapter scrollToObject:@6 supplementaryKinds:nil scrollDirection:UICollectionViewScrollDirectionHorizontal scrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
IGAssertEqualPoint([self.collectionView contentOffset], 500, 0);
IGAssertEqualPoint([self.collectionView contentOffset], 105, 0);
[self.adapter scrollToObject:@6 supplementaryKinds:nil scrollDirection:UICollectionViewScrollDirectionHorizontal scrollPosition:UICollectionViewScrollPositionRight animated:NO];
IGAssertEqualPoint([self.collectionView contentOffset], 500, 0);
IGAssertEqualPoint([self.collectionView contentOffset], 60, 0);
self.layout.scrollDirection = UICollectionViewScrollDirectionVertical;
self.adapter.dataSource = self.dataSource;
}
- (void)test_whenScrollToItem_thatSupplementarySourceSupportsSingleHeader {

View file

@ -0,0 +1,21 @@
/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import <Foundation/Foundation.h>
#import <IGListKit/IGListAdapterDataSource.h>
@interface IGListTestAdapterHorizontalDataSource : NSObject <IGListAdapterDataSource>
// array of numbers which is then passed to -[IGListTestSection setItems:]
@property (nonatomic, strong) NSArray <NSNumber *> *objects;
@property (nonatomic, strong) UIView *backgroundView;
@end

View file

@ -0,0 +1,31 @@
/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "IGListTestAdapterHorizontalDataSource.h"
#import <IGListKit/IGListAdapter.h>
#import "IGListTestHorizontalSection.h"
@implementation IGListTestAdapterHorizontalDataSource
- (NSArray *)objectsForListAdapter:(IGListAdapter *)listAdapter {
return self.objects;
}
- (IGListSectionController <IGListSectionType> *)listAdapter:(IGListAdapter *)listAdapter sectionControllerForObject:(id)object {
IGListTestHorizontalSection *list = [[IGListTestHorizontalSection alloc] init];
return list;
}
- (nullable UIView *)emptyViewForListAdapter:(IGListAdapter *)listAdapter {
return self.backgroundView;
}
@end

View file

@ -0,0 +1,21 @@
/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import <UIKit/UIKit.h>
#import <IGListKit/IGListSectionController.h>
#import <IGListKit/IGListSectionType.h>
@interface IGListTestHorizontalSection : IGListSectionController <IGListSectionType>
@property (nonatomic, assign) NSInteger items;
@property (nonatomic, assign) BOOL wasSelected;
@end

View file

@ -0,0 +1,42 @@
/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "IGListTestHorizontalSection.h"
@implementation IGListTestHorizontalSection
- (NSArray <Class> *)cellClasses {
return @[UICollectionViewCell.class];
}
- (NSInteger)numberOfItems {
return self.items;
}
- (CGSize)sizeForItemAtIndex:(NSInteger)index {
return CGSizeMake(10, 100);
}
- (UICollectionViewCell *)cellForItemAtIndex:(NSInteger)index {
return [self.collectionContext dequeueReusableCellOfClass:UICollectionViewCell.class
forSectionController:self
atIndex:index];
}
- (void)didUpdateToObject:(id)object {
if ([object isKindOfClass:[NSNumber class]]) {
self.items = [object integerValue];
}
}
- (void)didSelectItemAtIndex:(NSInteger)index {
self.wasSelected = YES;
}
@end