OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "ios/chrome/browser/ui/reading_list/reading_list_coordinator.h" | 5 #import "ios/chrome/browser/ui/reading_list/reading_list_coordinator.h" |
6 | 6 |
7 #include "base/mac/scoped_nsobject.h" | |
8 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
9 #include "base/threading/thread_task_runner_handle.h" | 8 #include "base/threading/thread_task_runner_handle.h" |
10 #include "base/time/default_clock.h" | 9 #include "base/time/default_clock.h" |
11 #include "components/favicon/core/large_icon_service.h" | 10 #include "components/favicon/core/large_icon_service.h" |
12 #include "components/favicon/core/test/mock_favicon_service.h" | 11 #include "components/favicon/core/test/mock_favicon_service.h" |
13 #include "components/reading_list/core/reading_list_entry.h" | 12 #include "components/reading_list/core/reading_list_entry.h" |
14 #include "components/reading_list/core/reading_list_model_impl.h" | 13 #include "components/reading_list/core/reading_list_model_impl.h" |
15 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" | 14 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" |
16 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" | 15 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" |
17 #import "ios/chrome/browser/ui/reading_list/reading_list_collection_view_control
ler.h" | 16 #import "ios/chrome/browser/ui/reading_list/reading_list_collection_view_control
ler.h" |
18 #import "ios/chrome/browser/ui/reading_list/reading_list_collection_view_item.h" | 17 #import "ios/chrome/browser/ui/reading_list/reading_list_collection_view_item.h" |
19 #import "ios/chrome/browser/ui/reading_list/reading_list_mediator.h" | 18 #import "ios/chrome/browser/ui/reading_list/reading_list_mediator.h" |
20 #import "ios/chrome/browser/ui/reading_list/reading_list_utils.h" | 19 #import "ios/chrome/browser/ui/reading_list/reading_list_utils.h" |
21 #import "ios/chrome/browser/ui/url_loader.h" | 20 #import "ios/chrome/browser/ui/url_loader.h" |
22 #include "ios/web/public/referrer.h" | 21 #include "ios/web/public/referrer.h" |
23 #import "ios/web/public/test/web_test_with_web_state.h" | 22 #import "ios/web/public/test/web_test_with_web_state.h" |
24 #include "testing/gmock/include/gmock/gmock.h" | 23 #include "testing/gmock/include/gmock/gmock.h" |
25 #import "third_party/ocmock/OCMock/OCMock.h" | 24 #import "third_party/ocmock/OCMock/OCMock.h" |
26 #import "third_party/ocmock/gtest_support.h" | 25 #import "third_party/ocmock/gtest_support.h" |
27 #include "ui/base/page_transition_types.h" | 26 #include "ui/base/page_transition_types.h" |
28 | 27 |
| 28 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 29 #error "This file requires ARC support." |
| 30 #endif |
| 31 |
29 using favicon::PostReply; | 32 using favicon::PostReply; |
30 using testing::_; | 33 using testing::_; |
31 | 34 |
32 #pragma mark - UrlLoader | 35 #pragma mark - UrlLoader |
33 | 36 |
34 @interface UrlLoaderStub : NSObject<UrlLoader> { | 37 @interface UrlLoaderStub : NSObject<UrlLoader> { |
35 GURL _url; | 38 GURL _url; |
36 web::Referrer _referrer; | 39 web::Referrer _referrer; |
37 } | 40 } |
38 | 41 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 return _referrer; | 88 return _referrer; |
86 } | 89 } |
87 | 90 |
88 @end | 91 @end |
89 | 92 |
90 #pragma mark - ReadingListCoordinatorTest | 93 #pragma mark - ReadingListCoordinatorTest |
91 | 94 |
92 class ReadingListCoordinatorTest : public web::WebTestWithWebState { | 95 class ReadingListCoordinatorTest : public web::WebTestWithWebState { |
93 public: | 96 public: |
94 ReadingListCoordinatorTest() { | 97 ReadingListCoordinatorTest() { |
95 loader_mock_.reset([[UrlLoaderStub alloc] init]); | 98 loader_mock_ = [[UrlLoaderStub alloc] init]; |
96 | 99 |
97 TestChromeBrowserState::Builder builder; | 100 TestChromeBrowserState::Builder builder; |
98 browser_state_ = builder.Build(); | 101 browser_state_ = builder.Build(); |
99 | 102 |
100 reading_list_model_.reset(new ReadingListModelImpl( | 103 reading_list_model_.reset(new ReadingListModelImpl( |
101 nullptr, nullptr, base::MakeUnique<base::DefaultClock>())); | 104 nullptr, nullptr, base::MakeUnique<base::DefaultClock>())); |
102 mediator_.reset( | 105 mediator_ = |
103 [[ReadingListMediator alloc] initWithModel:reading_list_model_.get()]); | 106 [[ReadingListMediator alloc] initWithModel:reading_list_model_.get()]; |
104 large_icon_service_.reset(new favicon::LargeIconService( | 107 large_icon_service_.reset(new favicon::LargeIconService( |
105 &mock_favicon_service_, base::ThreadTaskRunnerHandle::Get(), | 108 &mock_favicon_service_, base::ThreadTaskRunnerHandle::Get(), |
106 /*image_fetcher=*/nullptr)); | 109 /*image_fetcher=*/nullptr)); |
107 coordinator_.reset([[ReadingListCoordinator alloc] | 110 coordinator_ = [[ReadingListCoordinator alloc] |
108 initWithBaseViewController:nil | 111 initWithBaseViewController:nil |
109 browserState:browser_state_.get() | 112 browserState:browser_state_.get() |
110 loader:loader_mock_]); | 113 loader:loader_mock_]; |
111 | 114 |
112 EXPECT_CALL(mock_favicon_service_, | 115 EXPECT_CALL(mock_favicon_service_, |
113 GetLargestRawFaviconForPageURL(_, _, _, _, _)) | 116 GetLargestRawFaviconForPageURL(_, _, _, _, _)) |
114 .WillRepeatedly(PostReply<5>(favicon_base::FaviconRawBitmapResult())); | 117 .WillRepeatedly(PostReply<5>(favicon_base::FaviconRawBitmapResult())); |
115 } | 118 } |
116 | 119 |
117 ~ReadingListCoordinatorTest() override {} | 120 ~ReadingListCoordinatorTest() override {} |
118 | 121 |
119 ReadingListCoordinator* GetCoordinator() { return coordinator_; } | 122 ReadingListCoordinator* GetCoordinator() { return coordinator_; } |
120 | 123 |
121 ReadingListModel* GetReadingListModel() { return reading_list_model_.get(); } | 124 ReadingListModel* GetReadingListModel() { return reading_list_model_.get(); } |
122 UrlLoaderStub* GetLoaderStub() { return loader_mock_; } | 125 UrlLoaderStub* GetLoaderStub() { return loader_mock_; } |
123 | 126 |
124 ReadingListCollectionViewController* | 127 ReadingListCollectionViewController* |
125 GetAReadingListCollectionViewController() { | 128 GetAReadingListCollectionViewController() { |
126 return [[[ReadingListCollectionViewController alloc] | 129 return [[ReadingListCollectionViewController alloc] |
127 initWithDataSource:mediator_ | 130 initWithDataSource:mediator_ |
128 largeIconService:large_icon_service_.get() | 131 largeIconService:large_icon_service_.get() |
129 toolbar:nil] autorelease]; | 132 toolbar:nil]; |
130 } | 133 } |
131 | 134 |
132 private: | 135 private: |
133 base::scoped_nsobject<ReadingListCoordinator> coordinator_; | 136 ReadingListCoordinator* coordinator_; |
134 base::scoped_nsobject<ReadingListMediator> mediator_; | 137 ReadingListMediator* mediator_; |
135 std::unique_ptr<ReadingListModelImpl> reading_list_model_; | 138 std::unique_ptr<ReadingListModelImpl> reading_list_model_; |
136 base::scoped_nsobject<UrlLoaderStub> loader_mock_; | 139 UrlLoaderStub* loader_mock_; |
137 testing::StrictMock<favicon::MockFaviconService> mock_favicon_service_; | 140 testing::StrictMock<favicon::MockFaviconService> mock_favicon_service_; |
138 std::unique_ptr<favicon::LargeIconService> large_icon_service_; | 141 std::unique_ptr<favicon::LargeIconService> large_icon_service_; |
139 std::unique_ptr<TestChromeBrowserState> browser_state_; | 142 std::unique_ptr<TestChromeBrowserState> browser_state_; |
140 }; | 143 }; |
141 | 144 |
142 // Tests that the implementation of ReadingListCoordinator openItemAtIndexPath | 145 // Tests that the implementation of ReadingListCoordinator openItemAtIndexPath |
143 // opens the entry. | 146 // opens the entry. |
144 TEST_F(ReadingListCoordinatorTest, OpenItem) { | 147 TEST_F(ReadingListCoordinatorTest, OpenItem) { |
145 // Setup. | 148 // Setup. |
146 GURL url("https://chromium.org"); | 149 GURL url("https://chromium.org"); |
147 std::string title("Chromium"); | 150 std::string title("Chromium"); |
148 std::unique_ptr<ReadingListEntry> entry = | 151 std::unique_ptr<ReadingListEntry> entry = |
149 base::MakeUnique<ReadingListEntry>(url, title, base::Time::FromTimeT(10)); | 152 base::MakeUnique<ReadingListEntry>(url, title, base::Time::FromTimeT(10)); |
150 ReadingListModel* model = GetReadingListModel(); | 153 ReadingListModel* model = GetReadingListModel(); |
151 model->AddEntry(url, title, reading_list::ADDED_VIA_CURRENT_APP); | 154 model->AddEntry(url, title, reading_list::ADDED_VIA_CURRENT_APP); |
152 | 155 |
153 base::scoped_nsobject<ReadingListCollectionViewItem> item( | 156 ReadingListCollectionViewItem* item = [[ReadingListCollectionViewItem alloc] |
154 [[ReadingListCollectionViewItem alloc] | 157 initWithType:0 |
155 initWithType:0 | 158 url:url |
156 url:url | 159 distillationState:ReadingListUIDistillationStatusSuccess]; |
157 distillationState:ReadingListUIDistillationStatusSuccess]); | |
158 | 160 |
159 // Action. | 161 // Action. |
160 [GetCoordinator() readingListCollectionViewController: | 162 [GetCoordinator() readingListCollectionViewController: |
161 GetAReadingListCollectionViewController() | 163 GetAReadingListCollectionViewController() |
162 openItem:item]; | 164 openItem:item]; |
163 | 165 |
164 // Tests. | 166 // Tests. |
165 UrlLoaderStub* loader = GetLoaderStub(); | 167 UrlLoaderStub* loader = GetLoaderStub(); |
166 EXPECT_EQ(url, loader.url); | 168 EXPECT_EQ(url, loader.url); |
167 EXPECT_TRUE(ui::PageTransitionCoreTypeIs(ui::PAGE_TRANSITION_AUTO_BOOKMARK, | 169 EXPECT_TRUE(ui::PageTransitionCoreTypeIs(ui::PAGE_TRANSITION_AUTO_BOOKMARK, |
168 loader.transition)); | 170 loader.transition)); |
169 EXPECT_EQ(NO, loader.rendererInitiated); | 171 EXPECT_EQ(NO, loader.rendererInitiated); |
170 } | 172 } |
OLD | NEW |