Chromium Code Reviews| Index: ios/chrome/browser/ui/reading_list/reading_list_view_controller_container_unittest.mm |
| diff --git a/ios/chrome/browser/ui/reading_list/reading_list_view_controller_container_unittest.mm b/ios/chrome/browser/ui/reading_list/reading_list_view_controller_container_unittest.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f42f328a8d258a81b68dc0feedf445db68d6e024 |
| --- /dev/null |
| +++ b/ios/chrome/browser/ui/reading_list/reading_list_view_controller_container_unittest.mm |
| @@ -0,0 +1,148 @@ |
| +// 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/reading_list/reading_list_view_controller_container.h" |
| + |
| +#include "base/mac/scoped_nsobject.h" |
| +#include "base/memory/ptr_util.h" |
| +#include "components/reading_list/ios/reading_list_entry.h" |
| +#include "components/reading_list/ios/reading_list_model_impl.h" |
| +#import "ios/chrome/browser/ui/collection_view/collection_view_model.h" |
| +#import "ios/chrome/browser/ui/reading_list/reading_list_collection_view_item.h" |
| +#import "ios/chrome/browser/ui/reading_list/reading_list_view_controller.h" |
| +#import "ios/chrome/browser/ui/url_loader.h" |
| +#include "ios/web/public/referrer.h" |
| +#import "ios/web/public/test/web_test_with_web_state.h" |
| +#import "third_party/ocmock/OCMock/OCMock.h" |
| +#import "third_party/ocmock/gtest_support.h" |
| +#include "ui/base/page_transition_types.h" |
| + |
| +#pragma mark - UrlLoader |
| + |
| +@interface UrlLoaderStub : NSObject<UrlLoader> { |
| + GURL _url; |
| + web::Referrer _referrer; |
| +} |
| + |
| +@property(nonatomic, readonly) const GURL& url; |
| +@property(nonatomic, readonly) const web::Referrer& referrer; |
| +@property(nonatomic, assign) ui::PageTransition transition; |
| +@property(nonatomic, assign) BOOL rendererInitiated; |
| + |
| +@end |
| + |
| +@implementation UrlLoaderStub |
| + |
| +@synthesize transition = _transition; |
| +@synthesize rendererInitiated = _rendererInitiated; |
| + |
| +- (void)loadURL:(const GURL&)url |
| + referrer:(const web::Referrer&)referrer |
| + transition:(ui::PageTransition)transition |
| + rendererInitiated:(BOOL)rendererInitiated { |
| + _url = url; |
| + _referrer = referrer; |
| + self.transition = transition; |
| + self.rendererInitiated = rendererInitiated; |
| +} |
| + |
| +- (void)webPageOrderedOpen:(const GURL&)url |
| + referrer:(const web::Referrer&)referrer |
| + windowName:(NSString*)windowName |
| + inBackground:(BOOL)inBackground |
| + appendTo:(OpenPosition)appendTo { |
| +} |
| + |
| +- (void)webPageOrderedOpen:(const GURL&)url |
| + referrer:(const web::Referrer&)referrer |
| + windowName:(NSString*)windowName |
| + inIncognito:(BOOL)inIncognito |
| + inBackground:(BOOL)inBackground |
| + appendTo:(OpenPosition)appendTo { |
| +} |
| + |
| +- (void)loadSessionTab:(const sessions::SessionTab*)sessionTab { |
| +} |
| + |
| +- (void)loadJavaScriptFromLocationBar:(NSString*)script { |
| +} |
| + |
| +- (const GURL&)url { |
| + return _url; |
| +} |
| + |
| +- (const web::Referrer&)referrer { |
| + return _referrer; |
| +} |
| + |
| +@end |
| + |
| +#pragma mark - ReadingListViewControllerContainerTest |
| + |
| +class ReadingListViewControllerContainerTest : public web::WebTestWithWebState { |
| + public: |
| + ReadingListViewControllerContainerTest() { |
| + loader_mock_.reset([[UrlLoaderStub alloc] init]); |
| + reading_list_model_ = |
| + base::MakeUnique<ReadingListModelImpl>(nullptr, nullptr); |
| + container_.reset([[ReadingListViewControllerContainer alloc] |
| + initWithModel:reading_list_model_.get() |
| + loader:loader_mock_ |
| + largeIconService:nullptr |
| + readingListDownloadService:nil]); |
| + } |
| + ~ReadingListViewControllerContainerTest() override {} |
| + |
| + ReadingListViewControllerContainer* GetContainer() { return container_; } |
| + |
| + ReadingListModel* GetReadingListModel() { return reading_list_model_.get(); } |
| + UrlLoaderStub* GetLoaderStub() { return loader_mock_; } |
| + |
| + private: |
| + base::scoped_nsobject<ReadingListViewControllerContainer> container_; |
| + std::unique_ptr<ReadingListModelImpl> reading_list_model_; |
| + base::scoped_nsobject<UrlLoaderStub> loader_mock_; |
| +}; |
| + |
| +// Tests that the implementation of ReadingListViewController |
| +// openItemAtIndexPath opens the correct entry. |
|
Olivier
2017/02/01 12:22:05
You have only one entry.
What would be incorrect e
gambard
2017/02/01 17:13:37
The "correct entry" was about the reading list vie
|
| +TEST_F(ReadingListViewControllerContainerTest, OpenItem) { |
| + // Setup. |
| + ReadingListViewControllerContainer* container = GetContainer(); |
| + [container.collectionController stopObservingReadingListModel]; |
| + |
| + GURL url("https://chromium.org"); |
| + std::string title("Chromium"); |
| + std::unique_ptr<ReadingListEntry> entry = |
| + base::MakeUnique<ReadingListEntry>(url, title); |
| + ReadingListModel* model = GetReadingListModel(); |
| + model->AddEntry(url, title, reading_list::ADDED_VIA_CURRENT_APP); |
| + |
| + base::scoped_nsobject<ReadingListCollectionViewItem> item( |
| + [[ReadingListCollectionViewItem alloc] |
| + initWithType:0 |
| + attributesProvider:nil |
| + url:url |
| + distillationState:ReadingListEntry::PROCESSED]); |
| + |
| + NSIndexPath* indexPath = [NSIndexPath indexPathForItem:2 inSection:1]; |
| + id collectionViewModelMock = |
| + [OCMockObject mockForClass:[CollectionViewModel class]]; |
| + [[[collectionViewModelMock stub] andReturn:item] itemAtIndexPath:indexPath]; |
| + id collectionViewMock = |
| + [OCMockObject partialMockForObject:container.collectionController]; |
| + [[[collectionViewMock stub] andReturn:collectionViewModelMock] |
| + collectionViewModel]; |
| + |
| + // Action. |
| + [GetContainer() readingListViewController:collectionViewMock |
| + openItemAtIndexPath:indexPath]; |
| + |
| + // Tests. |
| + UrlLoaderStub* loader = GetLoaderStub(); |
| + EXPECT_EQ(url, loader.url); |
| + EXPECT_TRUE(ui::PageTransitionCoreTypeIs(ui::PAGE_TRANSITION_AUTO_BOOKMARK, |
| + loader.transition)); |
| + EXPECT_EQ(NO, loader.rendererInitiated); |
| +} |