mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-06 06:58:26 +00:00
Added test coverage to collection view and collection view layout
Summary: Adds additional test coverage to the collection view and collection view layout test suites Reviewed By: candance Differential Revision: D45004591 fbshipit-source-id: 21587df6f9595cb54481067322aae6443e089152
This commit is contained in:
parent
97120d288d
commit
7d9ccfc9ea
2 changed files with 97 additions and 0 deletions
|
|
@ -12,9 +12,18 @@
|
|||
#import "IGLayoutTestDataSource.h"
|
||||
#import "IGLayoutTestItem.h"
|
||||
#import "IGLayoutTestSection.h"
|
||||
#import "IGListAdapter.h"
|
||||
#import "IGListAdapterProxy.h"
|
||||
#import "IGListAdapterUpdater.h"
|
||||
#import "IGListCollectionViewLayoutInternal.h"
|
||||
#import "IGListTestHelpers.h"
|
||||
|
||||
@interface IGListCollectionViewLayout (Tests)
|
||||
|
||||
- (NSString *)_classNameForDelegate:(id<UICollectionViewDelegateFlowLayout>)delegate sectionIndex:(NSInteger)section;
|
||||
|
||||
@end
|
||||
|
||||
@interface IGListCollectionViewLayoutTests : XCTestCase
|
||||
|
||||
@property (nonatomic, strong) IGListCollectionViewLayout *layout;
|
||||
|
|
@ -84,6 +93,24 @@ static const CGRect kTestFrame = (CGRect){{0, 0}, {100, 100}};
|
|||
[self.collectionView layoutIfNeeded];
|
||||
}
|
||||
|
||||
- (void)test_whenCreatingViaCoder_thatObjectIsValid {
|
||||
XCTAssertNotNil([[IGListCollectionViewLayout alloc] initWithCoder:[NSCoder new]]);
|
||||
}
|
||||
|
||||
- (void)test_whenApplyingSameBoundsValue_thatLayoutIsntInvalidated {
|
||||
[self setUpWithStickyHeaders:YES topInset:0];
|
||||
[self prepareWithData:nil];
|
||||
XCTAssertFalse([self.layout shouldInvalidateLayoutForBoundsChange:self.collectionView.bounds]);
|
||||
}
|
||||
|
||||
- (void)test_whenApplyingInvalidatedSectionLogic_thatMinimumInvalidatedSectionIsCorrect {
|
||||
[self setUpWithStickyHeaders:YES topInset:0];
|
||||
[self prepareWithData:nil];
|
||||
[self.layout didModifySection:NSNotFound];
|
||||
[self.layout didModifySection:0];
|
||||
[self.layout didModifySection:NSNotFound];
|
||||
}
|
||||
|
||||
- (void)test_whenEmptyData_thatContentSizeZero {
|
||||
[self setUpWithStickyHeaders:YES topInset:0];
|
||||
|
||||
|
|
@ -1221,4 +1248,34 @@ static const CGRect kTestFrame = (CGRect){{0, 0}, {100, 100}};
|
|||
IGAssertEqualFrame([self cellForSection:0 item:2].frame, 40, 0, 20, 20);
|
||||
}
|
||||
|
||||
#pragma mark - Internal debugging
|
||||
|
||||
- (void)test_withDelegateNameDebugger_thatReturnedNamesAreValid {
|
||||
[self setUpWithStickyHeaders:NO topInset:0];
|
||||
|
||||
// Test with the regular delegate
|
||||
XCTAssertTrue([[self.layout _classNameForDelegate:(id)self.collectionView.delegate
|
||||
sectionIndex:0]
|
||||
isEqualToString:@"IGLayoutTestDataSource"]);
|
||||
|
||||
// Test with a proxy providing a new adapter
|
||||
IGListAdapter *adapter = [[IGListAdapter alloc] initWithUpdater:[IGListAdapterUpdater new] viewController:nil];
|
||||
IGListAdapterProxy *proxy = [[IGListAdapterProxy alloc] initWithCollectionViewTarget:self.collectionView.delegate
|
||||
scrollViewTarget:nil
|
||||
interceptor:adapter];
|
||||
XCTAssertNil([self.layout _classNameForDelegate:(id)proxy sectionIndex:0]);
|
||||
|
||||
// Test with a proxy with an invalid adapter
|
||||
IGListAdapterProxy *invalidProxy = [[IGListAdapterProxy alloc] initWithCollectionViewTarget:self.collectionView.delegate
|
||||
scrollViewTarget:nil
|
||||
interceptor:(id)[NSObject new]];
|
||||
XCTAssertNil([self.layout _classNameForDelegate:(id)invalidProxy sectionIndex:0]);
|
||||
}
|
||||
|
||||
- (void)test_withSupplementalViewAttributes_thatOOBErrorsAreHandled {
|
||||
[self setUpWithStickyHeaders:NO topInset:0];
|
||||
XCTAssertNil([self.layout layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader
|
||||
atIndexPath:[NSIndexPath indexPathForItem:10 inSection:10]]);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -134,6 +134,33 @@
|
|||
IGAssertEqualFrame([self cellForSection:2 item:0].frame, 40, 0, 20, 20);
|
||||
}
|
||||
|
||||
- (void)test_whenMoveItem_thatLayoutPartiallyUpdates {
|
||||
self.dataSource.sections = @[
|
||||
genLayoutTestSection(@[genLayoutTestItem(CGSizeMake(10, 10))]),
|
||||
genLayoutTestSection(@[genLayoutTestItem(CGSizeMake(20, 20))]),
|
||||
genLayoutTestSection(@[genLayoutTestItem(CGSizeMake(30, 30))])
|
||||
];
|
||||
[self.collectionView reloadData];
|
||||
[self.collectionView layoutIfNeeded];
|
||||
|
||||
NSArray *sections = @[genLayoutTestItem(CGSizeMake(10, 10)), genLayoutTestItem(CGSizeMake(20, 20))];
|
||||
self.dataSource.sections = @[
|
||||
genLayoutTestSection(sections),
|
||||
genLayoutTestSection(@[]),
|
||||
genLayoutTestSection(@[genLayoutTestItem(CGSizeMake(20, 20))]),
|
||||
];
|
||||
|
||||
[self.collectionView moveItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:1]
|
||||
toIndexPath:[NSIndexPath indexPathForItem:1 inSection:0]];
|
||||
|
||||
// check that section 0 wasn't updated
|
||||
IGAssertEqualFrame([self cellForSection:0 item:0].frame, 0, 0, 10, 10);
|
||||
// check that section 1 was updated
|
||||
IGAssertEqualFrame([self cellForSection:0 item:1].frame, 10, 0, 20, 20);
|
||||
// check that section 2 was updated
|
||||
IGAssertEqualFrame([self cellForSection:2 item:0].frame, 30, 0, 20, 20);
|
||||
}
|
||||
|
||||
#pragma mark - Batch
|
||||
|
||||
- (void)test_whenInsertDeleteMoveSection_thatLayoutPartiallyUpdates {
|
||||
|
|
@ -178,6 +205,19 @@
|
|||
}];
|
||||
}
|
||||
|
||||
- (void)test_whenInsertingNilSection_thatExecutionCompletesCleanly {
|
||||
self.dataSource.sections = @[
|
||||
genLayoutTestSection(@[genLayoutTestItem(CGSizeMake(10, 10))])
|
||||
];
|
||||
[self.collectionView reloadData];
|
||||
[self.collectionView layoutIfNeeded];
|
||||
|
||||
[self.collectionView insertSections:[NSIndexSet indexSet]];
|
||||
|
||||
// check that section 0 wasn't updated
|
||||
IGAssertEqualFrame([self cellForSection:0 item:0].frame, 0, 0, 10, 10);
|
||||
}
|
||||
|
||||
#pragma mark - Helpers
|
||||
|
||||
- (UICollectionViewCell *)cellForSection:(NSInteger)section item:(NSInteger)item {
|
||||
|
|
|
|||
Loading…
Reference in a new issue