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

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

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 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/NativePageFactoryTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..24220561793402a7c7dc09d91ff0a7c640db7a06
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java
@@ -0,0 +1,233 @@
+// Copyright 2015 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;
+
+import android.app.Activity;
+import android.test.InstrumentationTestCase;
+import android.test.UiThreadTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.view.View;
+
+import org.chromium.chrome.browser.NativePage;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.UrlConstants;
+import org.chromium.chrome.browser.ntp.NativePageFactory.NativePageType;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+
+/**
+ * Tests public methods in NativePageFactory.
+ */
+public class NativePageFactoryTest extends InstrumentationTestCase {
+
+ private static class MockNativePage implements NativePage {
+ public final NativePageType type;
+ public int updateForUrlCalls;
+
+ public MockNativePage(NativePageType type) {
+ this.type = type;
+ }
+
+ @Override
+ public void updateForUrl(String url) {
+ updateForUrlCalls++;
+ }
+
+ @Override
+ public String getUrl() {
+ return null;
+ }
+
+ @Override
+ public String getHost() {
+ switch (type) {
+ case NTP:
+ return UrlConstants.NTP_HOST;
+ case BOOKMARKS:
+ return UrlConstants.BOOKMARKS_HOST;
+ case RECENT_TABS:
+ return UrlConstants.RECENT_TABS_HOST;
+ default:
+ fail("Unexpected NativePageType: " + type);
+ return null;
+ }
+ }
+
+ @Override
+ public void destroy() {}
+
+ @Override
+ public String getTitle() {
+ return null;
+ }
+
+ @Override
+ public int getBackgroundColor() {
+ return 0;
+ }
+
+ @Override
+ public View getView() {
+ return null;
+ }
+ }
+
+ private static class MockNativePageBuilder extends NativePageFactory.NativePageBuilder {
+ @Override
+ public NativePage buildNewTabPage(Activity activity, Tab tab,
+ TabModelSelector tabModelSelector) {
+ return new MockNativePage(NativePageType.NTP);
+ }
+
+ @Override
+ public NativePage buildBookmarksPage(Activity activity, Tab tab,
+ TabModelSelector tabModelSelector) {
+ return new MockNativePage(NativePageType.BOOKMARKS);
+ }
+
+ @Override
+ public NativePage buildRecentTabsPage(Activity activity, Tab tab) {
+ return new MockNativePage(NativePageType.RECENT_TABS);
+ }
+ }
+
+ private static class UrlCombo {
+ public String url;
+ public NativePageType expectedType;
+
+ public UrlCombo(String url, NativePageType expectedType) {
+ this.url = url;
+ this.expectedType = expectedType;
+ }
+ }
+
+ private static final UrlCombo[] VALID_URLS = {
+ new UrlCombo("chrome-native://newtab", NativePageType.NTP),
+ new UrlCombo("chrome-native://newtab/", NativePageType.NTP),
+ new UrlCombo("chrome-native://bookmarks", NativePageType.BOOKMARKS),
+ new UrlCombo("chrome-native://bookmarks/", NativePageType.BOOKMARKS),
+ new UrlCombo("chrome-native://bookmarks/#245", NativePageType.BOOKMARKS),
+ new UrlCombo("chrome-native://recent-tabs", NativePageType.RECENT_TABS),
+ new UrlCombo("chrome-native://recent-tabs/", NativePageType.RECENT_TABS),
+ };
+
+ private static final String[] INVALID_URLS = {
+ null,
+ "",
+ "newtab",
+ "newtab@google.com:80",
+ "/newtab",
+ "://newtab",
+ "chrome://",
+ "chrome://newtab",
+ "chrome://newtab#bookmarks",
+ "chrome://newtab/#open_tabs",
+ "chrome://recent-tabs",
+ "chrome://most_visited",
+ "chrome-native://",
+ "chrome-native://newtablet",
+ "chrome-native://bookmarks-inc",
+ "chrome-native://recent_tabs",
+ "chrome-native://recent-tabswitcher",
+ "chrome-native://most_visited",
+ "chrome-native://astronaut",
+ "chrome-internal://newtab",
+ "french-fries://newtab",
+ "http://bookmarks",
+ "https://recent-tabs",
+ "newtab://recent-tabs",
+ "recent-tabs bookmarks",
+ };
+
+ private boolean isValidInIncognito(UrlCombo urlCombo) {
+ return urlCombo.expectedType != NativePageType.RECENT_TABS;
+ }
+
+ /**
+ * Ensures that NativePageFactory.isNativePageUrl() returns true for native page URLs.
+ */
+ private void runTestPostiveIsNativePageUrl() {
+ for (UrlCombo urlCombo : VALID_URLS) {
+ String url = urlCombo.url;
+ assertTrue(url, NativePageFactory.isNativePageUrl(url, false));
+ if (isValidInIncognito(urlCombo)) {
+ assertTrue(url, NativePageFactory.isNativePageUrl(url, true));
+ }
+ }
+ }
+
+ /**
+ * Ensures that NativePageFactory.isNativePageUrl() returns false for URLs that don't
+ * correspond to a native page.
+ */
+ private void runTestNegativeIsNativePageUrl() {
+ for (String invalidUrl : INVALID_URLS) {
+ assertFalse(invalidUrl, NativePageFactory.isNativePageUrl(invalidUrl, false));
+ assertFalse(invalidUrl, NativePageFactory.isNativePageUrl(invalidUrl, true));
+ }
+ }
+
+ /**
+ * Ensures that NativePageFactory.createNativePageForURL() returns a native page of the right
+ * type and reuses the candidate page if it's the right type.
+ */
+ private void runTestCreateNativePage() {
+ NativePageType[] candidateTypes = new NativePageType[] { NativePageType.NONE,
+ NativePageType.NTP, NativePageType.BOOKMARKS, NativePageType.RECENT_TABS };
+ for (boolean isIncognito : new boolean[] {true, false}) {
+ for (UrlCombo urlCombo : VALID_URLS) {
+ if (isIncognito && !isValidInIncognito(urlCombo)) continue;
+ for (NativePageType candidateType : candidateTypes) {
+ MockNativePage candidate = candidateType == NativePageType.NONE ? null
+ : new MockNativePage(candidateType);
+ MockNativePage page = (MockNativePage) NativePageFactory.createNativePageForURL(
+ urlCombo.url, candidate, null, null, null, isIncognito);
+ String debugMessage = String.format(
+ "Failed test case: isIncognito=%s, urlCombo={%s,%s}, candidateType=%s",
+ isIncognito, urlCombo.url, urlCombo.expectedType, candidateType);
+ assertNotNull(debugMessage, page);
+ assertEquals(debugMessage, 1, page.updateForUrlCalls);
+ assertEquals(debugMessage, urlCombo.expectedType, page.type);
+ if (candidateType == urlCombo.expectedType) {
+ assertSame(debugMessage, candidate, page);
+ } else {
+ assertNotSame(debugMessage, candidate, page);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Ensures that NativePageFactory.createNativePageForURL() returns null for URLs that don't
+ * correspond to a native page.
+ */
+ private void runTestCreateNativePageWithInvalidUrl() {
+ for (UrlCombo urlCombo : VALID_URLS) {
+ if (!isValidInIncognito(urlCombo)) {
+ assertNull(urlCombo.url, NativePageFactory.createNativePageForURL(urlCombo.url,
+ null, null, null, null, true));
+ }
+ }
+ for (boolean isIncognito : new boolean[] {true, false}) {
+ for (String invalidUrl : INVALID_URLS) {
+ assertNull(invalidUrl, NativePageFactory.createNativePageForURL(invalidUrl, null,
+ null, null, null, isIncognito));
+ }
+ }
+ }
+
+ /**
+ * Runs all the runTest* methods defined above.
+ */
+ @SmallTest
+ @UiThreadTest
+ public void testNativePageFactory() {
+ NativePageFactory.setNativePageBuilderForTesting(new MockNativePageBuilder());
+ runTestPostiveIsNativePageUrl();
+ runTestNegativeIsNativePageUrl();
+ runTestCreateNativePage();
+ runTestCreateNativePageWithInvalidUrl();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698