diff --git a/Tests/Objects/IGListTestUICollectionViewDataSource.h b/Tests/Objects/IGListTestUICollectionViewDataSource.h index 6a790e16..91d7d4bc 100644 --- a/Tests/Objects/IGListTestUICollectionViewDataSource.h +++ b/Tests/Objects/IGListTestUICollectionViewDataSource.h @@ -19,6 +19,11 @@ + (instancetype)sectionWithObjects:(NSArray *)objects identifier:(NSString *)identifier; +/** + @param usesIdentifierForDiffable YES if we only use the `identifier` for -isEqualToDiffableObject. NO then we compares both the `identifier` as well as `objects`. + */ ++ (instancetype)sectionWithObjects:(NSArray *)objects identifier:(NSString *)identifier usesIdentifierForDiffable:(BOOL)usesIdentifierForDiffable; + @end @interface IGListTestUICollectionViewDataSource : NSObject diff --git a/Tests/Objects/IGListTestUICollectionViewDataSource.m b/Tests/Objects/IGListTestUICollectionViewDataSource.m index cda06c9f..2dfbfbad 100644 --- a/Tests/Objects/IGListTestUICollectionViewDataSource.m +++ b/Tests/Objects/IGListTestUICollectionViewDataSource.m @@ -9,18 +9,26 @@ #import "IGListTestUICollectionViewDataSource.h" +#import + @implementation IGSectionObject { NSString *_identifier; + BOOL _usesIdentifierForDiffable; } + (instancetype)sectionWithObjects:(NSArray *)objects { - return [IGSectionObject sectionWithObjects:objects identifier:[NSUUID UUID].UUIDString]; + return [IGSectionObject sectionWithObjects:objects identifier:[NSUUID UUID].UUIDString usesIdentifierForDiffable:NO]; } + (instancetype)sectionWithObjects:(NSArray *)objects identifier:(NSString *)identifier { + return [IGSectionObject sectionWithObjects:objects identifier:identifier usesIdentifierForDiffable:NO]; +} + ++ (instancetype)sectionWithObjects:(NSArray *)objects identifier:(NSString *)identifier usesIdentifierForDiffable:(BOOL)usesIdentifierForDiffable { IGSectionObject *object = [[IGSectionObject alloc] init]; object.objects = objects; object->_identifier = [identifier copy]; + object->_usesIdentifierForDiffable = usesIdentifierForDiffable; return object; } @@ -34,8 +42,24 @@ if (object == self) { return YES; } else if ([object isKindOfClass:IGSectionObject.class]) { - return (self.objects && [self.objects isEqualToArray:[object objects]]) - || (!self.objects && ![object objects]); + IGSectionObject *sectionObject = (IGSectionObject *)object; + if (_usesIdentifierForDiffable) { + return [_identifier isEqualToString:sectionObject->_identifier]; + } else { + return [self isEqual:object]; + } + } else { + return NO; + } +} + +- (BOOL)isEqual:(id)object { + if (object == self) { + return YES; + } else if ([object isKindOfClass:IGSectionObject.class]) { + IGSectionObject *sectionObject = (IGSectionObject *)object; + return ([self.objects isEqualToArray:sectionObject.objects] + && [_identifier isEqualToString:sectionObject->_identifier]); } else { return NO; }