Commit 24ef8c65 authored by Wei-Yin Chen (陳威尹)'s avatar Wei-Yin Chen (陳威尹) Committed by Commit Bot

Clean up tab-creating test helpers for sharing

The test helpers will be moved to TabUiTestHelper for easier reuse.

Bug: 983170
Change-Id: I6266e4599028258e97c0c69238f09293fc42cff2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1904824Reviewed-by: default avatarYue Zhang <yuezhanggg@chromium.org>
Reviewed-by: default avatarMei Liang <meiliang@chromium.org>
Commit-Queue: Wei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713948}
parent f67a7344
...@@ -311,77 +311,89 @@ public class StartSurfaceLayoutTest { ...@@ -311,77 +311,89 @@ public class StartSurfaceLayoutTest {
/** /**
* Make Chrome have {@code numTabs} of regular Tabs and {@code numIncognitoTabs} of incognito * Make Chrome have {@code numTabs} of regular Tabs and {@code numIncognitoTabs} of incognito
* tabs with {@code url} loaded. * tabs with {@code url} loaded, and assert no bitmap fetching occurred.
* *
* @param numTabs The number of regular tabs. * @param numTabs The number of regular tabs.
* @param numIncognitoTabs The number of incognito tabs. * @param numIncognitoTabs The number of incognito tabs.
* @param url The URL to load. * @param url The URL to load.
*/ */
private void prepareTabs(int numTabs, int numIncognitoTabs, @Nullable String url) { private void prepareTabs(int numTabs, int numIncognitoTabs, @Nullable String url) {
int oldCount = mTabListDelegate.getBitmapFetchCountForTesting();
prepareTabsWithThumbnail(mActivityTestRule, numTabs, numIncognitoTabs, url);
assertEquals(0, mTabListDelegate.getBitmapFetchCountForTesting() - oldCount);
}
/**
* Make Chrome have {@code numTabs} of regular Tabs and {@code numIncognitoTabs} of incognito
* tabs with {@code url} loaded.
* @param rule The {@link ChromeTabbedActivityTestRule}.
* @param numTabs The number of regular tabs.
* @param numIncognitoTabs The number of incognito tabs.
* @param url The URL to load.
*/
private static void prepareTabsWithThumbnail(ChromeTabbedActivityTestRule rule, int numTabs,
int numIncognitoTabs, @Nullable String url) {
assertTrue(numTabs >= 1); assertTrue(numTabs >= 1);
assertTrue(numIncognitoTabs >= 0); assertTrue(numIncognitoTabs >= 0);
int oldCount = mTabListDelegate.getBitmapFetchCountForTesting(); assertEquals(1, rule.getActivity().getTabModelSelector().getModel(false).getCount());
assertEquals(1, assertEquals(0, rule.getActivity().getTabModelSelector().getModel(true).getCount());
mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount());
assertEquals(
0, mActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount());
if (numTabs == 1) { if (url != null) rule.loadUrl(url);
if (url != null) mActivityTestRule.loadUrl(url); if (numTabs > 1) {
} else {
// When Chrome started, there is already one Tab created by default. // When Chrome started, there is already one Tab created by default.
createTabs(numTabs - 1, url, true, false); createTabsWithThumbnail(rule, numTabs - 1, url, false);
} }
if (numIncognitoTabs > 0) createTabs(numIncognitoTabs, url, true, true); if (numIncognitoTabs > 0) createTabsWithThumbnail(rule, numIncognitoTabs, url, true);
assertEquals(numTabs, assertEquals(numTabs, rule.getActivity().getTabModelSelector().getModel(false).getCount());
mActivityTestRule.getActivity().getTabModelSelector().getModel(false).getCount());
assertEquals(numIncognitoTabs, assertEquals(numIncognitoTabs,
mActivityTestRule.getActivity().getTabModelSelector().getModel(true).getCount()); rule.getActivity().getTabModelSelector().getModel(true).getCount());
assertEquals(0, mTabListDelegate.getBitmapFetchCountForTesting() - oldCount); if (url != null) {
verifyAllTabsHaveUrl(rule.getActivity().getTabModelSelector().getModel(false), url);
verifyAllTabsHaveUrl(rule.getActivity().getTabModelSelector().getModel(true), url);
}
}
private static void verifyAllTabsHaveUrl(TabModel tabModel, String url) {
for (int i = 0; i < tabModel.getCount(); i++) {
assertEquals(url, tabModel.getTabAt(i).getUrl());
}
} }
/** /**
* When Chrome started, there is already one Tab created by default. This method is used to add * Create {@code numTabs} of {@link Tab}s with {@code url} loaded to Chrome.
* additional {@code numTabs} of {@link Tab}s with {@code url} loaded to Chrome. * Note that if the test doesn't care about thumbnail, use {@link TabUiTestHelper#createTabs}
* instead since it's faster.
*
* @param rule The {@link ChromeTabbedActivityTestRule}.
* @param numTabs The number of tabs to create. * @param numTabs The number of tabs to create.
* @param url The URL to load. Skip loading when null, but the thumbnail for the NTP might not * @param url The URL to load. Skip loading when null, but the thumbnail for the NTP might not
* be saved. * be saved.
* @param waitForLoading Whether wait for URL loading.
* @param isIncognito Whether the tab is incognito tab. * @param isIncognito Whether the tab is incognito tab.
*/ */
private void createTabs( private static void createTabsWithThumbnail(ChromeTabbedActivityTestRule rule, int numTabs,
int numTabs, @Nullable String url, boolean waitForLoading, boolean isIncognito) { @Nullable String url, boolean isIncognito) {
assertTrue(numTabs >= 1); assertTrue(numTabs >= 1);
if (url != null) mActivityTestRule.loadUrl(url); int previousTabCount =
rule.getActivity().getTabModelSelector().getModel(isIncognito).getCount();
int previousTabCount = mActivityTestRule.getActivity()
.getTabModelSelector()
.getModel(isIncognito)
.getCount();
for (int i = 0; i < numTabs; i++) { for (int i = 0; i < numTabs; i++) {
TabModel previousTabModel = TabModel previousTabModel = rule.getActivity().getTabModelSelector().getCurrentModel();
mActivityTestRule.getActivity().getTabModelSelector().getCurrentModel();
int previousTabIndex = previousTabModel.index(); int previousTabIndex = previousTabModel.index();
Tab previousTab = previousTabModel.getTabAt(previousTabIndex); Tab previousTab = previousTabModel.getTabAt(previousTabIndex);
ChromeTabUtils.newTabFromMenu(InstrumentationRegistry.getInstrumentation(), ChromeTabUtils.newTabFromMenu(InstrumentationRegistry.getInstrumentation(),
mActivityTestRule.getActivity(), isIncognito, waitForLoading); rule.getActivity(), isIncognito, true);
if (url != null) mActivityTestRule.loadUrl(url); if (url != null) rule.loadUrl(url);
if (!waitForLoading) continue;
TabModel currentTabModel = TabModel currentTabModel = rule.getActivity().getTabModelSelector().getCurrentModel();
mActivityTestRule.getActivity().getTabModelSelector().getCurrentModel();
int currentTabIndex = currentTabModel.index(); int currentTabIndex = currentTabModel.index();
boolean fixPendingReadbacks = mActivityTestRule.getActivity() boolean fixPendingReadbacks =
.getTabContentManager() rule.getActivity().getTabContentManager().getPendingReadbacksForTesting() != 0;
.getPendingReadbacksForTesting()
!= 0;
// When there are pending readbacks due to detached Tabs, try to fix it by switching // When there are pending readbacks due to detached Tabs, try to fix it by switching
// back to that tab. // back to that tab.
...@@ -404,24 +416,14 @@ public class StartSurfaceLayoutTest { ...@@ -404,24 +416,14 @@ public class StartSurfaceLayoutTest {
} }
} }
ChromeTabUtils.waitForTabPageLoaded(mActivityTestRule.getActivity().getActivityTab(), null, ChromeTabUtils.waitForTabPageLoaded(
null, WAIT_TIMEOUT_SECONDS * 10); rule.getActivity().getActivityTab(), null, null, WAIT_TIMEOUT_SECONDS * 10);
assertEquals(numTabs + previousTabCount, assertEquals(numTabs + previousTabCount,
mActivityTestRule.getActivity() rule.getActivity().getTabModelSelector().getModel(isIncognito).getCount());
.getTabModelSelector()
.getModel(isIncognito)
.getCount());
if (waitForLoading) { CriteriaHelper.pollUiThread(Criteria.equals(0,
// clang-format off () -> rule.getActivity().getTabContentManager().getPendingReadbacksForTesting()));
CriteriaHelper.pollUiThread(Criteria.equals(0, () ->
mActivityTestRule.getActivity()
.getTabContentManager()
.getPendingReadbacksForTesting()
));
// clang-format on
}
} }
private void testTabToGrid(String fromUrl) throws InterruptedException { private void testTabToGrid(String fromUrl) throws InterruptedException {
...@@ -476,10 +478,12 @@ public class StartSurfaceLayoutTest { ...@@ -476,10 +478,12 @@ public class StartSurfaceLayoutTest {
if (!isEmulator()) return; if (!isEmulator()) return;
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
mActivityTestRule.loadUrl(mUrl);
// Quickly create some tabs, navigate to web pages, and don't wait for thumbnail // Quickly create some tabs, navigate to web pages, and don't wait for thumbnail
// capturing. // capturing.
createTabs(1, mUrl, false, false); mActivityTestRule.loadUrl(mUrl);
ChromeTabUtils.newTabFromMenu(InstrumentationRegistry.getInstrumentation(),
mActivityTestRule.getActivity(), false, false);
mActivityTestRule.loadUrl(mUrl);
// Hopefully we are in a state where some pending readbacks are stuck because their tab // Hopefully we are in a state where some pending readbacks are stuck because their tab
// is not attached to the view. // is not attached to the view.
if (mActivityTestRule.getActivity() if (mActivityTestRule.getActivity()
...@@ -859,7 +863,7 @@ public class StartSurfaceLayoutTest { ...@@ -859,7 +863,7 @@ public class StartSurfaceLayoutTest {
Criteria.equals(expectedDelta, () -> getCaptureCount() - initCount)); Criteria.equals(expectedDelta, () -> getCaptureCount() - initCount));
} }
private void checkThumbnailsExist(Tab tab) { private static void checkThumbnailsExist(Tab tab) {
File etc1File = TabContentManager.getTabThumbnailFileEtc1(tab); File etc1File = TabContentManager.getTabThumbnailFileEtc1(tab);
CriteriaHelper.pollInstrumentationThread(etc1File::exists, CriteriaHelper.pollInstrumentationThread(etc1File::exists,
"The thumbnail " + etc1File.getName() + " is not found", "The thumbnail " + etc1File.getName() + " is not found",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment