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

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

Issue 2588713002: Upstream Chrome on iOS source code [4/11]. (Closed)
Patch Set: Created 4 years 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
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
new file mode 100644
index 0000000000000000000000000000000000000000..c5b5488b62aa7f3aab835f313b3b4cc31ad8bc14
--- /dev/null
+++ b/ios/chrome/browser/ui/collection_view/collection_view_controller_unittest.mm
@@ -0,0 +1,141 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/collection_view/collection_view_controller.h"
+
+#include "base/ios/weak_nsobject.h"
+#import "base/mac/scoped_nsobject.h"
+#import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
+#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
+#import "ios/chrome/test/base/scoped_block_swizzler.h"
+#include "ios/chrome/test/block_cleanup_test.h"
+#import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// Checks that key methods are called.
+// CollectionViewItem can't easily be mocked via OCMock as one of the methods to
+// mock returns a Class type.
+@interface MockCollectionViewItem : CollectionViewItem
+@property(nonatomic, assign) BOOL configureCellCalled;
+@end
+
+@implementation MockCollectionViewItem
+
+@synthesize configureCellCalled = _configureCellCalled;
+
+- (void)configureCell:(MDCCollectionViewCell*)cell {
+ self.configureCellCalled = YES;
+ [super configureCell:cell];
+}
+
+@end
+
+namespace {
+
+typedef NS_ENUM(NSInteger, SectionIdentifier) {
+ SectionIdentifierFoo = kSectionIdentifierEnumZero,
+};
+
+typedef NS_ENUM(NSInteger, ItemType) {
+ ItemTypeFooBar = kItemTypeEnumZero,
+ ItemTypeFooBiz,
+};
+
+class CollectionViewControllerTest : public BlockCleanupTest {};
+
+} // namespace
+
+TEST_F(CollectionViewControllerTest, InitDefaultStyle) {
+ base::scoped_nsobject<CollectionViewController> controller(
+ [[CollectionViewController alloc]
+ initWithStyle:CollectionViewControllerStyleDefault]);
+ EXPECT_EQ(nil, controller.get().appBar);
+}
+
+TEST_F(CollectionViewControllerTest, InitAppBarStyle) {
+ base::scoped_nsobject<CollectionViewController> controller(
+ [[CollectionViewController alloc]
+ initWithStyle:CollectionViewControllerStyleAppBar]);
+ EXPECT_NE(nil, controller.get().appBar);
+}
+
+TEST_F(CollectionViewControllerTest, CellForItemAtIndexPath) {
+ base::scoped_nsobject<CollectionViewController> controller(
+ [[CollectionViewController alloc]
+ initWithStyle:CollectionViewControllerStyleDefault]);
+ [controller loadModel];
+
+ [[controller collectionViewModel]
+ addSectionWithIdentifier:SectionIdentifierFoo];
+ base::scoped_nsobject<MockCollectionViewItem> someItem(
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBar]);
+ [[controller collectionViewModel] addItem:someItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ ASSERT_EQ(NO, [someItem configureCellCalled]);
+ [controller collectionView:[controller collectionView]
+ cellForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
+ EXPECT_EQ(YES, [someItem configureCellCalled]);
+}
+
+TEST_F(CollectionViewControllerTest, ReconfigureCells) {
+ base::scoped_nsobject<CollectionViewController> controller(
+ [[CollectionViewController alloc]
+ initWithStyle:CollectionViewControllerStyleDefault]);
+ [controller loadModel];
+
+ CollectionViewModel* model = [controller collectionViewModel];
+ [model addSectionWithIdentifier:SectionIdentifierFoo];
+
+ base::scoped_nsobject<MockCollectionViewItem> firstReconfiguredItem(
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBar]);
+ [model addItem:firstReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ base::scoped_nsobject<MockCollectionViewItem> secondReconfiguredItem(
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz]);
+ [model addItem:secondReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ base::scoped_nsobject<MockCollectionViewItem> firstNonReconfiguredItem(
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz]);
+ [model addItem:firstNonReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ base::scoped_nsobject<MockCollectionViewItem> thirdReconfiguredItem(
+ [[MockCollectionViewItem alloc] initWithType:ItemTypeFooBiz]);
+ [model addItem:thirdReconfiguredItem
+ toSectionWithIdentifier:SectionIdentifierFoo];
+
+ base::scoped_nsobject<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.
+ base::scoped_nsobject<MDCCollectionViewCell> dummyCell(
+ [[MDCCollectionViewCell alloc] init]);
+ {
+ ScopedBlockSwizzler swizzler([UICollectionView class],
+ @selector(cellForItemAtIndexPath:),
+ ^(id self) {
+ return dummyCell.get();
+ });
+
+ NSArray* itemsToReconfigure = @[
+ firstReconfiguredItem, secondReconfiguredItem, thirdReconfiguredItem
+ ];
+ [controller reconfigureCellsForItems:itemsToReconfigure
+ inSectionWithIdentifier:SectionIdentifierFoo];
+ }
+
+ EXPECT_TRUE([firstReconfiguredItem configureCellCalled]);
+ EXPECT_TRUE([secondReconfiguredItem configureCellCalled]);
+ EXPECT_TRUE([thirdReconfiguredItem configureCellCalled]);
+
+ EXPECT_FALSE([firstNonReconfiguredItem configureCellCalled]);
+ EXPECT_FALSE([secondNonReconfiguredItem configureCellCalled]);
+}

Powered by Google App Engine
This is Rietveld 408576698