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

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

Issue 2114963002: Create Java infrastructure for UI Render Tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Throw when mkdir fails. Created 4 years, 4 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: chrome/android/javatests/src/org/chromium/chrome/browser/ntp/snippets/ArticleSnippetsTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/snippets/ArticleSnippetsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/snippets/ArticleSnippetsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e61c5d3394dd33a560f35bc68134862ba38c1d9
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/snippets/ArticleSnippetsTest.java
@@ -0,0 +1,287 @@
+// Copyright 2016 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.
+
+package org.chromium.chrome.browser.ntp.snippets;
+
+import android.graphics.BitmapFactory;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.view.ContextMenu;
+import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.View;
+import android.widget.FrameLayout;
+
+import org.chromium.base.Callback;
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
+import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallback;
+import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
+import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver;
+import org.chromium.chrome.browser.ntp.MostVisitedItem;
+import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
+import org.chromium.chrome.browser.ntp.UiConfig;
+import org.chromium.chrome.browser.ntp.cards.NewTabPageAdapter;
+import org.chromium.chrome.browser.ntp.cards.NewTabPageRecyclerView;
+import org.chromium.chrome.browser.ntp.cards.SuggestionsCategoryInfo;
+import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObserver;
+import org.chromium.chrome.test.ChromeActivityTestCaseBase;
+import org.chromium.chrome.test.util.RenderUtils.ViewRenderer;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Set;
+
+/**
+ * Tests for the appearance of Article Snippets.
+ */
+public class ArticleSnippetsTest extends ChromeActivityTestCaseBase<ChromeActivity> {
+ private ViewRenderer mViewRenderer;
+
+ private NewTabPageManager mNtpManager;
+ private FakeSuggestionsSource mSnippetsSource;
+ private NewTabPageRecyclerView mRecyclerView;
+ private NewTabPageAdapter mAdapter;
+
+ public ArticleSnippetsTest() {
+ super(ChromeActivity.class);
+ }
+
+ @MediumTest
+ @Feature({"ArticleSnippets", "RenderTest"})
+ public void testSnippetAppearance() throws IOException {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ FrameLayout layout = new FrameLayout(getActivity());
+ getActivity().setContentView(layout);
+
+ mRecyclerView = (NewTabPageRecyclerView) getActivity().getLayoutInflater()
+ .inflate(R.layout.new_tab_page_recycler_view, layout, false);
+ layout.addView(mRecyclerView);
+
+ View aboveTheFold = new View(getActivity());
+
+ mRecyclerView.setAboveTheFoldView(aboveTheFold);
+ mAdapter = new NewTabPageAdapter(mNtpManager, aboveTheFold, mSnippetsSource,
+ new UiConfig(aboveTheFold));
+ mRecyclerView.setAdapter(mAdapter);
+
+ setupTestData();
+ }
+ });
+
+ getInstrumentation().waitForIdleSync();
+
+ int first = mAdapter.getFirstCardPosition();
+ mViewRenderer.renderAndCompare(mRecyclerView.getChildAt(first), "short_snippet");
+ mViewRenderer.renderAndCompare(mRecyclerView.getChildAt(first + 1), "long_snippet");
+ mViewRenderer.renderAndCompare(mRecyclerView.getChildAt(first + 2), "minimal_snippet");
+ mViewRenderer.renderAndCompare(mRecyclerView, "snippets");
+ }
+
+ private void setupTestData() {
+ SnippetArticle shortSnippet = new SnippetArticle(
+ "id1",
+ "Title",
+ "Publisher",
+ "Preview Text",
+ "www.google.com",
+ "", // AMP URL
+ 1466614774, // Timestamp
+ 10f, // Score
+ 0, // Position
+ ContentSuggestionsCardLayout.FULL_CARD);
+ shortSnippet.setThumbnailBitmap(BitmapFactory.decodeResource(getActivity().getResources(),
+ R.drawable.signin_promo_illustration));
+
+ SnippetArticle longSnippet = new SnippetArticle(
+ "id2",
+ new String(new char[20]).replace("\0", "Title "),
+ new String(new char[20]).replace("\0", "Publisher "),
+ new String(new char[80]).replace("\0", "Preview Text "),
+ "www.google.com",
+ "", // AMP URL
+ 1466614074, // Timestamp
+ 20f, // Score
+ 1, // Position
+ ContentSuggestionsCardLayout.FULL_CARD);
+
+ SnippetArticle minimalSnippet = new SnippetArticle(
+ "id3",
+ new String(new char[20]).replace("\0", "Title "),
+ "Publisher",
+ "This should not be displayed",
+ "www.google.com",
+ "", // AMP URL
+ 1466614774, // Timestamp
+ 10f, // Score
+ 0, // Position
+ ContentSuggestionsCardLayout.MINIMAL_CARD);
+
+ mSnippetsSource.setInfoForCategory(KnownCategories.ARTICLES, new SuggestionsCategoryInfo(
+ "Section Title", ContentSuggestionsCardLayout.FULL_CARD, false));
+ mSnippetsSource.setStatusForCategory(KnownCategories.ARTICLES,
+ CategoryStatus.AVAILABLE);
+ mSnippetsSource.setSuggestionsForCategory(KnownCategories.ARTICLES,
+ Arrays.asList(shortSnippet, longSnippet, minimalSnippet));
+ }
+
+ @Override
+ public void startMainActivity() throws InterruptedException {
+ startMainActivityOnBlankPage();
+ mViewRenderer = new ViewRenderer(getActivity(),
+ "chrome/test/data/android/render_tests", this.getClass().getSimpleName());
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mNtpManager = new MockNewTabPageManager();
+ mSnippetsSource = new FakeSuggestionsSource();
+ }
+
+ /**
+ * A NewTabPageManager to initialize our Adapter.
+ */
+ private class MockNewTabPageManager implements NewTabPageManager {
+ @Override
+ public void getLocalFaviconImageForURL(
+ final String url, int size, final FaviconImageCallback faviconCallback) {
+ // Run the callback asynchronously incase the caller made that assumption.
+ ThreadUtils.postOnUiThread(new Runnable(){
+ @Override
+ public void run() {
+ // Return an arbitrary drawable.
+ faviconCallback.onFaviconAvailable(
+ BitmapFactory.decodeResource(getActivity().getResources(),
+ R.drawable.star_green),
+ url);
+ }
+ });
+ }
+
+ @Override
+ public void openMostVisitedItem(MostVisitedItem item) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, OnMenuItemClickListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean onMenuItemClick(int menuId, MostVisitedItem item) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isLocationBarShownInNTP() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isVoiceSearchEnabled() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isToolbarEnabled() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isFakeOmniboxTextEnabledTablet() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void navigateToBookmarks() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void navigateToRecentTabs() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void openSnippet(String url) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void focusSearchBox(boolean beginVoiceSearch, String pastedText) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setMostVisitedURLsObserver(MostVisitedURLsObserver observer, int numResults) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void getLargeIconForUrl(String url, int size, LargeIconCallback callback) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void ensureIconIsAvailable(String pageUrl, String iconUrl, boolean isLargeIcon,
+ boolean isTemporary, IconAvailabilityCallback callback) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void getUrlsAvailableOffline(Set<String> pageUrls, Callback<Set<String>> callback) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void onLogoClicked(boolean isAnimatedLogoShowing) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void getSearchProviderLogo(LogoObserver logoObserver) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void onLoadingComplete(MostVisitedItem[] mostVisitedItems) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void openUrl(String url) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isOpenInNewWindowEnabled() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isOpenInIncognitoEnabled() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void navigateToDownloadManager() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void openUrlInNewWindow(String url) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void openUrlInNewTab(String url, boolean incognito) {
+ throw new UnsupportedOperationException();
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698