Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 mNtpManager; |
| 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 13 matching lines...) Expand all Loading... | |
| 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(mNtpManager, aboveTheFold, mUiC onfig, |
| 85 OfflinePageBridge.getForProfile(Profile.getLastUsedProfi le())); | 82 OfflinePageBridge.getForProfile(Profile.getLastUsedProfi le()), |
| 83 /*contextMenuManager=*/null); | |
|
Bernhard Bauer
2017/01/18 16:58:14
Could you add spaces around the variable name and
dgn
2017/01/18 18:00:27
Done.
| |
| 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 mNtpManager = new MockNewTabPageManager(); |
| 187 mSnippetsSource = new FakeSuggestionsSource(); | 185 mSnippetsSource = new FakeSuggestionsSource(); |
| 188 } | 186 } |
| 189 | 187 |
| 190 /** | 188 /** |
| 191 * A NewTabPageManager to initialize our Adapter. | 189 * A NewTabPageManager to initialize our Adapter. |
| 192 */ | 190 */ |
| 193 private class MockNewTabPageManager implements NewTabPageManager { | 191 private class MockNewTabPageManager 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 } |
| OLD | NEW |