From d7a6fc084764cc387cfa50398e6cee9c376fb579 Mon Sep 17 00:00:00 2001 From: Zhisheng Huang Date: Wed, 4 Dec 2019 15:30:33 -0800 Subject: [PATCH] Add a flag to control how the IGSectionObject's isEqualToDiffable: is implemented Summary: In the Feed view, all the -isEqualToDiffable: implementation only checks the pk, a.k.a the identifier. Let's mimic that behavior. Reviewed By: calimarkus Differential Revision: D18714064 fbshipit-source-id: e1fe9624da2997ecc7ca9b684ddd471d77b7564c --- .../IGListTestUICollectionViewDataSource.h | 5 ++++ .../IGListTestUICollectionViewDataSource.m | 30 +++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) 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; }