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

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: Address comments Created 3 years, 10 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..c8c1954f70f9db8714fca0fcc4a2a9e6d97673b9
--- /dev/null
+++ b/ios/chrome/browser/ui/reading_list/reading_list_view_controller_container_unittest.mm
@@ -0,0 +1,180 @@
+// 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 "base/threading/thread_task_runner_handle.h"
+#include "components/favicon/core/favicon_client.h"
+#include "components/favicon/core/favicon_service.h"
+#include "components/favicon/core/large_icon_service.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"
+
+namespace {
+
+#pragma mark - MockFaviconService
+
+// A mock FaviconService that emits an empty response.
+class MockFaviconService : public favicon::FaviconService {
+ public:
+ MockFaviconService() : FaviconService(nullptr, nullptr) {}
+
+ ~MockFaviconService() override {}
+
+ base::CancelableTaskTracker::TaskId GetLargestRawFaviconForPageURL(
+ const GURL& page_url,
+ const std::vector<int>& icon_types,
+ int minimum_size_in_pixels,
+ const favicon_base::FaviconRawBitmapCallback& callback,
+ base::CancelableTaskTracker* tracker) override {
+ favicon_base::FaviconRawBitmapResult mock_result;
+ return tracker->PostTask(base::ThreadTaskRunnerHandle::Get().get(),
+ FROM_HERE, base::Bind(callback, mock_result));
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MockFaviconService);
+};
+
+} // namespace
+
+#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]);
+ mock_favicon_service_.reset(new MockFaviconService());
+
+ reading_list_model_.reset(new ReadingListModelImpl(nullptr, nullptr));
+ large_icon_service_.reset(new favicon::LargeIconService(
+ mock_favicon_service_.get(), base::ThreadTaskRunnerHandle::Get()));
+ container_.reset([[ReadingListViewControllerContainer alloc]
+ initWithModel:reading_list_model_.get()
+ loader:loader_mock_
+ largeIconService:large_icon_service_.get()
+ readingListDownloadService:nil]);
+ }
+ ~ReadingListViewControllerContainerTest() override {}
+
+ ReadingListViewControllerContainer* GetContainer() { return container_; }
+
+ ReadingListModel* GetReadingListModel() { return reading_list_model_.get(); }
+ UrlLoaderStub* GetLoaderStub() { return loader_mock_; }
+ ReadingListViewController* GetAReadingListViewController() {
+ return [[[ReadingListViewController alloc]
+ initWithModel:reading_list_model_.get()
+ largeIconService:large_icon_service_.get()
+ readingListDownloadService:nil
+ toolbar:nil] autorelease];
+ }
+
+ private:
+ base::scoped_nsobject<ReadingListViewControllerContainer> container_;
+ std::unique_ptr<ReadingListModelImpl> reading_list_model_;
+ base::scoped_nsobject<UrlLoaderStub> loader_mock_;
+ std::unique_ptr<favicon::LargeIconService> large_icon_service_;
+ std::unique_ptr<MockFaviconService> mock_favicon_service_;
+};
+
+// Tests that the implementation of ReadingListViewController
+// openItemAtIndexPath opens the entry.
+TEST_F(ReadingListViewControllerContainerTest, OpenItem) {
+ // Setup.
+ 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]);
+
+ // Action.
+ [GetContainer() readingListViewController:GetAReadingListViewController()
+ openItem:item];
+
+ // 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