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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/ntp/snippets/ArticleSnippetsTest.java

Issue 2623993007: 🏠 Extract the ContentSuggestionManager interface from NTP (Closed)
Patch Set: aaaand rebase again 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 package org.chromium.chrome.browser.ntp.snippets; 5 package org.chromium.chrome.browser.ntp.snippets;
6 6
7 import android.graphics.BitmapFactory; 7 import android.graphics.BitmapFactory;
8 import android.support.test.filters.MediumTest; 8 import android.support.test.filters.MediumTest;
9 import android.util.TypedValue; 9 import android.util.TypedValue;
10 import android.view.View; 10 import android.view.View;
11 import android.view.ViewGroup; 11 import android.view.ViewGroup;
12 import android.widget.FrameLayout; 12 import android.widget.FrameLayout;
13 13
14 import org.chromium.base.Callback; 14 import org.chromium.base.Callback;
15 import org.chromium.base.ThreadUtils; 15 import org.chromium.base.ThreadUtils;
16 import org.chromium.base.test.util.Feature; 16 import org.chromium.base.test.util.Feature;
17 import org.chromium.base.test.util.RetryOnFailure; 17 import org.chromium.base.test.util.RetryOnFailure;
18 import org.chromium.chrome.R; 18 import org.chromium.chrome.R;
19 import org.chromium.chrome.browser.ChromeActivity; 19 import org.chromium.chrome.browser.ChromeActivity;
20 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback; 20 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
21 import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallbac k; 21 import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallbac k;
22 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; 22 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
23 import org.chromium.chrome.browser.ntp.ContextMenuManager;
24 import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver;
25 import org.chromium.chrome.browser.ntp.MostVisitedItem;
26 import org.chromium.chrome.browser.ntp.NewTabPage.DestructionObserver; 23 import org.chromium.chrome.browser.ntp.NewTabPage.DestructionObserver;
27 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
28 import org.chromium.chrome.browser.ntp.UiConfig; 24 import org.chromium.chrome.browser.ntp.UiConfig;
29 import org.chromium.chrome.browser.ntp.cards.ActionItem; 25 import org.chromium.chrome.browser.ntp.cards.ActionItem;
30 import org.chromium.chrome.browser.ntp.cards.NewTabPageAdapter; 26 import org.chromium.chrome.browser.ntp.cards.NewTabPageAdapter;
31 import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView; 27 import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView;
32 import org.chromium.chrome.browser.ntp.cards.SuggestionsCategoryInfo; 28 import org.chromium.chrome.browser.ntp.cards.SuggestionsCategoryInfo;
33 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; 29 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
34 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse rver;
35 import org.chromium.chrome.browser.profiles.Profile; 30 import org.chromium.chrome.browser.profiles.Profile;
36 import org.chromium.chrome.browser.suggestions.SuggestionsMetricsReporter; 31 import org.chromium.chrome.browser.suggestions.SuggestionsMetricsReporter;
32 import org.chromium.chrome.browser.suggestions.SuggestionsNavigationDelegate;
37 import org.chromium.chrome.browser.suggestions.SuggestionsRanker; 33 import org.chromium.chrome.browser.suggestions.SuggestionsRanker;
34 import org.chromium.chrome.browser.suggestions.SuggestionsUiDelegate;
38 import org.chromium.chrome.test.ChromeActivityTestCaseBase; 35 import org.chromium.chrome.test.ChromeActivityTestCaseBase;
39 import org.chromium.chrome.test.util.RenderUtils.ViewRenderer; 36 import org.chromium.chrome.test.util.RenderUtils.ViewRenderer;
40 37
41 import java.io.IOException; 38 import java.io.IOException;
42 import java.util.Arrays; 39 import java.util.Arrays;
43 import java.util.Set; 40 import java.util.Set;
44 41
45 /** 42 /**
46 * Tests for the appearance of Article Snippets. 43 * Tests for the appearance of Article Snippets.
47 */ 44 */
48 public class ArticleSnippetsTest extends ChromeActivityTestCaseBase<ChromeActivi ty> { 45 public class ArticleSnippetsTest extends ChromeActivityTestCaseBase<ChromeActivi ty> {
49 private ViewRenderer mViewRenderer; 46 private ViewRenderer mViewRenderer;
50 47
51 private NewTabPageManager mNtpManager; 48 private SuggestionsUiDelegate mUiDelegate;
52 private FakeSuggestionsSource mSnippetsSource; 49 private FakeSuggestionsSource mSnippetsSource;
53 private NewTabPageRecyclerView mRecyclerView; 50 private NewTabPageRecyclerView mRecyclerView;
54 private NewTabPageAdapter mAdapter; 51 private NewTabPageAdapter mAdapter;
55 52
56 private FrameLayout mContentView; 53 private FrameLayout mContentView;
57 private UiConfig mUiConfig; 54 private UiConfig mUiConfig;
58 55
59 public ArticleSnippetsTest() { 56 public ArticleSnippetsTest() {
60 super(ChromeActivity.class); 57 super(ChromeActivity.class);
61 } 58 }
(...skipping 12 matching lines...) Expand all
74 71
75 getActivity().setContentView(mContentView); 72 getActivity().setContentView(mContentView);
76 73
77 mRecyclerView = (NewTabPageRecyclerView) getActivity().getLayout Inflater() 74 mRecyclerView = (NewTabPageRecyclerView) getActivity().getLayout Inflater()
78 .inflate(R.layout.new_tab_page_recycler_view, mContentVi ew, false); 75 .inflate(R.layout.new_tab_page_recycler_view, mContentVi ew, false);
79 mContentView.addView(mRecyclerView); 76 mContentView.addView(mRecyclerView);
80 77
81 View aboveTheFold = new View(getActivity()); 78 View aboveTheFold = new View(getActivity());
82 79
83 mRecyclerView.setAboveTheFoldView(aboveTheFold); 80 mRecyclerView.setAboveTheFoldView(aboveTheFold);
84 mAdapter = new NewTabPageAdapter(mNtpManager, aboveTheFold, mUiC onfig, 81 mAdapter = new NewTabPageAdapter(mUiDelegate, aboveTheFold, mUiC onfig,
85 OfflinePageBridge.getForProfile(Profile.getLastUsedProfi le())); 82 OfflinePageBridge.getForProfile(Profile.getLastUsedProfi le()),
83 /* contextMenuManager = */null);
86 mRecyclerView.setAdapter(mAdapter); 84 mRecyclerView.setAdapter(mAdapter);
87 } 85 }
88 }); 86 });
89 87
90 getInstrumentation().waitForIdleSync(); 88 getInstrumentation().waitForIdleSync();
91 89
92 int first = mAdapter.getFirstCardPosition(); 90 int first = mAdapter.getFirstCardPosition();
93 mViewRenderer.renderAndCompare(mRecyclerView.getChildAt(first), "short_s nippet"); 91 mViewRenderer.renderAndCompare(mRecyclerView.getChildAt(first), "short_s nippet");
94 mViewRenderer.renderAndCompare(mRecyclerView.getChildAt(first + 1), "lon g_snippet"); 92 mViewRenderer.renderAndCompare(mRecyclerView.getChildAt(first + 1), "lon g_snippet");
95 93
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 @Override 174 @Override
177 public void startMainActivity() throws InterruptedException { 175 public void startMainActivity() throws InterruptedException {
178 startMainActivityOnBlankPage(); 176 startMainActivityOnBlankPage();
179 mViewRenderer = new ViewRenderer(getActivity(), 177 mViewRenderer = new ViewRenderer(getActivity(),
180 "chrome/test/data/android/render_tests", this.getClass().getSimp leName()); 178 "chrome/test/data/android/render_tests", this.getClass().getSimp leName());
181 } 179 }
182 180
183 @Override 181 @Override
184 protected void setUp() throws Exception { 182 protected void setUp() throws Exception {
185 super.setUp(); 183 super.setUp();
186 mNtpManager = new MockNewTabPageManager(); 184 mUiDelegate = new MockUiDelegate();
187 mSnippetsSource = new FakeSuggestionsSource(); 185 mSnippetsSource = new FakeSuggestionsSource();
188 } 186 }
189 187
190 /** 188 /**
191 * A NewTabPageManager to initialize our Adapter. 189 * A SuggestionsUiDelegate to initialize our Adapter.
192 */ 190 */
193 private class MockNewTabPageManager implements NewTabPageManager { 191 private class MockUiDelegate implements SuggestionsUiDelegate {
194 // TODO(dgn): provide a RecyclerView if we need to test the context menu .
195 private ContextMenuManager mContextMenuManager =
196 new ContextMenuManager(getActivity(), this, null);
197 private SuggestionsMetricsReporter mSuggestionsMetricsReporter = 192 private SuggestionsMetricsReporter mSuggestionsMetricsReporter =
198 new DummySuggestionsMetricsReporter(); 193 new DummySuggestionsMetricsReporter();
199 194
200 @Override 195 @Override
201 public void getLocalFaviconImageForURL( 196 public void getLocalFaviconImageForURL(
202 final String url, int size, final FaviconImageCallback faviconCa llback) { 197 final String url, int size, final FaviconImageCallback faviconCa llback) {
203 // Run the callback asynchronously incase the caller made that assum ption. 198 // Run the callback asynchronously incase the caller made that assum ption.
204 ThreadUtils.postOnUiThread(new Runnable(){ 199 ThreadUtils.postOnUiThread(new Runnable(){
205 @Override 200 @Override
206 public void run() { 201 public void run() {
207 // Return an arbitrary drawable. 202 // Return an arbitrary drawable.
208 faviconCallback.onFaviconAvailable( 203 faviconCallback.onFaviconAvailable(
209 BitmapFactory.decodeResource(getActivity().getResour ces(), 204 BitmapFactory.decodeResource(getActivity().getResour ces(),
210 R.drawable.star_green), 205 R.drawable.star_green),
211 url); 206 url);
212 } 207 }
213 }); 208 });
214 } 209 }
215 210
216 @Override 211 @Override
217 public void removeMostVisitedItem(MostVisitedItem item) {
218 throw new UnsupportedOperationException();
219 }
220
221 @Override
222 public void openMostVisitedItem(int windowDisposition, MostVisitedItem i tem) {
223 throw new UnsupportedOperationException();
224 }
225
226 @Override
227 public boolean isLocationBarShownInNTP() {
228 throw new UnsupportedOperationException();
229 }
230
231 @Override
232 public boolean isVoiceSearchEnabled() {
233 throw new UnsupportedOperationException();
234 }
235
236 @Override
237 public boolean isFakeOmniboxTextEnabledTablet() {
238 throw new UnsupportedOperationException();
239 }
240
241 @Override
242 public void navigateToBookmarks() {
243 throw new UnsupportedOperationException();
244 }
245
246 @Override
247 public void navigateToRecentTabs() {
248 throw new UnsupportedOperationException();
249 }
250
251 @Override
252 public void openSnippet(int windowOpenDisposition, SnippetArticle articl e) {
253 throw new UnsupportedOperationException();
254 }
255
256 @Override
257 public void focusSearchBox(boolean beginVoiceSearch, String pastedText) {
258 throw new UnsupportedOperationException();
259 }
260
261 @Override
262 public void setMostVisitedURLsObserver(MostVisitedURLsObserver observer, int numResults) {
263 throw new UnsupportedOperationException();
264 }
265
266 @Override
267 public void getLargeIconForUrl(String url, int size, LargeIconCallback c allback) { 212 public void getLargeIconForUrl(String url, int size, LargeIconCallback c allback) {
268 throw new UnsupportedOperationException(); 213 throw new UnsupportedOperationException();
269 } 214 }
270 215
271 @Override 216 @Override
272 public void ensureIconIsAvailable(String pageUrl, String iconUrl, boolea n isLargeIcon, 217 public void ensureIconIsAvailable(String pageUrl, String iconUrl, boolea n isLargeIcon,
273 boolean isTemporary, IconAvailabilityCallback callback) { 218 boolean isTemporary, IconAvailabilityCallback callback) {
274 throw new UnsupportedOperationException(); 219 throw new UnsupportedOperationException();
275 } 220 }
276 221
277 @Override 222 @Override
278 public void getUrlsAvailableOffline(Set<String> pageUrls, Callback<Set<S tring>> callback) { 223 public void getUrlsAvailableOffline(Set<String> pageUrls, Callback<Set<S tring>> callback) {
279 throw new UnsupportedOperationException(); 224 throw new UnsupportedOperationException();
280 } 225 }
281 226
282 @Override 227 @Override
283 public void onLogoClicked(boolean isAnimatedLogoShowing) {
284 throw new UnsupportedOperationException();
285 }
286
287 @Override
288 public void getSearchProviderLogo(LogoObserver logoObserver) {
289 throw new UnsupportedOperationException();
290 }
291
292 @Override
293 public void onLoadingComplete(MostVisitedItem[] mostVisitedItems) {
294 throw new UnsupportedOperationException();
295 }
296
297 @Override
298 public boolean isOpenInNewWindowEnabled() {
299 throw new UnsupportedOperationException();
300 }
301
302 @Override
303 public boolean isOpenInIncognitoEnabled() {
304 throw new UnsupportedOperationException();
305 }
306
307 @Override
308 public void navigateToDownloadManager() {
309 throw new UnsupportedOperationException();
310 }
311
312 @Override
313 public void onLearnMoreClicked() {
314 throw new UnsupportedOperationException();
315 }
316
317 @Override
318 public SuggestionsSource getSuggestionsSource() { 228 public SuggestionsSource getSuggestionsSource() {
319 return mSnippetsSource; 229 return mSnippetsSource;
320 } 230 }
321 231
322 @Override 232 @Override
323 public void addDestructionObserver(DestructionObserver destructionObserv er) {} 233 public void addDestructionObserver(DestructionObserver destructionObserv er) {}
324 234
325 @Override 235 @Override
326 public boolean isCurrentPage() { 236 public SuggestionsMetricsReporter getMetricsReporter() {
327 return true; 237 return mSuggestionsMetricsReporter;
328 } 238 }
329 239
330 @Override 240 @Override
331 public ContextMenuManager getContextMenuManager() { 241 public SuggestionsNavigationDelegate getNavigationDelegate() {
332 return mContextMenuManager; 242 return null;
333 }
334
335 public SuggestionsMetricsReporter getSuggestionsMetricsReporter() {
336 return mSuggestionsMetricsReporter;
337 } 243 }
338 } 244 }
339 245
340 private static class DummySuggestionsMetricsReporter implements SuggestionsM etricsReporter { 246 private static class DummySuggestionsMetricsReporter implements SuggestionsM etricsReporter {
341 @Override 247 @Override
342 public void onPageShown(int[] categories, int[] suggestionsPerCategory) {} 248 public void onPageShown(int[] categories, int[] suggestionsPerCategory) {}
343 249
344 @Override 250 @Override
345 public void onSuggestionShown(SnippetArticle suggestion) {} 251 public void onSuggestionShown(SnippetArticle suggestion) {}
346 252
347 @Override 253 @Override
348 public void onSuggestionOpened(SnippetArticle suggestion, int windowOpen Disposition) {} 254 public void onSuggestionOpened(SnippetArticle suggestion, int windowOpen Disposition) {}
349 255
350 @Override 256 @Override
351 public void onSuggestionMenuOpened(SnippetArticle suggestion) {} 257 public void onSuggestionMenuOpened(SnippetArticle suggestion) {}
352 258
353 @Override 259 @Override
354 public void onMoreButtonShown(@CategoryInt ActionItem category) {} 260 public void onMoreButtonShown(@CategoryInt ActionItem category) {}
355 261
356 @Override 262 @Override
357 public void onMoreButtonClicked(@CategoryInt ActionItem category) {} 263 public void onMoreButtonClicked(@CategoryInt ActionItem category) {}
358 264
359 @Override 265 @Override
360 public void setRanker(SuggestionsRanker suggestionsRanker) {} 266 public void setRanker(SuggestionsRanker suggestionsRanker) {}
361 } 267 }
362 } 268 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698