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 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 Loading... |
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 Loading... |
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 } |
OLD | NEW |