IGListKit/Tests/Objects/IGTestDelegateController.m
Tim Oliver b746af936d Added extra test case to IGTestDelegateController
Summary: Added making a call to the supplementary view data source in IGTestDelegateController so that codepath gets the same test exposure as the regular cell mechanism.

Reviewed By: candance

Differential Revision: D45004843

fbshipit-source-id: 6d3140ebc59da5ba4b7a151f6f104cdbd63418c2
2023-04-17 20:41:49 -07:00

113 lines
4.3 KiB
Objective-C

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import "IGTestDelegateController.h"
#import "IGTestCell.h"
#import "IGTestObject.h"
@implementation IGTestDelegateController
- (instancetype)init {
if (self = [super init]) {
_willDisplayCellIndexes = [NSCountedSet new];
_didEndDisplayCellIndexes = [NSCountedSet new];
_height = 10.0;
self.workingRangeDelegate = self;
}
return self;
}
- (NSInteger)numberOfItems {
if ([self.item.value isKindOfClass:[NSNumber class]]) {
return [self.item.value integerValue];
}
return 1;
}
- (CGSize)sizeForItemAtIndex:(NSInteger)index {
return CGSizeMake(self.collectionContext.containerSize.width, self.height);
}
- (UICollectionViewCell *)cellForItemAtIndex:(NSInteger)index {
IGTestCell *cell = [self.collectionContext dequeueReusableCellOfClass:IGTestCell.class
forSectionController:self atIndex:index];
[[cell label] setText:[NSString stringWithFormat:@"%@", self.item.value]];
[cell setDelegate:self];
if (self.cellConfigureBlock) {
self.cellConfigureBlock(self);
}
return cell;
}
- (void)didUpdateToObject:(id)object {
_updateCount++;
_item = object;
if (self.itemUpdateBlock) {
self.itemUpdateBlock();
}
}
- (id<IGListDisplayDelegate>)displayDelegate {
return self;
}
- (void)didSelectItemAtIndex:(NSInteger)index {}
#pragma mark - IGListDisplayDelegate
- (void)listAdapter:(IGListAdapter *)listAdapter willDisplaySectionController:(IGListSectionController *)sectionController {
self.willDisplayCount++;
}
- (void)listAdapter:(IGListAdapter *)listAdapter didEndDisplayingSectionController:(IGListSectionController *)sectionController {
self.didEndDisplayCount++;
}
- (void)listAdapter:(IGListAdapter *)listAdapter willDisplaySectionController:(IGListSectionController *)sectionController
cell:(UICollectionViewCell *)cell
atIndex:(NSInteger)index {
[self.willDisplayCellIndexes addObject:@(index)];
}
- (void)listAdapter:(IGListAdapter *)listAdapter didEndDisplayingSectionController:(IGListSectionController *)sectionController
cell:(UICollectionViewCell *)cell
atIndex:(NSInteger)index {
[self.didEndDisplayCellIndexes addObject:@(index)];
}
- (void)listAdapter:(IGListAdapter *)listAdapter didScrollSectionController:(IGListSectionController *)sectionController {}
#pragma mark - IGListWorkingRangeDelegate
- (void)listAdapter:(IGListAdapter *)listAdapter sectionControllerWillEnterWorkingRange:(IGListSectionController *)sectionController {
__unused UICollectionViewCell *cell = [self.collectionContext cellForItemAtIndex:0 sectionController:self];
__unused UIView *supplementaryView = [self.collectionContext viewForSupplementaryElementOfKind:UICollectionElementKindSectionHeader
atIndex:0
sectionController:self];
}
- (void)listAdapter:(IGListAdapter *)listAdapter sectionControllerDidExitWorkingRange:(IGListSectionController *)sectionController {}
#pragma mark - IGListTransitionDelegate
- (UICollectionViewLayoutAttributes *)listAdapter:(IGListAdapter *)listAdapter
customizedInitialLayoutAttributes:(UICollectionViewLayoutAttributes *)attributes
sectionController:(IGListSectionController *)sectionController
atIndex:(NSInteger)index {
attributes.center = CGPointMake(attributes.center.x + _initialAttributesOffset.x, attributes.center.y + _initialAttributesOffset.y);
return attributes;
}
- (UICollectionViewLayoutAttributes *)listAdapter:(IGListAdapter *)listAdapter
customizedFinalLayoutAttributes:(UICollectionViewLayoutAttributes *)attributes
sectionController:(IGListSectionController *)sectionController
atIndex:(NSInteger)index {
attributes.center = CGPointMake(attributes.center.x + _finalAttributesOffset.x, attributes.center.y + _finalAttributesOffset.y);
return attributes;
}
@end