Commit 76b70285 authored by Matthew Jones's avatar Matthew Jones Committed by Commit Bot

Attempt to deflake TabsTest#testToolbarSwipePrevTab*

This patch updated the toolbar swipe tests to not depend on criteria
helpers and operate on about:blank pages rather than the ntp. Most
importantly, this fixes an issue where we assert tab selection before
waiting for the callback.

Bug: 813584
Change-Id: I1e743291add6398bc3eebc06c03c6c69cefc21f9
Reviewed-on: https://chromium-review.googlesource.com/1044538Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Commit-Queue: Matthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556240}
parent e149db1b
......@@ -36,11 +36,11 @@ import org.chromium.base.test.util.Restriction;
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.base.test.util.UrlUtils;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone;
import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver;
import org.chromium.chrome.browser.compositor.layouts.StaticLayout;
import org.chromium.chrome.browser.compositor.layouts.components.LayoutTab;
import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler;
......@@ -50,14 +50,13 @@ import org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack;
import org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.tabmodel.TabbedModeTabPersistencePolicy;
import org.chromium.chrome.browser.toolbar.ToolbarPhone;
......@@ -78,6 +77,7 @@ import org.chromium.content.common.ContentSwitches;
import org.chromium.content_public.browser.SelectionPopupController;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.WebContentsObserver;
import org.chromium.content_public.common.ContentUrlConstants;
import org.chromium.net.test.EmbeddedTestServer;
import org.chromium.ui.test.util.UiRestriction;
......@@ -155,7 +155,7 @@ public class TabsTest {
|| mActivityTestRule.getName().equals("testIncognitoTabsNotRestoredAfterSwipe")) {
return;
}
mActivityTestRule.startMainActivityFromLauncher();
mActivityTestRule.startMainActivityOnBlankPage();
}
......@@ -1558,8 +1558,8 @@ public class TabsTest {
@Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
@RetryOnFailure
public void testToolbarSwipeNextThenPrevTab() throws InterruptedException, TimeoutException {
ChromeTabUtils.newTabFromMenu(
InstrumentationRegistry.getInstrumentation(), mActivityTestRule.getActivity());
ChromeTabUtils.fullyLoadUrlInNewTab(InstrumentationRegistry.getInstrumentation(),
mActivityTestRule.getActivity(), ContentUrlConstants.ABOUT_BLANK_URL, false);
ChromeTabUtils.switchTabInCurrentTabModel(mActivityTestRule.getActivity(), 0);
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
......@@ -1580,8 +1580,10 @@ public class TabsTest {
@RetryOnFailure
public void testToolbarSwipeNextThenPrevTabIncognito()
throws InterruptedException, TimeoutException {
mActivityTestRule.newIncognitoTabFromMenu();
mActivityTestRule.newIncognitoTabFromMenu();
ChromeTabUtils.fullyLoadUrlInNewTab(InstrumentationRegistry.getInstrumentation(),
mActivityTestRule.getActivity(), ContentUrlConstants.ABOUT_BLANK_URL, true);
ChromeTabUtils.fullyLoadUrlInNewTab(InstrumentationRegistry.getInstrumentation(),
mActivityTestRule.getActivity(), ContentUrlConstants.ABOUT_BLANK_URL, true);
ChromeTabUtils.switchTabInCurrentTabModel(mActivityTestRule.getActivity(), 0);
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
......@@ -1598,40 +1600,41 @@ public class TabsTest {
private void runToolbarSideSwipeTestOnCurrentModel(ScrollDirection direction, int finalIndex,
boolean expectsSelection) throws InterruptedException, TimeoutException {
final CallbackHelper selectCallback = new CallbackHelper();
final int id =
mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(finalIndex).getId();
final TabModelObserver observer = new EmptyTabModelObserver() {
final ChromeTabbedActivity activity = mActivityTestRule.getActivity();
final int id = activity.getCurrentTabModel().getTabAt(finalIndex).getId();
final TabModelSelectorTabModelObserver observer = new TabModelSelectorTabModelObserver(
activity.getTabModelSelector()) {
@Override
public void didSelectTab(Tab tab, TabSelectionType type, int lastId) {
if (tab.getId() == id) selectCallback.notifyCalled();
}
};
if (expectsSelection) {
ThreadUtils.runOnUiThreadBlocking(() -> {
TabModelSelector selector = mActivityTestRule.getActivity().getTabModelSelector();
for (TabModel tabModel : selector.getModels()) {
tabModel.addObserver(observer);
// Listen for changes in the layout to indicate the swipe has completed.
final CallbackHelper staticLayoutCallbackHelper = new CallbackHelper();
activity.getCompositorViewHolder().getLayoutManager().addSceneChangeObserver(
new SceneChangeObserver() {
@Override
public void onTabSelectionHinted(int tabId) {}
@Override
public void onSceneChange(Layout layout) {
if (layout instanceof StaticLayout) {
staticLayoutCallbackHelper.notifyCalled();
}
});
}
});
int callCount = staticLayoutCallbackHelper.getCallCount();
performToolbarSideSwipe(direction);
waitForStaticLayout();
Assert.assertEquals("Index after toolbar side swipe is incorrect", finalIndex,
mActivityTestRule.getActivity().getCurrentTabModel().index());
staticLayoutCallbackHelper.waitForCallback(callCount, 1);
if (expectsSelection) {
selectCallback.waitForCallback(0);
ThreadUtils.runOnUiThreadBlocking(() -> {
TabModelSelector selector = mActivityTestRule.getActivity().getTabModelSelector();
for (TabModel tabModel : selector.getModels()) {
tabModel.removeObserver(observer);
}
});
}
}
if (expectsSelection) selectCallback.waitForCallback(0);
ThreadUtils.runOnUiThreadBlocking(() -> observer.destroy());
Assert.assertEquals("Index after toolbar side swipe is incorrect", finalIndex,
activity.getCurrentTabModel().index());
}
private void performToolbarSideSwipe(ScrollDirection direction) {
Assert.assertTrue("Unexpected direction for side swipe " + direction,
......@@ -1653,21 +1656,6 @@ public class TabsTest {
TouchCommon.dragEnd(mActivityTestRule.getActivity(), toX, y, downTime);
}
private void waitForStaticLayout() throws InterruptedException {
CriteriaHelper.pollUiThread(
new Criteria("Static Layout never selected after side swipe") {
@Override
public boolean isSatisfied() {
CompositorViewHolder compositorViewHolder =
(CompositorViewHolder) mActivityTestRule.getActivity().findViewById(
R.id.compositor_view_holder);
LayoutManager layoutManager = compositorViewHolder.getLayoutManager();
return layoutManager.getActiveLayout() instanceof StaticLayout;
}
});
}
/**
* Test that swipes and tab transitions are not causing URL bar to be focused.
*/
......
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