From 913701b1fa2ea8a63f095454d8147d1a3b8262af Mon Sep 17 00:00:00 2001 From: newt Date: Mon, 1 Feb 2016 16:06:45 -0800 Subject: Convert NativePageFactoryTest to run using Robolectric. Huzzah for way faster tests! These tests now take only 35ms to run. Review URL: https://codereview.chromium.org/1641353004 Cr-Commit-Position: refs/heads/master@{#372826} --- chrome/android/BUILD.gn | 5 +- .../chrome/browser/ntp/NativePageFactoryTest.java | 237 -------------------- .../chrome/browser/ntp/NativePageFactoryTest.java | 238 +++++++++++++++++++++ 3 files changed, 241 insertions(+), 239 deletions(-) delete mode 100644 chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java create mode 100644 chrome/android/junit/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java (limited to 'chrome') diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 282800d..ff4bfda 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn @@ -275,11 +275,12 @@ junit_binary("chrome_junit_tests") { "junit/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterTestBase.java", "junit/src/org/chromium/chrome/browser/media/router/cast/DiscoveryCallbackTest.java", "junit/src/org/chromium/chrome/browser/media/router/cast/TestUtils.java", + "junit/src/org/chromium/chrome/browser/notifications/NotificationUIManagerUnitTest.java", + "junit/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java", "junit/src/org/chromium/chrome/browser/omaha/ResponseParserTest.java", "junit/src/org/chromium/chrome/browser/omaha/VersionNumberTest.java", - "junit/src/org/chromium/chrome/browser/util/NonThreadSafeTest.java", - "junit/src/org/chromium/chrome/browser/notifications/NotificationUIManagerUnitTest.java", "junit/src/org/chromium/chrome/browser/snackbar/SnackbarCollectionUnitTest.java", + "junit/src/org/chromium/chrome/browser/util/NonThreadSafeTest.java", "junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java", "junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.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 deleted file mode 100644 index eacf6b0..0000000 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java +++ /dev/null @@ -1,237 +0,0 @@ -// 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.UrlConstants; -import org.chromium.chrome.browser.ntp.NativePageFactory.NativePageType; -import org.chromium.chrome.browser.tab.Tab; -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 int getThemeColor() { - 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) { - 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(); - } -} diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java new file mode 100644 index 0000000..fc557a0 --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/NativePageFactoryTest.java @@ -0,0 +1,238 @@ +// 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.view.View; + +import org.chromium.chrome.browser.NativePage; +import org.chromium.chrome.browser.UrlConstants; +import org.chromium.chrome.browser.ntp.NativePageFactory.NativePageType; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.testing.local.LocalRobolectricTestRunner; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.annotation.Config; + +/** + * Tests public methods in NativePageFactory. + */ +@RunWith(LocalRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class NativePageFactoryTest { + + 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: + Assert.fail("Unexpected NativePageType: " + type); + return null; + } + } + + @Override + public void destroy() {} + + @Override + public String getTitle() { + return null; + } + + @Override + public int getBackgroundColor() { + return 0; + } + + @Override + public int getThemeColor() { + 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) { + 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; + } + + @Before + public void setUp() { + NativePageFactory.setNativePageBuilderForTesting(new MockNativePageBuilder()); + } + + /** + * Ensures that NativePageFactory.isNativePageUrl() returns true for native page URLs. + */ + @Test + public void testPositiveIsNativePageUrl() { + for (UrlCombo urlCombo : VALID_URLS) { + String url = urlCombo.url; + Assert.assertTrue(url, NativePageFactory.isNativePageUrl(url, false)); + if (isValidInIncognito(urlCombo)) { + Assert.assertTrue(url, NativePageFactory.isNativePageUrl(url, true)); + } + } + } + + /** + * Ensures that NativePageFactory.isNativePageUrl() returns false for URLs that don't + * correspond to a native page. + */ + @Test + public void testNegativeIsNativePageUrl() { + for (String invalidUrl : INVALID_URLS) { + Assert.assertFalse(invalidUrl, NativePageFactory.isNativePageUrl(invalidUrl, false)); + Assert.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. + */ + @Test + public void testCreateNativePage() { + 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); + Assert.assertNotNull(debugMessage, page); + Assert.assertEquals(debugMessage, 1, page.updateForUrlCalls); + Assert.assertEquals(debugMessage, urlCombo.expectedType, page.type); + if (candidateType == urlCombo.expectedType) { + Assert.assertSame(debugMessage, candidate, page); + } else { + Assert.assertNotSame(debugMessage, candidate, page); + } + } + } + } + } + + /** + * Ensures that NativePageFactory.createNativePageForURL() returns null for URLs that don't + * correspond to a native page. + */ + @Test + public void testCreateNativePageWithInvalidUrl() { + for (UrlCombo urlCombo : VALID_URLS) { + if (!isValidInIncognito(urlCombo)) { + Assert.assertNull(urlCombo.url, NativePageFactory.createNativePageForURL( + urlCombo.url, null, null, null, null, true)); + } + } + for (boolean isIncognito : new boolean[] {true, false}) { + for (String invalidUrl : INVALID_URLS) { + Assert.assertNull(invalidUrl, NativePageFactory.createNativePageForURL(invalidUrl, + null, null, null, null, isIncognito)); + } + } + } +} -- cgit v1.1