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

Unified Diff: ios/chrome/browser/ui/reading_list/reading_list_view_controller_container_unittest.mm

Issue 2659693004: Add context menu when long press on a reading list entry (Closed)
Patch Set: Cleanup Created 3 years, 11 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
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.
+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);
+}

Powered by Google App Engine
This is Rietveld 408576698