| // Copyright 2017 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/content_suggestions/cells/content_suggestions_favicon_item.h" |
| |
| #include "base/mac/foundation_util.h" |
| #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_favicon_internal_cell.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #import "third_party/ocmock/OCMock/OCMock.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| namespace { |
| |
| ContentSuggestionsFaviconInternalCell* GetInnerCell( |
| NSInteger cellIndex, |
| ContentSuggestionsFaviconCell* outerCell) { |
| UICollectionViewCell* innerCell = [outerCell.collectionView.dataSource |
| collectionView:outerCell.collectionView |
| cellForItemAtIndexPath:[NSIndexPath indexPathForItem:cellIndex |
| inSection:0]]; |
| |
| EXPECT_EQ([ContentSuggestionsFaviconInternalCell class], [innerCell class]); |
| return base::mac::ObjCCastStrict<ContentSuggestionsFaviconInternalCell>( |
| innerCell); |
| } |
| |
| #pragma mark - Tests |
| |
| // Tests that configureCell: set all the fields of the cell. |
| TEST(ContentSuggestionsFaviconItemTest, CellIsConfigured) { |
| id delegateMock = [OCMockObject |
| mockForProtocol:@protocol(ContentSuggestionsFaviconCellDelegate)]; |
| ContentSuggestionsFaviconItem* item = |
| [[ContentSuggestionsFaviconItem alloc] initWithType:0]; |
| item.delegate = delegateMock; |
| |
| ContentSuggestionsFaviconCell* cell = [[[item cellClass] alloc] init]; |
| ASSERT_EQ([ContentSuggestionsFaviconCell class], [cell class]); |
| |
| [item configureCell:cell]; |
| EXPECT_EQ(delegateMock, cell.delegate); |
| } |
| |
| // Tests that the favicon added to the item are correctly passed to the inner |
| // collection view. |
| TEST(ContentSuggestionsFaviconItemTest, AddAFavicon) { |
| ContentSuggestionsFaviconItem* item = |
| [[ContentSuggestionsFaviconItem alloc] initWithType:0]; |
| UIImage* image1 = [[UIImage alloc] init]; |
| NSString* title1 = @"testTitle1"; |
| UIImage* image2 = [[UIImage alloc] init]; |
| NSString* title2 = @"testTitle2"; |
| [item addFavicon:image1 withTitle:title1]; |
| [item addFavicon:image2 withTitle:title2]; |
| |
| ContentSuggestionsFaviconCell* cell = [[[item cellClass] alloc] init]; |
| |
| [item configureCell:cell]; |
| |
| ContentSuggestionsFaviconInternalCell* faviconInternalCell1 = |
| GetInnerCell(0, cell); |
| EXPECT_EQ(image1, faviconInternalCell1.faviconView.image); |
| EXPECT_TRUE([title1 isEqualToString:faviconInternalCell1.titleLabel.text]); |
| |
| ContentSuggestionsFaviconInternalCell* faviconInternalCell2 = |
| GetInnerCell(1, cell); |
| EXPECT_EQ(image2, faviconInternalCell2.faviconView.image); |
| EXPECT_TRUE([title2 isEqualToString:faviconInternalCell2.titleLabel.text]); |
| } |
| |
| // Tests that adding nil favicon does nothing. |
| TEST(ContentSuggestionsFaviconItemTest, AddNilFavicon) { |
| ContentSuggestionsFaviconItem* item = |
| [[ContentSuggestionsFaviconItem alloc] initWithType:0]; |
| UIImage* image = [[UIImage alloc] init]; |
| NSString* title = @"testTitle1"; |
| UIImage* nilImage = nil; |
| NSString* nilTitle = nil; |
| [item addFavicon:nilImage withTitle:title]; |
| [item addFavicon:image withTitle:nilTitle]; |
| |
| ContentSuggestionsFaviconCell* cell = [[[item cellClass] alloc] init]; |
| |
| [item configureCell:cell]; |
| |
| EXPECT_EQ(0, |
| [cell.collectionView.dataSource collectionView:cell.collectionView |
| numberOfItemsInSection:0]); |
| } |
| |
| } // namespace |