Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Unified Diff: ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm

Issue 2738743005: Add a way to reconfigure cell from IndexPaths (Closed)
Patch Set: Add a comment Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/chrome/browser/ui/collection_view/collection_view_controller.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm
diff --git a/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm b/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm
index d2318fb8c83e5c3d466e448901c863b5bcd53aa3..aaaeeb9175a19f12ce0a38fccd0f69043e1e764b 100644
--- a/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm
@@ -44,7 +44,73 @@ typedef NS_ENUM(NSInteger, ItemType) {
ItemTypeFooBiz,
};
-class CollectionViewControllerTest : public BlockCleanupTest {};
+typedef void (^ReconfigureBlock)(CollectionViewController*,
+ NSArray*,
+ SectionIdentifier);
+
+class CollectionViewControllerTest : public BlockCleanupTest {
+ public:
+ void TestReconfigureBlock(ReconfigureBlock block) {
+ // Setup.
+ CollectionViewController* controller = [[CollectionViewController alloc]
+ initWithStyle:CollectionViewControllerStyleDefault];
+ [controller loadModel];
+
+ CollectionViewModel* model = [controller collectionViewModel];
+ [model addSectionWithIdentifier:SectionIdentifierFoo];
+
+ MockCollectionViewItem* firstReconfiguredItem =
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBar];
+ [model addItem:firstReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ MockCollectionViewItem* secondReconfiguredItem =
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz];
+ [model addItem:secondReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ MockCollectionViewItem* firstNonReconfiguredItem =
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz];
+ [model addItem:firstNonReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ MockCollectionViewItem* thirdReconfiguredItem =
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz];
+ [model addItem:thirdReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ MockCollectionViewItem* secondNonReconfiguredItem =
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz];
+ [model addItem:secondNonReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ // The collection view is not visible on screen, so it has not created any
+ // of its cells. Swizzle |cellsForItemAtIndexPath:| and inject an
+ // implementation for testing that always returns a non-nil cell.
+ MDCCollectionViewCell* dummyCell = [[MDCCollectionViewCell alloc] init];
+ {
+ ScopedBlockSwizzler swizzler([UICollectionView class],
+ @selector(cellForItemAtIndexPath:),
+ ^(id self) {
+ return dummyCell;
+ });
+
+ NSArray* itemsToReconfigure = @[
+ firstReconfiguredItem, secondReconfiguredItem, thirdReconfiguredItem
+ ];
+ // Action.
+ block(controller, itemsToReconfigure, SectionIdentifierFoo);
+ }
+
+ // Tests.
+ EXPECT_TRUE([firstReconfiguredItem configureCellCalled]);
+ EXPECT_TRUE([secondReconfiguredItem configureCellCalled]);
+ EXPECT_TRUE([thirdReconfiguredItem configureCellCalled]);
+
+ EXPECT_FALSE([firstNonReconfiguredItem configureCellCalled]);
+ EXPECT_FALSE([secondNonReconfiguredItem configureCellCalled]);
+ }
+};
} // namespace
@@ -79,60 +145,30 @@ TEST_F(CollectionViewControllerTest, CellForItemAtIndexPath) {
}
TEST_F(CollectionViewControllerTest, ReconfigureCells) {
- CollectionViewController* controller = [[CollectionViewController alloc]
- initWithStyle:CollectionViewControllerStyleDefault];
- [controller loadModel];
-
- CollectionViewModel* model = [controller collectionViewModel];
- [model addSectionWithIdentifier:SectionIdentifierFoo];
-
- MockCollectionViewItem* firstReconfiguredItem =
- [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBar];
- [model addItem:firstReconfiguredItem
- toSectionWithIdentifier:SectionIdentifierFoo];
-
- MockCollectionViewItem* secondReconfiguredItem =
- [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz];
- [model addItem:secondReconfiguredItem
- toSectionWithIdentifier:SectionIdentifierFoo];
-
- MockCollectionViewItem* firstNonReconfiguredItem =
- [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz];
- [model addItem:firstNonReconfiguredItem
- toSectionWithIdentifier:SectionIdentifierFoo];
-
- MockCollectionViewItem* thirdReconfiguredItem =
- [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz];
- [model addItem:thirdReconfiguredItem
- toSectionWithIdentifier:SectionIdentifierFoo];
-
- MockCollectionViewItem* secondNonReconfiguredItem =
- [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz];
- [model addItem:secondNonReconfiguredItem
- toSectionWithIdentifier:SectionIdentifierFoo];
-
- // The collection view is not visible on screen, so it has not created any of
- // its cells. Swizzle |cellsForItemAtIndexPath:| and inject an implementation
- // for testing that always returns a non-nil cell.
- MDCCollectionViewCell* dummyCell = [[MDCCollectionViewCell alloc] init];
- {
- ScopedBlockSwizzler swizzler([UICollectionView class],
- @selector(cellForItemAtIndexPath:),
- ^(id self) {
- return dummyCell;
- });
-
- NSArray* itemsToReconfigure = @[
- firstReconfiguredItem, secondReconfiguredItem, thirdReconfiguredItem
- ];
+ TestReconfigureBlock(^void(CollectionViewController* controller,
+ NSArray* itemsToReconfigure,
+ SectionIdentifier sectionIdentifier) {
[controller reconfigureCellsForItems:itemsToReconfigure
- inSectionWithIdentifier:SectionIdentifierFoo];
- }
-
- EXPECT_TRUE([firstReconfiguredItem configureCellCalled]);
- EXPECT_TRUE([secondReconfiguredItem configureCellCalled]);
- EXPECT_TRUE([thirdReconfiguredItem configureCellCalled]);
+ inSectionWithIdentifier:sectionIdentifier];
+ });
+}
- EXPECT_FALSE([firstNonReconfiguredItem configureCellCalled]);
- EXPECT_FALSE([secondNonReconfiguredItem configureCellCalled]);
+TEST_F(CollectionViewControllerTest, ReconfigureCellsWithIndexPath) {
+ TestReconfigureBlock(^void(CollectionViewController* controller,
+ NSArray* itemsToReconfigure,
+ SectionIdentifier sectionIdentifier) {
+ // More setup.
+ NSMutableArray* indexPaths = [NSMutableArray array];
+ for (CollectionViewItem* item : itemsToReconfigure) {
+ NSIndexPath* indexPath =
+ [controller.collectionViewModel indexPathForItem:item
+ inSectionWithIdentifier:sectionIdentifier];
+ if (indexPath) {
+ [indexPaths addObject:indexPath];
+ }
+ }
+
+ // Action.
+ [controller reconfigureCellsAtIndexPaths:indexPaths];
+ });
}
« no previous file with comments | « ios/chrome/browser/ui/collection_view/collection_view_controller.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698